diff --git a/Shower/QTilde/Base/ShowerParticle.cc b/Shower/QTilde/Base/ShowerParticle.cc --- a/Shower/QTilde/Base/ShowerParticle.cc +++ b/Shower/QTilde/Base/ShowerParticle.cc @@ -1,586 +1,584 @@ // -*- C++ -*- // // ShowerParticle.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 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 ShowerParticle class. // #include "ShowerParticle.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include using namespace Herwig; PPtr ShowerParticle::clone() const { return new_ptr(*this); } PPtr ShowerParticle::fullclone() const { return new_ptr(*this); } ClassDescription ShowerParticle::initShowerParticle; // Definition of the static class description member. void ShowerParticle::vetoEmission(ShowerPartnerType, Energy scale) { scales_.QED = min(scale,scales_.QED ); scales_.QED_noAO = min(scale,scales_.QED_noAO ); scales_.QCD_c = min(scale,scales_.QCD_c ); scales_.QCD_c_noAO = min(scale,scales_.QCD_c_noAO ); scales_.QCD_ac = min(scale,scales_.QCD_ac ); scales_.QCD_ac_noAO = min(scale,scales_.QCD_ac_noAO); scales_.EW = min(scale,scales_.EW ); if(spinInfo()) spinInfo()->undecay(); } void ShowerParticle::addPartner(EvolutionPartner in ) { partners_.push_back(in); } namespace { LorentzRotation boostToShower(Lorentz5Momentum & porig, tShowerBasisPtr basis) { LorentzRotation output; assert(basis); if(basis->frame()==ShowerBasis::BackToBack) { // we are doing the evolution in the back-to-back frame // work out the boostvector Boost boostv(-(basis->pVector()+basis->nVector()).boostVector()); // momentum of the parton Lorentz5Momentum ptest(basis->pVector()); // construct the Lorentz boost output = LorentzRotation(boostv); ptest *= output; Axis axis(ptest.vect().unit()); // now rotate so along the z axis as needed for the splitting functions if(axis.perp2()>1e-10) { double sinth(sqrt(1.-sqr(axis.z()))); output.rotate(-acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.)); } else if(axis.z()<0.) { output.rotate(Constants::pi,Axis(1.,0.,0.)); } porig = output*basis->pVector(); porig.setX(ZERO); porig.setY(ZERO); } else { output = LorentzRotation(-basis->pVector().boostVector()); porig = output*basis->pVector(); porig.setX(ZERO); porig.setY(ZERO); porig.setZ(ZERO); } return output; } RhoDMatrix bosonMapping(ShowerParticle & particle, const Lorentz5Momentum & porig, VectorSpinPtr vspin, const LorentzRotation & rot, Helicity::Direction dir) { // rotate the original basis vector sbasis; for(unsigned int ix=0;ix<3;++ix) { sbasis.push_back(vspin->getProductionBasisState(ix)); sbasis.back().transform(rot); } // splitting basis vector fbasis; bool massless(particle.id()==ParticleID::g||particle.id()==ParticleID::gamma); VectorWaveFunction wave(porig,particle.dataPtr(),dir==outgoing ? incoming : outgoing); for(unsigned int ix=0;ix<3;++ix) { if(massless&&ix==1) { fbasis.push_back(LorentzPolarizationVector()); } else { wave.reset(ix,vector_phase); fbasis.push_back(wave.wave()); } } // work out the mapping RhoDMatrix mapping=RhoDMatrix(PDT::Spin1,false); for(unsigned int ix=0;ix<3;++ix) { for(unsigned int iy=0;iy<3;++iy) { mapping(ix,iy)= -conj(sbasis[ix].dot(fbasis[iy])); if(particle.id()<0) mapping(ix,iy)=conj(mapping(ix,iy)); } } return mapping; } RhoDMatrix fermionMapping(ShowerParticle & particle, const Lorentz5Momentum & porig, FermionSpinPtr fspin, const LorentzRotation & rot) { // extract the original basis states vector > sbasis; for(unsigned int ix=0;ix<2;++ix) { sbasis.push_back(fspin->getProductionBasisState(ix)); sbasis.back().transform(rot); } // calculate the states in the splitting basis vector > fbasis; SpinorWaveFunction wave(porig,particle.dataPtr(), particle.id()>0 ? incoming : outgoing); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); fbasis.push_back(wave.dimensionedWave()); } RhoDMatrix mapping=RhoDMatrix(PDT::Spin1Half,false); for(unsigned int ix=0;ix<2;++ix) { if(fbasis[0].s2()==complex()) { mapping(ix,0) = sbasis[ix].s3()/fbasis[0].s3(); mapping(ix,1) = sbasis[ix].s2()/fbasis[1].s2(); } else { mapping(ix,0) = sbasis[ix].s2()/fbasis[0].s2(); mapping(ix,1) = sbasis[ix].s3()/fbasis[1].s3(); } } return mapping; } FermionSpinPtr createFermionSpinInfo(ShowerParticle & particle, const Lorentz5Momentum & porig, const LorentzRotation & rot, Helicity::Direction dir) { // calculate the splitting basis for the branching // and rotate back to construct the basis states LorentzRotation rinv = rot.inverse(); SpinorWaveFunction wave; if(particle.id()>0) wave=SpinorWaveFunction(porig,particle.dataPtr(),incoming); else wave=SpinorWaveFunction(porig,particle.dataPtr(),outgoing); FermionSpinPtr fspin = new_ptr(FermionSpinInfo(particle.momentum(),dir==outgoing)); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); LorentzSpinor basis = wave.dimensionedWave(); basis.transform(rinv); fspin->setBasisState(ix,basis); - fspin->setDecayState(ix,basis); } particle.spinInfo(fspin); return fspin; } VectorSpinPtr createVectorSpinInfo(ShowerParticle & particle, const Lorentz5Momentum & porig, const LorentzRotation & rot, Helicity::Direction dir) { // calculate the splitting basis for the branching // and rotate back to construct the basis states LorentzRotation rinv = rot.inverse(); bool massless(particle.id()==ParticleID::g||particle.id()==ParticleID::gamma); VectorWaveFunction wave(porig,particle.dataPtr(),dir); VectorSpinPtr vspin = new_ptr(VectorSpinInfo(particle.momentum(),dir==outgoing)); for(unsigned int ix=0;ix<3;++ix) { LorentzPolarizationVector basis; if(massless&&ix==1) { basis = LorentzPolarizationVector(); } else { wave.reset(ix,vector_phase); basis = wave.wave(); } basis *= rinv; vspin->setBasisState(ix,basis); - vspin->setDecayState(ix,basis); } particle.spinInfo(vspin); vspin-> DMatrix() = RhoDMatrix(PDT::Spin1); vspin->rhoMatrix() = RhoDMatrix(PDT::Spin1); if(massless) { vspin-> DMatrix()(0,0) = 0.5; vspin->rhoMatrix()(0,0) = 0.5; vspin-> DMatrix()(2,2) = 0.5; vspin->rhoMatrix()(2,2) = 0.5; } return vspin; } } RhoDMatrix ShowerParticle::extractRhoMatrix(bool forward) { // get the spin density matrix and the mapping RhoDMatrix mapping; SpinPtr inspin; bool needMapping = getMapping(inspin,mapping); // set the decayed flag inspin->decay(); // get the spin density matrix RhoDMatrix rho = forward ? inspin->rhoMatrix() : inspin->DMatrix(); // map to the shower basis if needed if(needMapping) { RhoDMatrix rhop(rho.iSpin(),false); for(int ixb=0;ixbperturbative()) { // mapping is the identity output=this->spinInfo(); mapping=RhoDMatrix(this->dataPtr()->iSpin()); if(output) { return false; } else { Lorentz5Momentum porig; LorentzRotation rot = boostToShower(porig,showerBasis()); Helicity::Direction dir = this->isFinalState() ? outgoing : incoming; if(this->dataPtr()->iSpin()==PDT::Spin0) { assert(false); } else if(this->dataPtr()->iSpin()==PDT::Spin1Half) { output = createFermionSpinInfo(*this,porig,rot,dir); } else if(this->dataPtr()->iSpin()==PDT::Spin1) { output = createVectorSpinInfo(*this,porig,rot,dir); } else { assert(false); } return false; } } // if particle is final-state and is from the hard process else if(this->isFinalState()) { assert(this->perturbative()==1 || this->perturbative()==2); // get transform to shower frame Lorentz5Momentum porig; LorentzRotation rot = boostToShower(porig,showerBasis()); // the rest depends on the spin of the particle PDT::Spin spin(this->dataPtr()->iSpin()); mapping=RhoDMatrix(spin,false); // do the spin dependent bit if(spin==PDT::Spin0) { ScalarSpinPtr sspin=dynamic_ptr_cast(this->spinInfo()); if(!sspin) { ScalarWaveFunction::constructSpinInfo(this,outgoing,true); } output=this->spinInfo(); return false; } else if(spin==PDT::Spin1Half) { FermionSpinPtr fspin=dynamic_ptr_cast(this->spinInfo()); // spin info exists get information from it if(fspin) { output=fspin; mapping = fermionMapping(*this,porig,fspin,rot); return true; } // spin info does not exist create it else { output = createFermionSpinInfo(*this,porig,rot,outgoing); return false; } } else if(spin==PDT::Spin1) { VectorSpinPtr vspin=dynamic_ptr_cast(this->spinInfo()); // spin info exists get information from it if(vspin) { output=vspin; mapping = bosonMapping(*this,porig,vspin,rot,outgoing); return true; } else { output = createVectorSpinInfo(*this,porig,rot,outgoing); return false; } } // not scalar/fermion/vector else assert(false); } // incoming to hard process else if(this->perturbative()==1 && !this->isFinalState()) { // get the basis vectors // get transform to shower frame Lorentz5Momentum porig; LorentzRotation rot = boostToShower(porig,showerBasis()); porig *= this->x(); // the rest depends on the spin of the particle PDT::Spin spin(this->dataPtr()->iSpin()); mapping=RhoDMatrix(spin); // do the spin dependent bit if(spin==PDT::Spin0) { cerr << "testing spin 0 not yet implemented " << endl; assert(false); } // spin-1/2 else if(spin==PDT::Spin1Half) { FermionSpinPtr fspin=dynamic_ptr_cast(this->spinInfo()); // spin info exists get information from it if(fspin) { output=fspin; mapping = fermionMapping(*this,porig,fspin,rot); return true; } // spin info does not exist create it else { output = createFermionSpinInfo(*this,porig,rot,incoming); return false; } } // spin-1 else if(spin==PDT::Spin1) { VectorSpinPtr vspin=dynamic_ptr_cast(this->spinInfo()); // spinInfo exists map it if(vspin) { output=vspin; mapping = bosonMapping(*this,porig,vspin,rot,incoming); return true; } // create the spininfo else { output = createVectorSpinInfo(*this,porig,rot,incoming); return false; } } assert(false); } // incoming to decay else if(this->perturbative() == 2 && !this->isFinalState()) { // get the basis vectors Lorentz5Momentum porig; LorentzRotation rot=boostToShower(porig,showerBasis()); // the rest depends on the spin of the particle PDT::Spin spin(this->dataPtr()->iSpin()); mapping=RhoDMatrix(spin); // do the spin dependent bit if(spin==PDT::Spin0) { cerr << "testing spin 0 not yet implemented " << endl; assert(false); } // spin-1/2 else if(spin==PDT::Spin1Half) { // FermionSpinPtr fspin=dynamic_ptr_cast(this->spinInfo()); // // spin info exists get information from it // if(fspin) { // output=fspin; // mapping = fermionMapping(*this,porig,fspin,rot); // return true; // // spin info does not exist create it // else { // output = createFermionSpinInfo(*this,porig,rot,incoming); // return false; // } // } assert(false); } // // spin-1 // else if(spin==PDT::Spin1) { // VectorSpinPtr vspin=dynamic_ptr_cast(this->spinInfo()); // // spinInfo exists map it // if(vspin) { // output=vspin; // mapping = bosonMapping(*this,porig,vspin,rot); // return true; // } // // create the spininfo // else { // output = createVectorSpinInfo(*this,porig,rot,incoming); // return false; // } // } // assert(false); assert(false); } else assert(false); return true; } void ShowerParticle::constructSpinInfo(bool timeLike) { // now construct the required spininfo and calculate the basis states PDT::Spin spin(dataPtr()->iSpin()); if(spin==PDT::Spin0) { ScalarWaveFunction::constructSpinInfo(this,outgoing,timeLike); } // calculate the basis states and construct the SpinInfo for a spin-1/2 particle else if(spin==PDT::Spin1Half) { // outgoing particle if(id()>0) { vector > stemp; SpinorBarWaveFunction::calculateWaveFunctions(stemp,this,outgoing); SpinorBarWaveFunction::constructSpinInfo(stemp,this,outgoing,timeLike); } // outgoing antiparticle else { vector > stemp; SpinorWaveFunction::calculateWaveFunctions(stemp,this,outgoing); SpinorWaveFunction::constructSpinInfo(stemp,this,outgoing,timeLike); } } // calculate the basis states and construct the SpinInfo for a spin-1 particle else if(spin==PDT::Spin1) { bool massless(id()==ParticleID::g||id()==ParticleID::gamma); vector vtemp; VectorWaveFunction::calculateWaveFunctions(vtemp,this,outgoing,massless,vector_phase); VectorWaveFunction::constructSpinInfo(vtemp,this,outgoing,timeLike,massless); } else { throw Exception() << "Spins higher than 1 are not yet implemented in " << "FS_QtildaShowerKinematics1to2::constructVertex() " << Exception::runerror; } } void ShowerParticle::initializeDecay() { Lorentz5Momentum p, n, ppartner, pcm; assert(perturbative()!=1); // this is for the initial decaying particle if(perturbative()==2) { ShowerBasisPtr newBasis; p = momentum(); Lorentz5Momentum ppartner(partner()->momentum()); // removed to make inverse recon work properly //if(partner->thePEGBase()) ppartner=partner->thePEGBase()->momentum(); pcm=ppartner; Boost boost(p.findBoostToCM()); pcm.boost(boost); n = Lorentz5Momentum( ZERO,0.5*p.mass()*pcm.vect().unit()); n.boost( -boost); newBasis = new_ptr(ShowerBasis()); newBasis->setBasis(p,n,ShowerBasis::Rest); showerBasis(newBasis,false); } else { showerBasis(dynamic_ptr_cast(parents()[0])->showerBasis(),true); } } void ShowerParticle::initializeInitialState(PPtr parent) { // For the time being we are considering only 1->2 branching Lorentz5Momentum p, n, pthis, pcm; assert(perturbative()!=2); if(perturbative()==1) { ShowerBasisPtr newBasis; // find the partner and its momentum if(!partner()) return; if(partner()->isFinalState()) { Lorentz5Momentum pa = -momentum()+partner()->momentum(); Lorentz5Momentum pb = momentum(); Energy scale=parent->momentum().t(); Lorentz5Momentum pbasis(ZERO,parent->momentum().vect().unit()*scale); Axis axis(pa.vect().unit()); LorentzRotation rot; double sinth(sqrt(sqr(axis.x())+sqr(axis.y()))); if(axis.perp2()>1e-20) { rot.setRotate(-acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.)); rot.rotateX(Constants::pi); } if(abs(1.-pa.e()/pa.vect().mag())>1e-6) rot.boostZ( pa.e()/pa.vect().mag()); pb *= rot; if(pb.perp2()/GeV2>1e-20) { Boost trans = -1./pb.e()*pb.vect(); trans.setZ(0.); rot.boost(trans); } pbasis *=rot; rot.invert(); n = rot*Lorentz5Momentum(ZERO,-pbasis.vect()); p = rot*Lorentz5Momentum(ZERO, pbasis.vect()); } else { pcm = parent->momentum(); p = Lorentz5Momentum(ZERO, pcm.vect()); n = Lorentz5Momentum(ZERO, -pcm.vect()); } newBasis = new_ptr(ShowerBasis()); newBasis->setBasis(p,n,ShowerBasis::BackToBack); showerBasis(newBasis,false); } else { showerBasis(dynamic_ptr_cast(children()[0])->showerBasis(),true); } } void ShowerParticle::initializeFinalState() { // set the basis vectors Lorentz5Momentum p,n; if(perturbative()!=0) { ShowerBasisPtr newBasis; // find the partner() and its momentum if(!partner()) return; Lorentz5Momentum ppartner(partner()->momentum()); // momentum of the emitting particle p = momentum(); Lorentz5Momentum pcm; // if the partner is a final-state particle then the reference // vector is along the partner in the rest frame of the pair if(partner()->isFinalState()) { Boost boost=(p + ppartner).findBoostToCM(); pcm = ppartner; pcm.boost(boost); n = Lorentz5Momentum(ZERO,pcm.vect()); n.boost( -boost); } else if(!partner()->isFinalState()) { // if the partner is an initial-state particle then the reference // vector is along the partner which should be massless if(perturbative()==1) { n = Lorentz5Momentum(ZERO,ppartner.vect()); } // if the partner is an initial-state decaying particle then the reference // vector is along the backwards direction in rest frame of decaying particle else { Boost boost=ppartner.findBoostToCM(); pcm = p; pcm.boost(boost); n = Lorentz5Momentum( ZERO, -pcm.vect()); n.boost( -boost); } } newBasis = new_ptr(ShowerBasis()); newBasis->setBasis(p,n,ShowerBasis::BackToBack); showerBasis(newBasis,false); } else if(initiatesTLS()) { showerBasis(dynamic_ptr_cast(parents()[0]->children()[0])->showerBasis(),true); } else { showerBasis(dynamic_ptr_cast(parents()[0])->showerBasis(),true); } } void ShowerParticle::setShowerMomentum(bool timeLike) { Energy m = this->mass() > ZERO ? this->mass() : this->data().mass(); // calculate the momentum of the assuming on-shell Energy2 pt2 = sqr(this->showerParameters().pt); double alpha = timeLike ? this->showerParameters().alpha : this->x(); double beta = 0.5*(sqr(m) + pt2 - sqr(alpha)*showerBasis()->pVector().m2())/(alpha*showerBasis()->p_dot_n()); Lorentz5Momentum porig=showerBasis()->sudakov2Momentum(alpha,beta, this->showerParameters().ptx, this->showerParameters().pty); porig.setMass(m); this->set5Momentum(porig); } diff --git a/Shower/QTilde/QTildeShowerHandler.cc b/Shower/QTilde/QTildeShowerHandler.cc --- a/Shower/QTilde/QTildeShowerHandler.cc +++ b/Shower/QTilde/QTildeShowerHandler.cc @@ -1,3746 +1,3743 @@ // -*- C++ -*- // // QTildeShowerHandler.cc is a part of Herwig - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2017 The Herwig Collaboration // // Herwig is licenced under version 3 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 QTildeShowerHandler class. // #include "QTildeShowerHandler.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.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" #include "ThePEG/Utilities/EnumIO.h" #include "Herwig/Shower/QTilde/Base/ShowerParticle.h" #include "Herwig/PDF/MPIPDF.h" #include "Herwig/PDF/MinBiasPDF.h" #include "Herwig/Shower/QTilde/Base/ShowerTree.h" #include "Herwig/Shower/QTilde/Base/HardTree.h" #include "Herwig/Shower/QTilde/Base/KinematicsReconstructor.h" #include "Herwig/Shower/QTilde/Base/PartnerFinder.h" #include "Herwig/PDF/HwRemDecayer.h" #include "Herwig/Shower/QTilde/Base/ShowerVertex.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "Herwig/MatrixElement/Matchbox/Base/SubtractedME.h" #include "Herwig/MatrixElement/Matchbox/MatchboxFactory.h" #include "ThePEG/PDF/PartonExtractor.h" #include "Herwig/Shower/RealEmissionProcess.h" using namespace Herwig; bool QTildeShowerHandler::_hardEmissionWarn = true; bool QTildeShowerHandler::_missingTruncWarn = true; QTildeShowerHandler::QTildeShowerHandler() : _maxtry(100), _meCorrMode(1), _reconOpt(0), _hardVetoReadOption(false), _iptrms(ZERO), _beta(0.), _gamma(ZERO), _iptmax(), _limitEmissions(0), _initialenhance(1.), _finalenhance(1.), _nReWeight(100), _reWeight(false), interaction_(ShowerInteraction::QEDQCD), _trunc_Mode(true), _hardEmission(1), _spinOpt(1), _softOpt(2), _hardPOWHEG(false), muPt(ZERO), _maxTryFSR(100000), _maxFailFSR(100), _fracFSR(0.001), _nFSR(0), _nFailedFSR(0) {} QTildeShowerHandler::~QTildeShowerHandler() {} IBPtr QTildeShowerHandler::clone() const { return new_ptr(*this); } IBPtr QTildeShowerHandler::fullclone() const { return new_ptr(*this); } void QTildeShowerHandler::persistentOutput(PersistentOStream & os) const { os << _model << _splittingGenerator << _maxtry << _meCorrMode << _hardVetoReadOption << _limitEmissions << _spinOpt << _softOpt << _hardPOWHEG << ounit(_iptrms,GeV) << _beta << ounit(_gamma,GeV) << ounit(_iptmax,GeV) << _vetoes << _fullShowerVetoes << _nReWeight << _reWeight << _trunc_Mode << _hardEmission << _reconOpt << ounit(muPt,GeV) << oenum(interaction_) << _maxTryFSR << _maxFailFSR << _fracFSR; } void QTildeShowerHandler::persistentInput(PersistentIStream & is, int) { is >> _model >> _splittingGenerator >> _maxtry >> _meCorrMode >> _hardVetoReadOption >> _limitEmissions >> _spinOpt >> _softOpt >> _hardPOWHEG >> iunit(_iptrms,GeV) >> _beta >> iunit(_gamma,GeV) >> iunit(_iptmax,GeV) >> _vetoes >> _fullShowerVetoes >> _nReWeight >> _reWeight >> _trunc_Mode >> _hardEmission >> _reconOpt >> iunit(muPt,GeV) >> ienum(interaction_) >> _maxTryFSR >> _maxFailFSR >> _fracFSR; } // The following static variable is needed for the type // description system in ThePEG. DescribeClass describeHerwigQTildeShowerHandler("Herwig::QTildeShowerHandler", "HwShower.so"); void QTildeShowerHandler::Init() { static ClassDocumentation documentation ("TheQTildeShowerHandler class is the main class" " for the angular-ordered parton shower", "The Shower evolution was performed using an algorithm described in " "\\cite{Marchesini:1983bm,Marchesini:1987cf,Gieseke:2003rz,Bahr:2008pv}.", "%\\cite{Marchesini:1983bm}\n" "\\bibitem{Marchesini:1983bm}\n" " G.~Marchesini and B.~R.~Webber,\n" " ``Simulation Of QCD Jets Including Soft Gluon Interference,''\n" " Nucl.\\ Phys.\\ B {\\bf 238}, 1 (1984).\n" " %%CITATION = NUPHA,B238,1;%%\n" "%\\cite{Marchesini:1987cf}\n" "\\bibitem{Marchesini:1987cf}\n" " G.~Marchesini and B.~R.~Webber,\n" " ``Monte Carlo Simulation of General Hard Processes with Coherent QCD\n" " Radiation,''\n" " Nucl.\\ Phys.\\ B {\\bf 310}, 461 (1988).\n" " %%CITATION = NUPHA,B310,461;%%\n" "%\\cite{Gieseke:2003rz}\n" "\\bibitem{Gieseke:2003rz}\n" " S.~Gieseke, P.~Stephens and B.~Webber,\n" " ``New formalism for QCD parton showers,''\n" " JHEP {\\bf 0312}, 045 (2003)\n" " [arXiv:hep-ph/0310083].\n" " %%CITATION = JHEPA,0312,045;%%\n" ); static Reference interfaceSplitGen("SplittingGenerator", "A reference to the SplittingGenerator object", &Herwig::QTildeShowerHandler::_splittingGenerator, false, false, true, false); static Reference interfaceShowerModel ("ShowerModel", "The pointer to the object which defines the shower evolution model.", &QTildeShowerHandler::_model, false, false, true, false, false); static Parameter interfaceMaxTry ("MaxTry", "The maximum number of attempts to generate the shower from a" " particular ShowerTree", &QTildeShowerHandler::_maxtry, 100, 1, 100000, false, false, Interface::limited); static Parameter interfaceNReWeight ("NReWeight", "The number of attempts for the shower when reweighting", &QTildeShowerHandler::_nReWeight, 100, 10, 10000, false, false, Interface::limited); static Switch ifaceMECorrMode ("MECorrMode", "Choice of the ME Correction Mode", &QTildeShowerHandler::_meCorrMode, 1, false, false); static SwitchOption on (ifaceMECorrMode,"HardPlusSoft","hard+soft on", 1); static SwitchOption hard (ifaceMECorrMode,"Hard","only hard on", 2); static SwitchOption soft (ifaceMECorrMode,"Soft","only soft on", 3); static Switch ifaceHardVetoReadOption ("HardVetoReadOption", "Apply read-in scale veto to all collisions or just the primary one?", &QTildeShowerHandler::_hardVetoReadOption, false, false, false); static SwitchOption AllCollisions (ifaceHardVetoReadOption, "AllCollisions", "Read-in pT veto applied to primary and secondary collisions.", false); static SwitchOption PrimaryCollision (ifaceHardVetoReadOption, "PrimaryCollision", "Read-in pT veto applied to primary but not secondary collisions.", true); static Parameter ifaceiptrms ("IntrinsicPtGaussian", "RMS of intrinsic pT of Gaussian distribution:\n" "2*(1-Beta)*exp(-sqr(intrinsicpT/RMS))/sqr(RMS)", &QTildeShowerHandler::_iptrms, GeV, ZERO, ZERO, 1000000.0*GeV, false, false, Interface::limited); static Parameter ifacebeta ("IntrinsicPtBeta", "Proportion of inverse quadratic distribution in generating intrinsic pT.\n" "(1-Beta) is the proportion of Gaussian distribution", &QTildeShowerHandler::_beta, 0, 0, 1, false, false, Interface::limited); static Parameter ifacegamma ("IntrinsicPtGamma", "Parameter for inverse quadratic:\n" "2*Beta*Gamma/(sqr(Gamma)+sqr(intrinsicpT))", &QTildeShowerHandler::_gamma,GeV, ZERO, ZERO, 100000.0*GeV, false, false, Interface::limited); static Parameter ifaceiptmax ("IntrinsicPtIptmax", "Upper bound on intrinsic pT for inverse quadratic", &QTildeShowerHandler::_iptmax,GeV, ZERO, ZERO, 100000.0*GeV, false, false, Interface::limited); static RefVector ifaceVetoes ("Vetoes", "The vetoes to be checked during showering", &QTildeShowerHandler::_vetoes, -1, false,false,true,true,false); static RefVector interfaceFullShowerVetoes ("FullShowerVetoes", "The vetos to be appliede on the full final state of the shower", &QTildeShowerHandler::_fullShowerVetoes, -1, false, false, true, false, false); static Switch interfaceLimitEmissions ("LimitEmissions", "Limit the number and type of emissions for testing", &QTildeShowerHandler::_limitEmissions, 0, false, false); static SwitchOption interfaceLimitEmissionsNoLimit (interfaceLimitEmissions, "NoLimit", "Allow an arbitrary number of emissions", 0); static SwitchOption interfaceLimitEmissionsOneInitialStateEmission (interfaceLimitEmissions, "OneInitialStateEmission", "Allow one emission in the initial state and none in the final state", 1); static SwitchOption interfaceLimitEmissionsOneFinalStateEmission (interfaceLimitEmissions, "OneFinalStateEmission", "Allow one emission in the final state and none in the initial state", 2); static SwitchOption interfaceLimitEmissionsHardOnly (interfaceLimitEmissions, "HardOnly", "Only allow radiation from the hard ME correction", 3); static SwitchOption interfaceLimitEmissionsOneEmission (interfaceLimitEmissions, "OneEmission", "Allow one emission in either the final state or initial state, but not both", 4); static Switch interfaceTruncMode ("TruncatedShower", "Include the truncated shower?", &QTildeShowerHandler::_trunc_Mode, 1, false, false); static SwitchOption interfaceTruncMode0 (interfaceTruncMode,"No","Truncated Shower is OFF", 0); static SwitchOption interfaceTruncMode1 (interfaceTruncMode,"Yes","Truncated Shower is ON", 1); static Switch interfaceHardEmission ("HardEmission", "Whether to use ME corrections or POWHEG for the hardest emission", &QTildeShowerHandler::_hardEmission, 0, false, false); static SwitchOption interfaceHardEmissionNone (interfaceHardEmission, "None", "No Corrections", 0); static SwitchOption interfaceHardEmissionMECorrection (interfaceHardEmission, "MECorrection", "Old fashioned ME correction", 1); static SwitchOption interfaceHardEmissionPOWHEG (interfaceHardEmission, "POWHEG", "Powheg style hard emission", 2); static Switch interfaceInteractions ("Interactions", "The interactions to be used in the shower", &QTildeShowerHandler::interaction_, ShowerInteraction::QEDQCD, false, false); static SwitchOption interfaceInteractionsQCD (interfaceInteractions, "QCD", "Only QCD radiation", ShowerInteraction::QCD); static SwitchOption interfaceInteractionsQED (interfaceInteractions, "QED", "Only QEd radiation", ShowerInteraction::QED); static SwitchOption interfaceInteractionEWOnly (interfaceInteractions, "EWOnly", "Only EW", ShowerInteraction::EW); static SwitchOption interfaceInteractionQEDQCD (interfaceInteractions, "QEDQCD", "QED and QCD", ShowerInteraction::QEDQCD); static SwitchOption interfaceInteractionALL (interfaceInteractions, "ALL", "QED, QCD and EW", ShowerInteraction::ALL); static Switch interfaceReconstructionOption ("ReconstructionOption", "Treatment of the reconstruction of the transverse momentum of " "a branching from the evolution scale.", &QTildeShowerHandler::_reconOpt, 0, false, false); static SwitchOption interfaceReconstructionOptionCutOff (interfaceReconstructionOption, "CutOff", "Use the cut-off masses in the calculation", 0); static SwitchOption interfaceReconstructionOptionOffShell (interfaceReconstructionOption, "OffShell", "Use the off-shell masses in the calculation veto the emission of the parent," " no veto in generation of emissions from children", 1); static SwitchOption interfaceReconstructionOptionOffShell2 (interfaceReconstructionOption, "OffShell2", "Use the off-shell masses in the calculation veto the emissions from the children." " no veto in generation of emissions from children", 2); static SwitchOption interfaceReconstructionOptionOffShell3 (interfaceReconstructionOption, "OffShell3", "Use the off-shell masses in the calculation veto the emissions from the children." " veto in generation of emissions from children using cut-off for second parton", 3); static SwitchOption interfaceReconstructionOptionOffShell4 (interfaceReconstructionOption, "OffShell4", "As OffShell3 but with a restriction on the mass of final-state" " jets produced via backward evolution.", 4); static SwitchOption interfaceReconstructionOptionOffShell5 (interfaceReconstructionOption, "OffShell5", "Try and preserve q2 but if pt negative just zero it", 5); static Switch interfaceSpinCorrelations ("SpinCorrelations", "Treatment of spin correlations in the parton shower", &QTildeShowerHandler::_spinOpt, 1, false, false); static SwitchOption interfaceSpinCorrelationsNo (interfaceSpinCorrelations, "No", "No spin correlations", 0); static SwitchOption interfaceSpinCorrelationsSpin (interfaceSpinCorrelations, "Yes", "Include the azimuthal spin correlations only", 1); static Switch interfaceSoftCorrelations ("SoftCorrelations", "Option for the treatment of soft correlations in the parton shower", &QTildeShowerHandler::_softOpt, 2, false, false); static SwitchOption interfaceSoftCorrelationsNone (interfaceSoftCorrelations, "No", "No soft correlations", 0); static SwitchOption interfaceSoftCorrelationsFull (interfaceSoftCorrelations, "Full", "Use the full eikonal", 1); static SwitchOption interfaceSoftCorrelationsSingular (interfaceSoftCorrelations, "Singular", "Use original Webber-Marchisini form", 2); static Switch interfaceHardPOWHEG ("HardPOWHEG", "Treatment of powheg emissions which are too hard to have a shower interpretation", &QTildeShowerHandler::_hardPOWHEG, false, false, false); static SwitchOption interfaceHardPOWHEGAsShower (interfaceHardPOWHEG, "AsShower", "Still interpret as shower emissions", false); static SwitchOption interfaceHardPOWHEGRealEmission (interfaceHardPOWHEG, "RealEmission", "Generate shower from the real emmission configuration", true); static Parameter interfaceMaxTryFSR ("MaxTryFSR", "The maximum number of attempted FSR emissions in" " the generation of the FSR", &QTildeShowerHandler::_maxTryFSR, 100000, 10, 100000000, false, false, Interface::limited); static Parameter interfaceMaxFailFSR ("MaxFailFSR", "Maximum number of failures generating the FSR", &QTildeShowerHandler::_maxFailFSR, 100, 1, 100000000, false, false, Interface::limited); static Parameter interfaceFSRFailureFraction ("FSRFailureFraction", "Maximum fraction of events allowed to fail due to too many FSR emissions", &QTildeShowerHandler::_fracFSR, 0.001, 1e-10, 1, false, false, Interface::limited); } tPPair QTildeShowerHandler::cascade(tSubProPtr sub, XCPtr xcomb) { // use me for reference in tex file etc useMe(); prepareCascade(sub); // set things up in the base class resetWeights(); hard_=ShowerTreePtr(); decay_.clear(); done_.clear(); - // check if anything needs doing - if ( !doFSR() && ! doISR() ) - return sub->incoming(); // start of the try block for the whole showering process unsigned int countFailures=0; while (countFailuresoutgoing().begin(), currentSubProcess()->outgoing().end()), hard,decay); ShowerTree::constructTrees(hard_,decay_,hard,decay); // if no hard process if(!hard_) throw Exception() << "Shower starting with a decay" << "is not implemented" << Exception::runerror; // perform the shower for the hard process showerHardProcess(hard_,xcomb); done_.push_back(hard_); hard_->updateAfterShower(decay_); // if no decaying particles to shower break out of the loop if(decay_.empty()) break; // shower the decay products while(!decay_.empty()) { // find particle whose production process has been showered ShowerDecayMap::iterator dit = decay_.begin(); while(!dit->second->parent()->hasShowered() && dit!=decay_.end()) ++dit; assert(dit!=decay_.end()); // get the particle ShowerTreePtr decayingTree = dit->second; // remove it from the multimap decay_.erase(dit); // make sure the particle has been decayed QTildeShowerHandler::decay(decayingTree,decay_); // now shower the decay showerDecay(decayingTree); done_.push_back(decayingTree); decayingTree->updateAfterShower(decay_); } // suceeded break out of the loop break; } catch (KinematicsReconstructionVeto) { resetWeights(); ++countFailures; } catch ( ... ) { hard_=ShowerTreePtr(); decay_.clear(); done_.clear(); throw; } } // if loop exited because of too many tries, throw event away if (countFailures >= maxtry()) { resetWeights(); hard_=ShowerTreePtr(); decay_.clear(); done_.clear(); throw Exception() << "Too many tries for main while loop " << "in QTildeShowerHandler::cascade()." << Exception::eventerror; } //enter the particles in the event record fillEventRecord(); // clear storage hard_=ShowerTreePtr(); decay_.clear(); done_.clear(); // non hadronic case return if (!isResolvedHadron(incomingBeams().first ) && !isResolvedHadron(incomingBeams().second) ) return incomingBeams(); // remake the remnants (needs to be after the colours are sorted // out in the insertion into the event record) if ( firstInteraction() ) return remakeRemnant(sub->incoming()); //Return the new pair of incoming partons. remakeRemnant is not //necessary here, because the secondary interactions are not yet //connected to the remnants. return make_pair(findFirstParton(sub->incoming().first ), findFirstParton(sub->incoming().second)); } void QTildeShowerHandler::fillEventRecord() { // create a new step StepPtr pstep = newStep(); assert(!done_.empty()); assert(done_[0]->isHard()); // insert the steps for(unsigned int ix=0;ixfillEventRecord(pstep,doISR(),doFSR()); } } HardTreePtr QTildeShowerHandler::generateCKKW(ShowerTreePtr ) const { return HardTreePtr(); } void QTildeShowerHandler::doinit() { ShowerHandler::doinit(); // interactions may have been changed through a setup file so we // clear it up here // calculate max no of FSR vetos _maxFailFSR = max(int(_maxFailFSR), int(_fracFSR*double(generator()->N()))); // check on the reweighting for(unsigned int ix=0;ix<_fullShowerVetoes.size();++ix) { if(_fullShowerVetoes[ix]->behaviour()==1) { _reWeight = true; break; } } if(_reWeight && maximumTries()<_nReWeight) { throw Exception() << "Reweight being performed in the shower but the number of attempts for the" << "shower is less than that for the reweighting.\n" << "Maximum number of attempt for the shower " << fullName() << ":MaxTry is " << maximumTries() << "\nand for reweighting is " << fullName() << ":NReWeight is " << _nReWeight << "\n" << "we recommend the number of attempts is 10 times the number for reweighting\n" << Exception::runerror; } ShowerTree::_vmin2 = vMin(); ShowerTree::_spaceTime = includeSpaceTime(); } void QTildeShowerHandler::doinitrun() { ShowerHandler::doinitrun(); ShowerTree::_vmin2 = vMin(); ShowerTree::_spaceTime = includeSpaceTime(); } void QTildeShowerHandler::generateIntrinsicpT(vector particlesToShower) { _intrinsic.clear(); if ( !ipTon() || !doISR() ) return; // don't do anything for the moment for secondary scatters if( !firstInteraction() ) return; // generate intrinsic pT for(unsigned int ix=0;ixprogenitor()->isFinalState()) continue; if(!particlesToShower[ix]->progenitor()->dataPtr()->coloured()) continue; Energy ipt; if(UseRandom::rnd() > _beta) { ipt=_iptrms*sqrt(-log(UseRandom::rnd())); } else { ipt=_gamma*sqrt(pow(1.+sqr(_iptmax/_gamma), UseRandom::rnd())-1.); } pair pt = make_pair(ipt,UseRandom::rnd(Constants::twopi)); _intrinsic[particlesToShower[ix]] = pt; } } void QTildeShowerHandler::setupMaximumScales(const vector & p, XCPtr xcomb) { // let POWHEG events radiate freely if(_hardEmission==2&&hardTree()) { vector::const_iterator ckt = p.begin(); for (; ckt != p.end(); ckt++) (*ckt)->maxHardPt(Constants::MaxEnergy); return; } // return if no vetos if (!restrictPhasespace()) return; // find out if hard partonic subprocess. bool isPartonic(false); map::const_iterator cit = _currenttree->incomingLines().begin(); Lorentz5Momentum pcm; for(; cit!=currentTree()->incomingLines().end(); ++cit) { pcm += cit->first->progenitor()->momentum(); isPartonic |= cit->first->progenitor()->coloured(); } // find minimum pt from hard process, the maximum pt from all outgoing // coloured lines (this is simpler and more general than // 2stu/(s^2+t^2+u^2)). Maximum scale for scattering processes will // be transverse mass. Energy ptmax = generator()->maximumCMEnergy(); // general case calculate the scale if ( !hardScaleIsMuF() || (hardVetoReadOption()&&!firstInteraction()) ) { // scattering process if(currentTree()->isHard()) { assert(xcomb); // coloured incoming particles if (isPartonic) { map::const_iterator cjt = currentTree()->outgoingLines().begin(); for(; cjt!=currentTree()->outgoingLines().end(); ++cjt) { if (cjt->first->progenitor()->coloured()) ptmax = min(ptmax,cjt->first->progenitor()->momentum().mt()); } } if (ptmax == generator()->maximumCMEnergy() ) ptmax = pcm.m(); if(hardScaleIsMuF()&&hardVetoReadOption()&& !firstInteraction()) { ptmax=min(ptmax,sqrt(xcomb->lastShowerScale())); } } // decay, incoming() is the decaying particle. else { ptmax = currentTree()->incomingLines().begin()->first ->progenitor()->momentum().mass(); } } // hepeup.SCALUP is written into the lastXComb by the // LesHouchesReader itself - use this by user's choice. // Can be more general than this. else { if(currentTree()->isHard()) { assert(xcomb); ptmax = sqrt( xcomb->lastShowerScale() ); } else { ptmax = currentTree()->incomingLines().begin()->first ->progenitor()->momentum().mass(); } } ptmax *= hardScaleFactor(); // set maxHardPt for all progenitors. For partonic processes this // is now the max pt in the FS, for non-partonic processes or // processes with no coloured FS the invariant mass of the IS vector::const_iterator ckt = p.begin(); for (; ckt != p.end(); ckt++) (*ckt)->maxHardPt(ptmax); } void QTildeShowerHandler::setupHardScales(const vector & p, XCPtr xcomb) { if ( hardScaleIsMuF() && (!hardVetoReadOption() || firstInteraction()) ) { Energy hardScale = ZERO; if(currentTree()->isHard()) { assert(xcomb); hardScale = sqrt( xcomb->lastShowerScale() ); } else { hardScale = currentTree()->incomingLines().begin()->first ->progenitor()->momentum().mass(); } hardScale *= hardScaleFactor(); vector::const_iterator ckt = p.begin(); for (; ckt != p.end(); ckt++) (*ckt)->hardScale(hardScale); muPt = hardScale; } } void QTildeShowerHandler::showerHardProcess(ShowerTreePtr hard, XCPtr xcomb) { _hardme = HwMEBasePtr(); // extract the matrix element tStdXCombPtr lastXC = dynamic_ptr_cast(xcomb); if(lastXC) { _hardme = dynamic_ptr_cast(lastXC->matrixElement()); } _decayme = HwDecayerBasePtr(); // set the current tree currentTree(hard); hardTree(HardTreePtr()); // work out the type of event currentTree()->xcombPtr(dynamic_ptr_cast(xcomb)); currentTree()->identifyEventType(); checkFlags(); // generate the showering doShowering(true,xcomb); } RealEmissionProcessPtr QTildeShowerHandler::hardMatrixElementCorrection(bool hard) { // set the initial enhancement factors for the soft correction _initialenhance = 1.; _finalenhance = 1.; // see if we can get the correction from the matrix element // or decayer RealEmissionProcessPtr real; if(hard) { if(_hardme&&_hardme->hasMECorrection()) { _hardme->initializeMECorrection(_currenttree->perturbativeProcess(), _initialenhance,_finalenhance); if(hardMEC()) real = _hardme->applyHardMatrixElementCorrection(_currenttree->perturbativeProcess()); } } else { if(_decayme&&_decayme->hasMECorrection()) { _decayme->initializeMECorrection(_currenttree->perturbativeProcess(), _initialenhance,_finalenhance); if(hardMEC()) real = _decayme->applyHardMatrixElementCorrection(_currenttree->perturbativeProcess()); } } return real; } ShowerParticleVector QTildeShowerHandler::createTimeLikeChildren(tShowerParticlePtr, IdList ids) { // Create the ShowerParticle objects for the two children of // the emitting particle; set the parent/child relationship // if same as definition create particles, otherwise create cc ShowerParticleVector children; for(unsigned int ix=0;ix<2;++ix) { children.push_back(new_ptr(ShowerParticle(ids[ix+1],true))); if(children[ix]->id()==_progenitor->id()&&!ids[ix+1]->stable()&&abs(ids[ix+1]->id())!=ParticleID::tauminus) children[ix]->set5Momentum(Lorentz5Momentum(_progenitor->progenitor()->mass())); else children[ix]->set5Momentum(Lorentz5Momentum(ids[ix+1]->mass())); } return children; } bool QTildeShowerHandler::timeLikeShower(tShowerParticlePtr particle, ShowerInteraction type, Branching fb, bool first) { // don't do anything if not needed if(_limitEmissions == 1 || hardOnly() || ( _limitEmissions == 2 && _nfs != 0) || ( _limitEmissions == 4 && _nfs + _nis != 0) ) { if(particle->spinInfo()) particle->spinInfo()->develop(); return false; } // too many tries if(_nFSR>=_maxTryFSR) { ++_nFailedFSR; // too many failed events if(_nFailedFSR>=_maxFailFSR) throw Exception() << "Too many events have failed due to too many shower emissions, in\n" << "QTildeShowerHandler::timeLikeShower(). Terminating run\n" << Exception::runerror; throw Exception() << "Too many attempted emissions in QTildeShowerHandler::timeLikeShower()\n" << Exception::eventerror; } // generate the emission ShowerParticleVector children; int ntry=0; // generate the emission if(!fb.kinematics) fb = selectTimeLikeBranching(particle,type,HardBranchingPtr()); // no emission, return if(!fb.kinematics) { if(particle->spinInfo()) particle->spinInfo()->develop(); return false; } Branching fc[2]; bool setupChildren = true; while (ntry<50) { fc[0] = Branching(); fc[1] = Branching(); ++ntry; assert(fb.kinematics); // has emitted // Assign the shower kinematics to the emitting particle. if(setupChildren) { ++_nFSR; particle->showerKinematics(fb.kinematics); // check highest pT if(fb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(fb.kinematics->pT()); // create the children children = createTimeLikeChildren(particle,fb.ids); // update the children particle->showerKinematics()-> updateChildren(particle, children,fb.type,_reconOpt==3 || _reconOpt==4); // update number of emissions ++_nfs; if(_limitEmissions!=0) { if(children[0]->spinInfo()) children[0]->spinInfo()->develop(); if(children[1]->spinInfo()) children[1]->spinInfo()->develop(); if(particle->spinInfo()) particle->spinInfo()->develop(); return true; } setupChildren = false; } // select branchings for children fc[0] = selectTimeLikeBranching(children[0],type,HardBranchingPtr()); fc[1] = selectTimeLikeBranching(children[1],type,HardBranchingPtr()); // old default if(_reconOpt==0||_reconOpt==5) { break; } // all other options else { // cut-off masses for the branching const vector & virtualMasses = fb.sudakov->virtualMasses(fb.ids); // compute the masses of the children Energy masses[3]; for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].kinematics) { const vector & vm = fc[ix].sudakov->virtualMasses(fc[ix].ids); Energy2 q2 = fc[ix].kinematics->z()*(1.-fc[ix].kinematics->z())*sqr(fc[ix].kinematics->scale()); if(fc[ix].ids[0]->id()!=ParticleID::g) q2 += sqr(vm[0]); masses[ix+1] = sqrt(q2); } else { masses[ix+1] = virtualMasses[ix+1]; } } masses[0] = fb.ids[0]->id()!=ParticleID::g ? virtualMasses[0] : ZERO; double z = fb.kinematics->z(); Energy2 pt2 = z*(1.-z)*(z*(1.-z)*sqr(fb.kinematics->scale()) + sqr(masses[0])) - sqr(masses[1])*(1.-z) - sqr(masses[2])*z; if(pt2>=ZERO) break; // clean up the vetoed emission if(_reconOpt==1) { particle->showerKinematics(ShoKinPtr()); for(unsigned int ix=0;ixabandonChild(children[ix]); children.clear(); if(particle->spinInfo()) particle->spinInfo()->decayVertex(VertexPtr()); particle->vetoEmission(fb.type,fb.kinematics->scale()); // generate the new emission fb = selectTimeLikeBranching(particle,type,HardBranchingPtr()); // no emission, return if(!fb.kinematics) { if(particle->spinInfo()) particle->spinInfo()->develop(); return false; } setupChildren = true; continue; } // clean up vetoed children else if(_reconOpt>=2) { // reset the scales for the children for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].kinematics) children[ix]->vetoEmission(fc[ix].type,fc[ix].kinematics->scale()); else children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,ZERO); children[ix]->virtualMass(ZERO); } } } }; // shower the first particle if(fc[0].kinematics) timeLikeShower(children[0],type,fc[0],false); if(children[0]->spinInfo()) children[0]->spinInfo()->develop(); // shower the second particle if(fc[1].kinematics) timeLikeShower(children[1],type,fc[1],false); if(children[1]->spinInfo()) children[1]->spinInfo()->develop(); if(_reconOpt>=1) particle->showerKinematics()->updateParent(particle, children,fb.type); // branching has happened if(first&&!children.empty()) particle->showerKinematics()->resetChildren(particle,children); if(particle->spinInfo()) particle->spinInfo()->develop(); return true; } bool QTildeShowerHandler::spaceLikeShower(tShowerParticlePtr particle, PPtr beam, ShowerInteraction type) { //using the pdf's associated with the ShowerHandler assures, that //modified pdf's are used for the secondary interactions via //CascadeHandler::resetPDFs(...) tcPDFPtr pdf; if(firstPDF().particle() == _beam) pdf = firstPDF().pdf(); if(secondPDF().particle() == _beam) pdf = secondPDF().pdf(); Energy freeze = pdfFreezingScale(); // don't do anything if not needed if(_limitEmissions == 2 || hardOnly() || ( _limitEmissions == 1 && _nis != 0 ) || ( _limitEmissions == 4 && _nis + _nfs != 0 ) ) { if(particle->spinInfo()) particle->spinInfo()->develop(); return false; } Branching bb; // generate branching while (true) { bb=_splittingGenerator->chooseBackwardBranching(*particle,beam, _initialenhance, _beam,type, pdf,freeze); // return if no emission if(!bb.kinematics) { if(particle->spinInfo()) particle->spinInfo()->develop(); return false; } // if not vetoed break if(!spaceLikeVetoed(bb,particle)) break; // otherwise reset scale and continue particle->vetoEmission(bb.type,bb.kinematics->scale()); if(particle->spinInfo()) particle->spinInfo()->decayVertex(VertexPtr()); } // assign the splitting function and shower kinematics particle->showerKinematics(bb.kinematics); if(bb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(bb.kinematics->pT()); // For the time being we are considering only 1->2 branching // particles as in Sudakov form factor tcPDPtr part[2]={bb.ids[0],bb.ids[2]}; // Now create the actual particles, make the otherChild a final state // particle, while the newParent is not ShowerParticlePtr newParent = new_ptr(ShowerParticle(part[0],false)); ShowerParticlePtr otherChild = new_ptr(ShowerParticle(part[1],true,true)); ShowerParticleVector theChildren; theChildren.push_back(particle); theChildren.push_back(otherChild); //this updates the evolution scale particle->showerKinematics()-> updateParent(newParent, theChildren,bb.type); // update the history if needed _currenttree->updateInitialStateShowerProduct(_progenitor,newParent); _currenttree->addInitialStateBranching(particle,newParent,otherChild); // for the reconstruction of kinematics, parent/child // relationships are according to the branching process: // now continue the shower ++_nis; bool emitted = _limitEmissions==0 ? spaceLikeShower(newParent,beam,type) : false; if(newParent->spinInfo()) newParent->spinInfo()->develop(); // now reconstruct the momentum if(!emitted) { if(_intrinsic.find(_progenitor)==_intrinsic.end()) { bb.kinematics->updateLast(newParent,ZERO,ZERO); } else { pair kt=_intrinsic[_progenitor]; bb.kinematics->updateLast(newParent, kt.first*cos(kt.second), kt.first*sin(kt.second)); } } particle->showerKinematics()-> updateChildren(newParent, theChildren,bb.type,_reconOpt>=4); if(_limitEmissions!=0) { if(particle->spinInfo()) particle->spinInfo()->develop(); return true; } // perform the shower of the final-state particle timeLikeShower(otherChild,type,Branching(),true); updateHistory(otherChild); if(theChildren[1]->spinInfo()) theChildren[1]->spinInfo()->develop(); // return the emitted if(particle->spinInfo()) particle->spinInfo()->develop(); return true; } void QTildeShowerHandler::showerDecay(ShowerTreePtr decay) { // work out the type of event currentTree()->xcombPtr(StdXCombPtr()); currentTree()->identifyEventType(); _decayme = HwDecayerBasePtr(); _hardme = HwMEBasePtr(); // find the decayer // try the normal way if possible tDMPtr dm = decay->incomingLines().begin()->first->original() ->decayMode(); if(!dm) dm = decay->incomingLines().begin()->first->copy() ->decayMode(); if(!dm) dm = decay->incomingLines().begin()->first->progenitor()->decayMode(); // otherwise make a string and look it up if(!dm) { string tag = decay->incomingLines().begin()->first->original()->dataPtr()->name() + "->"; OrderedParticles outgoing; for(map::const_iterator it=decay->outgoingLines().begin();it!=decay->outgoingLines().end();++it) { if(abs(decay->incomingLines().begin()->first->original()->id()) == ParticleID::t && abs(it->first->original()->id())==ParticleID::Wplus && decay->treelinks().size() == 1) { ShowerTreePtr Wtree = decay->treelinks().begin()->first; for(map::const_iterator it2=Wtree->outgoingLines().begin();it2!=Wtree->outgoingLines().end();++it2) { outgoing.insert(it2->first->original()->dataPtr()); } } else { outgoing.insert(it->first->original()->dataPtr()); } } for(OrderedParticles::const_iterator it=outgoing.begin(); it!=outgoing.end();++it) { if(it!=outgoing.begin()) tag += ","; tag +=(**it).name(); } tag += ";"; dm = findDecayMode(tag); } if(dm) _decayme = dynamic_ptr_cast(dm->decayer()); // set the ShowerTree to be showered currentTree(decay); decay->applyTransforms(); hardTree(HardTreePtr()); // generate the showering doShowering(false,XCPtr()); // if no vetos // force calculation of spin correlations SpinPtr spInfo = decay->incomingLines().begin()->first->progenitor()->spinInfo(); if(spInfo) { if(!spInfo->developed()) spInfo->needsUpdate(); spInfo->develop(); } } bool QTildeShowerHandler::spaceLikeDecayShower(tShowerParticlePtr particle, const ShowerParticle::EvolutionScales & maxScales, Energy minmass,ShowerInteraction type, Branching fb) { // don't do anything if not needed if(_limitEmissions == 1 || hardOnly() || ( _limitEmissions == 3 && _nis != 0) || ( _limitEmissions == 4 && _nfs + _nis != 0) ) { return false; } // too many tries if(_nFSR>=_maxTryFSR) { ++_nFailedFSR; // too many failed events if(_nFailedFSR>=_maxFailFSR) throw Exception() << "Too many events have failed due to too many shower emissions, in\n" << "QTildeShowerHandler::timeLikeShower(). Terminating run\n" << Exception::runerror; throw Exception() << "Too many attempted emissions in QTildeShowerHandler::timeLikeShower()\n" << Exception::eventerror; } // generate the emission ShowerParticleVector children; int ntry=0; // generate the emission if(!fb.kinematics) fb = selectSpaceLikeDecayBranching(particle,maxScales,minmass,type, HardBranchingPtr()); // no emission, return if(!fb.kinematics) return false; Branching fc[2]; bool setupChildren = true; while (ntry<50) { if(particle->virtualMass()==ZERO) particle->virtualMass(_progenitor->progenitor()->mass()); fc[0] = Branching(); fc[1] = Branching(); ++ntry; assert(fb.kinematics); // has emitted // Assign the shower kinematics to the emitting particle. if(setupChildren) { ++_nFSR; // Assign the shower kinematics to the emitting particle. particle->showerKinematics(fb.kinematics); if(fb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(fb.kinematics->pT()); // create the ShowerParticle objects for the two children children = createTimeLikeChildren(particle,fb.ids); // updateChildren the children particle->showerKinematics()-> updateChildren(particle, children, fb.type,_reconOpt>=3); setupChildren = false; } // select branchings for children fc[0] = selectSpaceLikeDecayBranching(children[0],maxScales,minmass, type,HardBranchingPtr()); fc[1] = selectTimeLikeBranching (children[1],type,HardBranchingPtr()); // old default if(_reconOpt==0) { ++_nis; // shower the first particle _currenttree->updateInitialStateShowerProduct(_progenitor,children[0]); _currenttree->addInitialStateBranching(particle,children[0],children[1]); if(fc[0].kinematics) spaceLikeDecayShower(children[0],maxScales,minmass,type,Branching()); // shower the second particle if(fc[1].kinematics) timeLikeShower(children[1],type,fc[1],true); updateHistory(children[1]); // branching has happened break; } // Herwig default else if(_reconOpt==1) { // shower the first particle _currenttree->updateInitialStateShowerProduct(_progenitor,children[0]); _currenttree->addInitialStateBranching(particle,children[0],children[1]); if(fc[0].kinematics) spaceLikeDecayShower(children[0],maxScales,minmass,type,Branching()); // shower the second particle if(fc[1].kinematics) timeLikeShower(children[1],type,fc[1],true); updateHistory(children[1]); // branching has happened particle->showerKinematics()->updateParent(particle, children,fb.type); // clean up the vetoed emission if(particle->virtualMass()==ZERO) { particle->showerKinematics(ShoKinPtr()); for(unsigned int ix=0;ixabandonChild(children[ix]); children.clear(); particle->vetoEmission(fb.type,fb.kinematics->scale()); // generate the new emission fb = selectSpaceLikeDecayBranching(particle,maxScales,minmass,type, HardBranchingPtr()); // no emission, return if(!fb.kinematics) { return false; } setupChildren = true; continue; } else { ++_nis; break; } } else if(_reconOpt>=2) { // cut-off masses for the branching const vector & virtualMasses = fb.sudakov->virtualMasses(fb.ids); // compute the masses of the children Energy masses[3]; // space-like children masses[1] = children[0]->virtualMass(); // time-like child if(fc[1].kinematics) { const vector & vm = fc[1].sudakov->virtualMasses(fc[1].ids); Energy2 q2 = fc[1].kinematics->z()*(1.-fc[1].kinematics->z())*sqr(fc[1].kinematics->scale()); if(fc[1].ids[0]->id()!=ParticleID::g) q2 += sqr(vm[0]); masses[2] = sqrt(q2); } else { masses[2] = virtualMasses[2]; } masses[0]=particle->virtualMass(); double z = fb.kinematics->z(); Energy2 pt2 = (1.-z)*(z*sqr(masses[0])-sqr(masses[1])-z/(1.-z)*sqr(masses[2])); if(pt2>=ZERO) { ++_nis; break; } else { // reset the scales for the children for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].kinematics) children[ix]->vetoEmission(fc[ix].type,fc[ix].kinematics->scale()); else { if(ix==0) children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,Constants::MaxEnergy); else children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,ZERO); } } children[0]->virtualMass(_progenitor->progenitor()->mass()); children[1]->virtualMass(ZERO); } } }; if(_reconOpt>=2) { // In the case of splittings which involves coloured particles, // set properly the colour flow of the branching. // update the history if needed _currenttree->updateInitialStateShowerProduct(_progenitor,children[0]); _currenttree->addInitialStateBranching(particle,children[0],children[1]); // shower the first particle if(fc[0].kinematics) spaceLikeDecayShower(children[0],maxScales,minmass,type,Branching()); // shower the second particle if(fc[1].kinematics) timeLikeShower(children[1],type,fc[1],true); updateHistory(children[1]); // branching has happened particle->showerKinematics()->updateParent(particle, children,fb.type); } // branching has happened return true; } vector QTildeShowerHandler::setupShower(bool hard) { RealEmissionProcessPtr real; // generate hard me if needed if(_hardEmission==1) { real = hardMatrixElementCorrection(hard); if(real&&!real->outgoing().empty()) setupMECorrection(real); } // generate POWHEG hard emission if needed else if(_hardEmission==2) hardestEmission(hard); // set the initial colour partners setEvolutionPartners(hard,interaction_,false); // get the particles to be showered vector particlesToShower = currentTree()->extractProgenitors(); // return the answer return particlesToShower; } void QTildeShowerHandler::setEvolutionPartners(bool hard,ShowerInteraction type, bool clear) { // match the particles in the ShowerTree and hardTree if(hardTree() && !hardTree()->connect(currentTree())) throw Exception() << "Can't match trees in " << "QTildeShowerHandler::setEvolutionPartners()" << Exception::eventerror; // extract the progenitors vector particles = currentTree()->extractProgenitorParticles(); // clear the partners if needed if(clear) { for(unsigned int ix=0;ixpartner(ShowerParticlePtr()); particles[ix]->clearPartners(); } } // sort out the colour partners if(hardTree()) { // find the partner for(unsigned int ix=0;ixparticles()[particles[ix]]->branchingParticle()->partner(); if(!partner) continue; for(map::const_iterator it=hardTree()->particles().begin(); it!=hardTree()->particles().end();++it) { if(it->second->branchingParticle()==partner) { particles[ix]->partner(it->first); break; } } if(!particles[ix]->partner()) throw Exception() << "Can't match partners in " << "QTildeShowerHandler::setEvolutionPartners()" << Exception::eventerror; } } // Set the initial evolution scales showerModel()->partnerFinder()-> setInitialEvolutionScales(particles,!hard,interaction_,!_hardtree); if(hardTree() && _hardPOWHEG) { bool tooHard=false; map::const_iterator eit=hardTree()->particles().end(); for(unsigned int ix=0;ix::const_iterator mit = hardTree()->particles().find(particles[ix]); Energy hardScale(ZERO); ShowerPartnerType type(ShowerPartnerType::Undefined); // final-state if(particles[ix]->isFinalState()) { if(mit!= eit && !mit->second->children().empty()) { hardScale = mit->second->scale(); type = mit->second->type(); } } // initial-state else { if(mit!= eit && mit->second->parent()) { hardScale = mit->second->parent()->scale(); type = mit->second->parent()->type(); } } if(type!=ShowerPartnerType::Undefined) { if(type==ShowerPartnerType::QED) { tooHard |= particles[ix]->scales().QED_noAOscales().QCD_c_noAOscales().QCD_ac_noAOscales().EWchildren().empty()) { ShowerParticleVector theChildren; for(unsigned int ix=0;ixchildren().size();++ix) { ShowerParticlePtr part = dynamic_ptr_cast (particle->children()[ix]); theChildren.push_back(part); } // update the history if needed if(particle==_currenttree->getFinalStateShowerProduct(_progenitor)) _currenttree->updateFinalStateShowerProduct(_progenitor, particle,theChildren); _currenttree->addFinalStateBranching(particle,theChildren); for(unsigned int ix=0;ixprogenitor()->partner()) return false; progenitor()->progenitor()->initializeFinalState(); if(hardTree()) { map::const_iterator eit=hardTree()->particles().end(), mit = hardTree()->particles().find(progenitor()->progenitor()); if( mit != eit && !mit->second->children().empty() ) { bool output=truncatedTimeLikeShower(progenitor()->progenitor(), mit->second ,type,Branching(),true); if(output) updateHistory(progenitor()->progenitor()); return output; } } // do the shower bool output = hardOnly() ? false : timeLikeShower(progenitor()->progenitor() ,type,Branching(),true) ; if(output) updateHistory(progenitor()->progenitor()); return output; } bool QTildeShowerHandler::startSpaceLikeShower(PPtr parent, ShowerInteraction type) { // initialise the basis vectors if(!progenitor()->progenitor()->partner()) return false; progenitor()->progenitor()->initializeInitialState(parent); if(hardTree()) { map::const_iterator eit =hardTree()->particles().end(), mit = hardTree()->particles().find(progenitor()->progenitor()); if( mit != eit && mit->second->parent() ) { return truncatedSpaceLikeShower( progenitor()->progenitor(), parent, mit->second->parent(), type ); } } // perform the shower return hardOnly() ? false : spaceLikeShower(progenitor()->progenitor(),parent,type); } bool QTildeShowerHandler:: startSpaceLikeDecayShower(const ShowerParticle::EvolutionScales & maxScales, Energy minimumMass,ShowerInteraction type) { _nFSR = 0; // set up the particle basis vectors if(!progenitor()->progenitor()->partner()) return false; progenitor()->progenitor()->initializeDecay(); if(hardTree()) { map::const_iterator eit =hardTree()->particles().end(), mit = hardTree()->particles().find(progenitor()->progenitor()); if( mit != eit && mit->second->parent() ) { HardBranchingPtr branch=mit->second; while(branch->parent()) branch=branch->parent(); return truncatedSpaceLikeDecayShower(progenitor()->progenitor(),maxScales, minimumMass, branch ,type, Branching()); } } // perform the shower return hardOnly() ? false : spaceLikeDecayShower(progenitor()->progenitor(),maxScales,minimumMass,type,Branching()); } bool QTildeShowerHandler::timeLikeVetoed(const Branching & fb, ShowerParticlePtr particle) { // work out type of interaction ShowerInteraction type = convertInteraction(fb.type); // check whether emission was harder than largest pt of hard subprocess if ( restrictPhasespace() && fb.kinematics->pT() > _progenitor->maxHardPt() ) return true; // soft matrix element correction veto if( softMEC()) { if(_hardme && _hardme->hasMECorrection()) { if(_hardme->softMatrixElementVeto(particle, _progenitor->progenitor(), particle->isFinalState(), _progenitor->highestpT(), fb.ids, fb.kinematics->z(), fb.kinematics->scale(), fb.kinematics->pT())) return true; } else if(_decayme && _decayme->hasMECorrection()) { if(_decayme->softMatrixElementVeto(particle, _progenitor->progenitor(), particle->isFinalState(), _progenitor->highestpT(), fb.ids, fb.kinematics->z(), fb.kinematics->scale(), fb.kinematics->pT())) return true; } } // veto on maximum pt if(fb.kinematics->pT()>_progenitor->maximumpT(type)) return true; // general vetos if (fb.kinematics && !_vetoes.empty()) { bool vetoed=false; for (vector::iterator v = _vetoes.begin(); v != _vetoes.end(); ++v) { bool test = (**v).vetoTimeLike(_progenitor,particle,fb,currentTree()); switch((**v).vetoType()) { case ShowerVeto::Emission: vetoed |= test; break; case ShowerVeto::Shower: if(test) throw VetoShower(); break; case ShowerVeto::Event: if(test) throw Veto(); break; } } if(vetoed) return true; } if ( firstInteraction() && profileScales() ) { double weight = profileScales()-> hardScaleProfile(_progenitor->hardScale(),fb.kinematics->pT()); if ( UseRandom::rnd() > weight ) return true; } return false; } bool QTildeShowerHandler::spaceLikeVetoed(const Branching & bb, ShowerParticlePtr particle) { // work out type of interaction ShowerInteraction type = convertInteraction(bb.type); // check whether emission was harder than largest pt of hard subprocess if (restrictPhasespace() && bb.kinematics->pT() > _progenitor->maxHardPt()) return true; // apply the soft correction if( softMEC() && _hardme && _hardme->hasMECorrection() ) { if(_hardme->softMatrixElementVeto(particle, _progenitor->progenitor(), particle->isFinalState(), _progenitor->highestpT(), bb.ids, bb.kinematics->z(), bb.kinematics->scale(), bb.kinematics->pT())) return true; } // the more general vetos // check vs max pt for the shower if(bb.kinematics->pT()>_progenitor->maximumpT(type)) return true; if (!_vetoes.empty()) { bool vetoed=false; for (vector::iterator v = _vetoes.begin(); v != _vetoes.end(); ++v) { bool test = (**v).vetoSpaceLike(_progenitor,particle,bb,currentTree()); switch ((**v).vetoType()) { case ShowerVeto::Emission: vetoed |= test; break; case ShowerVeto::Shower: if(test) throw VetoShower(); break; case ShowerVeto::Event: if(test) throw Veto(); break; } } if (vetoed) return true; } if ( firstInteraction() && profileScales() ) { double weight = profileScales()-> hardScaleProfile(_progenitor->hardScale(),bb.kinematics->pT()); if ( UseRandom::rnd() > weight ) return true; } return false; } bool QTildeShowerHandler::spaceLikeDecayVetoed( const Branching & fb, ShowerParticlePtr particle) { // work out type of interaction ShowerInteraction type = convertInteraction(fb.type); // apply the soft correction if( softMEC() && _decayme && _decayme->hasMECorrection() ) { if(_decayme->softMatrixElementVeto(particle, _progenitor->progenitor(), particle->isFinalState(), _progenitor->highestpT(), fb.ids, fb.kinematics->z(), fb.kinematics->scale(), fb.kinematics->pT())) return true; } // veto on hardest pt in the shower if(fb.kinematics->pT()> _progenitor->maximumpT(type)) return true; // general vetos if (!_vetoes.empty()) { bool vetoed=false; for (vector::iterator v = _vetoes.begin(); v != _vetoes.end(); ++v) { bool test = (**v).vetoSpaceLike(_progenitor,particle,fb,currentTree()); switch((**v).vetoType()) { case ShowerVeto::Emission: vetoed |= test; break; case ShowerVeto::Shower: if(test) throw VetoShower(); break; case ShowerVeto::Event: if(test) throw Veto(); break; } if (vetoed) return true; } } return false; } void QTildeShowerHandler::hardestEmission(bool hard) { HardTreePtr ISRTree; // internal POWHEG in production or decay if( (( _hardme && _hardme->hasPOWHEGCorrection()!=0 ) || ( _decayme && _decayme->hasPOWHEGCorrection()!=0 ) ) ) { RealEmissionProcessPtr real; unsigned int type(0); // production if(_hardme) { assert(hard); real = _hardme->generateHardest( currentTree()->perturbativeProcess(), interaction_); type = _hardme->hasPOWHEGCorrection(); } // decay else { assert(!hard); real = _decayme->generateHardest( currentTree()->perturbativeProcess() ); type = _decayme->hasPOWHEGCorrection(); } if(real) { // set up ther hard tree if(!real->outgoing().empty()) _hardtree = new_ptr(HardTree(real)); // set up the vetos currentTree()->setVetoes(real->pT(),type); } // store initial state POWHEG radiation if(_hardtree && _hardme && _hardme->hasPOWHEGCorrection()==1) ISRTree = _hardtree; } else if (hard) { // Get minimum pT cutoff used in shower approximation Energy maxpt = 1.*GeV; if ( currentTree()->showerApproximation() ) { int colouredIn = 0; int colouredOut = 0; for( map< ShowerProgenitorPtr, tShowerParticlePtr >::iterator it = currentTree()->outgoingLines().begin(); it != currentTree()->outgoingLines().end(); ++it ) { if( it->second->coloured() ) ++colouredOut; } for( map< ShowerProgenitorPtr, ShowerParticlePtr >::iterator it = currentTree()->incomingLines().begin(); it != currentTree()->incomingLines().end(); ++it ) { if( it->second->coloured() ) ++colouredIn; } if ( currentTree()->showerApproximation()->ffPtCut() == currentTree()->showerApproximation()->fiPtCut() && currentTree()->showerApproximation()->ffPtCut() == currentTree()->showerApproximation()->iiPtCut() ) maxpt = currentTree()->showerApproximation()->ffPtCut(); else if ( colouredIn == 2 && colouredOut == 0 ) maxpt = currentTree()->showerApproximation()->iiPtCut(); else if ( colouredIn == 0 && colouredOut > 1 ) maxpt = currentTree()->showerApproximation()->ffPtCut(); else if ( colouredIn == 2 && colouredOut == 1 ) maxpt = min(currentTree()->showerApproximation()->iiPtCut(), currentTree()->showerApproximation()->fiPtCut()); else if ( colouredIn == 1 && colouredOut > 1 ) maxpt = min(currentTree()->showerApproximation()->ffPtCut(), currentTree()->showerApproximation()->fiPtCut()); else maxpt = min(min(currentTree()->showerApproximation()->iiPtCut(), currentTree()->showerApproximation()->fiPtCut()), currentTree()->showerApproximation()->ffPtCut()); } // Generate hardtree from born and real emission subprocesses _hardtree = generateCKKW(currentTree()); // Find transverse momentum of hardest emission if (_hardtree){ for(set::iterator it=_hardtree->branchings().begin(); it!=_hardtree->branchings().end();++it) { if ((*it)->parent() && (*it)->status()==HardBranching::Incoming) maxpt=(*it)->branchingParticle()->momentum().perp(); if ((*it)->children().size()==2 && (*it)->status()==HardBranching::Outgoing){ if ((*it)->branchingParticle()->id()!=21 && abs((*it)->branchingParticle()->id())>5 ){ if ((*it)->children()[0]->branchingParticle()->id()==21 || abs((*it)->children()[0]->branchingParticle()->id())<6) maxpt=(*it)->children()[0]->branchingParticle()->momentum().perp(); else if ((*it)->children()[1]->branchingParticle()->id()==21 || abs((*it)->children()[1]->branchingParticle()->id())<6) maxpt=(*it)->children()[1]->branchingParticle()->momentum().perp(); } else { if ( abs((*it)->branchingParticle()->id())<6){ if (abs((*it)->children()[0]->branchingParticle()->id())<6) maxpt = (*it)->children()[1]->branchingParticle()->momentum().perp(); else maxpt = (*it)->children()[0]->branchingParticle()->momentum().perp(); } else maxpt = (*it)->children()[1]->branchingParticle()->momentum().perp(); } } } } // Hardest (pt) emission should be the first powheg emission. maxpt=min(sqrt(lastXCombPtr()->lastShowerScale()),maxpt); // set maximum pT for subsequent emissions from S events if ( currentTree()->isPowhegSEvent() ) { for( map< ShowerProgenitorPtr, tShowerParticlePtr >::iterator it = currentTree()->outgoingLines().begin(); it != currentTree()->outgoingLines().end(); ++it ) { if( ! it->second->coloured() ) continue; it->first->maximumpT(maxpt, ShowerInteraction::QCD ); } for( map< ShowerProgenitorPtr, ShowerParticlePtr >::iterator it = currentTree()->incomingLines().begin(); it != currentTree()->incomingLines().end(); ++it ) { if( ! it->second->coloured() ) continue; it->first->maximumpT(maxpt, ShowerInteraction::QCD ); } } } else _hardtree = generateCKKW(currentTree()); // if hard me doesn't have a FSR powheg // correction use decay powheg correction if (_hardme && _hardme->hasPOWHEGCorrection()<2) { addFSRUsingDecayPOWHEG(ISRTree); } // connect the trees if(_hardtree) { connectTrees(currentTree(),_hardtree,hard); } } void QTildeShowerHandler::addFSRUsingDecayPOWHEG(HardTreePtr ISRTree) { // check for intermediate colour singlet resonance const ParticleVector inter = _hardme->subProcess()->intermediates(); if (inter.size()!=1 || inter[0]->momentum().m2()/GeV2 < 0 || inter[0]->dataPtr()->iColour()!=PDT::Colour0) { return; } // ignore cases where outgoing particles are not coloured map out = currentTree()->outgoingLines(); if (out.size() != 2 || out. begin()->second->dataPtr()->iColour()==PDT::Colour0 || out.rbegin()->second->dataPtr()->iColour()==PDT::Colour0) { return; } // look up decay mode tDMPtr dm; string tag; string inParticle = inter[0]->dataPtr()->name() + "->"; vector outParticles; outParticles.push_back(out.begin ()->first->progenitor()->dataPtr()->name()); outParticles.push_back(out.rbegin()->first->progenitor()->dataPtr()->name()); for (int it=0; it<2; ++it){ tag = inParticle + outParticles[it] + "," + outParticles[(it+1)%2] + ";"; dm = generator()->findDecayMode(tag); if(dm) break; } // get the decayer HwDecayerBasePtr decayer; if(dm) decayer = dynamic_ptr_cast(dm->decayer()); // check if decayer has a FSR POWHEG correction if (!decayer || decayer->hasPOWHEGCorrection()<2) { return; } // generate the hardest emission // create RealEmissionProcess PPtr in = new_ptr(*inter[0]); RealEmissionProcessPtr newProcess(new_ptr(RealEmissionProcess())); newProcess->bornIncoming().push_back(in); newProcess->bornOutgoing().push_back(out.begin ()->first->progenitor()); newProcess->bornOutgoing().push_back(out.rbegin()->first->progenitor()); // generate the FSR newProcess = decayer->generateHardest(newProcess); HardTreePtr FSRTree; if(newProcess) { // set up ther hard tree if(!newProcess->outgoing().empty()) FSRTree = new_ptr(HardTree(newProcess)); // set up the vetos currentTree()->setVetoes(newProcess->pT(),2); } if(!FSRTree) return; // if there is no ISRTree make _hardtree from FSRTree if (!ISRTree){ vector inBranch,hardBranch; for(map::const_iterator cit =currentTree()->incomingLines().begin(); cit!=currentTree()->incomingLines().end();++cit ) { inBranch.push_back(new_ptr(HardBranching(cit->second,SudakovPtr(), HardBranchingPtr(), HardBranching::Incoming))); inBranch.back()->beam(cit->first->original()->parents()[0]); hardBranch.push_back(inBranch.back()); } if(inBranch[0]->branchingParticle()->dataPtr()->coloured()) { inBranch[0]->colourPartner(inBranch[1]); inBranch[1]->colourPartner(inBranch[0]); } for(set::iterator it=FSRTree->branchings().begin(); it!=FSRTree->branchings().end();++it) { if((**it).branchingParticle()->id()!=in->id()) hardBranch.push_back(*it); } hardBranch[2]->colourPartner(hardBranch[3]); hardBranch[3]->colourPartner(hardBranch[2]); HardTreePtr newTree = new_ptr(HardTree(hardBranch,inBranch, ShowerInteraction::QCD)); _hardtree = newTree; } // Otherwise modify the ISRTree to include the emission in FSRTree else { vector FSROut, ISROut; set::iterator itFSR, itISR; // get outgoing particles for(itFSR =FSRTree->branchings().begin(); itFSR!=FSRTree->branchings().end();++itFSR){ if ((**itFSR).status()==HardBranching::Outgoing) FSROut.push_back((*itFSR)->branchingParticle()); } for(itISR =ISRTree->branchings().begin(); itISR!=ISRTree->branchings().end();++itISR){ if ((**itISR).status()==HardBranching::Outgoing) ISROut.push_back((*itISR)->branchingParticle()); } // find COM frame formed by outgoing particles LorentzRotation eventFrameFSR, eventFrameISR; eventFrameFSR = ((FSROut[0]->momentum()+FSROut[1]->momentum()).findBoostToCM()); eventFrameISR = ((ISROut[0]->momentum()+ISROut[1]->momentum()).findBoostToCM()); // find rotation between ISR and FSR frames int j=0; if (ISROut[0]->id()!=FSROut[0]->id()) j=1; eventFrameISR.rotateZ( (eventFrameFSR*FSROut[0]->momentum()).phi()- (eventFrameISR*ISROut[j]->momentum()).phi() ); eventFrameISR.rotateY( (eventFrameFSR*FSROut[0]->momentum()).theta()- (eventFrameISR*ISROut[j]->momentum()).theta() ); eventFrameISR.invert(); for (itFSR=FSRTree->branchings().begin(); itFSR!=FSRTree->branchings().end();++itFSR){ if ((**itFSR).branchingParticle()->id()==in->id()) continue; for (itISR =ISRTree->branchings().begin(); itISR!=ISRTree->branchings().end();++itISR){ if ((**itISR).status()==HardBranching::Incoming) continue; if ((**itFSR).branchingParticle()->id()== (**itISR).branchingParticle()->id()){ // rotate FSRTree particle to ISRTree event frame (**itISR).branchingParticle()->setMomentum(eventFrameISR* eventFrameFSR* (**itFSR).branchingParticle()->momentum()); (**itISR).branchingParticle()->rescaleMass(); // add the children of the FSRTree particles to the ISRTree if(!(**itFSR).children().empty()){ (**itISR).addChild((**itFSR).children()[0]); (**itISR).addChild((**itFSR).children()[1]); // rotate momenta to ISRTree event frame (**itISR).children()[0]->branchingParticle()->setMomentum(eventFrameISR* eventFrameFSR* (**itFSR).children()[0]->branchingParticle()->momentum()); (**itISR).children()[1]->branchingParticle()->setMomentum(eventFrameISR* eventFrameFSR* (**itFSR).children()[1]->branchingParticle()->momentum()); } } } } _hardtree = ISRTree; } } bool QTildeShowerHandler::truncatedTimeLikeShower(tShowerParticlePtr particle, HardBranchingPtr branch, ShowerInteraction type, Branching fb, bool first) { // select a branching if we don't have one if(!fb.kinematics) fb = selectTimeLikeBranching(particle,type,branch); // must be an emission, the forced one it not a truncated one assert(fb.kinematics); ShowerParticleVector children; int ntry=0; Branching fc[2]; bool setupChildren = true; while (ntry<50) { if(!fc[0].hard) fc[0] = Branching(); if(!fc[1].hard) fc[1] = Branching(); ++ntry; // Assign the shower kinematics to the emitting particle. if(setupChildren) { ++_nFSR; // Assign the shower kinematics to the emitting particle. particle->showerKinematics(fb.kinematics); if(fb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(fb.kinematics->pT()); // create the children children = createTimeLikeChildren(particle,fb.ids); // update the children particle->showerKinematics()-> updateChildren(particle, children,fb.type,_reconOpt>=3); setupChildren = false; } // select branchings for children if(!fc[0].kinematics) { // select branching for first particle if(!fb.hard && fb.iout ==1 ) fc[0] = selectTimeLikeBranching(children[0],type,branch); else if(fb.hard && !branch->children()[0]->children().empty() ) fc[0] = selectTimeLikeBranching(children[0],type,branch->children()[0]); else fc[0] = selectTimeLikeBranching(children[0],type,HardBranchingPtr()); } // select branching for the second particle if(!fc[1].kinematics) { // select branching for first particle if(!fb.hard && fb.iout ==2 ) fc[1] = selectTimeLikeBranching(children[1],type,branch); else if(fb.hard && !branch->children()[1]->children().empty() ) fc[1] = selectTimeLikeBranching(children[1],type,branch->children()[1]); else fc[1] = selectTimeLikeBranching(children[1],type,HardBranchingPtr()); } // old default if(_reconOpt==0 || (_reconOpt==1 && fb.hard) ) { // shower the first particle if(fc[0].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 1) truncatedTimeLikeShower(children[0],branch,type,fc[0],false); // hard emission and subsquent hard emissions else if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[0],false); // normal shower else timeLikeShower(children[0],type,fc[0],false); } if(children[0]->spinInfo()) children[0]->spinInfo()->develop(); // shower the second particle if(fc[1].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 2) truncatedTimeLikeShower(children[1],branch,type,fc[1],false); // hard emission and subsquent hard emissions else if(fb.hard && !branch->children()[1]->children().empty() ) truncatedTimeLikeShower(children[1],branch->children()[1],type,fc[1],false); else timeLikeShower(children[1],type,fc[1],false); } if(children[1]->spinInfo()) children[1]->spinInfo()->develop(); // branching has happened particle->showerKinematics()->updateParent(particle, children,fb.type); break; } // H7 default else if(_reconOpt==1) { // shower the first particle if(fc[0].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 1) truncatedTimeLikeShower(children[0],branch,type,fc[0],false); else timeLikeShower(children[0],type,fc[0],false); } if(children[0]->spinInfo()) children[0]->spinInfo()->develop(); // shower the second particle if(fc[1].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 2) truncatedTimeLikeShower(children[1],branch,type,fc[1],false); else timeLikeShower(children[1],type,fc[1],false); } if(children[1]->spinInfo()) children[1]->spinInfo()->develop(); // branching has happened particle->showerKinematics()->updateParent(particle, children,fb.type); // clean up the vetoed emission if(particle->virtualMass()==ZERO) { particle->showerKinematics(ShoKinPtr()); for(unsigned int ix=0;ixabandonChild(children[ix]); children.clear(); if(particle->spinInfo()) particle->spinInfo()->decayVertex(VertexPtr()); particle->vetoEmission(fb.type,fb.kinematics->scale()); // generate the new emission fb = selectTimeLikeBranching(particle,type,branch); // must be at least hard emission assert(fb.kinematics); setupChildren = true; continue; } else break; } else if(_reconOpt>=2) { // cut-off masses for the branching const vector & virtualMasses = fb.sudakov->virtualMasses(fb.ids); // compute the masses of the children Energy masses[3]; for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].kinematics) { const vector & vm = fc[ix].sudakov->virtualMasses(fc[ix].ids); Energy2 q2 = fc[ix].kinematics->z()*(1.-fc[ix].kinematics->z())*sqr(fc[ix].kinematics->scale()); if(fc[ix].ids[0]->id()!=ParticleID::g) q2 += sqr(vm[0]); masses[ix+1] = sqrt(q2); } else { masses[ix+1] = virtualMasses[ix+1]; } } masses[0] = fb.ids[0]->id()!=ParticleID::g ? virtualMasses[0] : ZERO; double z = fb.kinematics->z(); Energy2 pt2 = z*(1.-z)*(z*(1.-z)*sqr(fb.kinematics->scale()) + sqr(masses[0])) - sqr(masses[1])*(1.-z) - sqr(masses[2])*z; if(pt2>=ZERO) { break; } // if only the hard emission have to accept it else if ((fc[0].hard && !fc[1].kinematics) || (fc[1].hard && !fc[0].kinematics) ) { break; } else { // reset the scales for the children for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].hard) continue; if(fc[ix].kinematics && ! fc[ix].hard ) children[ix]->vetoEmission(fc[ix].type,fc[ix].kinematics->scale()); else children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,ZERO); children[ix]->virtualMass(ZERO); } } } }; if(_reconOpt>=2) { // shower the first particle if(fc[0].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 1) truncatedTimeLikeShower(children[0],branch,type,fc[0],false); // hard emission and subsquent hard emissions else if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[0],false); // normal shower else timeLikeShower(children[0],type,fc[0],false); } if(children[0]->spinInfo()) children[0]->spinInfo()->develop(); // shower the second particle if(fc[1].kinematics) { // the parent has truncated emission and following line if(!fb.hard && fb.iout == 2) truncatedTimeLikeShower(children[1],branch,type,fc[1],false); // hard emission and subsquent hard emissions else if(fb.hard && !branch->children()[1]->children().empty() ) truncatedTimeLikeShower(children[1],branch->children()[1],type,fc[1],false); else timeLikeShower(children[1],type,fc[1],false); } if(children[1]->spinInfo()) children[1]->spinInfo()->develop(); // branching has happened particle->showerKinematics()->updateParent(particle, children,fb.type); } if(first&&!children.empty()) particle->showerKinematics()->resetChildren(particle,children); if(particle->spinInfo()) particle->spinInfo()->develop(); return true; } bool QTildeShowerHandler::truncatedSpaceLikeShower(tShowerParticlePtr particle, PPtr beam, HardBranchingPtr branch, ShowerInteraction type) { tcPDFPtr pdf; if(firstPDF().particle() == beamParticle()) pdf = firstPDF().pdf(); if(secondPDF().particle() == beamParticle()) pdf = secondPDF().pdf(); Energy freeze = pdfFreezingScale(); Branching bb; // parameters of the force branching double z(0.); HardBranchingPtr timelike; for( unsigned int ix = 0; ix < branch->children().size(); ++ix ) { if( branch->children()[ix]->status() ==HardBranching::Outgoing) { timelike = branch->children()[ix]; } if( branch->children()[ix]->status() ==HardBranching::Incoming ) z = branch->children()[ix]->z(); } // generate truncated branching tcPDPtr part[2]; if(z>=0.&&z<=1.) { while (true) { if( !isTruncatedShowerON() || hardOnly() ) break; bb = splittingGenerator()->chooseBackwardBranching( *particle, beam, 1., beamParticle(), type , pdf,freeze); if( !bb.kinematics || bb.kinematics->scale() < branch->scale() ) { bb = Branching(); break; } // particles as in Sudakov form factor part[0] = bb.ids[0]; part[1] = bb.ids[2]; double zsplit = bb.kinematics->z(); // apply the vetos for the truncated shower // if doesn't carry most of momentum ShowerInteraction type2 = convertInteraction(bb.type); if(type2==branch->sudakov()->interactionType() && zsplit < 0.5) { particle->vetoEmission(bb.type,bb.kinematics->scale()); continue; } // others if( part[0]->id() != particle->id() || // if particle changes type bb.kinematics->pT() > progenitor()->maximumpT(type2) || // pt veto bb.kinematics->scale() < branch->scale()) { // angular ordering veto particle->vetoEmission(bb.type,bb.kinematics->scale()); continue; } // and those from the base class if(spaceLikeVetoed(bb,particle)) { particle->vetoEmission(bb.type,bb.kinematics->scale()); continue; } break; } } if( !bb.kinematics ) { //do the hard emission ShoKinPtr kinematics = branch->sudakov()->createInitialStateBranching( branch->scale(), z, branch->phi(), branch->children()[0]->pT() ); // assign the splitting function and shower kinematics particle->showerKinematics( kinematics ); if(kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(kinematics->pT()); // For the time being we are considering only 1->2 branching // Now create the actual particles, make the otherChild a final state // particle, while the newParent is not ShowerParticlePtr newParent = new_ptr( ShowerParticle( branch->branchingParticle()->dataPtr(), false ) ); ShowerParticlePtr otherChild = new_ptr( ShowerParticle( timelike->branchingParticle()->dataPtr(), true, true ) ); ShowerParticleVector theChildren; theChildren.push_back( particle ); theChildren.push_back( otherChild ); particle->showerKinematics()-> updateParent( newParent, theChildren, branch->type()); // update the history if needed currentTree()->updateInitialStateShowerProduct( progenitor(), newParent ); currentTree()->addInitialStateBranching( particle, newParent, otherChild ); // for the reconstruction of kinematics, parent/child // relationships are according to the branching process: // now continue the shower bool emitted=false; if(!hardOnly()) { if( branch->parent() ) { emitted = truncatedSpaceLikeShower( newParent, beam, branch->parent() , type); } else { emitted = spaceLikeShower( newParent, beam , type); } } if( !emitted ) { if( intrinsicpT().find( progenitor() ) == intrinsicpT().end() ) { kinematics->updateLast( newParent, ZERO, ZERO ); } else { pair kt = intrinsicpT()[progenitor()]; kinematics->updateLast( newParent, kt.first*cos( kt.second ), kt.first*sin( kt.second ) ); } } particle->showerKinematics()-> updateChildren( newParent, theChildren,bb.type,false); if(hardOnly()) return true; // perform the shower of the final-state particle if( timelike->children().empty() ) { timeLikeShower( otherChild , type,Branching(),true); } else { truncatedTimeLikeShower( otherChild, timelike , type,Branching(), true); } updateHistory(otherChild); // return the emitted return true; } // assign the splitting function and shower kinematics particle->showerKinematics( bb.kinematics ); if(bb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(bb.kinematics->pT()); // For the time being we are considering only 1->2 branching // Now create the actual particles, make the otherChild a final state // particle, while the newParent is not ShowerParticlePtr newParent = new_ptr( ShowerParticle( part[0], false ) ); ShowerParticlePtr otherChild = new_ptr( ShowerParticle( part[1], true, true ) ); ShowerParticleVector theChildren; theChildren.push_back( particle ); theChildren.push_back( otherChild ); particle->showerKinematics()-> updateParent( newParent, theChildren, bb.type); // update the history if needed currentTree()->updateInitialStateShowerProduct( progenitor(), newParent ); currentTree()->addInitialStateBranching( particle, newParent, otherChild ); // for the reconstruction of kinematics, parent/child // relationships are according to the branching process: // now continue the shower bool emitted = truncatedSpaceLikeShower( newParent, beam, branch,type); // now reconstruct the momentum if( !emitted ) { if( intrinsicpT().find( progenitor() ) == intrinsicpT().end() ) { bb.kinematics->updateLast( newParent, ZERO, ZERO ); } else { pair kt = intrinsicpT()[ progenitor() ]; bb.kinematics->updateLast( newParent, kt.first*cos( kt.second ), kt.first*sin( kt.second ) ); } } particle->showerKinematics()-> updateChildren( newParent, theChildren, bb.type,false); // perform the shower of the final-state particle timeLikeShower( otherChild , type,Branching(),true); updateHistory(otherChild); // return the emitted return true; } bool QTildeShowerHandler:: truncatedSpaceLikeDecayShower(tShowerParticlePtr particle, const ShowerParticle::EvolutionScales & maxScales, Energy minmass, HardBranchingPtr branch, ShowerInteraction type, Branching fb) { // select a branching if we don't have one if(!fb.kinematics) fb = selectSpaceLikeDecayBranching(particle,maxScales,minmass,type,branch); // must be an emission, the forced one it not a truncated one assert(fb.kinematics); ShowerParticleVector children; int ntry=0; Branching fc[2]; bool setupChildren = true; while (ntry<50) { if(!fc[0].hard) fc[0] = Branching(); if(!fc[1].hard) fc[1] = Branching(); ++ntry; if(setupChildren) { ++_nFSR; // Assign the shower kinematics to the emitting particle. particle->showerKinematics(fb.kinematics); if(fb.kinematics->pT()>progenitor()->highestpT()) progenitor()->highestpT(fb.kinematics->pT()); // create the ShowerParticle objects for the two children children = createTimeLikeChildren(particle,fb.ids); // updateChildren the children particle->showerKinematics()-> updateChildren(particle, children, fb.type,_reconOpt>=3); setupChildren = false; } // select branchings for children if(!fc[0].kinematics) { if(children[0]->id()==particle->id()) { // select branching for first particle if(!fb.hard) fc[0] = selectSpaceLikeDecayBranching(children[0],maxScales,minmass,type,branch); else if(fb.hard && ! branch->children()[0]->children().empty() ) fc[0] = selectSpaceLikeDecayBranching(children[0],maxScales,minmass,type, branch->children()[0]); else fc[0] = selectSpaceLikeDecayBranching(children[0],maxScales,minmass,type, HardBranchingPtr()); } else { // select branching for first particle if(fb.hard && !branch->children()[0]->children().empty() ) fc[0] = selectTimeLikeBranching(children[0],type,branch->children()[0]); else fc[0] = selectTimeLikeBranching(children[0],type,HardBranchingPtr()); } } // select branching for the second particle if(!fc[1].kinematics) { if(children[1]->id()==particle->id()) { // select branching for first particle if(!fb.hard) fc[1] = selectSpaceLikeDecayBranching(children[1],maxScales,minmass,type,branch); else if(fb.hard && ! branch->children()[1]->children().empty() ) fc[1] = selectSpaceLikeDecayBranching(children[1],maxScales,minmass,type, branch->children()[1]); else fc[1] = selectSpaceLikeDecayBranching(children[1],maxScales,minmass,type, HardBranchingPtr()); } else { if(fb.hard && !branch->children()[1]->children().empty() ) fc[1] = selectTimeLikeBranching(children[1],type,branch->children()[1]); else fc[1] = selectTimeLikeBranching(children[1],type,HardBranchingPtr()); } } // old default if(_reconOpt==0 || (_reconOpt==1 && fb.hard) ) { // update the history if needed currentTree()->updateInitialStateShowerProduct(progenitor(),children[0]); currentTree()->addInitialStateBranching(particle,children[0],children[1]); // shower the first particle if(fc[0].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[0]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[0]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[0]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[0],false); // normal shower else timeLikeShower(children[0],type,fc[0],false); } } // shower the second particle if(fc[1].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[1]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[1]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[1]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[1],false); // normal shower else timeLikeShower(children[0],type,fc[1],false); } } updateHistory(children[1]); // branching has happened break; } // H7 default else if(_reconOpt==1) { // update the history if needed currentTree()->updateInitialStateShowerProduct(progenitor(),children[0]); currentTree()->addInitialStateBranching(particle,children[0],children[1]); // shower the first particle if(fc[0].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[0]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[0]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[0]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[0],false); // normal shower else timeLikeShower(children[0],type,fc[0],false); } } // shower the second particle if(fc[1].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[1]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[1]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[1]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[1],false); // normal shower else timeLikeShower(children[0],type,fc[1],false); } } // clean up the vetoed emission if(particle->virtualMass()==ZERO) { particle->showerKinematics(ShoKinPtr()); for(unsigned int ix=0;ixabandonChild(children[ix]); children.clear(); particle->vetoEmission(fb.type,fb.kinematics->scale()); // generate the new emission fb = selectSpaceLikeDecayBranching(particle,maxScales,minmass,type,branch); // must be at least hard emission assert(fb.kinematics); setupChildren = true; continue; } else { updateHistory(children[1]); break; } } else if(_reconOpt>=2) { // cut-off masses for the branching const vector & virtualMasses = fb.sudakov->virtualMasses(fb.ids); // compute the masses of the children Energy masses[3]; // space-like children masses[1] = children[0]->virtualMass(); // time-like child if(fc[1].kinematics) { const vector & vm = fc[1].sudakov->virtualMasses(fc[1].ids); Energy2 q2 = fc[1].kinematics->z()*(1.-fc[1].kinematics->z())*sqr(fc[1].kinematics->scale()); if(fc[1].ids[0]->id()!=ParticleID::g) q2 += sqr(vm[0]); masses[2] = sqrt(q2); } else { masses[2] = virtualMasses[2]; } masses[0]=particle->virtualMass(); double z = fb.kinematics->z(); Energy2 pt2 = (1.-z)*(z*sqr(masses[0])-sqr(masses[1])-z/(1.-z)*sqr(masses[2])); if(pt2>=ZERO) { break; } else { // reset the scales for the children for(unsigned int ix=0;ix<2;++ix) { if(fc[ix].kinematics) children[ix]->vetoEmission(fc[ix].type,fc[ix].kinematics->scale()); else { if(ix==0) children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,Constants::MaxEnergy); else children[ix]->vetoEmission(ShowerPartnerType::QCDColourLine,ZERO); } } children[0]->virtualMass(_progenitor->progenitor()->mass()); children[1]->virtualMass(ZERO); } } }; if(_reconOpt>=2) { // update the history if needed currentTree()->updateInitialStateShowerProduct(progenitor(),children[0]); currentTree()->addInitialStateBranching(particle,children[0],children[1]); // shower the first particle if(fc[0].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[0]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[0]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[0]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[0],false); // normal shower else timeLikeShower(children[0],type,fc[0],false); } } // shower the second particle if(fc[1].kinematics) { if(children[0]->id()==particle->id()) { if(!fb.hard) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch,type,fc[1]); else if(fb.hard && ! branch->children()[0]->children().empty() ) truncatedSpaceLikeDecayShower( children[0],maxScales,minmass, branch->children()[0],type,fc[1]); else spaceLikeDecayShower( children[0],maxScales,minmass,type,fc[1]); } else { if(fb.hard && !branch->children()[0]->children().empty() ) truncatedTimeLikeShower(children[0],branch->children()[0],type,fc[1],false); // normal shower else timeLikeShower(children[0],type,fc[1],false); } } updateHistory(children[1]); } return true; } void QTildeShowerHandler::connectTrees(ShowerTreePtr showerTree, HardTreePtr hardTree, bool hard ) { ShowerParticleVector particles; // find the Sudakovs for(set::iterator cit=hardTree->branchings().begin(); cit!=hardTree->branchings().end();++cit) { // Sudakovs for ISR if((**cit).parent()&&(**cit).status()==HardBranching::Incoming) { ++_nis; array br; br[0] = (**cit).parent()->branchingParticle()->id(); br[1] = (**cit). branchingParticle()->id(); br[2] = (**cit).parent()->children()[0]==*cit ? (**cit).parent()->children()[1]->branchingParticle()->id() : (**cit).parent()->children()[0]->branchingParticle()->id(); BranchingList branchings = splittingGenerator()->initialStateBranchings(); if(br[1]<0&&br[0]==br[1]) { br[0] = abs(br[0]); br[1] = abs(br[1]); } else if(br[1]<0) { br[1] = -br[1]; br[2] = -br[2]; } long index = abs(br[1]); SudakovPtr sudakov; for(BranchingList::const_iterator cjt = branchings.lower_bound(index); cjt != branchings.upper_bound(index); ++cjt ) { IdList ids = cjt->second.particles; if(ids[0]->id()==br[0]&&ids[1]->id()==br[1]&&ids[2]->id()==br[2]) { sudakov=cjt->second.sudakov; break; } } if(!sudakov) throw Exception() << "Can't find Sudakov for the hard emission in " << "QTildeShowerHandler::connectTrees() for ISR" << Exception::runerror; (**cit).parent()->sudakov(sudakov); } // Sudakovs for FSR else if(!(**cit).children().empty()) { ++_nfs; array br; br[0] = (**cit) .branchingParticle()->id(); br[1] = (**cit).children()[0]->branchingParticle()->id(); br[2] = (**cit).children()[1]->branchingParticle()->id(); BranchingList branchings = splittingGenerator()->finalStateBranchings(); if(br[0]<0) { br[0] = abs(br[0]); br[1] = abs(br[1]); br[2] = abs(br[2]); } long index = br[0]; SudakovPtr sudakov; for(BranchingList::const_iterator cjt = branchings.lower_bound(index); cjt != branchings.upper_bound(index); ++cjt ) { IdList ids = cjt->second.particles; if(ids[0]->id()==br[0]&&ids[1]->id()==br[1]&&ids[2]->id()==br[2]) { sudakov=cjt->second.sudakov; break; } } if(!sudakov) { throw Exception() << "Can't find Sudakov for the hard emission in " << "QTildeShowerHandler::connectTrees()" << Exception::runerror; } (**cit).sudakov(sudakov); } } // calculate the evolution scale for(set::iterator cit=hardTree->branchings().begin(); cit!=hardTree->branchings().end();++cit) { particles.push_back((*cit)->branchingParticle()); } showerModel()->partnerFinder()-> setInitialEvolutionScales(particles,!hard,interaction_,true); hardTree->partnersSet(true); // inverse reconstruction if(hard) { showerModel()->kinematicsReconstructor()-> deconstructHardJets(hardTree,interaction_); } else showerModel()->kinematicsReconstructor()-> deconstructDecayJets(hardTree,interaction_); // now reset the momenta of the showering particles vector particlesToShower=showerTree->extractProgenitors(); // match them map partners; for(set::const_iterator bit=hardTree->branchings().begin(); bit!=hardTree->branchings().end();++bit) { Energy2 dmin( 1e30*GeV2 ); ShowerProgenitorPtr partner; for(vector::const_iterator pit=particlesToShower.begin(); pit!=particlesToShower.end();++pit) { if(partners.find(*pit)!=partners.end()) continue; if( (**bit).branchingParticle()->id() != (**pit).progenitor()->id() ) continue; if( (**bit).branchingParticle()->isFinalState() != (**pit).progenitor()->isFinalState() ) continue; if( (**pit).progenitor()->isFinalState() ) { Energy2 dtest = sqr( (**pit).progenitor()->momentum().x() - (**bit).showerMomentum().x() ) + sqr( (**pit).progenitor()->momentum().y() - (**bit).showerMomentum().y() ) + sqr( (**pit).progenitor()->momentum().z() - (**bit).showerMomentum().z() ) + sqr( (**pit).progenitor()->momentum().t() - (**bit).showerMomentum().t() ); // add mass difference for identical particles (e.g. Z0 Z0 production) dtest += 1e10*sqr((**pit).progenitor()->momentum().m()-(**bit).showerMomentum().m()); if( dtest < dmin ) { partner = *pit; dmin = dtest; } } else { // ensure directions are right if((**pit).progenitor()->momentum().z()/(**bit).showerMomentum().z()>ZERO) { partner = *pit; break; } } } if(!partner) throw Exception() << "Failed to match shower and hard trees in QTildeShowerHandler::hardestEmission" << Exception::eventerror; partners[partner] = *bit; } for(vector::const_iterator pit=particlesToShower.begin(); pit!=particlesToShower.end();++pit) { HardBranchingPtr partner = partners[*pit]; if((**pit).progenitor()->dataPtr()->stable()) { (**pit).progenitor()->set5Momentum(partner->showerMomentum()); (**pit).copy()->set5Momentum(partner->showerMomentum()); } else { Lorentz5Momentum oldMomentum = (**pit).progenitor()->momentum(); Lorentz5Momentum newMomentum = partner->showerMomentum(); LorentzRotation boost( oldMomentum.findBoostToCM(),oldMomentum.e()/oldMomentum.mass()); (**pit).progenitor()->transform(boost); (**pit).copy() ->transform(boost); boost = LorentzRotation(-newMomentum.findBoostToCM(),newMomentum.e()/newMomentum.mass()); (**pit).progenitor()->transform(boost); (**pit).copy() ->transform(boost); } } // correction boosts for daughter trees for(map >::const_iterator tit = showerTree->treelinks().begin(); tit != showerTree->treelinks().end();++tit) { ShowerTreePtr decayTree = tit->first; map::const_iterator cit = decayTree->incomingLines().begin(); // reset the momentum of the decay particle Lorentz5Momentum oldMomentum = cit->first->progenitor()->momentum(); Lorentz5Momentum newMomentum = tit->second.second->momentum(); LorentzRotation boost( oldMomentum.findBoostToCM(),oldMomentum.e()/oldMomentum.mass()); decayTree->transform(boost,true); boost = LorentzRotation(-newMomentum.findBoostToCM(),newMomentum.e()/newMomentum.mass()); decayTree->transform(boost,true); } } void QTildeShowerHandler::doShowering(bool hard,XCPtr xcomb) { // zero number of emissions _nis = _nfs = 0; // if MC@NLO H event and limited emissions // indicate both final and initial state emission if ( currentTree()->isMCatNLOHEvent() && _limitEmissions != 0 ) { _nis = _nfs = 1; } // extract particles to shower vector particlesToShower(setupShower(hard)); // check if we should shower bool colCharge = false; for(unsigned int ix=0;ixprogenitor()->dataPtr()->coloured() || particlesToShower[ix]->progenitor()->dataPtr()->charged()) { colCharge = true; break; } } if(!colCharge) { _currenttree->hasShowered(true); return; } // setup the maximum scales for the shower if (restrictPhasespace()) setupMaximumScales(particlesToShower,xcomb); // set the hard scales for the profiles setupHardScales(particlesToShower,xcomb); // specific stuff for hard processes and decays Energy minmass(ZERO), mIn(ZERO); // hard process generate the intrinsic p_T once and for all if(hard) { generateIntrinsicpT(particlesToShower); } // decay compute the minimum mass of the final-state else { for(unsigned int ix=0;ixprogenitor()->isFinalState()) { if(particlesToShower[ix]->progenitor()->dataPtr()->stable()) minmass += particlesToShower[ix]->progenitor()->dataPtr()->constituentMass(); else minmass += particlesToShower[ix]->progenitor()->mass(); } else { mIn = particlesToShower[ix]->progenitor()->mass(); } } // throw exception if decay can't happen if ( minmass > mIn ) { throw Exception() << "QTildeShowerHandler.cc: Mass of decaying particle is " << "below constituent masses of decay products." << Exception::eventerror; } } // setup for reweighted bool reWeighting = _reWeight && hard && ShowerHandler::currentHandler()->firstInteraction(); double eventWeight=0.; unsigned int nTryReWeight(0); // create random particle vector (only need to do once) vector tmp; unsigned int nColouredIncoming = 0; while(particlesToShower.size()>0){ unsigned int xx=UseRandom::irnd(particlesToShower.size()); tmp.push_back(particlesToShower[xx]); particlesToShower.erase(particlesToShower.begin()+xx); } particlesToShower=tmp; for(unsigned int ix=0;ixprogenitor()->isFinalState() && particlesToShower[ix]->progenitor()->coloured()) ++nColouredIncoming; } bool switchRecon = hard && nColouredIncoming !=1; // main shower loop unsigned int ntry(0); bool reconstructed = false; do { // clear results of last attempt if needed if(ntry!=0) { currentTree()->clear(); setEvolutionPartners(hard,interaction_,true); _nis = _nfs = 0; // if MC@NLO H event and limited emissions // indicate both final and initial state emission if ( currentTree()->isMCatNLOHEvent() && _limitEmissions != 0 ) { _nis = _nfs = 1; } for(unsigned int ix=0; ixprogenitor()->spinInfo(); if(spin && spin->decayVertex() && dynamic_ptr_cast(spin->decayVertex())) { spin->decayVertex(VertexPtr()); } } } // loop over particles for(unsigned int ix=0;ixprogenitor()->isFinalState()) { if(!doFSR()) continue; // perform shower progenitor()->hasEmitted(startTimeLikeShower(interaction_)); } // initial-state radiation else { if(!doISR()) continue; // hard process if(hard) { // get the PDF setBeamParticle(_progenitor->beam()); if(!beamParticle()) { throw Exception() << "Incorrect type of beam particle in " << "QTildeShowerHandler::doShowering(). " << "This should not happen for conventional choices but may happen if you have used a" << " non-default choice and have not changed the create ParticleData line in the input files" << " for this particle to create BeamParticleData." << Exception::runerror; } // perform the shower // set the beam particle tPPtr beamparticle=progenitor()->original(); if(!beamparticle->parents().empty()) beamparticle=beamparticle->parents()[0]; // generate the shower progenitor()->hasEmitted(startSpaceLikeShower(beamparticle, interaction_)); } // decay else { // skip colour and electrically neutral particles if(!progenitor()->progenitor()->dataPtr()->coloured() && !progenitor()->progenitor()->dataPtr()->charged()) { progenitor()->hasEmitted(false); continue; } // perform shower // set the scales correctly. The current scale is the maximum scale for // emission not the starting scale ShowerParticle::EvolutionScales maxScales(progenitor()->progenitor()->scales()); progenitor()->progenitor()->scales() = ShowerParticle::EvolutionScales(); if(progenitor()->progenitor()->dataPtr()->charged()) { progenitor()->progenitor()->scales().QED = progenitor()->progenitor()->mass(); progenitor()->progenitor()->scales().QED_noAO = progenitor()->progenitor()->mass(); } if(progenitor()->progenitor()->hasColour()) { progenitor()->progenitor()->scales().QCD_c = progenitor()->progenitor()->mass(); progenitor()->progenitor()->scales().QCD_c_noAO = progenitor()->progenitor()->mass(); } if(progenitor()->progenitor()->hasAntiColour()) { progenitor()->progenitor()->scales().QCD_ac = progenitor()->progenitor()->mass(); progenitor()->progenitor()->scales().QCD_ac_noAO = progenitor()->progenitor()->mass(); } // perform the shower progenitor()->hasEmitted(startSpaceLikeDecayShower(maxScales,minmass, interaction_)); } } } // do the kinematic reconstruction, checking if it worked reconstructed = hard ? showerModel()->kinematicsReconstructor()-> reconstructHardJets (currentTree(),intrinsicpT(),interaction_, switchRecon && ntry>maximumTries()/2) : showerModel()->kinematicsReconstructor()-> reconstructDecayJets(currentTree(),interaction_); if(!reconstructed) continue; // apply vetos on the full shower for(vector::const_iterator it=_fullShowerVetoes.begin(); it!=_fullShowerVetoes.end();++it) { int veto = (**it).applyVeto(currentTree()); if(veto<0) continue; // veto the shower if(veto==0) { reconstructed = false; break; } // veto the shower and reweight else if(veto==1) { reconstructed = false; break; } // veto the event else if(veto==2) { throw Veto(); } } if(reWeighting) { if(reconstructed) eventWeight += 1.; reconstructed=false; ++nTryReWeight; if(nTryReWeight==_nReWeight) { reWeighting = false; if(eventWeight==0.) throw Veto(); } } } while(!reconstructed&&maximumTries()>++ntry); // check if failed to generate the shower if(ntry==maximumTries()) { if(hard) throw ShowerHandler::ShowerTriesVeto(ntry); else throw Exception() << "Failed to generate the shower after " << ntry << " attempts in QTildeShowerHandler::showerDecay()" << Exception::eventerror; } // handle the weights and apply any reweighting required if(nTryReWeight>0) { tStdEHPtr seh = dynamic_ptr_cast(generator()->currentEventHandler()); static bool first = true; if(seh) { seh->reweight(eventWeight/double(nTryReWeight)); } else if(first) { generator()->log() << "Reweighting the shower only works with internal Herwig7 processes" << "Presumably you are showering Les Houches Events. These will not be" << "reweighted\n"; first = false; } } // tree has now showered _currenttree->hasShowered(true); hardTree(HardTreePtr()); } void QTildeShowerHandler:: convertHardTree(bool hard,ShowerInteraction type) { map cmap; // incoming particles for(map::const_iterator cit=currentTree()->incomingLines().begin();cit!=currentTree()->incomingLines().end();++cit) { map::const_iterator mit = hardTree()->particles().find(cit->first->progenitor()); // put the colour lines in the map ShowerParticlePtr oldParticle = cit->first->progenitor(); ShowerParticlePtr newParticle = mit->second->branchingParticle(); ColinePtr cLine = oldParticle-> colourLine(); ColinePtr aLine = oldParticle->antiColourLine(); if(newParticle->colourLine() && cmap.find(newParticle-> colourLine())==cmap.end()) cmap[newParticle-> colourLine()] = cLine; if(newParticle->antiColourLine() && cmap.find(newParticle->antiColourLine())==cmap.end()) cmap[newParticle->antiColourLine()] = aLine; // check whether or not particle emits bool emission = mit->second->parent(); if(emission) { if(newParticle->colourLine()) { ColinePtr ctemp = newParticle-> colourLine(); ctemp->removeColoured(newParticle); } if(newParticle->antiColourLine()) { ColinePtr ctemp = newParticle->antiColourLine(); ctemp->removeAntiColoured(newParticle); } newParticle = mit->second->parent()->branchingParticle(); } // get the new colour lines ColinePtr newCLine,newALine; // sort out colour lines if(newParticle->colourLine()) { ColinePtr ctemp = newParticle-> colourLine(); ctemp->removeColoured(newParticle); if(cmap.find(ctemp)!=cmap.end()) { newCLine = cmap[ctemp]; } else { newCLine = new_ptr(ColourLine()); cmap[ctemp] = newCLine; } } // and anticolour lines if(newParticle->antiColourLine()) { ColinePtr ctemp = newParticle->antiColourLine(); ctemp->removeAntiColoured(newParticle); if(cmap.find(ctemp)!=cmap.end()) { newALine = cmap[ctemp]; } else { newALine = new_ptr(ColourLine()); cmap[ctemp] = newALine; } } // remove colour lines from old particle if(aLine) { aLine->removeAntiColoured(cit->first->copy()); aLine->removeAntiColoured(cit->first->progenitor()); } if(cLine) { cLine->removeColoured(cit->first->copy()); cLine->removeColoured(cit->first->progenitor()); } // add particle to colour lines if(newCLine) newCLine->addColoured (newParticle); if(newALine) newALine->addAntiColoured(newParticle); // insert new particles cit->first->copy(newParticle); ShowerParticlePtr sp(new_ptr(ShowerParticle(*newParticle,1,false))); cit->first->progenitor(sp); currentTree()->incomingLines()[cit->first]=sp; cit->first->perturbative(!emission); // and the emitted particle if needed if(emission) { ShowerParticlePtr newOut = mit->second->parent()->children()[1]->branchingParticle(); if(newOut->colourLine()) { ColinePtr ctemp = newOut-> colourLine(); ctemp->removeColoured(newOut); assert(cmap.find(ctemp)!=cmap.end()); cmap[ctemp]->addColoured (newOut); } if(newOut->antiColourLine()) { ColinePtr ctemp = newOut->antiColourLine(); ctemp->removeAntiColoured(newOut); assert(cmap.find(ctemp)!=cmap.end()); cmap[ctemp]->addAntiColoured(newOut); } ShowerParticlePtr sout=new_ptr(ShowerParticle(*newOut,1,true)); ShowerProgenitorPtr out=new_ptr(ShowerProgenitor(cit->first->original(),newOut,sout)); out->perturbative(false); currentTree()->outgoingLines().insert(make_pair(out,sout)); } if(hard) { // sort out the value of x if(mit->second->beam()->momentum().z()>ZERO) { sp->x(newParticle->momentum(). plus()/mit->second->beam()->momentum(). plus()); } else { sp->x(newParticle->momentum().minus()/mit->second->beam()->momentum().minus()); } } } // outgoing particles for(map::const_iterator cit=currentTree()->outgoingLines().begin();cit!=currentTree()->outgoingLines().end();++cit) { map >::const_iterator tit; for(tit = currentTree()->treelinks().begin(); tit != currentTree()->treelinks().end();++tit) { if(tit->second.first && tit->second.second==cit->first->progenitor()) break; } map::const_iterator mit = hardTree()->particles().find(cit->first->progenitor()); if(mit==hardTree()->particles().end()) continue; // put the colour lines in the map ShowerParticlePtr oldParticle = cit->first->progenitor(); ShowerParticlePtr newParticle = mit->second->branchingParticle(); ShowerParticlePtr newOut; ColinePtr cLine = oldParticle-> colourLine(); ColinePtr aLine = oldParticle->antiColourLine(); if(newParticle->colourLine() && cmap.find(newParticle-> colourLine())==cmap.end()) cmap[newParticle-> colourLine()] = cLine; if(newParticle->antiColourLine() && cmap.find(newParticle->antiColourLine())==cmap.end()) cmap[newParticle->antiColourLine()] = aLine; // check whether or not particle emits bool emission = !mit->second->children().empty(); if(emission) { if(newParticle->colourLine()) { ColinePtr ctemp = newParticle-> colourLine(); ctemp->removeColoured(newParticle); } if(newParticle->antiColourLine()) { ColinePtr ctemp = newParticle->antiColourLine(); ctemp->removeAntiColoured(newParticle); } newParticle = mit->second->children()[0]->branchingParticle(); newOut = mit->second->children()[1]->branchingParticle(); if(newParticle->id()!=oldParticle->id()&&newParticle->id()==newOut->id()) swap(newParticle,newOut); } // get the new colour lines ColinePtr newCLine,newALine; // sort out colour lines if(newParticle->colourLine()) { ColinePtr ctemp = newParticle-> colourLine(); ctemp->removeColoured(newParticle); if(cmap.find(ctemp)!=cmap.end()) { newCLine = cmap[ctemp]; } else { newCLine = new_ptr(ColourLine()); cmap[ctemp] = newCLine; } } // and anticolour lines if(newParticle->antiColourLine()) { ColinePtr ctemp = newParticle->antiColourLine(); ctemp->removeAntiColoured(newParticle); if(cmap.find(ctemp)!=cmap.end()) { newALine = cmap[ctemp]; } else { newALine = new_ptr(ColourLine()); cmap[ctemp] = newALine; } } // remove colour lines from old particle if(aLine) { aLine->removeAntiColoured(cit->first->copy()); aLine->removeAntiColoured(cit->first->progenitor()); } if(cLine) { cLine->removeColoured(cit->first->copy()); cLine->removeColoured(cit->first->progenitor()); } // special for unstable particles if(newParticle->id()==oldParticle->id() && (tit!=currentTree()->treelinks().end()||!oldParticle->dataPtr()->stable())) { Lorentz5Momentum oldMomentum = oldParticle->momentum(); Lorentz5Momentum newMomentum = newParticle->momentum(); LorentzRotation boost( oldMomentum.findBoostToCM(),oldMomentum.e()/oldMomentum.mass()); if(tit!=currentTree()->treelinks().end()) tit->first->transform(boost,false); oldParticle->transform(boost); boost = LorentzRotation(-newMomentum.findBoostToCM(),newMomentum.e()/newMomentum.mass()); oldParticle->transform(boost); if(tit!=currentTree()->treelinks().end()) tit->first->transform(boost,false); newParticle=oldParticle; } // add particle to colour lines if(newCLine) newCLine->addColoured (newParticle); if(newALine) newALine->addAntiColoured(newParticle); // insert new particles cit->first->copy(newParticle); ShowerParticlePtr sp(new_ptr(ShowerParticle(*newParticle,1,true))); cit->first->progenitor(sp); currentTree()->outgoingLines()[cit->first]=sp; cit->first->perturbative(!emission); // and the emitted particle if needed if(emission) { if(newOut->colourLine()) { ColinePtr ctemp = newOut-> colourLine(); ctemp->removeColoured(newOut); assert(cmap.find(ctemp)!=cmap.end()); cmap[ctemp]->addColoured (newOut); } if(newOut->antiColourLine()) { ColinePtr ctemp = newOut->antiColourLine(); ctemp->removeAntiColoured(newOut); assert(cmap.find(ctemp)!=cmap.end()); cmap[ctemp]->addAntiColoured(newOut); } ShowerParticlePtr sout=new_ptr(ShowerParticle(*newOut,1,true)); ShowerProgenitorPtr out=new_ptr(ShowerProgenitor(cit->first->original(),newOut,sout)); out->perturbative(false); currentTree()->outgoingLines().insert(make_pair(out,sout)); } // update any decay products if(tit!=currentTree()->treelinks().end()) currentTree()->updateLink(tit->first,make_pair(cit->first,sp)); } // reset the tree currentTree()->resetShowerProducts(); // reextract the particles and set the colour partners vector particles = currentTree()->extractProgenitorParticles(); // clear the partners for(unsigned int ix=0;ixpartner(ShowerParticlePtr()); particles[ix]->clearPartners(); } // clear the tree hardTree(HardTreePtr()); // Set the initial evolution scales showerModel()->partnerFinder()-> setInitialEvolutionScales(particles,!hard,type,!_hardtree); } Branching QTildeShowerHandler::selectTimeLikeBranching(tShowerParticlePtr particle, ShowerInteraction type, HardBranchingPtr branch) { Branching fb; unsigned int iout=0; while (true) { // break if doing truncated shower and no truncated shower needed if(branch && (!isTruncatedShowerON()||hardOnly())) break; fb=_splittingGenerator->chooseForwardBranching(*particle,_finalenhance,type); // no emission break if(!fb.kinematics) break; // special for truncated shower if(branch) { // check haven't evolved too far if(fb.kinematics->scale() < branch->scale()) { fb=Branching(); break; } // find the truncated line iout=0; if(fb.ids[1]->id()!=fb.ids[2]->id()) { if(fb.ids[1]->id()==particle->id()) iout=1; else if (fb.ids[2]->id()==particle->id()) iout=2; } else if(fb.ids[1]->id()==particle->id()) { if(fb.kinematics->z()>0.5) iout=1; else iout=2; } // apply the vetos for the truncated shower // no flavour changing branchings if(iout==0) { particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } double zsplit = iout==1 ? fb.kinematics->z() : 1-fb.kinematics->z(); // only if same interaction for forced branching ShowerInteraction type2 = convertInteraction(fb.type); // and evolution if(type2==branch->sudakov()->interactionType()) { if(zsplit < 0.5 || // hardest line veto fb.kinematics->scale()*zsplit < branch->scale() ) { // angular ordering veto particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } } // pt veto if(fb.kinematics->pT() > progenitor()->maximumpT(type2)) { particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } } // standard vetos for all emissions if(timeLikeVetoed(fb,particle)) { particle->vetoEmission(fb.type,fb.kinematics->scale()); if(particle->spinInfo()) particle->spinInfo()->decayVertex(VertexPtr()); continue; } // special for already decayed particles // don't allow flavour changing branchings bool vetoDecay = false; for(map >::const_iterator tit = currentTree()->treelinks().begin(); tit != currentTree()->treelinks().end();++tit) { if(tit->second.first == progenitor()) { map::const_iterator it = currentTree()->outgoingLines().find(progenitor()); if(it!=currentTree()->outgoingLines().end() && particle == it->second && fb.ids[0]!=fb.ids[1] && fb.ids[1]!=fb.ids[2]) { vetoDecay = true; break; } } } if(vetoDecay) { particle->vetoEmission(fb.type,fb.kinematics->scale()); if(particle->spinInfo()) particle->spinInfo()->decayVertex(VertexPtr()); continue; } break; } // normal case if(!branch) { if(fb.kinematics) fb.hard = false; return fb; } // truncated emission if(fb.kinematics) { fb.hard = false; fb.iout = iout; return fb; } // otherwise need to return the hard emission // construct the kinematics for the hard emission ShoKinPtr showerKin= branch->sudakov()->createFinalStateBranching(branch->scale(), branch->children()[0]->z(), branch->phi(), branch->children()[0]->pT()); IdList idlist(3); idlist[0] = particle->dataPtr(); idlist[1] = branch->children()[0]->branchingParticle()->dataPtr(); idlist[2] = branch->children()[1]->branchingParticle()->dataPtr(); fb = Branching( showerKin, idlist, branch->sudakov(),branch->type() ); fb.hard = true; fb.iout=0; // return it return fb; } Branching QTildeShowerHandler::selectSpaceLikeDecayBranching(tShowerParticlePtr particle, const ShowerParticle::EvolutionScales & maxScales, Energy minmass,ShowerInteraction type, HardBranchingPtr branch) { Branching fb; unsigned int iout=0; while (true) { // break if doing truncated shower and no truncated shower needed if(branch && (!isTruncatedShowerON()||hardOnly())) break; // select branching fb=_splittingGenerator->chooseDecayBranching(*particle,maxScales,minmass, _initialenhance,type); // return if no radiation if(!fb.kinematics) break; // special for truncated shower if(branch) { // check haven't evolved too far if(fb.kinematics->scale() < branch->scale()) { fb=Branching(); break; } // find the truncated line iout=0; if(fb.ids[1]->id()!=fb.ids[2]->id()) { if(fb.ids[1]->id()==particle->id()) iout=1; else if (fb.ids[2]->id()==particle->id()) iout=2; } else if(fb.ids[1]->id()==particle->id()) { if(fb.kinematics->z()>0.5) iout=1; else iout=2; } // apply the vetos for the truncated shower // no flavour changing branchings if(iout==0) { particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } ShowerInteraction type2 = convertInteraction(fb.type); double zsplit = iout==1 ? fb.kinematics->z() : 1-fb.kinematics->z(); if(type2==branch->sudakov()->interactionType()) { if(zsplit < 0.5 || // hardest line veto fb.kinematics->scale()*zsplit < branch->scale() ) { // angular ordering veto particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } } // pt veto if(fb.kinematics->pT() > progenitor()->maximumpT(type2)) { particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } } // if not vetoed break if(spaceLikeDecayVetoed(fb,particle)) { // otherwise reset scale and continue particle->vetoEmission(fb.type,fb.kinematics->scale()); continue; } break; } // normal case if(!branch) { if(fb.kinematics) fb.hard = false; return fb; } // truncated emission if(fb.kinematics) { fb.hard = false; fb.iout = iout; return fb; } // otherwise need to return the hard emission // construct the kinematics for the hard emission ShoKinPtr showerKin= branch->sudakov()->createDecayBranching(branch->scale(), branch->children()[0]->z(), branch->phi(), branch->children()[0]->pT()); IdList idlist(3); idlist[0] = particle->dataPtr(); idlist[1] = branch->children()[0]->branchingParticle()->dataPtr(); idlist[2] = branch->children()[1]->branchingParticle()->dataPtr(); // create the branching fb = Branching( showerKin, idlist, branch->sudakov(),ShowerPartnerType::QCDColourLine ); fb.hard=true; fb.iout=0; // return it return fb; } void QTildeShowerHandler::checkFlags() { string error = "Inconsistent hard emission set-up in QTildeShowerHandler::showerHardProcess(). "; if ( ( currentTree()->isMCatNLOSEvent() || currentTree()->isMCatNLOHEvent() ) ) { if (_hardEmission ==2 ) throw Exception() << error << "Cannot generate POWHEG matching with MC@NLO shower " << "approximation. Add 'set QTildeShowerHandler:HardEmission 0' to input file." << Exception::runerror; if ( canHandleMatchboxTrunc() ) throw Exception() << error << "Cannot use truncated qtilde shower with MC@NLO shower " << "approximation. Set LHCGenerator:EventHandler" << ":CascadeHandler to '/Herwig/Shower/ShowerHandler' or " << "'/Herwig/Shower/Dipole/DipoleShowerHandler'." << Exception::runerror; } else if ( ((currentTree()->isPowhegSEvent() || currentTree()->isPowhegHEvent()) ) && _hardEmission != 2){ if ( canHandleMatchboxTrunc()) throw Exception() << error << "Unmatched events requested for POWHEG shower " << "approximation. Set QTildeShowerHandler:HardEmission to " << "'POWHEG'." << Exception::runerror; else if (_hardEmissionWarn) { _hardEmissionWarn = false; _hardEmission=2; throw Exception() << error << "Unmatched events requested for POWHEG shower " << "approximation. Changing QTildeShowerHandler:HardEmission from " << _hardEmission << " to 2" << Exception::warning; } } if ( currentTree()->isPowhegSEvent() || currentTree()->isPowhegHEvent()) { if (currentTree()->showerApproximation()->needsTruncatedShower() && !canHandleMatchboxTrunc() ) throw Exception() << error << "Current shower handler cannot generate truncated shower. " << "Set Generator:EventHandler:CascadeHandler to " << "'/Herwig/Shower/PowhegShowerHandler'." << Exception::runerror; } else if ( currentTree()->truncatedShower() && _missingTruncWarn) { _missingTruncWarn=false; throw Exception() << "Warning: POWHEG shower approximation used without " << "truncated shower. Set Generator:EventHandler:" << "CascadeHandler to '/Herwig/Shower/PowhegShowerHandler' and " << "'MEMatching:TruncatedShower Yes'." << Exception::warning; } // else if ( !dipme && _hardEmissionMode > 1 && // firstInteraction()) // throw Exception() << error // << "POWHEG matching requested for LO events. Include " // << "'set Factory:ShowerApproximation MEMatching' in input file." // << Exception::runerror; } tPPair QTildeShowerHandler::remakeRemnant(tPPair oldp){ // get the parton extractor PartonExtractor & pex = *lastExtractor(); // get the new partons tPPair newp = make_pair(findFirstParton(oldp.first ), findFirstParton(oldp.second)); // if the same do nothing if(newp == oldp) return oldp; // Creates the new remnants and returns the new PartonBinInstances // ATTENTION Broken here for very strange configuration PBIPair newbins = pex.newRemnants(oldp, newp, newStep()); newStep()->addIntermediate(newp.first); newStep()->addIntermediate(newp.second); // return the new partons return newp; } PPtr QTildeShowerHandler::findFirstParton(tPPtr seed) const{ if(seed->parents().empty()) return seed; tPPtr parent = seed->parents()[0]; //if no parent there this is a loose end which will //be connected to the remnant soon. if(!parent || parent == incomingBeams().first || parent == incomingBeams().second ) return seed; else return findFirstParton(parent); } void QTildeShowerHandler::decay(ShowerTreePtr tree, ShowerDecayMap & decay) { // must be one incoming particle assert(tree->incomingLines().size()==1); // apply any transforms tree->applyTransforms(); // if already decayed return if(!tree->outgoingLines().empty()) return; // now we need to replace the particle with a new copy after the shower // find particle after the shower map >::const_iterator tit = tree->parent()->treelinks().find(tree); assert(tit!=tree->parent()->treelinks().end()); ShowerParticlePtr newparent=tit->second.second; PerturbativeProcessPtr newProcess = new_ptr(PerturbativeProcess()); newProcess->incoming().push_back(make_pair(newparent,PerturbativeProcessPtr())); DecayProcessMap decayMap; ShowerHandler::decay(newProcess,decayMap); ShowerTree::constructTrees(tree,decay,newProcess,decayMap); } namespace { ShowerProgenitorPtr findFinalStateLine(ShowerTreePtr tree, long id, Lorentz5Momentum momentum) { map::iterator partner; Energy2 dmin(1e30*GeV2); for(map::iterator cit =tree->outgoingLines().begin(); cit!=tree->outgoingLines().end(); ++cit) { if(cit->second->id()!=id) continue; Energy2 test = sqr(cit->second->momentum().x()-momentum.x())+ sqr(cit->second->momentum().y()-momentum.y())+ sqr(cit->second->momentum().z()-momentum.z())+ sqr(cit->second->momentum().t()-momentum.t()); if(testfirst; } ShowerProgenitorPtr findInitialStateLine(ShowerTreePtr tree, long id, Lorentz5Momentum momentum) { map::iterator partner; Energy2 dmin(1e30*GeV2); for(map::iterator cit =tree->incomingLines().begin(); cit!=tree->incomingLines().end(); ++cit) { if(cit->second->id()!=id) continue; Energy2 test = sqr(cit->second->momentum().x()-momentum.x())+ sqr(cit->second->momentum().y()-momentum.y())+ sqr(cit->second->momentum().z()-momentum.z())+ sqr(cit->second->momentum().t()-momentum.t()); if(testfirst; } void fixSpectatorColours(PPtr newSpect,ShowerProgenitorPtr oldSpect, ColinePair & cline,ColinePair & aline, bool reconnect) { cline.first = oldSpect->progenitor()->colourLine(); cline.second = newSpect->colourLine(); aline.first = oldSpect->progenitor()->antiColourLine(); aline.second = newSpect->antiColourLine(); if(!reconnect) return; if(cline.first) { cline.first ->removeColoured(oldSpect->copy()); cline.first ->removeColoured(oldSpect->progenitor()); cline.second->removeColoured(newSpect); cline.first ->addColoured(newSpect); } if(aline.first) { aline.first ->removeAntiColoured(oldSpect->copy()); aline.first ->removeAntiColoured(oldSpect->progenitor()); aline.second->removeAntiColoured(newSpect); aline.first ->addAntiColoured(newSpect); } } void fixInitialStateEmitter(ShowerTreePtr tree, PPtr newEmit,PPtr emitted, ShowerProgenitorPtr emitter, ColinePair cline,ColinePair aline,double x) { // sort out the colours if(emitted->dataPtr()->iColour()==PDT::Colour8) { // emitter if(cline.first && cline.first == emitter->progenitor()->antiColourLine() && cline.second !=newEmit->antiColourLine()) { // sort out not radiating line ColinePtr col = emitter->progenitor()->colourLine(); if(col) { col->removeColoured(emitter->copy()); col->removeColoured(emitter->progenitor()); newEmit->colourLine()->removeColoured(newEmit); col->addColoured(newEmit); } } else if(aline.first && aline.first == emitter->progenitor()->colourLine() && aline.second !=newEmit->colourLine()) { // sort out not radiating line ColinePtr anti = emitter->progenitor()->antiColourLine(); if(anti) { anti->removeAntiColoured(emitter->copy()); anti->removeAntiColoured(emitter->progenitor()); newEmit->colourLine()->removeAntiColoured(newEmit); anti->addAntiColoured(newEmit); } } else assert(false); // emitted if(cline.first && cline.second==emitted->colourLine()) { cline.second->removeColoured(emitted); cline.first->addColoured(emitted); } else if(aline.first && aline.second==emitted->antiColourLine()) { aline.second->removeAntiColoured(emitted); aline.first->addAntiColoured(emitted); } else assert(false); } else { if(emitter->progenitor()->antiColourLine() ) { ColinePtr col = emitter->progenitor()->antiColourLine(); col->removeAntiColoured(emitter->copy()); col->removeAntiColoured(emitter->progenitor()); if(newEmit->antiColourLine()) { newEmit->antiColourLine()->removeAntiColoured(newEmit); col->addAntiColoured(newEmit); } else if (emitted->colourLine()) { emitted->colourLine()->removeColoured(emitted); col->addColoured(emitted); } else assert(false); } if(emitter->progenitor()->colourLine() ) { ColinePtr col = emitter->progenitor()->colourLine(); col->removeColoured(emitter->copy()); col->removeColoured(emitter->progenitor()); if(newEmit->colourLine()) { newEmit->colourLine()->removeColoured(newEmit); col->addColoured(newEmit); } else if (emitted->antiColourLine()) { emitted->antiColourLine()->removeAntiColoured(emitted); col->addAntiColoured(emitted); } else assert(false); } } // update the emitter emitter->copy(newEmit); ShowerParticlePtr sp = new_ptr(ShowerParticle(*newEmit,1,false)); sp->x(x); emitter->progenitor(sp); tree->incomingLines()[emitter]=sp; emitter->perturbative(false); // add emitted sp=new_ptr(ShowerParticle(*emitted,1,true)); ShowerProgenitorPtr gluon=new_ptr(ShowerProgenitor(emitter->original(),emitted,sp)); gluon->perturbative(false); tree->outgoingLines().insert(make_pair(gluon,sp)); } void fixFinalStateEmitter(ShowerTreePtr tree, PPtr newEmit,PPtr emitted, ShowerProgenitorPtr emitter, ColinePair cline,ColinePair aline) { map >::const_iterator tit; // special case if decayed for(tit = tree->treelinks().begin(); tit != tree->treelinks().end();++tit) { if(tit->second.first && tit->second.second==emitter->progenitor()) break; } // sort out the colour lines if(cline.first && cline.first == emitter->progenitor()->antiColourLine() && cline.second !=newEmit->antiColourLine()) { // sort out not radiating line ColinePtr col = emitter->progenitor()->colourLine(); if(col) { col->removeColoured(emitter->copy()); col->removeColoured(emitter->progenitor()); newEmit->colourLine()->removeColoured(newEmit); col->addColoured(newEmit); } } else if(aline.first && aline.first == emitter->progenitor()->colourLine() && aline.second !=newEmit->colourLine()) { // sort out not radiating line ColinePtr anti = emitter->progenitor()->antiColourLine(); if(anti) { anti->removeAntiColoured(emitter->copy()); anti->removeAntiColoured(emitter->progenitor()); newEmit->colourLine()->removeAntiColoured(newEmit); anti->addAntiColoured(newEmit); } } else assert(false); // update the emitter emitter->copy(newEmit); ShowerParticlePtr sp = new_ptr(ShowerParticle(*newEmit,1,true)); emitter->progenitor(sp); tree->outgoingLines()[emitter]=sp; emitter->perturbative(false); // update for decaying particles if(tit!=tree->treelinks().end()) tree->updateLink(tit->first,make_pair(emitter,sp)); // add the emitted particle // sort out the colour if(cline.first && cline.second==emitted->antiColourLine()) { cline.second->removeAntiColoured(emitted); cline.first->addAntiColoured(emitted); } else if(aline.first && aline.second==emitted->colourLine()) { aline.second->removeColoured(emitted); aline.first->addColoured(emitted); } else assert(false); sp=new_ptr(ShowerParticle(*emitted,1,true)); ShowerProgenitorPtr gluon=new_ptr(ShowerProgenitor(emitter->original(), emitted,sp)); gluon->perturbative(false); tree->outgoingLines().insert(make_pair(gluon,sp)); } } void QTildeShowerHandler::setupMECorrection(RealEmissionProcessPtr real) { assert(real); currentTree()->hardMatrixElementCorrection(true); // II emission if(real->emitter() < real->incoming().size() && real->spectator() < real->incoming().size()) { // recoiling system for( map::const_iterator cjt= currentTree()->outgoingLines().begin(); cjt != currentTree()->outgoingLines().end();++cjt ) { cjt->first->progenitor()->transform(real->transformation()); cjt->first->copy()->transform(real->transformation()); } // the the radiating system ShowerProgenitorPtr emitter,spectator; unsigned int iemit = real->emitter(); unsigned int ispect = real->spectator(); int ig = int(real->emitted())-int(real->incoming().size()); emitter = findInitialStateLine(currentTree(), real->bornIncoming()[iemit]->id(), real->bornIncoming()[iemit]->momentum()); spectator = findInitialStateLine(currentTree(), real->bornIncoming()[ispect]->id(), real->bornIncoming()[ispect]->momentum()); // sort out the colours ColinePair cline,aline; fixSpectatorColours(real->incoming()[ispect],spectator,cline,aline,true); // update the spectator spectator->copy(real->incoming()[ispect]); ShowerParticlePtr sp(new_ptr(ShowerParticle(*real->incoming()[ispect],1,false))); sp->x(ispect ==0 ? real->x().first :real->x().second); spectator->progenitor(sp); currentTree()->incomingLines()[spectator]=sp; spectator->perturbative(true); // now for the emitter fixInitialStateEmitter(currentTree(),real->incoming()[iemit],real->outgoing()[ig], emitter,cline,aline,iemit ==0 ? real->x().first :real->x().second); } // FF emission else if(real->emitter() >= real->incoming().size() && real->spectator() >= real->incoming().size()) { assert(real->outgoing()[real->emitted()-real->incoming().size()]->id()==ParticleID::g); // find the emitter and spectator in the shower tree ShowerProgenitorPtr emitter,spectator; int iemit = int(real->emitter())-int(real->incoming().size()); emitter = findFinalStateLine(currentTree(), real->bornOutgoing()[iemit]->id(), real->bornOutgoing()[iemit]->momentum()); int ispect = int(real->spectator())-int(real->incoming().size()); spectator = findFinalStateLine(currentTree(), real->bornOutgoing()[ispect]->id(), real->bornOutgoing()[ispect]->momentum()); map >::const_iterator tit; // first the spectator // special case if decayed for(tit = currentTree()->treelinks().begin(); tit != currentTree()->treelinks().end();++tit) { if(tit->second.first && tit->second.second==spectator->progenitor()) break; } // sort out the colours ColinePair cline,aline; fixSpectatorColours(real->outgoing()[ispect],spectator,cline,aline,true); // update the spectator spectator->copy(real->outgoing()[ispect]); ShowerParticlePtr sp(new_ptr(ShowerParticle(*real->outgoing()[ispect],1,true))); spectator->progenitor(sp); currentTree()->outgoingLines()[spectator]=sp; spectator->perturbative(true); // update for decaying particles if(tit!=currentTree()->treelinks().end()) currentTree()->updateLink(tit->first,make_pair(spectator,sp)); // now the emitting particle int ig = int(real->emitted())-int(real->incoming().size()); fixFinalStateEmitter(currentTree(),real->outgoing()[iemit], real->outgoing()[ig], emitter,cline,aline); } // IF emission else { // scattering process if(real->incoming().size()==2) { ShowerProgenitorPtr emitter,spectator; unsigned int iemit = real->emitter(); unsigned int ispect = real->spectator(); int ig = int(real->emitted())-int(real->incoming().size()); ColinePair cline,aline; // incoming spectator if(ispect<2) { spectator = findInitialStateLine(currentTree(), real->bornIncoming()[ispect]->id(), real->bornIncoming()[ispect]->momentum()); fixSpectatorColours(real->incoming()[ispect],spectator,cline,aline,true); // update the spectator spectator->copy(real->incoming()[ispect]); ShowerParticlePtr sp(new_ptr(ShowerParticle(*real->incoming()[ispect],1,false))); sp->x(ispect ==0 ? real->x().first :real->x().second); spectator->progenitor(sp); currentTree()->incomingLines()[spectator]=sp; spectator->perturbative(true); } // outgoing spectator else { spectator = findFinalStateLine(currentTree(), real->bornOutgoing()[ispect-real->incoming().size()]->id(), real->bornOutgoing()[ispect-real->incoming().size()]->momentum()); // special case if decayed map >::const_iterator tit; for(tit = currentTree()->treelinks().begin(); tit != currentTree()->treelinks().end();++tit) { if(tit->second.first && tit->second.second==spectator->progenitor()) break; } fixSpectatorColours(real->outgoing()[ispect-real->incoming().size()],spectator,cline,aline,true); // update the spectator spectator->copy(real->outgoing()[ispect-real->incoming().size()]); ShowerParticlePtr sp(new_ptr(ShowerParticle(*real->outgoing()[ispect-real->incoming().size()],1,true))); spectator->progenitor(sp); currentTree()->outgoingLines()[spectator]=sp; spectator->perturbative(true); // update for decaying particles if(tit!=currentTree()->treelinks().end()) currentTree()->updateLink(tit->first,make_pair(spectator,sp)); } // incoming emitter if(iemit<2) { emitter = findInitialStateLine(currentTree(), real->bornIncoming()[iemit]->id(), real->bornIncoming()[iemit]->momentum()); fixInitialStateEmitter(currentTree(),real->incoming()[iemit],real->outgoing()[ig], emitter,aline,cline,iemit ==0 ? real->x().first :real->x().second); } // outgoing emitter else { emitter = findFinalStateLine(currentTree(), real->bornOutgoing()[iemit-real->incoming().size()]->id(), real->bornOutgoing()[iemit-real->incoming().size()]->momentum()); fixFinalStateEmitter(currentTree(),real->outgoing()[iemit-real->incoming().size()], real->outgoing()[ig],emitter,aline,cline); } } // decay process else { assert(real->spectator()==0); unsigned int iemit = real->emitter()-real->incoming().size(); int ig = int(real->emitted())-int(real->incoming().size()); ColinePair cline,aline; // incoming spectator ShowerProgenitorPtr spectator = findInitialStateLine(currentTree(), real->bornIncoming()[0]->id(), real->bornIncoming()[0]->momentum()); fixSpectatorColours(real->incoming()[0],spectator,cline,aline,false); // find the emitter ShowerProgenitorPtr emitter = findFinalStateLine(currentTree(), real->bornOutgoing()[iemit]->id(), real->bornOutgoing()[iemit]->momentum()); // recoiling system for( map::const_iterator cjt= currentTree()->outgoingLines().begin(); cjt != currentTree()->outgoingLines().end();++cjt ) { if(cjt->first==emitter) continue; cjt->first->progenitor()->transform(real->transformation()); cjt->first->copy()->transform(real->transformation()); } // sort out the emitter fixFinalStateEmitter(currentTree(),real->outgoing()[iemit], real->outgoing()[ig],emitter,aline,cline); } } // clean up the shower tree _currenttree->resetShowerProducts(); } diff --git a/Tests/Makefile.am b/Tests/Makefile.am --- a/Tests/Makefile.am +++ b/Tests/Makefile.am @@ -1,398 +1,400 @@ AM_LDFLAGS += -module -avoid-version -rpath /dummy/path/not/used EXTRA_DIST = Inputs python Rivet EXTRA_LTLIBRARIES = LeptonTest.la GammaTest.la HadronTest.la DISTest.la if WANT_LIBFASTJET EXTRA_LTLIBRARIES += HadronJetTest.la LeptonJetTest.la HadronJetTest_la_SOURCES = \ Hadron/VHTest.h Hadron/VHTest.cc\ Hadron/VTest.h Hadron/VTest.cc\ Hadron/HTest.h Hadron/HTest.cc HadronJetTest_la_CPPFLAGS = $(AM_CPPFLAGS) $(FASTJETINCLUDE) \ -I$(FASTJETPATH) HadronJetTest_la_LIBADD = $(FASTJETLIBS) LeptonJetTest_la_SOURCES = \ Lepton/TopDecay.h Lepton/TopDecay.cc LeptonJetTest_la_CPPFLAGS = $(AM_CPPFLAGS) $(FASTJETINCLUDE) \ -I$(FASTJETPATH) LeptonJetTest_la_LIBADD = $(FASTJETLIBS) endif LeptonTest_la_SOURCES = \ Lepton/VVTest.h Lepton/VVTest.cc \ Lepton/VBFTest.h Lepton/VBFTest.cc \ Lepton/VHTest.h Lepton/VHTest.cc \ Lepton/FermionTest.h Lepton/FermionTest.cc GammaTest_la_SOURCES = \ Gamma/GammaMETest.h Gamma/GammaMETest.cc \ Gamma/GammaPMETest.h Gamma/GammaPMETest.cc DISTest_la_SOURCES = \ DIS/DISTest.h DIS/DISTest.cc HadronTest_la_SOURCES = \ Hadron/HadronVVTest.h Hadron/HadronVVTest.cc\ Hadron/HadronVBFTest.h Hadron/HadronVBFTest.cc\ Hadron/WHTest.h Hadron/WHTest.cc\ Hadron/ZHTest.h Hadron/ZHTest.cc\ Hadron/VGammaTest.h Hadron/VGammaTest.cc\ Hadron/ZJetTest.h Hadron/ZJetTest.cc\ Hadron/WJetTest.h Hadron/WJetTest.cc\ Hadron/QQHTest.h Hadron/QQHTest.cc REPO = $(top_builddir)/src/HerwigDefaults.rpo HERWIG = $(top_builddir)/src/Herwig HWREAD = $(HERWIG) read --repo $(REPO) -L $(builddir)/.libs -i $(top_builddir)/src HWBUILD = $(HERWIG) build --repo $(REPO) -L $(builddir)/.libs -i $(top_builddir)/src HWINTEGRATE = $(HERWIG) integrate HWRUN = $(HERWIG) run -N $${NUMEVENTS:-10000} tests : tests-LEP tests-DIS tests-LHC tests-Gamma LEPDEPS = \ test-LEP-VV \ test-LEP-VH \ test-LEP-VBF \ test-LEP-BB \ test-LEP-Quarks \ test-LEP-Leptons if WANT_LIBFASTJET LEPDEPS += test-LEP-TopDecay endif tests-LEP : $(LEPDEPS) tests-DIS : test-DIS-Charged test-DIS-Neutral LHCDEPS = \ test-LHC-WW test-LHC-WZ test-LHC-ZZ \ test-LHC-ZGamma test-LHC-WGamma \ test-LHC-ZH test-LHC-WH \ test-LHC-ZJet test-LHC-WJet \ test-LHC-Z test-LHC-W \ test-LHC-ZZVBF test-LHC-VBF \ test-LHC-WWVBF \ test-LHC-bbH test-LHC-ttH \ test-LHC-GammaGamma test-LHC-GammaJet \ test-LHC-Higgs test-LHC-HiggsJet \ test-LHC-QCDFast test-LHC-QCD \ test-LHC-Top if WANT_LIBFASTJET LHCDEPS += \ test-LHC-Bottom \ test-LHC-WHJet test-LHC-ZHJet test-LHC-HJet \ test-LHC-ZShower test-LHC-WShower \ test-LHC-WHJet-Powheg test-LHC-ZHJet-Powheg test-LHC-HJet-Powheg \ test-LHC-ZShower-Powheg test-LHC-WShower-Powheg endif tests-LHC : $(LHCDEPS) tests-Gamma : test-Gamma-FF test-Gamma-WW test-Gamma-P LEPLIBS = LeptonTest.la HADLIBS = HadronTest.la if WANT_LIBFASTJET LEPLIBS += LeptonJetTest.la HADLIBS += HadronJetTest.la endif test-LEP-% : Inputs/LEP-%.in $(LEPLIBS) $(HWREAD) $< $(HWRUN) $(notdir $(subst .in,.run,$<)) test-Gamma-% : Inputs/Gamma-%.in GammaTest.la $(HWREAD) $< $(HWRUN) $(notdir $(subst .in,.run,$<)) test-DIS-% : Inputs/DIS-%.in DISTest.la $(HWREAD) $< $(HWRUN) $(notdir $(subst .in,.run,$<)) test-LHC-% : Inputs/LHC-%.in GammaTest.la $(HADLIBS) $(HWREAD) $< $(HWRUN) $(notdir $(subst .in,.run,$<)) tests-Rivet : Rivet-LEP Rivet-BFactory Rivet-DIS Rivet-Star Rivet-SppS \ Rivet-TVT-WZ Rivet-TVT-Photon Rivet-TVT-Jets \ Rivet-LHC-Jets Rivet-LHC-EW Rivet-LHC-Photon Rivet-LHC-Higgs Rivet-%.run : Rivet/%.in $(HWBUILD) -c .cache/$(subst .run,,$@) $< Rivet-Matchbox-%.yoda : Rivet-Matchbox-%.run $(HWINTEGRATE) -c .cache/$(subst .run,,$<) $< $(HWRUN) -c .cache/$(subst .run,,$<) $< Rivet-%.yoda : Rivet-%.run $(HWRUN) $< Rivet/%.in : python/make_input_files.py $(notdir $(subst .in,,$@)) Rivet-inputfiles: $(shell echo Rivet/LEP{,-Powheg,-Matchbox,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox-Powheg,-Merging}-{9.4,12,13,17,27.6,29,30.2,30.7,30.75,30,31.3,34.8,43.6,50,52,55,56,57,60.8,60,61.4,10,12.8,22,26.8,35,44,48.0,91,93.0,130,133,136,161,172,177,183,189,192,196,197,200,202,206,91-nopi}.in) \ $(shell echo Rivet/LEP{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Powheg,-Matchbox-Powheg}-14.in) \ $(shell echo Rivet/LEP{,-Dipole}-{10.5,11.96,12.8,13.96,16.86,21.84,26.8,28.48,35.44,48.0,97.0}-gg.in) \ $(shell echo Rivet/BFactory{,-Powheg,-Matchbox,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox-Powheg}-{10.52,10.52-sym,10.54,10.45}.in) \ $(shell echo Rivet/BFactory{,-Dipole}-{Upsilon,Upsilon2,Upsilon4,Tau,10.58-res}.in) \ $(shell echo Rivet/DIS{,-NoME,-Powheg,-Matchbox,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox-Powheg,-Merging}-{e--LowQ2,e+-LowQ2,e+-HighQ2}.in) \ $(shell echo Rivet/TVT{,-Powheg,-Matchbox,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox-Powheg,-Merging}-{Run-I-Z,Run-I-W,Run-I-WZ,Run-II-Z-e,Run-II-Z-{,LowMass-,HighMass-}mu,Run-II-W}.in) \ $(shell echo Rivet/TVT{,-Dipole}-Run-II-{DiPhoton-GammaGamma,DiPhoton-GammaJet,PromptPhoton}.in) \ $(shell echo Rivet/TVT-Powheg-Run-II-{DiPhoton-GammaGamma,DiPhoton-GammaJet}.in) \ $(shell echo Rivet/TVT{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{Run-II-Jets-{0..11},Run-I-Jets-{1..8}}.in ) \ $(shell echo Rivet/TVT{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{630-Jets-{1..3},300-Jets-1,900-Jets-1}.in ) \ $(shell echo Rivet/TVT{,-Dipole}-{Run-I,Run-II,300,630,900}-UE.in) \ $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-7-DiJets-{1..7}-{A,B,C}.in ) \ $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{7,8,13}-Jets-{0..10}.in ) \ $(shell echo Rivet/LHC{,-Dipole}-{900,2360,2760,7,8,13}-UE.in ) \ $(shell echo Rivet/LHC{,-Dipole}-{900,7,13}-UE-Long.in ) \ $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-7-Charm-{1..5}.in) \ $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-7-Bottom-{0..8}.in) \ - $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{7,8,13}-Top-{L,SL,All}.in) \ + $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{7,8,13}-Top-{L,SL}.in) \ + $(shell echo Rivet/LHC{,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Matchbox,-Matchbox-Powheg,-Merging}-{7,8}-Top.in) \ $(shell echo Rivet/Star{,-Dipole}-{UE,Jets-{1..4}}.in ) \ $(shell echo Rivet/SppS{,-Dipole}-{200,500,900,546}-UE.in ) \ - $(shell echo Rivet/LHC{,-Matchbox,-Matchbox-Powheg,-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-{W-{e,mu},13-Z-{e,mu},Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},Z-{e,mu,mu-SOPHTY},Z-LowMass-{e,mu},Z-MedMass-e,WZ,WW-{emu,ll},ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll,W-Z-{e,mu}}.in) \ + $(shell echo Rivet/LHC{,-Matchbox,-Matchbox-Powheg,-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-{W-{e,mu},13-Z-{e,mu},Z-HighMass{1,2}-e,{8,13}-W-mu,8-Z-Mass{1..4}-{e,mu},Z-{e,mu,mu-SOPHTY},Z-LowMass-{e,mu},Z-MedMass-e,WZ,WW-{emu,ll},ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll,W-Z-{e,mu}}.in) \ $(shell echo Rivet/LHC{,-Dipole}-7-{W,Z}Gamma-{e,mu}.in) \ $(shell echo Rivet/LHC{,-Matchbox,-Matchbox-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-{7-W-Jet-{1..3}-e,7-Z-Jet-{0..3}-e,7-Z-Jet-0-mu}.in) \ $(shell echo Rivet/LHC{-Matchbox,-Matchbox-Powheg,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-{Z-b,Z-bb,W-b,8-Z-jj}.in) \ $(shell echo Rivet/LHC{,-Dipole}-{7,8}-PromptPhoton-{1..4}.in) Rivet/LHC-GammaGamma-7.in \ $(shell echo Rivet/LHC{,-Powheg}-{7,8}-{DiPhoton-GammaGamma,DiPhoton-GammaJet}.in) \ $(shell echo Rivet/LHC{,-Powheg,-Matchbox,-Matchbox-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-{ggH,VBF,WH,ZH}.in) \ $(shell echo Rivet/LHC{,-Powheg,-Matchbox,-Matchbox-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-8-{{ggH,VBF,WH,ZH}{,-GammaGamma},ggH-WW}.in) \ $(shell echo Rivet/LHC{,-Matchbox,-Matchbox-Powheg,-Dipole,-Dipole-MCatNLO,-Dipole-Matchbox-Powheg,-Merging}-ggHJet.in) # $(shell echo Rivet/ISR-{30,44,53,62}-UE.in ) $(shell echo Rivet/SppS-{53,63}-UE.in ) Rivet-LEP : Rivet-LEP/done touch $@ Rivet-LEP/done : $(shell echo Rivet{,-Powheg,-Matchbox,-Dipole}-LEP-{9.4,12,13,17,27.6,29,30.2,30.7,30.75,30,31.3,34.8,43.6,50,52,55,56,57,60.8,60,61.4,10,12.8,22,26.8,35,44,48.0,91,93.0,130,133,136,161,172,177,183,189,192,196,197,200,202,206,91-nopi}.yoda) \ $(shell echo Rivet-LEP-{10.5,11.96,12.8,13.96,16.86,21.84,26.8,28.48,35.44,48.0,97.0}-gg.yoda) \ $(shell echo Rivet{,-Powheg,-Matchbox,-Matchbox-Powheg,-Dipole}-LEP-14.yoda) rm -rf Rivet-LEP python/merge-LEP --with-gg LEP python/merge-LEP Powheg-LEP python/merge-LEP Matchbox-LEP python/merge-LEP Dipole-LEP rivet-mkhtml -o Rivet-LEP LEP.yoda:Hw Powheg-LEP.yoda:Hw-Powheg Matchbox-LEP.yoda:Hw-Matchbox Dipole-LEP.yoda:Hw-Dipole touch $@ Rivet-BFactory : Rivet-BFactory/done touch $@ Rivet-BFactory/done: $(shell echo Rivet{,-Powheg,-Matchbox,-Dipole}-BFactory-{10.52,10.52-sym,10.54,10.45}.yoda) \ $(shell echo Rivet-BFactory-{Upsilon,Upsilon2,Upsilon4,Tau,10.58-res,10.58}.yoda) rm -rf Rivet-BFactory python/merge-BFactory BFactory python/merge-BFactory Powheg-BFactory python/merge-BFactory Matchbox-BFactory python/merge-BFactory Dipole-BFactory rivet-mkhtml -o Rivet-BFactory BFactory.yoda:Hw Powheg-BFactory.yoda:Hw-Powheg Matchbox-BFactory.yoda:Hw-Matchbox Dipole-BFactory.yoda:Hw-Dipole touch $@ Rivet-DIS : Rivet-DIS/done touch $@ Rivet-DIS/done: $(shell echo Rivet{-DIS,-DIS-NoME,-Powheg-DIS,-Matchbox-DIS,-Dipole-DIS}-{e--LowQ2,e+-LowQ2,e+-HighQ2}.yoda) rm -rf Rivet-DIS python/merge-DIS DIS python/merge-DIS Powheg-DIS python/merge-DIS DIS-NoME python/merge-DIS Matchbox-DIS python/merge-DIS Dipole-DIS rivet-mkhtml -o Rivet-DIS DIS.yoda:Hw Powheg-DIS.yoda:Hw-Powheg DIS-NoME.yoda:Hw-NoME Matchbox-DIS.yoda:Hw-Matchbox Dipole-DIS.yoda:Hw-Dipole touch $@ Rivet-TVT-WZ : Rivet-TVT-WZ/done touch $@ Rivet-TVT-WZ/done: $(shell echo Rivet{,-Powheg,-Matchbox,-Dipole}-TVT-{Run-I-Z,Run-I-W,Run-I-WZ,Run-II-Z-{e,{,LowMass-,HighMass-}mu},Run-II-W}.yoda) rm -rf Rivet-TVT-WZ python/merge-TVT-EW Rivet-TVT-Run-II-W.yoda Rivet-TVT-Run-II-Z-{e,{,LowMass-,HighMass-}mu}.yoda\ Rivet-TVT-Run-I-{W,Z,WZ}.yoda -o TVT-WZ.yoda python/merge-TVT-EW Rivet-TVT-Powheg-Run-II-W.yoda Rivet-TVT-Powheg-Run-II-Z-{e,{,LowMass-,HighMass-}mu}.yoda\ Rivet-TVT-Powheg-Run-I-{W,Z,WZ}.yoda -o TVT-Powheg-WZ.yoda python/merge-TVT-EW Rivet-TVT-Matchbox-Run-II-W.yoda Rivet-TVT-Matchbox-Run-II-Z-{e,{,LowMass-,HighMass-}mu}.yoda\ Rivet-TVT-Matchbox-Run-I-{W,Z,WZ}.yoda -o TVT-Matchbox-WZ.yoda python/merge-TVT-EW Rivet-TVT-Dipole-Run-II-W.yoda Rivet-TVT-Dipole-Run-II-Z-{e,{,LowMass-,HighMass-}mu}.yoda\ Rivet-TVT-Dipole-Run-I-{W,Z,WZ}.yoda -o TVT-Dipole-WZ.yoda rivet-mkhtml -o Rivet-TVT-WZ TVT-WZ.yoda:Hw TVT-Powheg-WZ.yoda:Hw-Powheg TVT-Matchbox-WZ.yoda:Hw-Matchbox TVT-Dipole-WZ.yoda:Hw-Dipole touch $@ Rivet-TVT-Photon : Rivet-TVT-Photon/done touch $@ Rivet-TVT-Photon/done: $(shell echo Rivet-TVT-Run-II-{DiPhoton-GammaGamma,DiPhoton-GammaJet,PromptPhoton}.yoda) \ $(shell echo Rivet-Powheg-TVT-Run-II-{DiPhoton-GammaGamma,DiPhoton-GammaJet}.yoda) rm -rf Rivet-TVT-Photon python/merge-TVT-Photon TVT -o TVT-Photon.yoda python/merge-TVT-Photon TVT-Powheg -o TVT-Powheg-Photon.yoda rivet-mkhtml -o Rivet-TVT-Photon TVT-Photon.yoda:Hw TVT-Powheg-Photon.yoda:Hw-Powheg touch $@ Rivet-TVT-Jets : Rivet-TVT-Jets/done touch $@ Rivet-TVT-Jets/done: $(shell echo Rivet-TVT-{Run-II-Jets-{0..11},Run-I-Jets-{1..8}}.yoda ) \ $(shell echo Rivet-TVT-{630-Jets-{1..3},300-Jets-1,900-Jets-1}.yoda ) \ $(shell echo Rivet-TVT-{Run-I,Run-II,300,630,900}-UE.yoda) rm -rf Rivet-TVT-Jets python/merge-TVT-Jets TVT rivet-mkhtml -o Rivet-TVT-Jets TVT-Jets.yoda:Hw touch $@ #python/merge-TVT-Energy TVT #rivet-merge-CDF_2012_NOTE10874 TVT-300-Energy.yoda TVT-900-Energy.yoda TVT-1960-Energy.yoda #flat2yoda RatioPlots.dat -o TVT-RatioPlots.yoda Rivet-Star : Rivet-Star/done touch $@ Rivet-Star/done : $(shell echo Rivet-Star-{UE,Jets-{1..4}}.yoda ) rm -rf Rivet-Star python/merge-Star Star ## broken DVI? ## rivet-mkhtml -v -o Rivet-Star Star.yoda mkdir -p Rivet-Star # remove when fixed touch $@ Rivet-SppS : Rivet-SppS/done touch $@ ## $(shell echo Rivet-ISR-{30,44,53,62}-UE.yoda ) \ ## {53,63,200,500,900,546} Rivet-SppS/done : $(shell echo Rivet-SppS-{200,500,900,546}-UE.yoda ) rm -rf Rivet-SppS python/merge-SppS SppS rivet-mkhtml -o Rivet-SppS SppS.yoda touch $@ Rivet-LHC-Jets : Rivet-LHC-Jets/done touch $@ Rivet-LHC-Jets/done : \ $(shell echo Rivet-LHC-7-DiJets-{1..7}-{A,B,C}.yoda ) \ $(shell echo Rivet-LHC-{7,8,13}-Jets-{0..10}.yoda ) \ $(shell echo Rivet-LHC-{900,2360,2760,7,8,13}-UE.yoda ) \ $(shell echo Rivet-LHC-{900,7,13}-UE-Long.yoda ) \ $(shell echo Rivet-LHC-7-Charm-{1..5}.yoda ) \ $(shell echo Rivet-LHC-7-Bottom-{0..8}.yoda ) \ - $(shell echo Rivet-LHC-{7,8,13}-Top-{L,SL,All}.yoda ) + $(shell echo Rivet-LHC-{7,8,13}-Top-{L,SL}.yoda ) \ + $(shell echo Rivet-LHC-{7,8}-Top-All.yoda ) rm -rf Rivet-LHC-Jets python/merge-LHC-Jets LHC rivet-mkhtml -o Rivet-LHC-Jets LHC-Jets.yoda:Hw touch $@ Rivet-LHC-EW : Rivet-LHC-EW/done touch $@ Rivet-LHC-EW/done: \ - $(shell echo Rivet{,-Matchbox,-Powheg,-Dipole}-LHC-{13-Z-{e,mu},Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},W-{e,mu},Z-{e,mu,mu-SOPHTY},Z-LowMass-{e,mu},Z-MedMass-e,WZ,WW-{emu,ll},ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll,W-Z-{e,mu}}.yoda) \ + $(shell echo Rivet{,-Matchbox,-Powheg,-Dipole}-LHC-{13-Z-{e,mu},{8,13}-W-mu,Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},W-{e,mu},Z-{e,mu,mu-SOPHTY},Z-LowMass-{e,mu},Z-MedMass-e,WZ,WW-{emu,ll},ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll,W-Z-{e,mu}}.yoda) \ $(shell echo Rivet{,-Matchbox,-Dipole}-LHC-{7-W-Jet-{1..3}-e,7-Z-Jet-{0..3}-e,7-Z-Jet-0-mu}.yoda) \ $(shell echo Rivet{-Matchbox,-Dipole}-LHC-{Z-b,Z-bb,W-b,8-Z-jj}.yoda) \ $(shell echo Rivet-LHC-7-{W,Z}Gamma-{e,mu}.yoda) rm -rf Rivet-LHC-EW; python/merge-LHC-EW Rivet-LHC-{13-Z-{e,mu},Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},W-{e,mu},Z-{e,mu,mu-Short},Z-LowMass-{e,mu},Z-MedMass-e,W-Z-{e,mu},WW-{emu,ll},WZ,ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll}.yoda Rivet-LHC-7-{W,Z}-Jet-{1,2,3}-e.yoda Rivet-LHC-7-{W,Z}Gamma-{e,mu}.yoda -o LHC-EW.yoda; python/merge-LHC-EW Rivet-Matchbox-LHC-{13-Z-{e,mu},Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},W-{e,mu},Z-{e,mu,mu-Short},Z-LowMass-{e,mu},Z-MedMass-e,W-Z-{e,mu},WW-{emu,ll},WZ,ZZ-{ll,lv},{8,13}-WZ,{8,13}-WZ,8-ZZ-lv,8-WW-ll}.yoda Rivet-LHC-Matchbox-7-{W,Z}-Jet-{1,2,3}-e.yoda -o LHC-Matchbox-EW.yoda; python/merge-LHC-EW Rivet-Dipole-LHC-{13-Z-{e,mu},Z-HighMass{1,2}-e,8-Z-Mass{1..4}-{e,mu},W-{e,mu},Z-{e,mu,mu-Short},Z-LowMass-{e,mu},Z-MedMass-e,W-Z-{e,mu},WW-{emu,ll},WZ,ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll}.yoda Rivet-LHC-Dipole-7-{W,Z}-Jet-{1,2,3}-e.yoda -o LHC-Dipole-EW.yoda; python/merge-LHC-EW Rivet-Powheg-LHC-{W-{e,mu},Z-{e,mu},Z-LowMass-{e,mu},Z-MedMass-e,W-Z-{e,mu},WW-{emu,ll},WZ,ZZ-{ll,lv},{8,13}-WZ,8-ZZ-lv,8-WW-ll}.yoda -o LHC-Powheg-EW.yoda; rivet-mkhtml -o Rivet-LHC-EW LHC-EW.yoda:Hw LHC-Powheg-EW.yoda:Hw-Powheg LHC-Matchbox-EW.yoda:Hw-Matchbox LHC-Matchbox-Z-b.yoda:Hw-Matchbox-Zb \ LHC-Matchbox-Z-bb.yoda:Hw-Matchbox-Zbb LHC-Matchbox-W-b.yoda:Hw-Matchbox-W-bb LHC-Dipole-EW.yoda:Hw-Dipole \ LHC-Dipole-Z-b.yoda:Hw-Dipole-Zb LHC-Dipole-Z-bb.yoda:Hw-Dipole-Zbb LHC-Dipole-W-b.yoda:Hw-Dipole-W-bb \ LHC-Z-mu-SOPHTY.yoda:Hw LHC-Powheg-Z-mu-SOPHTY.yoda:Hw-Powheg LHC-Matchbox-Z-mu-SOPHTY.yoda:Hw-Matchbox touch $@ Rivet-LHC-Photon : Rivet-LHC-Photon/done touch $@ Rivet-LHC-Photon/done: \ $(shell echo Rivet-LHC-{7,8}-PromptPhoton-{1..4}.yoda) \ Rivet-LHC-GammaGamma-7.yoda \ $(shell echo Rivet{,-Powheg}-LHC-{7,8}-{DiPhoton-GammaGamma,DiPhoton-GammaJet}.yoda) rm -rf Rivet-LHC-Photon python/merge-LHC-Photon LHC -o LHC-Photon.yoda python/merge-LHC-Photon LHC-Powheg -o LHC-Powheg-Photon.yoda rivet-mkhtml -o Rivet-LHC-Photon LHC-Photon.yoda:Hw LHC-Powheg-Photon.yoda:Hw-Powheg touch $@ Rivet-LHC-Higgs : Rivet-LHC-Higgs/done touch $@ Rivet-LHC-Higgs/done: \ $(shell echo Rivet{,-Powheg}-LHC-{ggH,VBF,WH,ZH}.yoda) \ $(shell echo Rivet{,-Powheg}-LHC-8-{{ggH,VBF,WH,ZH}{,-GammaGamma},ggH-WW}.yoda) \ Rivet-LHC-ggHJet.yoda rm -rf Rivet-LHC-Higgs rivet-mkhtml -o Rivet-LHC-Higgs LHC-Powheg-ggH.yoda:gg-Powheg LHC-ggH.yoda:gg LHC-ggHJet.yoda:HJet \ LHC-Powheg-VBF.yoda:VBF-Powheg LHC-VBF.yoda:VBF LHC-WH.yoda:WH LHC-ZH.yoda:ZH \ LHC-Powheg-WH.yoda:WH-Powheg LHC-Powheg-ZH.yoda:ZH-Powheg touch $@ clean-local: rm -f *.out *.log *.tex *.top *.run *.dump *.mult *.Bmult *.yoda Rivet/*.in rm -rf Rivet-* distclean-local: rm -rf .cache diff --git a/Tests/Rivet/LHC/LHC-13-W-mu.in b/Tests/Rivet/LHC/LHC-13-W-mu.in new file mode 100644 --- /dev/null +++ b/Tests/Rivet/LHC/LHC-13-W-mu.in @@ -0,0 +1,5 @@ +################################################## +# select the analyses +################################################## +# CMS W+jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1610623 diff --git a/Tests/Rivet/LHC/LHC-7-PromptPhoton-1.in b/Tests/Rivet/LHC/LHC-7-PromptPhoton-1.in --- a/Tests/Rivet/LHC/LHC-7-PromptPhoton-1.in +++ b/Tests/Rivet/LHC/LHC-7-PromptPhoton-1.in @@ -1,13 +1,15 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8914702 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1093738 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I921594 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1263495 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1244522 # CMS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1258128 # MC insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_PHOTONJETS +# CMS photon + jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1266056 diff --git a/Tests/Rivet/LHC/LHC-7-PromptPhoton-2.in b/Tests/Rivet/LHC/LHC-7-PromptPhoton-2.in --- a/Tests/Rivet/LHC/LHC-7-PromptPhoton-2.in +++ b/Tests/Rivet/LHC/LHC-7-PromptPhoton-2.in @@ -1,13 +1,15 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8914702 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1093738 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I921594 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1263495 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1244522 # CMS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1258128 # MC insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_PHOTONJETS +# CMS photon + jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1266056 diff --git a/Tests/Rivet/LHC/LHC-7-PromptPhoton-3.in b/Tests/Rivet/LHC/LHC-7-PromptPhoton-3.in --- a/Tests/Rivet/LHC/LHC-7-PromptPhoton-3.in +++ b/Tests/Rivet/LHC/LHC-7-PromptPhoton-3.in @@ -1,13 +1,15 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8914702 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1093738 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I921594 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1263495 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1244522 # CMS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1258128 # MC insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_PHOTONJETS +# CMS photon + jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1266056 diff --git a/Tests/Rivet/LHC/LHC-7-PromptPhoton-4.in b/Tests/Rivet/LHC/LHC-7-PromptPhoton-4.in --- a/Tests/Rivet/LHC/LHC-7-PromptPhoton-4.in +++ b/Tests/Rivet/LHC/LHC-7-PromptPhoton-4.in @@ -1,14 +1,16 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8914702 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1093738 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I921594 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1263495 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1244522 # CMS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1258128 # MC insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_PHOTONJETS +# CMS photon + jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1266056 diff --git a/Tests/Rivet/LHC/LHC-8-Jets-1.in b/Tests/Rivet/LHC/LHC-8-Jets-1.in --- a/Tests/Rivet/LHC/LHC-8-Jets-1.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-1.in @@ -1,6 +1,11 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-10.in b/Tests/Rivet/LHC/LHC-8-Jets-10.in --- a/Tests/Rivet/LHC/LHC-8-Jets-10.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-10.in @@ -1,8 +1,12 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 diff --git a/Tests/Rivet/LHC/LHC-8-Jets-2.in b/Tests/Rivet/LHC/LHC-8-Jets-2.in --- a/Tests/Rivet/LHC/LHC-8-Jets-2.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-2.in @@ -1,6 +1,12 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-3.in b/Tests/Rivet/LHC/LHC-8-Jets-3.in --- a/Tests/Rivet/LHC/LHC-8-Jets-3.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-3.in @@ -1,8 +1,12 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 diff --git a/Tests/Rivet/LHC/LHC-8-Jets-4.in b/Tests/Rivet/LHC/LHC-8-Jets-4.in --- a/Tests/Rivet/LHC/LHC-8-Jets-4.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-4.in @@ -1,8 +1,14 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-5.in b/Tests/Rivet/LHC/LHC-8-Jets-5.in --- a/Tests/Rivet/LHC/LHC-8-Jets-5.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-5.in @@ -1,8 +1,14 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-6.in b/Tests/Rivet/LHC/LHC-8-Jets-6.in --- a/Tests/Rivet/LHC/LHC-8-Jets-6.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-6.in @@ -1,8 +1,14 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-7.in b/Tests/Rivet/LHC/LHC-8-Jets-7.in --- a/Tests/Rivet/LHC/LHC-8-Jets-7.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-7.in @@ -1,8 +1,14 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-Jets-8.in b/Tests/Rivet/LHC/LHC-8-Jets-8.in --- a/Tests/Rivet/LHC/LHC-8-Jets-8.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-8.in @@ -1,8 +1,12 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 diff --git a/Tests/Rivet/LHC/LHC-8-Jets-9.in b/Tests/Rivet/LHC/LHC-8-Jets-9.in --- a/Tests/Rivet/LHC/LHC-8-Jets-9.in +++ b/Tests/Rivet/LHC/LHC-8-Jets-9.in @@ -1,8 +1,14 @@ # ATLAS tracks in jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1419070 # ATLAS multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1394679 # ATLAS jet charge insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1393758 # ATLAS transverse energy correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1609253 +# CMS jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1487277 +# CMS di-jet decorrelation +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1421646 + + diff --git a/Tests/Rivet/LHC/LHC-8-PromptPhoton-1.in b/Tests/Rivet/LHC/LHC-8-PromptPhoton-1.in --- a/Tests/Rivet/LHC/LHC-8-PromptPhoton-1.in +++ b/Tests/Rivet/LHC/LHC-8-PromptPhoton-1.in @@ -1,5 +1,7 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1457605 +# ATLAS prompt photon + heavy flavour +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1632756 diff --git a/Tests/Rivet/LHC/LHC-8-PromptPhoton-2.in b/Tests/Rivet/LHC/LHC-8-PromptPhoton-2.in --- a/Tests/Rivet/LHC/LHC-8-PromptPhoton-2.in +++ b/Tests/Rivet/LHC/LHC-8-PromptPhoton-2.in @@ -1,5 +1,7 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1457605 +# ATLAS prompt photon + heavy flavour +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1632756 diff --git a/Tests/Rivet/LHC/LHC-8-PromptPhoton-3.in b/Tests/Rivet/LHC/LHC-8-PromptPhoton-3.in --- a/Tests/Rivet/LHC/LHC-8-PromptPhoton-3.in +++ b/Tests/Rivet/LHC/LHC-8-PromptPhoton-3.in @@ -1,5 +1,7 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1457605 +# ATLAS prompt photon + heavy flavour +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1632756 diff --git a/Tests/Rivet/LHC/LHC-8-PromptPhoton-4.in b/Tests/Rivet/LHC/LHC-8-PromptPhoton-4.in --- a/Tests/Rivet/LHC/LHC-8-PromptPhoton-4.in +++ b/Tests/Rivet/LHC/LHC-8-PromptPhoton-4.in @@ -1,5 +1,7 @@ ################################################## # select the analyses ################################################## # ATLAS prompt photon insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1457605 +# ATLAS prompt photon + heavy flavour +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2017_I1632756 diff --git a/Tests/Rivet/LHC/LHC-8-Top-All.in b/Tests/Rivet/LHC/LHC-8-Top-All.in --- a/Tests/Rivet/LHC/LHC-8-Top-All.in +++ b/Tests/Rivet/LHC/LHC-8-Top-All.in @@ -1,7 +1,5 @@ ################################################## # select the analyses ################################################## # CMS top insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2015_I1370682 -# CMS -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1473674 diff --git a/Tests/Rivet/LHC/LHC-8-Top-L.in b/Tests/Rivet/LHC/LHC-8-Top-L.in --- a/Tests/Rivet/LHC/LHC-8-Top-L.in +++ b/Tests/Rivet/LHC/LHC-8-Top-L.in @@ -1,15 +1,16 @@ ################################################## # select the analyses ################################################## # ATLAS top + b jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1390114 # CMS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2015_I1397174 # ATLAS l +jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1397635 # ATLAS charge asymmetry insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1449082 # CMS diplepton charge asym insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1430892 # CMS spin correlations insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1413748 +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1404878 diff --git a/Tests/Rivet/LHC/LHC-8-Top-SL.in b/Tests/Rivet/LHC/LHC-8-Top-SL.in --- a/Tests/Rivet/LHC/LHC-8-Top-SL.in +++ b/Tests/Rivet/LHC/LHC-8-Top-SL.in @@ -1,13 +1,15 @@ ################################################## # select the analyses ################################################## # ATLAS pull in top events insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1376945 # ATLAS top + b jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1390114 # ATLAS boosted t tbar insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1397637 # cms boosted top insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1454211 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1518399 -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_PAS_TOP_15_006 \ No newline at end of file +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_PAS_TOP_15_006 +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1404878 +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1473674 \ No newline at end of file diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-VBF-WW.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-VBF-WW.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-VBF-WW.in @@ -1,7 +1,9 @@ ################################################## # select the analyses ################################################## -# General analysis +# ATLAS gg -> H -> WW insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# CMS H -> WW +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1467451 do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-VBF-ZZ.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-VBF-ZZ.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-VBF-ZZ.in @@ -1,7 +1,7 @@ ################################################## # select the analyses ################################################## -# General analysis -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# ATLAS gg -> H -> ZZ +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1310835 -do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; +do /Herwig/Particles/h0:SelectDecayModes h0->Z0,Z0; diff --git a/Tests/Rivet/LHC/LHC-8-W-mu.in b/Tests/Rivet/LHC/LHC-8-W-mu.in new file mode 100644 --- /dev/null +++ b/Tests/Rivet/LHC/LHC-8-W-mu.in @@ -0,0 +1,5 @@ +################################################## +# select the analyses +################################################## +# CMS W+jets +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2016_I1491953 diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-WH-WW.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-WH-WW.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-WH-WW.in @@ -1,7 +1,9 @@ ################################################## # select the analyses ################################################## -# General analysis +# ATLAS gg -> H -> WW insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# CMS H -> WW +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1467451 do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-WH-ZZ.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-WH-ZZ.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-WH-ZZ.in @@ -1,7 +1,7 @@ ################################################## # select the analyses ################################################## -# General analysis -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# ATLAS gg -> H -> ZZ +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1310835 -do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; +do /Herwig/Particles/h0:SelectDecayModes h0->Z0,Z0; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-ZH-WW.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-ZH-WW.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-ZH-WW.in @@ -1,7 +1,9 @@ ################################################## # select the analyses ################################################## -# General analysis +# ATLAS gg -> H -> WW insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# CMS H -> WW +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1467451 do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-ZH-ZZ.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-ZH-ZZ.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-ZH-ZZ.in @@ -1,7 +1,7 @@ ################################################## # select the analyses ################################################## -# General analysis -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# ATLAS gg -> H -> ZZ +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1310835 -do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; +do /Herwig/Particles/h0:SelectDecayModes h0->Z0,Z0; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-ggH-WW.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-ggH-WW.in @@ -1,7 +1,9 @@ ################################################## # select the analyses ################################################## -# General analysis +# ATLAS gg -> H -> WW insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# CMS H -> WW +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2017_I1467451 do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; diff --git a/Tests/Rivet/LHC/LHC-8-ggH-WW.in b/Tests/Rivet/LHC/LHC-8-ggH-ZZ.in copy from Tests/Rivet/LHC/LHC-8-ggH-WW.in copy to Tests/Rivet/LHC/LHC-8-ggH-ZZ.in --- a/Tests/Rivet/LHC/LHC-8-ggH-WW.in +++ b/Tests/Rivet/LHC/LHC-8-ggH-ZZ.in @@ -1,7 +1,7 @@ ################################################## # select the analyses ################################################## -# General analysis -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1444991 +# ATLAS gg -> H -> ZZ +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1310835 -do /Herwig/Particles/h0:SelectDecayModes h0->W+,W-; +do /Herwig/Particles/h0:SelectDecayModes h0->Z0,Z0; diff --git a/Tests/Rivet/LHC/LHC-W-e.in b/Tests/Rivet/LHC/LHC-W-e.in --- a/Tests/Rivet/LHC/LHC-W-e.in +++ b/Tests/Rivet/LHC/LHC-W-e.in @@ -1,23 +1,25 @@ ################################################## # select the analyses ################################################## # general analysis insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_WJETS insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_WPOL # ATLAS W+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8919674 # ATLAS W pT insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I925932 # ATLAS W kT scales insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1217867 # W DPI insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1216670 # W +b insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1219109_EL # ATLAS W insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I928289_W # ATLAS W+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1319490 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1319490_EL # ATLAS W+charm -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1282447 \ No newline at end of file +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1282447 +# ATLAS W inclusive cross section +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1502620_W_EL \ No newline at end of file diff --git a/Tests/Rivet/LHC/LHC-W-mu.in b/Tests/Rivet/LHC/LHC-W-mu.in --- a/Tests/Rivet/LHC/LHC-W-mu.in +++ b/Tests/Rivet/LHC/LHC-W-mu.in @@ -1,27 +1,29 @@ ################################################## # select the analyses ################################################## # ATLAS W asymetry insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9002537 # ATLAS W+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2010_S8919674 # ATLAS W pT insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I925932 # ATLAS W+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1083318 # ATLAS W kT scales insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1217867 # CMS double parton scattering insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1272853 # W DPI insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1216670 # CMS W+ jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2014_I1303894 # ATLAS W insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I928289_W # ATLAS W+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1319490_MU # W +b insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1219109_MU # ATLAS W+charm insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1282447 +# ATLAS W inclusive cross section +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1502620_W_MU diff --git a/Tests/Rivet/LHC/LHC-Z-e.in b/Tests/Rivet/LHC/LHC-Z-e.in --- a/Tests/Rivet/LHC/LHC-Z-e.in +++ b/Tests/Rivet/LHC/LHC-Z-e.in @@ -1,32 +1,34 @@ ################################################## # select the analyses ################################################## # General analysis insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_ZINC insert /Herwig/Analysis/RivetAnalysis:Analyses 0 MC_ZJETS # ATLAS pT insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9131140 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1300647 # ATLAS Z+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I945498 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1230812 # ATLAS phi* insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1204784 # CMS Z + b-hadron insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1256943 # CMS Z pt and y insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I941555 # ATLAS Z + bjets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1306294 # ATLAS Z insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I928289_Z # CMS Z AFB insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1122847 # CMS Z+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2015_I1310737 # ATLAS event shapes in Z events insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1424838 # ATLAS forwrd backward insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1351916_EL # ATLAS forward backward -insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1234228 \ No newline at end of file +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2013_I1234228 +# ATLAS Z inclusive cross section +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1502620_Z_EL \ No newline at end of file diff --git a/Tests/Rivet/LHC/LHC-Z-mu.in b/Tests/Rivet/LHC/LHC-Z-mu.in --- a/Tests/Rivet/LHC/LHC-Z-mu.in +++ b/Tests/Rivet/LHC/LHC-Z-mu.in @@ -1,33 +1,35 @@ ################################################## # select the analyses ################################################## # ATLAS Z pt insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_S9131140 insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1300647 # ATLAS Z+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I945498 # ATLAS phi* insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2012_I1204784 # Z and real photon + jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1258128 # CMS Z + b-hadron insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1256943 # CMS Z pt and y insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2012_I941555 # ATLAS MPI in Z events insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2014_I1315949 # ATLAS Z insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2011_I928289_Z # CMS Z AFB insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2013_I1122847 # CMS Z+jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2015_I1310737 # ATLAS event shapes in Z events insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1424838 # CMS photon radiation in Z decays insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CMS_2015_I1346843 # ATLAS forwrd backward insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2015_I1351916_MU # LHCB forward Z+jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 LHCB_2014_I1262703 +# ATLAS Z inclusive cross section +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 ATLAS_2016_I1502620_Z_MU diff --git a/Tests/Rivet/TVT/TVT-Run-I-Jets-1.in b/Tests/Rivet/TVT/TVT-Run-I-Jets-1.in --- a/Tests/Rivet/TVT/TVT-Run-I-Jets-1.in +++ b/Tests/Rivet/TVT/TVT-Run-I-Jets-1.in @@ -1,11 +1,13 @@ ################################################## # select the analyses ################################################## # run I CDF di jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4517016 # run I CDF inclusive jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4563131 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2004_S5839831 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4751469 +# run I D0 jet shape +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1995_I398175 \ No newline at end of file diff --git a/Tests/Rivet/TVT/TVT-Run-I-Jets-2.in b/Tests/Rivet/TVT/TVT-Run-I-Jets-2.in --- a/Tests/Rivet/TVT/TVT-Run-I-Jets-2.in +++ b/Tests/Rivet/TVT/TVT-Run-I-Jets-2.in @@ -1,11 +1,13 @@ ################################################## # select the analyses ################################################## # run I CDF di jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4517016 # run I CDF inclusive jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4563131 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2004_S5839831 # run I D0 dijet decorrelation insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1996_S3324664 +# run I D0 jet shape +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1995_I398175 diff --git a/Tests/Rivet/TVT/TVT-Run-I-Jets-3.in b/Tests/Rivet/TVT/TVT-Run-I-Jets-3.in --- a/Tests/Rivet/TVT/TVT-Run-I-Jets-3.in +++ b/Tests/Rivet/TVT/TVT-Run-I-Jets-3.in @@ -1,9 +1,11 @@ ################################################## # select the analyses ################################################## # run I CDF di jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4517016 # run I CDF inclusive jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4563131 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2004_S5839831 +# run I D0 jet shape +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1995_I398175 diff --git a/Tests/Rivet/TVT/TVT-Run-I-Jets-4.in b/Tests/Rivet/TVT/TVT-Run-I-Jets-4.in --- a/Tests/Rivet/TVT/TVT-Run-I-Jets-4.in +++ b/Tests/Rivet/TVT/TVT-Run-I-Jets-4.in @@ -1,15 +1,17 @@ ################################################## # select the analyses ################################################## # run I CDF large total ET insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1998_S3618439 # run I CDF di jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4517016 # run I CDF inclusive jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4563131 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2004_S5839831 # run I coherence insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1994_S2952106 # run I D0 3 and 4 jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1996_S3214044 +# run I D0 jet shape +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1995_I398175 diff --git a/Tests/Rivet/TVT/TVT-Run-I-Jets-5.in b/Tests/Rivet/TVT/TVT-Run-I-Jets-5.in --- a/Tests/Rivet/TVT/TVT-Run-I-Jets-5.in +++ b/Tests/Rivet/TVT/TVT-Run-I-Jets-5.in @@ -1,17 +1,19 @@ ################################################## # select the analyses ################################################## # run I CDF multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1996_S3108457 # run I CDF multijet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1996_S3349578 # run I CDF 6 jets insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1997_S3541940 # run I CDF large total ET insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_1998_S3618439 # run I CDF di jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4517016 # run I CDF inclusive jet insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2001_S4563131 # run I CDF UE insert /Herwig/Analysis/RivetAnalysis:Analyses 0 CDF_2004_S5839831 +# run I D0 jet shape +insert /Herwig/Analysis/RivetAnalysis:Analyses 0 D0_1995_I398175 diff --git a/Tests/python/make_input_files.py b/Tests/python/make_input_files.py --- a/Tests/python/make_input_files.py +++ b/Tests/python/make_input_files.py @@ -1,1790 +1,1801 @@ #! /usr/bin/env python import logging,sys,os from string import strip, Template import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name [...]") simulation="" numberOfAddedProcesses=0 def addProcess(thefactory,theProcess,Oas,Oew,scale,mergedlegs,NLOprocesses): global numberOfAddedProcesses global simulation numberOfAddedProcesses+=1 res ="set "+thefactory+":OrderInAlphaS "+Oas+"\n" res+="set "+thefactory+":OrderInAlphaEW "+Oew+"\n" res+="do "+thefactory+":Process "+theProcess+" " if ( mergedlegs != 0 ): if simulation!="Merging": print "simulation is not Merging, trying to add merged legs." sys.exit(1) res+="[" for j in range(mergedlegs): res+=" j " res+="]" res+="\n" if (NLOprocesses!=0): if simulation!="Merging": print "simulation is not Merging, trying to add NLOProcesses." sys.exit(1) res+="set MergingFactory:NLOProcesses %s \n" % NLOprocesses if ( scale != "" ): res+="set "+thefactory+":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/"+scale+"\n" return res def addLeptonPairCut(minmass,maxmass): return "set /Herwig/Cuts/LeptonPairMassCut:MinMass "+minmass+"*GeV\nset /Herwig/Cuts/LeptonPairMassCut:MaxMass "+maxmass+"*GeV\n" didaddfirstjet=False def addFirstJet(ptcut): global didaddfirstjet if(didaddfirstjet): logging.error("Can only add jetcut once.") sys.exit(1) res="set /Herwig/Cuts/Cuts:JetFinder /Herwig/Cuts/JetFinder\n" res+="insert /Herwig/Cuts/Cuts:MultiCuts 0 /Herwig/Cuts/JetCuts\n" res+="insert /Herwig/Cuts/JetCuts:JetRegions 0 /Herwig/Cuts/FirstJet\n" if(ptcut!=""): res+="set /Herwig/Cuts/FirstJet:PtMin "+ptcut+".*GeV\n" didaddfirstjet=True return res didaddsecondjet=False def addSecondJet(ptcut): global didaddsecondjet if(didaddsecondjet): logging.error("Can only add second jetcut once.") sys.exit(1) res="insert /Herwig/Cuts/JetCuts:JetRegions 0 /Herwig/Cuts/SecondJet\n" res+="set /Herwig/Cuts/SecondJet:PtMin "+ptcut+".*GeV\n" didaddsecondjet=True return res didaddjetpair=False def addJetPairCut(minmass): global didaddjetpair if(didaddjetpair): logging.error("Can only add second jetcut once.") sys.exit(1) res="""\ create ThePEG::JetPairRegion /Herwig/Cuts/JetPairMass JetCuts.so set /Herwig/Cuts/JetPairMass:FirstRegion /Herwig/Cuts/FirstJet set /Herwig/Cuts/JetPairMass:SecondRegion /Herwig/Cuts/SecondJet insert /Herwig/Cuts/JetCuts:JetPairRegions 0 /Herwig/Cuts/JetPairMass set /Herwig/Cuts/JetPairMass:MassMin {mm}.*GeV """.format(mm=minmass) didaddjetpair=True return res addedBRReweighter=False def addBRReweighter(): global addedBRReweighter if(addedBRReweighter): logging.error("Can only add BRReweighter once.") sys.exit(1) res="create Herwig::BranchingRatioReweighter /Herwig/Generators/BRReweighter\n" res+="insert /Herwig/Generators/EventGenerator:EventHandler:PostHadronizationHandlers 0 /Herwig/Generators/BRReweighter\n" addedBRReweighter=True return res def setHardProcessWidthToZero(list1): res="" for i in list1: res+="set /Herwig/Particles/"+i+":HardProcessWidth 0.\n" return res selecteddecaymode=False def selectDecayMode(particle,decaymodes): global selecteddecaymode res="do /Herwig/Particles/"+particle+":SelectDecayModes" for decay in decaymodes: res+=" /Herwig/Particles/"+particle+"/"+decay res+="\n" selecteddecaymode=True return res def jet_kt_cut(energy): return "set /Herwig/Cuts/JetKtCut:MinKT {E}*GeV\n".format(E=energy) def mhatmin_cut(energy): return "set /Herwig/Cuts/Cuts:MHatMin {E}*GeV\n".format(E=energy) def mhat_minm_maxm(e1,e2,e3): return """\ set /Herwig/Cuts/Cuts:MHatMin {e1}*GeV set /Herwig/Cuts/MassCut:MinM {e2}*GeV set /Herwig/Cuts/MassCut:MaxM {e3}*GeV """.format(**locals()) def collider_lumi(energy): return "set /Herwig/Generators/EventGenerator:EventHandler:LuminosityFunction:Energy {E}*GeV\n".format(E=energy) def insert_ME(me,process=None,ifname='Process'): result = "insert /Herwig/MatrixElements/SubProcess:MatrixElements 0 /Herwig/MatrixElements/{me}\n".format(**locals()) if process is not None: result += "set /Herwig/MatrixElements/{me}:{ifname} {process}".format(**locals()) return result def particlegroup(name,*particles): result = ["do /Herwig/MatrixElements/Matchbox/Factory:StartParticleGroup {n}".format(n=name)] for p in particles: result.append( "insert /Herwig/MatrixElements/Matchbox/Factory:ParticleGroup 0 /Herwig/Particles/{p}".format(p=p) ) result.append("do /Herwig/MatrixElements/Matchbox/Factory:EndParticleGroup") return '\n'.join(result) # settings for four flavour scheme fourFlavour=""" read Matchbox/FourFlavourScheme.in {bjetgroup} set /Herwig/Cuts/MatchboxJetMatcher:Group bjet """.format(bjetgroup=particlegroup('bjet','b','bbar','c', 'cbar', 's','sbar','d','dbar','u','ubar','g')) ME_Upsilon = """\ create Herwig::MEee2VectorMeson /Herwig/MatrixElements/MEUpsilon HwMELepton.so set /Herwig/MatrixElements/MEUpsilon:VectorMeson /Herwig/Particles/Upsilon(4S) set /Herwig/MatrixElements/MEUpsilon:Coupling 0.0004151809 """ + insert_ME("MEUpsilon") (opts, args) = parser.parse_args() ## Check args if len(args) != 1: logging.error("Must specify at least input file") sys.exit(1) name = args[0] print name # select the template to load # collider KNOWN_COLLIDERS = [ "BFactory", "LEP", "DIS", "TVT", "LHC-GammaGamma", "LHC", "ISR", "SppS", "Star", ] collider = "" for cand_collider in KNOWN_COLLIDERS: if cand_collider in name: collider = cand_collider break del cand_collider assert collider have_hadronic_collider = collider in ["TVT","LHC","ISR","SppS","Star"] thefactory="Factory" parameters = { 'shower' : '', 'bscheme' : '', } # istart determines how many name parts need to be skipped istart = 1 # Dipole shower with Matchbox Powheg if "Dipole-Matchbox-Powheg" in name : istart = 4 simulation="Matchbox" parameters["shower"] = "read Matchbox/Powheg-DipoleShower.in\n" # Dipole shower with internal Powheg - Todo: Finish modifying template files. ''' elif "Dipole-Powheg" in name : istart = 3 simulation="Powheg" parameters["shower"] = "set /Herwig/EventHandlers/EventHandler:CascadeHandler /Herwig/DipoleShower/DipoleShowerHandler\nread snippets/Dipole_AutoTune_prel.in\n" ''' # Dipole shower with MCatNLO elif "Dipole-MCatNLO" in name : istart = 3 simulation="Matchbox" parameters["shower"] = "read Matchbox/MCatNLO-DipoleShower.in\n" # Dipole shower with Matchbox LO elif "Dipole-Matchbox-LO" in name : istart = 4 simulation="Matchbox" parameters["shower"] = "read Matchbox/LO-DipoleShower.in\n" # Dipole shower with internal LO elif "Dipole" in name : istart = 2 simulation="" parameters["shower"] = "set /Herwig/EventHandlers/EventHandler:CascadeHandler /Herwig/DipoleShower/DipoleShowerHandler\nread snippets/Dipole_AutoTune_prel.in\n" # AO shower with Matchbox Powheg elif "Matchbox-Powheg" in name : istart = 3 simulation="Matchbox" parameters["shower"] = "read Matchbox/Powheg-DefaultShower.in\n" # AO shower with MCatNLO elif "Matchbox" in name : istart = 2 simulation="Matchbox" parameters["shower"] = "read Matchbox/MCatNLO-DefaultShower.in\n" # AO shower with inernal Powheg elif "Powheg" in name : istart = 2 simulation="Powheg" # Dipole shower with merging elif "Merging" in name : istart = 2 simulation="Merging" thefactory="MergingFactory" # Flavour settings for Matchbox if simulation=="Matchbox" : parameters["bscheme"] = "read Matchbox/FiveFlavourScheme.in\n" if "Dipole" in parameters["shower"] : parameters["bscheme"] += "read Matchbox/FiveFlavourNoBMassScheme.in\n" if collider not in ['DIS','LEP'] : parameters["nlo"] = "read Matchbox/MadGraph-OpenLoops.in\n" # Flavour settings for dipole shower with internal ME if simulation=="" and "Dipole" in parameters["shower"] : parameters["bscheme"] = "read snippets/DipoleShowerFiveFlavours.in" # find the template if simulation=="" : if collider=="LHC-GammaGamma" : istart += 1 templateName="Hadron-Gamma.in" elif have_hadronic_collider : templateName="Hadron.in" elif collider != "BFactory" : templateName= "%s.in" % collider else : templateName= "LEP.in" else : if have_hadronic_collider : templateName= "Hadron-%s.in" % simulation elif collider != "BFactory" : templateName= "%s-%s.in" % (collider,simulation) else : templateName= "LEP-%s.in" % simulation # work out the name of the parameter file parameterName="-".join(name.split("-")[istart:]) del istart class StringBuilder(object): """ Avoid expensive string additions until the end by building up a list first. This helper class avoids rewriting all the += lower down to list operations. """ def __init__(self, init = None): self.lines = [] if init is None else [init] def __iadd__(self, line): self.lines.append(line) return self def __str__(self): return '\n'.join(self.lines) # work out the process and parameters process=StringBuilder() # Bfactory if(collider=="BFactory") : if(simulation=="") : if(parameterName=="10.58-res") : process += ME_Upsilon elif(parameterName=="10.58") : process += ME_Upsilon process += "set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 4\n" else : process+=insert_ME("MEee2gZ2qq") process+= "set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 4\n" elif(simulation=="Powheg") : process = StringBuilder("set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 4\n") elif(simulation=="Matchbox" ) : process = StringBuilder(addProcess(thefactory,"e- e+ -> u ubar","0","2","",0,0)) process+=addProcess(thefactory,"e- e+ -> d dbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> c cbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> s sbar","0","2","",0,0) elif(simulation=="Merging" ) : logging.warning("BFactory not explicitly tested for %s " % simulation) sys.exit(0) # DIS elif(collider=="DIS") : if(simulation=="") : if "NoME" in parameterName : process = StringBuilder("set /Herwig/Shower/ShowerHandler:HardEmission None") parameterName=parameterName.replace("NoME-","") else : process = StringBuilder("") elif(simulation=="Powheg") : process = StringBuilder("") elif(simulation=="Matchbox" ) : if "e-" in parameterName : process = StringBuilder(addProcess(thefactory,"e- p -> e- j","0","2","",0,0)) else : process = StringBuilder(addProcess(thefactory,"e+ p -> e+ j","0","2","",0,0)) elif(simulation=="Merging" ) : if "e-" in parameterName : process = StringBuilder(addProcess(thefactory,"e- p -> e- j","0","2","",2,2)) else : process = StringBuilder(addProcess(thefactory,"e+ p -> e+ j","0","2","",2,2)) # LEP elif(collider=="LEP") : if(simulation=="") : if "gg" in parameterName : process = StringBuilder("create Herwig::MEee2Higgs2SM /Herwig/MatrixElements/MEee2Higgs2SM\n") process+=insert_ME("MEee2Higgs2SM","Gluon","Allowed") else : process = StringBuilder(insert_ME("MEee2gZ2qq")) if(parameterName=="10") : process+="set /Herwig/MatrixElements/MEee2gZ2qq:MaximumFlavour 4" elif(simulation=="Powheg") : process = StringBuilder() if(parameterName=="10") : process = StringBuilder("set /Herwig/MatrixElements/PowhegMEee2gZ2qq:MaximumFlavour 4") elif(simulation=="Matchbox" ) : if(parameterName=="10") : process = StringBuilder(addProcess(thefactory,"e- e+ -> u ubar","0","2","",0,0)) process+=addProcess(thefactory,"e- e+ -> d dbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> c cbar","0","2","",0,0) process+=addProcess(thefactory,"e- e+ -> s sbar","0","2","",0,0) else : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",0,0)) elif(simulation=="Merging" ) : if(parameterName=="10") : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",2,2)) process+="read Matchbox/FourFlavourScheme.in" else : process = StringBuilder(addProcess(thefactory,"e- e+ -> j j","0","2","",2,2)) # TVT elif(collider=="TVT") : process = StringBuilder("set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-\n") if "Run-II" in parameterName : process+=collider_lumi(1960.0) elif "Run-I" in parameterName : process+=collider_lumi(1800.0) elif "900" in parameterName : process+=collider_lumi(900.0) elif "630" in parameterName : process+=collider_lumi(630.0) elif "300" in parameterName : process+=collider_lumi(300.0) if(simulation=="") : if "PromptPhoton" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 15.\n" elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGamma") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaJet","") elif "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" process += "set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n" process += "set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" elif "Jets" in parameterName : process+=insert_ME("MEQCD2to2") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Run-II-Jets-10" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(500.) elif "Run-II-Jets-11" in parameterName: process+=jet_kt_cut( 30.)+mhatmin_cut(900.) elif "Run-I-Jets-1" in parameterName : process+=jet_kt_cut( 20.) elif "Run-I-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "Run-I-Jets-3" in parameterName : process+=jet_kt_cut( 65.) elif "Run-I-Jets-4" in parameterName : process+=jet_kt_cut( 90.) elif "Run-I-Jets-5" in parameterName : process+=jet_kt_cut(160.) elif "Run-I-Jets-6" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(100.) elif "Run-I-Jets-7" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(400.) elif "Run-I-Jets-8" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(700.) elif "Run-II-Jets-0" in parameterName : process+=jet_kt_cut( 15.) elif "Run-II-Jets-1" in parameterName : process+=jet_kt_cut( 25.) elif "Run-II-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "Run-II-Jets-3" in parameterName : process+=jet_kt_cut( 60.) elif "Run-II-Jets-4" in parameterName : process+=jet_kt_cut( 85.) elif "Run-II-Jets-5" in parameterName : process+=jet_kt_cut(110.) elif "Run-II-Jets-6" in parameterName : process+=jet_kt_cut(160.) elif "Run-II-Jets-7" in parameterName : process+=jet_kt_cut(250.) elif "Run-II-Jets-8" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(100.) elif "Run-II-Jets-9" in parameterName : process+=jet_kt_cut( 30.)+mhatmin_cut(300.) elif "900-Jets-1" in parameterName : process+=jet_kt_cut( 10.) elif "300-Jets-1" in parameterName : process+=jet_kt_cut( 6.) elif "630-Jets-1" in parameterName : process+=jet_kt_cut( 20.) elif "630-Jets-2" in parameterName : process+=jet_kt_cut( 40.) elif "630-Jets-3" in parameterName : process+=jet_kt_cut( 75.) elif "900-Jets-1" in parameterName : process+=jet_kt_cut( 10.) elif "Run-I-WZ" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") process+=insert_ME("MEqq2gZ2ff","Electron") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : process +=insert_ME("MEqq2gZ2ff","Electron") elif "Run-II-Z-LowMass-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : process +=insert_ME("MEqq2gZ2ff","Muon") elif(simulation=="Powheg") : if "Run-I-WZ" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Run-II-Z-LowMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGammaPowheg","GammaGamma") process+=insert_ME("MEGammaGamma","gg") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaGammaPowheg","VJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaJet","") elif(simulation=="Matchbox" or simulation=="Merging" ) : if "Jets" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p -> j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p -> j j","2","0","MaxJetPtScale",1,0) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Run-II-Jets-10" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("500") elif "Run-II-Jets-11" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("900") elif "Run-II-Jets-12" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("300") elif "Run-I-Jets-1" in parameterName : process+=addFirstJet("20") elif "Run-I-Jets-2" in parameterName : process+=addFirstJet("40") elif "Run-I-Jets-3" in parameterName : process+=addFirstJet("65") elif "Run-I-Jets-4" in parameterName : process+=addFirstJet("90") elif "Run-I-Jets-5" in parameterName : process+=addFirstJet("160") elif "Run-I-Jets-6" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("100") elif "Run-I-Jets-7" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("400") elif "Run-I-Jets-8" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("700") elif "Run-II-Jets-0" in parameterName : process+=addFirstJet("15") elif "Run-II-Jets-1" in parameterName : process+=addFirstJet("25") elif "Run-II-Jets-2" in parameterName : process+=addFirstJet("40") elif "Run-II-Jets-3" in parameterName : process+=addFirstJet("60") elif "Run-II-Jets-4" in parameterName : process+=addFirstJet("85") elif "Run-II-Jets-5" in parameterName : process+=addFirstJet("110") elif "Run-II-Jets-6" in parameterName : process+=addFirstJet("160") elif "Run-II-Jets-7" in parameterName : process+=addFirstJet("250") elif "Run-II-Jets-8" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("100") elif "Run-II-Jets-9" in parameterName : process+=addFirstJet("30")+addSecondJet("25")+addJetPairCut("300") elif "900-Jets-1" in parameterName : process+=addFirstJet("10") elif "300-Jets-1" in parameterName : process+=addFirstJet("6") elif "630-Jets-1" in parameterName : process+=addFirstJet("20") elif "630-Jets-2" in parameterName : process+=addFirstJet("40") elif "630-Jets-3" in parameterName : process+=addFirstJet("75") elif "900-Jets-1" in parameterName : process+=addFirstJet("10") else : logging.error("Exit 00007") sys.exit(1) elif "Run-I-WZ" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('epm','e+','e-') process+=particlegroup('epmnu','e+','e-','nu_e','nu_ebar') process+=addProcess(thefactory,"p pbar epm epmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-W" in parameterName or "Run-I-W" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p pbar e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('epm','e+','e-') process+=addProcess(thefactory,"p pbar epm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-Z-e" in parameterName or "Run-I-Z" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Run-II-Z-LowMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("25","70") elif "Run-II-Z-HighMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("150","600") elif "Run-II-Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p pbar mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") # Star elif(collider=="Star" ) : process = StringBuilder("set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n") process+= "set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" process+= "set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/p+\n" process+= collider_lumi(200.0) process+= "set /Herwig/Cuts/Cuts:X2Min 0.01\n" if(simulation=="") : if "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" else : process+=insert_ME("MEQCD2to2") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-1" in parameterName : process+=jet_kt_cut(2.) elif "Jets-2" in parameterName : process+=jet_kt_cut(5.) elif "Jets-3" in parameterName : process+=jet_kt_cut(20.) elif "Jets-4" in parameterName : process+=jet_kt_cut(25.) else : logging.error("Star not supported for %s " % simulation) sys.exit(1) # ISR and SppS elif(collider=="ISR" or collider =="SppS" ) : process = StringBuilder("set /Herwig/Decays/DecayHandler:LifeTimeOption 0\n") process+="set /Herwig/Decays/DecayHandler:MaxLifeTime 10*mm\n" if(collider=="SppS") : process = StringBuilder("set /Herwig/Generators/EventGenerator:EventHandler:BeamB /Herwig/Particles/pbar-\n") if "30" in parameterName : process+=collider_lumi( 30.4) elif "44" in parameterName : process+=collider_lumi( 44.4) elif "53" in parameterName : process+=collider_lumi( 53.0) elif "62" in parameterName : process+=collider_lumi( 62.2) elif "63" in parameterName : process+=collider_lumi( 63.0) elif "200" in parameterName : process+=collider_lumi(200.0) elif "500" in parameterName : process+=collider_lumi(500.0) elif "546" in parameterName : process+=collider_lumi(546.0) elif "900" in parameterName : process+=collider_lumi(900.0) if(simulation=="") : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" else : logging.error(" SppS and ISR not supported for %s " % simulation) sys.exit(1) # LHC elif(collider=="LHC") : if parameterName.startswith("7-") : process = StringBuilder(collider_lumi(7000.0)) elif parameterName.startswith("8-") : process = StringBuilder(collider_lumi(8000.0)) elif parameterName.startswith("13-") : process = StringBuilder(collider_lumi(13000.0)) elif parameterName.startswith("900") : process = StringBuilder(collider_lumi(900.0)) elif parameterName.startswith("2360") : process = StringBuilder(collider_lumi(2360.0)) elif parameterName.startswith("2760") : process = StringBuilder(collider_lumi(2760.0)) else : process = StringBuilder(collider_lumi(7000.0)) if(simulation=="") : if "8-VBF" in parameterName : process+=insert_ME("MEPP2HiggsVBF") elif "VBF" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("MEPP2HiggsVBF") elif "ggHJet" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("MEHiggsJet") process+=jet_kt_cut(20.) elif "8-ggH" in parameterName : process+=insert_ME("MEHiggs") process+=insert_ME("MEHiggsJet","qqbar") process+=jet_kt_cut(0.0) elif "ggH" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("MEHiggs") process+=insert_ME("MEHiggsJet","qqbar") process+=jet_kt_cut(0.0) elif "PromptPhoton" in parameterName : process+=insert_ME("MEGammaJet") if "PromptPhoton-1" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" elif "PromptPhoton-2" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 25.\n" elif "PromptPhoton-3" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 80.\n" elif "PromptPhoton-4" in parameterName : process+="set /Herwig/Cuts/PhotonKtCut:MinKT 150.\n" elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGamma") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" parameterName=parameterName.replace("-GammaJet","") elif "8-WH" in parameterName : process+=insert_ME("MEPP2WH") process+=jet_kt_cut(0.0) elif "8-ZH" in parameterName : process+=insert_ME("MEPP2ZH") process+=jet_kt_cut(0.0) elif "WH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=addBRReweighter() process+=insert_ME("MEPP2WH") process+=jet_kt_cut(0.0) elif "ZH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() process+=insert_ME("MEPP2ZH") process+=jet_kt_cut(0.0) elif "UE" in parameterName : if "Dipole" in parameters["shower"]: process+="read snippets/MB-DipoleShower.in\n" else: process+="set /Herwig/Shower/ShowerHandler:IntrinsicPtGaussian 2.2*GeV\n" process+="read snippets/MB.in\n" process+="read snippets/Diffraction.in\n" if "Long" in parameterName : process += "set /Herwig/Decays/DecayHandler:MaxLifeTime 100*mm\n" elif "8-DiJets" in parameterName or "7-DiJets" in parameterName : process+=insert_ME("MEQCD2to2") process+="set MEQCD2to2:MaximumFlavour 5\n" process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-A" in parameterName : process+=jet_kt_cut(45.) process+="set /Herwig/Cuts/JetKtCut:MinEta -3.\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 3.\n" elif "-B" in parameterName : process+=jet_kt_cut(20.) process+="set /Herwig/Cuts/JetKtCut:MinEta -2.7\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 2.7\n" elif "-C" in parameterName : process+=jet_kt_cut(20.) process+="set /Herwig/Cuts/JetKtCut:MinEta -4.8\n" process+="set /Herwig/Cuts/JetKtCut:MaxEta 4.8\n" if "DiJets-1" in parameterName : process+=mhatmin_cut(90.) elif "DiJets-2" in parameterName : process+=mhatmin_cut(200.) elif "DiJets-3" in parameterName : process+=mhatmin_cut(450.) elif "DiJets-4" in parameterName : process+=mhatmin_cut(750.) elif "DiJets-5" in parameterName : process+=mhatmin_cut(950.) elif "DiJets-6" in parameterName : process+=mhatmin_cut(1550.) elif "DiJets-7" in parameterName : process+=mhatmin_cut(2150.) elif "DiJets-8" in parameterName : process+=mhatmin_cut(2750.) elif( "7-Jets" in parameterName or "8-Jets" in parameterName or "13-Jets" in parameterName ) : process+=insert_ME("MEQCD2to2") process+="set MEQCD2to2:MaximumFlavour 5\n" process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-10" in parameterName : process+=jet_kt_cut(1800.) elif "Jets-0" in parameterName : process+=jet_kt_cut(5.) elif "Jets-1" in parameterName : process+=jet_kt_cut(10.) elif "Jets-2" in parameterName : process+=jet_kt_cut(20.) elif "Jets-3" in parameterName : process+=jet_kt_cut(40.) elif "Jets-4" in parameterName : process+=jet_kt_cut(70.) elif "Jets-5" in parameterName : process+=jet_kt_cut(150.) elif "Jets-6" in parameterName : process+=jet_kt_cut(200.) elif "Jets-7" in parameterName : process+=jet_kt_cut(300.) elif "Jets-8" in parameterName : process+=jet_kt_cut(500.) elif "Jets-9" in parameterName : process+=jet_kt_cut(800.) elif("7-Charm" in parameterName or "7-Bottom" in parameterName) : if "7-Bottom" in parameterName : process+="cp MEHeavyQuark MEBottom\n" process+="set MEBottom:QuarkType Bottom\n" process+=insert_ME("MEBottom") else : process+="cp MEHeavyQuark MECharm\n" process+="set MECharm:QuarkType Charm\n" process+=insert_ME("MECharm") process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-0" in parameterName : if "7-Bottom" in parameterName : process+="set MEBottom:Process Pair\n" process+=jet_kt_cut(0.) elif "-1" in parameterName : process+=jet_kt_cut(5.) elif "-2" in parameterName : process+=jet_kt_cut(20.) elif "-3" in parameterName : process+=jet_kt_cut(50.) elif "-4" in parameterName : process+=jet_kt_cut(80.) elif "-5" in parameterName : process+=jet_kt_cut(110.) elif "-6" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(90.) elif "-7" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(340.) elif "-8" in parameterName : process+=jet_kt_cut(30.)+mhatmin_cut(500.) elif "Top-L" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=addBRReweighter() elif "Top-SL" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") process+="set /Herwig/Particles/t:Synchronized Not_synchronized\n" process+="set /Herwig/Particles/tbar:Synchronized Not_synchronized\n" process+=selectDecayMode("t",["t->nu_e,e+,b;","t->nu_mu,mu+,b;"]) process+=selectDecayMode("tbar",["tbar->b,bbar,cbar;", "tbar->bbar,cbar,d;", "tbar->bbar,cbar,s;", "tbar->bbar,s,ubar;", "tbar->bbar,ubar,d;"]) process+=addBRReweighter() elif "Top-All" in parameterName : process+="set MEHeavyQuark:QuarkType Top\n" process+=insert_ME("MEHeavyQuark") elif "WZ" in parameterName : process+=insert_ME("MEPP2VV","WZ") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() elif "WW-emu" in parameterName : process+=insert_ME("MEPP2VV","WW") process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) process+=addBRReweighter() elif "WW-ll" in parameterName : process+=insert_ME("MEPP2VV","WW") process+=selectDecayMode("W+",["W+->nu_e,e+;","W+->nu_mu,mu+;","W+->nu_tau,tau+;"]) process+=addBRReweighter() elif "ZZ-ll" in parameterName : process+=insert_ME("MEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) process+=addBRReweighter() elif "ZZ-lv" in parameterName : process+=insert_ME("MEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) process+=addBRReweighter() elif "W-Z-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=insert_ME("MEqq2W2ff","Electron") - elif "W-Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=insert_ME("MEqq2W2ff","Muon") elif "W-e" in parameterName : process+=insert_ME("MEqq2W2ff","Electron") elif "W-mu" in parameterName : process+=insert_ME("MEqq2W2ff","Muon") elif "Z-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") elif "Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-LowMass-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=mhat_minm_maxm(20,20,70) elif "Z-MedMass-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") process+=mhat_minm_maxm(40,40,130) elif "Z-LowMass-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=mhat_minm_maxm(10,10,70) elif "Z-Mass1" in parameterName : process+=mhat_minm_maxm(10,10,35) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass2" in parameterName : process+=mhat_minm_maxm(25,25,70) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass3" in parameterName : process+=mhat_minm_maxm(60,60,120) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-Mass4" in parameterName : process+=mhat_minm_maxm(110,110,8000) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-HighMass1" in parameterName : process+=mhat_minm_maxm(116,116,400) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "Z-HighMass2" in parameterName : process+=mhat_minm_maxm(400,400,7000) if "-e" in parameterName : process+=insert_ME("MEqq2gZ2ff","Electron") else : process+=insert_ME("MEqq2gZ2ff","Muon") elif "W-Jet" in parameterName : process+=insert_ME("MEWJet","Electron","WDecay") if "W-Jet-1-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 100.0*GeV\n" parameterName=parameterName.replace("W-Jet-1-e","W-Jet-e") elif "W-Jet-2-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 190.0*GeV\n" parameterName=parameterName.replace("W-Jet-2-e","W-Jet-e") elif "W-Jet-3-e" in parameterName : process+="set /Herwig/Cuts/WBosonKtCut:MinKT 270.0*GeV\n" parameterName=parameterName.replace("W-Jet-3-e","W-Jet-e") elif "Z-Jet" in parameterName : if "-e" in parameterName : process+=insert_ME("MEZJet","Electron","ZDecay") if "Z-Jet-0-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV\n" parameterName=parameterName.replace("Z-Jet-0-e","Z-Jet-e") elif "Z-Jet-1-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 100.0*GeV\n" parameterName=parameterName.replace("Z-Jet-1-e","Z-Jet-e") elif "Z-Jet-2-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 190.0*GeV\n" parameterName=parameterName.replace("Z-Jet-2-e","Z-Jet-e") elif "Z-Jet-3-e" in parameterName : process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 270.0*GeV\n" parameterName=parameterName.replace("Z-Jet-3-e","Z-Jet-e") else : process+=insert_ME("MEZJet","Muon","ZDecay") process+="set /Herwig/Cuts/ZBosonKtCut:MinKT 35.0*GeV\n" parameterName=parameterName.replace("Z-Jet-0-mu","Z-Jet-mu") elif "WGamma" in parameterName : process+=insert_ME("MEPP2VGamma","1") process+="set MEPP2VGamma:MassOption 1" process+="set /Herwig/Cuts/PhotonKtCut:MinKT 10.\n" if "-e" in parameterName : process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=addBRReweighter() else : process+=selectDecayMode("W+",["W+->nu_mu,mu+;"]) process+=addBRReweighter() elif "ZGamma" in parameterName : process+=insert_ME("MEPP2VGamma","2") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 10.\n" if "-e" in parameterName : process+=selectDecayMode("Z0",["Z0->e-,e+;"]) process+=addBRReweighter() else : process+=selectDecayMode("Z0",["Z0->mu-,mu+;"]) process+=addBRReweighter() else : logging.error(" Process %s not supported for internal matrix elements" % name) sys.exit(1) elif(simulation=="Powheg") : if "8-VBF" in parameterName : process+=insert_ME("PowhegMEPP2HiggsVBF") elif "VBF" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("PowhegMEPP2HiggsVBF") elif "ggHJet" in parameterName : logging.error(" Process %s not supported for POWHEG matrix elements" % name) sys.exit(1) elif "8-ggH" in parameterName : process+=insert_ME("PowhegMEHiggs") elif "ggH" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=insert_ME("PowhegMEHiggs") elif "8-WH" in parameterName : process+=insert_ME("PowhegMEPP2WH") process+=jet_kt_cut(0.0) elif "8-ZH" in parameterName : process+=insert_ME("PowhegMEPP2ZH") process+=jet_kt_cut(0.0) elif "WH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=addBRReweighter() process+=insert_ME("PowhegMEPP2WH") process+=jet_kt_cut(0.0) elif "ZH" in parameterName : process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() process+=insert_ME("PowhegMEPP2ZH") process+=jet_kt_cut(0.0) elif "UE" in parameterName : logging.error(" Process %s not supported for powheg matrix elements" % name) sys.exit(1) elif "WZ" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/ZPowhegDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WPowhegDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WZ") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() elif "WW-emu" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/ZPowhegDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WPowhegDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WW") process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) process+=addBRReweighter() elif "WW-ll" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/ZPowhegDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WPowhegDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","WW") process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;", "W+->nu_tau,tau+;"]) process+=addBRReweighter() elif "ZZ-ll" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/ZPowhegDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WPowhegDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) process+=addBRReweighter() elif "ZZ-lv" in parameterName : process+="create Herwig::HwDecayHandler /Herwig/NewPhysics/DecayHandler\n" process+="set /Herwig/NewPhysics/DecayHandler:NewStep No\n" process+="set /Herwig/Shower/ShowerHandler:SplitHardProcess No\n"; process+="set /Herwig/Decays/ZDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/ZPowhegDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WDecayer:PhotonGenerator NULL\n"; process+="set /Herwig/Decays/WPowhegDecayer:PhotonGenerator NULL\n"; process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 0 /Herwig/Particles/tau-\n" process+="insert /Herwig/NewPhysics/DecayHandler:Excluded 1 /Herwig/Particles/tau+\n" process+="insert /Herwig/Generators/EventGenerator:EventHandler:PreCascadeHandlers 0 /Herwig/NewPhysics/DecayHandler\n" process+=insert_ME("PowhegMEPP2VV","ZZ") process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) process+=addBRReweighter() elif "W-Z-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "W-Z-mu" in parameterName : process+=insert_ME("MEqq2gZ2ff","Muon") process+=insert_ME("MEqq2W2ff","Muon") elif "W-e" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Electron") elif "W-mu" in parameterName : process+=insert_ME("PowhegMEqq2W2ff","Muon") elif "Z-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") elif "Z-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-LowMass-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=mhat_minm_maxm(20,20,70) elif "Z-MedMass-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") process+=mhat_minm_maxm(40,40,130) elif "Z-LowMass-mu" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") process+=mhat_minm_maxm(10,10,70) elif "Z-Mass1" in parameterName : process+=mhat_minm_maxm(10,10,35) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass2" in parameterName : process+=mhat_minm_maxm(25,25,70) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass3" in parameterName : process+=mhat_minm_maxm(60,60,120) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-Mass4" in parameterName : process+=mhat_minm_maxm(110,110,8000) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-HighMass1" in parameterName : process+=mhat_minm_maxm(116,116,400) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "Z-HighMass2" in parameterName : process+=mhat_minm_maxm(400,400,7000) if "-e" in parameterName : process+=insert_ME("PowhegMEqq2gZ2ff","Electron") else : process+=insert_ME("PowhegMEqq2gZ2ff","Muon") elif "DiPhoton-GammaGamma" in parameterName : process+=insert_ME("MEGammaGammaPowheg","GammaGamma") process+=insert_ME("MEGammaGamma","gg") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaGamma","") elif "DiPhoton-GammaJet" in parameterName : process+=insert_ME("MEGammaGammaPowheg","VJet") process+="set /Herwig/Cuts/PhotonKtCut:MinKT 5.\n" process+=jet_kt_cut(5.) parameterName=parameterName.replace("-GammaJet","") else : logging.error(" Process %s not supported for internal POWHEG matrix elements" % name) sys.exit(1) elif( simulation=="Matchbox" or simulation=="Merging" ) : if "8-VBF" in parameterName : parameters["nlo"] = "read Matchbox/VBFNLO.in\n" if(simulation=="Merging"): process+="cd /Herwig/Merging/\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/Z0\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W+\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W-\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/gamma\n" process+="do "+thefactory+":DiagramGenerator:TimeLikeRange 0 0\n" if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",1,1) process+=setHardProcessWidthToZero(["h0"]) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() + elif "ZZ" in parameterName : + process+=selectDecayMode("h0",["h0->Z0,Z0;"]) + process+=addBRReweighter() elif "VBF" in parameterName : process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" parameters["nlo"] = "read Matchbox/VBFNLO.in\n" if(simulation=="Merging"): process+="cd /Herwig/Merging/\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/Z0\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W+\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/W-\n" process+="insert "+thefactory+":DiagramGenerator:RestrictLines 0 /Herwig/Particles/gamma\n" process+="do "+thefactory+":DiagramGenerator:TimeLikeRange 0 0\n" if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0 j j","0","3","FixedScale",1,1) process+=setHardProcessWidthToZero(["h0"]) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" elif "ggHJet" in parameterName : if(simulation=="Merging"): logging.warning("ggHJet not explicitly tested for %s " % simulation) sys.exit(0) parameters["nlo"] = "read Matchbox/MadGraph-GoSam.in\nread Matchbox/HiggsEffective.in\n" process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p h0 j","3","1","FixedScale",0,0) process+=addFirstJet("20") process+="set "+thefactory+":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/FixedScale\n" process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" elif "8-ggH" in parameterName : parameters["nlo"] = "read Matchbox/MadGraph-GoSam.in\nread Matchbox/HiggsEffective.in\n" if(simulation=="Merging"): process+= "cd /Herwig/MatrixElements/Matchbox/Amplitudes\nset OpenLoops:HiggsEff On\nset MadGraph:Model heft\n" process+="cd /Herwig/Merging/\n" process+=setHardProcessWidthToZero(["h0"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",2,2) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() + elif "ZZ" in parameterName : + process+=selectDecayMode("h0",["h0->Z0,Z0;"]) + process+=addBRReweighter() elif "ggH" in parameterName : parameters["nlo"] = "read Matchbox/MadGraph-GoSam.in\nread Matchbox/HiggsEffective.in\n" if(simulation=="Merging"): process+= "cd /Herwig/MatrixElements/Matchbox/Amplitudes\nset OpenLoops:HiggsEff On\nset MadGraph:Model heft\n" process+="cd /Herwig/Merging/\n" process+=selectDecayMode("h0",["h0->tau-,tau+;"]) process+=addBRReweighter() process+="set /Herwig/Particles/tau-:Stable Stable\n" process+=setHardProcessWidthToZero(["h0"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p h0","2","1","FixedScale",2,2) process+="set "+thefactory+":ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/FixedScale\n" process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" elif "8-WH" in parameterName : if(simulation=="Merging"): logging.warning("8-WH not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["h0","W+","W-"]) process+=addProcess(thefactory,"p p W+ h0","0","2","FixedScale",0,0) process+=addProcess(thefactory,"p p W- h0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() + elif "ZZ" in parameterName : + process+=selectDecayMode("h0",["h0->Z0,Z0;"]) + process+=addBRReweighter() elif "8-ZH" in parameterName : if(simulation=="Merging"): logging.warning("8-ZH not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["h0","Z0"]) process+=addProcess(thefactory,"p p Z0 h0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7\n" if "GammaGamma" in parameterName : process+=selectDecayMode("h0",["h0->gamma,gamma;"]) process+=addBRReweighter() elif "WW" in parameterName : process+=selectDecayMode("h0",["h0->W+,W-;"]) process+=addBRReweighter() + elif "ZZ" in parameterName : + process+=selectDecayMode("h0",["h0->Z0,Z0;"]) + process+=addBRReweighter() elif "WH" in parameterName : if(simulation=="Merging"): logging.warning("WH not explicitly tested for %s " % simulation) sys.exit(0) process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=addBRReweighter() process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p e+ nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ nu h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu h0","0","3","LeptonPairMassScale",0,0) process+=addLeptonPairCut("60","120") elif "ZH" in parameterName : if(simulation=="Merging"): logging.warning("ZH not explicitly tested for %s " % simulation) sys.exit(0) process+=selectDecayMode("h0",["h0->b,bbar;"]) process+=addBRReweighter() process+=setHardProcessWidthToZero(["h0"]) process+=addProcess(thefactory,"p p e+ e- h0","0","3","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ mu- h0","0","3","LeptonPairMassScale",0,0) process+=addLeptonPairCut("60","120") elif "UE" in parameterName : logging.error(" Process %s not supported for Matchbox matrix elements" % name) sys.exit(1) elif "8-DiJets" in parameterName or "7-DiJets" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",1,1) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-A" in parameterName : process+=addFirstJet("45") process+=addSecondJet("25") process+="set /Herwig/Cuts/FirstJet:YRange -3. 3.\n" process+="set /Herwig/Cuts/SecondJet:YRange -3. 3.\n" elif "-B" in parameterName : process+=addFirstJet("20") process+=addSecondJet("15") process+="set /Herwig/Cuts/FirstJet:YRange -2.7 2.7\n" process+="set /Herwig/Cuts/SecondJet:YRange -2.7 2.7\n" elif "-C" in parameterName : process+=addFirstJet("20") process+=addSecondJet("15") process+="set /Herwig/Cuts/FirstJet:YRange -4.8 4.8\n" process+="set /Herwig/Cuts/SecondJet:YRange -4.8 4.8\n" else : logging.error("Exit 00001") sys.exit(1) if "DiJets-1" in parameterName : process+=addJetPairCut("90") elif "DiJets-2" in parameterName : process+=addJetPairCut("200") elif "DiJets-3" in parameterName : process+=addJetPairCut("450") elif "DiJets-4" in parameterName : process+=addJetPairCut("750") elif "DiJets-5" in parameterName : process+=addJetPairCut("950") elif "DiJets-6" in parameterName : process+=addJetPairCut("1550") elif "DiJets-7" in parameterName : process+=addJetPairCut("2150") elif "DiJets-8" in parameterName : process+=addJetPairCut("2750") else : logging.error("Exit 00002") sys.exit(1) elif( "7-Jets" in parameterName or "8-Jets" in parameterName or "13-Jets" in parameterName ) : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p j j","2","0","MaxJetPtScale",1,1) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "Jets-10" in parameterName : process+=addFirstJet("1800") elif "Jets-0" in parameterName : process+=addFirstJet("5") elif "Jets-1" in parameterName : process+=addFirstJet("10") elif "Jets-2" in parameterName : process+=addFirstJet("20") elif "Jets-3" in parameterName : process+=addFirstJet("40") elif "Jets-4" in parameterName : process+=addFirstJet("70") elif "Jets-5" in parameterName : process+=addFirstJet("150") elif "Jets-6" in parameterName : process+=addFirstJet("200") elif "Jets-7" in parameterName : process+=addFirstJet("300") elif "Jets-8" in parameterName : process+=addFirstJet("500") elif "Jets-9" in parameterName : process+=addFirstJet("800") else : logging.error("Exit 00003") sys.exit(1) elif( "7-Charm" in parameterName or "7-Bottom" in parameterName) : parameters["bscheme"]=fourFlavour process+="set /Herwig/Particles/b:HardProcessMass 4.2*GeV\n" process+="set /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" if "7-Bottom" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p b bbar","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p b bbar","2","0","MaxJetPtScale",1,0) else: if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p c cbar","2","0","MaxJetPtScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p c cbar","2","0","MaxJetPtScale",1,0) process+="set /Herwig/UnderlyingEvent/MPIHandler:IdenticalToUE 0\n" if "-0" in parameterName : process+=addFirstJet("0") elif "-1" in parameterName : process+=addFirstJet("5") elif "-2" in parameterName : process+=addFirstJet("20") elif "-3" in parameterName : process+=addFirstJet("50") elif "-4" in parameterName : process+=addFirstJet("80") elif "-5" in parameterName : process+=addFirstJet("110") elif "-6" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("90") elif "-7" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("340") elif "-8" in parameterName : process+=addFirstJet("30") process+=addSecondJet("25") process+=addJetPairCut("500") else : logging.error("Exit 00004") sys.exit(1) elif "Top-L" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=addBRReweighter() elif "Top-SL" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) process+="set /Herwig/Particles/t:Synchronized Not_synchronized\n" process+="set /Herwig/Particles/tbar:Synchronized Not_synchronized\n" process+=selectDecayMode("t",["t->nu_e,e+,b;", "t->nu_mu,mu+,b;"]) process+=selectDecayMode("tbar",["tbar->b,bbar,cbar;", "tbar->bbar,cbar,d;", "tbar->bbar,cbar,s;", "tbar->bbar,s,ubar;", "tbar->bbar,ubar,d;"]) process+=addBRReweighter() elif "Top-All" in parameterName : process+=setHardProcessWidthToZero(["t","tbar"]) if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p t tbar","2","0","TopPairMTScale",2,2) elif "WZ" in parameterName : if(simulation=="Merging"): logging.warning("WZ not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ Z0","0","2","FixedScale",0,0) process+=addProcess(thefactory,"p p W- Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 171.6*GeV\n\n" process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;"]) process+=selectDecayMode("W-",["W-->nu_ebar,e-;", "W-->nu_mubar,mu-;"]) process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "WW-emu" in parameterName : if(simulation=="Merging"): logging.warning("WW-emu not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ W-","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV\n" process+="set /Herwig/Particles/W+:Synchronized 0\n" process+="set /Herwig/Particles/W-:Synchronized 0\n" process+=selectDecayMode("W+",["W+->nu_e,e+;"]) process+=selectDecayMode("W-",["W-->nu_mubar,mu-;"]) process+=addBRReweighter() parameters["bscheme"] = "read Matchbox/FourFlavourScheme.in\n" process+=addLeptonPairCut("60","120") elif "WW-ll" in parameterName : if(simulation=="Merging"): logging.warning("WW-ll not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p W+ W-","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 160.8*GeV\n" process+=selectDecayMode("W+",["W+->nu_e,e+;", "W+->nu_mu,mu+;", "W+->nu_tau,tau+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") parameters["bscheme"] = "read Matchbox/FourFlavourScheme.in\n" elif "ZZ-ll" in parameterName : if(simulation=="Merging"): logging.warning("ZZ-ll not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p Z0 Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV\n" process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "ZZ-lv" in parameterName : if(simulation=="Merging"): logging.warning("ZZ-lv not explicitly tested for %s " % simulation) sys.exit(0) process+=setHardProcessWidthToZero(["W+","W-","Z0"]) process+=addProcess(thefactory,"p p Z0 Z0","0","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 182.2*GeV\n" process+=selectDecayMode("Z0",["Z0->e-,e+;", "Z0->mu-,mu+;", "Z0->tau-,tau+;", "Z0->nu_e,nu_ebar;", "Z0->nu_mu,nu_mubar;", "Z0->nu_tau,nu_taubar;"]) process+=addBRReweighter() process+=addLeptonPairCut("60","120") elif "W-Z-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('epm','e+','e-') process+=particlegroup('epmnu','e+','e-','nu_e','nu_ebar') process+=addProcess(thefactory,"p p epm epmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('mupm','mu+','mu-') process+=particlegroup('mupmnu','mu+','mu-','nu_mu','nu_mubar') process+=addProcess(thefactory,"p p mupm mupmnu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p e- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('epm','e+','e-') process+=addProcess(thefactory,"p p epm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "W-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ nu","0","2","LeptonPairMassScale",0,0) process+=addProcess(thefactory,"p p mu- nu","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=particlegroup('mupm','mu+','mu-') process+=addProcess(thefactory,"p p mupm nu","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("60","120") elif "Z-jj" in parameterName : if(simulation=="Merging"): logging.warning("Z-jj not explicitly tested for %s " % simulation) sys.exit(0) process+=addProcess(thefactory,"p p e+ e- j j","2","2","LeptonPairMassScale",0,0) process+=addFirstJet("40") process+=addSecondJet("30") process+=addLeptonPairCut("60","120") elif "Z-LowMass-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("20","70") elif "Z-MedMass-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("40","130") elif "Z-LowMass-mu" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) process+=addLeptonPairCut("10","70") elif "Z-Mass1" in parameterName : process+=addLeptonPairCut("10","35") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass2" in parameterName : process+=addLeptonPairCut("25","70") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass3" in parameterName : process+=addLeptonPairCut("60","120") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-Mass4" in parameterName : process+=addLeptonPairCut("115","8000") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-HighMass1" in parameterName : process+=addLeptonPairCut("116","400") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "Z-HighMass2" in parameterName : process+=addLeptonPairCut("400","7000") if "-e" in parameterName : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p e+ e-","0","2","LeptonPairMassScale",2,2) else : if(simulation=="Matchbox"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",0,0) elif(simulation=="Merging"): process+=addProcess(thefactory,"p p mu+ mu-","0","2","LeptonPairMassScale",2,2) elif "W-Jet" in parameterName : if(simulation=="Merging"): logging.warning("W-Jet not explicitly tested for %s " % simulation) sys.exit(0) process+=addProcess(thefactory,"p p e+ nu j","1","2","HTScale",0,0) process+=addProcess(thefactory,"p p e- nu j","1","2","HTScale",0,0) process+=addLeptonPairCut("60","120") if "W-Jet-1-e" in parameterName : process+=addFirstJet("100") parameterName=parameterName.replace("W-Jet-1-e","W-Jet-e") elif "W-Jet-2-e" in parameterName : process+=addFirstJet("190") parameterName=parameterName.replace("W-Jet-2-e","W-Jet-e") elif "W-Jet-3-e" in parameterName : process+=addFirstJet("270") parameterName=parameterName.replace("W-Jet-3-e","W-Jet-e") else : logging.error("Exit 00005") sys.exit(1) elif "Z-Jet" in parameterName : if(simulation=="Merging"): logging.warning("Z-Jet not explicitly tested for %s " % simulation) sys.exit(0) if "-e" in parameterName : process+=addProcess(thefactory,"p p e+ e- j","1","2","HTScale",0,0) if "Z-Jet-0-e" in parameterName : process+=addFirstJet("35") parameterName=parameterName.replace("Z-Jet-0-e","Z-Jet-e") elif "Z-Jet-1-e" in parameterName : process+=addFirstJet("100") parameterName=parameterName.replace("Z-Jet-1-e","Z-Jet-e") elif "Z-Jet-2-e" in parameterName : process+=addFirstJet("190") parameterName=parameterName.replace("Z-Jet-2-e","Z-Jet-e") elif "Z-Jet-3-e" in parameterName : process+=addFirstJet("270") parameterName=parameterName.replace("Z-Jet-3-e","Z-Jet-e") else : logging.error("Exit 00006") sys.exit(1) else : process+=addProcess(thefactory,"p p mu+ mu- j","1","2","HTScale",0,0) process+=addFirstJet("35") parameterName=parameterName.replace("Z-Jet-0-mu","Z-Jet-mu") process+=addLeptonPairCut("60","120") elif "Z-bb" in parameterName : if(simulation=="Merging"): logging.warning("Z-bb not explicitly tested for %s " % simulation) sys.exit(0) parameters["bscheme"]=fourFlavour process+="set /Herwig/Particles/b:HardProcessMass 4.2*GeV\nset /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" process+=addProcess(thefactory,"p p e+ e- b bbar","2","2","FixedScale",0,0) process+=addLeptonPairCut("66","116") process+=addFirstJet("18") process+=addSecondJet("15") process+=addLeptonPairCut("60","120") elif "Z-b" in parameterName : if(simulation=="Merging"): logging.warning("Z-b not explicitly tested for %s " % simulation) sys.exit(0) process+=particlegroup('bjet','b','bbar') process+=addProcess(thefactory,"p p e+ e- bjet","1","2","FixedScale",0,0) process+="set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 91.2*GeV\n" process+=addLeptonPairCut("60","120") process+=addFirstJet("15") elif "W-b" in parameterName : if(simulation=="Merging"): logging.warning("W-b not explicitly tested for %s " % simulation) sys.exit(0) parameters["bscheme"]=fourFlavour process += "set /Herwig/Particles/b:HardProcessMass 4.2*GeV\nset /Herwig/Particles/bbar:HardProcessMass 4.2*GeV\n" process+=addProcess(thefactory,"p p e- nu b bbar","2","2","FixedScale",0,0) process+=addProcess(thefactory,"p p mu+ nu b bbar","2","2","FixedScale",0,0) process += "set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 80.4*GeV\n" process+=addFirstJet("30") process+=addLeptonPairCut("60","120") else : logging.error(" Process %s not supported for Matchbox matrix elements" % name) sys.exit(1) # LHC-GammaGamma elif(collider=="LHC-GammaGamma" ) : if "-7-" in parameterName : process = StringBuilder(collider_lumi(7000.0)) elif "-8-" in parameterName : process = StringBuilder(collider_lumi(8000.0)) else : process = StringBuilder(collider_lumi(7000.0)) if(simulation=="") : if "7" in parameterName : process += insert_ME("MEgg2ff","Muon") else : logging.error(" Process %s not supported for default matrix elements" % name) sys.exit(1) else : logging.error("LHC-GammaGamma not supported for %s " % simulation) sys.exit(1) parameters['parameterFile'] = os.path.join(collider,"{c}-{pn}.in".format(c=collider, pn=parameterName)) parameters['runname'] = 'Rivet-%s' % name parameters['process'] = str(process) #check if selecteddecaymode and addedBRReweighter is consistent if selecteddecaymode and not addedBRReweighter: logging.error("Decaymode was selected but no BRReweighter was added.") sys.exit(1) if addedBRReweighter and not selecteddecaymode: logging.error("BRReweighter was added but no Decaymode was selected.") sys.exit(1) # check that we only add one process if in merging mode: if numberOfAddedProcesses > 1 and simulation =="Merging": logging.error("In Merging only one process is allowed at the moment. See ticket #403.") sys.exit(1) # Check if a process was added for Merging or Matchbox: if numberOfAddedProcesses == 0 and (simulation =="Merging" or simulation =="Matchbox"): logging.error("No process was selected.") sys.exit(1) # get template and write the file with open(os.path.join("Rivet/Templates",templateName), 'r') as f: templateText = f.read() template = Template( templateText ) with open(os.path.join("Rivet",name+".in"), 'w') as f: f.write( template.substitute(parameters) ) diff --git a/Tests/python/merge-LHC-Jets b/Tests/python/merge-LHC-Jets --- a/Tests/python/merge-LHC-Jets +++ b/Tests/python/merge-LHC-Jets @@ -1,1442 +1,1462 @@ #! /usr/bin/env python import logging import sys import math if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, yoda # ############################################# def fillAbove(scale,desthisto, sourcehistosbyptmin) : pthigh= 1e100 ptlow =-1e100 for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints) : xMin = h.points[i].x-h.points[i].xErrs.minus if( xMin*scale >= ptlow and xMin*scale < pthigh ) : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin*scale >= ptlow and h.bins[i].xMin*scale < pthigh ) : desthisto.bins[i] += h.bins[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin*scale >= ptlow and h.bins[i].xMin*scale < pthigh ) : desthisto.bins[i] += h.bins[i] elif(type(desthisto)==yoda.core.Counter) : desthisto += h else : logging.error("Can't merge %s, unknown type" % desthisto.path) sys.exit(1) pthigh=pt def mergeByPt(hpath, sqrts, scale=1.) : global inhistos_pt global outhistos try: fillAbove(scale,outhistos[hpath], inhistos_pt[hpath][float(sqrts)]) except: pass def mergeByMass(hpath, sqrts, scale=1.): global inhistos_mass global outhistos try: fillAbove(scale,outhistos[hpath], inhistos_mass[hpath][float(sqrts)]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos_pt global outhistos try: ## Find best pT_min match ptmins = inhistos_pt[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos_pt[hpath][float(sqrts)][closest_ptmin] except: pass def useOneMass(hpath, sqrts, ptmin): global inhistos_pt global outhistos try: ## Find best pT_min match ptmins = inhistos_mass[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested mass=%s: " % ptmin + \ "using mass=%e instead" % closest_ptmin) outhistos[hpath] = inhistos_mass[hpath][float(sqrts)][closest_ptmin] except: pass # ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") parser.add_option("--with-ue", action='store_true' , dest="ue", default=True, help="Include UE analyses") parser.add_option("--without-ue", action='store_false', dest="ue", default=True, help="Don\'t include UE analyses") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") (opts, args) = parser.parse_args() ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-7-Bottom-0.yoda","-7-Bottom-1.yoda","-7-Bottom-2.yoda", "-7-Bottom-3.yoda","-7-Bottom-4.yoda","-7-Bottom-5.yoda", "-7-Charm-1.yoda","-7-Charm-2.yoda", "-7-Charm-3.yoda","-7-Charm-4.yoda","-7-Charm-5.yoda", "-7-Top-SL.yoda","-7-Top-L.yoda","-7-Top-All.yoda", "-8-Top-SL.yoda","-8-Top-L.yoda","-8-Top-All.yoda", - "-13-Top-All.yoda"] + "-13-Top-L.yoda","-13-Top-SL.yoda"] -for i in range(1,10) : +for i in range(1,11) : for j in [7,8,13] : yodafiles.append("-%1.1i-Jets-%1.1i.yoda" % (j,i)) if(opts.ue) : - yodafiles += ["-7-Jets-0.yoda" ,"-8-Jets-0.yoda" ,"-7-Jets-10.yoda", - "-8-Jets-10.yoda" ,"-900-UE.yoda" ,"-2360-UE.yoda" , + yodafiles += ["-7-Jets-0.yoda" ,"-8-Jets-0.yoda" , + "-900-UE.yoda" ,"-2360-UE.yoda" , "-2760-UE.yoda" ,"-7-UE.yoda" ,"-900-UE-Long.yoda", "-900-UE-Short.yoda","-8-UE.yoda" , "-7-UE-Long.yoda","-13-UE.yoda","-13-UE-Long.yoda"] ## Get histos inhistos_pt = {} inhistos_mass = {} outhistos={} weights = {} for f in yodafiles: file='Rivet-'+args[0]+f ptmin=0. sqrts=7000 # CMS energy if(file.find("-900-")>0) : sqrts=900 elif(file.find("-2360-")>0) : sqrts=2360 elif(file.find("-2760-")>0) : sqrts=2760 elif(file.find("-7-")>=0) : sqrts=7000 elif(file.find("-8-")>=0) : sqrts=8000 elif(file.find("-13-")>0) : sqrts=13000 # pT min if(file.find("UE")>0) : ptmin=0. elif(file.find("Jets-0")>0) : ptmin=4. elif(file.find("Jets-10")>0) : ptmin=1900. elif(file.find("Jets-1")>0) : if( not opts.ue) : ptmin = 10. else : ptmin = 20. elif(file.find("Jets-2")>0) : ptmin=40. elif(file.find("Jets-3")>0) : ptmin=80. elif(file.find("Jets-4")>0) : ptmin=110. elif(file.find("Jets-5")>0) : ptmin=210. elif(file.find("Jets-6")>0) : ptmin=260. elif(file.find("Jets-7")>0) : ptmin=400. elif(file.find("Jets-8")>0) : ptmin=600. elif(file.find("Jets-9")>0) : ptmin=900. elif(file.find("Bottom-0")>0) : ptmin=0. elif(file.find("Bottom-1")>0 or file.find("Charm-1")>0) : ptmin=10. elif(file.find("Bottom-2")>0 or file.find("Charm-2")>0) : ptmin=30. elif(file.find("Bottom-3")>0 or file.find("Charm-3")>0) : ptmin=70. elif(file.find("Bottom-4")>0 or file.find("Charm-4")>0) : ptmin=100. elif(file.find("Bottom-5")>0 or file.find("Charm-5")>0) : ptmin=130. elif(file.find("Top-SL.yoda")>0 or file.find("Top-L.yoda")>0 or \ file.find("Top-All.yoda")>0): ptmin=0. if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file for aopath, ao in aos.iteritems() : if(aopath.find("S8924791")>0 or aopath.find("S8971293")>0 or aopath.find("S8817804")>0 or aopath.find("I1082936")>0 or aopath.find("S8994773")>0 or aopath.find("S8918562")>0 or aopath.find("S8624100")>0 or aopath.find("S8625980")>0 or aopath.find("S8894728")>0 or aopath.find("S8957746")>0 or aopath.find("S9126244")>0 or aopath.find("S9120041")>0 or aopath.find("S8950903")>0 or aopath.find("S9086218")>0 or aopath.find("S9088458")>0 or aopath.find("I919017" )>0 or aopath.find("I926145" )>0 or aopath.find("S8941262")>0 or aopath.find("S8973270")>0 or aopath.find("I1118269")>0 or aopath.find("I1188891")>0 or aopath.find("I1082009")>0 or aopath.find("I1087342")>0 or aopath.find("S9035664")>0 or aopath.find("I1125575")>0 or aopath.find("I1094564")>0 or aopath.find("I930220" )>0 or aopath.find("I1224539")>0 or aopath.find("I1273574")>0 or aopath.find("I1261026")>0 or aopath.find("I1307243")>0 or aopath.find("I1325553")>0 or aopath.find("I1298810")>0 or aopath.find("I1298811")>0 or aopath.find("I1208923")>0 or aopath.find("I1305624")>0 or aopath.find("I1419070")>0 or aopath.find("I1394679")>0 or aopath.find("I929691" )>0 or aopath.find("I1393758")>0 or - aopath.find("I1459051")>0 or aopath.find("ATLAS_2016_CONF_2016_092")>0 or + aopath.find("I1459051")>0 or aopath.find("I1487277")>0 or + aopath.find("I1421646")>0 or + aopath.find("ATLAS_2016_CONF_2016_092")>0 or aopath.find("CMS_2012_PAS_QCD_11_010")>0) : if not inhistos_pt.has_key(aopath): inhistos_pt[aopath] = {} tmpE = inhistos_pt[aopath] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} if not tmpE[sqrts].has_key(ptmin): tmpE[sqrts][ptmin] = ao else: tmpE[sqrts][ptmin] += ao #raise Exception("A set with ptmin = %s already exists" % ( ptmin)) else : if(aopath.find("I1243871")>0) : if(aopath.find("x01")>0 and file.find("-7-Top-L.yoda")>0 ) : outhistos[aopath] = ao elif(aopath.find("x02")>0 and file.find("-7-Top-SL.yoda")>0 ) : outhistos[aopath] = ao elif(aopath.find("1467230")>0 or aopath.find("1419652")>0) : if(aopath.find("y01")>0 and file.find("Long")>0 ) : outhistos[aopath] = ao elif(aopath.find("y02")>0 and file.find("Long")<0 ) : outhistos[aopath] = ao else : outhistos[aopath] = ao yodafiles=["-7-Bottom-6.yoda","-7-Bottom-7.yoda","-7-Bottom-8.yoda"] for i in range(1,8) : yodafiles.append("-7-DiJets-%1.1i-A.yoda" % i) yodafiles.append("-7-DiJets-%1.1i-B.yoda" % i) yodafiles.append("-7-DiJets-%1.1i-C.yoda" % i) for f in yodafiles: - print file file='Rivet-'+args[0]+f if(file.find("-7-Jets-1")>0) : sqrts=7000 mass=0 if(file.find("-7-DiJets-1")>0) : sqrts=7000 mass=100 elif(file.find("-7-DiJets-2")>0) : sqrts=7000 mass=250 elif(file.find("-7-DiJets-3")>0) : sqrts=7000 mass=500 elif(file.find("-7-DiJets-4")>0) : sqrts=7000 mass=800 elif(file.find("-7-DiJets-5")>0) : sqrts=7000 mass=1000 elif(file.find("-7-DiJets-6")>0) : sqrts=7000 mass=1600 elif(file.find("-7-DiJets-7")>0) : sqrts=7000 mass=2200 elif(file.find("-7-DiJets-8")>0) : sqrts=7000 mass=2800 elif(file.find("-7-Bottom-6")>0) : sqrts=7000 mass=110 elif(file.find("-7-Bottom-7")>0) : sqrts=7000 mass=370 elif(file.find("-7-Bottom-8")>0) : sqrts=7000 mass=550 if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file for aopath, ao in aos.iteritems() : if(aopath.find("8817804")>0 or aopath.find("8968497")>0 or aopath.find("1082936")>0 or aopath.find("I930220")>0 or aopath.find("1261026")>0 or aopath.find("1090423")>0 or aopath.find("1268975")>0 or aopath.find("CMS_2013_I1208923")>0) : if not inhistos_mass.has_key(aopath): inhistos_mass[aopath] = {} tmpE = inhistos_mass[aopath] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} tmpP = tmpE[sqrts] if not tmpP.has_key(mass): tmpP[mass] = ao else: print aopath raise Exception("A set with mass = %s already exists" % ( mass)) ## Make empty output histos if needed for hpath,hsets in inhistos_pt.iteritems(): if( hpath.find("8924791")>0 or hpath.find("8971293")>0 or hpath.find("8817804")>0 or hpath.find("8968497")>0 or (hpath.find("9120041")>0 and (hpath.find("d01")>0 or hpath.find("d02")>0)) or hpath.find("9126244")>0 or hpath.find("926145") >0 or hpath.find("9086218")>0 or hpath.find("1082936")>0 or hpath.find("8941262")>0 or hpath.find("1118269")>0 or hpath.find("1087342")>0 or hpath.find("1188891")>0 or hpath.find("919017")>0 or hpath.find("9035664")>0 or hpath.find("1125575")>0 or hpath.find("1094564")>0 or hpath.find("I930220")>0 or hpath.find("S9088458")>0 or hpath.find("I1273574")>0 or hpath.find("I1261026")>0 or hpath.find("I1090423")>0 or hpath.find("QCD_11_010")>0 or hpath.find("1298811" )>0 or hpath.find("I1325553" )>0 or hpath.find("I1298810" )>0 or hpath.find("1307243" )>0 or hpath.find("I1419070")>0 or hpath.find("I1394679")>0 or + hpath.find("I1487277")>0 or hpath.find("CMS_2013_I1208923")>0 or hpath.find("1393758")>0 or hpath.find("ATLAS_2016_CONF_2016_092")>0 or hpath.find("1459051")>0) : if(type(hsets.values()[0].values()[0])==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) elif(type(hsets.values()[0].values()[0])==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) ## Make empty output histos if needed for hpath,hsets in inhistos_mass.iteritems(): if(hpath.find("1268975")>0) : if(type(hsets.values()[0].values()[0])==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) elif(type(hsets.values()[0].values()[0])==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) else : logging.error("Histogram %s is of unknown type" % hpath) sys.exit(1) logging.info("Processing CMS_2011_S8957746") useOnePt("/CMS_2011_S8957746/d01-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8957746/d02-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8957746/d03-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8957746/d04-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8957746/d05-x01-y01", "7000", "210" ) useOnePt("/CMS_2011_S8957746/d06-x01-y01", "7000", "210" ) logging.info("Processing ATLAS_2010_S8894728") useOnePt("/ATLAS_2010_S8894728/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d01-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d01-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d02-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d03-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d04-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d05-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d06-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d07-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d08-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d09-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d10-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d11-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d12-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d13-x01-y04", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d14-x01-y04", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d15-x01-y04", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d16-x01-y04", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d17-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d18-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y02", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d19-x01-y03", "900", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d20-x01-y03", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d21-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8894728/d22-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2011_S8994773") useOnePt("/ATLAS_2011_S8994773/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d02-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d03-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d04-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y02", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d13-x01-y03", "900", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y02", "7000", "0" ) useOnePt("/ATLAS_2011_S8994773/d14-x01-y03", "7000", "0" ) logging.info("Processing ALICE_2010_S8624100") useOnePt("/ALICE_2010_S8624100/d11-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d12-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d13-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8624100/d17-x01-y01","2360", "0" ) useOnePt("/ALICE_2010_S8624100/d18-x01-y01","2360", "0" ) useOnePt("/ALICE_2010_S8624100/d19-x01-y01","2360", "0" ) logging.info("Processing ALICE_2010_S8625980") useOnePt("/ALICE_2010_S8625980/d03-x01-y01", "7000", "0" ) useOnePt("/ALICE_2010_S8625980/d04-x01-y01", "900", "0" ) useOnePt("/ALICE_2010_S8625980/d05-x01-y01", "2360", "0" ) useOnePt("/ALICE_2010_S8625980/d06-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2010_S8918562") useOnePt("/ATLAS_2010_S8918562/d01-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d02-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d03-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d04-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d05-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d06-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d07-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d08-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d09-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d10-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d11-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d13-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d14-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d15-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d16-x01-y01", "2360", "0" ) useOnePt("/ATLAS_2010_S8918562/d17-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d18-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d19-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d20-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d21-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d22-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d23-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d24-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d25-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d26-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d27-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d28-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d29-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d30-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d31-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d32-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d33-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d34-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d35-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d36-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d37-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2010_S8918562/d38-x01-y01", "900", "0" ) useOnePt("/ATLAS_2010_S8918562/d39-x01-y01", "7000", "0" ) logging.info("Processing ATLAS_2011_S8971293") useOnePt("/ATLAS_2011_S8971293/d01-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y03", "7000", "210" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y04", "7000", "260" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y05", "7000", "260" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y06", "7000", "400" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y07", "7000", "400" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y08", "7000", "600" ) useOnePt("/ATLAS_2011_S8971293/d01-x01-y09", "7000", "600" ) logging.info("Processing ATLAS_2011_S8924791") if( not opts.ue) : useOnePt("/ATLAS_2011_S8924791/d01-x01-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x01-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y02", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y01", "7000", "10" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y02", "7000", "10" ) else : useOnePt("/ATLAS_2011_S8924791/d01-x01-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x01-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x02-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x03-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x04-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x05-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y01", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d01-x06-y02", "7000", "20" ) useOnePt("/ATLAS_2011_S8924791/d02-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x02-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x02-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x03-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x03-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x04-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x04-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x05-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x05-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x06-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d02-x06-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x02-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x02-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x03-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x03-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x04-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x04-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x05-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x05-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x06-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d03-x06-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S8924791/d04-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x02-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x02-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x03-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x03-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x04-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x04-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x05-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x05-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x06-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d04-x06-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S8924791/d05-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x02-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x02-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x03-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x03-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x04-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x04-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x05-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x05-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x06-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d05-x06-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x02-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x02-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x03-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x03-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x04-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x04-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x05-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x05-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x06-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d06-x06-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S8924791/d07-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x02-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x02-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x03-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x03-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x04-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x04-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x05-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x05-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x06-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d07-x06-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S8924791/d08-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x01-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x02-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x02-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x03-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x03-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x04-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x04-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x05-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x05-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x06-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d08-x06-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x01-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x02-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x02-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x03-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x03-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x04-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x04-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x05-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x05-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x06-y01", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d09-x06-y02", "7000", "260" ) useOnePt("/ATLAS_2011_S8924791/d10-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x01-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x02-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x02-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x03-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x03-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x04-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x04-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x05-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x05-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x06-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d10-x06-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x01-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x02-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x02-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x03-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x03-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x04-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x04-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x05-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x05-y02", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x06-y01", "7000", "400" ) useOnePt("/ATLAS_2011_S8924791/d11-x06-y02", "7000", "400" ) logging.info("Processing ATLAS_2010_S8817804") mergeByPt("/ATLAS_2010_S8817804/d01-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d02-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d03-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d04-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d05-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d06-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d07-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d08-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d09-x01-y01", "7000") mergeByPt("/ATLAS_2010_S8817804/d10-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d11-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d12-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d13-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d14-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d15-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d16-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d17-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d18-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d19-x01-y01", "7000") mergeByMass("/ATLAS_2010_S8817804/d20-x01-y01", "7000") useOneMass("/ATLAS_2010_S8817804/d21-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d22-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d23-x01-y01", "7000", "650" ) useOneMass("/ATLAS_2010_S8817804/d24-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d25-x01-y01", "7000", "250" ) useOneMass("/ATLAS_2010_S8817804/d26-x01-y01", "7000", "650" ) logging.info("Processing ATLAS_2011_I930220") mergeByPt("/ATLAS_2011_I930220/d01-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d02-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d03-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d04-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d05-x01-y01", "7000" ) mergeByPt("/ATLAS_2011_I930220/d06-x01-y01", "7000" ) mergeByMass("/ATLAS_2011_I930220/d07-x01-y01", "7000") useOneMass("/ATLAS_2011_I930220/d08-x01-y01", "7000", "110" ) useOneMass("/ATLAS_2011_I930220/d09-x01-y01", "7000", "110" ) useOneMass("/ATLAS_2011_I930220/d10-x01-y01", "7000", "370" ) logging.info("Processing ATLAS_2012_I1082936") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y03", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y04", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y05", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y06", "7000") mergeByPt("/ATLAS_2012_I1082936/d01-x01-y07", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y03", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y04", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y05", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y06", "7000") mergeByPt("/ATLAS_2012_I1082936/d02-x01-y07", "7000") mergeByMass("/ATLAS_2012_I1082936/d03-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y07", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y08", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d03-x01-y09", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y07", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y08", "7000", 1000.) mergeByMass("/ATLAS_2012_I1082936/d04-x01-y09", "7000", 1000.) logging.info("Processing CMS_2011_S8968497") useOneMass("/CMS_2011_S8968497/d01-x01-y01", "7000", "1700" ) useOneMass("/CMS_2011_S8968497/d02-x01-y01", "7000", "1700" ) useOneMass("/CMS_2011_S8968497/d03-x01-y01", "7000", "1100" ) useOneMass("/CMS_2011_S8968497/d04-x01-y01", "7000", "1100" ) useOneMass("/CMS_2011_S8968497/d05-x01-y01", "7000", "650" ) useOneMass("/CMS_2011_S8968497/d06-x01-y01", "7000", "650" ) useOneMass("/CMS_2011_S8968497/d07-x01-y01", "7000", "250" ) useOneMass("/CMS_2011_S8968497/d08-x01-y01", "7000", "250" ) useOneMass("/CMS_2011_S8968497/d09-x01-y01", "7000", "250" ) logging.info("Processing ATLAS_2011_S9126244") mergeByPt("/ATLAS_2011_S9126244/d01-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d01-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d02-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d02-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d03-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d03-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d04-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d04-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d05-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d05-x01-y02", "7000") useOnePt("/ATLAS_2011_S9126244/d06-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d06-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d07-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d07-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d08-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d08-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d09-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d09-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d10-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d10-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d11-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d11-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d12-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d12-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d13-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d13-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d14-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d14-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d15-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d15-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d16-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d16-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d17-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d17-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d18-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d18-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d19-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d20-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d21-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d22-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d23-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d24-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d25-x01-y01", "7000", "210" ) mergeByPt("/ATLAS_2011_S9126244/d26-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d26-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d27-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d27-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d28-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d28-x01-y02", "7000") mergeByPt("/ATLAS_2011_S9126244/d29-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9126244/d29-x01-y02", "7000") useOnePt("/ATLAS_2011_S9126244/d30-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d31-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d32-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d33-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d34-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d35-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d36-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d37-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d37-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2011_S9126244/d38-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d38-x01-y02", "7000", "80" ) useOnePt("/ATLAS_2011_S9126244/d39-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d39-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d40-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d40-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d41-x01-y01", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d41-x01-y02", "7000", "110" ) useOnePt("/ATLAS_2011_S9126244/d42-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d42-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d43-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2011_S9126244/d43-x01-y02", "7000", "210" ) # CMS_2011_S9120041 UE analysis logging.info("Processing CMS_2011_S9120041") mergeByPt("/CMS_2011_S9120041/d01-x01-y01", "7000") mergeByPt("/CMS_2011_S9120041/d02-x01-y01", "7000") if(opts.ue) : useOnePt("/CMS_2011_S9120041/d03-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d04-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d05-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d06-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d07-x01-y01", "7000", "0" ) useOnePt("/CMS_2011_S9120041/d11-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d12-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d13-x01-y01", "900", "0" ) useOnePt("/CMS_2011_S9120041/d08-x01-y01", "7000", "20" ) useOnePt("/CMS_2011_S9120041/d09-x01-y01", "7000", "20" ) useOnePt("/CMS_2011_S9120041/d10-x01-y01", "7000", "20" ) else : useOnePt("/CMS_2011_S9120041/d08-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S9120041/d09-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S9120041/d10-x01-y01", "7000", "10" ) # CMS dijet decorrelation logging.info("Processing CMS_2011_S8950903") useOnePt("/CMS_2011_S8950903/d01-x01-y01", "7000", "80" ) useOnePt("/CMS_2011_S8950903/d02-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8950903/d03-x01-y01", "7000", "110" ) useOnePt("/CMS_2011_S8950903/d04-x01-y01", "7000", "210" ) useOnePt("/CMS_2011_S8950903/d05-x01-y01", "7000", "260" ) # CMS jet cross section logging.info("Processing CMS_2011_S9086218") mergeByPt("/CMS_2011_S9086218/d01-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d02-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d03-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d04-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d05-x01-y01", "7000") mergeByPt("/CMS_2011_S9086218/d06-x01-y01", "7000") # CMS 2/3 jet cross section ratio logging.info("Processing CMS_2011_S9086218") mergeByPt("/CMS_2011_S9088458/d01-x01-y01", "7000",500.) # ATLAS track jet logging.info("Processing ATLAS_2011_I919017") for d in range(1,3) : for y in range(1,5) : mergeByPt("/ATLAS_2011_I919017/d0%s-x01-y0%s" % (d,y), "7000") if( opts.ue) : for x in range(2,6) : for y in ["01","02","06","07","11","12","16","17","21","22"] : useOnePt("/ATLAS_2011_I919017/d0%s-x0%s-y%s" % (d,x,y), "7000", "0" ) for y in ["03","04","08","09","13","14","18","19","23","24"] : useOnePt("/ATLAS_2011_I919017/d0%s-x0%s-y%s" % (d,x,y), "7000", "4" ) for y in range(5,30,5) : useOnePt("/ATLAS_2011_I919017/d0%s-x%02d-y%02d" % (d,x,y) , "7000", "20" ) else : for x in range(2,6) : for y in range(5,30,5) : useOnePt("/ATLAS_2011_I919017/d0%s-x%02d-y%02d" % (d,x,y) , "7000", "10" ) logging.info("Processing ATLAS_2011_I926145") mergeByPt("/ATLAS_2011_I926145/d01-x01-y01", "7000",1.5) mergeByPt("/ATLAS_2011_I926145/d02-x01-y01", "7000",1.5) mergeByPt("/ATLAS_2011_I926145/d03-x01-y01", "7000",1.5) logging.info("Processing CMS_2011_S8941262") useOnePt("/CMS_2011_S8941262/d01-x01-y01", "7000", "10" ) useOnePt("/CMS_2011_S8941262/d03-x01-y01", "7000", "10" ) mergeByPt("/CMS_2011_S8941262/d02-x01-y01", "7000",1.5) logging.info("Processing CMS_2011_S8973270") useOnePt("/CMS_2011_S8973270/d01-x01-y01", "7000", "70" ) useOnePt("/CMS_2011_S8973270/d02-x01-y01", "7000", "100" ) useOnePt("/CMS_2011_S8973270/d03-x01-y01", "7000", "130" ) useOnePt("/CMS_2011_S8973270/d04-x01-y01", "7000", "70" ) useOnePt("/CMS_2011_S8973270/d05-x01-y01", "7000", "100" ) useOnePt("/CMS_2011_S8973270/d06-x01-y01", "7000", "130" ) logging.info("Processing ATLAS_2012_I1082009") useOnePt("/ATLAS_2012_I1082009/d08-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d09-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d10-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2012_I1082009/d11-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2012_I1082009/d12-x01-y01", "7000", "80" ) useOnePt("/ATLAS_2012_I1082009/d13-x01-y01", "7000", "40" ) logging.info("Processing ATLAS_2012_I1118269") mergeByPt("/ATLAS_2012_I1118269/d01-x01-y01", "7000") useOnePt("/ATLAS_2012_I1118269/d02-x01-y01", "7000", "10" ) logging.info("Processing ATLAS_2012_I1188891") mergeByPt("/ATLAS_2012_I1188891/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d03-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d04-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d05-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1188891/d06-x01-y01", "7000") logging.info("Processing CMS_2012_I1087342") mergeByPt("/CMS_2012_I1087342/d01-x01-y01", "7000") mergeByPt("/CMS_2012_I1087342/d02-x01-y01", "7000") mergeByPt("/CMS_2012_I1087342/d03-x01-y01", "7000") logging.info("Processing CMS_2012_PAS_QCD_11_010") mergeByPt("/CMS_2012_PAS_QCD_11_010/d01-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d02-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d03-x01-y01", "7000") mergeByPt("/CMS_2012_PAS_QCD_11_010/d04-x01-y01", "7000") logging.info("Processing ATLAS_2011_S9035664") mergeByPt("/ATLAS_2011_S9035664/d11-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d12-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d13-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d14-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d15-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d16-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d17-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d18-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d20-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d21-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d22-x01-y01", "7000") mergeByPt("/ATLAS_2011_S9035664/d23-x01-y01", "7000") logging.info("Processing ATLAS_2012_I1125575") mergeByPt("/ATLAS_2012_I1125575/d01-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d01-x05-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d02-x05-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x01-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x01-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x02-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x02-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x03-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x03-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x04-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x04-y02", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x05-y01", "7000") mergeByPt("/ATLAS_2012_I1125575/d03-x05-y02", "7000") for d in range(4,7) : for x in range(1,6) : if(opts.ue) : for y in range(1,9) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y0%s" % (d,x,y), "7000", "0" ) for y in ["09","10","11","12","13","14","15","16"] : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "0" ) for y in range(17,19) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "20" ) else : for y in range(17,19) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "10" ) for y in range(19,21) : useOnePt("/ATLAS_2012_I1125575/d0%s-x0%s-y%s" % (d,x,y), "7000", "40" ) # ATLAS_2012_I1094564 useOnePt("/ATLAS_2012_I1094564/d01-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d02-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d03-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d04-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d05-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d06-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d07-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d08-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d09-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d10-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d11-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d12-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d13-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d14-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d15-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d16-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d17-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d18-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d19-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d20-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d21-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d22-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d23-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d24-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d25-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d26-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d27-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d28-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d29-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d30-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d31-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d32-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d33-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2012_I1094564/d34-x01-y01", "7000", "260" ) useOnePt("/ATLAS_2012_I1094564/d35-x01-y01", "7000", "400" ) useOnePt("/ATLAS_2012_I1094564/d36-x01-y01", "7000", "400" ) logging.info("Processing CMS_2013_I1224539_DIJET") useOnePt("/CMS_2013_I1224539_DIJET/d01-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d02-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d03-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d04-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d05-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d06-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d07-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d08-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d09-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d10-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d11-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d12-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d13-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d14-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d15-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d16-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d17-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d18-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d19-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d20-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d21-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d22-x01-y01", "7000", "210" ) useOnePt("/CMS_2013_I1224539_DIJET/d23-x01-y01", "7000", "260" ) useOnePt("/CMS_2013_I1224539_DIJET/d24-x01-y01", "7000", "400" ) useOnePt("/CMS_2013_I1224539_DIJET/d25-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d26-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d27-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1224539_DIJET/d28-x01-y01", "7000", "600" ) useOnePt("/CMS_2013_I1273574/d01-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d02-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d03-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d04-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d05-x01-y01", "7000", "80" ) useOnePt("/CMS_2013_I1273574/d06-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d07-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d08-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d09-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1273574/d10-x01-y01", "7000", "80" ) mergeByPt("/CMS_2013_I1273574/d11-x01-y01", "7000",1.) useOnePt("/CMS_2013_I1261026/d01-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d02-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d03-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d04-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d05-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d06-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d07-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d08-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d09-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d10-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d11-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d12-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d13-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d14-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d15-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d16-x01-y01", "7000", "0" ) useOnePt("/CMS_2013_I1261026/d17-x01-y01", "7000", "0" ) logging.info("Processing CMS_2012_I1090423") useOneMass("/CMS_2012_I1090423/d01-x01-y01", "7000", "2900" ) useOneMass("/CMS_2012_I1090423/d02-x01-y01", "7000", "2300" ) useOneMass("/CMS_2012_I1090423/d03-x01-y01", "7000", "1700" ) useOneMass("/CMS_2012_I1090423/d04-x01-y01", "7000", "1100" ) useOneMass("/CMS_2012_I1090423/d05-x01-y01", "7000", "1100" ) useOneMass("/CMS_2012_I1090423/d06-x01-y01", "7000", "650" ) useOneMass("/CMS_2012_I1090423/d07-x01-y01", "7000", "650" ) useOneMass("/CMS_2012_I1090423/d08-x01-y01", "7000", "250" ) useOneMass("/CMS_2012_I1090423/d09-x01-y01", "7000", "250" ) logging.info("Processing ATLAS_2014_I1298811") mergeByPt("/ATLAS_2014_I1298811/d01-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d01-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d02-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d02-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d03-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d03-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d04-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d04-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d05-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d05-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d06-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d06-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d07-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d07-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d08-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d08-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d09-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d09-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1298811/d10-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1298811/d10-x01-y02", "7000") useOnePt("/ATLAS_2014_I1298811/d11-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2014_I1298811/d12-x01-y01", "7000", "0" ) useOnePt("/ATLAS_2014_I1298811/d13-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d13-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d14-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d14-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d15-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d15-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d25-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d25-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d26-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d26-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d27-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d27-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d16-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d16-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d17-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d17-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d18-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d18-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d28-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d28-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d29-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d29-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d30-x01-y01", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d30-x01-y02", "7000", "4" ) useOnePt("/ATLAS_2014_I1298811/d19-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d19-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d20-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d20-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d21-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d21-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d31-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d31-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d32-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d32-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d33-x01-y01", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d33-x01-y02", "7000", "40" ) useOnePt("/ATLAS_2014_I1298811/d22-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d22-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d23-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d23-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d24-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d24-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d34-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d34-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d35-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d35-x01-y02", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d36-x01-y01", "7000", "210" ) useOnePt("/ATLAS_2014_I1298811/d36-x01-y02", "7000", "210" ) logging.info("Processing ATLAS_2014_I1268975") mergeByMass("/ATLAS_2014_I1268975/d01-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d01-x01-y06", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y01", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y02", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y03", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y04", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y05", "7000", 1000.) mergeByMass("/ATLAS_2014_I1268975/d02-x01-y06", "7000", 1000.) logging.info("Processing ATLAS_2014_I1307243") useOnePt( "/ATLAS_2014_I1307243/d01-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d02-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d03-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d04-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d05-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d06-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d07-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d08-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d09-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d10-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d11-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d12-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d13-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d14-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d15-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d16-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d17-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d18-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d19-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d20-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d21-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d22-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d23-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d24-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d25-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d26-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d27-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d28-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d29-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d30-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d31-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d32-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d33-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d34-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d35-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d36-x01-y01", "7000", "80" ) useOnePt( "/ATLAS_2014_I1307243/d37-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d38-x01-y01", "7000") useOnePt( "/ATLAS_2014_I1307243/d39-x01-y01", "7000", "80" ) mergeByPt("/ATLAS_2014_I1307243/d40-x01-y01", "7000") logging.info("Processing ATLAS_2014_I1325553") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y03", "7000") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y04", "7000") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y05", "7000") mergeByPt("/ATLAS_2014_I1325553/d01-x01-y06", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y01", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y02", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y03", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y04", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y05", "7000") mergeByPt("/ATLAS_2014_I1325553/d02-x01-y06", "7000") logging.info("Processing ATLAS_2016_I1419070") for i in range(1,13) : if(i<10) : mergeByPt("/ATLAS_2016_I1419070/d0%s-x01-y01" % i, "8000") else : mergeByPt("/ATLAS_2016_I1419070/d%s-x01-y01" % i, "8000") # remake differences and sums for ihist in range(1,4) : if not ("/ATLAS_2016_I1419070/d0%s-x01-y01" % ihist) in outhistos : continue h1 = outhistos["/ATLAS_2016_I1419070/d0%s-x01-y01" % ihist ] h2 = outhistos["/ATLAS_2016_I1419070/d0%s-x01-y01" % (ihist+3)] sstring = "/ATLAS_2016_I1419070/d%s-x01-y01" % (9+ihist) dstring = "/ATLAS_2016_I1419070/d0%s-x01-y01" % (6+ihist) hdiff = yoda.Scatter2D(dstring,dstring) hsum = yoda.Scatter2D(sstring,sstring) outhistos[dstring]= hdiff outhistos[sstring]= hsum for nbin in range(0,h2.numBins) : bsum = h1.bins[nbin]+h2.bins[nbin] try: ydiff = h2.bins[nbin].mean-h1.bins[nbin].mean except: ydiff = 0 try: ysum = bsum.mean bstderr = bsum.stdErr except: ysum = 0 bstderr = 0 try: yerr = math.sqrt(h1.bins[nbin].stdErr**2+h2.bins[nbin].stdErr**2) except: yerr = 0 x = h1.bins[nbin].xMid xerr = 0.5*h1.bins[nbin].xWidth hdiff.addPoint(x,ydiff,xerr,yerr) hsum.addPoint(x,ysum ,xerr,bstderr) logging.info("ATLAS_2015_I1394679") for i in range(1,5) : mergeByPt("/ATLAS_2015_I1394679/d0%s-x01-y01" % i, "8000") for i in range(5,11) : if(i<10) : useOnePt( "/ATLAS_2015_I1394679/d0%s-x01-y01" % i, "8000", "110" ) else : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % i, "8000", "110" ) for i in range(0,4) : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (11+4*i), "8000", "110" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (12+4*i), "8000", "260" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (13+4*i), "8000", "600" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (14+4*i), "8000", "900" ) for i in range(0,5) : useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (27+4*i), "8000", "110" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (28+4*i), "8000", "260" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (29+4*i), "8000", "400" ) useOnePt( "/ATLAS_2015_I1394679/d%s-x01-y01" % (30+4*i), "8000", "400" ) logging.info("Processing CMS_2013_I1208923") for i in range(1,6) : mergeByPt ("/CMS_2013_I1208923/d01-x01-y0%s" % i, "7000") mergeByMass("/CMS_2013_I1208923/d02-x01-y0%s" % i, "7000", 1.) logging.info("Processing CMS_2014_I1298810") for i in range(1,19) : if(i<10) : mergeByPt("/CMS_2014_I1298810/d0"+str(i)+"-x01-y01", "7000") else : mergeByPt("/CMS_2014_I1298810/d"+str(i)+"-x01-y01", "7000") logging.info("Processing CMS_2014_I1305624") for x in range(1,6) : useOnePt( "/CMS_2014_I1305624/d01-x%02d-y01" % x, "7000", "110" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y02" % x, "7000", "110" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y03" % x, "7000", "260" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y04" % x, "7000", "260" ) useOnePt( "/CMS_2014_I1305624/d01-x%02d-y05" % x, "7000", "400" ) logging.info("Processing ATLAS_2011_I929691") for x in range(0,3) : useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 1), "7000", "20" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 2), "7000", "40" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 3), "7000", "40" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 4), "7000", "80" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 5), "7000", "110" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 6), "7000", "110" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 7), "7000", "210" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 8), "7000", "260" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+ 9), "7000", "260" ) useOnePt( "/ATLAS_2011_I929691/d%02d-x01-y01" % (10*x+10), "7000", "400" ) logging.info("Processing ATLAS_2015_I1393758") for i in range(1,13) : mergeByPt("/ATLAS_2015_I1393758/d%02d-x01-y01" % i, "8000") logging.info("Processing CMS_2016_I1459051") for i in range(1,15) : mergeByPt("/CMS_2016_I1459051/d%02d-x01-y01" % i, "13000") logging.info("Processing ATLAS_2016_CONF_2016_092") for i in range(1,7) : mergeByPt("/ATLAS_2016_CONF_2016_092/d%02d-x01-y01" % i, "13000") logging.info("Processing ATLAS_2017_I1609253") useOnePt( "/ATLAS_2017_I1609253/d01-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d02-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d03-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d04-x01-y01", "8000", "260" ) useOnePt( "/ATLAS_2017_I1609253/d05-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d06-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d07-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d08-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d09-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d10-x01-y01", "8000", "400" ) useOnePt( "/ATLAS_2017_I1609253/d11-x01-y01", "8000", "600" ) useOnePt( "/ATLAS_2017_I1609253/d12-x01-y01", "8000", "600" ) +logging.info("Processing CMS_2016_I1487277") +mergeByPt("/CMS_2016_I1487277/d01-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d02-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d03-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d04-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d05-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d06-x01-y01", "8000") +mergeByPt("/CMS_2016_I1487277/d07-x01-y01", "8000") + +logging.info("Processing CMS_2016_I1421646") +useOnePt( "/CMS_2016_I1421646/d01-x01-y01", "8000", "210" ) +useOnePt( "/CMS_2016_I1421646/d02-x01-y01", "8000", "260" ) +useOnePt( "/CMS_2016_I1421646/d03-x01-y01", "8000", "400" ) +useOnePt( "/CMS_2016_I1421646/d04-x01-y01", "8000", "400" ) +useOnePt( "/CMS_2016_I1421646/d05-x01-y01", "8000", "600" ) +useOnePt( "/CMS_2016_I1421646/d06-x01-y01", "8000", "900" ) +useOnePt( "/CMS_2016_I1421646/d07-x01-y01", "8000", "900" ) + # Choose output file name = args[0]+"-Jets.yoda" yoda.writeYODA(outhistos,name) sys.exit(0) diff --git a/Tests/python/merge-LHC-Photon b/Tests/python/merge-LHC-Photon --- a/Tests/python/merge-LHC-Photon +++ b/Tests/python/merge-LHC-Photon @@ -1,275 +1,288 @@ #! /usr/bin/env python import logging import sys import os, yoda """%prog Script for merging aida files """ def fillAbove(scale,desthisto, sourcehistosbyptmin): pthigh= 1e100 ptlow =-1e100 for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints) : xMin = h.points[i].x-h.points[i].xErrs.minus if( xMin*scale >= ptlow and xMin*scale < pthigh ) : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin*scale >= ptlow and h.bins[i].xMin*scale < pthigh ) : desthisto.bins[i] += h.bins[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin*scale >= ptlow and h.bins[i].xMin*scale < pthigh ) : desthisto.bins[i] += h.bins[i] else : logging.error("Can't merge %s, unknown type" % desthisto.path) sys.exit(1) pthigh=pt def mergeByPt(hpath, scale=1.): global inhistos global outhistos try: fillAbove(scale,outhistos[hpath], inhistos[hpath]) except: pass def useOnePt(hpath, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][closest_ptmin] except: pass if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog aidafile aidafile2 [...]") parser.add_option("-o", "--out", dest="OUTFILE", default="-") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) files=["-7-PromptPhoton-1.yoda","-7-PromptPhoton-2.yoda", "-7-PromptPhoton-3.yoda","-7-PromptPhoton-4.yoda", "-8-PromptPhoton-1.yoda","-8-PromptPhoton-2.yoda", "-8-PromptPhoton-3.yoda","-8-PromptPhoton-4.yoda", "-7-DiPhoton-GammaGamma.yoda","-7-DiPhoton-GammaJet.yoda","-GammaGamma-7.yoda", "-8-DiPhoton-GammaGamma.yoda","-8-DiPhoton-GammaJet.yoda","-GammaGamma-8.yoda"] ## Get histos inhistos = {} outhistos={} for f in files: file='Rivet-'+args[0]+f if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as XML" % file) break if(file.find("PromptPhoton")>=0) : if(file.find("PromptPhoton-1")>0) : ptmin=0. elif(file.find("PromptPhoton-2")>0) : ptmin=35. elif(file.find("PromptPhoton-3")>0) : ptmin=90. elif(file.find("PromptPhoton-4")>0) : ptmin=170. ## Get histos from this YODA file for aopath, ao in aos.iteritems() : if not inhistos.has_key(aopath): inhistos[aopath] = {} if (aopath.find("CMS_2013_I1258128")>0) : if(aopath.find("d05")>0 or aopath.find("d06")>0 or aopath.find("d07")>0 or aopath.find("d08")>0) : inhistos[aopath][ptmin] = ao else : inhistos[aopath][ptmin] = ao else : ## Get histos from this YODA file for aopath, ao in aos.iteritems() : if(aopath.find("XSEC")>=0 or aopath.find("EVTCOUNT")>=0) : continue - print aopath if ( aopath in outhistos ) : aotype = type(ao) if aotype in (yoda.Counter, yoda.Histo1D, yoda.Histo2D, yoda.Profile1D, yoda.Profile2D): outhistos[aopath] += ao else : quit() else: outhistos[aopath] = ao for hpath,hsets in inhistos.iteritems(): - if( hpath.find("1263495")>0 or - hpath.find("1093738")>0 or - hpath.find("921594")>0 or - hpath.find("8914702")>0 or - hpath.find("1244522")>0 or - hpath.find("1457605")>0 ) : + if( hpath.find("1263495")>0 or hpath.find("1093738")>0 or + hpath.find("921594" )>0 or hpath.find("8914702")>0 or + hpath.find("1244522")>0 or hpath.find("1457605")>0 or + hpath.find("1632756")>0 or hpath.find("1266056")>0 ) : if(type(hsets.values()[0])==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].path, hsets.values()[0].title) elif(type(hsets.values()[0])==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].path, hsets.values()[0].title) for i in range(0,hsets.values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, hsets.values()[0].bins[i].xMax) elif(type(hsets.values()[0])==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].path, hsets.values()[0].title) for i in range(0,hsets.values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].bins[i].xMin, hsets.values()[0].bins[i].xMax) else : logging.error("Histogram %s is of unknown type" % hpath) print hpath,type(hsets.values()[0]) sys.exit(1) logging.info("Processing ATLAS_2013_I1263495") mergeByPt("/ATLAS_2013_I1263495/d01-x01-y01") mergeByPt("/ATLAS_2013_I1263495/d01-x01-y03") useOnePt("/ATLAS_2013_I1263495/d01-x02-y01", "90" ) logging.info("Processing ATLAS_2012_I1093738") mergeByPt("/ATLAS_2012_I1093738/d01-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d02-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d03-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d04-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d05-x01-y01") mergeByPt("/ATLAS_2012_I1093738/d06-x01-y01") logging.info("Processing ATLAS_2011_I921594") mergeByPt("/ATLAS_2011_I921594/d01-x01-y01") mergeByPt("/ATLAS_2011_I921594/d01-x01-y02") mergeByPt("/ATLAS_2011_I921594/d01-x01-y04") mergeByPt("/ATLAS_2011_I921594/d01-x01-y05") logging.info("Processing ATLAS_2010_S8914702") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y01") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y02") mergeByPt("/ATLAS_2010_S8914702/d01-x01-y03") logging.info("Processing CMS_2013_I1258128") useOnePt("/CMS_2013_I1258128/d05-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d06-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d07-x01-y01", "35" ) useOnePt("/CMS_2013_I1258128/d08-x01-y01", "35" ) logging.info("Processing ATLAS_2013_I1244522") mergeByPt("/ATLAS_2013_I1244522/d01-x01-y01") mergeByPt("/ATLAS_2013_I1244522/d02-x01-y01") useOnePt("/ATLAS_2013_I1244522/d03-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d04-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d05-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d06-x01-y01", "35" ) useOnePt("/ATLAS_2013_I1244522/d07-x01-y01", "35" ) logging.info("Processing ATLAS_2016_I1457605") mergeByPt("/ATLAS_2016_I1457605/d01-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d02-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d03-x01-y01") mergeByPt("/ATLAS_2016_I1457605/d04-x01-y01") +logging.info("Processing ATLAS_2017_I1632756") +mergeByPt("/ATLAS_2017_I1632756/d02-x01-y01") +mergeByPt("/ATLAS_2017_I1632756/d03-x01-y01") +mergeByPt("/ATLAS_2017_I1632756/d04-x01-y01") +mergeByPt("/ATLAS_2017_I1632756/d05-x01-y01") + +logging.info("Processing CMS_2014_I1266056") +mergeByPt("/CMS_2014_I1266056/d01-x01-y01") +mergeByPt("/CMS_2014_I1266056/d01-x01-y02") +mergeByPt("/CMS_2014_I1266056/d02-x01-y01") +mergeByPt("/CMS_2014_I1266056/d02-x01-y02") +mergeByPt("/CMS_2014_I1266056/d03-x01-y01") +mergeByPt("/CMS_2014_I1266056/d03-x01-y02") +mergeByPt("/CMS_2014_I1266056/d04-x01-y01") +mergeByPt("/CMS_2014_I1266056/d04-x01-y02") + logging.info("Processing /MC_PHOTONJETS") useOnePt("/MC_PHOTONJETS/jet_HT","0") useOnePt("/MC_PHOTONJETS/jet_eta_1","0") useOnePt("/MC_PHOTONJETS/jet_eta_2","0") useOnePt("/MC_PHOTONJETS/jet_eta_3","0") useOnePt("/MC_PHOTONJETS/jet_eta_4","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_1","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_2","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_3","0") useOnePt("/MC_PHOTONJETS/jet_eta_pmratio_4","0") useOnePt("/MC_PHOTONJETS/jet_mass_1","0") useOnePt("/MC_PHOTONJETS/jet_mass_2","0") useOnePt("/MC_PHOTONJETS/jet_mass_3","0") useOnePt("/MC_PHOTONJETS/jet_mass_4","0") useOnePt("/MC_PHOTONJETS/jet_multi_exclusive","0") useOnePt("/MC_PHOTONJETS/jet_multi_inclusive","0") useOnePt("/MC_PHOTONJETS/jet_multi_ratio","0") useOnePt("/MC_PHOTONJETS/jet_pT_1","0") useOnePt("/MC_PHOTONJETS/jet_pT_2","0") useOnePt("/MC_PHOTONJETS/jet_pT_3","0") useOnePt("/MC_PHOTONJETS/jet_pT_4","0") useOnePt("/MC_PHOTONJETS/jet_y_1","0") useOnePt("/MC_PHOTONJETS/jet_y_2","0") useOnePt("/MC_PHOTONJETS/jet_y_3","0") useOnePt("/MC_PHOTONJETS/jet_y_4","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_1","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_2","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_3","0") useOnePt("/MC_PHOTONJETS/jet_y_pmratio_4","0") useOnePt("/MC_PHOTONJETS/jets_dR_12","0") useOnePt("/MC_PHOTONJETS/jets_dR_13","0") useOnePt("/MC_PHOTONJETS/jets_dR_23","0") useOnePt("/MC_PHOTONJETS/jets_deta_12","0") useOnePt("/MC_PHOTONJETS/jets_deta_13","0") useOnePt("/MC_PHOTONJETS/jets_deta_23","0") useOnePt("/MC_PHOTONJETS/jets_dphi_12","0") useOnePt("/MC_PHOTONJETS/jets_dphi_13","0") useOnePt("/MC_PHOTONJETS/jets_dphi_23","0") useOnePt("/MC_PHOTONJETS/photon_jet1_dR","0") useOnePt("/MC_PHOTONJETS/photon_jet1_deta","0") useOnePt("/MC_PHOTONJETS/photon_jet1_dphi","0") useOnePt("/MC_PHOTONJETUE/gammajet-dR","0") useOnePt("/MC_PHOTONJETUE/gammajet-dphi","0") useOnePt("/MC_PHOTONJETUE/trans-maxnchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-maxnchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-maxptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-maxptsum-jet","0") useOnePt("/MC_PHOTONJETUE/trans-minnchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-minnchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-minptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-minptsum-jet","0") useOnePt("/MC_PHOTONJETUE/trans-nchg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-nchg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-ptavg-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-ptavg-jet","0") useOnePt("/MC_PHOTONJETUE/trans-ptsum-gamma","0") useOnePt("/MC_PHOTONJETUE/trans-ptsum-jet","0") # Choose output file yoda.writeYODA(outhistos,opts.OUTFILE) sys.exit(0) diff --git a/Tests/python/merge-TVT-Jets b/Tests/python/merge-TVT-Jets --- a/Tests/python/merge-TVT-Jets +++ b/Tests/python/merge-TVT-Jets @@ -1,547 +1,557 @@ #! /usr/bin/env python import logging import sys if sys.version_info[:3] < (2,4,0): print "rivet scripts require Python version >= 2.4.0... exiting" sys.exit(1) import os, yoda # ############################################# def fillAbove(desthisto, sourcehistosbyptmin): pthigh= 1e100 ptlow =-1e100 for pt, h in sorted(sourcehistosbyptmin.iteritems(),reverse=True): ptlow=pt if(type(desthisto)==yoda.core.Scatter2D) : for i in range(0,h.numPoints) : xMin = h.points[i].x-h.points[i].xErrs.minus if( xMin >= ptlow and xMin < pthigh ) : desthisto.addPoint(h.points[i]) elif(type(desthisto)==yoda.core.Profile1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin >= ptlow and h.bins[i].xMin < pthigh ) : desthisto.bins[i] += h.bins[i] elif(type(desthisto)==yoda.core.Histo1D) : for i in range(0,h.numBins) : if(h.bins[i].xMin >= ptlow and h.bins[i].xMin < pthigh ) : desthisto.bins[i] += h.bins[i] elif(type(desthisto)==yoda.core.Counter) : desthisto += h else : logging.error("Can't merge %s, unknown type" % desthisto.path) sys.exit(1) pthigh=pt def mergeByPt(hpath, sqrts): global inhistos global outhistos try: fillAbove(outhistos[hpath], inhistos[hpath][float(sqrts)]) except: pass def useOnePt(hpath, sqrts, ptmin): global inhistos global outhistos try: ## Find best pT_min match ptmins = inhistos[hpath][float(sqrts)].keys() closest_ptmin = None for ptm in ptmins: if closest_ptmin is None or \ abs(ptm-float(ptmin)) < abs(closest_ptmin-float(ptmin)): closest_ptmin = ptm if closest_ptmin != float(ptmin): logging.warning("Inexact match for requested pTmin=%s: " % ptmin + \ "using pTmin=%e instead" % closest_ptmin) outhistos[hpath] = inhistos[hpath][float(sqrts)][closest_ptmin] except: pass # ####################################### if __name__ == "__main__": import logging from optparse import OptionParser, OptionGroup parser = OptionParser(usage="%prog name") verbgroup = OptionGroup(parser, "Verbosity control") verbgroup.add_option("-v", "--verbose", action="store_const", const=logging.DEBUG, dest="LOGLEVEL", default=logging.INFO, help="print debug (very verbose) messages") verbgroup.add_option("-q", "--quiet", action="store_const", const=logging.WARNING, dest="LOGLEVEL", default=logging.INFO, help="be very quiet") parser.add_option("--with-ue", action='store_true' , dest="ue", default=True, help="Include UE analyses") parser.add_option("--without-ue", action='store_false', dest="ue", default=True, help="Don\'t include UE analyses") parser.add_option_group(verbgroup) (opts, args) = parser.parse_args() logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") ## Check args if len(args) < 1: logging.error("Must specify at least the name of the files") sys.exit(1) yodafiles=["-Run-II-Jets-0.yoda","-Run-II-Jets-1.yoda",\ "-Run-II-Jets-2.yoda",\ "-Run-II-Jets-3.yoda","-Run-II-Jets-4.yoda","-Run-II-Jets-5.yoda",\ "-Run-II-Jets-6.yoda","-Run-II-Jets-7.yoda",\ "-Run-I-Jets-1.yoda","-Run-I-Jets-2.yoda",\ "-Run-I-Jets-3.yoda","-Run-I-Jets-4.yoda","-Run-I-Jets-5.yoda",\ "-630-Jets-1.yoda" ,"-630-Jets-2.yoda" ,\ "-630-Jets-3.yoda", "-300-UE.yoda", "-900-UE.yoda" # "-RatioPlots.yoda" ] if(opts.ue) : yodafiles += ["-Run-II-UE.yoda" ,"-Run-I-UE.yoda" ,"-630-UE.yoda" ,] ## Get histos inhistos = {} outhistos={} for f in yodafiles: file='Rivet-'+args[0]+f if(file.find("Run-II-UE")>0) : sqrts=1960 ptmin=0. elif(file.find("Run-II-Jets-0")>0) : sqrts=1960 ptmin=20. elif(file.find("Run-II-Jets-1")>0) : sqrts=1960 ptmin=36. elif(file.find("Run-II-Jets-2")>0) : sqrts=1960 ptmin=55. elif(file.find("Run-II-Jets-3")>0) : sqrts=1960 ptmin=75. elif(file.find("Run-II-Jets-4")>0) : sqrts=1960 ptmin=100. elif(file.find("Run-II-Jets-5")>0) : sqrts=1960 ptmin=125. elif(file.find("Run-II-Jets-6")>0) : ptmin=175. sqrts=1960 elif(file.find("Run-II-Jets-7")>0) : sqrts=1960 ptmin=265. elif(file.find("300-UE")>0) : sqrts=300 ptmin=0. elif(file.find("900-UE")>0) : sqrts=900 ptmin=0. elif(file.find("630-UE")>0) : sqrts=630 ptmin=0. elif(file.find("630-Jets-1")>0) : sqrts=630 ptmin=30. elif(file.find("630-Jets-2")>0) : sqrts=630 ptmin=55. elif(file.find("630-Jets-3")>0) : sqrts=630 ptmin=90. elif(file.find("Run-I-UE")>0) : sqrts=1800 ptmin=0. elif(file.find("Run-I-Jets-1")>0) : sqrts=1800 ptmin=30. elif(file.find("Run-I-Jets-2")>0) : sqrts=1800 ptmin=55. elif(file.find("Run-I-Jets-3")>0) : sqrts=1800 ptmin=80. elif(file.find("Run-I-Jets-4")>0) : sqrts=1800 ptmin=105. elif(file.find("Run-I-Jets-5")>0) : sqrts=1800 ptmin=175. if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this YODA file for aopath, ao in aos.iteritems() : # di-jet decorrelations # jet shapes if(aopath.find("5992206")>0 or aopath.find("6217184")>0 or aopath.find("LEADINGJETS")>0 or aopath.find("7662670")>0 or aopath.find("7057202")>0 or aopath.find("6450792")>0 or aopath.find("7828950")>0 or aopath.find("4751469")>0 or aopath.find("5839831")>0 or aopath.find("4563131")>0 or aopath.find("4517016")>0 or aopath.find("3618439")>0 or - aopath.find("8591881")>0 or aopath.find("1388868")>0) : + aopath.find("8591881")>0 or aopath.find("1388868")>0 or + aopath.find("398175")>0) : if not inhistos.has_key(aopath): inhistos[aopath] = {} tmpE = inhistos[aopath] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} tmpP = tmpE[sqrts] if not tmpP.has_key(ptmin): tmpP[ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( ptmin)) elif(aopath.find("8233977")>0 or aopath.find("NOTE_9936")>0 or aopath.find("3905616")>0 or aopath.find("3324664")>0 or aopath.find("4796047")>0 or aopath.find("1865951")>0 or aopath.find("2089246")>0 or aopath.find("3108457")>0 or aopath.find("3349578")>0 or aopath.find("3541940")>0 or aopath.find("3214044")>0 or aopath.find("2952106")>0 or aopath.find("NOTE10874")>0 or aopath.find("895662")>0 ) : if( opts.ue ) : outhistos[aopath] = ao elif (aopath.find("NOTE10874")<0) : outhistos[aopath] = ao else : if(aopath.find("/_EVTCOUNT")>=0 or aopath.find("/_XSEC" )>=0 ) : continue print aopath quit() yodafiles=["-Run-II-Jets-8.yoda","-Run-II-Jets-9.yoda","-Run-II-Jets-10.yoda","-Run-II-Jets-11.yoda",\ "-Run-I-Jets-6.yoda","-Run-I-Jets-7.yoda","-Run-I-Jets-8.yoda"] for f in yodafiles: file='Rivet-'+args[0]+f if(file.find("Run-II-Jets-8")>0) : sqrts=1960 ptmin=0.150 elif(file.find("Run-II-Jets-9")>0) : sqrts=1960 ptmin=0.400 elif(file.find("Run-II-Jets-10")>0) : sqrts=1960 ptmin=0.600 elif(file.find("Run-II-Jets-11")>0) : sqrts=1960 ptmin=1.000 elif(file.find("Run-I-Jets-6")>0) : sqrts=1800 ptmin=0.150 elif(file.find("Run-I-Jets-7")>0) : sqrts=1800 ptmin=0.5 elif(file.find("Run-I-Jets-8")>0) : sqrts=1800 ptmin=0.8 if not os.access(file, os.R_OK): logging.error("%s can not be read" % file) continue try: aos = yoda.read(file) except: logging.error("%s can not be parsed as YODA" % file) continue ## Get histos from this AIDA file for aopath, ao in aos.iteritems() : if(aopath.find("8566488")>0 or aopath.find("8320160")>0) : if not inhistos.has_key(aopath): inhistos[aopath] = {} tmpE = inhistos[aopath] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} tmpP = tmpE[sqrts] if not tmpP.has_key(ptmin): tmpP[ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( ptmin)) elif(aopath.find("8093652")>0 or aopath.find("3418421")>0 or aopath.find("4266730")>0) : if not inhistos.has_key(aopath): inhistos[aopath] = {} tmpE = inhistos[aopath] if not tmpE.has_key(sqrts): tmpE[sqrts] = {} tmpP = tmpE[sqrts] if not tmpP.has_key(1000.*ptmin): tmpP[1000.*ptmin] = ao else: raise Exception("A set with ptmin = %s already exists" % ( 1000.*ptmin)) ## Make empty output histos if needed for hpath,hsets in inhistos.iteritems(): if( (hpath.find("6217184")>0 and hpath.find("d13-x01-y01")>0 ) or hpath.find("LEADINGJETS")>0 or hpath.find("7662670")>0 or hpath.find("7057202")>0 or hpath.find("6450792")>0 or hpath.find("7828950")>0 or hpath.find("8566488")>0 or hpath.find("8320160")>0 or hpath.find("8093652")>0 or hpath.find("4751469")>0 or hpath.find("5839831")>0 or hpath.find("4563131")>0 or hpath.find("4517016")>0 or hpath.find("3618439")>0 or hpath.find("4266730")>0 or hpath.find("3418421")>0 or hpath.find("8591881")>0 or hpath.find("1388868")>0) : if(type(hsets.values()[0].values()[0])==yoda.core.Counter) : outhistos[hpath] = yoda.core.Counter(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Scatter2D) : outhistos[hpath] = yoda.core.Scatter2D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) elif(type(hsets.values()[0].values()[0])==yoda.core.Profile1D) : outhistos[hpath] = yoda.core.Profile1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) elif(type(hsets.values()[0].values()[0])==yoda.core.Histo1D) : outhistos[hpath] = yoda.core.Histo1D(hsets.values()[0].values()[0].path, hsets.values()[0].values()[0].title) for i in range(0,hsets.values()[0].values()[0].numBins) : outhistos[hpath].addBin(hsets.values()[0].values()[0].bins[i].xMin, hsets.values()[0].values()[0].bins[i].xMax) else : logging.error("Histogram %s is of unknown type" % hpath) print hpath,type(hsets.values()[0].values()[0]) sys.exit(1) ## Field analysis logging.info("Processing CDF_2001_S4751469") ## Angular distributions in different pT bins if(opts.ue) : useOnePt("/CDF_2001_S4751469/d01-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d02-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d01-x01-y03", "1800", "30") useOnePt("/CDF_2001_S4751469/d02-x01-y03", "1800", "30") ## Number, profile in pT_lead (True?) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d03-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d03-x01-y03", "1800", "0") useOnePt("/CDF_2001_S4751469/d04-x01-y01", "1800", "30") useOnePt("/CDF_2001_S4751469/d04-x01-y02", "1800", "30") useOnePt("/CDF_2001_S4751469/d04-x01-y03", "1800", "30") ## pT sums, profile in pT_lead (True?) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d05-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d05-x01-y03", "1800", "0") useOnePt("/CDF_2001_S4751469/d06-x01-y01", "1800", "30") useOnePt("/CDF_2001_S4751469/d06-x01-y02", "1800", "30") useOnePt("/CDF_2001_S4751469/d06-x01-y03", "1800", "30") ## pT distributions (use a specific pT cut run) if(opts.ue) : useOnePt("/CDF_2001_S4751469/d07-x01-y01", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y02", "1800", "0") useOnePt("/CDF_2001_S4751469/d07-x01-y03", "1800", "30") ## Acosta analysis logging.info("Processing CDF_2004_S5839831") ## Mean pT, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d01-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d01-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d02-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y02", "1800") mergeByPt("/CDF_2004_S5839831/d02-x01-y03", "1800") ## pT distributions (want to use a specific pT cut run) useOnePt("/CDF_2004_S5839831/d03-x01-y01", "1800", "30") useOnePt("/CDF_2004_S5839831/d03-x01-y02", "1800", "80") useOnePt("/CDF_2004_S5839831/d03-x01-y03", "1800", "105") useOnePt("/CDF_2004_S5839831/d03-x01-y04", "1800", "105") useOnePt("/CDF_2004_S5839831/d03-x01-y05", "1800", "175") ## N_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d04-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d04-x01-y02", "1800") ## Min bias dbs (want to use min bias pT cut) if(opts.ue) : useOnePt("/CDF_2004_S5839831/d05-x01-y01", "1800", "0") useOnePt("/CDF_2004_S5839831/d06-x01-y01", "1800", "0") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d07-x01-y01", "1800") mergeByPt("/CDF_2004_S5839831/d07-x01-y02", "1800") ## pT_max,min, profiles in ET_lead mergeByPt("/CDF_2004_S5839831/d08-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y02", "630") mergeByPt("/CDF_2004_S5839831/d08-x01-y03", "630") ## Swiss Cheese, profile in ET_lead mergeByPt("/CDF_2004_S5839831/d09-x01-y01", "630") mergeByPt("/CDF_2004_S5839831/d09-x01-y02", "630") ## Min bias dbs (want to use min bias pT cut) if(opts.ue) : useOnePt("/CDF_2004_S5839831/d10-x01-y01", "630", "0") useOnePt("/CDF_2004_S5839831/d11-x01-y01", "630", "0") ## CDF jet shape analysis logging.info("Processing CDF_2005_S6217184") useOnePt("/CDF_2005_S6217184/d01-x01-y01", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d01-x01-y02", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d01-x01-y03", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y01", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y02", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d02-x01-y03", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d03-x01-y01", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d03-x01-y02", "1960", "100") useOnePt("/CDF_2005_S6217184/d03-x01-y03", "1960", "100") useOnePt("/CDF_2005_S6217184/d04-x01-y01", "1960", "125") useOnePt("/CDF_2005_S6217184/d04-x01-y02", "1960", "125") useOnePt("/CDF_2005_S6217184/d04-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y01", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y02", "1960", "175") useOnePt("/CDF_2005_S6217184/d05-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d06-x01-y01", "1960", "265") useOnePt("/CDF_2005_S6217184/d06-x01-y02", "1960", "265") useOnePt("/CDF_2005_S6217184/d06-x01-y03", "1960", "265") useOnePt("/CDF_2005_S6217184/d07-x01-y01", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d07-x01-y02", "1960", "36" ) useOnePt("/CDF_2005_S6217184/d07-x01-y03", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y01", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y02", "1960", "55" ) useOnePt("/CDF_2005_S6217184/d08-x01-y03", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d09-x01-y01", "1960", "75" ) useOnePt("/CDF_2005_S6217184/d09-x01-y02", "1960", "100") useOnePt("/CDF_2005_S6217184/d09-x01-y03", "1960", "100") useOnePt("/CDF_2005_S6217184/d10-x01-y01", "1960", "125") useOnePt("/CDF_2005_S6217184/d10-x01-y02", "1960", "125") useOnePt("/CDF_2005_S6217184/d10-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y01", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y02", "1960", "175") useOnePt("/CDF_2005_S6217184/d11-x01-y03", "1960", "175") useOnePt("/CDF_2005_S6217184/d12-x01-y01", "1960", "265") useOnePt("/CDF_2005_S6217184/d12-x01-y02", "1960", "265") useOnePt("/CDF_2005_S6217184/d12-x01-y03", "1960", "265") mergeByPt("/CDF_2005_S6217184/d13-x01-y01", "1960") # ## CDF dijet mass spectrum mergeByPt("/CDF_2008_S8093652/d01-x01-y01", "1960") # ## Rick Field Run-II Leading Jets analysis # logging.info("Processing CDF_2008_LEADINGJETS") # ## charged particle density # mergeByPt("/CDF_2008_LEADINGJETS/d01-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d02-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d03-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d04-x01-y01", "1960") # ## pT sum density # mergeByPt("/CDF_2008_LEADINGJETS/d05-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d06-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d07-x01-y01", "1960") # mergeByPt("/CDF_2008_LEADINGJETS/d08-x01-y01", "1960") # ## mean pT # mergeByPt("/CDF_2008_LEADINGJETS/d09-x01-y01", "1960") ## newer version logging.info("Processing CDF_2010_S8591881_QCD") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d10-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d11-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d12-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y02", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d13-x01-y03", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d14-x01-y01", "1960") mergeByPt("/CDF_2010_S8591881_QCD/d15-x01-y01", "1960") ## D0 dijet correlation analysis logging.info("Processing D0_2004_S5992206") useOnePt("/D0_2004_S5992206/d01-x02-y01", "1960", "75") useOnePt("/D0_2004_S5992206/d02-x02-y01", "1960", "100") useOnePt("/D0_2004_S5992206/d03-x02-y01", "1960", "125") useOnePt("/D0_2004_S5992206/d04-x02-y01", "1960", "175") ## D0 incl jet cross-section analysis logging.info("Processing D0_2008_S7662670") mergeByPt("/D0_2008_S7662670/d01-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d02-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d03-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d04-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d05-x01-y01", "1960") mergeByPt("/D0_2008_S7662670/d06-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d01-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d02-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d03-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d04-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d05-x01-y01", "1960") mergeByPt("/D0_2010_S8566488/d06-x01-y01", "1960") # CDF jet cross section mergeByPt("/CDF_2001_S4563131/d01-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d01-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d02-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d03-x01-y01", "1800") mergeByPt("/CDF_2001_S4517016/d04-x01-y01", "1800") useOnePt("/CDF_1998_S3618439/d01-x01-y01", "1800","105") useOnePt("/CDF_1998_S3618439/d01-x01-y02", "1800","105") mergeByPt("/CDF_2008_S7828950/d01-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d02-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d03-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d04-x01-y01", "1960") mergeByPt("/CDF_2008_S7828950/d05-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d01-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d02-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d03-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d04-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d05-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d06-x01-y01", "1960") mergeByPt("/CDF_2007_S7057202/d07-x01-y01", "1960") mergeByPt("/CDF_2006_S6450792/d01-x01-y01", "1960") mergeByPt("/CDF_2000_S4266730/d01-x01-y01", "1800") useOnePt("/CDF_1996_S3418421/d01-x01-y01","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y02","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y03","1800","150") useOnePt("/CDF_1996_S3418421/d01-x01-y04","1800","500") useOnePt("/CDF_1996_S3418421/d01-x01-y05","1800","500") mergeByPt("/CDF_1996_S3418421/d02-x01-y01","1800") useOnePt("/D0_2009_S8320160/d01-x01-y01", "1960", "0.15" ) useOnePt("/D0_2009_S8320160/d02-x01-y01", "1960", "0.15" ) useOnePt("/D0_2009_S8320160/d03-x01-y01", "1960", "0.4" ) useOnePt("/D0_2009_S8320160/d04-x01-y01", "1960", "0.4" ) useOnePt("/D0_2009_S8320160/d05-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d06-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d07-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d08-x01-y01", "1960", "0.6" ) useOnePt("/D0_2009_S8320160/d09-x01-y01", "1960", "1.0" ) useOnePt("/D0_2009_S8320160/d10-x01-y01", "1960", "1.0" ) logging.info("Processing CDF_2015_I1388868") for d in range(1,4) : if d == 1 : energy="1960" elif d ==2 : energy = "900" elif d==3 : energy = "300" for y in [1,2,3,4,6,7,8,9]: useOnePt("/CDF_2015_I1388868/d0%s-x01-y0%s" % (d,y) , energy, "0" ) +# D0 jet shape +logging.info("Processing D0_1995_I398175") +useOnePt("/D0_1995_I398175/d01-x01-y01", "1800", "30" ) +useOnePt("/D0_1995_I398175/d02-x01-y01", "1800", "55" ) +useOnePt("/D0_1995_I398175/d03-x01-y01", "1800", "105" ) +useOnePt("/D0_1995_I398175/d04-x01-y01", "1800", "105" ) +useOnePt("/D0_1995_I398175/d05-x01-y01", "1800", "30" ) +useOnePt("/D0_1995_I398175/d06-x01-y01", "1800", "55" ) + # Choose output file name = args[0]+"-Jets.yoda" yoda.writeYODA(outhistos,name) sys.exit(0)