diff --git a/AtlasGeometryCommon/SubDetectorEnvelopes/SubDetectorEnvelopes/ATLAS_CHECK_THREAD_SAFETY b/AtlasGeometryCommon/SubDetectorEnvelopes/SubDetectorEnvelopes/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..899bd7e08582e4aed2e761f20c7470c507d7d3d0 --- /dev/null +++ b/AtlasGeometryCommon/SubDetectorEnvelopes/SubDetectorEnvelopes/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +AtlasGeometryCommon/SubDetectorEnvelopes diff --git a/Control/AthAnalysisBaseComps/AthAnalysisBaseComps/AthAnalysisHelper.h b/Control/AthAnalysisBaseComps/AthAnalysisBaseComps/AthAnalysisHelper.h index 18ee0c47274d38efa8e4c3b5b5fa94101cc2d528..51707fde53be472c6cecd887d922ccb3c1e8acd2 100644 --- a/Control/AthAnalysisBaseComps/AthAnalysisBaseComps/AthAnalysisHelper.h +++ b/Control/AthAnalysisBaseComps/AthAnalysisBaseComps/AthAnalysisHelper.h @@ -1,7 +1,7 @@ ///////////////////////// -*- C++ -*- ///////////////////////////// /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // AthAnalysisHelper.h @@ -16,7 +16,7 @@ #include "StoreGate/StoreGateSvc.h" #include "GaudiKernel/ServiceHandle.h" -#include "GaudiKernel/IJobOptionsSvc.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/IToolSvc.h" #include "IOVDbDataModel/IOVMetaDataContainer.h" @@ -45,7 +45,7 @@ public: ///helper method for adding a property to the JobOptionsSvc ///to list all the properties in the catalogue, do: AthAnalysisHelper::dumpJobOptionProperties() template<typename W> static StatusCode addPropertyToCatalogue( const std::string& name , const std::string& property, const W& value, bool override=true) { - ServiceHandle<IJobOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); if(joSvc.retrieve().isFailure()) return StatusCode::FAILURE; if(!override) { //check if property already defined. If so, then print a warning and return failure @@ -55,9 +55,8 @@ public: return StatusCode::FAILURE; } } - StatusCode result = joSvc->addPropertyToCatalogue( name , StringProperty( property , Gaudi::Utils::toString ( value ) ) ); - if(joSvc.release().isFailure()) return StatusCode::FAILURE; - return result; + joSvc->set( name+"."+property , Gaudi::Utils::toString ( value ) ); + return StatusCode::SUCCESS; } @@ -367,7 +366,7 @@ public: ///we keep a static handle to the joboptionsvc, since it's very useful ///can e.g. do: AAH::joSvc->readOptions("myJob.opts","$JOBOPTSEARCHPATH") - static ServiceHandle<IJobOptionsSvc> joSvc; + static ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc; }; //AthAnalysisHelper class diff --git a/Control/AthAnalysisBaseComps/src/AthAnalysisHelper.cxx b/Control/AthAnalysisBaseComps/src/AthAnalysisHelper.cxx index 295ec0ace295b3ed2a1d76d174f4e473bb126806..4d27d5f130b5124b73518fe68d1ac81aeb042024 100644 --- a/Control/AthAnalysisBaseComps/src/AthAnalysisHelper.cxx +++ b/Control/AthAnalysisBaseComps/src/AthAnalysisHelper.cxx @@ -8,7 +8,7 @@ const std::string AthAnalysisHelper::UNDEFINED = "__UNDEFINED__"; -ServiceHandle<IJobOptionsSvc> AthAnalysisHelper::joSvc = ServiceHandle<IJobOptionsSvc>("JobOptionsSvc","AthAnalysisHelper"); +ServiceHandle<Gaudi::Interfaces::IOptionsSvc> AthAnalysisHelper::joSvc = ServiceHandle<Gaudi::Interfaces::IOptionsSvc>("JobOptionsSvc","AthAnalysisHelper"); //need a constructor, implemented here, so that the dictionary library is linked to //the implementation library (see ldd libAthAnalysisBaseCompsDict.so ... needs a link) @@ -49,32 +49,18 @@ bool AthAnalysisHelper::toolExists( const std::string& fullName ) { } void AthAnalysisHelper::dumpJobOptionProperties(const std::string& client) { - ServiceHandle<IJobOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); if(joSvc.retrieve().isFailure()) return; - std::vector<std::string> clients = joSvc->getClients(); - for(auto& cl : clients) { - if(cl.find(client)!=0) continue; //must start with client - auto props = joSvc->getProperties(cl); - if(!props) continue; - for(auto prop : *props) { - std::cout << cl << "." << prop->name() << " = " << prop->toString() << std::endl; - } + for(const auto& [name,value] : joSvc->items()) { + if(name.find(client)!=0) continue; //must start with client + std::cout << name << " = " << value << std::endl; } - joSvc.release().ignore(); } std::string AthAnalysisHelper::getProperty(const std::string& client, const std::string& property) { - std::string out(UNDEFINED); - ServiceHandle<IJobOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); - if(joSvc.retrieve().isFailure()) return out; - auto props = joSvc->getProperties(client); - if(!props) { joSvc.release().ignore(); return out; } - for(auto prop : *props) { - if(prop->name()!=property) continue; - out = prop->toString(); break; - } - joSvc.release().ignore(); - return out; + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc","AthAnalysisHelper"); + if(joSvc.retrieve().isFailure()) return UNDEFINED; + return joSvc->get(client+"."+property, UNDEFINED); } void AthAnalysisHelper::printAuxElement(const SG::AuxElement& ae) { diff --git a/Control/AthenaIPCTools/src/AthenaSharedWriter.cxx b/Control/AthenaIPCTools/src/AthenaSharedWriter.cxx index 74b6027d7e1ef6cfcf6eb94c34a983174f090a44..40c3d48b5e58cbd9faf3b8af4d7c35271283e4c7 100644 --- a/Control/AthenaIPCTools/src/AthenaSharedWriter.cxx +++ b/Control/AthenaIPCTools/src/AthenaSharedWriter.cxx @@ -31,6 +31,7 @@ StatusCode AthenaSharedWriter::initialize() { } // Initialize IAthenaSharedWriterSvc ATH_CHECK(m_sharedWriterSvc.retrieve()); + ATH_CHECK(m_sharedWriterSvc->share(m_numberOfClients.value())); return StatusCode::SUCCESS; } //___________________________________________________________________________ diff --git a/Control/AthenaKernel/AthenaKernel/IAthenaSharedWriterSvc.h b/Control/AthenaKernel/AthenaKernel/IAthenaSharedWriterSvc.h index 43200e7b0c31db6bc2b515522574ff029fb35bcb..e23bff389c06d1ca8fda664b398031e074a3622e 100644 --- a/Control/AthenaKernel/AthenaKernel/IAthenaSharedWriterSvc.h +++ b/Control/AthenaKernel/AthenaKernel/IAthenaSharedWriterSvc.h @@ -11,6 +11,9 @@ static const InterfaceID IID_IAthenaSharedWriterSvc( "IAthenaSharedWriterSvc", 1 class IAthenaSharedWriterSvc : virtual public ::IService { public: + virtual StatusCode share(int numClients = 0) = 0; + + /// Gaudi boilerplate static const InterfaceID& interfaceID() { return IID_IAthenaSharedWriterSvc; } }; diff --git a/Control/AthenaMPTools/src/SharedWriterTool.cxx b/Control/AthenaMPTools/src/SharedWriterTool.cxx index 4b743a02e58751a8ac09085961992a117d027962..5075d75ffd462636b6fe1c535c375a3b300952cf 100644 --- a/Control/AthenaMPTools/src/SharedWriterTool.cxx +++ b/Control/AthenaMPTools/src/SharedWriterTool.cxx @@ -243,6 +243,9 @@ std::unique_ptr<AthenaInterprocess::ScheduledWork> SharedWriterTool::exec_func() if(sc.isFailure() || sharedWriterSvc==0) { ATH_MSG_ERROR("Error retrieving AthenaRootSharedWriterSvc"); all_ok=false; + } else if(!sharedWriterSvc->share(m_nprocs).isSuccess()) { + ATH_MSG_ERROR("Exec function could not share data"); + all_ok=false; } AthCnvSvc* cnvSvc = dynamic_cast<AthCnvSvc*>(m_cnvSvc); if (cnvSvc == 0 || !cnvSvc->disconnectOutput("").isSuccess()) { diff --git a/Control/CxxUtils/CxxUtils/features.h b/Control/CxxUtils/CxxUtils/features.h index 8479f6df59b5fc53a17f1dd95f77ccb1258d5623..1e2fd23f40632cec669a5c86521015b3ca9a0c6b 100644 --- a/Control/CxxUtils/CxxUtils/features.h +++ b/Control/CxxUtils/CxxUtils/features.h @@ -58,9 +58,9 @@ // Do we have the vector_size attribute for writing explicitly // vectorized code? -#if (defined(__GNUC__) || defined(__clang__)) && !defined(__ICC) && \ - !defined(__COVERITY__) && !defined(__CUDACC__) -# define HAVE_VECTOR_SIZE_ATTRIBUTE 1 +#if (defined(__GNUC__) || defined(__clang__)) && !defined(__CLING__) && \ + !defined(__ICC) && !defined(__COVERITY__) && !defined(__CUDACC__) +#define HAVE_VECTOR_SIZE_ATTRIBUTE 1 #else # define HAVE_VECTOR_SIZE_ATTRIBUTE 0 #endif diff --git a/Control/StoreGate/share/VarHandleKeyProperty_test.ref b/Control/StoreGate/share/VarHandleKeyProperty_test.ref index 1b22aa09730067bba2ad0f36f363f741474526e3..d69edd2a444ef21ab4ef65fc990e94694478d3aa 100644 --- a/Control/StoreGate/share/VarHandleKeyProperty_test.ref +++ b/Control/StoreGate/share/VarHandleKeyProperty_test.ref @@ -28,4 +28,3 @@ test3 test4 test5 VarHandleKey::assign failure: SG::ExcBadHandleKey: Bad key format for VarHandleKey: `key "FooSvc+xxx/aaa": keys with "/" only allowed for ConditionStore - store is "FooSvc"' -JobOptionsSvc ERROR Unable to set the property 'k1' of 'test5'. Check option and algorithm names, type and bounds. diff --git a/Control/StoreGate/src/StoreGateSvc.cxx b/Control/StoreGate/src/StoreGateSvc.cxx index 91507770becab79731c512d00a7f63ebfa989bea..fd8834a00066b36b91ccf28982e31b59690ef05a 100644 --- a/Control/StoreGate/src/StoreGateSvc.cxx +++ b/Control/StoreGate/src/StoreGateSvc.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "GaudiKernel/IIncidentSvc.h" @@ -11,8 +11,8 @@ #include "StoreGate/ActiveStoreSvc.h" #include "StoreGate/tools/SGImplSvc.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/IAppMgrUI.h" -#include "GaudiKernel/IJobOptionsSvc.h" #include <fstream> #include <algorithm> @@ -124,21 +124,15 @@ StatusCode StoreGateSvc::initialize() { appmgr->queryInterface( IProperty::interfaceID(), (void**)&appmgrprop ).ignore(); //all of the above to get the jo svc type const Gaudi::Details::PropertyBase& prop = appmgrprop->getProperty( "JobOptionsSvcType" ); - IJobOptionsSvc* pJOSvc(0); + Gaudi::Interfaces::IOptionsSvc* pJOSvc(0); if ( serviceLocator()->service( prop.toString(), "JobOptionsSvc", pJOSvc ).isFailure() ) { error() << "Failed to retrieve JobOptionsSvc" << endmsg; } //copy our properties to the prototype (default) SGImplSvc - std::string implStoreName = name() + "_Impl"; - const std::vector<const Gaudi::Details::PropertyBase*>* props = pJOSvc->getProperties( name() ); - if ( props ) { - std::vector<const Gaudi::Details::PropertyBase*>::const_iterator prop(props->begin()); - std::vector<const Gaudi::Details::PropertyBase*>::const_iterator pEnd(props->end()); - while (prop != pEnd) { - pJOSvc->addPropertyToCatalogue( implStoreName, **prop ).ignore(); - ++prop; - } - } + const std::string implStoreName = name() + "_Impl"; + for (const Gaudi::Details::PropertyBase* p : getProperties()) { + pJOSvc->set( implStoreName + "." + p->name(), p->toString() ); + } pJOSvc->release(); pJOSvc=0; diff --git a/Control/StoreGate/test/VarHandleKeyProperty_test.cxx b/Control/StoreGate/test/VarHandleKeyProperty_test.cxx index b00304549bba12948bd21ab6ffa706a1d97fb064..78ac88046eeb1488d9d824ba41e91d35aa4d4d95 100644 --- a/Control/StoreGate/test/VarHandleKeyProperty_test.cxx +++ b/Control/StoreGate/test/VarHandleKeyProperty_test.cxx @@ -14,9 +14,9 @@ #include "StoreGate/exceptions.h" #include "TestTools/initGaudi.h" #include "TestTools/expect_exception.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/PropertyHolder.h" #include "GaudiKernel/IProperty.h" -#include "GaudiKernel/IJobOptionsSvc.h" #include "GaudiKernel/ServiceHandle.h" #include <cassert> #include <iostream> @@ -213,19 +213,22 @@ void test4() std::cout << "test4\n"; PropTest ptest; + std::vector<Gaudi::Details::PropertyBase*> props; SG::ReadHandleKey<MyObj> k1; - ptest.mgr.declareProperty ("k1", k1); + props.push_back(ptest.mgr.declareProperty ("k1", k1)); SG::WriteHandleKey<MyObj> k2; - ptest.mgr.declareProperty ("k2", k2); + props.push_back(ptest.mgr.declareProperty ("k2", k2)); SG::UpdateHandleKey<MyObj> k3; - ptest.mgr.declareProperty ("k3", k3); + props.push_back(ptest.mgr.declareProperty ("k3", k3)); SG::VarHandleKey k4 (1234, "", Gaudi::DataHandle::Reader); - ptest.mgr.declareProperty ("k4", k4); + props.push_back(ptest.mgr.declareProperty ("k4", k4)); - ServiceHandle<IJobOptionsSvc> jo ("JobOptionsSvc", "test"); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> jo ("JobOptionsSvc", "test"); assert (jo.retrieve().isSuccess()); - assert (jo->setMyProperties ("test4", &ptest).isSuccess()); + for (Gaudi::Details::PropertyBase* p : props) { + jo->bind ("test4", p); + } assert (k1.clid() == 293847295); assert (k1.key() == "aaa"); @@ -252,11 +255,11 @@ void test5() PropTest ptest; SG::ReadHandleKey<MyObj> k1; - ptest.mgr.declareProperty ("k1", k1); + Gaudi::Details::PropertyBase* pk1 = ptest.mgr.declareProperty ("k1", k1); - ServiceHandle<IJobOptionsSvc> jo ("JobOptionsSvc", "test"); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> jo ("JobOptionsSvc", "test"); assert (jo.retrieve().isSuccess()); - assert (jo->setMyProperties ("test5", &ptest).isFailure()); + jo->bind("test5", pk1); } diff --git a/Control/StoreGate/test/VarHandleProperty_test.cxx b/Control/StoreGate/test/VarHandleProperty_test.cxx index a170450a6520dae837bd564775f6363e30034215..9746c2cd7109f0efcdc88e60d4c56c5c89af3421 100644 --- a/Control/StoreGate/test/VarHandleProperty_test.cxx +++ b/Control/StoreGate/test/VarHandleProperty_test.cxx @@ -14,9 +14,9 @@ #include "StoreGate/exceptions.h" #include "TestTools/initGaudi.h" #include "TestTools/expect_exception.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/PropertyHolder.h" #include "GaudiKernel/IProperty.h" -#include "GaudiKernel/IJobOptionsSvc.h" #include "GaudiKernel/ServiceHandle.h" #include <cassert> #include <iostream> @@ -76,19 +76,22 @@ void test1() std::cout << "test1\n"; PropTest ptest; + std::vector<Gaudi::Details::PropertyBase*> props; SG::ReadHandle<MyObj> k1; - ptest.mgr.declareProperty ("k1", k1); + props.push_back(ptest.mgr.declareProperty ("k1", k1)); SG::WriteHandle<MyObj> k2; - ptest.mgr.declareProperty ("k2", k2); + props.push_back(ptest.mgr.declareProperty ("k2", k2)); SG::UpdateHandle<MyObj> k3; - ptest.mgr.declareProperty ("k3", k3); + props.push_back(ptest.mgr.declareProperty ("k3", k3)); //SG::VarHandleBase k4 (1234, "", Gaudi::DataHandle::Reader); - //ptest.mgr.declareProperty ("k4", k4); + //props.push_back(ptest.mgr.declareProperty ("k4", k4)); - ServiceHandle<IJobOptionsSvc> jo ("JobOptionsSvc", "test"); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> jo ("JobOptionsSvc", "test"); assert (jo.retrieve().isSuccess()); - assert (jo->setMyProperties ("test1", &ptest).isSuccess()); + for (Gaudi::Details::PropertyBase* p : props) { + jo->bind ("test1", p); + } assert (k1.clid() == 293847295); assert (k1.key() == "aaa"); diff --git a/Database/APR/RootStorageSvc/src/RootTreeIndexContainer.cpp b/Database/APR/RootStorageSvc/src/RootTreeIndexContainer.cpp index 5364d26c5f236beb2d201212bc3ee197511f8148..eea0dc2bdd28ae296547b71c01bf8ca8230e8837 100644 --- a/Database/APR/RootStorageSvc/src/RootTreeIndexContainer.cpp +++ b/Database/APR/RootStorageSvc/src/RootTreeIndexContainer.cpp @@ -12,10 +12,9 @@ // Root include files #include "TTree.h" +#include "TMemFile.h" #include "TBranch.h" -#include <iostream> - using namespace pool; using namespace std; @@ -76,7 +75,7 @@ DbStatus RootTreeIndexContainer::transAct(Transaction::Action action) { DbStatus status = RootTreeContainer::transAct(action); if (action == Transaction::TRANSACT_FLUSH) { if (m_tree == nullptr) return Error; - if (m_index_ref != nullptr && m_tree->GetEntries() > 0 && m_tree->GetEntryNumberWithIndex(nextRecordId()) == -1) { + if (m_index_ref != nullptr && m_tree->GetEntries() > 0 && dynamic_cast<TMemFile*>(m_tree->GetCurrentFile()) == nullptr && m_tree->GetEntryNumberWithIndex(nextRecordId()) == -1) { m_tree->BuildIndex("index_ref"); } } diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx index 4de3b302c0857ef1ef9af1bf16dcf35b825a6892..bca157b86f9d3c9ff9cc1fec71e906e56f01e405 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaPoolCnvSvc.cxx @@ -564,6 +564,7 @@ StatusCode AthenaPoolCnvSvc::commitOutput(const std::string& outputConnectionSpe ATH_MSG_ERROR("connectOutput FAILED extract file name and technology."); return(StatusCode::FAILURE); } + const std::string oldOutputConnection = outputConnection; if (!m_outputStreamingTool.empty() && m_outputStreamingTool[0]->isClient() && m_streamMetaDataOnly) { m_fileCommitCounter[outputConnection] = m_fileCommitCounter[outputConnection] + 1; if (m_fileFlushSetting[outputConnection] > 0 && m_fileCommitCounter[outputConnection] % m_fileFlushSetting[outputConnection] == 0) { @@ -599,7 +600,7 @@ StatusCode AthenaPoolCnvSvc::commitOutput(const std::string& outputConnectionSpe ATH_MSG_ERROR("commitOutput - caught exception: " << e.what()); return(StatusCode::FAILURE); } - if (!this->cleanUp(outputConnection).isSuccess()) { + if (!this->cleanUp(oldOutputConnection).isSuccess()) { ATH_MSG_ERROR("commitOutput FAILED to cleanup converters."); return(StatusCode::FAILURE); } diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx index 3b25a5de0263bb943f73070f016c455b949e264b..410e4e4742b6c53630734295bc92faba8328304b 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.cxx @@ -69,7 +69,7 @@ StatusCode AthenaRootSharedWriterSvc::initialize() { } else { std::string propertyName = "StreamMetaDataOnly"; bool streamMetaDataOnly(false); - BooleanProperty streamMetaDataOnlyProp(propertyName,streamMetaDataOnly); + BooleanProperty streamMetaDataOnlyProp(propertyName, streamMetaDataOnly); if (propertyServer->getProperty(&streamMetaDataOnlyProp).isFailure()) { ATH_MSG_INFO("Conversion service does not have StreamMetaDataOnly property"); } else if(streamMetaDataOnlyProp.value()) { @@ -87,10 +87,10 @@ StatusCode AthenaRootSharedWriterSvc::initialize() { return StatusCode::SUCCESS; } //___________________________________________________________________________ -StatusCode AthenaRootSharedWriterSvc::start() { +StatusCode AthenaRootSharedWriterSvc::share(int numClients) { ATH_MSG_VERBOSE("Start commitOutput loop"); StatusCode sc = m_cnvSvc->commitOutput("", false); - while (m_rootClientCount > 0 || (m_rootClientIndex == 0 && (sc.isSuccess() || sc.isRecoverable()))) { + while (m_rootClientCount > 0 || (m_rootClientIndex < numClients && (sc.isSuccess() || sc.isRecoverable()))) { if (sc.isSuccess()) { ATH_MSG_VERBOSE("Success in commitOutput loop"); } else if (m_rootMonitor != nullptr) { diff --git a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.h b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.h index dc9c989df3410cb6edf919f2269bb2d99fc1aaa7..40fbab2425e05faa42b67708038f03ffb4fafd78 100644 --- a/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.h +++ b/Database/AthenaPOOL/AthenaPoolCnvSvc/src/AthenaRootSharedWriterSvc.h @@ -36,11 +36,12 @@ public: // Constructor and Destructor public: /// Gaudi Service Interface method implementations: virtual StatusCode initialize() override; - virtual StatusCode start() override; virtual StatusCode stop() override; virtual StatusCode finalize() override; virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvInterface) override; + virtual StatusCode share(int numClients = 0) override; + private: ServiceHandle<IConversionSvc> m_cnvSvc{this,"AthenaPoolCnvSvc","AthenaPoolCnvSvc"}; diff --git a/Database/IOVDbSvc/src/IOVDbSvc.cxx b/Database/IOVDbSvc/src/IOVDbSvc.cxx index 923c640e921292a549a9ea180732fc062d0edff8..3ddd72691c6461b956da8444229cd36761aa2c6c 100644 --- a/Database/IOVDbSvc/src/IOVDbSvc.cxx +++ b/Database/IOVDbSvc/src/IOVDbSvc.cxx @@ -9,6 +9,7 @@ #include "StoreGate/StoreGateSvc.h" #include "StoreGate/StoreClearedIncident.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/IIncidentSvc.h" #include "GaudiKernel/Guards.h" #include "GaudiKernel/IOpaqueAddress.h" @@ -754,60 +755,58 @@ StatusCode IOVDbSvc::checkEventSel() { // if so, we can set IOV time already to allow conditons retrieval // in the initialise phase, needed for setting up simulation - SmartIF<IProperty> evtSel = service<IProperty>("EventSelector", /*createIf=*/ false); - if (!evtSel.isValid()) { - // do not return FAILURE if the EventSelector cannot be found, as this - // happens online when we have no EventSelector - ATH_MSG_DEBUG( "Could not retrieve 'EventSelector'" ); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc",name()); + ATH_CHECK( joSvc.retrieve() ); + + if (!joSvc->has("EventSelector.OverrideRunNumber")) { + // do not return FAILURE if the EventSelector cannot be found, or it has + // no override property, can e.g. happen in online running + ATH_MSG_DEBUG( "No EventSelector.OverrideRunNumber property found" ); return StatusCode::SUCCESS; } BooleanProperty bprop("OverrideRunNumber",false); - if (evtSel->getProperty(&bprop)) { - if (bprop.value()) { - // if flag is set, extract Run,LB and time - ATH_MSG_INFO( "Setting run/LB/time from EventSelector override in initialize" ); - uint32_t run,lumib; - uint64_t time; - bool allGood=true; - if (m_par_forceRunNumber.value()!=0 || - m_par_forceLumiblockNumber.value()!=0) - ATH_MSG_WARNING( "forceRunNumber property also set" ); - IntegerProperty iprop1("RunNumber",0); - if (evtSel->getProperty(&iprop1)) { - run=iprop1.value(); - } else { - ATH_MSG_ERROR( "Unable to get RunNumber from EventSelector"); - allGood=false; - } - IntegerProperty iprop2("FirstLB",0); - if (evtSel->getProperty(&iprop2)) { - lumib=iprop2.value(); - } else { - ATH_MSG_ERROR( "Unable to get FirstLB from EventSelector"); - allGood=false; - } - IntegerProperty iprop3("InitialTimeStamp",0); - if (evtSel->getProperty(&iprop3)) { - time=iprop3.value(); - } else { - ATH_MSG_ERROR("Unable to get InitialTimeStamp from EventSelector" ); - allGood=false; - } - if (allGood) { - m_iovTime.setRunEvent(run,lumib); - uint64_t nsTime=time*1000000000LL; - m_iovTime.setTimestamp(nsTime); - ATH_MSG_INFO( "run/LB/time set to [" << run << "," << lumib << " : " << nsTime << "]" ); - } else { - ATH_MSG_ERROR( "run/LB/Time NOT changed" ); - } + ATH_CHECK( bprop.fromString(joSvc->get("EventSelector.OverrideRunNumber")) ); + if (bprop.value()) { + // if flag is set, extract Run,LB and time + ATH_MSG_INFO( "Setting run/LB/time from EventSelector override in initialize" ); + uint32_t run,lumib; + uint64_t time; + bool allGood=true; + if (m_par_forceRunNumber.value()!=0 || + m_par_forceLumiblockNumber.value()!=0) + ATH_MSG_WARNING( "forceRunNumber property also set" ); + IntegerProperty iprop1("RunNumber",0); + if (iprop1.fromString(joSvc->get("EventSelector.RunNumber","INVALID"))) { + run=iprop1.value(); + } else { + ATH_MSG_ERROR( "Unable to get RunNumber from EventSelector"); + allGood=false; + } + IntegerProperty iprop2("FirstLB",0); + if (iprop2.fromString(joSvc->get("EventSelector.FirstLB","INVALID"))) { + lumib=iprop2.value(); + } else { + ATH_MSG_ERROR( "Unable to get FirstLB from EventSelector"); + allGood=false; + } + IntegerProperty iprop3("InitialTimeStamp",0); + if (iprop3.fromString(joSvc->get("EventSelector.InitialTimeStamp","INVALID"))) { + time=iprop3.value(); + } else { + ATH_MSG_ERROR("Unable to get InitialTimeStamp from EventSelector" ); + allGood=false; + } + if (allGood) { + m_iovTime.setRunEvent(run,lumib); + uint64_t nsTime=time*1000000000LL; + m_iovTime.setTimestamp(nsTime); + ATH_MSG_INFO( "run/LB/time set to [" << run << "," << lumib << " : " << nsTime << "]" ); + } else { + ATH_MSG_ERROR( "run/LB/Time NOT changed" ); } - } else { - // this is not treated as an error if EventSelector has no override prop - ATH_MSG_DEBUG("Unable to get OverrideRunNumber flag from EventSelector" ); - } + return StatusCode::SUCCESS; } diff --git a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc index b1a98ce5bafc5b26e1961edc0573b7f7f5e87798..7eb02a03cd25c526df448d645c5a166617acff7c 100755 --- a/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc +++ b/DetectorDescription/GeoModel/GeoAdaptors/GeoAdaptors/GeoSiHit.icc @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "InDetSimEvent/SiHit.h" @@ -15,16 +15,21 @@ inline void GeoSiHit::init() { StoreGateSvc *detStore = StoreGate::pointer("DetectorStore"); - if(detStore->retrieve(s_sct,"SCT").isFailure()) - s_sct = 0; - if(detStore->retrieve(s_pix,"Pixel").isFailure()) - s_pix = 0; + if(detStore->retrieve(s_sct,"SCT").isFailure()){ + //if SCT retrieval fails, try ITkStrip + if(detStore->retrieve(s_sct,"ITkStrip").isFailure()) s_sct=0; + } + if(detStore->retrieve(s_pix,"Pixel").isFailure()){ + //if Pixel retrieval fails, try ITkPixel + if(detStore->retrieve(s_pix,"ITkPixel").isFailure()) s_pix = 0; + } if(detStore->retrieve(s_sID,"SCT_ID").isFailure()) s_sID = 0; if(detStore->retrieve(s_pID,"PixelID").isFailure()) s_pID = 0; } + inline GeoSiHit::GeoSiHit (const SiHit & h) { m_hit = &h; if (!s_sct || ! s_pix) init(); diff --git a/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx b/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx index 68ea9f2a5bfbdd6b2bf3a7503d0fccb52a6ab7a4..819060d7ed7e928bfb4a40fa2a239e0fe81e5f40 100644 --- a/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx +++ b/Event/xAOD/xAODBPhys/Root/BPhysHelper.cxx @@ -283,9 +283,9 @@ float xAOD::BPhysHelper::refTrkCharge(const size_t index) const } /*****************************************************************************/ -bool xAOD::BPhysHelper::setRefTrks(const std::vector<float>& px, - const std::vector<float>& py, - const std::vector<float>& pz) +bool xAOD::BPhysHelper::setRefTrks(std::vector<float> px, + std::vector<float> py, + std::vector<float> pz) { // sanity check: if(px.size()!=py.size() || px.size()!=pz.size()) @@ -301,9 +301,9 @@ bool xAOD::BPhysHelper::setRefTrks(const std::vector<float>& px, static const SG::AuxElement::Decorator< std::vector<float> > refTrackPzDeco("RefTrackPz"); // store the elements: - refTrackPxDeco(*m_b) = px; - refTrackPyDeco(*m_b) = py; - refTrackPzDeco(*m_b) = pz; + refTrackPxDeco(*m_b) = std::move(px); + refTrackPyDeco(*m_b) = std::move(py); + refTrackPzDeco(*m_b) = std::move(pz); return true; } @@ -319,7 +319,9 @@ bool xAOD::BPhysHelper::setRefTrks(const std::vector<TVector3>& refTrks) std::vector<float> px; std::vector<float> py; std::vector<float> pz; - + px.reserve(refTrks.size()); + py.reserve(refTrks.size()); + pz.reserve(refTrks.size()); // loop over refitted track momenta and store the components std::vector<TVector3>::const_iterator refTrksItr = refTrks.begin(); for(; refTrksItr!=refTrks.end(); ++refTrksItr) { @@ -329,7 +331,7 @@ bool xAOD::BPhysHelper::setRefTrks(const std::vector<TVector3>& refTrks) } // call overloaded method: - return setRefTrks(px,py,pz); + return setRefTrks(std::move(px),std::move(py),std::move(pz)); } @@ -342,9 +344,12 @@ bool xAOD::BPhysHelper::setRefTrks() std::vector<float> px; std::vector<float> py; std::vector<float> pz; - + const auto N = vtx()->vxTrackAtVertex().size(); + px.reserve(N); + py.reserve(N); + pz.reserve(N); // loop over refitted tracks at vertex - for(uint i=0; i<vtx()->vxTrackAtVertex().size(); ++i) { + for(uint i=0; i<N; ++i) { const Trk::TrackParameters* aPerigee = vtx()->vxTrackAtVertex()[i].perigeeAtVertex(); //sanity check if(!aPerigee) @@ -357,7 +362,7 @@ bool xAOD::BPhysHelper::setRefTrks() } // store as augmentation: - setRefTrks(px, py, pz); + setRefTrks(std::move(px), std::move(py), std::move(pz)); // all OK return true; @@ -506,7 +511,7 @@ bool xAOD::BPhysHelper::setMuons(const std::vector<const xAOD::Muon*>& muons, } // end of loop over muons // all OK: store muon links in the aux store - muonLinksDecor(*m_b) = muonLinks; + muonLinksDecor(*m_b) = std::move(muonLinks); return true; @@ -586,7 +591,7 @@ bool xAOD::BPhysHelper::setElectrons(const std::vector<const xAOD::Electron*>& e } // end of loop over electrons // all OK: store electron links in the aux store - electronLinksDecor(*m_b) = electronLinks; + electronLinksDecor(*m_b) = std::move(electronLinks); return true; @@ -668,7 +673,7 @@ bool xAOD::BPhysHelper::setPrecedingVertices(const std::vector<const xAOD::Verte } // end of loop over preceding vertices // all OK: store preceding vertex links in the aux store - precedingVertexLinksDecor(*m_b) = precedingVertexLinks; + precedingVertexLinksDecor(*m_b) = std::move(precedingVertexLinks); return true; @@ -749,7 +754,7 @@ bool xAOD::BPhysHelper::setCascadeVertices(const std::vector<const xAOD::Vertex* } // end of loop over cascade vertices // all OK: store cascade vertex links in the aux store - cascadeVertexLinksDecor(*m_b) = cascadeVertexLinks; + cascadeVertexLinksDecor(*m_b) = std::move(cascadeVertexLinks); return true; diff --git a/Event/xAOD/xAODBPhys/Root/BPhysHypoHelper.cxx b/Event/xAOD/xAODBPhys/Root/BPhysHypoHelper.cxx index 932a9739f2eda72513d83e8bc5e6a17392273fda..717fefd6e28457334a66db8c268e3eb5c6248109 100644 --- a/Event/xAOD/xAODBPhys/Root/BPhysHypoHelper.cxx +++ b/Event/xAOD/xAODBPhys/Root/BPhysHypoHelper.cxx @@ -36,12 +36,12 @@ /** @} */ /*****************************************************************************/ -float xAOD::BPhysHypoHelper::mass() +float xAOD::BPhysHypoHelper::mass() const { GET_FLOAT( m_hypo+"_mass" ); } /*****************************************************************************/ -float xAOD::BPhysHypoHelper::massErr() +float xAOD::BPhysHypoHelper::massErr() const { GET_FLOAT( m_hypo+"_massErr" ); } diff --git a/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHelper.h b/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHelper.h index a301c6a5818ba0c1b686cc2e7d08009dcf60e652..d568e3e552b28ef595e6e58d93da8e5736b11621 100644 --- a/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHelper.h +++ b/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHelper.h @@ -68,9 +68,9 @@ /** Base class for the B-physcis xAOD helpers */ namespace xAOD { - class BPhysHelper { + public: /************************************************************************/ @@ -232,9 +232,9 @@ namespace xAOD { * @returns: true on success */ - bool setRefTrks(const std::vector<float>& px, - const std::vector<float>& py, - const std::vector<float>& pz); + bool setRefTrks(std::vector<float> px, + std::vector<float> py, + std::vector<float> pz); /** Sets refitted track momenta * @param[in] refTrks std::vector of refitted momenta as TVector3 diff --git a/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHypoHelper.h b/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHypoHelper.h index 87a8dc1d9537296b0a57a6f4d3c15f5f16f29269..b6d120ce640159e95163cfc2f9bfed0f7ac9ad0b 100644 --- a/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHypoHelper.h +++ b/Event/xAOD/xAODBPhys/xAODBPhys/BPhysHypoHelper.h @@ -64,10 +64,6 @@ #include "BPhysHelper.h" -#include "TVector3.h" -#include "TLorentzVector.h" -#include "TMatrixTSym.h" - #include <assert.h> @@ -87,7 +83,7 @@ namespace xAOD { * @param[in] hypo Name of the hypothesis * @param[in] b Pointer to the xAOD::Vertex */ - BPhysHypoHelper(const std::string hypo, const xAOD::Vertex* b) : + BPhysHypoHelper(const std::string &hypo, const xAOD::Vertex* b) : BPhysHelper(b), m_hypo(hypo) { @@ -104,8 +100,8 @@ namespace xAOD { * @returns: mass or error, -9999999. in case the augmentation doesn't exist */ - float mass(); //!< invariant mass - float massErr(); //!< invariant mass error + float mass() const; //!< invariant mass + float massErr() const; //!< invariant mass error /** Set given invariant mass and its error * diff --git a/Generators/EvgenJobTransforms/python/EvgenConfig.py b/Generators/EvgenJobTransforms/python/EvgenConfig.py index 2c699f9f79a2d4468c8aa34c00a39ef765b398c5..a68e11e6cb1ebba0c10fc92627b5bcef1e0d978f 100644 --- a/Generators/EvgenJobTransforms/python/EvgenConfig.py +++ b/Generators/EvgenJobTransforms/python/EvgenConfig.py @@ -7,7 +7,7 @@ lhefGenerators = ["Lhef", # generic name: prefer to use the names below "aMcAtNlo", "McAtNlo", "Powheg", "PowHel", "MadGraph", "CompHep", "CalcHep","Geneva", "Whizard", "MCFM", "JHU", "MEtop", "Charybdis", "Charybdis2", "BCVEGPY", "Dire4Pythia8", "BlackMax", "QBH", "gg2ww", "gg2zz", "gg2vv", "HvyN", "VBFNLO", "FPMC", "ProtosLHEF", - "BCVEGPY", "STRINGS"] + "BCVEGPY", "STRINGS", "Phantom"] ## A more general list of generators which provide partonic input, including non-LHEF ones inputGenerators = lhefGenerators + ["Alpgen", "Protos"] @@ -124,6 +124,7 @@ class EvgenConfig(TransformConfig): inputFilesPerJob = Integer("number of input files per job",0, AllowedExpression("value >= 0")) nEventsPerJob = Integer("number of input events per job",0, AllowedExpression("value >= 0")) obsolete = Boolean("Are JOs/common fragment obsolete", False) + PDGparams = Boolean("Do we use the standard PDG values for masses, widths etc. ", False) def __init__(self, name="evgenConfig"): TransformConfig.__init__(self, name) @@ -133,7 +134,7 @@ class EvgenConfig(TransformConfig): self.maxeventsstrategy = "ABORT" self.specialConfig = "NONE" # for the sake of Generate_tf leave minevents for a while - self.minevents = 5000 + self.minevents = 0 ## Explicitly block MC11/12 settings of efficiency, input*base, or weighting attrs def __setattr__(self, name, value): diff --git a/Generators/EvgenJobTransforms/scripts/Gen_tf.py b/Generators/EvgenJobTransforms/scripts/Gen_tf.py index e3f98ec28c62705e489c1979ac5129dee5a3eb47..ee7ba47953fc365169ecc3d885a77fe4fc6f68dc 100755 --- a/Generators/EvgenJobTransforms/scripts/Gen_tf.py +++ b/Generators/EvgenJobTransforms/scripts/Gen_tf.py @@ -56,7 +56,9 @@ class EvgenExecutor(athenaExecutor): if os.path.exists('/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/'): datCvmfsDir = '/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/common/MadGraphControl/dat/' os.environ["DATAPATH"] = datCvmfsDir+":"+os.environ["DATAPATH"] - dsidparam = (self._trf.argdict["jobConfig"].value).values()[0][0] +# dsidparam = (self._trf.argdict["jobConfig"].value).values()[0][0] + dsidpar = (self._trf.argdict["jobConfig"].value).values() + dsidparam = list(dsidpar)[0][0] # Adding cvmfs path to JOBOPTSEARCHPATH BaseCvmfsPath = "/cvmfs/atlas.cern.ch/repo/sw/Generators/MCJobOptions/" diff --git a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py index bda44ff6140f0ef8ce53fd71eb3bab55ef6fb2d6..46b925380e36557931550d89bd8585d514b16402 100644 --- a/Generators/EvgenJobTransforms/share/Generate_randomseeds.py +++ b/Generators/EvgenJobTransforms/share/Generate_randomseeds.py @@ -53,11 +53,11 @@ if any(gen in ranluxlist for gen in evgenConfig.generators): evgenLog.info("Using RanLux random numbers!") atRndmGenSvc = svcMgr.AtRanluxGenSvc atRndmGenSvc.EventReseeding = False - printfunc("Events will not be reseeded (RndmGenSvc) ") + print("Events will not be reseeded (RndmGenSvc) ") else: atRndmGenSvc = svcMgr.AtRndmGenSvc atRndmGenSvc.EventReseeding = False - printfunc "Events will not be reseeded (RndmGenSvc) " + printfunc("Events will not be reseeded (RndmGenSvc) ") ## Pass the random seed from the transform command line into each used generator's seed config string seedstrs = [] diff --git a/Generators/EvgenJobTransforms/share/skel.GENtoEVGEN.py b/Generators/EvgenJobTransforms/share/skel.GENtoEVGEN.py index b7b4b1a880dabfcf28acc71389cd666281a7bc48..6b5c098e20033b925f879010112b2b4ab249d3f2 100644 --- a/Generators/EvgenJobTransforms/share/skel.GENtoEVGEN.py +++ b/Generators/EvgenJobTransforms/share/skel.GENtoEVGEN.py @@ -402,7 +402,8 @@ if evgenConfig.categories: ## Configure POOL streaming to the output EVNT format file from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream from AthenaPoolCnvSvc.AthenaPoolCnvSvcConf import AthenaPoolCnvSvc -svcMgr.AthenaPoolCnvSvc.CommitInterval = 10 #< tweak for MC needs +# remove because it was removed from Database/AthenaPOOL/AthenaPoolCnvSvc +#svcMgr.AthenaPoolCnvSvc.CommitInterval = 10 #< tweak for MC needs if hasattr(runArgs, "outputEVNTFile"): poolFile = runArgs.outputEVNTFile elif hasattr(runArgs, "outputEVNT_PreFile"): @@ -434,19 +435,19 @@ svcMgr.EventSelector.RunNumber = int(dsid) ## Include information about generators in metadata import EventInfoMgt.EventInfoMgtInit -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["mc_channel_number",str(dsid)] -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["lhefGenerator", '+'.join( filter( gens_lhef, gennames ) ) ] -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["generators", '+'.join(gennames)] -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["evgenProcess", evgenConfig.process] -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["evgenTune", evgenConfig.tune] -if hasattr( evgenConfig, "hardPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs += ["hardPDF", evgenConfig.hardPDF] -if hasattr( evgenConfig, "softPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs += ["softPDF", evgenConfig.softPDF] -if hasattr( runArgs, "randomSeed") : svcMgr.TagInfoMgr.ExtraTagValuePairs += ["randomSeed", str(runArgs.randomSeed)] -if hasattr( runArgs, "AMITag") and runArgs.AMITag != "NONE": svcMgr.TagInfoMgr.ExtraTagValuePairs += ["AMITag", runArgs.AMITag] +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"mc_channel_number":str(dsid)}) +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"lhefGenerator": '+'.join( filter( gens_lhef, gennames ) ) }) +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"generators": '+'.join(gennames)}) +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"evgenProcess": evgenConfig.process}) +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"evgenTune": evgenConfig.tune}) +if hasattr( evgenConfig, "hardPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"hardPDF": evgenConfig.hardPDF}) +if hasattr( evgenConfig, "softPDF" ) : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"softPDF": evgenConfig.softPDF}) +if hasattr( runArgs, "randomSeed") : svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"randomSeed": str(runArgs.randomSeed)}) +if hasattr( runArgs, "AMITag") and runArgs.AMITag != "NONE": svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"AMITag": runArgs.AMITag}) ## Handle beam info -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["beam_energy", str(int(runArgs.ecmEnergy*Units.GeV/2.0))] -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["beam_type", 'collisions'] +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"beam_energy": str(int(runArgs.ecmEnergy*Units.GeV/2.0))}) +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"beam_type": 'collisions'}) ## Propagate energy argument to the generators # TODO: Standardise energy setting in the GenModule interface @@ -456,7 +457,7 @@ include("EvgenJobTransforms/Generate_ecmenergies.py") include("EvgenJobTransforms/Generate_randomseeds.py") ## Add special config option (extended model info for BSM scenarios) -svcMgr.TagInfoMgr.ExtraTagValuePairs += ["specialConfiguration", evgenConfig.specialConfig ] +svcMgr.TagInfoMgr.ExtraTagValuePairs.update({"specialConfiguration": evgenConfig.specialConfig }) ## Remove TestHepMC if it's inappropriate for this generator combination # TODO: replace with direct del statements in the generator common JO fragments? @@ -733,9 +734,9 @@ from PyJobTransformsCore.runargs import RunArguments runPars = RunArguments() runPars.nEventsPerJob = evgenConfig.nEventsPerJob runPars.maxeventsstrategy = evgenConfig.maxeventsstrategy -with open("config.pickle", 'w') as f: - import cPickle - cPickle.dump(runPars, f) +with open("config.pickle", 'wb') as f: + import pickle + pickle.dump(runPars, f) ##============================================================== diff --git a/Generators/EvgenProdTools/python/LogicalExpressionFilter.py b/Generators/EvgenProdTools/python/LogicalExpressionFilter.py index 3000e69bb6a1fdc58c13839d81ec0b70791ce156..1605aed5c96e0afb6ae824170633fab7492c6e54 100644 --- a/Generators/EvgenProdTools/python/LogicalExpressionFilter.py +++ b/Generators/EvgenProdTools/python/LogicalExpressionFilter.py @@ -20,7 +20,7 @@ import AthenaPython.PyAthena as PyAthena from AthenaPython.PyAthena import StatusCode import tokenize, random -from cStringIO import StringIO +from io import StringIO class LogicalExpressionFilter( PyAthena.Alg ): _isLocked=False diff --git a/Generators/EvtGen_i/CMakeLists.txt b/Generators/EvtGen_i/CMakeLists.txt index 98e9990d554c499114cfc88a389efd5a4ea2aaf1..5b34b7b6f48cf79cdad6000922b592da48bdde7a 100644 --- a/Generators/EvtGen_i/CMakeLists.txt +++ b/Generators/EvtGen_i/CMakeLists.txt @@ -62,6 +62,6 @@ atlas_add_component( EvtGen_i LINK_LIBRARIES ${Boost_LIBRARIES} ${HEPPDT_LIBRARIES} ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA8_LIBRARIES} ${PHOTOSPP_LIBRARIES} ${TAUOLAPP_LIBRARIES} AtlasHepMCLib ${EVTGEN_LIBRARIES} StoreGateLib SGtests GaudiKernel GeneratorModulesLib GeneratorObjects AthenaKernel EvtGen_iLib ) # Install files from the package: -atlas_install_joboptions( share/*.py ) -atlas_install_runtime( share/*.DEC share/*.table share/*.dec share/*.pdt ) +atlas_install_joboptions( share/common/*.py ) +atlas_install_runtime( share/file/*.DEC share/file/*.table share/file/*.dec share/file/*.pdt share/file/*.dat ) diff --git a/Generators/EvtGen_i/share/BtoJpsieeK0s.py b/Generators/EvtGen_i/share/BtoJpsieeK0s.py deleted file mode 100644 index 4e98db3038ad16cc7969f6084b3bfbd331d0a1c4..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/BtoJpsieeK0s.py +++ /dev/null @@ -1,168 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 5 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -#PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" ] -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -# open your exclusive channel here Bs -> J/psi(ee) K0 -PythiaB.PythiaCommand += ["pydat3 mdme 889 1 1", - "pydat3 mdme 858 1 1" ,"pydat3 brat 858 1." - "pydat3 mdme 859 1 0", - "pydat3 mdme 860 1 0" ] -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["10. 2.5 and 10. 2.5"] -#PythiaB.cutbq = ["6. 2.5 and 6. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 15. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 50 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 50. - - - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/BtoJpsieeX.py b/Generators/EvtGen_i/share/BtoJpsieeX.py deleted file mode 100644 index dc09a0c8221e90fb3443e8a6183076acb48ea89a..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/BtoJpsieeX.py +++ /dev/null @@ -1,164 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 5 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" - -# -# Inclusive B -> J/psi(ee) X production -# - -include( "Jpsichannels.py" ) - -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - - -include( "Btune.py" ) - -# Force J/psi to e+ e- -PythiaB.PythiaCommand += ["pydat3 mdme 889 1 1", - "pydat3 mdme 858 1 1" ,"pydat3 brat 858 1." - "pydat3 mdme 859 1 0", - "pydat3 mdme 860 1 0" ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 9.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["10. 2.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -#PythiaB.lvl2cut = [ 0., 13., 3., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.0, 102.5, 0., 102.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 15. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 50 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 50. - - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/Btune.py b/Generators/EvtGen_i/share/Btune.py deleted file mode 100644 index ea96b6713cd651481fec4d36f79966a9ccf5ab77..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/Btune.py +++ /dev/null @@ -1,87 +0,0 @@ -# -# CTEQ6L with UE tuning by Arthur Moraes -# -# author: B-Physics group, 2006-11-09 -# -#-------------------------------------------------------------------------- -PythiaB = topAlg.PythiaB -#PythiaB.PythiaCommand += [ -# eta ranges -# "pysubs ckin 9 -4.5", -# "pysubs ckin 10 4.5", -# "pysubs ckin 11 -4.5", -# "pysubs ckin 12 4.5", -# no B-B mixing -# "pydat1 mstj 26 0", -# parton decay length scheme: -# particle decayed if average proper lifetime -# c\tau < PARJ(71): default PARJ(71):= 10 mm -# "pydat1 mstj 22 2", -# Peterson / SLAC fragmentaton function for b-quark (def: -0.005) -# "pydat1 parj 55 -0.006", -# Excited B-meson parameters -# "pydat1 parj 13 0.65", -# "pydat1 parj 14 0.12", -# "pydat1 parj 15 0.04", -# "pydat1 parj 16 0.12", -# "pydat1 parj 17 0.2" -# ] - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - - -######################################################################################### -####################### Arthur Moraes tuning (for reference) ############################ - -# lambda value for alpha_s -# "pydat1 parj 81 0.14", -# effects the amount of color reconnection -# "pypars parp 78 0.2", -# suppression probability for string pieces reattaching beam remnant -# to hard scatter -# "pypars parp 80 0.01", -# effective pT_min for MI (pt0 scale) -# "pypars parp 82 1.9", -# matter distribution -# "pypars parp 83 0.3", -# "pypars parp 84 0.5", -# pT0 scale -# "pypars parp 89 1800", -# "pypars parp 90 0.22", -# ISR -# "pypars mstp 70 2", -# max scale for FSR dipoles -# "pypars mstp 72 0", -# new multiple interaction model and new parton shower selected -# "pypars mstp 81 1", -# MPI -# "pypars mstp 82 4", -# ISR -# "pypars mstp 84 1", -# FSR -# "pypars mstp 85 1", -# MPI -# "pypars mstp 86 2", -# sea quarks: large x behavior of assumed gluon distribution -# "pypars mstp 87 4", -# color reconnection -# "pypars mstp 88 0", -# "pypars mstp 89 1", -# "pypars mstp 90 1", -# "pypars mstp 95 1", -# -######################################################################################### -######################################################################################### diff --git a/Generators/EvtGen_i/share/CSC.016701.PythiaB_Bs_Ds_PhiPi_Pi_Signal3.py b/Generators/EvtGen_i/share/CSC.016701.PythiaB_Bs_Ds_PhiPi_Pi_Signal3.py deleted file mode 100644 index 5139310058f5121782433da3f34b12ea482180c1..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.016701.PythiaB_Bs_Ds_PhiPi_Pi_Signal3.py +++ /dev/null @@ -1,141 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0s->Ds(Phi(K+K-)Pi)Pi -# -# Author: W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# Changes: WW, 2006-04-13 -# Removed CBNT_ lines; added RootHistSvc again -# PRODUCTION SYSTEM FRAGMENT -#============================================================== -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -# -include( "PythiaB/Dsphipi.py" ) -# 959: Bs -> Ds-mu+nu -# 967: Bs -> Ds-Pi+ -# 969: Bs -> Ds-a1+ -# 831: Ds- -> PhiPi- - -PythiaB.PythiaCommand += [ "pydat3 mdme 967 1 1", - "pydat3 mdme 831 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -PythiaB.DecayChannelParameters = [1., 0., 0., 0.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 50000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017500.PythiaB_bbmu6X.py b/Generators/EvtGen_i/share/CSC.017500.PythiaB_bbmu6X.py deleted file mode 100644 index fccca8dde94ff6c534527ae3e7ab8405a78528c8..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017500.PythiaB_bbmu6X.py +++ /dev/null @@ -1,91 +0,0 @@ -############################################################### -# PRODUCTION SYSTEM FRAGMENT -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== - -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 6.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["7. 4.5 or 7. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 9. -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017501.PythiaB_bbmu4X.py b/Generators/EvtGen_i/share/CSC.017501.PythiaB_bbmu4X.py deleted file mode 100644 index d96d0ad663342a87e0074cc2041a4001cc8f48bc..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017501.PythiaB_bbmu4X.py +++ /dev/null @@ -1,99 +0,0 @@ -############################################################### -# -# Job options file fragment for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>4GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "PythiaB/Btune.py" ) - -PythiaB.PythiaCommand += [ - # lambda value for alpha_s - "pydat1 parj 81 0.14", - # effects the amount of color reconnection - "pypars parp 78 0.2", - # suppression probability for string pieces reattaching beam remnant - # to hard scatter - "pypars parp 80 0.01", - # effective pT_min for MI (pt0 scale) - "pypars parp 82 1.9", - # matter distribution - "pypars parp 83 0.3", - "pypars parp 84 0.5", - # pT0 scale - "pypars parp 89 1800", - "pypars parp 90 0.22", - # ISR - "pypars mstp 70 2", - # max scale for FSR dipoles - "pypars mstp 72 0", - # new multiple interaction model and new parton shower selected - "pypars mstp 81 1", - # MPI - "pypars mstp 82 4", - # ISR - "pypars mstp 84 1", - # FSR - "pypars mstp 85 1", - # MPI - "pypars mstp 86 2", - # sea quarks: large x behavior of assumed gluon distribution - "pypars mstp 87 4", - # color reconnection - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 6.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["5. 4.5 or 5. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 4., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 7. -############################################################### - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017503.Pythia_directJpsimu6mu4.py b/Generators/EvtGen_i/share/CSC.017503.Pythia_directJpsimu6mu4.py deleted file mode 100644 index 3aa4f27f42d2413746410b351511c2a414802619..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017503.Pythia_directJpsimu6mu4.py +++ /dev/null @@ -1,231 +0,0 @@ -############################################################### -# PRODUCTION SYSTEM FRAGMENT -# jobOptions for quarkonium production in the -# NRQCD colour-octet framework -# Author: Darren D Price ( Darren.Price@cern.ch ) -# Date: Jun 2006 -# Modified: Oct 2006 -#============================================================== - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from Pythia_i.Pythia_iConf import Pythia -topAlg += Pythia() - - -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - - -# AtRndmGenSvc.ReadFromFile = true; -Pythia = topAlg.Pythia - -Pythia.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -Pythia.PythiaCommand += [ # quarkonium processes - - #"pysubs msel 0", # user chooses decay mode(s) - "pysubs msel 61", # colour octet charmonium production (421-439) - #"pysubs msel 62", # colour octet bottomonium production (461-479) - #"pysubs msel 63", # colour octet onium production (msel 61+62) - - # ----- J/Psi production ----- - # --- 3S1(1) - #"pysubs msub 421 1", # gg->cc~[3S1(1)]+g - # --- 3S1(8) - #"pysubs msub 422 1", # gg->cc~[3S1(8)]+g - #"pysubs msub 425 1", # gq->q+cc~[3S1(8)] - #"pysubs msub 428 1", # qq~->g+cc~[3S1(8)] - # --- 1S0(8) - #"pysubs msub 423 1", # gg->cc~[1S0(8)]+g - #"pysubs msub 426 1", # gq->q+cc~[1S0(8)] - #"pysubs msub 429 1", # qq~->g+cc~[1S0(8)] - # --- 3PJ(8) - #"pysubs msub 424 1", # gg->cc~[3PJ(8)]+g - #"pysubs msub 427 1", # gq->q+cc~[3PJ(8)] - #"pysubs msub 430 1", # qq~->g+cc~[3PJ(8)] - - # ----- Chi's ----- - #"pysubs msub 431 1", # gg->cc~[3P0(1)]+g - #"pysubs msub 432 1", # gg->cc~[3P1(1)]+g - #"pysubs msub 433 1", # gg->cc~[3P2(1)]+g - #"pysubs msub 434 1", # qg->q+cc~[3P0(1)] - #"pysubs msub 435 1", # qg->q+cc~[3P1(1)] - #"pysubs msub 436 1", # qg->q+cc~[3P2(1)] - #"pysubs msub 437 1", # qq~->cc~[3P0(1)]+g - #"pysubs msub 438 1", # qq~->cc~[3P1(1)]+g - #"pysubs msub 439 1", # qq~->cc~[3P2(1)]+g - - # ----- Upsilon production ----- - # --- 3S1(1) - #"pysubs msub 461 1", # gg->bb~[3S1(1)]+g - # --- 3S1(8) - #"pysubs msub 462 1", # gg->bb~[3S1(8)]+g - #"pysubs msub 465 1", # gq->q+bb~[3S1(8)] - #"pysubs msub 468 1", # qq~->g+bb~[3S1(8)] - # --- 1S0(8) - #"pysubs msub 463 1", # gg->bb~[1S0(8)]+g - #"pysubs msub 466 1", # gq->q+bb~[1S0(8)] - #"pysubs msub 469 1", # qq~->g+bb~[1S0(8)] - # --- 3PJ(8) - #"pysubs msub 464 1", # gg->bb~[3PJ(8)]+g - #"pysubs msub 467 1", # gq->q+bb~[3PJ(8)] - #"pysubs msub 470 1", # qq~->g+bb~[3PJ(8)] - - # ----- Chi's ----- - #"pysubs msub 471 1", # gg->bb~[3P0(1)]+g - #"pysubs msub 472 1", # gg->bb~[3P1(1)]+g - #"pysubs msub 473 1", # gg->bb~[3P2(1)]+g - #"pysubs msub 474 1", # qg->q+bb~[3P0(1)] - #"pysubs msub 475 1", # qg->q+bb~[3P1(1)] - #"pysubs msub 476 1", # qg->q+bb~[3P2(1)] - #"pysubs msub 477 1", # qq~->bb~[3P0(1)]+g - #"pysubs msub 478 1", # qq~->bb~[3P1(1)]+g - #"pysubs msub 479 1", # qq~->bb~[3P2(1)]+g - - ] - -Pythia.PythiaCommand += [ # force decays - - "pydat3 mdme 858 1 0", # J/psi->e+e- - "pydat3 mdme 859 1 1", # J/psi->mumu (br 0.06) - "pydat3 mdme 860 1 0", # J/psi->rndmflavpairs - - "pydat3 mdme 1501 1 1", # chi0c->J/psi gamma (br 0.007) - "pydat3 mdme 1502 1 0", # chi0c->rfp - - "pydat3 mdme 1555 1 1", # chi1c->J/psi gamma (br 0.273) - "pydat3 mdme 1556 1 0", # chi1c->rfp - - "pydat3 mdme 861 1 1", # chi2c->J/psi gamma (br 0.135) - "pydat3 mdme 862 1 0", # chi2c->rfp - - "pydat3 mdme 1034 1 0", # Upsilon->e+e- (br 0.0254) - "pydat3 mdme 1035 1 1", # Upsilon->mu+mu- (br 0.0248) - "pydat3 mdme 1036 1 0", # Upsilon->tau+tau- (br 0.0267) - "pydat3 mdme 1037 1 0", # Upsilon->ddbar - "pydat3 mdme 1038 1 0", # Upsilon->uubar - "pydat3 mdme 1039 1 0", # Upsilon->ssbar - "pydat3 mdme 1040 1 0", # Upsilon->ccbar - "pydat3 mdme 1041 1 0", # Upsilon->ggg - "pydat3 mdme 1042 1 0", # Upsilon->gamma gg - - "pydat3 mdme 1520 1 1", # chi0b->Upsilon gamma (br 0.02) - "pydat3 mdme 1521 1 0", # chi0b->gg - - "pydat3 mdme 1565 1 1", # chi1b->Upsilon gamma (br 0.35) - "pydat3 mdme 1566 1 0", # chi1b->gg - - "pydat3 mdme 1043 1 1", # chi2b->Upsilon gamma (br 0.22) - "pydat3 mdme 1044 1 0", # chi2b->gg - - ] - -Pythia.PythiaCommand += [ # NRQCD matrix elements - - "pypars parp 141 1.16", # Jpsi-3S1(1) NRQCD ME - "pypars parp 142 0.0119", # Jpsi-3S1(8) NRQCD ME - "pypars parp 143 0.01", # Jpsi-1S0(8) NRQCD ME - "pypars parp 144 0.01", # Jpsi-3P0(8) NRQCD ME / m_c^2 - "pypars parp 145 0.05", # chi_c0-3P0(1) NRQCD ME / m_c^2 - - "pypars parp 146 9.28", # Upsilon-3S1(1) NRQCD ME - "pypars parp 147 0.15", # Upsilon-3S1(8) NRQCD ME - "pypars parp 148 0.02", # Upsilon-1S0(8) NRQCD ME - "pypars parp 149 0.02", # Upsilon-3P0(8) NRQCD ME / m_b^2 - "pypars parp 150 0.085", # chi_b0-3P0(1) NRQCD ME / m_b^2 - - ] - -#Pythia.PythiaCommand += [ ### Moraes tunings (here for reference only) - -# "pypars mstp 70 2", -# "pypars mstp 72 0", - -# "pypars mstp 81 1", -# "pypars mstp 82 4", - -# "pypars mstp 84 1", -# "pypars mstp 85 1", -# "pypars mstp 86 2", -# "pypars mstp 87 4", -# "pypars mstp 88 0", -# "pypars mstp 89 1", -# "pypars mstp 90 1", - -# "pypars mstp 95 1", - -# "pypars parp 78 0.2", -# "pypars parp 80 0.01", -# "pypars parp 82 1.9", -# "pypars parp 83 0.3", -# "pypars parp 84 0.5", -# "pypars parp 89 1800", -# "pypars parp 90 0.22", - -# "pydat1 parj 81 0.14", - -# ] - - -Pythia.PythiaCommand += [ - - "pysubs ckin 3 4.5", # lower pT cut on hard process in GeV - - #"pypars mstp 61 0", # inital state showers off - #"pypars mstp 71 0", # final state showers off - #"pypars mstp 111 0" # fragmentation/hadronisation off - - ] - -Pythia.PythiaCommand += ["pyinit pylistf 1", - "pystat mstat 1", - "pyinit dumpr 0 3",#dump this event range to screen - ] - - -#------- Muon Trigger Cuts -------- -BSignalFilter = topAlg.BSignalFilter -#-------------- Level 1 Muon Cuts --------------------- -BSignalFilter.LVL1MuonCutOn = True -BSignalFilter.LVL1MuonCutPT = 6000.0 -BSignalFilter.LVL1MuonCutEta = 2.5 -#-------------- Level 2 lepton cuts ------------------- -# These will only function if LVL1 trigger used. -BSignalFilter.LVL2MuonCutOn = True -BSignalFilter.LVL2MuonCutPT = 4000.0 -BSignalFilter.LVL2MuonCutEta = 2.5 -try: - Stream1.RequireAlgs += ["BSignalFilter"] -except Exception, e: - pass - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017506.PythiaB_bbmu6mu4X.py b/Generators/EvtGen_i/share/CSC.017506.PythiaB_bbmu6mu4X.py deleted file mode 100644 index c0f3e6244de3901e5bad4f84cf20eec3b9541630..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017506.PythiaB_bbmu6mu4X.py +++ /dev/null @@ -1,92 +0,0 @@ -############################################################### -# PRODUCTION SYSTEM FRAGMENT -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["7. 4.5 or 7. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 1., 13., 4., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 20. -# ------------- For how many events store B-chain in NTUPLE ------------- - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017516.PythiaB_bb_Jpsimu6mu4X.py b/Generators/EvtGen_i/share/CSC.017516.PythiaB_bb_Jpsimu6mu4X.py deleted file mode 100644 index ecafc2db77ee6934cffc7e3dc6fa7e3eab5d015b..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017516.PythiaB_bb_Jpsimu6mu4X.py +++ /dev/null @@ -1,127 +0,0 @@ -############################################################### -# PRODUCTION SYSTEM SCRIPT -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" - -# -# Inclusive B -> J/psi(mumu) X production -# - -include( "PythiaB/Jpsichannels.py" ) - -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -# Force J/psi to mu+ mu- -PythiaB.PythiaCommand += ["pydat3 mdme 889 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 859 1 1", - "pydat3 brat 859 1.", - "pydat3 mdme 860 1 0" ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 9.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 1., 13., 4., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 2. -# ------------- For how many events store B-chain in NTUPLE ------------- - - -############################################################### - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017700.PythiaB_Bs_Jpsi_mu6mu3_phi_KK.py b/Generators/EvtGen_i/share/CSC.017700.PythiaB_Bs_Jpsi_mu6mu3_phi_KK.py deleted file mode 100644 index e252311535f0b7f76f25576f752e1e01158687b4..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017700.PythiaB_Bs_Jpsi_mu6mu3_phi_KK.py +++ /dev/null @@ -1,126 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi - PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] -# This phis which have originated from Bs to decay into two kaons. Other phis -# are left to decay as normal. Comment this line to prevent the phi forcing. -# See user_finsel.F (in src directory) for more such forcing options. -PythiaB.ForceDecayChannel = "BsJpsimumuphiKK" -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 12.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 6.0, 2.5, 6., 2.5, 6.0, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 14. -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017900.PythiaB_Bs_mu6mu4.py b/Generators/EvtGen_i/share/CSC.017900.PythiaB_Bs_mu6mu4.py deleted file mode 100644 index 32a5bf9fcc6e03d7cf6300e8ec147b6ee8b975d7..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017900.PythiaB_Bs_mu6mu4.py +++ /dev/null @@ -1,128 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# PRODUCTION SYSTEM FRAGMENT -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -# PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" ] - -# open your exclusive channel here Bs -> mumu -PythiaB.PythiaCommand += ["pydat3 mdme 977 1 1", - "pydat3 kfdp 977 1 13", - "pydat3 kfdp 977 2 -13" ] - - - -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 4., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 10. -# ------------- For how many events store B-chain in NTUPLE ------------- -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017901.PythiaB_Bd_KstarMuMu_Signal_F.py b/Generators/EvtGen_i/share/CSC.017901.PythiaB_Bd_KstarMuMu_Signal_F.py deleted file mode 100644 index dca03f2e6c720e36624f3681e83fd2af3b97a622..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017901.PythiaB_Bd_KstarMuMu_Signal_F.py +++ /dev/null @@ -1,112 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T O O P E N T H E U S E R C H A N N E L -# For Bd -> Kstar(892) mu+ mu- -# -PythiaB.PythiaCommand += ["pydat3 mdme 875 1 1", - "pydat3 kfdp 875 1 13", - "pydat3 kfdp 875 2 -13", - "pydat3 kfdp 875 3 313", - "pydat3 kfdp 875 4 0", - "pydat3 kfdp 875 5 0", - "pydat3 brat 875 0.0000001" ] -PythiaB.ForceDecayChannel = "BdKstarMuMu" -# lvl1 and lvl2 cuts pt_L1 eta_L1 pt_L2 eta_L2 -PythiaB.DecayChannelParameters = [1., 6.0, 2.5, 1., 6.0, 2.5] ; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -# for BsPhiMuMu, BdKstarMuMu BsGammaMuMu lvl1,lvl2 must be OFF -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ??? ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 4. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = topAlg.BSignalFilter -BSignalFilter.Cuts_Final_hadrons_switch = TRUE -BSignalFilter.Cuts_Final_hadrons_pT = 500.0 -BSignalFilter.Cuts_Final_hadrons_eta = 2.5 -BSignalFilter.BParticle_cuts = 511 -############################################################### -# Add POOL persistency -try: - Stream1.RequireAlgs += ["BSignalFilter"] -except Exception, e: - pass -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017902.PythiaB_Bs_PhiMuMu_Signal.py b/Generators/EvtGen_i/share/CSC.017902.PythiaB_Bs_PhiMuMu_Signal.py deleted file mode 100644 index 432112bf03655f80fa0e8673482f1c068a2f508c..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017902.PythiaB_Bs_PhiMuMu_Signal.py +++ /dev/null @@ -1,118 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - -#------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T O O P E N T H E U S E R C H A N N E L -# Bs -> phi mu+ mu- -PythiaB.PythiaCommand += ["pydat3 mdme 965 1 1", - "pydat3 kfdp 965 1 13", - "pydat3 kfdp 965 2 -13", - "pydat3 kfdp 965 3 333", - "pydat3 kfdp 965 4 0", - "pydat3 kfdp 965 5 0", - "pydat3 brat 0.000001" ] - - -PythiaB.ForceDecayChannel = "BsPhiMuMu" -# lvl1 and lvl2 cuts KEY_L1(0/1) pt_L1 eta_L1 KEY_L2 pt_L2 eta_L2 -PythiaB.DecayChannelParameters = [1., 6.0, 2.5, 1., 4.0, 2.5] ; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -# for BsPhiMuMu, BdKstarMuMu BsGammaMuMu lvl1,lvl2 must be OFF -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ??? ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 14. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = topAlg.BSignalFilter -BSignalFilter.Cuts_Final_hadrons_switch = TRUE -BSignalFilter.Cuts_Final_hadrons_pT = 500.0 -BSignalFilter.Cuts_Final_hadrons_eta = 2.5 -BSignalFilter.BParticle_cuts = 531 - -############################################################### - -# Change since 12.0.3 -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -try: - Stream1.RequireAlgs += ["BSignalFilter"] -except Exception, e: - pass - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.017981.B_Kpi.py b/Generators/EvtGen_i/share/CSC.017981.B_Kpi.py deleted file mode 100644 index 01be05d49316c715cb7e2dfe31277e54b466352a..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.017981.B_Kpi.py +++ /dev/null @@ -1,130 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -# PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" ] - -# open your exclusive channel here Bs -> mumu -PythiaB.PythiaCommand += ["pydat3 mdme 977 1 1", - "pydat3 kfdp 977 1 -321", - "pydat3 kfdp 977 2 211" ] - - - -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 12.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 6.0, 2.5, 6., 2.5, 6.0, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 14. -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.018101.PythiaB_Bd_Jpsie3e3K0s.py b/Generators/EvtGen_i/share/CSC.018101.PythiaB_Bd_Jpsie3e3K0s.py deleted file mode 100644 index ca5ce27eb2cc7bda69d76a027396cde2c2c38ed8..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.018101.PythiaB_Bd_Jpsie3e3K0s.py +++ /dev/null @@ -1,139 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- - -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - -from GeneratorFilters.GeneratorFiltersConf import MultiLeptonFilter -topAlg += MultiLeptonFilter() - -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -PythiaB.ForceBDecay = "yes" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.PythiaCommand += ["pydat3 mdme 889 1 1", - "pydat3 mdme 858 1 1", - "pydat3 mdme 859 1 0", - "pydat3 mdme 860 1 0" ] -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- - -include( "PythiaB/Btune.py" ) - -PythiaB.PythiaCommand += [ # Arthur Moraes tuning - # lambda value for alpha_s - "pydat1 parj 81 0.14", - # affects the amount of color reconnection - "pypars parp 78 0.2", - # suppression probability for string pieces reattaching beam remnant - # to hard scatter - "pypars parp 80 0.01", - # effective pT_min for MI (pt0 scale) - "pypars parp 82 1.9", - # matter distribution - "pypars parp 83 0.3", - "pypars parp 84 0.5", - # pT0 scale - "pypars parp 89 1800", - "pypars parp 90 0.22", - # ISR - "pypars mstp 70 2", - # max scale for FSR dipoles - "pypars mstp 72 0", - # new multiple interaction model and new parton shower selected - "pypars mstp 81 1", - # MPI - "pypars mstp 82 4", - # ISR - "pypars mstp 84 1", - # FSR - "pypars mstp 85 1", - # MPI - "pypars mstp 86 2", - # sea quarks: large x behavior of assumed gluon distribution - "pypars mstp 87 4", - # color reconnection - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - ] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pydat1 mstj 22 1", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["10. 2.5 and 10. 2.5"] -#PythiaB.cutbq = ["6. 2.5 and 6. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.0, 102.5, 0., 102.5, 3.0, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 15. - -# Add the filters: -BSignalFilter = topAlg.BSignalFilter -BSignalFilter.LVL1MuonCutOn = TRUE -BSignalFilter.LVL1MuonCutPT = 6000.0 -BSignalFilter.LVL1MuonCutEta = 2.5 -BSignalFilter.Cuts_Final_e_switch = TRUE -BSignalFilter.Cuts_Final_e_pT = 3000.0 -BSignalFilter.Cuts_Final_e_eta = 2.5 - -MultiLeptonFilter = topAlg.MultiLeptonFilter -#MultiLeptonFilter.Ptcut = 3.0*GeV -MultiLeptonFilter.Ptcut = 3000.0 -MultiLeptonFilter.Etacut = 2.5 -MultiLeptonFilter.NLeptons = 3 - -############################################################### -# Add POOL persistency -try: - Stream1.RequireAlgs += [ "BSignalFilter" ] -except Exception, e: - pass - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.018673.Bplus_Jpsi_mu6mu4_Kplus.py b/Generators/EvtGen_i/share/CSC.018673.Bplus_Jpsi_mu6mu4_Kplus.py deleted file mode 100644 index 06d5b62fcc1a85b69acaa2d461b61104c78ade0d..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.018673.Bplus_Jpsi_mu6mu4_Kplus.py +++ /dev/null @@ -1,117 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# open Channel B+ -> J/psi(mumu) K+ -PythiaB.PythiaCommand += ["pydat3 mdme 934 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] - -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 4., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -#mhadr = 2 for Channel B+ -> J/psi(mumu) K+ -PythiaB.PythiaCommand += ["pydat3 mdme 934 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] -PythiaB.mhadr = 2. - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.018701.PythiaB_Bs_Ds_PhiPi_A1_Signal3.py b/Generators/EvtGen_i/share/CSC.018701.PythiaB_Bs_Ds_PhiPi_A1_Signal3.py deleted file mode 100644 index 7664501527ec36d8d837b08d6530802bd6396ae9..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.018701.PythiaB_Bs_Ds_PhiPi_A1_Signal3.py +++ /dev/null @@ -1,141 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0s->Ds(Phi(K+K-)Pi)A1(Rho(Pi+Pi-)Pi) -# -# Author : W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# Changes: WW, 2006-04-13 -# Removed CBNT_ lines; added RootHistSvc again -# PRODUCTION FRAGMENT -#============================================================== -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -# Algorithms -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here Bs -> Ds a1 with Ds->phi pi -# -include( "PythiaB/Dsphipi.py" ) -# 959: Bs -> Ds-mu+nu -# 967: Bs -> Ds-Pi+ -# 969: Bs -> Ds-a1+ -# 831: Ds- -> PhiPi- - -PythiaB.PythiaCommand += [ "pydat3 mdme 969 1 1", - "pydat3 mdme 831 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [1., 0., 1., 1.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 100000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CSC.019250.Bs_Kmunu.py b/Generators/EvtGen_i/share/CSC.019250.Bs_Kmunu.py deleted file mode 100644 index 476ddd768866769629c30079a83682aa75538d16..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.019250.Bs_Kmunu.py +++ /dev/null @@ -1,123 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -# PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" ] - -# open your exclusive channel here B0 -> Kmunu -PythiaB.PythiaCommand += ["pydat3 mdme 962 1 1", - "pydat3 kfdp 962 1 -321", - "pydat3 kfdp 962 2 13", - "pydat3 kfdp 962 3 14" ] - - - -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 4., 2.5, 6., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 6. diff --git a/Generators/EvtGen_i/share/CSC.019251.Bs_Kmunu.py b/Generators/EvtGen_i/share/CSC.019251.Bs_Kmunu.py deleted file mode 100644 index f05573309159cb221d7d187d7f916f44161325aa..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.019251.Bs_Kmunu.py +++ /dev/null @@ -1,123 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = topAlg.PythiaB -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "PythiaB/CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -# PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" ] - -# open your exclusive channel here B0 -> Kmunu -PythiaB.PythiaCommand += ["pydat3 mdme 962 1 1", - "pydat3 kfdp 962 1 -321", - "pydat3 kfdp 962 2 -13", - "pydat3 kfdp 962 3 14" ] - - - -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 9 -4.5", - "pysubs ckin 10 4.5", - "pysubs ckin 11 -4.5", - "pysubs ckin 12 4.5", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 4., 2.5, 6., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 6. diff --git a/Generators/EvtGen_i/share/CSC.019300.Chib.py b/Generators/EvtGen_i/share/CSC.019300.Chib.py deleted file mode 100644 index 1914281b1fae5bd27ca3fc8508dba9435e5eac58..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.019300.Chib.py +++ /dev/null @@ -1,72 +0,0 @@ - -try: - Stream1.RequireAlgs += ["BSignalFilter"] -except Exception, e: - pass - -StoreGateSvc = Service( "StoreGateSvc" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from Pythia_i.Pythia_iConf import Pythia -topAlg += Pythia() - -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - - -#-------------------------------------------------------------- -# Algorithms Private Options -#-------------------------------------------------------------- -Pythia = topAlg.Pythia - -Pythia.PythiaCommand = [ "pysubs msel 0", #user chooses decay - "pysubs msub 471 1", #gg->bb~[3P0(1)]+g - "pysubs msub 474 1", #qg->q+bb~[3P0(1)] -# Force chi_b ->J/psi J/psi - "pydat3 mdme 1521 1 0", #chi_0b->gg - "pydat3 mdme 1520 1 1", #chi_0b->Y+gamma - "pydat3 kfdp 1520 1 443", #chi_0b->J/psi+gamma - "pydat3 kfdp 1520 2 443", #chi_0b->J/psi+J/psi - - -# J/Psi Decays (close ee-pairs and random flavours production, and open only mumu pairs production. - - "pydat3 mdme 860 1 0", - "pydat3 mdme 859 1 1", - "pydat3 mdme 858 1 0", - -# Other stuff (pysubs ckin 3 3- mean that i demand pt > 3 GeV - -# "pyinit pylistf 1", - "pyinit dumpr 0 3", - "pysubs ckin 3 3"] - -TopSequence = topAlg.TopSequence -TopSequence.Members += ["Sequencer/Filter"] - -#------- Muon Trigger Cuts -------- -BSignalFilter = topAlg.BSignalFilter -#-------------- Level 1 Muon Cuts --------------------- -BSignalFilter.LVL1MuonCutOn = "true" -BSignalFilter.LVL1MuonCutPT = 1000.0 -BSignalFilter.LVL1MuonCutEta = 2.5 -#-------------- Level 2 lepton cuts ------------------- -# These will only function if LVL1 trigger used. -BSignalFilter.LVL2MuonCutOn = "true" -BSignalFilter.LVL2MuonCutPT = 1000.0 -BSignalFilter.LVL2MuonCutEta = 2.5 - -#============================================================== -# -# End of job options file -# -############################################################### - diff --git a/Generators/EvtGen_i/share/CSC.019900.Pythia_directUpsilonmu6mu4.py b/Generators/EvtGen_i/share/CSC.019900.Pythia_directUpsilonmu6mu4.py deleted file mode 100644 index 1ec5a7b69cc7f98b30a651e38ee7223159f11930..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CSC.019900.Pythia_directUpsilonmu6mu4.py +++ /dev/null @@ -1,229 +0,0 @@ -############################################################### -# -# jobOptions for quarkonium production in the -# NRQCD colour-octet framework -# Author: Darren D Price ( Darren.Price@cern.ch ) -# Date: June 2006 -# Feb 2007 -- updated UE tuning to use CSC jobO -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from Pythia_i.Pythia_iConf import Pythia -topAlg += Pythia() - - -from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -topAlg += BSignalFilter() - - -Pythia = topAlg.Pythia -#Pythia.newScenario = FALSE - -# New tuning for CTEQ6L and Pythia new showering -include( "PythiaB/Btune.py" ) - -Pythia.PythiaCommand += [ - # lambda value for alpha_s - "pydat1 parj 81 0.14", - # effects the amount of color reconnection - "pypars parp 78 0.2", - # suppression probability for string pieces reattaching beam remnant - # to hard scatter - "pypars parp 80 0.01", - # effective pT_min for MI (pt0 scale) - "pypars parp 82 1.9", - # matter distribution - "pypars parp 83 0.3", - "pypars parp 84 0.5", - # pT0 scale - "pypars parp 89 1800", - "pypars parp 90 0.22", - # ISR - "pypars mstp 70 2", - # max scale for FSR dipoles - "pypars mstp 72 0", - # new multiple interaction model and new parton shower selected - "pypars mstp 81 1", - # MPI - "pypars mstp 82 4", - # ISR - "pypars mstp 84 1", - # FSR - "pypars mstp 85 1", - # MPI - "pypars mstp 86 2", - # sea quarks: large x behavior of assumed gluon distribution - "pypars mstp 87 4", - # color reconnection - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - ] - -Pythia.PythiaCommand += [ # quarkonium processes - - #"pysubs msel 0", # user chooses decay mode(s) - #"pysubs msel 61", # colour octet charmonium production (421-439) - "pysubs msel 62", # colour octet bottomonium production (461-479) - #"pysubs msel 63", # colour octet onium production (msel 61+62) - - # ----- J/Psi production ----- - # --- 3S1(1) - #"pysubs msub 421 1", # gg->cc~[3S1(1)]+g - # --- 3S1(8) - #"pysubs msub 422 1", # gg->cc~[3S1(8)]+g - #"pysubs msub 425 1", # gq->q+cc~[3S1(8)] - #"pysubs msub 428 1", # qq~->g+cc~[3S1(8)] - # --- 1S0(8) - #"pysubs msub 423 1", # gg->cc~[1S0(8)]+g - #"pysubs msub 426 1", # gq->q+cc~[1S0(8)] - #"pysubs msub 429 1", # qq~->g+cc~[1S0(8)] - # --- 3PJ(8) - #"pysubs msub 424 1", # gg->cc~[3PJ(8)]+g - #"pysubs msub 427 1", # gq->q+cc~[3PJ(8)] - #"pysubs msub 430 1", # qq~->g+cc~[3PJ(8)] - - # ----- Chi's ----- - #"pysubs msub 431 1", # gg->cc~[3P0(1)]+g - #"pysubs msub 432 1", # gg->cc~[3P1(1)]+g - #"pysubs msub 433 1", # gg->cc~[3P2(1)]+g - #"pysubs msub 434 1", # qg->q+cc~[3P0(1)] - #"pysubs msub 435 1", # qg->q+cc~[3P1(1)] - #"pysubs msub 436 1", # qg->q+cc~[3P2(1)] - #"pysubs msub 437 1", # qq~->cc~[3P0(1)]+g - #"pysubs msub 438 1", # qq~->cc~[3P1(1)]+g - #"pysubs msub 439 1", # qq~->cc~[3P2(1)]+g - - # ----- Upsilon production ----- - # --- 3S1(1) - #"pysubs msub 461 1", # gg->bb~[3S1(1)]+g - # --- 3S1(8) - #"pysubs msub 462 1", # gg->bb~[3S1(8)]+g - #"pysubs msub 465 1", # gq->q+bb~[3S1(8)] - #"pysubs msub 468 1", # qq~->g+bb~[3S1(8)] - # --- 1S0(8) - #"pysubs msub 463 1", # gg->bb~[1S0(8)]+g - #"pysubs msub 466 1", # gq->q+bb~[1S0(8)] - #"pysubs msub 469 1", # qq~->g+bb~[1S0(8)] - # --- 3PJ(8) - #"pysubs msub 464 1", # gg->bb~[3PJ(8)]+g - #"pysubs msub 467 1", # gq->q+bb~[3PJ(8)] - #"pysubs msub 470 1", # qq~->g+bb~[3PJ(8)] - - # ----- Chi's ----- - #"pysubs msub 471 1", # gg->bb~[3P0(1)]+g - #"pysubs msub 472 1", # gg->bb~[3P1(1)]+g - #"pysubs msub 473 1", # gg->bb~[3P2(1)]+g - #"pysubs msub 474 1", # qg->q+bb~[3P0(1)] - #"pysubs msub 475 1", # qg->q+bb~[3P1(1)] - #"pysubs msub 476 1", # qg->q+bb~[3P2(1)] - #"pysubs msub 477 1", # qq~->bb~[3P0(1)]+g - #"pysubs msub 478 1", # qq~->bb~[3P1(1)]+g - #"pysubs msub 479 1", # qq~->bb~[3P2(1)]+g - - ] - -Pythia.PythiaCommand += [ # force decays - - "pydat3 mdme 858 1 0", # J/psi->e+e- - "pydat3 mdme 859 1 1", # J/psi->mumu (br 0.06) - "pydat3 mdme 860 1 0", # J/psi->rndmflavpairs - - "pydat3 mdme 1501 1 1", # chi0c->J/psi gamma (br 0.007) - "pydat3 mdme 1502 1 0", # chi0c->rfp - - "pydat3 mdme 1555 1 1", # chi1c->J/psi gamma (br 0.273) - "pydat3 mdme 1556 1 0", # chi1c->rfp - - "pydat3 mdme 861 1 1", # chi2c->J/psi gamma (br 0.135) - "pydat3 mdme 862 1 0", # chi2c->rfp - - "pydat3 mdme 1034 1 0", # Upsilon->e+e- (br 0.0254) - "pydat3 mdme 1035 1 1", # Upsilon->mu+mu- (br 0.0248) - "pydat3 mdme 1036 1 0", # Upsilon->tau+tau- (br 0.0267) - "pydat3 mdme 1037 1 0", # Upsilon->ddbar - "pydat3 mdme 1038 1 0", # Upsilon->uubar - "pydat3 mdme 1039 1 0", # Upsilon->ssbar - "pydat3 mdme 1040 1 0", # Upsilon->ccbar - "pydat3 mdme 1041 1 0", # Upsilon->ggg - "pydat3 mdme 1042 1 0", # Upsilon->gamma gg - - "pydat3 mdme 1520 1 1", # chi0b->Upsilon gamma (br 0.02) - "pydat3 mdme 1521 1 0", # chi0b->gg - - "pydat3 mdme 1565 1 1", # chi1b->Upsilon gamma (br 0.35) - "pydat3 mdme 1566 1 0", # chi1b->gg - - "pydat3 mdme 1043 1 1", # chi2b->Upsilon gamma (br 0.22) - "pydat3 mdme 1044 1 0", # chi2b->gg - - ] - -Pythia.PythiaCommand += [ # NRQCD matrix elements - - "pypars parp 141 1.16", # Jpsi-3S1(1) NRQCD ME - "pypars parp 142 0.0119", # Jpsi-3S1(8) NRQCD ME - "pypars parp 143 0.01", # Jpsi-1S0(8) NRQCD ME - "pypars parp 144 0.01", # Jpsi-3P0(8) NRQCD ME / m_c^2 - "pypars parp 145 0.05", # chi_c0-3P0(1) NRQCD ME / m_c^2 - - "pypars parp 146 9.28", # Upsilon-3S1(1) NRQCD ME - "pypars parp 147 0.15", # Upsilon-3S1(8) NRQCD ME - "pypars parp 148 0.02", # Upsilon-1S0(8) NRQCD ME - "pypars parp 149 0.02", # Upsilon-3P0(8) NRQCD ME / m_b^2 - "pypars parp 150 0.085", # chi_b0-3P0(1) NRQCD ME / m_b^2 - - ] - -Pythia.PythiaCommand += [ - - "pysubs ckin 3 1.", # lower pT cut on hard process in GeV - - # LHAPDF parameters for CTEQ6M - #"pypars mstp 51 10050", - #"pypars mstp 53 10050", - #"pypars mstp 55 10050", - #"pypars mstp 52 2", - #"pypars mstp 54 2", - #"pypars mstp 56 2", - - - #"pypars mstp 61 0", # inital state showers off - #"pypars mstp 71 0", # final state showers off - #"pypars mstp 111 0" # fragmentation/hadronisation off - - ] - -Pythia.PythiaCommand += ["pyinit pylistf 1", - "pystat mstat 1", - "pyinit dumpr 0 3",#dump this event range to screen - ] - - -#------- Muon Trigger Cuts -------- -BSignalFilter = topAlg.BSignalFilter -#-------------- Level 1 Muon Cuts --------------------- -BSignalFilter.LVL1MuonCutOn = "true" -BSignalFilter.LVL1MuonCutPT = 6000.0 -BSignalFilter.LVL1MuonCutEta = 2.5 -#-------------- Level 2 lepton cuts ------------------- -# These will only function if LVL1 trigger used. -BSignalFilter.LVL2MuonCutOn = "true" -BSignalFilter.LVL2MuonCutPT = 4000.0 -BSignalFilter.LVL2MuonCutEta = 2.5 - -try: - Stream1.RequireAlgs += ["BSignalFilter"] -except Exception, e: - pass - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/CloseAntibQuark.py b/Generators/EvtGen_i/share/CloseAntibQuark.py deleted file mode 100644 index f5dae1a76f2eac9e2ec17b1b967525e21ec07582..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CloseAntibQuark.py +++ /dev/null @@ -1,377 +0,0 @@ -PythiaB = topAlg.PythiaB -PythiaB.PythiaCommand += [ "pydat3 mdme 863 1 3" - ,"pydat3 mdme 864 1 3" - ,"pydat3 mdme 865 1 3" - ,"pydat3 mdme 866 1 3" - ,"pydat3 mdme 867 1 3" - ,"pydat3 mdme 868 1 3" - ,"pydat3 mdme 869 1 3" - ,"pydat3 mdme 870 1 3" - ,"pydat3 mdme 871 1 3" - ,"pydat3 mdme 872 1 3" - ,"pydat3 mdme 873 1 3" - ,"pydat3 mdme 874 1 3" - ,"pydat3 mdme 875 1 3" - ,"pydat3 mdme 876 1 3" - ,"pydat3 mdme 877 1 3" - ,"pydat3 mdme 878 1 3" - ,"pydat3 mdme 879 1 3" - ,"pydat3 mdme 880 1 3" - ,"pydat3 mdme 881 1 3" - ,"pydat3 mdme 882 1 3" - ,"pydat3 mdme 883 1 3" - ,"pydat3 mdme 884 1 3" - ,"pydat3 mdme 885 1 3" - ,"pydat3 mdme 886 1 3" - ,"pydat3 mdme 887 1 3" - ,"pydat3 mdme 888 1 3" - ,"pydat3 mdme 889 1 3" - ,"pydat3 mdme 890 1 3" - ,"pydat3 mdme 891 1 3" - ,"pydat3 mdme 892 1 3" - ,"pydat3 mdme 893 1 3" - ,"pydat3 mdme 894 1 3" - ,"pydat3 mdme 895 1 3" - ,"pydat3 mdme 896 1 3" - ,"pydat3 mdme 897 1 3" - ,"pydat3 mdme 898 1 3" - ,"pydat3 mdme 908 1 3" - ,"pydat3 mdme 909 1 3" - ,"pydat3 mdme 910 1 3" - ,"pydat3 mdme 911 1 3" - ,"pydat3 mdme 912 1 3" - ,"pydat3 mdme 913 1 3" - ,"pydat3 mdme 914 1 3" - ,"pydat3 mdme 915 1 3" - ,"pydat3 mdme 916 1 3" - ,"pydat3 mdme 917 1 3" - ,"pydat3 mdme 918 1 3" - ,"pydat3 mdme 919 1 3" - ,"pydat3 mdme 920 1 3" - ,"pydat3 mdme 921 1 3" - ,"pydat3 mdme 922 1 3" - ,"pydat3 mdme 923 1 3" - ,"pydat3 mdme 924 1 3" - ,"pydat3 mdme 925 1 3" - ,"pydat3 mdme 926 1 3" - ,"pydat3 mdme 927 1 3" - ,"pydat3 mdme 928 1 3" - ,"pydat3 mdme 929 1 3" - ,"pydat3 mdme 930 1 3" - ,"pydat3 mdme 931 1 3" - ,"pydat3 mdme 932 1 3" - ,"pydat3 mdme 933 1 3" - ,"pydat3 mdme 934 1 3" - ,"pydat3 mdme 935 1 3" - ,"pydat3 mdme 936 1 3" - ,"pydat3 mdme 937 1 3" - ,"pydat3 mdme 938 1 3" - ,"pydat3 mdme 939 1 3" - ,"pydat3 mdme 940 1 3" - ,"pydat3 mdme 941 1 3" - ,"pydat3 mdme 942 1 3" - ,"pydat3 mdme 943 1 3" - ,"pydat3 mdme 953 1 3" - ,"pydat3 mdme 954 1 3" - ,"pydat3 mdme 955 1 3" - ,"pydat3 mdme 956 1 3" - ,"pydat3 mdme 957 1 3" - ,"pydat3 mdme 958 1 3" - ,"pydat3 mdme 959 1 3" - ,"pydat3 mdme 960 1 3" - ,"pydat3 mdme 961 1 3" - ,"pydat3 mdme 962 1 3" - ,"pydat3 mdme 963 1 3" - ,"pydat3 mdme 964 1 3" - ,"pydat3 mdme 965 1 3" - ,"pydat3 mdme 966 1 3" - ,"pydat3 mdme 967 1 3" - ,"pydat3 mdme 968 1 3" - ,"pydat3 mdme 969 1 3" - ,"pydat3 mdme 970 1 3" - ,"pydat3 mdme 971 1 3" - ,"pydat3 mdme 972 1 3" - ,"pydat3 mdme 973 1 3" - ,"pydat3 mdme 974 1 3" - ,"pydat3 mdme 975 1 3" - ,"pydat3 mdme 976 1 3" - ,"pydat3 mdme 977 1 3" - ,"pydat3 mdme 978 1 3" - ,"pydat3 mdme 979 1 3" - ,"pydat3 mdme 980 1 3" - ,"pydat3 mdme 981 1 3" - ,"pydat3 mdme 982 1 3" - ,"pydat3 mdme 983 1 3" - ,"pydat3 mdme 984 1 3" - ,"pydat3 mdme 985 1 3" - ,"pydat3 mdme 986 1 3" - ,"pydat3 mdme 987 1 3" - ,"pydat3 mdme 988 1 3" - ,"pydat3 mdme 989 1 3" - ,"pydat3 mdme 990 1 3" - ,"pydat3 mdme 991 1 3" - ,"pydat3 mdme 997 1 3" - ,"pydat3 mdme 998 1 3" - ,"pydat3 mdme 999 1 3" - ,"pydat3 mdme 1000 1 3" - ,"pydat3 mdme 1001 1 3" - ,"pydat3 mdme 1002 1 3" - ,"pydat3 mdme 1003 1 3" - ,"pydat3 mdme 1004 1 3" - ,"pydat3 mdme 1005 1 3" - ,"pydat3 mdme 1006 1 3" - ,"pydat3 mdme 1007 1 3" - ,"pydat3 mdme 1008 1 3" - ,"pydat3 mdme 1009 1 3" - ,"pydat3 mdme 1010 1 3" - ,"pydat3 mdme 1011 1 3" - ,"pydat3 mdme 1012 1 3" - ,"pydat3 mdme 1013 1 3" - ,"pydat3 mdme 1014 1 3" - ,"pydat3 mdme 1015 1 3" - ,"pydat3 mdme 1016 1 3" - ,"pydat3 mdme 1017 1 3" - ,"pydat3 mdme 1018 1 3" - ,"pydat3 mdme 1019 1 3" - ,"pydat3 mdme 1020 1 3" - ,"pydat3 mdme 1021 1 3" - ,"pydat3 mdme 1022 1 3" - ,"pydat3 mdme 1023 1 3" - ,"pydat3 mdme 1024 1 3" - ,"pydat3 mdme 1025 1 3" - ,"pydat3 mdme 1026 1 3" - ,"pydat3 mdme 1027 1 3" - ,"pydat3 mdme 1219 1 2" - ,"pydat3 mdme 1220 1 2" - ,"pydat3 mdme 1221 1 2" - ,"pydat3 mdme 1222 1 2" - ,"pydat3 mdme 1223 1 2" - ,"pydat3 mdme 1224 1 2" - ,"pydat3 mdme 1225 1 2" - ,"pydat3 mdme 1226 1 2" - ,"pydat3 mdme 1227 1 2" - ,"pydat3 mdme 1228 1 2" - ,"pydat3 mdme 1229 1 2" - ,"pydat3 mdme 1230 1 2" - ,"pydat3 mdme 1231 1 2" - ,"pydat3 mdme 1232 1 2" - ,"pydat3 mdme 1233 1 2" - ,"pydat3 mdme 1234 1 2" - ,"pydat3 mdme 1235 1 2" - ,"pydat3 mdme 1236 1 2" - ,"pydat3 mdme 1237 1 2" - ,"pydat3 mdme 1238 1 2" - ,"pydat3 mdme 1239 1 2" - ,"pydat3 mdme 1240 1 2" - ,"pydat3 mdme 1241 1 2" - ,"pydat3 mdme 1242 1 2" - ,"pydat3 mdme 1243 1 2" - ,"pydat3 mdme 1244 1 2" - ,"pydat3 mdme 1245 1 2" - ,"pydat3 mdme 1246 1 2" - ,"pydat3 mdme 1247 1 2" - ,"pydat3 mdme 1248 1 2" - ,"pydat3 mdme 1249 1 2" - ,"pydat3 mdme 1250 1 2" - ,"pydat3 mdme 1251 1 2" - ,"pydat3 mdme 1252 1 2" - ,"pydat3 mdme 1253 1 2" - ,"pydat3 mdme 1258 1 2" - ,"pydat3 mdme 1259 1 2" - ,"pydat3 mdme 1260 1 2" - ,"pydat3 mdme 1261 1 2" - ,"pydat3 mdme 1262 1 2" - ,"pydat3 mdme 1263 1 2" - ,"pydat3 mdme 1264 1 2" - ,"pydat3 mdme 1265 1 2" - ,"pydat3 mdme 1266 1 2" - ,"pydat3 mdme 1267 1 2" - ,"pydat3 mdme 1268 1 2" - ,"pydat3 mdme 1269 1 2" - ,"pydat3 mdme 1270 1 2" - ,"pydat3 mdme 1271 1 2" - ,"pydat3 mdme 1272 1 2" - ,"pydat3 mdme 1273 1 2" - ,"pydat3 mdme 1274 1 2" - ,"pydat3 mdme 1275 1 2" - ,"pydat3 mdme 1280 1 2" - ,"pydat3 mdme 1281 1 2" - ,"pydat3 mdme 1282 1 2" - ,"pydat3 mdme 1283 1 2" - ,"pydat3 mdme 1284 1 2" - ,"pydat3 mdme 1285 1 2" - ,"pydat3 mdme 1286 1 2" - ,"pydat3 mdme 1287 1 2" - ,"pydat3 mdme 1288 1 2" - ,"pydat3 mdme 1290 1 2" - ,"pydat3 mdme 1291 1 2" - ,"pydat3 mdme 1292 1 2" - ,"pydat3 mdme 1293 1 2" - ,"pydat3 mdme 1294 1 2" - ,"pydat3 mdme 1295 1 2" - ,"pydat3 mdme 1296 1 2" - ,"pydat3 mdme 1297 1 2" - ,"pydat3 mdme 1298 1 2" - ,"pydat3 mdme 1299 1 2" - ,"pydat3 mdme 1300 1 2" - ,"pydat3 mdme 1301 1 2" - ,"pydat3 mdme 1302 1 2" - ,"pydat3 mdme 1303 1 2" - ,"pydat3 mdme 1304 1 2" - ,"pydat3 mdme 1305 1 2" - ,"pydat3 mdme 1306 1 2" - ,"pydat3 mdme 1307 1 2" - ,"pydat3 mdme 1308 1 2" - ,"pydat3 mdme 1309 1 2" - ,"pydat3 mdme 1310 1 2" - ,"pydat3 mdme 1311 1 2" - ,"pydat3 mdme 1312 1 2" - ,"pydat3 mdme 1313 1 2" - ,"pydat3 mdme 1314 1 2" - ,"pydat3 mdme 1315 1 2" - ,"pydat3 mdme 1316 1 2" - ,"pydat3 mdme 1317 1 2" - ,"pydat3 mdme 1318 1 2" - ,"pydat3 mdme 1319 1 2" - ,"pydat3 mdme 1320 1 2" - ,"pydat3 mdme 1321 1 2" - ,"pydat3 mdme 1322 1 2" - ,"pydat3 mdme 1323 1 2" - ,"pydat3 mdme 1324 1 2" - ,"pydat3 mdme 1325 1 2" - ,"pydat3 mdme 1326 1 2" - ,"pydat3 mdme 1327 1 2" - ,"pydat3 mdme 1328 1 2" - ,"pydat3 mdme 1329 1 2" - ,"pydat3 mdme 1330 1 2" - ,"pydat3 mdme 1331 1 2" - ,"pydat3 mdme 1332 1 2" - ,"pydat3 mdme 1333 1 2" - ,"pydat3 mdme 1334 1 2" - ,"pydat3 mdme 1335 1 2" - ,"pydat3 mdme 1336 1 2" - ,"pydat3 mdme 1337 1 2" - ,"pydat3 mdme 1338 1 2" - ,"pydat3 mdme 1339 1 2" - ,"pydat3 mdme 1340 1 2" - ,"pydat3 mdme 1341 1 2" - ,"pydat3 mdme 1342 1 2" - ,"pydat3 mdme 1343 1 2" - ,"pydat3 mdme 1344 1 2" - ,"pydat3 mdme 1345 1 2" - ,"pydat3 mdme 1346 1 2" - ,"pydat3 mdme 1347 1 2" - ,"pydat3 mdme 1348 1 2" - ,"pydat3 mdme 1349 1 2" - ,"pydat3 mdme 1350 1 2" - ,"pydat3 mdme 1351 1 2" - ,"pydat3 mdme 1352 1 2" - ,"pydat3 mdme 1353 1 2" - ,"pydat3 mdme 1354 1 2" - ,"pydat3 mdme 1355 1 2" - ,"pydat3 mdme 1356 1 2" - ,"pydat3 mdme 1357 1 2" - ,"pydat3 mdme 1358 1 2" - ,"pydat3 mdme 1359 1 2" - ,"pydat3 mdme 1360 1 2" - ,"pydat3 mdme 1361 1 2" - ,"pydat3 mdme 1362 1 2" - ,"pydat3 mdme 1363 1 2" - ,"pydat3 mdme 1364 1 2" - ,"pydat3 mdme 1365 1 2" - ,"pydat3 mdme 1366 1 2" - ,"pydat3 mdme 1367 1 2" - ,"pydat3 mdme 1368 1 2" - ,"pydat3 mdme 1369 1 2" - ,"pydat3 mdme 1370 1 2" - ,"pydat3 mdme 1371 1 2" - ,"pydat3 mdme 1372 1 2" - ,"pydat3 mdme 1373 1 2" - ,"pydat3 mdme 1374 1 2" - ,"pydat3 mdme 1375 1 2" - ,"pydat3 mdme 1376 1 2" - ,"pydat3 mdme 1377 1 2" - ,"pydat3 mdme 1378 1 2" - ,"pydat3 mdme 1379 1 2" - ,"pydat3 mdme 1380 1 2" - ,"pydat3 mdme 1381 1 2" - ,"pydat3 mdme 1382 1 2" - ,"pydat3 mdme 1383 1 2" - ,"pydat3 mdme 1384 1 2" - ,"pydat3 mdme 1385 1 2" - ,"pydat3 mdme 1386 1 2" - ,"pydat3 mdme 1387 1 2" - ,"pydat3 mdme 1388 1 2" - ,"pydat3 mdme 1389 1 2" - ,"pydat3 mdme 1390 1 2" - ,"pydat3 mdme 1391 1 2" - ,"pydat3 mdme 1392 1 2" - ,"pydat3 mdme 1393 1 2" - ,"pydat3 mdme 1394 1 2" - ,"pydat3 mdme 1395 1 2" - ,"pydat3 mdme 1396 1 2" - ,"pydat3 mdme 1397 1 2" - ,"pydat3 mdme 1398 1 2" - ,"pydat3 mdme 1399 1 2" - ,"pydat3 mdme 1400 1 2" - ,"pydat3 mdme 1401 1 2" - ,"pydat3 mdme 1402 1 2" - ,"pydat3 mdme 1403 1 2" - ,"pydat3 mdme 1404 1 2" - ,"pydat3 mdme 1405 1 2" - ,"pydat3 mdme 1406 1 2" - ,"pydat3 mdme 1407 1 2" - ,"pydat3 mdme 1408 1 2" - ,"pydat3 mdme 1409 1 2" - ,"pydat3 mdme 1410 1 2" - ,"pydat3 mdme 1411 1 2" - ,"pydat3 mdme 1412 1 2" - ,"pydat3 mdme 1413 1 2" - ,"pydat3 mdme 1414 1 2" - ,"pydat3 mdme 1415 1 2" - ,"pydat3 mdme 1416 1 2" - ,"pydat3 mdme 1417 1 2" - ,"pydat3 mdme 1418 1 2" - ,"pydat3 mdme 1419 1 2" - ,"pydat3 mdme 1420 1 2" - ,"pydat3 mdme 1421 1 2" - ,"pydat3 mdme 1422 1 2" - ,"pydat3 mdme 1423 1 2" - ,"pydat3 mdme 1424 1 2" - ,"pydat3 mdme 1425 1 2" - ,"pydat3 mdme 1426 1 2" - ,"pydat3 mdme 1427 1 2" - ,"pydat3 mdme 1428 1 2" - ,"pydat3 mdme 1429 1 2" - ,"pydat3 mdme 1430 1 2" - ,"pydat3 mdme 1431 1 2" - ,"pydat3 mdme 1432 1 2" - ,"pydat3 mdme 1433 1 2" - ,"pydat3 mdme 1434 1 2" - ,"pydat3 mdme 1435 1 2" - ,"pydat3 mdme 1436 1 2" - ,"pydat3 mdme 1437 1 2" - ,"pydat3 mdme 1438 1 2" - ,"pydat3 mdme 1439 1 2" - ,"pydat3 mdme 1440 1 2" - ,"pydat3 mdme 1441 1 2" - ,"pydat3 mdme 1442 1 2" - ,"pydat3 mdme 1443 1 2" - ,"pydat3 mdme 1444 1 2" - ,"pydat3 mdme 1445 1 2" - ,"pydat3 mdme 1446 1 2" - ,"pydat3 mdme 1447 1 2" - ,"pydat3 mdme 1448 1 2" - ,"pydat3 mdme 1449 1 2" - ,"pydat3 mdme 1450 1 2" - ,"pydat3 mdme 1451 1 2" - ,"pydat3 mdme 545 1 2" - ,"pydat3 mdme 546 1 2" - ,"pydat3 mdme 547 1 2" - ,"pydat3 mdme 548 1 2" - ,"pydat3 mdme 549 1 2" - ,"pydat3 mdme 550 1 2" - ,"pydat3 mdme 551 1 2" - ,"pydat3 mdme 552 1 2" - ,"pydat3 mdme 553 1 2" - ] diff --git a/Generators/EvtGen_i/share/CloseD0bar.py b/Generators/EvtGen_i/share/CloseD0bar.py deleted file mode 100644 index 9040364402230d322017946f0ef82c3fe2be0dcf..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/CloseD0bar.py +++ /dev/null @@ -1,67 +0,0 @@ -# -# $Id: CloseD0bar.py,v 1.1 2007-03-01 17:15:38 msmizans Exp $ -# -PythiaB = Algorithm( "PythiaB" ) -PythiaB.PythiaCommand += [ - "pydat3 mdme 747 1 2", - "pydat3 mdme 748 1 2", - "pydat3 mdme 749 1 2", - "pydat3 mdme 750 1 2", - "pydat3 mdme 751 1 2", - "pydat3 mdme 752 1 2", - "pydat3 mdme 753 1 2", - "pydat3 mdme 754 1 2", - "pydat3 mdme 755 1 2", - "pydat3 mdme 756 1 2", - "pydat3 mdme 757 1 2", - "pydat3 mdme 758 1 2", - "pydat3 mdme 759 1 2", - "pydat3 mdme 760 1 2", - "pydat3 mdme 761 1 2", - "pydat3 mdme 762 1 2", - "pydat3 mdme 763 1 2", - "pydat3 mdme 764 1 2", - "pydat3 mdme 765 1 2", - "pydat3 mdme 766 1 2", - "pydat3 mdme 767 1 2", - "pydat3 mdme 768 1 2", - "pydat3 mdme 769 1 2", - "pydat3 mdme 770 1 2", - "pydat3 mdme 771 1 2", - "pydat3 mdme 772 1 2", - "pydat3 mdme 773 1 2", - "pydat3 mdme 774 1 2", - "pydat3 mdme 775 1 2", - "pydat3 mdme 776 1 2", - "pydat3 mdme 777 1 2", - "pydat3 mdme 778 1 2", - "pydat3 mdme 779 1 2", - "pydat3 mdme 780 1 2", - "pydat3 mdme 781 1 2", - "pydat3 mdme 782 1 2", - "pydat3 mdme 783 1 2", - "pydat3 mdme 784 1 2", - "pydat3 mdme 785 1 2", - "pydat3 mdme 786 1 2", - "pydat3 mdme 787 1 2", - "pydat3 mdme 788 1 2", - "pydat3 mdme 789 1 2", - "pydat3 mdme 790 1 2", - "pydat3 mdme 791 1 2", - "pydat3 mdme 792 1 2", - "pydat3 mdme 793 1 2", - "pydat3 mdme 794 1 2", - "pydat3 mdme 795 1 2", - "pydat3 mdme 796 1 2", - "pydat3 mdme 797 1 2", - "pydat3 mdme 798 1 2", - "pydat3 mdme 799 1 2", - "pydat3 mdme 800 1 2", - "pydat3 mdme 801 1 2", - "pydat3 mdme 802 1 2", - "pydat3 mdme 803 1 2", - "pydat3 mdme 804 1 2", - "pydat3 mdme 805 1 2", - "pydat3 mdme 806 1 2", - "pydat3 mdme 807 1 2" - ] diff --git a/Generators/EvtGen_i/share/DXphipi.py b/Generators/EvtGen_i/share/DXphipi.py deleted file mode 100644 index eb67a18adef6ea5cab47f001c8daa7f5eb49b989..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/DXphipi.py +++ /dev/null @@ -1,148 +0,0 @@ -# -# $Id: DXphipi.py,v 1.1 2007-03-01 17:15:46 msmizans Exp $ -# -PythiaB = Algorithm( "PythiaB" ) - -# For Ds- -> phipi-: open Ds channels only for particle Ds+ -if DXChannel == "Dsphipi": - PythiaB.PythiaCommand += [ "pydat3 mdme 818 1 2" - ,"pydat3 mdme 819 1 2" - ,"pydat3 mdme 820 1 2" - ,"pydat3 mdme 821 1 2" - ,"pydat3 mdme 822 1 2" - ,"pydat3 mdme 823 1 2" - ,"pydat3 mdme 824 1 2" - ,"pydat3 mdme 825 1 2" - ,"pydat3 mdme 826 1 2" - ,"pydat3 mdme 827 1 2" - ,"pydat3 mdme 828 1 2" - ,"pydat3 mdme 829 1 2" - ,"pydat3 mdme 830 1 2" - ,"pydat3 mdme 831 1 2" - ,"pydat3 mdme 832 1 2" - ,"pydat3 mdme 833 1 2" - ,"pydat3 mdme 834 1 2" - ,"pydat3 mdme 835 1 2" - ,"pydat3 mdme 836 1 2" - ,"pydat3 mdme 837 1 2" - ,"pydat3 mdme 838 1 2" - ,"pydat3 mdme 839 1 2" - ,"pydat3 mdme 840 1 2" - ,"pydat3 mdme 841 1 2" - ,"pydat3 mdme 842 1 2" - ,"pydat3 mdme 843 1 2" - ,"pydat3 mdme 844 1 2" - ,"pydat3 mdme 845 1 2" - ,"pydat3 mdme 846 1 2" - ,"pydat3 mdme 847 1 2" - ,"pydat3 mdme 848 1 2" - ,"pydat3 mdme 849 1 2" - ,"pydat3 mdme 850 1 2" - ] - - -# For Ds+ -> phipi+: open Ds channels only for antiparticle Ds- -if DXChannel == "Dsbarphipi": - PythiaB.PythiaCommand += [ "pydat3 mdme 818 1 3" - ,"pydat3 mdme 819 1 3" - ,"pydat3 mdme 820 1 3" - ,"pydat3 mdme 821 1 3" - ,"pydat3 mdme 822 1 3" - ,"pydat3 mdme 823 1 3" - ,"pydat3 mdme 824 1 3" - ,"pydat3 mdme 825 1 3" - ,"pydat3 mdme 826 1 3" - ,"pydat3 mdme 827 1 3" - ,"pydat3 mdme 828 1 3" - ,"pydat3 mdme 829 1 3" - ,"pydat3 mdme 830 1 3" - ,"pydat3 mdme 831 1 3" - ,"pydat3 mdme 832 1 3" - ,"pydat3 mdme 833 1 3" - ,"pydat3 mdme 834 1 3" - ,"pydat3 mdme 835 1 3" - ,"pydat3 mdme 836 1 3" - ,"pydat3 mdme 837 1 3" - ,"pydat3 mdme 838 1 3" - ,"pydat3 mdme 839 1 3" - ,"pydat3 mdme 840 1 3" - ,"pydat3 mdme 841 1 3" - ,"pydat3 mdme 842 1 3" - ,"pydat3 mdme 843 1 3" - ,"pydat3 mdme 844 1 3" - ,"pydat3 mdme 845 1 3" - ,"pydat3 mdme 846 1 3" - ,"pydat3 mdme 847 1 3" - ,"pydat3 mdme 848 1 3" - ,"pydat3 mdme 849 1 3" - ,"pydat3 mdme 850 1 3" - ] - - -# For D- -> phipi-: open D channels only for particle D+ -if DXChannel == "Dphipi": - PythiaB.PythiaCommand += [ "pydat3 mdme 673 1 2" - ,"pydat3 mdme 674 1 2" - ,"pydat3 mdme 675 1 2" - ,"pydat3 mdme 676 1 2" - ,"pydat3 mdme 677 1 2" - ,"pydat3 mdme 678 1 2" - ,"pydat3 mdme 679 1 2" - ,"pydat3 mdme 680 1 2" - ,"pydat3 mdme 681 1 2" - ,"pydat3 mdme 682 1 2" - ,"pydat3 mdme 683 1 2" - ,"pydat3 mdme 684 1 2" - ,"pydat3 mdme 685 1 2" - ,"pydat3 mdme 686 1 2" - ,"pydat3 mdme 687 1 2" - ,"pydat3 mdme 688 1 2" - ,"pydat3 mdme 689 1 2" - ,"pydat3 mdme 690 1 2" - ,"pydat3 mdme 691 1 2" - ,"pydat3 mdme 692 1 2" - ,"pydat3 mdme 693 1 2" - ,"pydat3 mdme 694 1 2" - ,"pydat3 mdme 695 1 2" - ,"pydat3 mdme 696 1 2" - ,"pydat3 mdme 697 1 2" - ,"pydat3 mdme 698 1 2" - ,"pydat3 mdme 699 1 2" - ,"pydat3 mdme 700 1 2" - ,"pydat3 mdme 701 1 2" - ,"pydat3 mdme 702 1 2" - ,"pydat3 mdme 703 1 2" - ,"pydat3 mdme 704 1 2" - ,"pydat3 mdme 705 1 2" - ,"pydat3 mdme 706 1 2" - ,"pydat3 mdme 707 1 2" - ,"pydat3 mdme 708 1 2" - ,"pydat3 mdme 709 1 2" - ,"pydat3 mdme 710 1 2" - ,"pydat3 mdme 711 1 2" - ,"pydat3 mdme 712 1 2" - ,"pydat3 mdme 713 1 2" - ,"pydat3 mdme 714 1 2" - ,"pydat3 mdme 715 1 2" - ,"pydat3 mdme 716 1 2" - ,"pydat3 mdme 717 1 2" - ,"pydat3 mdme 718 1 2" - ,"pydat3 mdme 719 1 2" - ,"pydat3 mdme 720 1 2" - ,"pydat3 mdme 721 1 2" - ,"pydat3 mdme 722 1 2" - ,"pydat3 mdme 723 1 2" - ,"pydat3 mdme 724 1 2" - ,"pydat3 mdme 725 1 2" - ,"pydat3 mdme 726 1 2" - ,"pydat3 mdme 727 1 2" - ,"pydat3 mdme 728 1 2" - ,"pydat3 mdme 729 1 2" - ,"pydat3 mdme 730 1 2" - ,"pydat3 mdme 731 1 2" - ,"pydat3 mdme 732 1 2" - ,"pydat3 mdme 733 1 2" - ,"pydat3 mdme 734 1 2" - ,"pydat3 mdme 735 1 2" - ] - diff --git a/Generators/EvtGen_i/share/Dsphipi.py b/Generators/EvtGen_i/share/Dsphipi.py deleted file mode 100644 index cf1b8ee47a927d6f1c6417f60c592146f70e73cc..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/Dsphipi.py +++ /dev/null @@ -1,35 +0,0 @@ -PythiaB = topAlg.PythiaB -PythiaB.PythiaCommand += [ "pydat3 mdme 818 1 2" - ,"pydat3 mdme 819 1 2" - ,"pydat3 mdme 820 1 2" - ,"pydat3 mdme 821 1 2" - ,"pydat3 mdme 822 1 2" - ,"pydat3 mdme 823 1 2" - ,"pydat3 mdme 824 1 2" - ,"pydat3 mdme 825 1 2" - ,"pydat3 mdme 826 1 2" - ,"pydat3 mdme 827 1 2" - ,"pydat3 mdme 828 1 2" - ,"pydat3 mdme 829 1 2" - ,"pydat3 mdme 830 1 2" - ,"pydat3 mdme 831 1 2" - ,"pydat3 mdme 832 1 2" - ,"pydat3 mdme 833 1 2" - ,"pydat3 mdme 834 1 2" - ,"pydat3 mdme 835 1 2" - ,"pydat3 mdme 836 1 2" - ,"pydat3 mdme 837 1 2" - ,"pydat3 mdme 838 1 2" - ,"pydat3 mdme 839 1 2" - ,"pydat3 mdme 840 1 2" - ,"pydat3 mdme 841 1 2" - ,"pydat3 mdme 842 1 2" - ,"pydat3 mdme 843 1 2" - ,"pydat3 mdme 844 1 2" - ,"pydat3 mdme 845 1 2" - ,"pydat3 mdme 846 1 2" - ,"pydat3 mdme 847 1 2" - ,"pydat3 mdme 848 1 2" - ,"pydat3 mdme 849 1 2" - ,"pydat3 mdme 850 1 2" - ] diff --git a/Generators/EvtGen_i/share/Jpsichannels.py b/Generators/EvtGen_i/share/Jpsichannels.py deleted file mode 100644 index b9a3e9fbd590e7d21f6d3e96bc3fe6766f8cdfcf..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/Jpsichannels.py +++ /dev/null @@ -1,400 +0,0 @@ -PythiaB = topAlg.PythiaB -# Force selected anti-b-quark hadron decays (B+, B0, Bs, anti-Lambda_b etc.) -# -# B0 decays -# repoint to place 4501, 96 decays including new ones -PythiaB.PythiaCommand += [ "pydat3 mdcy 134 2 4501" ,"pydat3 mdcy 134 3 96" ,"pydat3 mdcy 134 1 1" - ,"pydat3 mdme 4501 1 3" ,"pydat3 mdme 4501 2 42" ,"pydat3 brat 4501 0.02000" ,"pydat3 kfdp 4501 1 12" ,"pydat3 kfdp 4501 2 -11" ,"pydat3 kfdp 4501 3 -411" - ,"pydat3 mdme 4502 1 3" ,"pydat3 mdme 4502 2 42" ,"pydat3 brat 4502 0.05500" ,"pydat3 kfdp 4502 1 12" ,"pydat3 kfdp 4502 2 -11" ,"pydat3 kfdp 4502 3 -413" - ,"pydat3 mdme 4503 1 3" ,"pydat3 mdme 4503 2 42" ,"pydat3 brat 4503 0.00500" ,"pydat3 kfdp 4503 1 12" ,"pydat3 kfdp 4503 2 -11" ,"pydat3 kfdp 4503 3 -10413" - ,"pydat3 mdme 4504 1 3" ,"pydat3 mdme 4504 2 42" ,"pydat3 brat 4504 0.00500" ,"pydat3 kfdp 4504 1 12" ,"pydat3 kfdp 4504 2 -11" ,"pydat3 kfdp 4504 3 -10411" - ,"pydat3 mdme 4505 1 3" ,"pydat3 mdme 4505 2 42" ,"pydat3 brat 4505 0.00800" ,"pydat3 kfdp 4505 1 12" ,"pydat3 kfdp 4505 2 -11" ,"pydat3 kfdp 4505 3 -20413" - ,"pydat3 mdme 4506 1 3" ,"pydat3 mdme 4506 2 42" ,"pydat3 brat 4506 0.01200" ,"pydat3 kfdp 4506 1 12" ,"pydat3 kfdp 4506 2 -11" ,"pydat3 kfdp 4506 3 -415" - ,"pydat3 mdme 4507 1 3" ,"pydat3 mdme 4507 2 42" ,"pydat3 brat 4507 0.02000" ,"pydat3 kfdp 4507 1 14" ,"pydat3 kfdp 4507 2 -13" ,"pydat3 kfdp 4507 3 -411" - ,"pydat3 mdme 4508 1 3" ,"pydat3 mdme 4508 2 42" ,"pydat3 brat 4508 0.05500" ,"pydat3 kfdp 4508 1 14" ,"pydat3 kfdp 4508 2 -13" ,"pydat3 kfdp 4508 3 -413" - ,"pydat3 mdme 4509 1 3" ,"pydat3 mdme 4509 2 42" ,"pydat3 brat 4509 0.00500" ,"pydat3 kfdp 4509 1 14" ,"pydat3 kfdp 4509 2 -13" ,"pydat3 kfdp 4509 3 -10413" - ,"pydat3 mdme 4510 1 3" ,"pydat3 mdme 4510 2 42" ,"pydat3 brat 4510 0.00500" ,"pydat3 kfdp 4510 1 14" ,"pydat3 kfdp 4510 2 -13" ,"pydat3 kfdp 4510 3 -10411" - ,"pydat3 mdme 4511 1 3" ,"pydat3 mdme 4511 2 42" ,"pydat3 brat 4511 0.00800" ,"pydat3 kfdp 4511 1 14" ,"pydat3 kfdp 4511 2 -13" ,"pydat3 kfdp 4511 3 -20413" - ,"pydat3 mdme 4512 1 3" ,"pydat3 mdme 4512 2 42" ,"pydat3 brat 4512 0.01200" ,"pydat3 kfdp 4512 1 14" ,"pydat3 kfdp 4512 2 -13" ,"pydat3 kfdp 4512 3 -415" - ,"pydat3 mdme 4513 1 3" ,"pydat3 mdme 4513 2 42" ,"pydat3 brat 4513 0.01000" ,"pydat3 kfdp 4513 1 16" ,"pydat3 kfdp 4513 2 -15" ,"pydat3 kfdp 4513 3 -411" - ,"pydat3 mdme 4514 1 3" ,"pydat3 mdme 4514 2 42" ,"pydat3 brat 4514 0.03000" ,"pydat3 kfdp 4514 1 16" ,"pydat3 kfdp 4514 2 -15" ,"pydat3 kfdp 4514 3 -413" - ,"pydat3 mdme 4515 1 3" ,"pydat3 brat 4515 0.00350" ,"pydat3 kfdp 4515 1 -411" ,"pydat3 kfdp 4515 2 211" - ,"pydat3 mdme 4516 1 3" ,"pydat3 brat 4516 0.01100" ,"pydat3 kfdp 4516 1 -411" ,"pydat3 kfdp 4516 2 213" - ,"pydat3 mdme 4517 1 3" ,"pydat3 brat 4517 0.00550" ,"pydat3 kfdp 4517 1 -411" ,"pydat3 kfdp 4517 2 20213" - ,"pydat3 mdme 4518 1 3" ,"pydat3 brat 4518 0.00420" ,"pydat3 kfdp 4518 1 -413" ,"pydat3 kfdp 4518 2 211" - ,"pydat3 mdme 4519 1 3" ,"pydat3 brat 4519 0.00900" ,"pydat3 kfdp 4519 1 -413" ,"pydat3 kfdp 4519 2 213" - ,"pydat3 mdme 4520 1 3" ,"pydat3 brat 4520 0.01800" ,"pydat3 kfdp 4520 1 -413" ,"pydat3 kfdp 4520 2 20213" - ,"pydat3 mdme 4521 1 3" ,"pydat3 brat 4521 0.01500" ,"pydat3 kfdp 4521 1 -411" ,"pydat3 kfdp 4521 2 431" - ,"pydat3 mdme 4522 1 3" ,"pydat3 brat 4522 0.01850" ,"pydat3 kfdp 4522 1 -411" ,"pydat3 kfdp 4522 2 433" - ,"pydat3 mdme 4523 1 3" ,"pydat3 brat 4523 0.01350" ,"pydat3 kfdp 4523 1 -413" ,"pydat3 kfdp 4523 2 431" - ,"pydat3 mdme 4524 1 3" ,"pydat3 brat 4524 0.02500" ,"pydat3 kfdp 4524 1 -413" ,"pydat3 kfdp 4524 2 433" - ,"pydat3 mdme 4525 1 3" ,"pydat3 brat 4525 0.00040" ,"pydat3 kfdp 4525 1 441" ,"pydat3 kfdp 4525 2 311" - ,"pydat3 mdme 4526 1 3" ,"pydat3 brat 4526 0.00070" ,"pydat3 kfdp 4526 1 441" ,"pydat3 kfdp 4526 2 313" - ,"pydat3 mdme 4527 1 1" ,"pydat3 brat 4527 0.00094" ,"pydat3 kfdp 4527 1 443" ,"pydat3 kfdp 4527 2 311" - ,"pydat3 mdme 4528 1 1" ,"pydat3 brat 4528 0.00132" ,"pydat3 kfdp 4528 1 443" ,"pydat3 kfdp 4528 2 313" - ,"pydat3 mdme 4529 1 1" ,"pydat3 brat 4529 0.00013" ,"pydat3 kfdp 4529 1 20443" ,"pydat3 kfdp 4529 2 311" - ,"pydat3 mdme 4530 1 1" ,"pydat3 brat 4530 0.00018" ,"pydat3 kfdp 4530 1 20443" ,"pydat3 kfdp 4530 2 313" - ,"pydat3 mdme 4531 1 3" ,"pydat3 mdme 4531 2 48" ,"pydat3 brat 4531 0.42910" ,"pydat3 kfdp 4531 1 2" ,"pydat3 kfdp 4531 2 -1" ,"pydat3 kfdp 4531 3 -4" ,"pydat3 kfdp 4531 4 1" - ,"pydat3 mdme 4532 1 3" ,"pydat3 mdme 4532 2 13" ,"pydat3 brat 4532 0.08000" ,"pydat3 kfdp 4532 1 2" ,"pydat3 kfdp 4532 2 -4" ,"pydat3 kfdp 4532 3 -1" ,"pydat3 kfdp 4532 4 1" - ,"pydat3 mdme 4533 1 3" ,"pydat3 mdme 4533 2 13" ,"pydat3 brat 4533 0.07000" ,"pydat3 kfdp 4533 1 4" ,"pydat3 kfdp 4533 2 -3" ,"pydat3 kfdp 4533 3 -4" ,"pydat3 kfdp 4533 4 1" - ,"pydat3 mdme 4534 1 3" ,"pydat3 mdme 4534 2 13" ,"pydat3 brat 4534 0.02000" ,"pydat3 kfdp 4534 1 4" ,"pydat3 kfdp 4534 2 -4" ,"pydat3 kfdp 4534 3 -3" ,"pydat3 kfdp 4534 4 1" - ,"pydat3 mdme 4535 1 3" ,"pydat3 mdme 4535 2 42" ,"pydat3 brat 4535 0.01500" ,"pydat3 kfdp 4535 1 2" ,"pydat3 kfdp 4535 2 -1" ,"pydat3 kfdp 4535 3 -2" ,"pydat3 kfdp 4535 4 1" - ,"pydat3 mdme 4536 1 3" ,"pydat3 mdme 4536 2 42" ,"pydat3 brat 4536 0.00500" ,"pydat3 kfdp 4536 1 4" ,"pydat3 kfdp 4536 2 -3" ,"pydat3 kfdp 4536 3 -2" ,"pydat3 kfdp 4536 4 1" - ,"pydat3 mdme 4537 1 1" ,"pydat3 brat 4537 0.00140" ,"pydat3 kfdp 4537 1 443" ,"pydat3 kfdp 4537 2 10313" - ,"pydat3 mdme 4538 1 1" ,"pydat3 brat 4538 0.00003" ,"pydat3 kfdp 4538 1 443" ,"pydat3 kfdp 4538 2 111" - ,"pydat3 mdme 4539 1 1" ,"pydat3 brat 4539 0.00001" ,"pydat3 kfdp 4539 1 443" ,"pydat3 kfdp 4539 2 221" - ,"pydat3 mdme 4540 1 1" ,"pydat3 brat 4540 0.00002" ,"pydat3 kfdp 4540 1 443" ,"pydat3 kfdp 4540 2 113" - ,"pydat3 mdme 4541 1 1" ,"pydat3 brat 4541 0.00002" ,"pydat3 kfdp 4541 1 443" ,"pydat3 kfdp 4541 2 223" - ,"pydat3 mdme 4542 1 1" ,"pydat3 brat 4542 0.00001" ,"pydat3 kfdp 4542 1 443" ,"pydat3 kfdp 4542 2 333" - ,"pydat3 mdme 4543 1 1" ,"pydat3 brat 4543 0.00001" ,"pydat3 kfdp 4543 1 443" ,"pydat3 kfdp 4543 2 331" - ,"pydat3 mdme 4544 1 1" ,"pydat3 brat 4544 0.00029" ,"pydat3 kfdp 4544 1 443" ,"pydat3 kfdp 4544 2 321" ,"pydat3 kfdp 4544 3 -211" - ,"pydat3 mdme 4545 1 1" ,"pydat3 brat 4545 0.00014" ,"pydat3 kfdp 4545 1 443" ,"pydat3 kfdp 4545 2 311" ,"pydat3 kfdp 4545 3 111" - ,"pydat3 mdme 4546 1 1" ,"pydat3 brat 4546 0.00008" ,"pydat3 kfdp 4546 1 443" ,"pydat3 kfdp 4546 2 311" ,"pydat3 kfdp 4546 3 333" - ,"pydat3 mdme 4547 1 1" ,"pydat3 brat 4547 0.00003" ,"pydat3 kfdp 4547 1 443" ,"pydat3 kfdp 4547 2 211" ,"pydat3 kfdp 4547 3 -211" - ,"pydat3 mdme 4548 1 1" ,"pydat3 brat 4548 0.00072" ,"pydat3 kfdp 4548 1 443" ,"pydat3 kfdp 4548 2 323" ,"pydat3 kfdp 4548 3 -211" - ,"pydat3 mdme 4549 1 1" ,"pydat3 brat 4549 0.00036" ,"pydat3 kfdp 4549 1 443" ,"pydat3 kfdp 4549 2 313" ,"pydat3 kfdp 4549 3 111" - ,"pydat3 mdme 4550 1 1" ,"pydat3 brat 4550 0.00058" ,"pydat3 kfdp 4550 1 443" ,"pydat3 kfdp 4550 2 321" ,"pydat3 kfdp 4550 3 -213" - ,"pydat3 mdme 4551 1 1" ,"pydat3 brat 4551 0.00029" ,"pydat3 kfdp 4551 1 443" ,"pydat3 kfdp 4551 2 311" ,"pydat3 kfdp 4551 3 113" - ,"pydat3 mdme 4552 1 1" ,"pydat3 brat 4552 0.00059" ,"pydat3 kfdp 4552 1 443" ,"pydat3 kfdp 4552 2 313" ,"pydat3 kfdp 4552 3 211" ,"pydat3 kfdp 4552 4 -211" - ,"pydat3 mdme 4553 1 1" ,"pydat3 brat 4553 0.00041" ,"pydat3 kfdp 4553 1 443" ,"pydat3 kfdp 4553 2 311" ,"pydat3 kfdp 4553 3 211" ,"pydat3 kfdp 4553 4 -211" - ,"pydat3 mdme 4554 1 1" ,"pydat3 brat 4554 0.00027" ,"pydat3 kfdp 4554 1 443" ,"pydat3 kfdp 4554 2 321" ,"pydat3 kfdp 4554 3 -211" ,"pydat3 kfdp 4554 4 111" - ,"pydat3 mdme 4555 1 1" ,"pydat3 brat 4555 0.00027" ,"pydat3 kfdp 4555 1 443" ,"pydat3 kfdp 4555 2 311" ,"pydat3 kfdp 4555 3 111" ,"pydat3 kfdp 4555 4 111" - ,"pydat3 mdme 4556 1 1" ,"pydat3 brat 4556 0.00021" ,"pydat3 kfdp 4556 1 100443" ,"pydat3 kfdp 4556 2 311" - ,"pydat3 mdme 4557 1 1" ,"pydat3 brat 4557 0.00030" ,"pydat3 kfdp 4557 1 100443" ,"pydat3 kfdp 4557 2 313" - ,"pydat3 mdme 4558 1 1" ,"pydat3 brat 4558 0.00032" ,"pydat3 kfdp 4558 1 100443" ,"pydat3 kfdp 4558 2 10313" - ,"pydat3 mdme 4559 1 1" ,"pydat3 brat 4559 0.00001" ,"pydat3 kfdp 4559 1 100443" ,"pydat3 kfdp 4559 2 111" - ,"pydat3 mdme 4560 1 1" ,"pydat3 brat 4560 0.00007" ,"pydat3 kfdp 4560 1 100443" ,"pydat3 kfdp 4560 2 321" ,"pydat3 kfdp 4560 3 -211" - ,"pydat3 mdme 4561 1 1" ,"pydat3 brat 4561 0.00003" ,"pydat3 kfdp 4561 1 100443" ,"pydat3 kfdp 4561 2 311" ,"pydat3 kfdp 4561 3 111" - ,"pydat3 mdme 4562 1 1" ,"pydat3 brat 4562 0.00002" ,"pydat3 kfdp 4562 1 100443" ,"pydat3 kfdp 4562 2 311" ,"pydat3 kfdp 4562 3 333" - ,"pydat3 mdme 4563 1 1" ,"pydat3 brat 4563 0.00001" ,"pydat3 kfdp 4563 1 100443" ,"pydat3 kfdp 4563 2 211" ,"pydat3 kfdp 4563 3 -211" - ,"pydat3 mdme 4564 1 1" ,"pydat3 brat 4564 0.00016" ,"pydat3 kfdp 4564 1 100443" ,"pydat3 kfdp 4564 2 323" ,"pydat3 kfdp 4564 3 -211" - ,"pydat3 mdme 4565 1 1" ,"pydat3 brat 4565 0.00008" ,"pydat3 kfdp 4565 1 100443" ,"pydat3 kfdp 4565 2 313" ,"pydat3 kfdp 4565 3 111" - ,"pydat3 mdme 4566 1 1" ,"pydat3 brat 4566 0.00013" ,"pydat3 kfdp 4566 1 100443" ,"pydat3 kfdp 4566 2 321" ,"pydat3 kfdp 4566 3 -213" - ,"pydat3 mdme 4567 1 1" ,"pydat3 brat 4567 0.00007" ,"pydat3 kfdp 4567 1 100443" ,"pydat3 kfdp 4567 2 311" ,"pydat3 kfdp 4567 3 113" - ,"pydat3 mdme 4568 1 1" ,"pydat3 brat 4568 0.00013" ,"pydat3 kfdp 4568 1 100443" ,"pydat3 kfdp 4568 2 313" ,"pydat3 kfdp 4568 3 211" ,"pydat3 kfdp 4568 4 -211" - ,"pydat3 mdme 4569 1 1" ,"pydat3 brat 4569 0.00009" ,"pydat3 kfdp 4569 1 100443" ,"pydat3 kfdp 4569 2 311" ,"pydat3 kfdp 4569 3 211" ,"pydat3 kfdp 4569 4 -211" - ,"pydat3 mdme 4570 1 1" ,"pydat3 brat 4570 0.00006" ,"pydat3 kfdp 4570 1 100443" ,"pydat3 kfdp 4570 2 321" ,"pydat3 kfdp 4570 3 -211" ,"pydat3 kfdp 4570 4 111" - ,"pydat3 mdme 4571 1 1" ,"pydat3 brat 4571 0.00006" ,"pydat3 kfdp 4571 1 100443" ,"pydat3 kfdp 4571 2 311" ,"pydat3 kfdp 4571 3 111" ,"pydat3 kfdp 4571 4 111" - ,"pydat3 mdme 4572 1 1" ,"pydat3 brat 4572 0.00019" ,"pydat3 kfdp 4572 1 20443" ,"pydat3 kfdp 4572 2 10313" - ,"pydat3 mdme 4573 1 1" ,"pydat3 brat 4573 0.00004" ,"pydat3 kfdp 4573 1 20443" ,"pydat3 kfdp 4573 2 321" ,"pydat3 kfdp 4573 3 -211" - ,"pydat3 mdme 4574 1 1" ,"pydat3 brat 4574 0.00002" ,"pydat3 kfdp 4574 1 20443" ,"pydat3 kfdp 4574 2 311" ,"pydat3 kfdp 4574 3 111" - ,"pydat3 mdme 4575 1 1" ,"pydat3 brat 4575 0.00001" ,"pydat3 kfdp 4575 1 20443" ,"pydat3 kfdp 4575 2 311" ,"pydat3 kfdp 4575 3 333" - ,"pydat3 mdme 4576 1 1" ,"pydat3 brat 4576 0.00010" ,"pydat3 kfdp 4576 1 20443" ,"pydat3 kfdp 4576 2 323" ,"pydat3 kfdp 4576 3 -211" - ,"pydat3 mdme 4577 1 1" ,"pydat3 brat 4577 0.00005" ,"pydat3 kfdp 4577 1 20443" ,"pydat3 kfdp 4577 2 313" ,"pydat3 kfdp 4577 3 111" - ,"pydat3 mdme 4578 1 1" ,"pydat3 brat 4578 0.00008" ,"pydat3 kfdp 4578 1 20443" ,"pydat3 kfdp 4578 2 321" ,"pydat3 kfdp 4578 3 -213" - ,"pydat3 mdme 4579 1 1" ,"pydat3 brat 4579 0.00004" ,"pydat3 kfdp 4579 1 20443" ,"pydat3 kfdp 4579 2 311" ,"pydat3 kfdp 4579 3 113" - ,"pydat3 mdme 4580 1 1" ,"pydat3 brat 4580 0.00008" ,"pydat3 kfdp 4580 1 20443" ,"pydat3 kfdp 4580 2 313" ,"pydat3 kfdp 4580 3 211" ,"pydat3 kfdp 4580 4 -211" - ,"pydat3 mdme 4581 1 1" ,"pydat3 brat 4581 0.00006" ,"pydat3 kfdp 4581 1 20443" ,"pydat3 kfdp 4581 2 311" ,"pydat3 kfdp 4581 3 211" ,"pydat3 kfdp 4581 4 -211" - ,"pydat3 mdme 4582 1 1" ,"pydat3 brat 4582 0.00004" ,"pydat3 kfdp 4582 1 20443" ,"pydat3 kfdp 4582 2 321" ,"pydat3 kfdp 4582 3 -211" ,"pydat3 kfdp 4582 4 111" - ,"pydat3 mdme 4583 1 1" ,"pydat3 brat 4583 0.00004" ,"pydat3 kfdp 4583 1 20443" ,"pydat3 kfdp 4583 2 311" ,"pydat3 kfdp 4583 3 111" ,"pydat3 kfdp 4583 4 111" - ,"pydat3 mdme 4584 1 1" ,"pydat3 brat 4584 0.00004" ,"pydat3 kfdp 4584 1 445" ,"pydat3 kfdp 4584 2 311" - ,"pydat3 mdme 4585 1 1" ,"pydat3 brat 4585 0.00006" ,"pydat3 kfdp 4585 1 445" ,"pydat3 kfdp 4585 2 313" - ,"pydat3 mdme 4586 1 1" ,"pydat3 brat 4586 0.00006" ,"pydat3 kfdp 4586 1 445" ,"pydat3 kfdp 4586 2 10313" - ,"pydat3 mdme 4587 1 1" ,"pydat3 brat 4587 0.00001" ,"pydat3 kfdp 4587 1 445" ,"pydat3 kfdp 4587 2 321" ,"pydat3 kfdp 4587 3 -211" - ,"pydat3 mdme 4588 1 1" ,"pydat3 brat 4588 0.00001" ,"pydat3 kfdp 4588 1 445" ,"pydat3 kfdp 4588 2 311" ,"pydat3 kfdp 4588 3 111" - ,"pydat3 mdme 4589 1 1" ,"pydat3 brat 4589 0.00003" ,"pydat3 kfdp 4589 1 445" ,"pydat3 kfdp 4589 2 323" ,"pydat3 kfdp 4589 3 -211" - ,"pydat3 mdme 4590 1 1" ,"pydat3 brat 4590 0.00002" ,"pydat3 kfdp 4590 1 445" ,"pydat3 kfdp 4590 2 313" ,"pydat3 kfdp 4590 3 111" - ,"pydat3 mdme 4591 1 1" ,"pydat3 brat 4591 0.00003" ,"pydat3 kfdp 4591 1 445" ,"pydat3 kfdp 4591 2 321" ,"pydat3 kfdp 4591 3 -213" - ,"pydat3 mdme 4592 1 1" ,"pydat3 brat 4592 0.00001" ,"pydat3 kfdp 4592 1 445" ,"pydat3 kfdp 4592 2 311" ,"pydat3 kfdp 4592 3 113" - ,"pydat3 mdme 4593 1 1" ,"pydat3 brat 4593 0.00003" ,"pydat3 kfdp 4593 1 445" ,"pydat3 kfdp 4593 2 313" ,"pydat3 kfdp 4593 3 211" ,"pydat3 kfdp 4593 4 -211" - ,"pydat3 mdme 4594 1 1" ,"pydat3 brat 4594 0.00002" ,"pydat3 kfdp 4594 1 445" ,"pydat3 kfdp 4594 2 311" ,"pydat3 kfdp 4594 3 211" ,"pydat3 kfdp 4594 4 -211" - ,"pydat3 mdme 4595 1 1" ,"pydat3 brat 4595 0.00001" ,"pydat3 kfdp 4595 1 445" ,"pydat3 kfdp 4595 2 321" ,"pydat3 kfdp 4595 3 -211" ,"pydat3 kfdp 4595 4 111" - ,"pydat3 mdme 4596 1 1" ,"pydat3 brat 4596 0.00001" ,"pydat3 kfdp 4596 1 445" ,"pydat3 kfdp 4596 2 311" ,"pydat3 kfdp 4596 3 111" ,"pydat3 kfdp 4596 4 111" -# B+ decays -# repoint to place 4601, 87 decays including new ones - ,"pydat3 mdcy 137 2 4601" ,"pydat3 mdcy 137 3 87" ,"pydat3 mdcy 137 1 1" - ,"pydat3 mdme 4601 1 3" ,"pydat3 mdme 4601 2 42" ,"pydat3 brat 4601 0.02000" ,"pydat3 kfdp 4601 1 12" ,"pydat3 kfdp 4601 2 -11" ,"pydat3 kfdp 4601 3 -421" - ,"pydat3 mdme 4602 1 3" ,"pydat3 mdme 4602 2 42" ,"pydat3 brat 4602 0.05500" ,"pydat3 kfdp 4602 1 12" ,"pydat3 kfdp 4602 2 -11" ,"pydat3 kfdp 4602 3 -423" - ,"pydat3 mdme 4603 1 3" ,"pydat3 mdme 4603 2 42" ,"pydat3 brat 4603 0.00500" ,"pydat3 kfdp 4603 1 12" ,"pydat3 kfdp 4603 2 -11" ,"pydat3 kfdp 4603 3 -10423" - ,"pydat3 mdme 4604 1 3" ,"pydat3 mdme 4604 2 42" ,"pydat3 brat 4604 0.00500" ,"pydat3 kfdp 4604 1 12" ,"pydat3 kfdp 4604 2 -11" ,"pydat3 kfdp 4604 3 -10421" - ,"pydat3 mdme 4605 1 3" ,"pydat3 mdme 4605 2 42" ,"pydat3 brat 4605 0.00800" ,"pydat3 kfdp 4605 1 12" ,"pydat3 kfdp 4605 2 -11" ,"pydat3 kfdp 4605 3 -20423" - ,"pydat3 mdme 4606 1 3" ,"pydat3 mdme 4606 2 42" ,"pydat3 brat 4606 0.01200" ,"pydat3 kfdp 4606 1 12" ,"pydat3 kfdp 4606 2 -11" ,"pydat3 kfdp 4606 3 -425" - ,"pydat3 mdme 4607 1 3" ,"pydat3 mdme 4607 2 42" ,"pydat3 brat 4607 0.02000" ,"pydat3 kfdp 4607 1 14" ,"pydat3 kfdp 4607 2 -13" ,"pydat3 kfdp 4607 3 -421" - ,"pydat3 mdme 4608 1 3" ,"pydat3 mdme 4608 2 42" ,"pydat3 brat 4608 0.05500" ,"pydat3 kfdp 4608 1 14" ,"pydat3 kfdp 4608 2 -13" ,"pydat3 kfdp 4608 3 -423" - ,"pydat3 mdme 4609 1 3" ,"pydat3 mdme 4609 2 42" ,"pydat3 brat 4609 0.00500" ,"pydat3 kfdp 4609 1 14" ,"pydat3 kfdp 4609 2 -13" ,"pydat3 kfdp 4609 3 -10423" - ,"pydat3 mdme 4610 1 3" ,"pydat3 mdme 4610 2 42" ,"pydat3 brat 4610 0.00500" ,"pydat3 kfdp 4610 1 14" ,"pydat3 kfdp 4610 2 -13" ,"pydat3 kfdp 4610 3 -10421" - ,"pydat3 mdme 4611 1 3" ,"pydat3 mdme 4611 2 42" ,"pydat3 brat 4611 0.00800" ,"pydat3 kfdp 4611 1 14" ,"pydat3 kfdp 4611 2 -13" ,"pydat3 kfdp 4611 3 -20423" - ,"pydat3 mdme 4612 1 3" ,"pydat3 mdme 4612 2 42" ,"pydat3 brat 4612 0.01200" ,"pydat3 kfdp 4612 1 14" ,"pydat3 kfdp 4612 2 -13" ,"pydat3 kfdp 4612 3 -425" - ,"pydat3 mdme 4613 1 3" ,"pydat3 mdme 4613 2 42" ,"pydat3 brat 4613 0.01000" ,"pydat3 kfdp 4613 1 16" ,"pydat3 kfdp 4613 2 -15" ,"pydat3 kfdp 4613 3 -421" - ,"pydat3 mdme 4614 1 3" ,"pydat3 mdme 4614 2 42" ,"pydat3 brat 4614 0.03000" ,"pydat3 kfdp 4614 1 16" ,"pydat3 kfdp 4614 2 -15" ,"pydat3 kfdp 4614 3 -423" - ,"pydat3 mdme 4615 1 3" ,"pydat3 brat 4615 0.00350" ,"pydat3 kfdp 4615 1 -421" ,"pydat3 kfdp 4615 2 211" - ,"pydat3 mdme 4616 1 3" ,"pydat3 brat 4616 0.01100" ,"pydat3 kfdp 4616 1 -421" ,"pydat3 kfdp 4616 2 213" - ,"pydat3 mdme 4617 1 3" ,"pydat3 brat 4617 0.00550" ,"pydat3 kfdp 4617 1 -421" ,"pydat3 kfdp 4617 2 20213" - ,"pydat3 mdme 4618 1 3" ,"pydat3 brat 4618 0.00420" ,"pydat3 kfdp 4618 1 -423" ,"pydat3 kfdp 4618 2 211" - ,"pydat3 mdme 4619 1 3" ,"pydat3 brat 4619 0.00900" ,"pydat3 kfdp 4619 1 -423" ,"pydat3 kfdp 4619 2 213" - ,"pydat3 mdme 4620 1 3" ,"pydat3 brat 4620 0.01800" ,"pydat3 kfdp 4620 1 -423" ,"pydat3 kfdp 4620 2 20213" - ,"pydat3 mdme 4621 1 3" ,"pydat3 brat 4621 0.01500" ,"pydat3 kfdp 4621 1 -421" ,"pydat3 kfdp 4621 2 431" - ,"pydat3 mdme 4622 1 3" ,"pydat3 brat 4622 0.01850" ,"pydat3 kfdp 4622 1 -421" ,"pydat3 kfdp 4622 2 433" - ,"pydat3 mdme 4623 1 3" ,"pydat3 brat 4623 0.01350" ,"pydat3 kfdp 4623 1 -423" ,"pydat3 kfdp 4623 2 431" - ,"pydat3 mdme 4624 1 3" ,"pydat3 brat 4624 0.02500" ,"pydat3 kfdp 4624 1 -423" ,"pydat3 kfdp 4624 2 433" - ,"pydat3 mdme 4625 1 3" ,"pydat3 brat 4625 0.00040" ,"pydat3 kfdp 4625 1 441" ,"pydat3 kfdp 4625 2 321" - ,"pydat3 mdme 4626 1 3" ,"pydat3 brat 4626 0.00070" ,"pydat3 kfdp 4626 1 441" ,"pydat3 kfdp 4626 2 323" - ,"pydat3 mdme 4627 1 1" ,"pydat3 brat 4627 0.00094" ,"pydat3 kfdp 4627 1 443" ,"pydat3 kfdp 4627 2 321" - ,"pydat3 mdme 4628 1 1" ,"pydat3 brat 4628 0.00132" ,"pydat3 kfdp 4628 1 443" ,"pydat3 kfdp 4628 2 323" - ,"pydat3 mdme 4629 1 1" ,"pydat3 brat 4629 0.00013" ,"pydat3 kfdp 4629 1 20443" ,"pydat3 kfdp 4629 2 321" - ,"pydat3 mdme 4630 1 1" ,"pydat3 brat 4630 0.00018" ,"pydat3 kfdp 4630 1 20443" ,"pydat3 kfdp 4630 2 323" - ,"pydat3 mdme 4631 1 3" ,"pydat3 mdme 4631 2 48" ,"pydat3 brat 4631 0.42910" ,"pydat3 kfdp 4631 1 2" ,"pydat3 kfdp 4631 2 -1" ,"pydat3 kfdp 4631 3 -4" ,"pydat3 kfdp 4631 4 2" - ,"pydat3 mdme 4632 1 3" ,"pydat3 mdme 4632 2 13" ,"pydat3 brat 4632 0.08000" ,"pydat3 kfdp 4632 1 2" ,"pydat3 kfdp 4632 2 -4" ,"pydat3 kfdp 4632 3 -1" ,"pydat3 kfdp 4632 4 2" - ,"pydat3 mdme 4633 1 3" ,"pydat3 mdme 4633 2 13" ,"pydat3 brat 4633 0.07000" ,"pydat3 kfdp 4633 1 4" ,"pydat3 kfdp 4633 2 -3" ,"pydat3 kfdp 4633 3 -4" ,"pydat3 kfdp 4633 4 2" - ,"pydat3 mdme 4634 1 3" ,"pydat3 mdme 4634 2 13" ,"pydat3 brat 4634 0.02000" ,"pydat3 kfdp 4634 1 4" ,"pydat3 kfdp 4634 2 -4" ,"pydat3 kfdp 4634 3 -3" ,"pydat3 kfdp 4634 4 2" - ,"pydat3 mdme 4635 1 3" ,"pydat3 mdme 4635 2 42" ,"pydat3 brat 4635 0.01500" ,"pydat3 kfdp 4635 1 2" ,"pydat3 kfdp 4635 2 -1" ,"pydat3 kfdp 4635 3 -2" ,"pydat3 kfdp 4635 4 2" - ,"pydat3 mdme 4636 1 3" ,"pydat3 mdme 4636 2 42" ,"pydat3 brat 4636 0.00500" ,"pydat3 kfdp 4636 1 4" ,"pydat3 kfdp 4636 2 -3" ,"pydat3 kfdp 4636 3 -2" ,"pydat3 kfdp 4636 4 2" - ,"pydat3 mdme 4637 1 1" ,"pydat3 brat 4637 0.00140" ,"pydat3 kfdp 4637 1 443" ,"pydat3 kfdp 4637 2 10323" - ,"pydat3 mdme 4638 1 1" ,"pydat3 brat 4638 0.00003" ,"pydat3 kfdp 4638 1 443" ,"pydat3 kfdp 4638 2 211" - ,"pydat3 mdme 4639 1 1" ,"pydat3 brat 4639 0.00002" ,"pydat3 kfdp 4639 1 443" ,"pydat3 kfdp 4639 2 213" - ,"pydat3 mdme 4640 1 1" ,"pydat3 brat 4640 0.00029" ,"pydat3 kfdp 4640 1 443" ,"pydat3 kfdp 4640 2 311" ,"pydat3 kfdp 4640 3 211" - ,"pydat3 mdme 4641 1 1" ,"pydat3 brat 4641 0.00014" ,"pydat3 kfdp 4641 1 443" ,"pydat3 kfdp 4641 2 321" ,"pydat3 kfdp 4641 3 111" - ,"pydat3 mdme 4642 1 1" ,"pydat3 brat 4642 0.00005" ,"pydat3 kfdp 4642 1 443" ,"pydat3 kfdp 4642 2 321" ,"pydat3 kfdp 4642 3 333" - ,"pydat3 mdme 4643 1 1" ,"pydat3 brat 4643 0.00076" ,"pydat3 kfdp 4643 1 443" ,"pydat3 kfdp 4643 2 313" ,"pydat3 kfdp 4643 3 211" - ,"pydat3 mdme 4644 1 1" ,"pydat3 brat 4644 0.00038" ,"pydat3 kfdp 4644 1 443" ,"pydat3 kfdp 4644 2 323" ,"pydat3 kfdp 4644 3 111" - ,"pydat3 mdme 4645 1 1" ,"pydat3 brat 4645 0.00058" ,"pydat3 kfdp 4645 1 443" ,"pydat3 kfdp 4645 2 311" ,"pydat3 kfdp 4645 3 213" - ,"pydat3 mdme 4646 1 1" ,"pydat3 brat 4646 0.00029" ,"pydat3 kfdp 4646 1 443" ,"pydat3 kfdp 4646 2 321" ,"pydat3 kfdp 4646 3 113" - ,"pydat3 mdme 4647 1 1" ,"pydat3 brat 4647 0.00001" ,"pydat3 kfdp 4647 1 443" ,"pydat3 kfdp 4647 2 -3122" ,"pydat3 kfdp 4647 3 2212" - ,"pydat3 mdme 4648 1 1" ,"pydat3 brat 4648 0.00069" ,"pydat3 kfdp 4648 1 443" ,"pydat3 kfdp 4648 2 321" ,"pydat3 kfdp 4648 3 -211" ,"pydat3 kfdp 4648 4 211" - ,"pydat3 mdme 4649 1 1" ,"pydat3 brat 4649 0.00045" ,"pydat3 kfdp 4649 1 443" ,"pydat3 kfdp 4649 2 321" ,"pydat3 kfdp 4649 3 111" ,"pydat3 kfdp 4649 4 111" - ,"pydat3 mdme 4650 1 1" ,"pydat3 brat 4650 0.00045" ,"pydat3 kfdp 4650 1 443" ,"pydat3 kfdp 4650 2 311" ,"pydat3 kfdp 4650 3 211" ,"pydat3 kfdp 4650 4 111" - ,"pydat3 mdme 4651 1 1" ,"pydat3 brat 4651 0.00021" ,"pydat3 kfdp 4651 1 100443" ,"pydat3 kfdp 4651 2 321" - ,"pydat3 mdme 4652 1 1" ,"pydat3 brat 4652 0.00030" ,"pydat3 kfdp 4652 1 100443" ,"pydat3 kfdp 4652 2 323" - ,"pydat3 mdme 4653 1 1" ,"pydat3 brat 4653 0.00032" ,"pydat3 kfdp 4653 1 100443" ,"pydat3 kfdp 4653 2 10323" - ,"pydat3 mdme 4654 1 1" ,"pydat3 brat 4654 0.00001" ,"pydat3 kfdp 4654 1 100443" ,"pydat3 kfdp 4654 2 211" - ,"pydat3 mdme 4655 1 1" ,"pydat3 brat 4655 0.00007" ,"pydat3 kfdp 4655 1 100443" ,"pydat3 kfdp 4655 2 311" ,"pydat3 kfdp 4655 3 211" - ,"pydat3 mdme 4656 1 1" ,"pydat3 brat 4656 0.00003" ,"pydat3 kfdp 4656 1 100443" ,"pydat3 kfdp 4656 2 321" ,"pydat3 kfdp 4656 3 111" - ,"pydat3 mdme 4657 1 1" ,"pydat3 brat 4657 0.00001" ,"pydat3 kfdp 4657 1 100443" ,"pydat3 kfdp 4657 2 321" ,"pydat3 kfdp 4657 3 333" - ,"pydat3 mdme 4658 1 1" ,"pydat3 brat 4658 0.00017" ,"pydat3 kfdp 4658 1 100443" ,"pydat3 kfdp 4658 2 313" ,"pydat3 kfdp 4658 3 211" - ,"pydat3 mdme 4659 1 1" ,"pydat3 brat 4659 0.00009" ,"pydat3 kfdp 4659 1 100443" ,"pydat3 kfdp 4659 2 323" ,"pydat3 kfdp 4659 3 111" - ,"pydat3 mdme 4660 1 1" ,"pydat3 brat 4660 0.00013" ,"pydat3 kfdp 4660 1 100443" ,"pydat3 kfdp 4660 2 311" ,"pydat3 kfdp 4660 3 213" - ,"pydat3 mdme 4661 1 1" ,"pydat3 brat 4661 0.00007" ,"pydat3 kfdp 4661 1 100443" ,"pydat3 kfdp 4661 2 321" ,"pydat3 kfdp 4661 3 113" - ,"pydat3 mdme 4662 1 1" ,"pydat3 brat 4662 0.00016" ,"pydat3 kfdp 4662 1 100443" ,"pydat3 kfdp 4662 2 321" ,"pydat3 kfdp 4662 3 -211" ,"pydat3 kfdp 4662 4 211" - ,"pydat3 mdme 4663 1 1" ,"pydat3 brat 4663 0.00010" ,"pydat3 kfdp 4663 1 100443" ,"pydat3 kfdp 4663 2 321" ,"pydat3 kfdp 4663 3 111" ,"pydat3 kfdp 4663 4 111" - ,"pydat3 mdme 4664 1 1" ,"pydat3 brat 4664 0.00010" ,"pydat3 kfdp 4664 1 100443" ,"pydat3 kfdp 4664 2 311" ,"pydat3 kfdp 4664 3 211" ,"pydat3 kfdp 4664 4 111" - ,"pydat3 mdme 4665 1 1" ,"pydat3 brat 4665 0.00019" ,"pydat3 kfdp 4665 1 20443" ,"pydat3 kfdp 4665 2 10323" - ,"pydat3 mdme 4666 1 1" ,"pydat3 brat 4666 0.00004" ,"pydat3 kfdp 4666 1 20443" ,"pydat3 kfdp 4666 2 311" ,"pydat3 kfdp 4666 3 211" - ,"pydat3 mdme 4667 1 1" ,"pydat3 brat 4667 0.00002" ,"pydat3 kfdp 4667 1 20443" ,"pydat3 kfdp 4667 2 321" ,"pydat3 kfdp 4667 3 111" - ,"pydat3 mdme 4668 1 1" ,"pydat3 brat 4668 0.00001" ,"pydat3 kfdp 4668 1 20443" ,"pydat3 kfdp 4668 2 321" ,"pydat3 kfdp 4668 3 333" - ,"pydat3 mdme 4669 1 1" ,"pydat3 brat 4669 0.00010" ,"pydat3 kfdp 4669 1 20443" ,"pydat3 kfdp 4669 2 313" ,"pydat3 kfdp 4669 3 211" - ,"pydat3 mdme 4670 1 1" ,"pydat3 brat 4670 0.00005" ,"pydat3 kfdp 4670 1 20443" ,"pydat3 kfdp 4670 2 323" ,"pydat3 kfdp 4670 3 111" - ,"pydat3 mdme 4671 1 1" ,"pydat3 brat 4671 0.00008" ,"pydat3 kfdp 4671 1 20443" ,"pydat3 kfdp 4671 2 311" ,"pydat3 kfdp 4671 3 213" - ,"pydat3 mdme 4672 1 1" ,"pydat3 brat 4672 0.00004" ,"pydat3 kfdp 4672 1 20443" ,"pydat3 kfdp 4672 2 321" ,"pydat3 kfdp 4672 3 113" - ,"pydat3 mdme 4673 1 1" ,"pydat3 brat 4673 0.00009" ,"pydat3 kfdp 4673 1 20443" ,"pydat3 kfdp 4673 2 321" ,"pydat3 kfdp 4673 3 -211" ,"pydat3 kfdp 4673 4 211" - ,"pydat3 mdme 4674 1 1" ,"pydat3 brat 4674 0.00006" ,"pydat3 kfdp 4674 1 20443" ,"pydat3 kfdp 4674 2 321" ,"pydat3 kfdp 4674 3 111" ,"pydat3 kfdp 4674 4 111" - ,"pydat3 mdme 4675 1 1" ,"pydat3 brat 4675 0.00006" ,"pydat3 kfdp 4675 1 20443" ,"pydat3 kfdp 4675 2 311" ,"pydat3 kfdp 4675 3 211" ,"pydat3 kfdp 4675 4 111" - ,"pydat3 mdme 4676 1 1" ,"pydat3 brat 4676 0.00004" ,"pydat3 kfdp 4676 1 443" ,"pydat3 kfdp 4676 2 321" - ,"pydat3 mdme 4677 1 1" ,"pydat3 brat 4677 0.00006" ,"pydat3 kfdp 4677 1 443" ,"pydat3 kfdp 4677 2 323" - ,"pydat3 mdme 4678 1 1" ,"pydat3 brat 4678 0.00006" ,"pydat3 kfdp 4678 1 443" ,"pydat3 kfdp 4678 2 10323" - ,"pydat3 mdme 4679 1 1" ,"pydat3 brat 4679 0.00001" ,"pydat3 kfdp 4679 1 443" ,"pydat3 kfdp 4679 2 311" ,"pydat3 kfdp 4679 3 211" - ,"pydat3 mdme 4680 1 1" ,"pydat3 brat 4680 0.00001" ,"pydat3 kfdp 4680 1 443" ,"pydat3 kfdp 4680 2 321" ,"pydat3 kfdp 4680 3 111" - ,"pydat3 mdme 4681 1 1" ,"pydat3 brat 4681 0.00003" ,"pydat3 kfdp 4681 1 443" ,"pydat3 kfdp 4681 2 313" ,"pydat3 kfdp 4681 3 211" - ,"pydat3 mdme 4682 1 1" ,"pydat3 brat 4682 0.00002" ,"pydat3 kfdp 4682 1 443" ,"pydat3 kfdp 4682 2 323" ,"pydat3 kfdp 4682 3 111" - ,"pydat3 mdme 4683 1 1" ,"pydat3 brat 4683 0.00002" ,"pydat3 kfdp 4683 1 443" ,"pydat3 kfdp 4683 2 311" ,"pydat3 kfdp 4683 3 213" - ,"pydat3 mdme 4684 1 1" ,"pydat3 brat 4684 0.00001" ,"pydat3 kfdp 4684 1 443" ,"pydat3 kfdp 4684 2 321" ,"pydat3 kfdp 4684 3 113" - ,"pydat3 mdme 4685 1 1" ,"pydat3 brat 4685 0.00003" ,"pydat3 kfdp 4685 1 443" ,"pydat3 kfdp 4685 2 321" ,"pydat3 kfdp 4685 3 -211" ,"pydat3 kfdp 4685 4 211" - ,"pydat3 mdme 4686 1 1" ,"pydat3 brat 4686 0.00002" ,"pydat3 kfdp 4686 1 443" ,"pydat3 kfdp 4686 2 321" ,"pydat3 kfdp 4686 3 111" ,"pydat3 kfdp 4686 4 111" - ,"pydat3 mdme 4687 1 1" ,"pydat3 brat 4687 0.00002" ,"pydat3 kfdp 4687 1 443" ,"pydat3 kfdp 4687 2 311" ,"pydat3 kfdp 4687 3 211" ,"pydat3 kfdp 4687 4 111" -# Bs decays -# repoint to place 4701, 73 decays including new ones - ,"pydat3 mdcy 140 2 4701" ,"pydat3 mdcy 140 3 73" ,"pydat3 mdcy 140 1 1" - ,"pydat3 mdme 4701 1 3" ,"pydat3 mdme 4701 2 42" ,"pydat3 brat 4701 0.02000" ,"pydat3 kfdp 4701 1 12" ,"pydat3 kfdp 4701 2 -11" ,"pydat3 kfdp 4701 3 -431" - ,"pydat3 mdme 4702 1 3" ,"pydat3 mdme 4702 2 42" ,"pydat3 brat 4702 0.05500" ,"pydat3 kfdp 4702 1 12" ,"pydat3 kfdp 4702 2 -11" ,"pydat3 kfdp 4702 3 -433" - ,"pydat3 mdme 4703 1 3" ,"pydat3 mdme 4703 2 42" ,"pydat3 brat 4703 0.00500" ,"pydat3 kfdp 4703 1 12" ,"pydat3 kfdp 4703 2 -11" ,"pydat3 kfdp 4703 3 -10433" - ,"pydat3 mdme 4704 1 3" ,"pydat3 mdme 4704 2 42" ,"pydat3 brat 4704 0.00500" ,"pydat3 kfdp 4704 1 12" ,"pydat3 kfdp 4704 2 -11" ,"pydat3 kfdp 4704 3 -10431" - ,"pydat3 mdme 4705 1 3" ,"pydat3 mdme 4705 2 42" ,"pydat3 brat 4705 0.00800" ,"pydat3 kfdp 4705 1 12" ,"pydat3 kfdp 4705 2 -11" ,"pydat3 kfdp 4705 3 -20433" - ,"pydat3 mdme 4706 1 3" ,"pydat3 mdme 4706 2 42" ,"pydat3 brat 4706 0.01200" ,"pydat3 kfdp 4706 1 12" ,"pydat3 kfdp 4706 2 -11" ,"pydat3 kfdp 4706 3 -435" - ,"pydat3 mdme 4707 1 3" ,"pydat3 mdme 4707 2 42" ,"pydat3 brat 4707 0.02000" ,"pydat3 kfdp 4707 1 14" ,"pydat3 kfdp 4707 2 -13" ,"pydat3 kfdp 4707 3 -431" - ,"pydat3 mdme 4708 1 3" ,"pydat3 mdme 4708 2 42" ,"pydat3 brat 4708 0.05500" ,"pydat3 kfdp 4708 1 14" ,"pydat3 kfdp 4708 2 -13" ,"pydat3 kfdp 4708 3 -433" - ,"pydat3 mdme 4709 1 3" ,"pydat3 mdme 4709 2 42" ,"pydat3 brat 4709 0.00500" ,"pydat3 kfdp 4709 1 14" ,"pydat3 kfdp 4709 2 -13" ,"pydat3 kfdp 4709 3 -10433" - ,"pydat3 mdme 4710 1 3" ,"pydat3 mdme 4710 2 42" ,"pydat3 brat 4710 0.00500" ,"pydat3 kfdp 4710 1 14" ,"pydat3 kfdp 4710 2 -13" ,"pydat3 kfdp 4710 3 -10431" - ,"pydat3 mdme 4711 1 3" ,"pydat3 mdme 4711 2 42" ,"pydat3 brat 4711 0.00800" ,"pydat3 kfdp 4711 1 14" ,"pydat3 kfdp 4711 2 -13" ,"pydat3 kfdp 4711 3 -20433" - ,"pydat3 mdme 4712 1 3" ,"pydat3 mdme 4712 2 42" ,"pydat3 brat 4712 0.01200" ,"pydat3 kfdp 4712 1 14" ,"pydat3 kfdp 4712 2 -13" ,"pydat3 kfdp 4712 3 -435" - ,"pydat3 mdme 4713 1 3" ,"pydat3 mdme 4713 2 42" ,"pydat3 brat 4713 0.01000" ,"pydat3 kfdp 4713 1 16" ,"pydat3 kfdp 4713 2 -15" ,"pydat3 kfdp 4713 3 -431" - ,"pydat3 mdme 4714 1 3" ,"pydat3 mdme 4714 2 42" ,"pydat3 brat 4714 0.03000" ,"pydat3 kfdp 4714 1 16" ,"pydat3 kfdp 4714 2 -15" ,"pydat3 kfdp 4714 3 -433" - ,"pydat3 mdme 4715 1 3" ,"pydat3 brat 4715 0.00350" ,"pydat3 kfdp 4715 1 -431" ,"pydat3 kfdp 4715 2 211" - ,"pydat3 mdme 4716 1 3" ,"pydat3 brat 4716 0.01100" ,"pydat3 kfdp 4716 1 -431" ,"pydat3 kfdp 4716 2 213" - ,"pydat3 mdme 4717 1 3" ,"pydat3 brat 4717 0.00550" ,"pydat3 kfdp 4717 1 -431" ,"pydat3 kfdp 4717 2 20213" - ,"pydat3 mdme 4718 1 3" ,"pydat3 brat 4718 0.00420" ,"pydat3 kfdp 4718 1 -433" ,"pydat3 kfdp 4718 2 211" - ,"pydat3 mdme 4719 1 3" ,"pydat3 brat 4719 0.00900" ,"pydat3 kfdp 4719 1 -433" ,"pydat3 kfdp 4719 2 213" - ,"pydat3 mdme 4720 1 3" ,"pydat3 brat 4720 0.01800" ,"pydat3 kfdp 4720 1 -433" ,"pydat3 kfdp 4720 2 20213" - ,"pydat3 mdme 4721 1 3" ,"pydat3 brat 4721 0.01500" ,"pydat3 kfdp 4721 1 -431" ,"pydat3 kfdp 4721 2 431" - ,"pydat3 mdme 4722 1 3" ,"pydat3 brat 4722 0.01850" ,"pydat3 kfdp 4722 1 -431" ,"pydat3 kfdp 4722 2 433" - ,"pydat3 mdme 4723 1 3" ,"pydat3 brat 4723 0.01350" ,"pydat3 kfdp 4723 1 -433" ,"pydat3 kfdp 4723 2 431" - ,"pydat3 mdme 4724 1 3" ,"pydat3 brat 4724 0.02500" ,"pydat3 kfdp 4724 1 -433" ,"pydat3 kfdp 4724 2 433" - ,"pydat3 mdme 4725 1 3" ,"pydat3 brat 4725 0.00020" ,"pydat3 kfdp 4725 1 441" ,"pydat3 kfdp 4725 2 221" - ,"pydat3 mdme 4726 1 3" ,"pydat3 brat 4726 0.00020" ,"pydat3 kfdp 4726 1 441" ,"pydat3 kfdp 4726 2 331" - ,"pydat3 mdme 4727 1 3" ,"pydat3 brat 4727 0.00070" ,"pydat3 kfdp 4727 1 441" ,"pydat3 kfdp 4727 2 333" - ,"pydat3 mdme 4728 1 1" ,"pydat3 brat 4728 0.00012" ,"pydat3 kfdp 4728 1 443" ,"pydat3 kfdp 4728 2 221" - ,"pydat3 mdme 4729 1 1" ,"pydat3 brat 4729 0.00034" ,"pydat3 kfdp 4729 1 443" ,"pydat3 kfdp 4729 2 331" - ,"pydat3 mdme 4730 1 1" ,"pydat3 brat 4730 0.00093" ,"pydat3 kfdp 4730 1 443" ,"pydat3 kfdp 4730 2 333" - ,"pydat3 mdme 4731 1 1" ,"pydat3 brat 4731 0.00002" ,"pydat3 kfdp 4731 1 20443" ,"pydat3 kfdp 4731 2 221" - ,"pydat3 mdme 4732 1 1" ,"pydat3 brat 4732 0.00005" ,"pydat3 kfdp 4732 1 20443" ,"pydat3 kfdp 4732 2 331" - ,"pydat3 mdme 4733 1 1" ,"pydat3 brat 4733 0.00013" ,"pydat3 kfdp 4733 1 20443" ,"pydat3 kfdp 4733 2 333" - ,"pydat3 mdme 4734 1 3" ,"pydat3 mdme 4734 2 48" ,"pydat3 brat 4734 0.42910" ,"pydat3 kfdp 4734 1 2" ,"pydat3 kfdp 4734 2 -1" ,"pydat3 kfdp 4734 3 -4" ,"pydat3 kfdp 4734 4 3" - ,"pydat3 mdme 4735 1 3" ,"pydat3 mdme 4735 2 13" ,"pydat3 brat 4735 0.08000" ,"pydat3 kfdp 4735 1 2" ,"pydat3 kfdp 4735 2 -4" ,"pydat3 kfdp 4735 3 -1" ,"pydat3 kfdp 4735 4 3" - ,"pydat3 mdme 4736 1 3" ,"pydat3 mdme 4736 2 13" ,"pydat3 brat 4736 0.07000" ,"pydat3 kfdp 4736 1 4" ,"pydat3 kfdp 4736 2 -3" ,"pydat3 kfdp 4736 3 -4" ,"pydat3 kfdp 4736 4 3" - ,"pydat3 mdme 4737 1 3" ,"pydat3 mdme 4737 2 13" ,"pydat3 brat 4737 0.02000" ,"pydat3 kfdp 4737 1 4" ,"pydat3 kfdp 4737 2 -4" ,"pydat3 kfdp 4737 3 -3" ,"pydat3 kfdp 4737 4 3" - ,"pydat3 mdme 4738 1 3" ,"pydat3 mdme 4738 2 42" ,"pydat3 brat 4738 0.01500" ,"pydat3 kfdp 4738 1 2" ,"pydat3 kfdp 4738 2 -1" ,"pydat3 kfdp 4738 3 -2" ,"pydat3 kfdp 4738 4 3" - ,"pydat3 mdme 4739 1 3" ,"pydat3 mdme 4739 2 42" ,"pydat3 brat 4739 0.00500" ,"pydat3 kfdp 4739 1 4" ,"pydat3 kfdp 4739 2 -3" ,"pydat3 kfdp 4739 3 -2" ,"pydat3 kfdp 4739 4 3" - ,"pydat3 mdme 4740 1 1" ,"pydat3 brat 4740 0.00130" ,"pydat3 kfdp 4740 1 443" ,"pydat3 kfdp 4740 2 321" ,"pydat3 kfdp 4740 3 -321" - ,"pydat3 mdme 4741 1 1" ,"pydat3 brat 4741 0.00130" ,"pydat3 kfdp 4741 1 443" ,"pydat3 kfdp 4741 2 311" ,"pydat3 kfdp 4741 3 -311" - ,"pydat3 mdme 4742 1 1" ,"pydat3 brat 4742 0.00012" ,"pydat3 kfdp 4742 1 443" ,"pydat3 kfdp 4742 2 221" ,"pydat3 kfdp 4742 3 111" - ,"pydat3 mdme 4743 1 1" ,"pydat3 brat 4743 0.00034" ,"pydat3 kfdp 4743 1 443" ,"pydat3 kfdp 4743 2 331" ,"pydat3 kfdp 4743 3 111" - ,"pydat3 mdme 4744 1 1" ,"pydat3 brat 4744 0.00093" ,"pydat3 kfdp 4744 1 443" ,"pydat3 kfdp 4744 2 333" ,"pydat3 kfdp 4744 3 111" - ,"pydat3 mdme 4745 1 1" ,"pydat3 brat 4745 0.00130" ,"pydat3 kfdp 4745 1 443" ,"pydat3 kfdp 4745 2 321" ,"pydat3 kfdp 4745 3 -321" ,"pydat3 kfdp 4745 4 111" - ,"pydat3 mdme 4746 1 1" ,"pydat3 brat 4746 0.00130" ,"pydat3 kfdp 4746 1 443" ,"pydat3 kfdp 4746 2 311" ,"pydat3 kfdp 4746 3 -311" ,"pydat3 kfdp 4746 4 111" - ,"pydat3 mdme 4747 1 1" ,"pydat3 brat 4747 0.00003" ,"pydat3 kfdp 4747 1 100443" ,"pydat3 kfdp 4747 2 221" - ,"pydat3 mdme 4748 1 1" ,"pydat3 brat 4748 0.00008" ,"pydat3 kfdp 4748 1 100443" ,"pydat3 kfdp 4748 2 331" - ,"pydat3 mdme 4749 1 1" ,"pydat3 brat 4749 0.00021" ,"pydat3 kfdp 4749 1 100443" ,"pydat3 kfdp 4749 2 333" - ,"pydat3 mdme 4750 1 1" ,"pydat3 brat 4750 0.00030" ,"pydat3 kfdp 4750 1 100443" ,"pydat3 kfdp 4750 2 321" ,"pydat3 kfdp 4750 3 -321" - ,"pydat3 mdme 4751 1 1" ,"pydat3 brat 4751 0.00030" ,"pydat3 kfdp 4751 1 100443" ,"pydat3 kfdp 4751 2 311" ,"pydat3 kfdp 4751 3 -311" - ,"pydat3 mdme 4752 1 1" ,"pydat3 brat 4752 0.00003" ,"pydat3 kfdp 4752 1 100443" ,"pydat3 kfdp 4752 2 221" ,"pydat3 kfdp 4752 3 111" - ,"pydat3 mdme 4753 1 1" ,"pydat3 brat 4753 0.00008" ,"pydat3 kfdp 4753 1 100443" ,"pydat3 kfdp 4753 2 331" ,"pydat3 kfdp 4753 3 111" - ,"pydat3 mdme 4754 1 1" ,"pydat3 brat 4754 0.00021" ,"pydat3 kfdp 4754 1 100443" ,"pydat3 kfdp 4754 2 333" ,"pydat3 kfdp 4754 3 111" - ,"pydat3 mdme 4755 1 1" ,"pydat3 brat 4755 0.00030" ,"pydat3 kfdp 4755 1 100443" ,"pydat3 kfdp 4755 2 321" ,"pydat3 kfdp 4755 3 -321" ,"pydat3 kfdp 4755 4 111" - ,"pydat3 mdme 4756 1 1" ,"pydat3 brat 4756 0.00030" ,"pydat3 kfdp 4756 1 100443" ,"pydat3 kfdp 4756 2 311" ,"pydat3 kfdp 4756 3 -311" ,"pydat3 kfdp 4756 4 111" - ,"pydat3 mdme 4757 1 1" ,"pydat3 brat 4757 0.00018" ,"pydat3 kfdp 4757 1 20443" ,"pydat3 kfdp 4757 2 321" ,"pydat3 kfdp 4757 3 -321" - ,"pydat3 mdme 4758 1 1" ,"pydat3 brat 4758 0.00018" ,"pydat3 kfdp 4758 1 20443" ,"pydat3 kfdp 4758 2 311" ,"pydat3 kfdp 4758 3 -311" - ,"pydat3 mdme 4759 1 1" ,"pydat3 brat 4759 0.00002" ,"pydat3 kfdp 4759 1 20443" ,"pydat3 kfdp 4759 2 221" ,"pydat3 kfdp 4759 3 111" - ,"pydat3 mdme 4760 1 1" ,"pydat3 brat 4760 0.00005" ,"pydat3 kfdp 4760 1 20443" ,"pydat3 kfdp 4760 2 331" ,"pydat3 kfdp 4760 3 111" - ,"pydat3 mdme 4761 1 1" ,"pydat3 brat 4761 0.00013" ,"pydat3 kfdp 4761 1 20443" ,"pydat3 kfdp 4761 2 333" ,"pydat3 kfdp 4761 3 111" - ,"pydat3 mdme 4762 1 1" ,"pydat3 brat 4762 0.00018" ,"pydat3 kfdp 4762 1 20443" ,"pydat3 kfdp 4762 2 321" ,"pydat3 kfdp 4762 3 -321" ,"pydat3 kfdp 4762 4 111" - ,"pydat3 mdme 4763 1 1" ,"pydat3 brat 4763 0.00018" ,"pydat3 kfdp 4763 1 20443" ,"pydat3 kfdp 4763 2 311" ,"pydat3 kfdp 4763 3 -311" ,"pydat3 kfdp 4763 4 111" - ,"pydat3 mdme 4764 1 1" ,"pydat3 brat 4764 0.00001" ,"pydat3 kfdp 4764 1 445" ,"pydat3 kfdp 4764 2 221" - ,"pydat3 mdme 4765 1 1" ,"pydat3 brat 4765 0.00002" ,"pydat3 kfdp 4765 1 445" ,"pydat3 kfdp 4765 2 331" - ,"pydat3 mdme 4766 1 1" ,"pydat3 brat 4766 0.00004" ,"pydat3 kfdp 4766 1 445" ,"pydat3 kfdp 4766 2 333" - ,"pydat3 mdme 4767 1 1" ,"pydat3 brat 4767 0.00006" ,"pydat3 kfdp 4767 1 445" ,"pydat3 kfdp 4767 2 321" ,"pydat3 kfdp 4767 3 -321" - ,"pydat3 mdme 4768 1 1" ,"pydat3 brat 4768 0.00006" ,"pydat3 kfdp 4768 1 445" ,"pydat3 kfdp 4768 2 311" ,"pydat3 kfdp 4768 3 -311" - ,"pydat3 mdme 4769 1 1" ,"pydat3 brat 4769 0.00001" ,"pydat3 kfdp 4769 1 445" ,"pydat3 kfdp 4769 2 221" ,"pydat3 kfdp 4769 3 111" - ,"pydat3 mdme 4770 1 1" ,"pydat3 brat 4770 0.00002" ,"pydat3 kfdp 4770 1 445" ,"pydat3 kfdp 4770 2 331" ,"pydat3 kfdp 4770 3 111" - ,"pydat3 mdme 4771 1 1" ,"pydat3 brat 4771 0.00004" ,"pydat3 kfdp 4771 1 445" ,"pydat3 kfdp 4771 2 333" ,"pydat3 kfdp 4771 3 111" - ,"pydat3 mdme 4772 1 1" ,"pydat3 brat 4772 0.00006" ,"pydat3 kfdp 4772 1 445" ,"pydat3 kfdp 4772 2 321" ,"pydat3 kfdp 4772 3 -321" ,"pydat3 kfdp 4772 4 111" - ,"pydat3 mdme 4773 1 1" ,"pydat3 brat 4773 0.00006" ,"pydat3 kfdp 4773 1 445" ,"pydat3 kfdp 4773 2 311" ,"pydat3 kfdp 4773 3 -311" ,"pydat3 kfdp 4773 4 111" -# Lambda_b decays -# repoint to place 4801, 55 decays including new ones - ,"pydat3 mdcy 210 2 4801" ,"pydat3 mdcy 210 3 55" ,"pydat3 mdcy 210 1 1" - ,"pydat3 mdme 4801 1 2" ,"pydat3 mdme 4801 2 42" ,"pydat3 brat 4801 0.10500" ,"pydat3 kfdp 4801 1 -12" ,"pydat3 kfdp 4801 2 11" ,"pydat3 kfdp 4801 3 4122" - ,"pydat3 mdme 4802 1 2" ,"pydat3 mdme 4802 2 42" ,"pydat3 brat 4802 0.10500" ,"pydat3 kfdp 4802 1 -14" ,"pydat3 kfdp 4802 2 13" ,"pydat3 kfdp 4802 3 4122" - ,"pydat3 mdme 4803 1 2" ,"pydat3 mdme 4803 2 42" ,"pydat3 brat 4803 0.04000" ,"pydat3 kfdp 4803 1 -16" ,"pydat3 kfdp 4803 2 15" ,"pydat3 kfdp 4803 3 4122" - ,"pydat3 mdme 4804 1 2" ,"pydat3 brat 4804 0.00770" ,"pydat3 kfdp 4804 1 4122" ,"pydat3 kfdp 4804 2 -211" - ,"pydat3 mdme 4805 1 2" ,"pydat3 brat 4805 0.02000" ,"pydat3 kfdp 4805 1 4122" ,"pydat3 kfdp 4805 2 -213" - ,"pydat3 mdme 4806 1 2" ,"pydat3 brat 4806 0.02350" ,"pydat3 kfdp 4806 1 4122" ,"pydat3 kfdp 4806 2 -20213" - ,"pydat3 mdme 4807 1 2" ,"pydat3 brat 4807 0.02850" ,"pydat3 kfdp 4807 1 4122" ,"pydat3 kfdp 4807 2 -431" - ,"pydat3 mdme 4808 1 2" ,"pydat3 brat 4808 0.04350" ,"pydat3 kfdp 4808 1 4122" ,"pydat3 kfdp 4808 2 -433" - ,"pydat3 mdme 4809 1 2" ,"pydat3 brat 4809 0.00110" ,"pydat3 kfdp 4809 1 441" ,"pydat3 kfdp 4809 2 3122" - ,"pydat3 mdme 4810 1 1" ,"pydat3 brat 4810 0.00047" ,"pydat3 kfdp 4810 1 443" ,"pydat3 kfdp 4810 2 3122" - ,"pydat3 mdme 4811 1 1" ,"pydat3 brat 4811 0.00006" ,"pydat3 kfdp 4811 1 20443" ,"pydat3 kfdp 4811 2 3122" - ,"pydat3 mdme 4812 1 2" ,"pydat3 mdme 4812 2 48" ,"pydat3 brat 4812 0.42910" ,"pydat3 kfdp 4812 1 -2" ,"pydat3 kfdp 4812 2 1" ,"pydat3 kfdp 4812 3 4" ,"pydat3 kfdp 4812 4 2101" - ,"pydat3 mdme 4813 1 2" ,"pydat3 mdme 4813 2 13" ,"pydat3 brat 4813 0.08000" ,"pydat3 kfdp 4813 1 -2" ,"pydat3 kfdp 4813 2 4" ,"pydat3 kfdp 4813 3 1" ,"pydat3 kfdp 4813 4 2101" - ,"pydat3 mdme 4814 1 2" ,"pydat3 mdme 4814 2 13" ,"pydat3 brat 4814 0.07000" ,"pydat3 kfdp 4814 1 -4" ,"pydat3 kfdp 4814 2 3" ,"pydat3 kfdp 4814 3 4" ,"pydat3 kfdp 4814 4 2101" - ,"pydat3 mdme 4815 1 2" ,"pydat3 mdme 4815 2 13" ,"pydat3 brat 4815 0.02000" ,"pydat3 kfdp 4815 1 -4" ,"pydat3 kfdp 4815 2 4" ,"pydat3 kfdp 4815 3 3" ,"pydat3 kfdp 4815 4 2101" - ,"pydat3 mdme 4816 1 2" ,"pydat3 mdme 4816 2 42" ,"pydat3 brat 4816 0.01500" ,"pydat3 kfdp 4816 1 -2" ,"pydat3 kfdp 4816 2 1" ,"pydat3 kfdp 4816 3 2" ,"pydat3 kfdp 4816 4 2101" - ,"pydat3 mdme 4817 1 2" ,"pydat3 mdme 4817 2 42" ,"pydat3 brat 4817 0.00500" ,"pydat3 kfdp 4817 1 -4" ,"pydat3 kfdp 4817 2 3" ,"pydat3 kfdp 4817 3 2" ,"pydat3 kfdp 4817 4 2101" - ,"pydat3 mdme 4818 1 1" ,"pydat3 brat 4818 0.00047" ,"pydat3 kfdp 4818 1 443" ,"pydat3 kfdp 4818 2 3212" - ,"pydat3 mdme 4819 1 1" ,"pydat3 brat 4819 0.00024" ,"pydat3 kfdp 4819 1 443" ,"pydat3 kfdp 4819 2 -321" ,"pydat3 kfdp 4819 3 2212" - ,"pydat3 mdme 4820 1 1" ,"pydat3 brat 4820 0.00024" ,"pydat3 kfdp 4820 1 443" ,"pydat3 kfdp 4820 2 -311" ,"pydat3 kfdp 4820 3 2112" - ,"pydat3 mdme 4821 1 1" ,"pydat3 brat 4821 0.00047" ,"pydat3 kfdp 4821 1 443" ,"pydat3 kfdp 4821 2 -321" ,"pydat3 kfdp 4821 3 211" ,"pydat3 kfdp 4821 4 2112" - ,"pydat3 mdme 4822 1 1" ,"pydat3 brat 4822 0.00024" ,"pydat3 kfdp 4822 1 443" ,"pydat3 kfdp 4822 2 -321" ,"pydat3 kfdp 4822 3 111" ,"pydat3 kfdp 4822 4 2212" - ,"pydat3 mdme 4823 1 1" ,"pydat3 brat 4823 0.00047" ,"pydat3 kfdp 4823 1 443" ,"pydat3 kfdp 4823 2 -311" ,"pydat3 kfdp 4823 3 -211" ,"pydat3 kfdp 4823 4 2212" - ,"pydat3 mdme 4824 1 1" ,"pydat3 brat 4824 0.00024" ,"pydat3 kfdp 4824 1 443" ,"pydat3 kfdp 4824 2 -311" ,"pydat3 kfdp 4824 3 111" ,"pydat3 kfdp 4824 4 2112" - ,"pydat3 mdme 4825 1 1" ,"pydat3 brat 4825 0.00047" ,"pydat3 kfdp 4825 1 443" ,"pydat3 kfdp 4825 2 3122" ,"pydat3 kfdp 4825 3 111" - ,"pydat3 mdme 4826 1 1" ,"pydat3 brat 4826 0.00047" ,"pydat3 kfdp 4826 1 443" ,"pydat3 kfdp 4826 2 3212" ,"pydat3 kfdp 4826 3 111" - ,"pydat3 mdme 4827 1 1" ,"pydat3 brat 4827 0.00011" ,"pydat3 kfdp 4827 1 100443" ,"pydat3 kfdp 4827 2 3122" - ,"pydat3 mdme 4828 1 1" ,"pydat3 brat 4828 0.00011" ,"pydat3 kfdp 4828 1 100443" ,"pydat3 kfdp 4828 2 3212" - ,"pydat3 mdme 4829 1 1" ,"pydat3 brat 4829 0.00005" ,"pydat3 kfdp 4829 1 100443" ,"pydat3 kfdp 4829 2 -321" ,"pydat3 kfdp 4829 3 2212" - ,"pydat3 mdme 4830 1 1" ,"pydat3 brat 4830 0.00005" ,"pydat3 kfdp 4830 1 100443" ,"pydat3 kfdp 4830 2 -311" ,"pydat3 kfdp 4830 3 2112" - ,"pydat3 mdme 4831 1 1" ,"pydat3 brat 4831 0.00011" ,"pydat3 kfdp 4831 1 100443" ,"pydat3 kfdp 4831 2 -321" ,"pydat3 kfdp 4831 3 211" ,"pydat3 kfdp 4831 4 2112" - ,"pydat3 mdme 4832 1 1" ,"pydat3 brat 4832 0.00005" ,"pydat3 kfdp 4832 1 100443" ,"pydat3 kfdp 4832 2 -321" ,"pydat3 kfdp 4832 3 111" ,"pydat3 kfdp 4832 4 2212" - ,"pydat3 mdme 4833 1 1" ,"pydat3 brat 4833 0.00011" ,"pydat3 kfdp 4833 1 100443" ,"pydat3 kfdp 4833 2 -311" ,"pydat3 kfdp 4833 3 -211" ,"pydat3 kfdp 4833 4 2212" - ,"pydat3 mdme 4834 1 1" ,"pydat3 brat 4834 0.00005" ,"pydat3 kfdp 4834 1 100443" ,"pydat3 kfdp 4834 2 -311" ,"pydat3 kfdp 4834 3 111" ,"pydat3 kfdp 4834 4 2112" - ,"pydat3 mdme 4835 1 1" ,"pydat3 brat 4835 0.00011" ,"pydat3 kfdp 4835 1 100443" ,"pydat3 kfdp 4835 2 3122" ,"pydat3 kfdp 4835 3 111" - ,"pydat3 mdme 4836 1 1" ,"pydat3 brat 4836 0.00011" ,"pydat3 kfdp 4836 1 100443" ,"pydat3 kfdp 4836 2 3212" ,"pydat3 kfdp 4836 3 111" - ,"pydat3 mdme 4837 1 1" ,"pydat3 brat 4837 0.00006" ,"pydat3 kfdp 4837 1 20443" ,"pydat3 kfdp 4837 2 3212" - ,"pydat3 mdme 4838 1 1" ,"pydat3 brat 4838 0.00003" ,"pydat3 kfdp 4838 1 20443" ,"pydat3 kfdp 4838 2 -321" ,"pydat3 kfdp 4838 3 2212" - ,"pydat3 mdme 4839 1 1" ,"pydat3 brat 4839 0.00003" ,"pydat3 kfdp 4839 1 20443" ,"pydat3 kfdp 4839 2 -311" ,"pydat3 kfdp 4839 3 2112" - ,"pydat3 mdme 4840 1 1" ,"pydat3 brat 4840 0.00006" ,"pydat3 kfdp 4840 1 20443" ,"pydat3 kfdp 4840 2 -321" ,"pydat3 kfdp 4840 3 211" ,"pydat3 kfdp 4840 4 2112" - ,"pydat3 mdme 4841 1 1" ,"pydat3 brat 4841 0.00003" ,"pydat3 kfdp 4841 1 20443" ,"pydat3 kfdp 4841 2 -321" ,"pydat3 kfdp 4841 3 111" ,"pydat3 kfdp 4841 4 2212" - ,"pydat3 mdme 4842 1 1" ,"pydat3 brat 4842 0.00006" ,"pydat3 kfdp 4842 1 20443" ,"pydat3 kfdp 4842 2 -311" ,"pydat3 kfdp 4842 3 -211" ,"pydat3 kfdp 4842 4 2212" - ,"pydat3 mdme 4843 1 1" ,"pydat3 brat 4843 0.00003" ,"pydat3 kfdp 4843 1 20443" ,"pydat3 kfdp 4843 2 -311" ,"pydat3 kfdp 4843 3 111" ,"pydat3 kfdp 4843 4 2112" - ,"pydat3 mdme 4844 1 1" ,"pydat3 brat 4844 0.00006" ,"pydat3 kfdp 4844 1 20443" ,"pydat3 kfdp 4844 2 3122" ,"pydat3 kfdp 4844 3 111" - ,"pydat3 mdme 4845 1 1" ,"pydat3 brat 4845 0.00006" ,"pydat3 kfdp 4845 1 20443" ,"pydat3 kfdp 4845 2 3212" ,"pydat3 kfdp 4845 3 111" - ,"pydat3 mdme 4846 1 1" ,"pydat3 brat 4846 0.00002" ,"pydat3 kfdp 4846 1 445" ,"pydat3 kfdp 4846 2 3122" - ,"pydat3 mdme 4847 1 1" ,"pydat3 brat 4847 0.00002" ,"pydat3 kfdp 4847 1 445" ,"pydat3 kfdp 4847 2 3212" - ,"pydat3 mdme 4848 1 1" ,"pydat3 brat 4848 0.00001" ,"pydat3 kfdp 4848 1 445" ,"pydat3 kfdp 4848 2 -321" ,"pydat3 kfdp 4848 3 2212" - ,"pydat3 mdme 4849 1 1" ,"pydat3 brat 4849 0.00001" ,"pydat3 kfdp 4849 1 445" ,"pydat3 kfdp 4849 2 -311" ,"pydat3 kfdp 4849 3 2112" - ,"pydat3 mdme 4850 1 1" ,"pydat3 brat 4850 0.00002" ,"pydat3 kfdp 4850 1 445" ,"pydat3 kfdp 4850 2 -321" ,"pydat3 kfdp 4850 3 211" ,"pydat3 kfdp 4850 4 2112" - ,"pydat3 mdme 4851 1 1" ,"pydat3 brat 4851 0.00001" ,"pydat3 kfdp 4851 1 445" ,"pydat3 kfdp 4851 2 -321" ,"pydat3 kfdp 4851 3 111" ,"pydat3 kfdp 4851 4 2212" - ,"pydat3 mdme 4852 1 1" ,"pydat3 brat 4852 0.00002" ,"pydat3 kfdp 4852 1 445" ,"pydat3 kfdp 4852 2 -311" ,"pydat3 kfdp 4852 3 -211" ,"pydat3 kfdp 4852 4 2212" - ,"pydat3 mdme 4853 1 1" ,"pydat3 brat 4853 0.00001" ,"pydat3 kfdp 4853 1 445" ,"pydat3 kfdp 4853 2 -311" ,"pydat3 kfdp 4853 3 111" ,"pydat3 kfdp 4853 4 2112" - ,"pydat3 mdme 4854 1 1" ,"pydat3 brat 4854 0.00002" ,"pydat3 kfdp 4854 1 445" ,"pydat3 kfdp 4854 2 3122" ,"pydat3 kfdp 4854 3 111" - ,"pydat3 mdme 4855 1 1" ,"pydat3 brat 4855 0.00002" ,"pydat3 kfdp 4855 1 445" ,"pydat3 kfdp 4855 2 3212" ,"pydat3 kfdp 4855 3 111" -# Ksi_b0 decays -# repoint to place 4901, 17 decays including new ones - ,"pydat3 mdcy 219 2 4901" ,"pydat3 mdcy 219 3 17" ,"pydat3 mdcy 219 1 1" - ,"pydat3 mdme 4901 1 2" ,"pydat3 mdme 4901 2 85" ,"pydat3 brat 4901 0.99992" - ,"pydat3 mdme 4902 1 1" ,"pydat3 brat 4902 0.00047" ,"pydat3 kfdp 4902 1 443" ,"pydat3 kfdp 4902 2 3322" - ,"pydat3 mdme 4903 1 1" ,"pydat3 brat 4903 0.00047" ,"pydat3 kfdp 4903 1 443" ,"pydat3 kfdp 4903 2 3322" ,"pydat3 kfdp 4903 3 111" - ,"pydat3 mdme 4904 1 1" ,"pydat3 brat 4904 0.00024" ,"pydat3 kfdp 4904 1 443" ,"pydat3 kfdp 4904 2 -321" ,"pydat3 kfdp 4904 3 3222" - ,"pydat3 mdme 4905 1 1" ,"pydat3 brat 4905 0.00024" ,"pydat3 kfdp 4905 1 443" ,"pydat3 kfdp 4905 2 -311" ,"pydat3 kfdp 4905 3 3212" - ,"pydat3 mdme 4906 1 1" ,"pydat3 brat 4906 0.00011" ,"pydat3 kfdp 4906 1 100443" ,"pydat3 kfdp 4906 2 3322" - ,"pydat3 mdme 4907 1 1" ,"pydat3 brat 4907 0.00011" ,"pydat3 kfdp 4907 1 100443" ,"pydat3 kfdp 4907 2 3322" ,"pydat3 kfdp 4907 3 111" - ,"pydat3 mdme 4908 1 1" ,"pydat3 brat 4908 0.00005" ,"pydat3 kfdp 4908 1 100443" ,"pydat3 kfdp 4908 2 -321" ,"pydat3 kfdp 4908 3 3222" - ,"pydat3 mdme 4909 1 1" ,"pydat3 brat 4909 0.00005" ,"pydat3 kfdp 4909 1 100443" ,"pydat3 kfdp 4909 2 -311" ,"pydat3 kfdp 4909 3 3212" - ,"pydat3 mdme 4910 1 1" ,"pydat3 brat 4910 0.00006" ,"pydat3 kfdp 4910 1 20443" ,"pydat3 kfdp 4910 2 3322" - ,"pydat3 mdme 4911 1 1" ,"pydat3 brat 4911 0.00006" ,"pydat3 kfdp 4911 1 20443" ,"pydat3 kfdp 4911 2 3322" ,"pydat3 kfdp 4911 3 111" - ,"pydat3 mdme 4912 1 1" ,"pydat3 brat 4912 0.00003" ,"pydat3 kfdp 4912 1 20443" ,"pydat3 kfdp 4912 2 -321" ,"pydat3 kfdp 4912 3 3222" - ,"pydat3 mdme 4913 1 1" ,"pydat3 brat 4913 0.00003" ,"pydat3 kfdp 4913 1 20443" ,"pydat3 kfdp 4913 2 -311" ,"pydat3 kfdp 4913 3 3212" - ,"pydat3 mdme 4914 1 1" ,"pydat3 brat 4914 0.00002" ,"pydat3 kfdp 4914 1 445" ,"pydat3 kfdp 4914 2 3322" - ,"pydat3 mdme 4915 1 1" ,"pydat3 brat 4915 0.00002" ,"pydat3 kfdp 4915 1 445" ,"pydat3 kfdp 4915 2 3322" ,"pydat3 kfdp 4915 3 111" - ,"pydat3 mdme 4916 1 1" ,"pydat3 brat 4916 0.00001" ,"pydat3 kfdp 4916 1 445" ,"pydat3 kfdp 4916 2 -321" ,"pydat3 kfdp 4916 3 3222" - ,"pydat3 mdme 4917 1 1" ,"pydat3 brat 4917 0.00001" ,"pydat3 kfdp 4917 1 445" ,"pydat3 kfdp 4917 2 -311" ,"pydat3 kfdp 4917 3 3212" -# Ksi_b- decays -# repoint to place 4921, 17 decays including new ones - ,"pydat3 mdcy 211 2 4921" ,"pydat3 mdcy 211 3 17" ,"pydat3 mdcy 211 1 1" - ,"pydat3 mdme 4921 1 2" ,"pydat3 mdme 4921 2 85" ,"pydat3 brat 4921 0.99992" - ,"pydat3 mdme 4922 1 1" ,"pydat3 brat 4922 0.00047" ,"pydat3 kfdp 4922 1 443" ,"pydat3 kfdp 4922 2 3312" - ,"pydat3 mdme 4923 1 1" ,"pydat3 brat 4923 0.00047" ,"pydat3 kfdp 4923 1 443" ,"pydat3 kfdp 4923 2 3312" ,"pydat3 kfdp 4923 3 111" - ,"pydat3 mdme 4924 1 1" ,"pydat3 brat 4924 0.00024" ,"pydat3 kfdp 4924 1 443" ,"pydat3 kfdp 4924 2 -321" ,"pydat3 kfdp 4924 3 3212" - ,"pydat3 mdme 4925 1 1" ,"pydat3 brat 4925 0.00024" ,"pydat3 kfdp 4925 1 443" ,"pydat3 kfdp 4925 2 -311" ,"pydat3 kfdp 4925 3 3112" - ,"pydat3 mdme 4926 1 1" ,"pydat3 brat 4926 0.00011" ,"pydat3 kfdp 4926 1 100443" ,"pydat3 kfdp 4926 2 3312" - ,"pydat3 mdme 4927 1 1" ,"pydat3 brat 4927 0.00011" ,"pydat3 kfdp 4927 1 100443" ,"pydat3 kfdp 4927 2 3312" ,"pydat3 kfdp 4927 3 111" - ,"pydat3 mdme 4928 1 1" ,"pydat3 brat 4928 0.00005" ,"pydat3 kfdp 4928 1 100443" ,"pydat3 kfdp 4928 2 -321" ,"pydat3 kfdp 4928 3 3212" - ,"pydat3 mdme 4929 1 1" ,"pydat3 brat 4929 0.00005" ,"pydat3 kfdp 4929 1 100443" ,"pydat3 kfdp 4929 2 -311" ,"pydat3 kfdp 4929 3 3112" - ,"pydat3 mdme 4930 1 1" ,"pydat3 brat 4930 0.00006" ,"pydat3 kfdp 4930 1 20443" ,"pydat3 kfdp 4930 2 3312" - ,"pydat3 mdme 4931 1 1" ,"pydat3 brat 4931 0.00006" ,"pydat3 kfdp 4931 1 20443" ,"pydat3 kfdp 4931 2 3312" ,"pydat3 kfdp 4931 3 111" - ,"pydat3 mdme 4932 1 1" ,"pydat3 brat 4932 0.00003" ,"pydat3 kfdp 4932 1 20443" ,"pydat3 kfdp 4932 2 -321" ,"pydat3 kfdp 4932 3 3212" - ,"pydat3 mdme 4933 1 1" ,"pydat3 brat 4933 0.00003" ,"pydat3 kfdp 4933 1 20443" ,"pydat3 kfdp 4933 2 -311" ,"pydat3 kfdp 4933 3 3112" - ,"pydat3 mdme 4934 1 1" ,"pydat3 brat 4934 0.00002" ,"pydat3 kfdp 4934 1 445" ,"pydat3 kfdp 4934 2 3312" - ,"pydat3 mdme 4935 1 1" ,"pydat3 brat 4935 0.00002" ,"pydat3 kfdp 4935 1 445" ,"pydat3 kfdp 4935 2 3312" ,"pydat3 kfdp 4935 3 111" - ,"pydat3 mdme 4936 1 1" ,"pydat3 brat 4936 0.00001" ,"pydat3 kfdp 4936 1 445" ,"pydat3 kfdp 4936 2 -321" ,"pydat3 kfdp 4936 3 3212" - ,"pydat3 mdme 4937 1 1" ,"pydat3 brat 4937 0.00001" ,"pydat3 kfdp 4937 1 445" ,"pydat3 kfdp 4937 2 -311" ,"pydat3 kfdp 4937 3 3112" -# Omega_b- decays -# repoint to place 4941, 17 decays including new ones - ,"pydat3 mdcy 227 2 4941" ,"pydat3 mdcy 227 3 17" ,"pydat3 mdcy 227 1 1" - ,"pydat3 mdme 4941 1 2" ,"pydat3 mdme 4941 2 85" ,"pydat3 brat 4941 0.99992" - ,"pydat3 mdme 4942 1 1" ,"pydat3 brat 4942 0.00047" ,"pydat3 kfdp 4942 1 443" ,"pydat3 kfdp 4942 2 3334" - ,"pydat3 mdme 4943 1 1" ,"pydat3 brat 4943 0.00047" ,"pydat3 kfdp 4943 1 443" ,"pydat3 kfdp 4943 2 3334" ,"pydat3 kfdp 4943 3 111" - ,"pydat3 mdme 4944 1 1" ,"pydat3 brat 4944 0.00024" ,"pydat3 kfdp 4944 1 443" ,"pydat3 kfdp 4944 2 -321" ,"pydat3 kfdp 4944 3 3322" - ,"pydat3 mdme 4945 1 1" ,"pydat3 brat 4945 0.00024" ,"pydat3 kfdp 4945 1 443" ,"pydat3 kfdp 4945 2 -311" ,"pydat3 kfdp 4945 3 3312" - ,"pydat3 mdme 4946 1 1" ,"pydat3 brat 4946 0.00011" ,"pydat3 kfdp 4946 1 100443" ,"pydat3 kfdp 4946 2 3334" - ,"pydat3 mdme 4947 1 1" ,"pydat3 brat 4947 0.00011" ,"pydat3 kfdp 4947 1 100443" ,"pydat3 kfdp 4947 2 3334" ,"pydat3 kfdp 4947 3 111" - ,"pydat3 mdme 4948 1 1" ,"pydat3 brat 4948 0.00005" ,"pydat3 kfdp 4948 1 100443" ,"pydat3 kfdp 4948 2 -321" ,"pydat3 kfdp 4948 3 3322" - ,"pydat3 mdme 4949 1 1" ,"pydat3 brat 4949 0.00005" ,"pydat3 kfdp 4949 1 100443" ,"pydat3 kfdp 4949 2 -311" ,"pydat3 kfdp 4949 3 3312" - ,"pydat3 mdme 4950 1 1" ,"pydat3 brat 4950 0.00006" ,"pydat3 kfdp 4950 1 20443" ,"pydat3 kfdp 4950 2 3334" - ,"pydat3 mdme 4951 1 1" ,"pydat3 brat 4951 0.00006" ,"pydat3 kfdp 4951 1 20443" ,"pydat3 kfdp 4951 2 3334" ,"pydat3 kfdp 4951 3 111" - ,"pydat3 mdme 4952 1 1" ,"pydat3 brat 4952 0.00003" ,"pydat3 kfdp 4952 1 20443" ,"pydat3 kfdp 4952 2 -321" ,"pydat3 kfdp 4952 3 3322" - ,"pydat3 mdme 4953 1 1" ,"pydat3 brat 4953 0.00003" ,"pydat3 kfdp 4953 1 20443" ,"pydat3 kfdp 4953 2 -311" ,"pydat3 kfdp 4953 3 3312" - ,"pydat3 mdme 4954 1 1" ,"pydat3 brat 4954 0.00002" ,"pydat3 kfdp 4954 1 445" ,"pydat3 kfdp 4954 2 3334" - ,"pydat3 mdme 4955 1 1" ,"pydat3 brat 4955 0.00002" ,"pydat3 kfdp 4955 1 445" ,"pydat3 kfdp 4955 2 3334" ,"pydat3 kfdp 4955 3 111" - ,"pydat3 mdme 4956 1 1" ,"pydat3 brat 4956 0.00001" ,"pydat3 kfdp 4956 1 445" ,"pydat3 kfdp 4956 2 -321" ,"pydat3 kfdp 4956 3 3322" - ,"pydat3 mdme 4957 1 1" ,"pydat3 brat 4957 0.00001" ,"pydat3 kfdp 4957 1 445" ,"pydat3 kfdp 4957 2 -311" ,"pydat3 kfdp 4957 3 3312" -# -# The above assumes that psi', chi_0c, chi_1c and chi_2c are forced to J/psi -# switch off other psi' channels - ,"pydat3 mdme 1567 1 0" - ,"pydat3 mdme 1568 1 0" - ,"pydat3 mdme 1569 1 0" - ,"pydat3 mdme 1577 1 0" -# switch off other chi_0c channels - ,"pydat3 mdme 1502 1 0" -# switch off other chi_1c channels - ,"pydat3 mdme 1556 1 0" -# switch off other chi_2c channels - ,"pydat3 mdme 862 1 0" - ] diff --git a/Generators/EvtGen_i/share/MC11.108424.PythiaB_Bs_Jpsi_mu0mu0_phi_KK_nopTcuts_PhysAngles.py b/Generators/EvtGen_i/share/MC11.108424.PythiaB_Bs_Jpsi_mu0mu0_phi_KK_nopTcuts_PhysAngles.py deleted file mode 100644 index 9bc83e112f789c111df1ebca3733c2fe0cf0513e..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/MC11.108424.PythiaB_Bs_Jpsi_mu0mu0_phi_KK_nopTcuts_PhysAngles.py +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################### -# -# MC11.108424.PythiaB_Bs_Jpsi_mu0mu0_phi_KK_nopTcuts.py -# Author: ATLAS B-physics group -# Generator of Bs -> phi(K+K-) J/psi(mu+mu-) decay -# PRODUCTION SYSTEM FRAGMENT -# -############################################################################### - -#------------------------------------------------------------------------------ -# Production driving parameters -#------------------------------------------------------------------------------ - -from MC11JobOptions.PythiaBEvgenConfig import evgenConfig -evgenConfig.minevents = 100 - -#------------------------------------------------------------------------------ -# Import all needed algorithms (in the proper order) -#------------------------------------------------------------------------------ - -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -include( "MC11JobOptions/MC11_PythiaB_Common.py" ) - -#from GeneratorFilters.GeneratorFiltersConf import BSignalFilter -#topAlg += BSignalFilter() -#BSignalFilter = topAlg.BSignalFilter - -#------------------------------------------------------------------------------ -# PythiaB parameters settings -#------------------------------------------------------------------------------ - -PythiaB.ForceCDecay = "no" -PythiaB.ForceBDecay = "yes" - -# Updated B-decays list (changes B-hadron decay tables including mdme line -# number to start from 4500 - see also ...CloseAntibQuarkNew.py below) -include( "MC11JobOptions/MC11_PythiaB_Bchannels.py" ) - -# Clasical PythiaB way of producing exclusive decay channel -# (close whole the decay and then open only the one requested channel) -include( "MC11JobOptions/MC11_PythiaB_CloseAntibQuarkNew.py" ) - -# Open channel for B0s -> phi J/psi and ban other than J/psi->mumu decays -PythiaB.PythiaCommand += [ "pydat3 mdme 4730 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] - -# User-finsel to accept only charged phi daughters -PythiaB.ForceDecayChannel = "BsAngles" -# Parameter of the finsel: flat(0)/physics(1), pT_L1_mu, pT_L2_mu, eta_mu, kaon pT,eta, Bs pT,eta, (Bs lifetime) -PythiaB.DecayChannelParameters = [ 1.0, 0.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 0.0 ] - -# Correct B0s lifetime as in PDG2010 -PythiaB.PythiaCommand += ["pydat2 pmas 531 4 0.4599"] - -# Production settings -include( "MC11JobOptions/MC11_PythiaB_Btune.py" ) -PythiaB.PythiaCommand += [ "pysubs ckin 3 8.0", - "pysubs ckin 9 -3.0", - "pysubs ckin 10 3.0", - "pysubs ckin 11 -3.0", - "pysubs ckin 12 3.0", - "pysubs msel 1" ] - -# Simulate only b-flavour events -PythiaB.flavour = 5. - -# Pythia b-quark cuts -PythiaB.cutbq = [ "0. 102.5 and 6.0 3.5" ] - -# Repeated hadronization -PythiaB.mhadr = 10. - -#------------------------------------------------------------------------------ -# Signal event filtering -#------------------------------------------------------------------------------ - -# LVL1: pT_L1, eta_L1 -PythiaB.lvl1cut = [ 1., 0.0, 102.5 ] -# LVL2: pdg (muon/electron), pT_L2, eta_L2 -PythiaB.lvl2cut = [ 0., 13., 0., 2.5 ] -# Offline: pT, eta cuts for kaon/pion, muon, electron -PythiaB.offcut = [ 0., 0.5, 2.5, 2.5, 2.5, 0.5, 2.5 ] - -# Ntuple content settings -#BSignalFilter.SignaltoNtup = 10.0*float(evgenConfig.minevents)/float(evgenConfig.efficiency) -#BSignalFilter.StoreBQuarks = True - -############################################################################### -# -# End of job options fragment for B0s -> phi(K+K-) J/psi(mu+mu-) -# -############################################################################### diff --git a/Generators/EvtGen_i/share/MC8.108424.PythiaB_Bs_Jpsi_mu6mu4_phi_KK.py b/Generators/EvtGen_i/share/MC8.108424.PythiaB_Bs_Jpsi_mu6mu4_phi_KK.py deleted file mode 100644 index ed498765966d8e7c5bad0f4346bb80f5c67d2f1d..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/MC8.108424.PythiaB_Bs_Jpsi_mu6mu4_phi_KK.py +++ /dev/null @@ -1,89 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -from EvgenJobOptions.PythiaBEvgenConfig import evgenConfig -evgenConfig.minevents = 500 -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -include ( "EvgenJobOptions/MC8_PythiaB_Common.py" ) - -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "EvgenJobOptions/MC8_PythiaB_CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] -# This phis which have originated from Bs to decay into two kaons. Other phis -# are left to decay as normal. Comment this line to prevent the phi forcing. -# See user_finsel.F (in src directory) for more such forcing options. -PythiaB.ForceDecayChannel = "BsAngles" -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "EvgenJobOptions/MC8_PythiaB_Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.0, 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 40. -#============================================================== -# -# End of job options file -# -############################################################### - diff --git a/Generators/EvtGen_i/share/PythiaB_B0_DPhiA1_Signal3.py b/Generators/EvtGen_i/share/PythiaB_B0_DPhiA1_Signal3.py deleted file mode 100644 index 81325e7bf5af5dfb660d7ba038db5193c63c207a..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_B0_DPhiA1_Signal3.py +++ /dev/null @@ -1,207 +0,0 @@ - ############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0->D(Phi(K+K-)Pi)A1(Rho(Pi+Pi-)Pi) -# -# Author : W. Walkowiak, 2006-12-11 -# (adjusted after a template provided by PythiaB) -# changed: -# -# $Id: PythiaB_B0_DPhiA1_Signal3.py,v 1.2 2007-03-20 14:21:33 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = 100 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here B0 -> D- a1+ with D->phi pi -# -# DXChannel to be set here (close all D- -> phi pi- channels) -DXChannel = "Dphipi" -include( "DXphipi.py" ) -# -# 879: B0 -> D- a1+ -# 715: D- -> Phi Pi- -# -PythiaB.PythiaCommand += [ "pydat3 mdme 879 1 1", - "pydat3 mdme 715 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-12-11 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+) -# or (from B0->D-X) or (from B0bar->D+X)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [1., 0., 1., 1.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 100000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 400 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_B0_DPhiPi_Signal3.py b/Generators/EvtGen_i/share/PythiaB_B0_DPhiPi_Signal3.py deleted file mode 100644 index 3254a004efd06be0cb3d39b1928a4556f9ada78d..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_B0_DPhiPi_Signal3.py +++ /dev/null @@ -1,210 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0->D(Phi(K+K-)Pi)Pi -# -# Author: W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# Changes: BE, 2006-12-11 -# Adjusted for B0->DPi channel -# WW, 2006-12-12 -# added default options section -# -# $Id: PythiaB_B0_DPhiPi_Signal3.py,v 1.2 2007-03-20 14:21:41 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'NEventGen' : 400, - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = NEventGen -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here B0 -> D-pi+ with D->phi pi -# -#background channel B0->D-Pi+ -# 877: B0 -> D-Pi+ -# 715: D- -> PhiPi- - -# DXChannel has to be set before DXphipi.py is included -DXChannel = "Dphipi" -include( "DXphipi.py" ) - -PythiaB.PythiaCommand += [ "pydat3 mdme 877 1 1", - "pydat3 mdme 715 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -PythiaB.DecayChannelParameters = [1., 0., 0., 0.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 50000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = NEventGen -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_B0_DsPhiA1_Signal3.py b/Generators/EvtGen_i/share/PythiaB_B0_DsPhiA1_Signal3.py deleted file mode 100644 index 36170b5d8efcd669d6466720a7c9c30acbb71655..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_B0_DsPhiA1_Signal3.py +++ /dev/null @@ -1,213 +0,0 @@ - ############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0->Ds(Phi(K+K-)Pi)A1(Rho(Pi+Pi-)Pi) -# -# Author : W. Walkowiak, 2006-12-11 -# (adjusted after a template provided by PythiaB) -# changed: -# -# $Id: PythiaB_B0_DsPhiA1_Signal3.py,v 1.2 2007-03-20 14:21:49 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'NEventGen' : 400, - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = NEventGen -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here B0 -> Ds+a1- with Ds->phi pi -# (charge conjugated) -# -# DXChannel to be set here (close all Ds- -> phi pi- decays) -DXChannel = "Dsbarphipi" -include( "DXphipi.py" ) -# -# 898: B0 -> Ds+ a1- -# -PythiaB.PythiaCommand += [ "pydat3 mdme 898 1 2", - "pydat3 mdme 898 2 0", - "pydat3 kfdp 898 1 431", - "pydat3 kfdp 898 2 -20213", - "pydat3 kfdp 898 3 0", - "pydat3 kfdp 898 4 0", - "pydat3 mdme 831 1 1"]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-12-11 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows:x -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+) -# or (from B0->D-X) or (from B0bar->D+X)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [1., 0., 1., 1.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 100000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = NEventGen -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_B0_DsPhiPi_Signal3.py b/Generators/EvtGen_i/share/PythiaB_B0_DsPhiPi_Signal3.py deleted file mode 100644 index 295e2093ffe052bbdd201119077db9acc44af124..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_B0_DsPhiPi_Signal3.py +++ /dev/null @@ -1,215 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0->Ds(Phi(K+K-)Pi)Pi -# -# Author: W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# Changes: BE, 2006-12-11 -# Adjusted for B0->DsPi channel -# WW, 2006-12-12 -# added default options section -# -# $Id: PythiaB_B0_DsPhiPi_Signal3.py,v 1.2 2007-03-20 14:21:56 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'NEventGen' : 400, - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = NEventGen -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -MessageSvc.defaultLimit = 9999999 # all messages -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here B0 -> Ds pi with Ds->phi pi -# -# background channel B0->Ds+(phiPi+)Pi- is c.c. -# 898: B0 -> Ds+Pi- has to be created from B0 -> csbar - -# DXChannel has to be set before DXphipi.py is included -DXChannel = "Dsbarphipi" -include( "DXphipi.py" ) - -PythiaB.PythiaCommand += [ "pydat3 mdme 898 1 2", - "pydat3 mdme 898 2 0", - "pydat3 kfdp 898 1 431", - "pydat3 kfdp 898 2 -211", - "pydat3 kfdp 898 3 0", - "pydat3 kfdp 898 4 0", - "pydat3 mdme 831 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -PythiaB.DecayChannelParameters = [1., 0., 0., 0.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 50000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = NEventGen -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Bp_D0MuNu_Signal3.py b/Generators/EvtGen_i/share/PythiaB_Bp_D0MuNu_Signal3.py deleted file mode 100644 index 435764b8da1f1f711e9d64c73c83f54e01a8c87c..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Bp_D0MuNu_Signal3.py +++ /dev/null @@ -1,235 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: Bp->D0 mu nu -# -# Author : W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# changed: 2006-09-07, w.w. -- added Btune options -# 2006-11-10, w.w. -- adjusted for release 12 -# -# $Id: PythiaB_Bp_D0MuNu_Signal3.py,v 1.2 2007-03-20 14:22:12 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = 100 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here Bs -> D0bar mu+ nu with -# -# close all D0bar decay channels here -# include( "CloseD0bar.py" ) - -# 831: Ds+ -> PhiPi+ -# 851: D*s+ -> Ds+gam -# 852: D*s+ -> Ds+pi0 -# 953: Bs -> Ds-e+nu -# 954: Bs -> D*s-e+nu -# 959: Bs -> Ds-mu+nu -# 960: Bs -> D*s-mu+nu -# 965: Bs -> Ds-tau+nu -# 966: Bs -> D*s-tau+nu -# 967: Bs -> Ds-Pi+ -# 968: Bs -> Ds-rho+ -# 969: Bs -> Ds-a1+ -# 970: Bs -> D*s-Pi+ -# 971: Bs -> D*s-rho+ -# 972: Bs -> D*s-a1+ -# 973: Bs -> Ds-Ds+ -# 974 Bs -> Ds-D*s+ -# 975 Bs -> D*s-Ds+ -# 976 Bs -> D*s-D*s+ -# -# 914 B+ -> D0bar mu+ nu_mu - -PythiaB.PythiaCommand += [ "pydat3 mdme 914 1 1" - ]; - -PythiaB.ForceCDecay = "yes"; -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -## PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [0., 0., 0., 0.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 1., 13., 5., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 100000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 400 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -# include( "CBNT_Athena/CBNT_Athena_jobOptions.py" ) -# include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -# CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -# CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -# CBNT_Athena.NtupleLocID = "/FILE1/CBNT/t3333" # name of the tree -# All.Enable = True # save ALL particles - -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -# CBNT_AthenaAware.NtupleLocID = "/FILE1/CBNT/t3333" # name of the tree -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Bs_DsPhiMuNu_Signal3.py b/Generators/EvtGen_i/share/PythiaB_Bs_DsPhiMuNu_Signal3.py deleted file mode 100644 index 8821824a48b314f53d955c45ce854fc2ecd2767e..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Bs_DsPhiMuNu_Signal3.py +++ /dev/null @@ -1,182 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0s->Ds(Phi(K+K-)Pi)A1MuNu -# -# Author: W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# Changes: WW, 2006-04-13 -# Removed CBNT_ lines; added RootHistSvc again -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = 100 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here Bs -> Ds mu nu with Ds->phi pi -# -include( "Dsphipi.py" ) -# 959: Bs -> Ds-mu+nu -# 967: Bs -> Ds-Pi+ -# 969: Bs -> Ds-a1+ -# 831: Ds- -> PhiPi- - -PythiaB.PythiaCommand += [ "pydat3 mdme 959 1 1", - "pydat3 mdme 831 1 1" ]; -PythiaB.ForceCDecay = "yes"; - -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [1., 0., 0., 0.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -# PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -PythiaB.lvl2cut = [ 1., 13., 5., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 500000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 50 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -#theApp.Dlls += [ "RootHistCnv" ] -#theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#NtupleSvc = Service( "NtupleSvc" ) -#NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Bs_DsStDsPhiA1_Signal3.py b/Generators/EvtGen_i/share/PythiaB_Bs_DsStDsPhiA1_Signal3.py deleted file mode 100644 index e9bfa12f00d877cf09b57d325a4b7e5eb18f24e5..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Bs_DsStDsPhiA1_Signal3.py +++ /dev/null @@ -1,233 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -# Decay channel: B0s->DsSt(Ds(Phi(K+K-)Pi)X)A1(Rho(Pi+Pi-)Pi) -# -# Author : W. Walkowiak, 2006-04-02 -# (adjusted after a template provided by PythiaB) -# changed: 2006-09-07, w.w. -- added Btune options -# 2006-11-10, w.w. -- adjusted for release 12 -# -# $Id: PythiaB_Bs_DsStDsPhiA1_Signal3.py,v 1.2 2007-03-20 14:22:55 msmizans Exp $ -# -#============================================================== -# -varInit = dir() - -# default options (can be overwritten by command line options) -PythiaBDecayFlags = { - 'BtuneOptionsFile' : "Btune.py" - } - -# set variable to default or from personalized JobOptions -# if not already set (code taken from RecExCommon) -for o in [ o for o in PythiaBDecayFlags.keys() if not o in varInit ]: - exec '%s = PythiaBDecayFlags["%s"]' % (o,o) - -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submission script -#-------------------------------------------------------------- -theApp.EvtMax = 100 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submission script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -AtRndmGenSvc.ReadFromFile = True; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) -PythiaB.ForceBDecay = "yes" -# -# open your exclusive channel here Bs -> Ds* a1 with Ds* -> Ds X, Ds->phi pi -# -include( "Dsphipi.py" ) - -# 831: Ds+ -> PhiPi+ -# 851: D*s+ -> Ds+gam -# 852: D*s+ -> Ds+pi0 -# 953: Bs -> Ds-e+nu -# 954: Bs -> D*s-e+nu -# 959: Bs -> Ds-mu+nu -# 960: Bs -> D*s-mu+nu -# 965: Bs -> Ds-tau+nu -# 966: Bs -> D*s-tau+nu -# 967: Bs -> Ds-Pi+ -# 968: Bs -> Ds-rho+ -# 969: Bs -> Ds-a1+ -# 970: Bs -> D*s-Pi+ -# 971: Bs -> D*s-rho+ -# 972: Bs -> D*s-a1+ -# 973: Bs -> Ds-Ds+ -# 974 Bs -> Ds-D*s+ -# 975 Bs -> D*s-Ds+ -# 976 Bs -> D*s-D*s+ - -PythiaB.PythiaCommand += [ "pydat3 mdme 972 1 1", - "pydat3 mdme 851 1 1", - "pydat3 mdme 852 1 1", - "pydat3 mdme 831 1 1" ]; -PythiaB.ForceCDecay = "yes"; -# -# w.w., 2006-04-02 revised: -# -# user_finsel.F decay particle channel -# -PythiaB.ForceDecayChannel = "DsPhiX"; -# -# Decay particle selection for DsPhiX: -# 0. (off)/ 1. (on) -- ordered as follows: -# 1 : PhiKK decay -- Phi -> K+K- -# ((from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 2 : DsPhi decay -- Ds*- -> Ds-X, Ds- -> Phi pi-, Phi -> K+K- -# (from B0s, B0bar or B-) or (from B0sbar, B0 or B+)) -# 3 : A1RhoPi decay -- a1 -> RhoPi (from B0s) -# 4 : RhoPiPi decay -- Rho -> Pi+Pi- (from B0s) -# -PythiaB.DecayChannelParameters = [0., 1., 1., 1.]; - -# -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-production you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( BtuneOptionsFile ) - -# PythiaB.PythiaCommand += ["pysubs ckin 3 6.", -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["6.0 2.5 and 6.0 2.5"] -# PythiaB.cutbq = ["6.0 4.5 and 6.0 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# -# ------------- Maximum number of tries for hard process ------------- -PythiaB.maxTriesHard = 100000. -# -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 100. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 400 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -#-------------------------------------------------------------- -# CBNT output -#-------------------------------------------------------------- -# include( "CBNT_Athena/CBNT_Athena_jobOptions.py" ) -# include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -# CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -# CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -# CBNT_Athena.NtupleLocID = "/FILE1/CBNT/t3333" # name of the tree -# All.Enable = True # save ALL particles - -CBNTAthenaAware=True -include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) -include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) -# include( "RecExCommon/CBNT_Truth_jobOptions.py" ) -include( "CBNT_Truth_jobOptions.py" ) -CBNT_Truth.MaxNbParticles = 6000 # maximum number of particles in the ntuple -CBNT_Truth.MaxNbVertices = 6000 # maximum number of vertices in the ntuple -# CBNT_AthenaAware.NtupleLocID = "/FILE1/CBNT/t3333" # name of the tree -All.Enable = True # save ALL particles - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -theApp.Dlls += [ "RootHistCnv" ] -theApp.HistogramPersistency = "ROOT" - -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -RootHistSvc = Service( "RootHistSvc" ) -NtupleSvc = Service( "NtupleSvc" ) -NtupleSvc.Output = ["FILE1 DATAFILE='pythiaB.root' TYP='ROOT' OPT='NEW'"] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = INFO - -#---------------------------------------------------------------- # Pool persistency -#---------------------------------------------------------------- -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += ["2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Bs_GammaMuMu_Signal.py b/Generators/EvtGen_i/share/PythiaB_Bs_GammaMuMu_Signal.py deleted file mode 100644 index 684dd2978c37a1d035cd3123b996b302b7d797a0..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Bs_GammaMuMu_Signal.py +++ /dev/null @@ -1,164 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 50 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T O O P E N T H E U S E R C H A N N E L -# Bs -> gamma mu+ mu- -PythiaB.PythiaCommand += ["pydat3 mdme 965 1 1", - "pydat3 kfdp 965 1 13", - "pydat3 kfdp 965 2 -13", - "pydat3 kfdp 965 3 22", - "pydat3 kfdp 965 4 0", - "pydat3 kfdp 965 5 0", - "pydat3 brat 965 0.000000001" ] - - -PythiaB.ForceDecayChannel = "BsGammaMuMu" -# lvl1 and lvl2 cuts pt_L1 eta_L1 pt_L2 eta_L2 -PythiaB.DecayChannelParameters = [1., 5.8, 2.5, 1., 5.8, 2.5] ; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -# for BsPhiMuMu, BdKstarMuMu BsGammaMuMu lvl1,lvl2 must be OFF -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ??? ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 6. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 50 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 50. - - - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Master.py b/Generators/EvtGen_i/share/PythiaB_Master.py deleted file mode 100644 index 3bd5da789a20ed92eedb923e54d3a6aec7c88939..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Master.py +++ /dev/null @@ -1,68 +0,0 @@ -############################################################################### -# -# PythiaB_Master.py -# Author: ATLAS B-physics group -# Use this script to execute standard production job options. -# -############################################################################### - -#------------------------------------------------------------------------------ -# General Application Configuration options -#------------------------------------------------------------------------------ - -import AthenaCommon.AtlasUnixGeneratorJob -include( "PartPropSvc/PartPropSvc.py" ) -from AthenaCommon.AppMgr import theApp -from AthenaCommon.AppMgr import ServiceMgr - -#------------------------------------------------------------------------------ -# Events to execute -#------------------------------------------------------------------------------ - -theApp.EvtMax = 100 -ServiceMgr.EventSelector.RunNumber = 108524 -ServiceMgr.EventSelector.FirstEvent = 1 - -#------------------------------------------------------------------------------ -# Random seeds initialization -#------------------------------------------------------------------------------ - -from AthenaServices.AthenaServicesConf import AtRndmGenSvc -AtRndmGenSvc = AtRndmGenSvc() -ServiceMgr += AtRndmGenSvc - -# See EvgenJobTransforms/Evgen_randomseeds.py -AtRndmGenSvc.Seeds = ['PYTHIA 47898993 0', 'PYTHIA_INIT 820021 2347532'] - -#------------------------------------------------------------------------------ -# Output level threshold: 1=VERBOSE 2=DEBUG 3=INFO 4=WARNING 5=ERROR 6=FATAL -#------------------------------------------------------------------------------ - -ServiceMgr.MessageSvc.OutputLevel = INFO -ServiceMgr.MessageSvc.defaultLimit = 9999999 # all messages - -#------------------------------------------------------------------------------ -# HERE INCLUDE THE PRODUCTION JOB-OPTIONS FRAGMENT -#------------------------------------------------------------------------------ - -include( "MC11.108424.PythiaB_Bs_Jpsi_mu0mu0_phi_KK_nopTcuts_PhysAngles.py" ) - -# Set CMS energy -PythiaB.PythiaCommand += [ "pyinit win 7000"] - -#------------------------------------------------------------------------------ -# POOL persistency -#------------------------------------------------------------------------------ - -from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream -Stream1 = AthenaPoolOutputStream( "StreamEVGEN" ) - -# 2101 = EventInfo, 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "evgen.pool.root" - -############################################################################### -# -# End of PythiaB_Master.py job-options -# -############################################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_Signal.py b/Generators/EvtGen_i/share/PythiaB_Signal.py deleted file mode 100644 index bce19decf15615b8544cc39777423e33d06ea538..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_Signal.py +++ /dev/null @@ -1,164 +0,0 @@ -############################################################### -# -# Job options file for generation of B-events -# in user selected exclusive channel -# -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 5 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIAB -#-------------------------------------------------------------- -#PythiaB.ForceBDecay = "no"; -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# ------------- FORCE YOUR B CHANNEL HERE ------------- -#-------------------------------------------------------------- -# To force your B-decay channels decomment following 2 lines: -include( "CloseAntibQuark.py" ) - -PythiaB.ForceBDecay = "yes" -# T H R E E E X A M P L E S T O O P E N Y O U R C H A N N E L -# Decomment one of following examples or create your analogically -# open your exclusive channel here Bs -> J/psi(mumu) phi -PythiaB.PythiaCommand += ["pydat3 mdme 982 1 1", - "pydat3 mdme 858 1 0", - "pydat3 mdme 860 1 0" ] -# open your exclusive channel here Bs -> Ds pi with Ds->phi pi -##include "Dsphipi.txt" -#PythiaB.PythiaCommand += {"pydat3 mdme 967 1 1", -# "pydat3 mdme 831 1 1" }; -#PythiaB.ForceCDecay = "yes"; -# open your exclusive channel here Bs -> J/psi(mumu) K0 -#PythiaB.PythiaCommand += {"pydat3 mdme 889 1 1", -# "pydat3 mdme 858 1 0", -# "pydat3 mdme 860 1 0" }; -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 15.", - "pysubs ckin 9 -3.5", - "pysubs ckin 10 3.5", - "pysubs ckin 11 -3.5", - "pysubs ckin 12 3.5", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -# ------------- Selections on b quarks ------------- -# simulate only b-flavour events -PythiaB.flavour = 5. -# PythiaB force exclusive decay channels only on b=-5 side -# ------------------- b=5 --- and/or --- b=-5 -------- -PythiaB.cutbq = ["0. 102.5 and 10. 2.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 1., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 14. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 50 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 50. - - - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -## Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -##HbookHistSvc.NPAWC = 1500000 -##HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -##HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_bbe10X.py b/Generators/EvtGen_i/share/PythiaB_bbe10X.py deleted file mode 100644 index 9114ce294ea94e4156c31754b15c06e9001cb115..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_bbe10X.py +++ /dev/null @@ -1,135 +0,0 @@ -############################################################### -# -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 10 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["7. 4.5 or 7. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 0., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -#PythiaB.lvl2cut = [ 0., 13., 6., 2.5] -PythiaB.lvl2cut = [ 1., 11., 10., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 9. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 10 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_bbmu12mu12X.py b/Generators/EvtGen_i/share/PythiaB_bbmu12mu12X.py deleted file mode 100644 index 87585b84a90dc4750d73dddd3a61d98715bb8340..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_bbmu12mu12X.py +++ /dev/null @@ -1,134 +0,0 @@ -############################################################### -# -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 10 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 12.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["12. 4.5 or 12. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 12., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 1., 13., 12., 2.5] -#PythiaB.lvl2cut = { 0., 11., 6., 2.5}; -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 20. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 10 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -##HbookHistSvc.NPAWC = 1500000 -##HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -##HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_bbmu4_ChHadr.py b/Generators/EvtGen_i/share/PythiaB_bbmu4_ChHadr.py deleted file mode 100644 index 16dace2b6218609670a057c8a245909cd21a54c7..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_bbmu4_ChHadr.py +++ /dev/null @@ -1,113 +0,0 @@ -############################################################### -# PRODUCTION FRAGMENT -# -# Job options file for generation of bb events, -# -# Only events containing at least one muon -# with pT>4GeV |eta|<2.8 -# and at least one Charm Hadron in the decay of interest -# are written to output. -# -# Author : Leonid Gladilin (gladilin@mail.cern.ch), 2008-0004-14 -# -# Selection criteria can be changed by datacards -#============================================================== -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -# -PythiaB.ForceDecayChannel = "CharmHadrons" -# lvl1 and lvl2 cuts pt_L1 eta_L1 pt_L2 eta_L2 -# D+- Ds+- Lc+- D*(2)pi D*mu D*el D0(2) D0mu D0el |eta| -PythiaB.DecayChannelParameters = [ 4.5, 4.5, -4.5, 4.5, 4.5, 0.0, 0.0, 0.0, 0.0, 2.8] -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 7 -4.", - "pysubs ckin 8 4.", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 5.", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["4. 4.5 or 4. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 4., 2.8] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.8] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 10 -#============================================================== -# -# End of job options file -# -#-------------------------------------------------------------- -# Number of events to be processed (default is 10) -theApp.EvtMax = 10 -#-------------------------------------------------------------- -# -#--------------------------------------------------------------- -# Pool Persistency -#--------------------------------------------------------------- -from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream -Stream1 = AthenaPoolOutputStream( "StreamEVGEN" ) -Stream1.OutputFile = "pythia.bbmu4ch.pool.root" -Stream1.ItemList += [ 'EventInfo#*', 'McEventCollection#*' ] -############################################################### -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_bbmu6e4X.py b/Generators/EvtGen_i/share/PythiaB_bbmu6e4X.py deleted file mode 100644 index be8d6436252237d7b5297afa6c431b751f8d0b50..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_bbmu6e4X.py +++ /dev/null @@ -1,134 +0,0 @@ -############################################################### -# -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 5 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs msel 1"] -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["7. 4.5 or 7. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -#PythiaB.lvl2cut = [ 1., 13., 4., 2.5] -PythiaB.lvl2cut = [ 1., 11., 4., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 20. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 10 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_bbmu6mu4_massX.py b/Generators/EvtGen_i/share/PythiaB_bbmu6mu4_massX.py deleted file mode 100644 index 9e61974288b1d896117686c046b89b4fc31f87d9..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_bbmu6mu4_massX.py +++ /dev/null @@ -1,142 +0,0 @@ -############################################################### -# -# Job options file for generation of B events -# no decay channel is specified. -# Only events containing at least one muon -# with pT>6GeV |eta|<2.5 are written to output -# Selection criteria can be changed by datacards -#============================================================== -#-------------------------------------------------------------- -# General Application Configuration options -#-------------------------------------------------------------- -#theApp.setup( MONTECARLO ) -include( "AthenaCommon/Atlas_Gen.UnixStandardJob.py" ) - -include( "PartPropSvc/PartPropSvc.py" ) - -#-------------------------------------------------------------- -# Private Application Configuration options -#-------------------------------------------------------------- -theApp.Dlls += [ "GaudiAlg" ] -theApp.Dlls += [ "TruthExamples", "PythiaB" ] -theApp.Dlls += [ "GaudiAud" ] -theApp.Dlls += [ "HbookCnv" ] -theApp.Dlls += [ "GeneratorFilters" ] -theAuditorSvc = AuditorSvc() -theAuditorSvc.Auditors = [ "ChronoAuditor" ] -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -theApp.TopAlg = ["PythiaB" , "BSignalFilter"] -theApp.ExtSvc += ["AtRndmGenSvc"] -#-------------------------------------------------------------- -# Number of events to be accepted !! (default is 10) -# re-written if use B job submition script -# RunNumber, FirstEvent re-written if use B job submition script -#-------------------------------------------------------------- -theApp.EvtMax = 5 -EventSelector.RunNumber = 1 -EventSelector.FirstEvent = 1 -#-------------------------------------------------------------- -#User random number seeds - re-written if use B job submition script -#-------------------------------------------------------------- -AtRndmGenSvc = Service( "AtRndmGenSvc" ) -AtRndmGenSvc.Seeds = ["PYTHIA 4789899 989240512", "PYTHIA_INIT 820021 2347532"] -# AtRndmGenSvc.ReadFromFile = true; -# Set output level threshold (2=DEBUG, 3=INFO, 4=WARNING, 5=ERROR, 6=FATAL ) -MessageSvc.OutputLevel = 3 -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = Algorithm( "PythiaB" ) -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -include( "Btune.py" ) - -PythiaB.PythiaCommand += ["pysubs ckin 3 10.", - "pysubs msel 1"] - -# -# Select user_finsel.F decay channel and parameters -# -PythiaB.ForceDecayChannel = "bbmumu" - -PythiaB.DecayChannelParameters = [8.0] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 5. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["7. 4.5 or 7. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 6., 2.5] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 1., 13., 4., 2.5] -#PythiaB.lvl2cut = [ 1., 11., 4., 2.5] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0., 102.5, 0., 102.5, 0., 102.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 20. -# ------------- For how many events store B-chain in NTUPLE ------------- -BSignalFilter = Algorithm( "BSignalFilter" ) -BSignalFilter.SignaltoNtup = 10 -# ------------- For how many events store B-chain in ascii ------------- -PythiaB.SignalDumptoAscii = 10. - -############################################################### - -#-------------------------------------------------------------- -# Histogram & Ntuple Persistency -#-------------------------------------------------------------- -# Change the following line to "RootHistCnv" for ROOT persistency -#theApp.Dlls += [ "RootHistCnv" ] -# Change the following line to "ROOT" for ROOT persistency -#theApp.HistogramPersistency = "ROOT" -#-------------------------------------------------------------- -# NTuple output file -#-------------------------------------------------------------- -#RootHistSvc = Service( "RootHistSvc" ) -#HbookHistSvc.NPAWC = 1500000 -#HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) -#HistogramPersistencySvc.OutputFile = "histo.root" -#NTupleSvc = Service( "NTupleSvc" ) -#NTupleSvc.Output = [ "FILE1 DATAFILE='pythiaB.root' OPT='NEW' TYP='ROOT'" ] - - -# Change since 12.0.3 -theApp.Dlls += [ "AnalysisTools" ] -THistSvc = Service ( "THistSvc" ) -THistSvc.Output = ["AANT DATAFILE='pythiaB.root' OPT='NEW'"] -theApp.TopAlg += [ "AANTupleStream" ] -AANTupleStream = Algorithm( "AANTupleStream" ) -AANTupleStream.ExtraRefNames = [ "" ] -AANTupleStream.OutputName = 'pythiaB.root' -AANTupleStream.ExistDataHeader = False -AANTupleStream.OutputLevel = VERBOSE - - -############################################################### -# Add POOL persistency -include( "AthenaPoolCnvSvc/WriteAthenaPool_jobOptions.py" ) -include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) -# 2101 = EventInfo -# 133273 = MCTruth (HepMC) -Stream1.ItemList += [ "2101#*", "133273#*" ] -Stream1.OutputFile = "pythiaB.pool.root" - - - -#============================================================== -# -# End of job options file -# -############################################################### diff --git a/Generators/EvtGen_i/share/PythiaB_ccmu4_ChHadr.py b/Generators/EvtGen_i/share/PythiaB_ccmu4_ChHadr.py deleted file mode 100644 index 0e0711a4f7b48576fac8151ee6305a28e2203647..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/PythiaB_ccmu4_ChHadr.py +++ /dev/null @@ -1,113 +0,0 @@ -############################################################### -# PRODUCTION FRAGMENT -# -# Job options file for generation of cc events, -# -# Only events containing at least one muon -# with pT>4GeV |eta|<2.8 -# and at least one Charm Hadron in the decay of interest -# are written to output. -# -# Author : Leonid Gladilin (gladilin@mail.cern.ch), 2008-0004-14 -# -# Selection criteria can be changed by datacards -#============================================================== -from AthenaCommon.AlgSequence import AlgSequence -topAlg = AlgSequence("TopAlg") - -from PythiaB.PythiaBConf import PythiaB -topAlg += PythiaB() - -#-------------------------------------------------------------- -# Algorithms -#-------------------------------------------------------------- -#-------------------------------------------------------------- -# PARAMETERS SPECIFIC TO PYTHIABMODULE -#-------------------------------------------------------------- -PythiaB = topAlg.PythiaB -PythiaB.ForceBDecay = "no" -PythiaB.ForceCDecay = "no" -# -PythiaB.ForceDecayChannel = "CharmHadrons" -# lvl1 and lvl2 cuts pt_L1 eta_L1 pt_L2 eta_L2 -# D+- Ds+- Lc+- D*(2)pi D*mu D*el D0(2) D0mu D0el |eta| -PythiaB.DecayChannelParameters = [ 4.5, 4.5, -4.5, 4.5, 4.5, 0.0, 0.0, 0.0, 0.0, 2.8] -#-------------------------------------------------------------- -# -------- PYTHIA PARAMETERS OPTIMAL FOR BEAUTY PRODUCTION -- -#-------------------------------------------------------------- -# 'msel 5' is only for fast tests! -# for correct b-producion you should use 'msel 1' -# 'mstj 26 0' = no mixing was defined in Btune as default -# 'mstj 22 2' = no K0S, Lambda0 decays in Pythia - defined in Btune as default - -PythiaB.PythiaCommand += [ - "pysubs ckin 7 -4.", - "pysubs ckin 8 4.", - "pydat1 mstj 26 0", - "pydat1 mstj 22 2", - "pydat1 parj 13 0.65", - "pydat1 parj 14 0.12", - "pydat1 parj 15 0.04", - "pydat1 parj 16 0.12", - "pydat1 parj 17 0.2", - "pydat1 parj 55 -0.006", - ] - -PythiaB.PythiaCommand += [ - "pypars mstp 70 2", - "pypars mstp 72 0", - "pypars mstp 81 21", - "pypars mstp 82 4", - "pypars mstp 84 1", - "pypars mstp 85 1", - "pypars mstp 86 2", - "pypars mstp 87 4", - "pypars mstp 88 0", - "pypars mstp 89 1", - "pypars mstp 90 1", - "pypars mstp 95 1", - "pypars parp 78 0.2", - "pypars parp 80 0.01", - "pypars parp 82 1.9", - "pypars parp 83 0.3", - "pypars parp 84 0.5", - "pypars parp 89 1800", - "pypars parp 90 0.22", - "pydat1 parj 81 0.14"] - -PythiaB.PythiaCommand += ["pysubs ckin 3 5.", - "pysubs msel 1"] - -#-------------------------------------------------------------- -# ------------- DEFINE SELECTION CUTS ------------- -#-------------------------------------------------------------- -PythiaB.flavour = 4. -# ------------- Selections on b quarks ------------- -PythiaB.cutbq = ["4. 4.5 or 4. 4.5"] -# ------------- LVL1 muon cuts 0=OFF 1=ON ------------- -PythiaB.lvl1cut = [ 1., 4., 2.8] -# ------------- LVL2 muon/electron cuts 0=OFF 1=ON------------- -PythiaB.lvl2cut = [ 0., 13., 6., 2.8] -# ------------- Offline cuts 0=OFF 1=ON ------------- -PythiaB.offcut = [ 0., 0.5, 2.5, 3., 2.5, 0.5, 2.5] -# ------------- Number of repeated hadronization mhadr ------------- -PythiaB.mhadr = 10 -#============================================================== -# -# End of job options file -# -#-------------------------------------------------------------- -# Number of events to be processed (default is 10) -theApp.EvtMax = 10 -#-------------------------------------------------------------- -# -#--------------------------------------------------------------- -# Pool Persistency -#--------------------------------------------------------------- -from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream -Stream1 = AthenaPoolOutputStream( "StreamEVGEN" ) -Stream1.OutputFile = "pythia.ccmu4ch.pool.root" -Stream1.ItemList += [ 'EventInfo#*', 'McEventCollection#*' ] -############################################################### -# -############################################################### diff --git a/Generators/EvtGen_i/share/ReadGen.py b/Generators/EvtGen_i/share/ReadGen.py deleted file mode 100644 index 90b1b3b18466dd0b1c255fc2def80178f62ec565..0000000000000000000000000000000000000000 --- a/Generators/EvtGen_i/share/ReadGen.py +++ /dev/null @@ -1,284 +0,0 @@ -############################################################################### -# -# ReadGen.py -# Author: Pavel Reznicek (Pavel.Reznicek@cern.ch) -# Reads the Hep-MC record and eventually dumps it to screen or an ntuple. -# Supports b-quark chains ntuple storage and CBNT. -# Allows also to rerun EvtGen (inclusive) over the MC collection. -# -############################################################################### - -#------------------------------------------------------------------------------ -# Global job-driving options -#------------------------------------------------------------------------------ - -# Dump Hep-MC on the screen -if not 'doPrintMC' in locals(): doPrintMC = True -# Create B-chains ntuple -if not 'doBphysNtuple' in locals(): doBphysNtuple = True -# Create CBNT -if not 'doCBNT' in locals(): doCBNT = True -# Rerun EvtGen -if not 'doEvtGen' in locals(): doEvtGen = False - -# Messages level for the analysis algorithm -if not 'outputLevel' in locals(): outputLevel = INFO -#maxEvents = MYNOEVENTS -if not 'maxEvents' in locals(): maxEvents = 1000 -#skipEvents = MYSKIP -if not 'skipEvents' in locals(): skipEvents = 0 -# Mostly for the POOL convertors and configurables -if not 'usedRelease' in locals(): usedRelease = 16 -# Hep-MC event key in the data file (GEN_EVENT, GEN_AOD, TruthEvent) -if not 'mcEventKey' in locals(): mcEventKey = "GEN_EVENT" -# Input datafile(s) -if not 'inputData' in locals(): - inputData = [ "evgen.pool.root" ] - -#------------------------------------------------------------------------------ -# General Application Configuration options -#------------------------------------------------------------------------------ - -if usedRelease >= 13: - from AthenaCommon.AppMgr import theApp - from AthenaCommon.AppMgr import ServiceMgr - from AthenaCommon.AlgSequence import AlgSequence - topSequence = AlgSequence() - -#------------------------------------------------------------------------------ -# To read out Athena POOL files -#------------------------------------------------------------------------------ - -if usedRelease >= 13: - import AthenaPoolCnvSvc.ReadAthenaPool -else: - include( "AthenaPoolCnvSvc/ReadAthenaPool_jobOptions.py" ) - -#------------------------------------------------------------------------------ -# Particle properties -#------------------------------------------------------------------------------ - -include( "PartPropSvc/PartPropSvc.py" ) - -#------------------------------------------------------------------------------ -# The POOL converters -#------------------------------------------------------------------------------ - -if usedRelease <= 11: - include( "ParticleEventAthenaPool/AOD_PoolCnv_jobOptions.py" ) - -if usedRelease >= 12: - include( "ParticleBuilderOptions/ESD_PoolCnv_jobOptions.py" ) - include( "ParticleBuilderOptions/AOD_PoolCnv_jobOptions.py" ) - include( "ParticleBuilderOptions/McAOD_PoolCnv_jobOptions.py" ) - include( "EventAthenaPool/EventAthenaPool_joboptions.py" ) - -#------------------------------------------------------------------------------ -# Output level threshold: 1=VERBOSE 2=DEBUG 3=INFO 4=WARNING 5=ERROR 6=FATAL -#------------------------------------------------------------------------------ - -if usedRelease >= 13: - if not hasattr( ServiceMgr , "MessageSvc" ): - from GaudiSvc.GaudiSvcConf import MessageSvc - ServiceMgr += MessageSvc() - MessageSvc = ServiceMgr.MessageSvc -else: - MessageSvc = Service( "MessageSvc" ) - -MessageSvc.OutputLevel = outputLevel -MessageSvc.defaultLimit = 9999999 # all messages - -#------------------------------------------------------------------------------ -# Event related parameters -#------------------------------------------------------------------------------ - -if usedRelease >= 13: - # The import and registration with ServiceMgr is done in AthenaPoolCnvSvc.ReadAthenaPool - EventSelector = ServiceMgr.EventSelector -else: - EventSelector = Service( "EventSelector" ) - -EventSelector.InputCollections = inputData - -#------------------------------------------------------------------------------ -# Number of events to be processed and skipped -#------------------------------------------------------------------------------ - -theApp.EvtMax = maxEvents -EventSelector.SkipEvents = skipEvents - -#------------------------------------------------------------------------------ -# Rerun EvtGen on the input data file -#------------------------------------------------------------------------------ - -if doEvtGen: - - # Copy the orignal events collection and make it writeable - if usedRelease >= 13: - from HepMCTools.HepMCToolsConf import CopyMcCollection - topSequence += CopyMcCollection() - CopyMcCollection = topSequence.CopyMcCollection - else: - theApp.Dlls += [ "HepMCTools" ] - theApp.TopAlg += [ "CopyMcCollection" ] - CopyMcCollection = Algorithm( "CopyMcCollection" ) - - # Replace the collection in place - CopyMcCollection.oldCollectionKey = mcEventKey - CopyMcCollection.newCollectionKey = mcEventKey - CopyMcCollection.deleteOldCollection = True - - # Run EvtGen on that new copy of the collection - # TODO - translate particle codes service - if usedRelease >= 13: - from EvtGen_i.EvtGen_iConf import EvtInclusiveDecay - topSequence += EvtInclusiveDecay() - EvtInclusiveDecay = topSequence.EvtInclusiveDecay - else: - theApp.Dlls += [ "EvtGen_i" ] - theApp.TopAlg += [ "EvtInclusiveDecay" ] - EvtInclusiveDecay = Algorithm( "EvtInclusiveDecay" ) - -#------------------------------------------------------------------------------ -# Dump Hep-MC to the screen (or log file) -#------------------------------------------------------------------------------ - -if doPrintMC: - - if usedRelease >= 13: - from TruthExamples.TruthExamplesConf import PrintMC - topSequence += PrintMC() - PrintMC = topSequence.PrintMC - else: - theApp.Dlls += [ "TruthExamples" ] - theApp.TopAlg += [ "PrintMC" ] - PrintMC = Algorithm( "PrintMC" ) - - # Hep-MC event key in pool file - PrintMC.McEventKey = mcEventKey - # Do you want output at all? TRUE/FALSE - PrintMC.VerboseOutput = True - # Event print style Vertex(traditional)/Barcode(barcode ordered) - PrintMC.PrintStyle = "Barcode" - # Vertex infomration - PrintMC.VertexInfo = False - # First and last event to print, if no last events => job end are printed - PrintMC.FirstEvent = 0 - PrintMC.LastEvent = 100000000 - -#------------------------------------------------------------------------------ -# Store the b-quark chains -#------------------------------------------------------------------------------ - -if doBphysNtuple: - - if usedRelease >= 13: - from GeneratorFilters.GeneratorFiltersConf import BSignalFilter - topSequence += BSignalFilter() - BSignalFilter = topSequence.BSignalFilter - else: - theApp.Dlls += [ "GeneratorFilters" ] - theApp.TopAlg += [ "BSignalFilter" ] - BSignalFilter = Algorithm( "BSignalFilter" ) - - # Hep-MC event key in pool file - BSignalFilter.McEventKey = mcEventKey - # No. events to be written to b-chains ntuple - BSignalFilter.SignaltoNtup = maxEvents - # Store also the b-quarks properties - BSignalFilter.StoreBQuarks = True - -#------------------------------------------------------------------------------ -# CBNT configuration -#------------------------------------------------------------------------------ - -if doCBNT: - - if usedRelease >= 12: - include( "CBNT_Athena/CBNT_AthenaAware_jobOptions.py" ) - CBNT_AthenaAware.TreeName = "t3333" - else: - include( "CBNT_Athena/CBNT_Athena_jobOptions.py" ) - CBNT_Athena.NtupleLocID = "/FILE1/CBNT/t3333" - include( "CBNT_Athena/CBNT_EventInfo_jobOptions.py" ) - include( "RecExCommon/CBNT_Truth_jobOptions.py" ) - if usedRelease >= 13: - CBNT_Truth = theCBNTAA_Truth - - # Maximum number of particles in the ntuple - CBNT_Truth.MaxNbParticles = 10000 - # Maximum number of vertices in the ntuple - CBNT_Truth.MaxNbVertices = 10000 - CBNT_Truth.McEventsName = mcEventKey - # Save ALL particles - All.Enable = True - -#------------------------------------------------------------------------------ -# Ntuple configuration -#------------------------------------------------------------------------------ - -if doBphysNtuple or doCBNT: - - if usedRelease >= 12: - - if usedRelease >= 13: - if not hasattr( ServiceMgr, "THistSvc" ): - from GaudiSvc.GaudiSvcConf import THistSvc - ServiceMgr += THistSvc() - THistSvc = ServiceMgr.THistSvc - else: - theApp.Dlls += [ "AnalysisTools" ] - THistSvc = Service ( "THistSvc" ) - THistSvc.Output = [ "AANT DATAFILE='ntuple.root' TYP='ROOT' OPT='NEW'" ] - - if doBphysNtuple: - if usedRelease >= 13: - if not hasattr( topSequence, "AANTStreamBchains" ): - if usedRelease >= 16: - from AnalysisTools.AthAnalysisToolsConf import AANTupleStream - else: - from AnalysisTools.AnalysisToolsConf import AANTupleStream - topSequence += AANTupleStream( "AANTStreamBchains" ) - AANTStreamBchains = getattr( topSequence, "AANTStreamBchains" ) - else: - theApp.TopAlg += [ "AANTupleStream/AANTStreamBchains" ] - AANTStreamBchains = Algorithm( "AANTStreamBchains" ) - AANTStreamBchains.ExtraRefNames = [ "StreamESD", "Stream1" ] - AANTStreamBchains.WriteInputDataHeader = True - AANTStreamBchains.OutputName = "ntuple.root" - - if doCBNT: - if usedRelease >= 13: - if not hasattr( topSequence, "AANTStreamCBNT" ): - if usedRelease >= 16: - from AnalysisTools.AthAnalysisToolsConf import AANTupleStream - else: - from AnalysisTools.AnalysisToolsConf import AANTupleStream - topSequence += AANTupleStream( "AANTStreamCBNT" ) - AANTStreamCBNT = getattr( topSequence, "AANTStreamCBNT" ) - else: - theApp.TopAlg += [ "AANTupleStream/AANTStreamCBNT" ] - AANTStreamCBNT = Algorithm( "AANTStreamCBNT" ) - AANTStreamCBNT.ExtraRefNames = [ "StreamESD", "Stream1" ] - AANTStreamCBNT.WriteInputDataHeader = True - AANTStreamCBNT.OutputName = "ntuple.root" - AANTStreamCBNT.TreeName = "t3333" - - else: - - HistogramPersistencySvc = Service( "HistogramPersistencySvc" ) - HistogramPersistencySvc.OutputFile = "histo.root" - theApp.Dlls += [ "RootHistCnv" ] - theApp.HistogramPersistency = "ROOT" - #theApp.Dlls += [ "HbookCnv" ] - #theApp.HistogramPersistency = "HBOOK" - #HbookHistSvc = Service( "HbookHistSvc") - #HbookHistSvc.NPAWC = 1500000 - NTupleSvc = Service( "NTupleSvc" ) - NTupleSvc.Output = [ "FILE1 DATAFILE='ntuple.root' TYP='ROOT' OPT='NEW'" ] - -############################################################################### -# -# End of ReadGen.py job-options -# -############################################################################### diff --git a/Generators/EvtGen_i/share/BsJpsiphi.py b/Generators/EvtGen_i/share/common/BsJpsiphi.py similarity index 98% rename from Generators/EvtGen_i/share/BsJpsiphi.py rename to Generators/EvtGen_i/share/common/BsJpsiphi.py index 39e2d49f1ada98d89e646d9edea540e7232bd39d..8a39a85026efe5b2c285ddaedf0bac4e7dd2fd2b 100644 --- a/Generators/EvtGen_i/share/BsJpsiphi.py +++ b/Generators/EvtGen_i/share/common/BsJpsiphi.py @@ -145,6 +145,10 @@ Stream1.OutputFile = "pythiaB.pool.root" Stream1.ItemList += [ "2101#*", "133273#*" ] Stream1.AcceptAlgs = ["BSignalFilter"] +include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) +AthenaSealSvc.CheckDictionary = TRUE + + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/common/EvtGen_Fragment.py b/Generators/EvtGen_i/share/common/EvtGen_Fragment.py new file mode 100644 index 0000000000000000000000000000000000000000..131ac298985728acd24e90e1a42ff7c70a5b52c8 --- /dev/null +++ b/Generators/EvtGen_i/share/common/EvtGen_Fragment.py @@ -0,0 +1,52 @@ +## base fragment for EvtGen using 2014 decay tables. + +evgenConfig.generators += ["EvtGen"] + +if "EVTGENVER" in os.environ: + evtgenver_str = str(os.environ['EVTGENVER'])[:3] + evtgenver = float(evtgenver_str) + print(" ver of EvtGen ", evtgenver) + if (evtgenver == 1.7): + evgenConfig.auxfiles += ['2014Inclusive_17.dec'] + decayfile_str = "2014Inclusive_17.dec" + else: + evgenConfig.auxfiles += ['2014Inclusive.dec'] + decayfile_str = "2014Inclusive.dec" +else: + print("EVTGENVER not available !!! assuming version != 1.7") + evgenConfig.auxfiles += ['2014Inclusive.dec'] + decayfile_str = "2014Inclusive.dec" + +from EvtGen_i.EvtGen_iConf import EvtInclusiveDecay +genSeq += EvtInclusiveDecay() +genSeq.EvtInclusiveDecay.OutputLevel = INFO +genSeq.EvtInclusiveDecay.decayFile = decayfile_str +genSeq.EvtInclusiveDecay.allowAllKnownDecays=False +genSeq.EvtInclusiveDecay.whiteList+=[-411, -421, -10411, -10421, -413, -423, + -10413, -10423, -20413, -20423, -415, -425, -431, -10431, -433, -10433, -20433, + -435, -511, -521, -10511, -10521, -513, -523, -10513, -10523, -20513, -20523, + -515, -525, -531, -10531, -533, -10533, -20533, -535, -541, -10541, -543, + -10543, -20543, -545, -441, -10441, -100441, -443, -10443, -20443, -100443, + -30443, -9000443, -9010443, -9020443, -445, -100445, -551, -10551, -100551, + -110551, -200551, -210551, -553, -10553, -20553, -30553, -100553, -110553, + -120553, -130553, -200553, -210553, -220553, -300553, -9000553, -9010553, -555, + -10555, -20555, -100555, -110555, -120555, -200555, -557, -100557, -4122, -4222, + -4212, -4112, -4224, -4214, -4114, -4232, -4132, -4322, -4312, -4324, -4314, + -4332, -4334, -4412, -4422, -4414, -4424, -4432, -4434, -4444, -5122, -5112, + -5212, -5222, -5114, -5214, -5224, -5132, -5232, -5312, -5322, -5314, -5324, + -5332, -5142, -5242, -5412, -5422, -5414, -5424, -5342, -5432, -5434, -5442, + -5444, -5512, -5522, -5514, -5524, -5532, -5534, -5542, -5544, -5554, -204126, + -104312, -104322, -105122, -105312, -105322, -104124, -104314, -104324, 411, + 421, 10411, 10421, 413, 423, 10413, 10423, 20413, 20423, 415, 425, 431, 10431, + 433, 10433, 20433, 435, 511, 521, 10511, 10521, 513, 523, 10513, 10523, 20513, + 20523, 515, 525, 531, 10531, 533, 10533, 20533, 535, 541, 10541, 543, 10543, + 20543, 545, 441, 10441, 100441, 443, 10443, 20443, 100443, 30443, 9000443, + 9010443, 9020443, 445, 100445, 551, 10551, 100551, 110551, 200551, 210551, 553, + 10553, 20553, 30553, 100553, 110553, 120553, 130553, 200553, 210553, 220553, + 300553, 9000553, 9010553, 555, 10555, 20555, 100555, 110555, 120555, 200555, + 557, 100557, 4122, 4222, 4212, 4112, 4224, 4214, 4114, 4232, 4132, 4322, 4312, + 4324, 4314, 4332, 4334, 4412, 4422, 4414, 4424, 4432, 4434, 4444, 5122, 5112, + 5212, 5222, 5114, 5214, 5224, 5132, 5232, 5312, 5322, 5314, 5324, 5332, 5142, + 5242, 5412, 5422, 5414, 5424, 5342, 5432, 5434, 5442, 5444, 5512, 5522, 5514, + 5524, 5532, 5534, 5542, 5544, 5554, 204126, 104312, 104322, 105122, 105312, + 105322, 104124, 104314, 104324 ] diff --git a/Generators/EvtGen_i/share/Lb2Lll.py b/Generators/EvtGen_i/share/common/Lb2Lll.py similarity index 98% rename from Generators/EvtGen_i/share/Lb2Lll.py rename to Generators/EvtGen_i/share/common/Lb2Lll.py index 3f9a016aca2f5a2a09d2b09185b08eed3a498968..e9e7847f1f3e76559ba4b32a298b19ab4134ad19 100644 --- a/Generators/EvtGen_i/share/Lb2Lll.py +++ b/Generators/EvtGen_i/share/common/Lb2Lll.py @@ -246,6 +246,9 @@ if not doNotWritePOOL: Stream1.ItemList += [ "2101#*", "133273#*" ] Stream1.AcceptAlgs = [ "BSignalFilter" ] + include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) + AthenaSealSvc.CheckDictionary = TRUE + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/LbJpsiL.py b/Generators/EvtGen_i/share/common/LbJpsiL.py similarity index 100% rename from Generators/EvtGen_i/share/LbJpsiL.py rename to Generators/EvtGen_i/share/common/LbJpsiL.py diff --git a/Generators/EvtGen_i/share/PythiaBEvtGen.py b/Generators/EvtGen_i/share/common/PythiaBEvtGen.py similarity index 98% rename from Generators/EvtGen_i/share/PythiaBEvtGen.py rename to Generators/EvtGen_i/share/common/PythiaBEvtGen.py index 2736252884564566d2bbeec06305e1b2e9a57560..1678798e7a4663bf7e527beb83976182452c08fe 100644 --- a/Generators/EvtGen_i/share/PythiaBEvtGen.py +++ b/Generators/EvtGen_i/share/common/PythiaBEvtGen.py @@ -122,11 +122,15 @@ from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) Stream1 = AthenaPoolOutputStream( "Stream1" ) +Stream1.ForceRead=TRUE Stream1.OutputFile = "pythiaB.pool.root" # 2101 = EventInfo # 133273 = MCTruth (HepMC) Stream1.ItemList += [ "2101#*", "133273#*" ] +include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) +AthenaSealSvc.CheckDictionary = TRUE + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/PythiaBEvtGen_Signal.py b/Generators/EvtGen_i/share/common/PythiaBEvtGen_Signal.py similarity index 97% rename from Generators/EvtGen_i/share/PythiaBEvtGen_Signal.py rename to Generators/EvtGen_i/share/common/PythiaBEvtGen_Signal.py index 4dab2c0da207660b4b8f8090e5cebb782ccc49f8..d1eb710da03535e56d4f6023ea7d99886198b278 100644 --- a/Generators/EvtGen_i/share/PythiaBEvtGen_Signal.py +++ b/Generators/EvtGen_i/share/common/PythiaBEvtGen_Signal.py @@ -125,12 +125,17 @@ from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) Stream1 = AthenaPoolOutputStream( "Stream1" ) +Stream1.ForceRead=TRUE Stream1.OutputFile = "pythiaB.pool.root" # 2101 = EventInfo # 133273 = MCTruth (HepMC) Stream1.ItemList += [ "2101#*", "133273#*" ] Stream1.AcceptAlgs = [ "BSignalFilter" ] +include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) +AthenaSealSvc.CheckDictionary = TRUE + + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/PythiaEvtGen.py b/Generators/EvtGen_i/share/common/PythiaEvtGen.py similarity index 97% rename from Generators/EvtGen_i/share/PythiaEvtGen.py rename to Generators/EvtGen_i/share/common/PythiaEvtGen.py index de61c7fb106bcd44cd110e0c88479290fbe217ea..a4c6fa2aed8c3404cebb4070a0a29a4626a0c0e0 100644 --- a/Generators/EvtGen_i/share/PythiaEvtGen.py +++ b/Generators/EvtGen_i/share/common/PythiaEvtGen.py @@ -103,11 +103,16 @@ from AthenaPoolCnvSvc.WriteAthenaPool import AthenaPoolOutputStream include( "GeneratorObjectsAthenaPool/GeneratorObjectsAthenaPool_joboptions.py" ) Stream1 = AthenaPoolOutputStream( "Stream1" ) +Stream1.ForceRead=TRUE Stream1.OutputFile = "pythiaB.pool.root" # 2101 = EventInfo # 133273 = MCTruth (HepMC) Stream1.ItemList += [ "2101#*", "133273#*" ] +include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) +AthenaSealSvc.CheckDictionary = TRUE + + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/StopPytWeakBdecays.py b/Generators/EvtGen_i/share/common/StopPytWeakBdecays.py similarity index 100% rename from Generators/EvtGen_i/share/StopPytWeakBdecays.py rename to Generators/EvtGen_i/share/common/StopPytWeakBdecays.py diff --git a/Generators/EvtGen_i/share/bTosllAli.py b/Generators/EvtGen_i/share/common/bTosllAli.py similarity index 98% rename from Generators/EvtGen_i/share/bTosllAli.py rename to Generators/EvtGen_i/share/common/bTosllAli.py index ae6943149987b5367762de9bca7522ed2359962e..cc04d70c23443a0e29958255e1cb4977c7d2363f 100644 --- a/Generators/EvtGen_i/share/bTosllAli.py +++ b/Generators/EvtGen_i/share/common/bTosllAli.py @@ -156,6 +156,10 @@ Stream1.OutputFile = "pythiaB.pool.root" Stream1.ItemList += [ "2101#*", "133273#*" ] Stream1.AcceptAlgs = [ "BSignalFilter" ] +include("AthenaSealSvc/AthenaSealSvc_joboptions.py" ) +AthenaSealSvc.CheckDictionary = TRUE + + #============================================================== # # End of job options file diff --git a/Generators/EvtGen_i/share/2014Inclusive.dec b/Generators/EvtGen_i/share/file/2014Inclusive.dec similarity index 100% rename from Generators/EvtGen_i/share/2014Inclusive.dec rename to Generators/EvtGen_i/share/file/2014Inclusive.dec diff --git a/Generators/EvtGen_i/share/file/2014Inclusive_17.dec b/Generators/EvtGen_i/share/file/2014Inclusive_17.dec new file mode 100644 index 0000000000000000000000000000000000000000..7d8001e795c270b0cce974e0b3e307f486e600ff --- /dev/null +++ b/Generators/EvtGen_i/share/file/2014Inclusive_17.dec @@ -0,0 +1,9894 @@ +# $Id: DECAY.DEC,v 1.55 2009-11-26 14:16:27 robbep Exp $ +# Updated to PDG 2010 by Tomas Pilar - T.Pilar@warwick.ac.uk +# Updated Mixing Parameters Mark Whitehead May 2009 +# +#Updated SL branching ratios to match 2011 PDG for ATLAS table only +#January 2014 Jacquelyn Brosamer jbrosamer@lbl.gov +Define qoverp_incohMix_B_s0 1.0 +Define dm_incohMix_B_s0 17.8e12 +Define qoverp_incohMix_B0 1.0 +Define dm_incohMix_B0 0.507e12 +# Old definition of dm still in some decay models +Define dm 0.507e12 +#Define dgamma 0 +#Define qoverp 1 +#Define phaseqoverp 0 +#Define values for B0s mixing +#Define dms 20.e12 +# DeltaGammas corresponds to DG/G = 10% +#Define dgammas 6.852e10 +# Activate incoherent Mixing +### TODO: find a way to give mixing parameters through decay file to EvtGen +#####yesIncoherentB0Mixing dm dgamma +#####yesIncoherentBsMixing dms dgammas +# define the values of the CKM angles (alpha=70, beta=40) +Define alpha 1.365 +Define beta 0.39 +Define gamma 1.387 +Define twoBetaPlusGamma 2.167 +Define betaPlusHalfGamma 1.0835 +Define minusGamma -1.387 +Define minusTwoBeta -0.78 + +# New definitions for psiKstar modes (Lange, July 26, 2000) +Define PKHplus 0.159 +Define PKHzero 0.775 +Define PKHminus 0.612 +Define PKphHplus 1.563 +Define PKphHzero 0.0 +Define PKphHminus 2.712 + +Define Aplus 0.490 +Define Azero 1.10 +Define Aminus 0.4 +# +Define phAplus 2.5 +Define phAzero 0.0 +Define phAminus -0.17 + +# +# These particle aliases are used in for CP violating decays +# in which the decay distributions depends on how the K* decayed. +# +# +Alias K*L K*0 +Alias K*S K*0 +Alias K*BL anti-K*0 +Alias K*BS anti-K*0 +Alias K*0T K*0 +Alias anti-K*0T anti-K*0 +Alias K*BR anti-K*0 +Alias K*0R K*0 +Alias anti-K_0*0N anti-K_0*0 +Alias K_0*0N K_0*0 +# +ChargeConj K*L K*BL +ChargeConj K*S K*BS +ChargeConj K*0T anti-K*0T +ChargeConj K_0*0N anti-K_0*0N +ChargeConj K*0R K*BR +# +# PR LHCb: Alias for signal productions in LHCb +# +Alias B0sig B0 +Alias anti-B0sig anti-B0 +ChargeConj B0sig anti-B0sig +Alias B+sig B+ +Alias B-sig B- +ChargeConj B+sig B-sig +Alias B_s0sig B_s0 +Alias anti-B_s0sig anti-B_s0 +ChargeConj B_s0sig anti-B_s0sig +Alias B_c+sig B_c+ +Alias B_c-sig B_c- +ChargeConj B_c+sig B_c-sig +Alias eta_bsig eta_b +ChargeConj eta_bsig eta_bsig +Alias h_bsig h_b +ChargeConj h_bsig h_bsig +Alias Sigma_b-sig Sigma_b- +Alias anti-Sigma_b+sig anti-Sigma_b+ +ChargeConj Sigma_b-sig anti-Sigma_b+sig +Alias Lambda_b0sig Lambda_b0 +Alias anti-Lambda_b0sig anti-Lambda_b0 +ChargeConj Lambda_b0sig anti-Lambda_b0sig +Alias Omega_b-sig Omega_b- +Alias anti-Omega_b+sig anti-Omega_b+ +ChargeConj Omega_b-sig anti-Omega_b+sig +Alias Xi_b-sig Xi_b- +Alias anti-Xi_b+sig anti-Xi_b+ +ChargeConj Xi_b-sig anti-Xi_b+sig +Alias Xi_b0sig Xi_b0 +Alias anti-Xi_b0sig anti-Xi_b0 +ChargeConj Xi_b0sig anti-Xi_b0sig +Alias J/psisig J/psi +ChargeConj J/psisig J/psisig +Alias chi_c0sig chi_c0 +ChargeConj chi_c0sig chi_c0sig +Alias chi_c1sig chi_c1 +ChargeConj chi_c1sig chi_c1sig +Alias chi_c2sig chi_c2 +ChargeConj chi_c2sig chi_c2sig +Alias psi(2S)sig psi(2S) +ChargeConj psi(2S)sig psi(2S)sig +Alias psi(3770)sig psi(3770) +ChargeConj psi(3770)sig psi(3770)sig +Alias D*+sig D*+ +Alias D*-sig D*- +ChargeConj D*+sig D*-sig +Alias D*0sig D*0 +Alias anti-D*0sig anti-D*0 +ChargeConj D*0sig anti-D*0sig +Alias D0sig D0 +Alias anti-D0sig anti-D0 +ChargeConj D0sig anti-D0sig +Alias D+sig D+ +Alias D-sig D- +ChargeConj D+sig D-sig +Alias D_s+sig D_s+ +Alias D_s-sig D_s- +ChargeConj D_s+sig D_s-sig +Alias Lambda_c+sig Lambda_c+ +Alias anti-Lambda_c-sig anti-Lambda_c- +ChargeConj Lambda_c+sig anti-Lambda_c-sig +Alias tau+sig tau+ +Alias tau-sig tau- +ChargeConj tau+sig tau-sig +Alias Upsilonsig Upsilon +ChargeConj Upsilonsig Upsilonsig +Alias Upsilon(2S)sig Upsilon(2S) +ChargeConj Upsilon(2S)sig Upsilon(2S)sig +Alias Upsilon(3S)sig Upsilon(3S) +ChargeConj Upsilon(3S)sig Upsilon(3S)sig +Alias Upsilon(4S)sig Upsilon(4S) +ChargeConj Upsilon(4S)sig Upsilon(4S)sig +Alias Upsilon(5S)sig Upsilon(5S) +ChargeConj Upsilon(5S)sig Upsilon(5S)sig +Alias X_1(3872)sig X_1(3872) +ChargeConj X_1(3872)sig X_1(3872)sig +Alias h_csig h_c +ChargeConj h_csig h_csig +Alias Sigma+sig Sigma+ +Alias anti-Sigma-sig anti-Sigma- +ChargeConj Sigma+sig anti-Sigma-sig +Alias Lambda0sig Lambda0 +Alias anti-Lambda0sig anti-Lambda0 +ChargeConj Lambda0sig anti-Lambda0sig +Alias B_10sig B_10 +Alias anti-B_10sig anti-B_10 +ChargeConj B_10sig anti-B_10sig +Alias B_2*0sig B_2*0 +Alias anti-B_2*0sig anti-B_2*0 +ChargeConj B_2*0sig anti-B_2*0sig +Alias B_s10sig B_s10 +Alias anti-B_s10sig anti-B_s10 +ChargeConj B_s10sig anti-B_s10sig +Alias B_s2*0sig B_s2*0 +Alias anti-B_s2*0sig anti-B_s2*0 +ChargeConj B_s2*0sig anti-B_s2*0sig +Alias B_1+sig B_1+ +Alias B_1-sig B_1- +ChargeConj B_1+sig B_1-sig +Alias B_2*+sig B_2*+ +Alias B_2*-sig B_2*- +ChargeConj B_2*+sig B_2*-sig +# +#JetSet parameter modifications +#(Very important that there are no blank spaces in the parameter string!) +#Turn of B0-B0B mixing in JetSet: +#JetSetPar MSTJ(26)=0 +# control of L=1 mesons (in order: J1S0 J0S1 J1S1 J2S1) - commented out by NB/WP +#JetSetPar PARJ(14)=0.05 +#JetSetPar PARJ(15)=0.05 +#JetSetPar PARJ(16)=0.05 +#JetSetPar PARJ(17)=0.05 +#cut-off parameter used to stop fragmentation process (should not be changed) +#####JetSetPar PARJ(33)=0.3 SET NOW IN GAUSS + +# PR LHCb 10/01/2006 +# Turn on PHOTOS for all decays +yesPhotos +# +# +#Decay vpho +#1.000 PYCONT; +#Enddecay +# +# use new VSS_BMIX mixing decay model (DK,28-Oct-1999) +Decay Upsilon(4S) +0.515122645 B+ B- VSS; #[Reconstructed PDG2011] +0.483122645 B0 anti-B0 VSS_BMIX dm; #[Reconstructed PDG2011] +0.000015583 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000015766 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.000084099 Upsilon(2S) pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon(2S) pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000080123 Upsilon pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.000044342 Upsilon pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.000194392 Upsilon eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# BF ~ (2J+1)E^3_gamma; see PRL 94, 032001 +# V-> gamma S Partial wave (L,S)=(0,0) +0.000092625 gamma chi_b0(3P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.000138938 gamma chi_b1(3P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.000129084 gamma chi_b2(3P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,0) +0.000002956 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.000007883 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.000011825 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.000837571 g g g PYTHIA 4; #[Reconstructed PDG2011] +0.000039415 gamma g g PYTHIA 4; #[Reconstructed PDG2011] +Enddecay +# +# +# +Decay anti-B0 +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0493 D*+ e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]#JB change to match 2011 PDG +0.0218 D+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00753608113379275 D_1+ e- anti-nu_e PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00279114116066398 D_0*+ e- anti-nu_e PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00697785290165995 D'_1+ e- anti-nu_e PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00307025527673038 D_2*+ e- anti-nu_e PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.000418671174099597 D*+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;#JB rescaled to match PDG 2011 SL inc BR +0.00683829584362675 D*0 pi+ e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00139557058033199 D+ pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS;#JB rescaled to match PDG 2011 SL inc BR +# + + +0.0493 D*+ mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011]#JB change to match 2011 PDG, bug fix jan 2015 +0.0218 D+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR, bug fix jan 2015 +0.00753608113379275 D_1+ mu- anti-nu_mu PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00279114116066398 D_0*+ mu- anti-nu_mu PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00697785290165995 D'_1+ mu- anti-nu_mu PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00307025527673038 D_2*+ mu- anti-nu_mu PHOTOS ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.000418671174099597 D*+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;#JB rescaled to match PDG 2011 SL inc BR +0.00683829584362675 D*0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00139557058033199 D+ pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS;#JB rescaled to match PDG 2011 SL inc BR + +0.0000 D0 pi+ mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +# +# b -> c tau nu +# +0.0184 D*+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011]#JB change to match 2011 PDG +0.0102 D+ tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011]#JB change to match 2011 PDG +0.00181424175443159 D_1+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00181424175443159 D_0*+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00279114116066398 D'_1+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.00279114116066398 D_2*+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR + +# +# b -> u l nu +# +# 03/28/01 S.Menke included inclusive B -> X_u l nu decays for m(X_u) > 1.26 GeV. +# with some thresholds to gradually switch from excl. to incl. +# modeling without big jumps keeping the better known excl. +# Brs at their actual values and constrain the incl. Br and +# weights in a way that ~40% of the total BR belongs to +# the mass region > 1.5 GeV +# October 20, 2004 - Lange - update using sl awg input +# March 30, 2005 J. Dingfelder: Updated B -> X_u l nu hybrid model +# (supersedes older version by S. Menke). Inclusive +# decays are reweighted in three kinematic +# variables mX, q2, and El (=> 512 weights total). +# The list of weights is included as ModelAlias +# once per B charge state. +# NOTE: - The specified parameters for model VUBHYBRID are: +# mb, a, alpha_s, nbins_mX, nbins_q2, nbins_El, +# list of threshold values for mX, q2, El in ascending order. +# +# *** DO NOT CHANGE ANY OF THESE PARAMETERS! *** +# Otherwise a new set of weights would be needed, since they were +# generated for a certain set of values for mb, a, excl. BFs, non-res BF. +# +# - If no binning (nbins or thresholds) are specified after the first +# three parameters (mb,a,alpha_s) no hybrid weighting is performed. + +# --- Hybrid weights for neutral B -> Xu l nu decays +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# hybrid weights (and vice versa). +0.0001870064577644870 pi+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.0003447059333420010 rho+ e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00264041953798813 Xu+ e- anti-nu_e PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;#JB rescaled to match PDG 2011 SL inc BR +0.00018700645776448700 pi+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00034470593334200100 rho+ mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011]#JB rescaled to match PDG 2011 SL inc BR +0.00264041953798813 Xu+ mu- anti-nu_mu PHOTOS VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00;#JB rescaled to match PDG 2011 SL inc BR +0.0000837342348199194 pi+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.000115832358167555 rho+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.000125601352229879 a_1+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.0000111645646426559 b_1+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.0000111645646426559 a_0+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR +0.0000111645646426559 a_2+ tau- anti-nu_tau ISGW2;#JB rescaled to match PDG 2011 SL inc BR + +0.000000 rho(2S)+ tau- anti-nu_tau ISGW2; +0.000000 D(2S)+ tau- anti-nu_tau ISGW2; +0.000000 D*(2S)+ tau- anti-nu_tau ISGW2; +# + +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov 14, 2004 (flip D_s K -- is opposite of D_s pi) +0.000024000 D_s- pi+ PHSP; #[Reconstructed PDG2011] +0.000030000 D_s+ K- PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*- pi+ SVS; #[Reconstructed PDG2011] +0.000021900 D_s*+ K- SVS; #[Reconstructed PDG2011] +# +0.000016 rho+ D_s- SVS; +0.000035000 K*- D_s+ SVS; #[Reconstructed PDG2011] +0.000041000 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] + + +# +# b -> s gamma +# +0.000043300 anti-K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 anti-K_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 anti-K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 anti-K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 anti-K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 anti-K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 anti-Xsd gamma BTOXSGAMMA 2 ; +# +0.000000160 anti-K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 anti-K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 anti-K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 anti-K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 anti-K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 +# +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] +0.000001 pi0 a_00 PHSP; +0.000001 pi0 f_0 PHSP; +# pi0 rho0 is with the 3-body modes +0.000001 omega pi0 SVS; +0.000001 a_10 pi0 SVS; +0.000001 b_10 pi0 SVS; +0.000001 eta eta PHSP; +0.000001 eta eta' PHSP; +0.000001 eta a_00 PHSP; +0.000001 eta f_0 PHSP; +0.000001 rho0 eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta SVS; +0.000001 b_10 eta SVS; +0.000001 eta' eta' PHSP; +0.000001 eta' a_00 PHSP; +0.000001 eta' f_0 PHSP; +0.000001 rho0 eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta' SVS; +0.000001 b_10 eta' SVS; +0.000001 a_00 a_00 PHSP; +0.000001 a_00 f_0 PHSP; +0.000001 rho0 a_00 SVS; +0.000001 omega a_00 SVS; +0.000001 a_10 a_00 SVS; +0.000001 b_10 a_00 SVS; +0.000001 f_0 f_0 PHSP; +0.000001 rho0 f_0 SVS; +0.000001 omega f_0 SVS; +0.000001 a_10 f_0 SVS; +0.000001 b_10 f_0 SVS; + +# Penguin dominated modes are sin2beta, not sin2alpha +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] +#don't allow jetset to simulate the same decay but to a K0 or anti-K0 +#Lange 1/30/2003 +0.0 phi K0 PHSP; +0.0 phi anti-K0 PHSP; +0.0 eta K0 PHSP; +0.0 eta anti-K0 PHSP; +0.0 eta' K0 PHSP; +0.0 eta' anti-K0 PHSP; +0.0 omega K0 PHSP; +0.0 omega anti-K0 PHSP; +# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? +0.000001 phi pi0 SVS; +0.000001 phi eta SVS; +0.000001 phi eta' SVS; +# +0.000015900 anti-K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 anti-K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +# +# +#2-body modes from Jim Olsen +0.000019400 K- pi+ PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; +# K_S0 K_L0 is 0 +# see http://babar-hn.slac.stanford.edu:5090/HyperNews/get/pubboard14/156.html +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0000000 K_S0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +# declare K0 pi0 not to have it through Pythia +0.000000 anti-K0 pi0 PHSP; +# Split into K_S0 K_L0 (LHCb - P. Robbe) +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +# 0 to keep PYTHIA from generating it +0.000000 K0 anti-K0 PHSP; +# +# 3-body decays +# this model generates interferences and higher mass rho +# +# 3-body by John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# anti-B0 modes +# Model generates rho(770), rho(1450) and rho(1700) resonances +# with interference (uses CKM angle alpha) +# the line commented out for EvtGen v.17 +#0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; +# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) +0.000000 rho0 pi0 SVS; +0.000000 rho- pi+ SVS; +0.000000 rho+ pi- SVS; +0.000000 rho(2S)- pi+ SVS; +0.000000 rho(2S)+ pi- SVS; +0.000000 rho(3S)- pi+ SVS; +0.000000 rho(3S)+ pi- SVS; +# +# rho0 3-body modes +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] +# +# rho+ 3-body modes +0.000008400 rho+ K- SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000005 rho(2S)0 K_S0 SVS; +0.0000005 rho(2S)0 K_L0 SVS; +# +# +# f0,a0(980) 3-body modes +0.0000055 f_0 anti-K0 PHSP; +0.000001 a_00 anti-K0 PHSP; +0.000001 a_0+ K- PHSP; +0.000003 a_0+ pi- PHSP; +0.000001 a_0- pi+ PHSP; +# +# K*0(892) 3-body modes +0.000003600 anti-K*0 pi0 SVS; #[Reconstructed PDG2011] +0.000003 anti-K*0 K0 SVS; +# +# K*0(1430) 3-body modes +0.000001 anti-K_0*0 pi0 PHSP; +0.000003 anti-K_0*0 K0 PHSP; +# +# K*0(1680) 3-body modes +0.000001 anti-K''*0 pi0 SVS; +0.000001 anti-K''*0 K0 SVS; + +# +# K*-(892) 3-body modes +0.000009400 K*- pi+ SVS; #[Reconstructed PDG2011] +0.000002 K*- K+ SVS; +# +# K*-(1430) 3-body modes +0.000033000 K_0*- pi+ PHSP; #[Reconstructed PDG2011] +0.000002 K_0*- K+ PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*- pi+ SVS; +0.000001 K''*- K+ SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi-pi+pi0: high mass + f0(400-1200) = (1+1)e-6 +####0402270.000002 pi- pi+ pi0 PHSP; +0.000017 pi- pi+ eta PHSP; +0.000001 pi- pi+ eta' PHSP; +# +# pi- pi+ anti-K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 +0.000000000 pi- pi+ anti-K0 PHSP; #[Reconstructed PDG2011] +# +# K- pi+ pi0 +0.000027500 K- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000020 K- pi+ eta PHSP; +0.000001 K- pi+ eta' PHSP; +# +# pi- K+ K0. +# Both B0 and B0bar can decay to these => 0.5e-6 each +0.0000005 pi- K+ anti-K0 PHSP; +0.0000005 pi+ K- K0 PHSP; +# +# K- K+ anti-K0 +# PR LHCb 09 Apr 2004 split into KL/KS +0.000000 K- K+ anti-K0 PHSP; +0.000012350 K- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K- K+ K_L0 PHSP; #[Reconstructed PDG2011] +# +# K- K+ pi0 +0.000001 K- K+ pi0 PHSP; +0.000001 K- K+ eta PHSP; +0.000001 K- K+ eta' PHSP; +# +# pi0 anti-K0 K0 +0.000002 anti-K0 K0 pi0 PHSP; +0.000001 anti-K0 K0 eta PHSP; +0.000001 anti-K0 K0 eta' PHSP; +# +# pi0 pi0 anti-K0 +0.000002 anti-K0 pi0 pi0 PHSP; +0.000001 anti-K0 pi0 eta PHSP; +0.000001 anti-K0 pi0 eta' PHSP; +0.000001 anti-K0 eta eta PHSP; +0.000001 anti-K0 eta eta' PHSP; +0.000001 anti-K0 eta' eta' PHSP; +# +# anti-K0 K0 anti-K0: 8*BF(KsKsKs)~=48 (8 is a guess) +0.000048 anti-K0 K0 anti-K0 PHSP; +# +# pi0 pi0 pi0 +0.000001 pi0 pi0 pi0 PHSP; +0.000001 pi0 pi0 eta PHSP; +0.000001 pi0 pi0 eta' PHSP; +0.000001 pi0 eta eta PHSP; +0.000001 pi0 eta eta' PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 21 Apr 2004 : set polarisation to longitudinal +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000003 rho0 pi+ pi- PHSP; +0.000003 omega pi+ pi- PHSP; +0.000001 rho0 pi0 pi0 PHSP; +0.000001 omega pi0 pi0 PHSP; +0.0000005 rho0 pi0 eta PHSP; +0.0000002 rho0 eta eta PHSP; +0.0000002 rho0 pi0 eta' PHSP; +0.0000001 rho0 eta eta' PHSP; +0.0000005 omega pi0 eta PHSP; +0.0000002 omega eta eta PHSP; +0.0000002 omega pi0 eta' PHSP; +0.0000001 omega eta eta' PHSP; +0.000010 rho+ pi- pi0 PHSP; +0.000005 rho+ pi- eta PHSP; +0.000010 rho- pi+ pi0 PHSP; +0.000005 rho- pi+ eta PHSP; +0.000010 pi+ pi- pi+ pi- PHSP; +0.000010 pi+ pi- pi0 pi0 PHSP; +0.000005 pi+ pi- eta pi0 PHSP; +0.000002 pi+ pi- eta eta PHSP; +0.000002 pi+ pi- eta' pi0 PHSP; +0.000001 pi+ pi- eta' eta PHSP; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; +0.000002 rho- a_0+ SVS; +0.000010 rho+ a_0- SVS; +0.000001 f_0 pi+ pi- PHSP; +0.000001 f_0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi0 PHSP; +0.000001 a_00 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi0 PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000003400 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 K*- PHSP; +0.000005 pi+ eta K*- PHSP; +0.000002 pi+ eta' K*- PHSP; +0.000010 rho+ K- pi0 PHSP; +0.000005 rho+ K- eta PHSP; +0.000002 rho+ K- eta' PHSP; +0.000010 rho+ anti-K0 pi- PHSP; +0.000010 rho- anti-K0 pi+ PHSP; +0.000005 rho0 anti-K0 pi0 PHSP; +0.000002 rho0 anti-K0 eta PHSP; +0.000001 rho0 anti-K0 eta' PHSP; +0.000010 rho0 K- pi+ PHSP; +0.000005 omega anti-K0 pi0 PHSP; +0.000002 omega anti-K0 eta PHSP; +0.000001 omega anti-K0 eta' PHSP; +0.000005100 omega K- pi+ PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 pi- anti-K0 PHSP; +0.000005 pi+ eta pi- anti-K0 PHSP; +0.000010 pi0 pi0 pi0 anti-K0 PHSP; +0.000005 pi0 pi0 eta anti-K0 PHSP; +0.000002 pi0 eta eta anti-K0 PHSP; +0.000002 pi0 pi0 eta' anti-K0 PHSP; +0.000001 pi0 eta eta' anti-K0 PHSP; +0.000010 pi+ pi- pi+ K- PHSP; +0.000010 pi0 pi0 pi+ K- PHSP; +0.000005 pi0 eta pi+ K- PHSP; +0.000002 eta eta pi+ K- PHSP; +0.000002 pi0 eta' pi+ K- PHSP; +0.000001 eta eta' pi+ K- PHSP; +0.000010 rho0 anti-K_0*0 PHSP; +0.000020 rho+ K_0*- PHSP; +0.000010 pi- pi+ anti-K_0*0 PHSP; +0.000010 pi0 pi0 anti-K_0*0 PHSP; +0.000010 pi+ pi0 K_0*- PHSP; +0.000005 anti-K*0 f_0 SVS; +0.000010 a_10 anti-K0 SVS; +0.000016000 a_1+ K- SVS; #[Reconstructed PDG2011] +0.000010 b_10 anti-K0 SVS; +0.0000074 b_1+ K- SVS; +0.000005 anti-K*0 a_00 SVS; +0.000005 K*- a_0+ SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi pi- pi+ PHSP; +0.000001 K+ K- rho0 PHSP; +0.000001 K0 anti-K0 rho0 PHSP; +0.000001 K+ K- omega PHSP; +0.000001 K0 anti-K0 omega PHSP; +0.000001 K+ anti-K0 rho- PHSP; +0.000001 K- K0 rho+ PHSP; +0.000001 K+ K- pi- pi+ PHSP; +0.000001 K+ K- pi0 pi0 PHSP; +0.0000005 K+ K- pi0 eta PHSP; +0.0000002 K+ K- eta eta PHSP; +0.0000002 K+ K- pi0 eta' PHSP; +0.0000001 K+ K- eta eta' PHSP; +0.000001 K0 anti-K0 pi- pi+ PHSP; +0.000001 K0 anti-K0 pi0 pi0 PHSP; +0.0000005 K0 anti-K0 pi0 eta PHSP; +0.0000002 K0 anti-K0 eta eta PHSP; +0.0000002 K0 anti-K0 pi0 eta' PHSP; +0.0000001 K0 anti-K0 eta eta' PHSP; +0.000001 K*+ K- pi0 PHSP; +0.000001 K*- K+ pi0 PHSP; +0.000001 K*0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K*0 pi0 PHSP; +0.000003320 K+ anti-K*0 pi- PHSP; #[Reconstructed PDG2011] +0.000001 K*+ anti-K0 pi- PHSP; +0.0000033 K- K*0 pi+ PHSP; +0.000001 K*- K0 pi+ PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000009800 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K- pi+ PHSP; +0.000010 phi anti-K0 pi0 PHSP; +0.000007 phi anti-K0 eta PHSP; +0.000017700 K- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ anti-K0 PHSP; +0.000010 K*- K+ anti-K0 PHSP; +0.000010 K+ K- K- pi+ PHSP; +0.000010 K+ K- anti-K0 pi0 PHSP; +0.000005 K+ K- anti-K0 eta PHSP; +0.000010 K0 anti-K0 anti-K0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K0 eta PHSP; +0.000003900 phi anti-K_0*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ anti-K_0*0 PHSP; +0.000010 K- K_0*+ anti-K0 PHSP; +0.000010 K_0*- K+ anti-K0 PHSP; +0.000002 phi anti-K'_10 PHSP; +0.000002 K- K+ anti-K'_10 PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi K+ K- PHSP; +0.0000001 phi K0 anti-K0 PHSP; +0.0000001 K+ K- K+ K- PHSP; +0.0000001 K0 anti-K0 K+ K- PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 PHSP; +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi0 PHSP; +0.000005 rho0 rho0 eta PHSP; +0.000002 rho0 rho0 eta' PHSP; +0.000010 omega rho0 pi0 PHSP; +0.000005 omega rho0 eta PHSP; +0.000002 omega rho0 eta' PHSP; +0.000010 rho+ rho- pi0 PHSP; +0.000005 rho+ rho- eta PHSP; +0.000002 rho+ rho- eta' PHSP; +0.000010 rho0 rho+ pi- PHSP; +0.000010 omega rho+ pi- PHSP; +0.000002 rho0 pi+ pi- pi0 PHSP; +0.000001 rho0 pi+ pi- eta PHSP; +0.000001 rho0 pi+ pi- eta' PHSP; +0.000002 rho0 pi0 pi0 pi0 PHSP; +0.000001 rho0 pi0 eta pi0 PHSP; +0.000001 rho0 pi0 eta' pi0 PHSP; +0.000002 omega pi+ pi- pi0 PHSP; +0.000001 omega pi+ pi- eta PHSP; +0.000001 omega pi+ pi- eta' PHSP; +0.000002 omega pi0 pi0 pi0 PHSP; +0.000001 omega pi0 eta pi0 PHSP; +0.000001 omega pi0 eta' pi0 PHSP; +0.000002 rho+ pi- pi+ pi- PHSP; +0.000002 rho+ pi- pi0 pi0 PHSP; +0.000001 rho+ pi- pi0 eta PHSP; +0.000001 rho+ pi- pi0 eta' PHSP; +0.000002 rho- pi+ pi+ pi- PHSP; +0.000002 rho- pi+ pi0 pi0 PHSP; +0.000001 rho- pi+ pi0 eta PHSP; +0.000001 rho- pi+ pi0 eta' PHSP; +0.000001 pi+ pi- pi+ pi- pi0 PHSP; +0.0000005 pi+ pi- pi+ pi- eta PHSP; +0.0000002 pi+ pi- pi+ pi- eta' PHSP; +0.000001 pi+ pi- pi0 pi0 pi0 PHSP; +0.0000005 pi+ pi- pi0 pi0 eta PHSP; +0.0000002 pi+ pi- pi0 pi0 eta' PHSP; +0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; +0.0000002 pi0 pi0 pi0 pi0 eta PHSP; +0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; +0.000010 a_1+ rho- PHSP; +0.000010 a_1- rho+ PHSP; +0.000010 a_10 rho0 PHSP; +0.000010 a_10 omega PHSP; +0.000010 a_1+ pi- pi0 PHSP; +0.000005 a_1+ pi- eta PHSP; +0.000002 a_1+ pi- eta' PHSP; +0.000010 a_10 pi+ pi- PHSP; +0.000010 a_10 pi0 pi0 PHSP; +0.000005 a_10 pi0 eta PHSP; +0.000002 a_10 pi0 eta' PHSP; +0.000010 a_1- pi+ pi0 PHSP; +0.000005 a_1- pi+ eta PHSP; +0.000002 a_1- pi+ eta' PHSP; +0.000010 rho+ f_0 pi- PHSP; +0.000010 rho- f_0 pi+ PHSP; +0.000010 rho0 f_0 pi0 PHSP; +0.000005 rho0 f_0 eta PHSP; +0.000002 rho0 f_0 eta' PHSP; +0.000010 omega f_0 pi0 PHSP; +0.000010 rho+ a_00 pi- PHSP; +0.000010 rho+ a_0- pi0 PHSP; +0.000005 rho+ a_0- eta PHSP; +0.000002 rho+ a_0- eta' PHSP; +0.000010 rho0 a_0+ pi- PHSP; +0.000010 rho0 a_0- pi+ PHSP; +0.000010 rho0 a_00 pi0 PHSP; +0.000005 rho0 a_00 eta PHSP; +0.000002 rho0 a_00 eta' PHSP; +0.000010 rho- a_00 pi+ PHSP; +0.000010 rho- a_0+ pi0 PHSP; +0.000005 rho- a_0+ eta PHSP; +0.000002 rho- a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi0 PHSP; +0.000001 f_0 pi+ pi- eta PHSP; +0.000001 f_0 pi+ pi- eta' PHSP; +0.000002 f_0 pi0 pi0 pi0 PHSP; +0.000001 f_0 pi0 pi0 eta PHSP; +0.000001 f_0 pi0 pi0 eta' PHSP; +0.000001 a_00 pi+ pi- pi0 PHSP; +0.000001 a_00 pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi+ pi- PHSP; +0.000001 a_0+ pi- pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi- PHSP; +0.000001 a_0- pi+ pi0 pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho0 K*- pi+ PHSP; +0.000010 rho+ K*- pi0 PHSP; +0.000005 rho+ K*- eta PHSP; +0.000002 rho+ K*- eta' PHSP; +0.000010 rho0 anti-K*0 pi0 PHSP; +0.000005 rho0 anti-K*0 eta PHSP; +0.000002 rho0 anti-K*0 eta' PHSP; +0.000010 rho- anti-K*0 pi+ PHSP; +0.000010 rho+ anti-K*0 pi- PHSP; +0.000010 omega K*- pi+ PHSP; +0.000010 omega anti-K*0 pi0 PHSP; +0.000005 omega anti-K*0 eta PHSP; +0.000002 omega anti-K*0 eta' PHSP; +0.000010 pi+ pi- K*- pi+ PHSP; +0.000010 pi+ pi0 K*- pi0 PHSP; +0.000005 pi+ pi0 K*- eta PHSP; +0.000002 pi+ pi0 K*- eta' PHSP; +0.000010 pi+ pi- anti-K*0 pi0 PHSP; +0.000005 pi+ pi- anti-K*0 eta PHSP; +0.000002 pi+ pi- anti-K*0 eta' PHSP; +0.000010 pi0 pi0 anti-K*0 pi0 PHSP; +0.000005 pi0 pi0 anti-K*0 eta PHSP; +0.000002 pi0 pi0 anti-K*0 eta' PHSP; +0.000010 rho- K- pi+ pi+ PHSP; +0.000010 rho0 K- pi+ pi0 PHSP; +0.000005 rho0 K- pi+ eta PHSP; +0.000002 rho0 K- pi+ eta' PHSP; +0.000010 rho+ K- pi+ pi- PHSP; +0.000010 rho+ K- pi0 pi0 PHSP; +0.000005 rho+ K- pi0 eta PHSP; +0.000002 rho+ K- pi0 eta' PHSP; + +0.000010 rho0 anti-K0 pi+ pi- PHSP; +0.000010 rho0 anti-K0 pi0 pi0 PHSP; +0.000005 rho0 anti-K0 pi0 eta PHSP; +0.000002 rho0 anti-K0 pi0 eta' PHSP; +0.000010 rho- anti-K0 pi+ pi0 PHSP; +0.000005 rho- anti-K0 pi+ eta PHSP; +0.000002 rho- anti-K0 pi+ eta' PHSP; +0.000010 rho+ anti-K0 pi- pi0 PHSP; +0.000005 rho+ anti-K0 pi- eta PHSP; +0.000002 rho+ anti-K0 pi- eta' PHSP; +0.000010 omega K- pi+ pi0 PHSP; +0.000005 omega K- pi+ eta PHSP; +0.000002 omega K- pi+ eta' PHSP; +0.000010 omega anti-K0 pi+ pi- PHSP; +0.000010 omega anti-K0 pi0 pi0 PHSP; +0.000005 omega anti-K0 pi0 eta PHSP; +0.000002 omega anti-K0 pi0 eta' PHSP; +0.000002 pi+ pi- pi+ K- pi0 PHSP; +0.000001 pi+ pi- pi+ K- eta PHSP; +0.000001 pi+ pi- pi+ K- eta' PHSP; +0.000002 pi0 pi0 pi+ K- pi0 PHSP; +0.000001 pi0 pi0 pi+ K- eta PHSP; +0.000001 pi0 pi0 pi+ K- eta' PHSP; +0.000002 pi+ pi- pi+ anti-K0 pi- PHSP; +0.000002 pi+ pi- pi0 anti-K0 pi0 PHSP; +0.000001 pi+ pi- pi0 anti-K0 eta PHSP; +0.000001 pi+ pi- pi0 anti-K0 eta' PHSP; +0.000002 pi0 pi0 pi0 anti-K0 pi0 PHSP; +0.000001 pi0 pi0 pi0 anti-K0 eta PHSP; +0.000001 pi0 pi0 pi0 anti-K0 eta' PHSP; +0.000010 rho+ anti-K_0*0 pi- PHSP; +0.000010 rho0 anti-K_0*0 pi0 PHSP; +0.000005 rho0 anti-K_0*0 eta PHSP; +0.000002 rho0 anti-K_0*0 eta' PHSP; +0.000010 rho- anti-K_0*0 pi+ PHSP; +0.000010 rho+ K_0*- pi0 PHSP; +0.000005 rho+ K_0*- eta PHSP; +0.000002 rho+ K_0*- eta' PHSP; +0.000010 rho0 K_0*- pi+ PHSP; +0.000010 pi+ pi- K_0*- pi+ PHSP; +0.000010 pi+ pi0 K_0*- pi0 PHSP; +0.000005 pi+ pi0 K_0*- eta PHSP; +0.000002 pi+ pi0 K_0*- eta' PHSP; +0.000010 pi+ pi- anti-K_0*0 pi0 PHSP; +0.000005 pi+ pi- anti-K_0*0 eta PHSP; +0.000002 pi+ pi- anti-K_0*0 eta' PHSP; +0.000010 pi0 pi0 anti-K_0*0 pi0 PHSP; +0.000005 pi0 pi0 anti-K_0*0 eta PHSP; +0.000005 pi0 pi0 anti-K_0*0 eta' PHSP; +0.000010 K*- f_0 pi+ PHSP; +0.000010 anti-K*0 f_0 pi0 PHSP; +0.000005 anti-K*0 f_0 eta PHSP; +0.000002 anti-K*0 f_0 eta' PHSP; +0.000010 a_1+ anti-K0 pi- PHSP; +0.000020 a_10 anti-K*0 PHSP; +0.000010 a_10 K- pi+ PHSP; +0.000010 a_10 anti-K0 pi0 PHSP; +0.000020 a_1+ K*- PHSP; +0.000010 a_1+ K- pi0 PHSP; +0.000010 a_1- anti-K0 pi+ PHSP; +0.000005 K*- a_00 pi+ PHSP; +0.000005 K*- a_0+ pi0 PHSP; +0.000002 K*- a_0+ eta PHSP; +0.000001 K*- a_0+ eta' PHSP; +0.000005 anti-K*0 a_0+ pi- PHSP; +0.000005 anti-K*0 a_00 pi0 PHSP; +0.000002 anti-K*0 a_00 eta PHSP; +0.000001 anti-K*0 a_00 eta' PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*- K*0 pi+ PHSP; +0.000001 K*+ anti-K*0 pi- PHSP; +0.000001 K*- K*+ pi0 PHSP; +0.0000005 K*- K*+ eta PHSP; +0.0000002 K*- K*+ eta' PHSP; +0.000001 K*0 anti-K*0 pi0 PHSP; +0.0000005 K*0 anti-K*0 eta PHSP; +0.0000002 K*0 anti-K*0 eta' PHSP; +0.000001 phi rho+ pi- PHSP; +0.000001 phi rho- pi+ PHSP; +0.000001 phi rho0 pi0 PHSP; +0.0000005 phi rho0 eta PHSP; +0.0000002 phi rho0 eta' PHSP; +0.000001 phi omega pi0 PHSP; +0.000001 phi f_0 pi0 PHSP; +0.000001 phi pi+ pi- pi0 PHSP; +0.0000005 phi pi+ pi- eta PHSP; +0.0000002 phi pi+ pi- eta' PHSP; +0.000001 phi pi0 pi0 pi0 PHSP; +0.0000005 phi pi0 pi0 eta PHSP; +0.0000002 phi pi0 pi0 eta' PHSP; +0.000001 K0 K- rho0 pi+ PHSP; +0.000001 K0 K- rho+ pi0 PHSP; +0.0000005 K0 K- rho+ eta PHSP; +0.0000002 K0 K- rho+ eta' PHSP; +0.000001 K0 K- omega pi+ PHSP; +0.000001 K0 K- f_0 pi+ PHSP; +0.000001 K+ K- rho+ pi- PHSP; +0.000001 K+ K- rho- pi+ PHSP; +0.000001 K+ K- rho0 pi0 PHSP; +0.0000005 K+ K- rho0 eta PHSP; +0.0000002 K+ K- rho0 eta' PHSP; +0.000001 K+ K- omega pi0 PHSP; +0.0000005 K+ K- omega eta PHSP; +0.0000002 K+ K- omega eta' PHSP; +0.000001 K+ K- f_0 pi0 PHSP; +0.000001 K0 anti-K0 rho+ pi- PHSP; +0.000001 K0 anti-K0 rho- pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi0 PHSP; +0.0000005 K0 anti-K0 rho0 eta PHSP; +0.0000002 K0 anti-K0 rho0 eta' PHSP; +0.000001 K0 anti-K0 omega pi0 PHSP; +0.000001 K0 anti-K0 f_0 pi0 PHSP; +0.000001 anti-K0 K+ rho0 pi- PHSP; +0.000001 anti-K0 K+ rho- pi0 PHSP; +0.0000005 anti-K0 K+ rho- eta PHSP; +0.0000002 anti-K0 K+ rho- eta' PHSP; +0.000001 anti-K0 K+ omega pi- PHSP; +0.000001 anti-K0 K+ f_0 pi- PHSP; +0.0000002 K0 K- pi+ pi+ pi- PHSP; +0.0000002 K0 K- pi+ pi0 pi0 PHSP; +0.0000001 K0 K- pi+ pi0 eta PHSP; +0.0000001 K0 K- pi+ pi0 eta' PHSP; +0.0000002 K+ K- pi+ pi- pi0 PHSP; +0.0000001 K+ K- pi+ pi- eta PHSP; +0.0000001 K+ K- pi+ pi- eta' PHSP; +0.0000002 K+ K- pi0 pi0 pi0 PHSP; +0.0000001 K+ K- pi0 pi0 eta PHSP; +0.0000001 K+ K- pi0 pi0 eta' PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; +0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; +0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; +0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; +0.000001 K*0 K- pi+ pi0 PHSP; +0.0000005 K*0 K- pi+ eta PHSP; +0.0000002 K*0 K- pi+ eta' PHSP; +0.000001 K*- K0 pi+ pi0 PHSP; +0.0000005 K*- K0 pi+ eta PHSP; +0.0000002 K*- K0 pi+ eta' PHSP; +0.000001 K*+ K- pi+ pi- PHSP; +0.000001 K*+ K- pi0 pi0 PHSP; +0.0000005 K*+ K- pi0 eta PHSP; +0.0000002 K*+ K- pi0 eta' PHSP; +0.000001 K*- K+ pi+ pi- PHSP; +0.000001 K*- K+ pi0 pi0 PHSP; +0.0000005 K*- K+ pi0 eta PHSP; +0.0000002 K*- K+ pi0 eta' PHSP; +0.000001 K*0 anti-K0 pi+ pi- PHSP; +0.000001 K*0 anti-K0 pi0 pi0 PHSP; +0.0000005 K*0 anti-K0 pi0 eta PHSP; +0.0000002 K*0 anti-K0 pi0 eta' PHSP; +0.000001 K0 anti-K*0 pi+ pi- PHSP; +0.000001 K0 anti-K*0 pi0 pi0 PHSP; +0.0000005 K0 anti-K*0 pi0 eta PHSP; +0.0000002 K0 anti-K*0 pi0 eta' PHSP; +0.000001 K+ anti-K*0 pi- pi0 PHSP; +0.0000005 K+ anti-K*0 pi- eta PHSP; +0.0000002 K+ anti-K*0 pi- eta' PHSP; +0.000001 K*+ anti-K0 pi- pi0 PHSP; +0.0000005 K*+ anti-K0 pi- eta PHSP; +0.0000002 K*+ anti-K0 pi- eta' PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*- pi+ PHSP; +0.000010 phi anti-K*0 pi0 PHSP; +0.000005 phi anti-K*0 eta PHSP; +0.000002 phi anti-K*0 eta' PHSP; +0.000010 phi K- rho+ PHSP; +0.000010 phi anti-K0 rho0 PHSP; +0.000010 phi anti-K0 omega PHSP; +0.000010 phi anti-K0 f_0 PHSP; +0.000010 phi anti-K0 pi+ pi- PHSP; +0.000010 phi anti-K0 pi0 pi0 PHSP; +0.000005 phi anti-K0 pi0 eta PHSP; +0.000002 phi anti-K0 pi0 eta' PHSP; +0.000010 phi K- pi+ pi0 PHSP; +0.000005 phi K- pi+ eta PHSP; +0.000002 phi K- pi+ eta' PHSP; +0.000010 K+ K- K*- pi+ PHSP; +0.000010 K- K*+ K- pi+ PHSP; +0.000010 K- K*0 anti-K0 pi+ PHSP; +0.000010 K- K0 anti-K*0 pi+ PHSP; +0.000010 K0 K*- anti-K0 pi+ PHSP; +0.000010 K- K+ K- rho+ PHSP; +0.000010 K- K+ anti-K0 rho0 PHSP; +0.000010 K- K+ anti-K0 omega PHSP; +0.000010 K- K+ anti-K0 f_0 PHSP; +0.000010 K+ K- K- pi+ pi0 PHSP; +0.000005 K+ K- K- pi+ eta PHSP; +0.000002 K+ K- K- pi+ eta' PHSP; +0.000010 K+ K- anti-K0 pi+ pi- PHSP; +0.000010 K+ K- anti-K0 pi0 pi0 PHSP; +0.000005 K+ K- anti-K0 pi0 eta PHSP; +0.000005 K+ K- anti-K0 pi0 eta' PHSP; +0.000010 K0 anti-K0 K- pi+ pi0 PHSP; +0.000005 K0 anti-K0 K- pi+ eta PHSP; +0.000002 K0 anti-K0 K- pi+ eta' PHSP; +0.000010 K0 anti-K0 anti-K0 pi+ pi- PHSP; +0.000010 K0 anti-K0 anti-K0 pi0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K0 pi0 eta PHSP; +0.000002 K0 anti-K0 anti-K0 pi0 eta' PHSP; +0.000010 phi K_0*- pi+ PHSP; +0.000010 phi anti-K_0*0 pi0 PHSP; +0.000010 K+ K- K_0*- pi+ PHSP; +0.000010 K+ K- anti-K_0*0 pi0 PHSP; +0.000005 K+ K- anti-K_0*0 eta PHSP; +0.000002 K+ K- anti-K_0*0 eta' PHSP; +0.000010 K- K- K_0*+ pi+ PHSP; +0.000010 K- anti-K_0*0 K0 pi+ PHSP; +0.000010 K- K_0*0 anti-K0 pi+ PHSP; +0.000010 K0 anti-K0 K_0*- pi+ PHSP; +0.000010 K0 anti-K0 anti-K_0*0 pi0 PHSP; +0.000005 K0 anti-K0 anti-K_0*0 eta PHSP; +0.000002 K0 anti-K0 anti-K_0*0 eta' PHSP; +0.000010 anti-K0 anti-K0 K_0*0 pi0 PHSP; +0.000005 anti-K0 anti-K0 K_0*0 eta PHSP; +0.000002 anti-K0 anti-K0 K_0*0 eta' PHSP; +0.000002 phi K'_1- pi+ PHSP; +0.000002 phi anti-K'_10 pi0 PHSP; +0.000001 phi anti-K'_10 eta PHSP; +0.000001 phi anti-K'_10 eta' PHSP; +0.000002 K- K+ K'_1- pi+ PHSP; +0.000002 K- K+ anti-K'_10 pi0 PHSP; +0.000001 K- K+ anti-K'_10 eta PHSP; +0.000001 K- K+ anti-K'_10 eta' PHSP; +0.000002 K- K- K'_1+ pi+ PHSP; +0.000002 K0 anti-K0 anti-K'_10 pi0 PHSP; +0.000001 K0 anti-K0 anti-K'_10 eta PHSP; +0.000001 K0 anti-K0 anti-K'_10 eta' PHSP; +0.000002 anti-K0 anti-K0 K'_10 pi0 PHSP; +0.000001 anti-K0 anti-K0 K'_10 eta PHSP; +0.000001 anti-K0 anti-K0 K'_10 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004100 phi phi anti-K0 PHSP; #[Reconstructed PDG2011] +0.0000001 phi phi pi0 PHSP; +0.000001 phi K+ K- anti-K0 PHSP; +0.000001 phi K0 anti-K0 anti-K0 PHSP; +0.0000001 phi K+ K- pi0 PHSP; +0.0000001 phi K0 anti-K0 pi0 PHSP; +0.0000001 phi anti-K0 K+ pi- PHSP; +0.0000001 phi K0 K- pi+ PHSP; +0.0000001 K+ K- K+ K- anti-K0 PHSP; +0.0000001 K0 anti-K0 K+ K- anti-K0 PHSP; +0.0000001 K+ K- K+ K- pi0 PHSP; +0.0000001 K+ K- K0 anti-K0 pi0 PHSP; +0.0000001 K+ K- K+ anti-K0 pi- PHSP; +0.0000001 K+ K- K0 K- pi+ PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; +0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; +0.0000001 K0 anti-K0 K0 K- pi+ PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi anti-K*0 PHSP; +0.000001 phi K+ K- anti-K*0 PHSP; +0.000001 phi K0 anti-K0 anti-K*0 PHSP; +0.000001 phi anti-K0 K- K*+ PHSP; +0.000001 phi anti-K0 anti-K0 K*0 PHSP; +0.0000001 phi K+ K- K- pi+ PHSP; +0.0000001 phi K+ K- anti-K0 pi0 PHSP; +0.0000001 phi K0 anti-K0 K- pi+ PHSP; +0.0000001 phi K0 anti-K0 anti-K0 pi0 PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_10 a_10 PHSP; +0.000050 a_1+ a_1- PHSP; +# +# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 +0.0000067 K*0 pi0 pi0 PHSP; +# +# B -> cc= s +# +# Charmonium states - updated from Lange's recommendations (august 23,2000) +# Based on new BABAR results I'm making the following changes (Lange, March 13, 2001 +# J/psi K0 was 10, now 9 x 10^-4 +# J/psi pi0 was 2.5, now 2.0 x 10^-4 +# J/psi Kstar was 15, now 13 +# Fix chic1 KS CP eigenstate +# adding J/psi rho and omega - for lack of better thing will use the Kstar helicity amplitudes. +# Psi2sKs 30 ->31 +# chic1 Kstar: 12 ->6 +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.001330000 J/psi anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000030 J/psi omega SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; +0.000000000 J/psi K- pi+ PHSP; #[Reconstructed PDG2011] +0.0001 J/psi anti-K0 pi0 PHSP; +#rl0.0007 J/psi anti-K0 pi+ pi- PHSP; +#rl0.00035 J/psi anti-K0 pi0 pi0 PHSP; +#rl0.00035 J/psi K- pi+ pi0 PHSP; +0.001300000 J/psi anti-K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.0001 J/psi anti-K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi anti-K_2*0 PHSP; +0.000094000 J/psi phi anti-K0 PHSP; #[Reconstructed PDG2011] +# +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000610000 psi(2S) anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] + +0.0004 psi(2S) K- pi+ PHSP; +0.0002 psi(2S) anti-K0 pi0 PHSP; +0.0002 psi(2S) anti-K0 pi+ pi- PHSP; +0.0001 psi(2S) anti-K0 pi0 pi0 PHSP; +0.0001 psi(2S) K- pi+ pi0 PHSP; +0.0004 psi(2S) anti-K_10 PHSP; + +# +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.000610000 anti-K*0 eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K- pi+ PHSP; +0.0001 eta_c anti-K0 pi0 PHSP; +0.0002 eta_c anti-K0 pi+ pi- PHSP; +0.0001 eta_c anti-K0 pi0 pi0 PHSP; +0.0001 eta_c K- pi+ pi0 PHSP; +# +0.00024 eta_c(2S) K_S0 PHSP; +0.00024 eta_c(2S) K_L0 PHSP; +# +# +0.00066 anti-K*0 eta_c(2S) SVS; +0.00008 eta_c(2S) K- pi+ PHSP; +0.00005 eta_c(2S) anti-K0 pi0 PHSP; +0.00008 eta_c(2S) anti-K0 pi+ pi- PHSP; +0.00005 eta_c(2S) anti-K0 pi0 pi0 PHSP; +0.00005 eta_c(2S) K- pi+ pi0 PHSP; +# +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.00030 anti-K*0 chi_c0 SVS; +0.0002 chi_c0 K- pi+ PHSP; +0.0001 chi_c0 anti-K0 pi0 PHSP; +0.0002 chi_c0 anti-K0 pi+ pi- PHSP; +0.0001 chi_c0 anti-K0 pi0 pi0 PHSP; +0.0001 chi_c0 K- pi+ pi0 PHSP; +# +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000222000 chi_c1 anti-K*0 SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 chi_c1 K- pi+ PHSP; +0.0002 chi_c1 anti-K0 pi0 PHSP; +0.0004 chi_c1 anti-K0 pi+ pi- PHSP; +0.0002 chi_c1 anti-K0 pi0 pi0 PHSP; +0.0002 chi_c1 K- pi+ pi0 PHSP; +# +0.00005 chi_c2 K_S0 STS; +0.00005 chi_c2 K_L0 STS; +# +# +0.00003 chi_c2 anti-K*0 PHSP; +0.0002 chi_c2 K- pi+ PHSP; +0.0001 chi_c2 anti-K0 pi0 PHSP; +0.0002 chi_c2 anti-K0 pi+ pi- PHSP; +0.0001 chi_c2 anti-K0 pi0 pi0 PHSP; +0.0001 chi_c2 K- pi+ pi0 PHSP; +# +0.00024 psi(3770) K_S0 SVS; +0.00024 psi(3770) K_L0 SVS; +# +# +0.00048 psi(3770) anti-K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.00014 psi(3770) K- pi+ PHSP; +0.00014 psi(3770) anti-K0 pi0 PHSP; +0.00014 psi(3770) anti-K0 pi+ pi- PHSP; +0.00007 psi(3770) anti-K0 pi0 pi0 PHSP; +0.00007 psi(3770) K- pi+ pi0 PHSP; +0.00029 psi(3770) anti-K_10 PHSP; +# +# b-> c (dc=) +# +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] +# See Ref [B1] for the next 3: +0.000305 D*+ D- SVS; +0.000610000 D*- D+ SVS; #[Reconstructed PDG2011] +0.000820000 D*+ D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] + +# +# b -> c (sc=) --> D Ds X Sum = 10% +# +0.007200000 D+ D_s- PHSP; #[Reconstructed PDG2011] +0.008000000 D*+ D_s- SVS; #[Reconstructed PDG2011] +0.007400000 D_s*- D+ SVS; #[Reconstructed PDG2011] +0.017700000 D*+ D_s*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +0.0006 D'_1+ D_s- SVS; +0.0012 D'_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_1+ D_s- SVS; +0.0024 D_1+ D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*+ D_s- STS; +0.0040 D_2*+ D_s*- PHSP; +# +0.0018 D_s- D+ pi0 PHSP; +0.0037 D_s- D0 pi+ PHSP; +0.0018 D_s*- D+ pi0 PHSP; +0.0037 D_s*- D0 pi+ PHSP; +0.0030 D_s- D+ pi+ pi- PHSP; +0.0022 D_s- D+ pi0 pi0 PHSP; +0.0022 D_s- D0 pi+ pi0 PHSP; +0.0030 D_s*- D+ pi+ pi- PHSP; +0.0022 D_s*- D+ pi0 pi0 PHSP; +0.0022 D_s*- D0 pi+ pi0 PHSP; +# +# b -> c (sc=) --> D D= K X Sum = 8% +# Update: Ref. [B1] +# +# External W-emission amplitude +0.001700000 D+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.004600000 D+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.003100000 D*+ anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.011800000 D*+ anti-D*0 K- PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.0015 D+ D- anti-K0 PHSP; +0.0018 D*+ D- anti-K0 PHSP; +0.0047 D+ D*- anti-K0 PHSP; +0.007800000 D*+ D*- anti-K0 PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D0 anti-D0 anti-K0 PHSP; +0.000120000 D*0 anti-D0 anti-K0 PHSP; #[Reconstructed PDG2011] +0.0015 D0 anti-D*0 anti-K0 PHSP; +0.0015 D*0 anti-D*0 anti-K0 PHSP; + +0.0025 D+ anti-D0 K*- PHSP; +0.0025 D*+ anti-D0 K*- PHSP; +0.0025 D+ anti-D*0 K*- PHSP; +0.0050 D*+ anti-D*0 K*- PHSP; +# +0.0025 D+ D- anti-K*0 PHSP; +0.0025 D*+ D- anti-K*0 PHSP; +0.0025 D+ D*- anti-K*0 PHSP; +0.0050 D*+ D*- anti-K*0 PHSP; +# +0.0005 anti-D0 D0 anti-K*0 PHSP; +0.0005 anti-D0 D*0 anti-K*0 PHSP; +0.0005 anti-D*0 D0 anti-K*0 PHSP; +0.0010 anti-D*0 D*0 anti-K*0 PHSP; +# +# +# B -> D(*) X Exclusive modes +# +0.002760000 D*+ pi- SVS; #[Reconstructed PDG2011] +0.002680000 D+ pi- PHSP; #[Reconstructed PDG2011] +0.007110000 rho- D+ SVS; #[Reconstructed PDG2011] +# +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.006800000 rho- D*+ SVV_HELAMP 0.152 1.47 0.936 0 0.317 0.19; #[Reconstructed PDG2011] +0.0005 D+ pi- pi0 PHSP; +0.008200000 D*+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 D0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000620000 D*0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0005 D*0 pi0 pi0 PHSP; +# +# D a1 updated Ref. [B1] +0.006000000 a_1- D+ SVS; #[Reconstructed PDG2011] +0.000000000 D+ rho0 pi- PHSP; #[Reconstructed PDG2011] +0.0011 D+ rho- pi0 PHSP; +0.002000000 D+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.0010 D+ pi0 pi- pi0 PHSP; +0.0010 D0 pi+ pi- pi0 PHSP; +0.0001 D0 pi0 pi0 pi0 PHSP; +# +# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1] +# October 26, 2004 Lange update +0.013000000 D*+ a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] +# +0.005700000 D*+ rho0 pi- PHSP; #[Reconstructed PDG2011] +0.0010 D*+ rho- pi0 PHSP; +0.0000 D*+ pi+ pi- pi- PHSP; +0.0010 D*+ pi0 pi- pi0 PHSP; +0.0010 D*0 pi+ pi- pi0 PHSP; +0.0001 D*0 pi0 pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +#further updates October 26, 2004 - Lange +# October 26, 2004 Lange update +# +0.0001 D_1+ pi- SVS; +0.0001 D'_1+ pi- SVS; +0.00006 D_0*+ pi- PHSP; +0.000215 D_2*+ pi- STS; +0.0004 D_1+ rho- PHSP; +0.0013 D'_1+ rho- PHSP; +0.0022 D_2*+ rho- PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref. [B1]: +# +0.000214000 D*+ K- SVS; #[Reconstructed PDG2011] +0.000200000 D+ K- PHSP; #[Reconstructed PDG2011] +0.000330000 D*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +0.000450000 K*- D+ SVS; #[Reconstructed PDG2011] +#more DK modes - October 26, 2004 -Lange +0.000036 D*0 K0 SVS; +0.000052 D0 K0 PHSP; +0.000042000 anti-K*0 D0 SVS; #[Reconstructed PDG2011] +0.00001 anti-K*0 anti-D0 SVS; +0.00004 D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.00001 anti-D*0 anti-K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +# +# +# Color-suppressed modes. Br's are expectations from +# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set +# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, +# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: +# update: See Ref [B1]: +# further update October 26, 2004 Lange +# +0.000261000 D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 D*0 pi0 SVS; #[Reconstructed PDG2011] +# +0.000320000 rho0 D0 SVS; #[Reconstructed PDG2011] +0.00029 D*0 rho0 SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; +# +0.000202000 D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 D*0 eta SVS; #[Reconstructed PDG2011] +# +0.000125 D0 eta' PHSP; +0.000123000 D*0 eta' SVS; #[Reconstructed PDG2011] +# +0.000259000 omega D0 SVS; #[Reconstructed PDG2011] +0.000330000 D*0 omega SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +# +# +#October 26, 2004 - Lange +0.0016 D_s0*- D+ PHSP; +0.0015 D*+ D_s0*- SVS; +0.003500000 D_s1- D+ SVS; #[Reconstructed PDG2011] +0.009300000 D*+ D_s1- SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00088 D+ K- anti-K*0 PHSP; +0.00129 D*+ K- anti-K*0 PHSP; +# +# Feb 2009 +# +0.002800000 D+ omega pi- PHSP; #[Reconstructed PDG2011] +0.002890000 D*+ omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00049 D+ K0 pi- PHSP; +0.0003 D*+ K0 pi- PHSP; +# +# Feb 2009 +# +0.00043 D'_s1- D+ PHSP; +0.00083 D'_s1- D*+ PHSP; +##### Already included above 0.0023 D_s1- D*+ PHSP; +# +# +# Lam_c X / Sigma_c X 6.0 % +# +#0.01000 cd_0 anti-ud_0 PYTHIA 23; +#0.03000 cd_1 anti-ud_1 PYTHIA 23; +0.010463563 cd_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.020927220 cd_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Xi_c X 2.5% +# +#0.00600 cs_0 anti-ud_0 PYTHIA 23; +#0.01800 cs_1 anti-ud_1 PYTHIA 23; +0.002853725 cs_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.005707449 cs_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# PR LHCb Add p pbar mode +0.0000001 p+ anti-p- PHSP; +0.243213593 anti-u d c anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix MDS +0.041629906 anti-u d c anti-d PYTHIA 25; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.019004991 anti-u s c anti-d PYTHIA 23; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.016289979 anti-u c d anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.000814485 anti-u c s anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.066969834 anti-c s c anti-d PYTHIA 13; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.005430023 anti-c d c anti-d PYTHIA 13; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.002715012 anti-u d u anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.003620015 anti-c s u anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.001855222 anti-u u d anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.0000633718 anti-d d d anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.00008144 anti-s s d anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.001990955 anti-u u s anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.001628971 anti-d d s anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix +0.001357506 anti-s s s anti-d PYTHIA 48; #[Reconstructed PDG2011]#JB rescaled to add up to 1 after SL changes, jan 2015 fix + +0.004756208 s anti-d PYTHIA 32; #[Reconstructed PDG2011] +0.000490000 D+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000880000 D+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 D*+ anti-K0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001290000 D*+ K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017600000 D*+ pi- pi- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*+ pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s+ pi- anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 D0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 anti-D0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 D*0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 anti-D*0 pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi anti-K0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi anti-K*0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 anti-K0 anti-D0 D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega anti-K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 anti-K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 anti-K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta anti-K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 anti-K0 pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K- pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 anti-K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 anti-p- p+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 anti-p- p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 anti-p- Lambda0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 Lambda0 anti-Lambda0 anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 Lambda0 anti-Lambda0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 Lambda0 anti-Lambda0 anti-D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 D0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s+ Lambda0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 D*0 anti-p- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*+ anti-p- n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*+ anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 Lambda_c+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 Lambda_c+ anti-p- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 Sigma_c*++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 Sigma_c0 anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 Sigma_c++ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +Decay B0 +# Updated to PDG 2008 +# b -> c semileptonic +# +0.0493 D*- e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] # Changed by JB to pdg value +0.0218 D- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB to pdg value +0.00753608113379275 D_1- e+ nu_e PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00279114116066398 D_0*- e+ nu_e PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00697785290165995 D'_1- e+ nu_e PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00307025527673038 D_2*- e+ nu_e PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.000418671174099597 D*- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # Changed by JB rescaled for correct inclusive SL +0.00683829584362675 anti-D*0 pi- e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL +0.00139557058033199 D- pi0 e+ nu_e PHOTOS GOITY_ROBERTS; # Changed by JB rescaled for correct inclusive SL +0.0493 D*- mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] # Changed by JB to pdg value, fix 2015 +0.0218 D- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB to pdg value, fix 2015 +0.00753608113379275 D_1- mu+ nu_mu PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00279114116066398 D_0*- mu+ nu_mu PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00697785290165995 D'_1- mu+ nu_mu PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.00307025527673038 D_2*- mu+ nu_mu PHOTOS ISGW2; # Changed by JB rescaled for correct inclusive SL +0.000418671174099597 D*- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; # Changed by JB rescaled for correct inclusive SL +0.00683829584362675 anti-D*0 pi- mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL +0.00139557058033199 D- pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; # Changed by JB rescaled for correct inclusive SL +0.0184 D*- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] # Changed by JB to pdg value +0.0102 D- tau+ nu_tau ISGW2; #[Reconstructed PDG2011] # Changed by JB to pdg value +0.00181424175443159 D_1- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decays +0.00181424175443159 D_0*- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decays +0.00279114116066398 D'_1- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decays +0.00279114116066398 D_2*- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decays +0.000187006457764487 pi- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL decay +0.000344705933342001 rho- e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL decay +0.00264041953798813 Xu- e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # Changed by JB rescaled for correct inclusive SL decay +0.00018700645776448700 pi- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL decay +0.00034470593334200100 rho- mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] # Changed by JB rescaled for correct inclusive SL decay +0.00264041953798813 Xu- mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.55 1.20 0.61 1.26 0.85 1.34 1.08 1.41 1.21 1.48 1.30 1.55 1.30 1.61 1.33 1.67 1.36 1.73 1.39 1.79 1.33 1.84 1.42 1.90 1.39 1.95 1.39 2.00 1.37 2.50 1.30 3.00 0.74 3.50 0.99 4.00 1.09 4.50 1.00; # Changed by JB rescaled for correct inclusive SL decay +0.0000837342348199194 pi- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +0.000115832358167555 rho- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +0.000125601352229879 a_1- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +0.0000111645646426559 b_1- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +0.0000111645646426559 a_0- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +0.0000111645646426559 a_2- tau+ nu_tau ISGW2; # Changed by JB rescaled by same factor as SL e decay +# + +# +# b->u hadronic +# Ref. [B1]: +# Lange Nov14,2004 (flip D_s K --opposite of D_s pi) +0.000024000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.000030000 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000021000 D_s*+ pi- SVS; #[Reconstructed PDG2011] +0.000021900 D_s*- K+ SVS; #[Reconstructed PDG2011] +# +0.000016 rho- D_s+ SVS; +0.000035000 K*+ D_s- SVS; #[Reconstructed PDG2011] +0.000041000 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000032000 D_s*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] + + +# +# b -> s gamma +# +0.000043300 K*0 gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb add omega gamma +0.000000440 omega gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_10 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*0 gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*0 gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 Xsd gamma BTOXSGAMMA 2 ; +# +0.000000160 K0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001030 K*0 e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsd e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000450 K0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001050 K*0 mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsd mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*0 tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsd tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# B0 -> CP eigenstates (some exclusive b -> u) sum=0.00036 +# +# PR LHCb 04/07/04 update BR +0.000005130 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000001620 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0000010 pi0 eta PHSP; +0.000001200 pi0 eta' PHSP; #[Reconstructed PDG2011] +0.000001 pi0 a_00 PHSP; +0.000001 pi0 f_0 PHSP; +# pi0 rho0 is with the 3-body modes +0.000001 omega pi0 SVS; +0.000001 a_10 pi0 SVS; +0.000001 b_10 pi0 SVS; +0.000001 eta eta PHSP; +0.000001 eta eta' PHSP; +0.000001 eta a_00 PHSP; +0.000001 eta f_0 PHSP; +0.000001 rho0 eta SVS; +0.000000940 omega eta SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta SVS; +0.000001 b_10 eta SVS; +0.000001 eta' eta' PHSP; +0.000001 eta' a_00 PHSP; +0.000001 eta' f_0 PHSP; +0.000001 rho0 eta' SVS; +0.000001000 omega eta' SVS; #[Reconstructed PDG2011] +0.000001 a_10 eta' SVS; +0.000001 b_10 eta' SVS; +0.000001 a_00 a_00 PHSP; +0.000001 a_00 f_0 PHSP; +0.000001 rho0 a_00 SVS; +0.000001 omega a_00 SVS; +0.000001 a_10 a_00 SVS; +0.000001 b_10 a_00 SVS; +0.000001 f_0 f_0 PHSP; +0.000001 rho0 f_0 SVS; +0.000001 omega f_0 SVS; +0.000001 a_10 f_0 SVS; +0.000001 b_10 f_0 SVS; + +# Penguin dominated modes are sin2beta, not sin2alpha +0.000004300 phi K_S0 SVS; #[Reconstructed PDG2011] +0.000004300 phi K_L0 SVS; #[Reconstructed PDG2011] +0.000000550 eta K_S0 PHSP; #[Reconstructed PDG2011] +0.000000550 eta K_L0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_S0 PHSP; #[Reconstructed PDG2011] +0.000033000 eta' K_L0 PHSP; #[Reconstructed PDG2011] +0.000002500 omega K_S0 SVS; #[Reconstructed PDG2011] +0.000002500 omega K_L0 SVS; #[Reconstructed PDG2011] +#don't allow jetset to simulate the same decay but to a K0 or anti-K0 +#Lange 1/30/2003 +0.0 phi K0 PHSP; +0.0 phi anti-K0 PHSP; +0.0 eta K0 PHSP; +0.0 eta anti-K0 PHSP; +0.0 eta' K0 PHSP; +0.0 eta' anti-K0 PHSP; +0.0 omega K0 PHSP; +0.0 omega anti-K0 PHSP; +# phipi0 has no simple Pengiun or tree so who knows - ditto phieta/eta'? +0.000001 phi pi0 SVS; +0.000001 phi eta SVS; +0.000001 phi eta' SVS; +# +0.000015900 K*0 eta SVS; #[Reconstructed PDG2011] +0.000003800 K*0 eta' SVS; #[Reconstructed PDG2011] +0.000002000 K*0 omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 phi omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega omega SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 omega rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +# +# PR LHCb 04/07/04 update BR +#2-body modes from Jim Olsen +0.000019400 K+ pi- PHSP; #[Reconstructed PDG2011] +0.0000004 K+ K- PHSP; +0.000000240 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0000000 K_S0 K_L0 PHSP; +0.000000240 K_L0 K_L0 PHSP; #[Reconstructed PDG2011] +# Declare K0 pi0 not to have it through Pythia (LHCb - PR) +0.0000000 K0 pi0 PHSP; +# Split into K_s0 K_l0 (LHCb - P. Robbe) +0.000004750 K_S0 pi0 PHSP; #[Reconstructed PDG2011] +0.000004750 K_L0 pi0 PHSP; #[Reconstructed PDG2011] +#Put in with 0 BR to keep PYTHIA from generating it +0.0000000 K0 anti-K0 PHSP; +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B0 modes +# Model generates rho(770), rho(1450) and rho(1700) resonances +# with interference (uses CKM angle alpha) +# the line commented out for EvtGen1.7 +#0.000024 pi- pi+ pi0 BTO3PI_CP dm alpha; +# Put in with 0 BR to keep PYTHIA from generating these (see BTO3PI_CP above) +0.000000 rho0 pi0 SVS; +0.000000 rho+ pi- SVS; +0.000000 rho- pi+ SVS; +0.000000 rho(2S)+ pi- SVS; +0.000000 rho(2S)- pi+ SVS; +0.000000 rho(3S)+ pi- SVS; +0.000000 rho(3S)- pi+ SVS; +# +# rho0 3-body modes +0.000002350 rho0 K_S0 SVS; #[Reconstructed PDG2011] +0.000002350 rho0 K_L0 SVS; #[Reconstructed PDG2011] +# +# rho- 3-body modes +0.000008400 rho- K+ SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000005 rho(2S)0 K_S0 SVS; +0.0000005 rho(2S)0 K_L0 SVS; +# +# +# f0,a0(980) 3-body modes +0.0000055 f_0 K0 PHSP; +0.000001 a_00 K0 PHSP; +0.000001 a_0- K+ PHSP; +0.000001 a_0+ pi- PHSP; +0.000003 a_0- pi+ PHSP; +# +# K*0(892) 3-body modes +0.000003600 K*0 pi0 SVS; #[Reconstructed PDG2011] +0.000003 K*0 anti-K0 SVS; +# +# K*0(1430) 3-body modes +0.000001 K_0*0 pi0 PHSP; +0.000003 K_0*0 anti-K0 PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*0 pi0 SVS; +0.000001 K''*0 K0 SVS; + +# +# K*+(892) 3-body modes +0.000009400 K*+ pi- SVS; #[Reconstructed PDG2011] +0.000002 K*+ K- SVS; +# +# K*+(1430) 3-body modes +0.000033000 K_0*+ pi- PHSP; #[Reconstructed PDG2011] +0.000002 K_0*+ K- PHSP; +# +# K*0(1680) 3-body modes +0.000001 K''*+ pi- SVS; +0.000001 K''*+ K- SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi+pi-pi0: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi+ pi- pi0 PHSP; +0.000017 pi+ pi- eta PHSP; +0.000001 pi+ pi- eta' PHSP; +# +# pi+ pi- K0: total-rhoK0-f0K0-piK*(892)-piK*(1430)=45-5-6-13./3-11./3 +0.000000000 pi+ pi- K0 PHSP; #[Reconstructed PDG2011] +# +# K+ pi- pi0 +0.000027500 K+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000020 K+ pi- eta PHSP; +0.000001 K+ pi- eta' PHSP; +# +# pi+ K- K0. +# Both B0 and B0bar can decay to these => 0.5e-6 each +0.0000005 pi+ K- K0 PHSP; +0.0000005 pi- K+ anti-K0 PHSP; +# +# K+ K- K0 +# PR LHCb 09 Apr 2004 split into KS/KL +0.000000 K+ K- K0 PHSP; +0.000012350 K+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.000012350 K+ K- K_L0 PHSP; #[Reconstructed PDG2011] +# +# K+ K- pi0 +0.000001 K+ K- pi0 PHSP; +0.000001 K+ K- eta PHSP; +0.000001 K+ K- eta' PHSP; +# +# pi0 K0 anti-K0 +0.000002 K0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K0 eta PHSP; +0.000001 K0 anti-K0 eta' PHSP; +# +# pi0 pi0 K0 +0.000002 K0 pi0 pi0 PHSP; +0.000001 K0 pi0 eta PHSP; +0.000001 K0 pi0 eta' PHSP; +0.000001 K0 eta eta PHSP; +0.000001 K0 eta eta' PHSP; +0.000001 K0 eta' eta' PHSP; +# +# K0 anti-K0 K0: 8*BF(KsKsKs)~=48 (8 is a guess) +0.000048 K0 anti-K0 K0 PHSP; +# +# pi0 pi0 pi0 +0.000001 pi0 pi0 pi0 PHSP; +0.000001 pi0 pi0 eta PHSP; +0.000001 pi0 pi0 eta' PHSP; +0.000001 pi0 eta eta PHSP; +0.000001 pi0 eta eta' PHSP; +# +# PR LHCb: 7 Nov 2005 Add K*0 pi0 pi0 +0.0000067 K*0 pi0 pi0 PHSP; +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 20 Apr 2004, set long. pol. +0.000000730 rho0 rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000024200 rho+ rho- SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000003 rho0 pi+ pi- PHSP; +0.000003 omega pi+ pi- PHSP; +0.000001 rho0 pi0 pi0 PHSP; +0.000001 omega pi0 pi0 PHSP; +0.0000005 rho0 pi0 eta PHSP; +0.0000002 rho0 eta eta PHSP; +0.0000002 rho0 pi0 eta' PHSP; +0.0000001 rho0 eta eta' PHSP; +0.0000005 omega pi0 eta PHSP; +0.0000002 omega eta eta PHSP; +0.0000002 omega pi0 eta' PHSP; +0.0000001 omega eta eta' PHSP; +0.000010 rho+ pi- pi0 PHSP; +0.000005 rho+ pi- eta PHSP; +0.000010 rho- pi+ pi0 PHSP; +0.000005 rho- pi+ eta PHSP; +0.000010 pi+ pi- pi+ pi- PHSP; +0.000010 pi+ pi- pi0 pi0 PHSP; +0.000005 pi+ pi- eta pi0 PHSP; +0.000002 pi+ pi- eta eta PHSP; +0.000002 pi+ pi- eta' pi0 PHSP; +0.000001 pi+ pi- eta' eta PHSP; +0.000016500 a_1+ pi- SVS; #[Reconstructed PDG2011] +0.000016500 a_1- pi+ SVS; #[Reconstructed PDG2011] +0.0000055 b_1+ pi- SVS; +0.0000055 b_1- pi+ SVS; +0.000002 rho- a_0+ SVS; +0.000010 rho+ a_0- SVS; +0.000001 f_0 pi+ pi- PHSP; +0.000001 f_0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi0 PHSP; +0.000001 a_00 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi0 PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000003400 rho0 K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000100 rho- K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000050600 pi- pi+ K*0 PHSP; #[Reconstructed PDG2011] +0.000010 pi- pi0 K*+ PHSP; +0.000005 pi- eta K*+ PHSP; +0.000002 pi- eta' K*+ PHSP; +0.000010 rho- K+ pi0 PHSP; +0.000005 rho- K+ eta PHSP; +0.000002 rho- K+ eta' PHSP; +0.000010 rho- K0 pi+ PHSP; +0.000010 rho+ K0 pi- PHSP; +0.000005 rho0 K0 pi0 PHSP; +0.000002 rho0 K0 eta PHSP; +0.000001 rho0 K0 eta' PHSP; +0.000010 rho0 K+ pi- PHSP; +0.000005 omega K0 pi0 PHSP; +0.000002 omega K0 eta PHSP; +0.000001 omega K0 eta' PHSP; +0.000005100 omega K+ pi- PHSP; #[Reconstructed PDG2011] +0.000010 pi+ pi0 pi- K0 PHSP; +0.000005 pi+ eta pi- K0 PHSP; +0.000010 pi0 pi0 pi0 K0 PHSP; +0.000005 pi0 pi0 eta K0 PHSP; +0.000002 pi0 eta eta K0 PHSP; +0.000002 pi0 pi0 eta' K0 PHSP; +0.000001 pi0 eta eta' K0 PHSP; +0.000010 pi+ pi- pi- K+ PHSP; +0.000010 pi0 pi0 pi- K+ PHSP; +0.000005 pi0 eta pi- K+ PHSP; +0.000002 eta eta pi- K+ PHSP; +0.000002 pi0 eta' pi- K+ PHSP; +0.000001 eta eta' pi- K+ PHSP; +0.000010 rho0 K_0*0 PHSP; +0.000020 rho- K_0*+ PHSP; +0.000010 pi- pi+ K_0*0 PHSP; +0.000010 pi0 pi0 K_0*0 PHSP; +0.000010 pi- pi0 K_0*+ PHSP; +0.000005 K*0 f_0 SVS; +0.000010 a_10 K0 SVS; +0.000016000 a_1- K+ SVS; #[Reconstructed PDG2011] +0.000010 b_10 K0 SVS; +0.0000074 b_1- K+ SVS; +0.000005 K*0 a_00 SVS; +0.000005 K*+ a_0- SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001280 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000001 K*+ K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi rho0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 K+ K- rho0 PHSP; +0.000001 K0 anti-K0 rho0 PHSP; +0.000001 K+ K- omega PHSP; +0.000001 K0 anti-K0 omega PHSP; +0.000001 K+ anti-K0 rho- PHSP; +0.000001 K- K0 rho+ PHSP; +0.0000001 phi pi- pi+ PHSP; +0.000001 K+ K- pi- pi+ PHSP; +0.000001 K+ K- pi0 pi0 PHSP; +0.0000005 K+ K- pi0 eta PHSP; +0.0000002 K+ K- eta eta PHSP; +0.0000002 K+ K- pi0 eta' PHSP; +0.0000001 K+ K- eta eta' PHSP; +0.000001 K0 anti-K0 pi- pi+ PHSP; +0.000001 K0 anti-K0 pi0 pi0 PHSP; +0.0000005 K0 anti-K0 pi0 eta PHSP; +0.0000002 K0 anti-K0 eta eta PHSP; +0.0000002 K0 anti-K0 pi0 eta' PHSP; +0.0000001 K0 anti-K0 eta eta' PHSP; +0.000001 K*+ K- pi0 PHSP; +0.000001 K*- K+ pi0 PHSP; +0.000001 K*0 anti-K0 pi0 PHSP; +0.000001 K0 anti-K*0 pi0 PHSP; +0.000001 K+ anti-K*0 pi- PHSP; +0.000001 K*+ anti-K0 pi- PHSP; +0.000003320 K- K*0 pi+ PHSP; #[Reconstructed PDG2011] +0.000001 K*- K0 pi+ PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000009800 phi K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K+ pi- PHSP; +0.000010 phi K0 pi0 PHSP; +0.000007 phi K0 eta PHSP; +0.000017700 K- K+ K*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ K0 PHSP; +0.000010 K*- K+ K0 PHSP; +0.000010 K+ K- K+ pi- PHSP; +0.000010 K+ K- K0 pi0 PHSP; +0.000005 K+ K- K0 eta PHSP; +0.000010 K0 anti-K0 K0 pi0 PHSP; +0.000005 K0 anti-K0 K0 eta PHSP; +0.000003900 phi K_0*0 PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*0 PHSP; +0.000010 K- K_0*+ K0 PHSP; +0.000010 K_0*- K+ K0 PHSP; +0.000002 phi K'_10 PHSP; +0.000002 K- K+ K'_10 PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.0000001 phi phi SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.0000001 phi K+ K- PHSP; +0.0000001 phi K0 anti-K0 PHSP; +0.0000001 K+ K- K+ K- PHSP; +0.0000001 K0 anti-K0 K+ K- PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 PHSP; +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi0 PHSP; +0.000005 rho0 rho0 eta PHSP; +0.000002 rho0 rho0 eta' PHSP; +0.000010 omega rho0 pi0 PHSP; +0.000005 omega rho0 eta PHSP; +0.000002 omega rho0 eta' PHSP; +0.000010 rho+ rho- pi0 PHSP; +0.000005 rho+ rho- eta PHSP; +0.000002 rho+ rho- eta' PHSP; +0.000010 rho0 rho+ pi- PHSP; +0.000010 omega rho+ pi- PHSP; +0.000002 rho0 pi+ pi- pi0 PHSP; +0.000001 rho0 pi+ pi- eta PHSP; +0.000001 rho0 pi+ pi- eta' PHSP; +0.000002 rho0 pi0 pi0 pi0 PHSP; +0.000001 rho0 pi0 eta pi0 PHSP; +0.000001 rho0 pi0 eta' pi0 PHSP; +0.000002 omega pi+ pi- pi0 PHSP; +0.000001 omega pi+ pi- eta PHSP; +0.000001 omega pi+ pi- eta' PHSP; +0.000002 omega pi0 pi0 pi0 PHSP; +0.000001 omega pi0 eta pi0 PHSP; +0.000001 omega pi0 eta' pi0 PHSP; +0.000002 rho+ pi- pi+ pi- PHSP; +0.000002 rho+ pi- pi0 pi0 PHSP; +0.000001 rho+ pi- pi0 eta PHSP; +0.000001 rho+ pi- pi0 eta' PHSP; +0.000002 rho- pi+ pi+ pi- PHSP; +0.000002 rho- pi+ pi0 pi0 PHSP; +0.000001 rho- pi+ pi0 eta PHSP; +0.000001 rho- pi+ pi0 eta' PHSP; +0.000001 pi+ pi- pi+ pi- pi0 PHSP; +0.0000005 pi+ pi- pi+ pi- eta PHSP; +0.0000002 pi+ pi- pi+ pi- eta' PHSP; +0.000001 pi+ pi- pi0 pi0 pi0 PHSP; +0.0000005 pi+ pi- pi0 pi0 eta PHSP; +0.0000002 pi+ pi- pi0 pi0 eta' PHSP; +0.0000005 pi0 pi0 pi0 pi0 pi0 PHSP; +0.0000002 pi0 pi0 pi0 pi0 eta PHSP; +0.0000001 pi0 pi0 pi0 pi0 eta' PHSP; +0.000010 a_1+ rho- PHSP; +0.000010 a_1- rho+ PHSP; +0.000010 a_10 rho0 PHSP; +0.000010 a_10 omega PHSP; +0.000010 a_1+ pi- pi0 PHSP; +0.000005 a_1+ pi- eta PHSP; +0.000002 a_1+ pi- eta' PHSP; +0.000010 a_10 pi+ pi- PHSP; +0.000010 a_10 pi0 pi0 PHSP; +0.000005 a_10 pi0 eta PHSP; +0.000002 a_10 pi0 eta' PHSP; +0.000010 a_1- pi+ pi0 PHSP; +0.000005 a_1- pi+ eta PHSP; +0.000002 a_1- pi+ eta' PHSP; +0.000010 rho+ f_0 pi- PHSP; +0.000010 rho- f_0 pi+ PHSP; +0.000010 rho0 f_0 pi0 PHSP; +0.000005 rho0 f_0 eta PHSP; +0.000002 rho0 f_0 eta' PHSP; +0.000010 omega f_0 pi0 PHSP; +0.000010 rho+ a_00 pi- PHSP; +0.000010 rho+ a_0- pi0 PHSP; +0.000005 rho+ a_0- eta PHSP; +0.000002 rho+ a_0- eta' PHSP; +0.000010 rho0 a_0+ pi- PHSP; +0.000010 rho0 a_0- pi+ PHSP; +0.000010 rho0 a_00 pi0 PHSP; +0.000005 rho0 a_00 eta PHSP; +0.000002 rho0 a_00 eta' PHSP; +0.000010 rho- a_00 pi+ PHSP; +0.000010 rho- a_0+ pi0 PHSP; +0.000005 rho- a_0+ eta PHSP; +0.000002 rho- a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi0 PHSP; +0.000001 f_0 pi+ pi- eta PHSP; +0.000001 f_0 pi+ pi- eta' PHSP; +0.000002 f_0 pi0 pi0 pi0 PHSP; +0.000001 f_0 pi0 pi0 eta PHSP; +0.000001 f_0 pi0 pi0 eta' PHSP; +0.000001 a_00 pi+ pi- pi0 PHSP; +0.000001 a_00 pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi+ pi- PHSP; +0.000001 a_0+ pi- pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi- PHSP; +0.000001 a_0- pi+ pi0 pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho0 K*+ pi- PHSP; +0.000010 rho- K*+ pi0 PHSP; +0.000005 rho- K*+ eta PHSP; +0.000002 rho- K*+ eta' PHSP; +0.000010 rho0 K*0 pi0 PHSP; +0.000005 rho0 K*0 eta PHSP; +0.000002 rho0 K*0 eta' PHSP; +0.000010 rho- K*0 pi+ PHSP; +0.000010 rho+ K*0 pi- PHSP; +0.000010 omega K*+ pi- PHSP; +0.000010 omega K*0 pi0 PHSP; +0.000005 omega K*0 eta PHSP; +0.000002 omega K*0 eta' PHSP; +0.000010 pi+ pi- K*+ pi- PHSP; +0.000010 pi- pi0 K*+ pi0 PHSP; +0.000005 pi- pi0 K*+ eta PHSP; +0.000002 pi- pi0 K*+ eta' PHSP; +0.000010 pi+ pi- K*0 pi0 PHSP; +0.000005 pi+ pi- K*0 eta PHSP; +0.000002 pi+ pi- K*0 eta' PHSP; +0.000010 pi0 pi0 K*0 pi0 PHSP; +0.000005 pi0 pi0 K*0 eta PHSP; +0.000002 pi0 pi0 K*0 eta' PHSP; +0.000010 rho+ K+ pi- pi- PHSP; +0.000010 rho0 K+ pi- pi0 PHSP; +0.000005 rho0 K+ pi- eta PHSP; +0.000002 rho0 K+ pi- eta' PHSP; +0.000010 rho- K+ pi+ pi- PHSP; +0.000010 rho- K+ pi0 pi0 PHSP; +0.000005 rho- K+ pi0 eta PHSP; +0.000002 rho- K+ pi0 eta' PHSP; +0.000010 rho0 K0 pi+ pi- PHSP; +0.000010 rho0 K0 pi0 pi0 PHSP; +0.000005 rho0 K0 pi0 eta PHSP; +0.000002 rho0 K0 pi0 eta' PHSP; +0.000010 rho+ K0 pi- pi0 PHSP; +0.000005 rho+ K0 pi- eta PHSP; +0.000002 rho+ K0 pi- eta' PHSP; +0.000010 rho- K0 pi+ pi0 PHSP; +0.000005 rho- K0 pi+ eta PHSP; +0.000002 rho- K0 pi+ eta' PHSP; +0.000010 omega K+ pi- pi0 PHSP; +0.000005 omega K+ pi- eta PHSP; +0.000002 omega K+ pi- eta' PHSP; +0.000010 omega K0 pi+ pi- PHSP; +0.000010 omega K0 pi0 pi0 PHSP; +0.000005 omega K0 pi0 eta PHSP; +0.000002 omega K0 pi0 eta' PHSP; +0.000002 pi+ pi- pi- K+ pi0 PHSP; +0.000001 pi+ pi- pi- K+ eta PHSP; +0.000001 pi+ pi- pi- K+ eta' PHSP; +0.000002 pi0 pi0 pi- K+ pi0 PHSP; +0.000001 pi0 pi0 pi- K+ eta PHSP; +0.000001 pi0 pi0 pi- K+ eta' PHSP; +0.000002 pi+ pi- pi+ K0 pi- PHSP; +0.000002 pi+ pi- pi0 K0 pi0 PHSP; +0.000001 pi+ pi- pi0 K0 eta PHSP; +0.000001 pi+ pi- pi0 K0 eta' PHSP; +0.000002 pi0 pi0 pi0 K0 pi0 PHSP; +0.000001 pi0 pi0 pi0 K0 eta PHSP; +0.000001 pi0 pi0 pi0 K0 eta' PHSP; +0.000010 rho+ K_0*0 pi- PHSP; +0.000010 rho0 K_0*0 pi0 PHSP; +0.000005 rho0 K_0*0 eta PHSP; +0.000002 rho0 K_0*0 eta' PHSP; +0.000010 rho- K_0*0 pi+ PHSP; +0.000010 rho- K_0*+ pi0 PHSP; +0.000005 rho- K_0*+ eta PHSP; +0.000002 rho- K_0*+ eta' PHSP; +0.000010 rho0 K_0*+ pi- PHSP; +0.000010 pi+ pi- K_0*+ pi- PHSP; +0.000010 pi- pi0 K_0*+ pi0 PHSP; +0.000005 pi- pi0 K_0*+ eta PHSP; +0.000002 pi- pi0 K_0*+ eta' PHSP; +0.000010 pi+ pi- K_0*0 pi0 PHSP; +0.000005 pi+ pi- K_0*0 eta PHSP; +0.000002 pi+ pi- K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*0 pi0 PHSP; +0.000005 pi0 pi0 K_0*0 eta PHSP; +0.000005 pi0 pi0 K_0*0 eta' PHSP; +0.000010 K*+ f_0 pi- PHSP; +0.000010 K*0 f_0 pi0 PHSP; +0.000005 K*0 f_0 eta PHSP; +0.000002 K*0 f_0 eta' PHSP; +0.000010 a_1+ K0 pi- PHSP; +0.000020 a_10 K*0 PHSP; +0.000010 a_10 K+ pi- PHSP; +0.000010 a_10 K0 pi0 PHSP; +0.000020 a_1- K*+ PHSP; +0.000010 a_1- K+ pi0 PHSP; +0.000010 a_1- K0 pi+ PHSP; +0.000005 K*+ a_00 pi- PHSP; +0.000005 K*+ a_0- pi0 PHSP; +0.000002 K*+ a_0- eta PHSP; +0.000001 K*+ a_0- eta' PHSP; +0.000005 K*0 a_0+ pi- PHSP; +0.000005 K*0 a_00 pi0 PHSP; +0.000002 K*0 a_00 eta PHSP; +0.000001 K*0 a_00 eta' PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*- K*0 pi+ PHSP; +0.000001 K*+ anti-K*0 pi- PHSP; +0.000001 K*- K*+ pi0 PHSP; +0.0000005 K*- K*+ eta PHSP; +0.0000002 K*- K*+ eta' PHSP; +0.000001 K*0 anti-K*0 pi0 PHSP; +0.0000005 K*0 anti-K*0 eta PHSP; +0.0000002 K*0 anti-K*0 eta' PHSP; +0.000001 phi rho+ pi- PHSP; +0.000001 phi rho- pi+ PHSP; +0.000001 phi rho0 pi0 PHSP; +0.0000005 phi rho0 eta PHSP; +0.0000002 phi rho0 eta' PHSP; +0.000001 phi omega pi0 PHSP; +0.000001 phi f_0 pi0 PHSP; +0.000001 phi pi+ pi- pi0 PHSP; +0.0000005 phi pi+ pi- eta PHSP; +0.0000002 phi pi+ pi- eta' PHSP; +0.000001 phi pi0 pi0 pi0 PHSP; +0.0000005 phi pi0 pi0 eta PHSP; +0.0000002 phi pi0 pi0 eta' PHSP; +0.000001 K0 K- rho0 pi+ PHSP; +0.000001 K0 K- rho+ pi0 PHSP; +0.0000005 K0 K- rho+ eta PHSP; +0.0000002 K0 K- rho+ eta' PHSP; +0.000001 K0 K- omega pi+ PHSP; +0.000001 K0 K- f_0 pi+ PHSP; +0.000001 K+ K- rho+ pi- PHSP; +0.000001 K+ K- rho- pi+ PHSP; +0.000001 K+ K- rho0 pi0 PHSP; +0.0000005 K+ K- rho0 eta PHSP; +0.0000002 K+ K- rho0 eta' PHSP; +0.000001 K+ K- omega pi0 PHSP; +0.0000005 K+ K- omega eta PHSP; +0.0000002 K+ K- omega eta' PHSP; +0.000001 K+ K- f_0 pi0 PHSP; +0.000001 K0 anti-K0 rho+ pi- PHSP; +0.000001 K0 anti-K0 rho- pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi0 PHSP; +0.0000005 K0 anti-K0 rho0 eta PHSP; +0.0000002 K0 anti-K0 rho0 eta' PHSP; +0.000001 K0 anti-K0 omega pi0 PHSP; +0.000001 K0 anti-K0 f_0 pi0 PHSP; +0.000001 anti-K0 K+ rho0 pi- PHSP; +0.000001 anti-K0 K+ rho- pi0 PHSP; +0.0000005 anti-K0 K+ rho- eta PHSP; +0.0000002 anti-K0 K+ rho- eta' PHSP; +0.000001 anti-K0 K+ omega pi- PHSP; +0.000001 anti-K0 K+ f_0 pi- PHSP; +0.0000002 K0 K- pi+ pi+ pi- PHSP; +0.0000002 K0 K- pi+ pi0 pi0 PHSP; +0.0000001 K0 K- pi+ pi0 eta PHSP; +0.0000001 K0 K- pi+ pi0 eta' PHSP; +0.0000002 K+ K- pi+ pi- pi0 PHSP; +0.0000001 K+ K- pi+ pi- eta PHSP; +0.0000001 K+ K- pi+ pi- eta' PHSP; +0.0000002 K+ K- pi0 pi0 pi0 PHSP; +0.0000001 K+ K- pi0 pi0 eta PHSP; +0.0000001 K+ K- pi0 pi0 eta' PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi0 PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta PHSP; +0.0000001 K0 anti-K0 pi+ pi- eta' PHSP; +0.0000002 K0 anti-K0 pi0 pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta PHSP; +0.0000001 K0 anti-K0 pi0 pi0 eta' PHSP; +0.0000002 anti-K0 K+ pi- pi+ pi- PHSP; +0.0000002 anti-K0 K+ pi- pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta PHSP; +0.0000001 anti-K0 K+ pi- pi0 eta' PHSP; +0.000001 K*0 K- pi+ pi0 PHSP; +0.0000005 K*0 K- pi+ eta PHSP; +0.0000002 K*0 K- pi+ eta' PHSP; +0.000001 K*- K0 pi+ pi0 PHSP; +0.0000005 K*- K0 pi+ eta PHSP; +0.0000002 K*- K0 pi+ eta' PHSP; +0.000001 K*+ K- pi+ pi- PHSP; +0.000001 K*+ K- pi0 pi0 PHSP; +0.0000005 K*+ K- pi0 eta PHSP; +0.0000002 K*+ K- pi0 eta' PHSP; +0.000001 K*- K+ pi+ pi- PHSP; +0.000001 K*- K+ pi0 pi0 PHSP; +0.0000005 K*- K+ pi0 eta PHSP; +0.0000002 K*- K+ pi0 eta' PHSP; +0.000001 K*0 anti-K0 pi+ pi- PHSP; +0.000001 K*0 anti-K0 pi0 pi0 PHSP; +0.0000005 K*0 anti-K0 pi0 eta PHSP; +0.0000002 K*0 anti-K0 pi0 eta' PHSP; +0.000001 K0 anti-K*0 pi+ pi- PHSP; +0.000001 K0 anti-K*0 pi0 pi0 PHSP; +0.0000005 K0 anti-K*0 pi0 eta PHSP; +0.0000002 K0 anti-K*0 pi0 eta' PHSP; +0.000001 K+ anti-K*0 pi- pi0 PHSP; +0.0000005 K+ anti-K*0 pi- eta PHSP; +0.0000002 K+ anti-K*0 pi- eta' PHSP; +0.000001 K*+ anti-K0 pi- pi0 PHSP; +0.0000005 K*+ anti-K0 pi- eta PHSP; +0.0000002 K*+ anti-K0 pi- eta' PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*+ pi- PHSP; +0.000010 phi K*0 pi0 PHSP; +0.000005 phi K*0 eta PHSP; +0.000002 phi K*0 eta' PHSP; +0.000010 phi K+ rho- PHSP; +0.000010 phi K0 rho0 PHSP; +0.000010 phi K0 omega PHSP; +0.000010 phi K0 f_0 PHSP; +0.000010 phi K0 pi+ pi- PHSP; +0.000010 phi K0 pi0 pi0 PHSP; +0.000005 phi K0 pi0 eta PHSP; +0.000002 phi K0 pi0 eta' PHSP; +0.000010 phi K+ pi- pi0 PHSP; +0.000005 phi K+ pi- eta PHSP; +0.000002 phi K+ pi- eta' PHSP; +0.000010 K- K+ K*+ pi- PHSP; +0.000010 K+ K*- K+ pi- PHSP; +0.000010 K+ K*0 anti-K0 pi- PHSP; +0.000010 K+ K0 anti-K*0 pi- PHSP; +0.000010 K0 K*+ anti-K0 pi- PHSP; +0.000010 K- K+ K+ rho- PHSP; +0.000010 K- K+ K0 rho0 PHSP; +0.000010 K- K+ K0 omega PHSP; +0.000010 K- K+ K0 f_0 PHSP; +0.000010 K+ K- K+ pi- pi0 PHSP; +0.000005 K+ K- K+ pi- eta PHSP; +0.000002 K+ K- K+ pi- eta' PHSP; +0.000010 K+ K- K0 pi+ pi- PHSP; +0.000010 K+ K- K0 pi0 pi0 PHSP; +0.000005 K+ K- K0 pi0 eta PHSP; +0.000005 K+ K- K0 pi0 eta' PHSP; +0.000010 K0 anti-K0 K+ pi- pi0 PHSP; +0.000005 K0 anti-K0 K+ pi- eta PHSP; +0.000002 K0 anti-K0 K+ pi- eta' PHSP; +0.000010 K0 anti-K0 K0 pi+ pi- PHSP; +0.000010 K0 anti-K0 K0 pi0 pi0 PHSP; +0.000005 K0 anti-K0 K0 pi0 eta PHSP; +0.000002 K0 anti-K0 K0 pi0 eta' PHSP; +0.000010 phi K_0*+ pi- PHSP; +0.000010 phi K_0*0 pi0 PHSP; +0.000010 K+ K- K_0*+ pi- PHSP; +0.000010 K+ K- K_0*0 pi0 PHSP; +0.000005 K+ K- K_0*0 eta PHSP; +0.000002 K+ K- K_0*0 eta' PHSP; +0.000010 K+ K+ K_0*- pi- PHSP; +0.000010 K+ anti-K_0*0 K0 pi- PHSP; +0.000010 K+ K_0*0 anti-K0 pi- PHSP; +0.000010 K0 anti-K0 K_0*+ pi- PHSP; +0.000010 K0 anti-K0 K_0*0 pi0 PHSP; +0.000005 K0 anti-K0 K_0*0 eta PHSP; +0.000002 K0 anti-K0 K_0*0 eta' PHSP; +0.000010 K0 K0 anti-K_0*0 pi0 PHSP; +0.000005 K0 K0 anti-K_0*0 eta PHSP; +0.000002 K0 K0 anti-K_0*0 eta' PHSP; +0.000002 phi K'_1+ pi- PHSP; +0.000002 phi K'_10 pi0 PHSP; +0.000001 phi K'_10 eta PHSP; +0.000001 phi K'_10 eta' PHSP; +0.000002 K- K+ K'_1+ pi- PHSP; +0.000002 K- K+ K'_10 pi0 PHSP; +0.000001 K- K+ K'_10 eta PHSP; +0.000001 K- K+ K'_10 eta' PHSP; +0.000002 K+ K+ K'_1- pi- PHSP; +0.000002 K0 anti-K0 K'_10 pi0 PHSP; +0.000001 K0 anti-K0 K'_10 eta PHSP; +0.000001 K0 anti-K0 K'_10 eta' PHSP; +0.000002 K0 K0 anti-K'_10 pi0 PHSP; +0.000001 K0 K0 anti-K'_10 eta PHSP; +0.000001 K0 K0 anti-K'_10 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004100 phi phi K0 PHSP; #[Reconstructed PDG2011] +0.0000001 phi phi pi0 PHSP; +0.000001 phi K+ K- K0 PHSP; +0.000001 phi K0 anti-K0 K0 PHSP; +0.0000001 phi K+ K- pi0 PHSP; +0.0000001 phi K0 anti-K0 pi0 PHSP; +0.0000001 phi anti-K0 K+ pi- PHSP; +0.0000001 phi K0 K- pi+ PHSP; +0.0000001 K+ K- K+ K- K0 PHSP; +0.0000001 K0 anti-K0 K+ K- K0 PHSP; +0.0000001 K+ K- K+ K- pi0 PHSP; +0.0000001 K+ K- K0 anti-K0 pi0 PHSP; +0.0000001 K+ K- K+ anti-K0 pi- PHSP; +0.0000001 K+ K- K0 K- pi+ PHSP; +0.0000001 K0 anti-K0 K0 anti-K0 pi0 PHSP; +0.0000001 K0 anti-K0 anti-K0 K+ pi- PHSP; +0.0000001 K0 anti-K0 K0 K- pi+ PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*0 PHSP; +0.000001 phi K+ K- K*0 PHSP; +0.000001 phi K0 anti-K0 K*0 PHSP; +0.000001 phi K0 K+ K*- PHSP; +0.000001 phi K0 K0 anti-K*0 PHSP; +0.0000001 phi K+ K- K+ pi- PHSP; +0.0000001 phi K+ K- K0 pi0 PHSP; +0.0000001 phi K0 anti-K0 K+ pi- PHSP; +0.0000001 phi K0 anti-K0 K0 pi0 PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_10 a_10 PHSP; +0.000050 a_1+ a_1- PHSP; +# +# B -> cc= s +0.000435500 J/psi K_S0 SVS; #[Reconstructed PDG2011] +0.000435500 J/psi K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.001330000 J/psi K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000017600 J/psi pi0 SVS; #[Reconstructed PDG2011] +0.000027000 J/psi rho0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.00003 J/psi omega SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.000000000 J/psi K+ pi- PHSP; #[Reconstructed PDG2011] +0.0001 J/psi K0 pi0 PHSP; +#rl0.0007 J/psi K0 pi- pi+ PHSP; +#rl0.00035 J/psi K0 pi0 pi0 PHSP; +#rl0.00035 J/psi K+ pi- pi0 PHSP; +0.001300000 J/psi K_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.0001 J/psi K'_10 SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*0 PHSP; +0.000094000 J/psi phi K0 PHSP; #[Reconstructed PDG2011] +# +0.000310000 psi(2S) K_S0 SVS; #[Reconstructed PDG2011] +0.000310000 psi(2S) K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000610000 psi(2S) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] + +0.0004 psi(2S) K+ pi- PHSP; +0.0002 psi(2S) K0 pi0 PHSP; +0.0002 psi(2S) K0 pi- pi+ PHSP; +0.0001 psi(2S) K0 pi0 pi0 PHSP; +0.0001 psi(2S) K+ pi- pi0 PHSP; +0.0004 psi(2S) K_10 PHSP; +# +0.000445000 eta_c K_S0 PHSP; #[Reconstructed PDG2011] +0.000445000 eta_c K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.000610000 K*0 eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K+ pi- PHSP; +0.0001 eta_c K0 pi0 PHSP; +0.0002 eta_c K0 pi- pi+ PHSP; +0.0001 eta_c K0 pi0 pi0 PHSP; +0.0001 eta_c K+ pi- pi0 PHSP; +# +0.00024 eta_c(2S) K_S0 PHSP; +0.00024 eta_c(2S) K_L0 PHSP; +# +# +0.00066 K*0T eta_c(2S) SVS; +0.00008 eta_c(2S) K+ pi- PHSP; +0.00005 eta_c(2S) K0 pi0 PHSP; +0.00008 eta_c(2S) K0 pi- pi+ PHSP; +0.00005 eta_c(2S) K0 pi0 pi0 PHSP; +0.00005 eta_c(2S) K+ pi- pi0 PHSP; +# +0.000070000 chi_c0 K_S0 PHSP; #[Reconstructed PDG2011] +0.000070000 chi_c0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# +0.0003 K*0 chi_c0 SVS; +0.0002 chi_c0 K+ pi- PHSP; +0.0001 chi_c0 K0 pi0 PHSP; +0.0002 chi_c0 K0 pi- pi+ PHSP; +0.0001 chi_c0 K0 pi0 pi0 PHSP; +0.0001 chi_c0 K+ pi- pi0 PHSP; +# +0.000195000 chi_c1 K_S0 SVS; #[Reconstructed PDG2011] +0.000195000 chi_c1 K_L0 SVS; #[Reconstructed PDG2011] +# +# +0.000222000 chi_c1 K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 chi_c1 K+ pi- PHSP; +0.0002 chi_c1 K0 pi0 PHSP; +0.0004 chi_c1 K0 pi- pi+ PHSP; +0.0002 chi_c1 K0 pi0 pi0 PHSP; +0.0002 chi_c1 K+ pi- pi0 PHSP; +# +0.00005 chi_c2 K_S0 STS; +0.00005 chi_c2 K_L0 STS; +# +# +0.00003 chi_c2 K*0 PHSP; +0.0002 chi_c2 K+ pi- PHSP; +0.0001 chi_c2 K0 pi0 PHSP; +0.0002 chi_c2 K0 pi- pi+ PHSP; +0.0001 chi_c2 K0 pi0 pi0 PHSP; +0.0001 chi_c2 K+ pi- pi0 PHSP; +# +0.00024 psi(3770) K_S0 SVS; +0.00024 psi(3770) K_L0 SVS; +# +# +0.00048 psi(3770) K*0 SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; +0.00014 psi(3770) K+ pi- PHSP; +0.00014 psi(3770) K0 pi0 PHSP; +0.00014 psi(3770) K0 pi- pi+ PHSP; +0.00007 psi(3770) K0 pi0 pi0 PHSP; +0.00007 psi(3770) K+ pi- pi0 PHSP; +0.00029 psi(3770) K_10 PHSP; +# +### ALREADY Included above 0.0000 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# +# +# b-> c (dc=) +# +0.000211000 D- D+ PHSP; #[Reconstructed PDG2011] +# See Ref [B1] for the next 3: +0.000305 D*- D+ SVS; +0.000610000 D*+ D- SVS; #[Reconstructed PDG2011] +0.000820000 D*- D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] +# +# b -> c (sc=) --> D Ds X Sum = 10% +# +0.007200000 D- D_s+ PHSP; #[Reconstructed PDG2011] +0.008000000 D*- D_s+ SVS; #[Reconstructed PDG2011] +0.007400000 D_s*+ D- SVS; #[Reconstructed PDG2011] +0.017700000 D_s*+ D*- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +0.0006 D'_1- D_s+ SVS; +0.0012 D'_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_1- D_s+ SVS; +0.0024 D_1- D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*- D_s+ STS; +0.0040 D_2*- D_s*+ PHSP; +# +0.0018 D_s+ D- pi0 PHSP; +0.0037 D_s+ anti-D0 pi- PHSP; +0.0018 D_s*+ D- pi0 PHSP; +0.0037 D_s*+ anti-D0 pi- PHSP; +0.0030 D_s+ D- pi- pi+ PHSP; +0.0022 D_s+ D- pi0 pi0 PHSP; +0.0022 D_s+ anti-D0 pi- pi0 PHSP; +0.0030 D_s*+ D- pi- pi+ PHSP; +0.0022 D_s*+ D- pi0 pi0 PHSP; +0.0022 D_s*+ anti-D0 pi- pi0 PHSP; +# +# b -> c (sc=) --> D D= K X Sum = 8% +# Update: Ref. [B1] +# October 26, 2004 Lange -per breco awg +# External W-emission amplitude +0.001700000 D- D0 K+ PHSP; #[Reconstructed PDG2011] +0.004600000 D- D*0 K+ PHSP; #[Reconstructed PDG2011] +0.003100000 D*- D0 K+ PHSP; #[Reconstructed PDG2011] +0.011800000 D*- D*0 K+ PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.0015 D- D+ K0 PHSP; +0.0018 D*- D+ K0 PHSP; +0.0047 D- D*+ K0 PHSP; +0.007800000 D*- D*+ K0 PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D0 anti-D0 K0 PHSP; +0.0005 D*0 anti-D0 K0 PHSP; +0.0015 D0 anti-D*0 K0 PHSP; +0.0015 D*0 anti-D*0 K0 PHSP; +########## +# K* modes +########### +0.0025 D- D0 K*+ PHSP; +0.0025 D*- D0 K*+ PHSP; +0.0025 D- D*0 K*+ PHSP; +0.0050 D*- D*0 K*+ PHSP; +# +0.0025 D- D+ K*0 PHSP; +0.0025 D*- D+ K*0 PHSP; +0.0025 D- D*+ K*0 PHSP; +0.0050 D*- D*+ K*0 PHSP; +# +0.0005 D0 anti-D0 K*0 PHSP; +0.0005 D0 anti-D*0 K*0 PHSP; +0.0005 D*0 anti-D0 K*0 PHSP; +0.0010 D*0 anti-D*0 K*0 PHSP; +# +# B -> D(*) X Exclusive modes +# +0.002760000 D*- pi+ SVS; #[Reconstructed PDG2011] +0.002680000 D- pi+ PHSP; #[Reconstructed PDG2011] +0.007110000 rho+ D- SVS; #[Reconstructed PDG2011] +# +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.006800000 rho+ D*- SVV_HELAMP 0.317 0.19 0.936 0.0 0.152 1.47; #[Reconstructed PDG2011] +0.0005 D- pi+ pi0 PHSP; +0.008200000 D*- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000840000 anti-D0 pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000620000 anti-D*0 pi- pi+ PHSP; #[Reconstructed PDG2011] +0.0005 anti-D*0 pi0 pi0 PHSP; +# +# D a1 updated Ref. [B1] +0.006000000 a_1+ D- SVS; #[Reconstructed PDG2011] +0.000000000 D- rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.0011 D- rho+ pi0 PHSP; +0.002000000 D- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0010 D- pi0 pi+ pi0 PHSP; +0.0010 anti-D0 pi- pi+ pi0 PHSP; +0.0001 anti-D0 pi0 pi0 pi0 PHSP; +# +# SVV_HELAMP for D* a1 taken from factorization. Recommandation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1] +# October 26, 2004 Lange update +# +0.013000000 D*- a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] +# +0.005700000 D*- rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.0010 D*- rho+ pi0 PHSP; +0.0000 D*- pi- pi+ pi+ PHSP; +0.0010 D*- pi0 pi+ pi0 PHSP; +0.0010 anti-D*0 pi- pi+ pi0 PHSP; +0.0001 anti-D*0 pi0 pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# +0.0001 D_1- pi+ SVS; +0.0001 D'_1- pi+ SVS; +0.00006 D_0*- pi+ PHSP; +0.000215 D_2*- pi+ STS; +0.0004 D_1- rho+ PHSP; +0.0013 D'_1- rho+ PHSP; +0.0022 D_2*- rho+ PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref. [B1]: +# +0.000214000 D*- K+ SVS; #[Reconstructed PDG2011] +0.000200000 D- K+ PHSP; #[Reconstructed PDG2011] +0.000330000 D*- K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +0.000450000 K*+ D- SVS; #[Reconstructed PDG2011] +#more DK modes - October 26, 2004 -Lange +0.000036 anti-D*0 anti-K0 SVS; +0.000052 anti-D0 anti-K0 PHSP; +0.000042000 K*0 anti-D0 SVS; #[Reconstructed PDG2011] +0.00001 K*0 D0 SVS; +0.00004 anti-D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +0.00001 D*0 K*0 SVV_HELAMP 1. 0. 1. 0. 1. 0.; +# +# +# Color-suppressed modes. Br's are expectations from +# Phys. Rev. D57 (1998), 5363-5369, except for the eta' modes, which are set +# equal to the eta modes. SVV_HELAMP parameters are the same as in D*0 rho-, +# with phases set to 0. Recommendation http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/169.html: +# update: See Ref [B1]: +# further update October 26, 2004 Lange +# +0.000261000 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000170000 anti-D*0 pi0 SVS; #[Reconstructed PDG2011] +# +0.000320000 rho0 anti-D0 SVS; #[Reconstructed PDG2011] +0.00029 anti-D*0 rho0 SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; +# +0.000202000 anti-D0 eta PHSP; #[Reconstructed PDG2011] +0.000200000 anti-D*0 eta SVS; #[Reconstructed PDG2011] +# +0.000125 anti-D0 eta' PHSP; +0.000123000 anti-D*0 eta' SVS; #[Reconstructed PDG2011] +# +0.000259000 omega anti-D0 SVS; #[Reconstructed PDG2011] +0.000330000 anti-D*0 omega SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +# +# PR LHCb : add ppbar mode +0.0000001 p+ anti-p- PHSP; +# +#October 26, 2004 - Lange +0.0016 D_s0*+ D- PHSP; +0.0015 D*- D_s0*+ SVS; +0.003500000 D_s1+ D- SVS; #[Reconstructed PDG2011] +0.009300000 D*- D_s1+ SVV_HELAMP 0.4904 0. 0.7204 0. 0.4904 0.; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000880000 D- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.001290000 D*- K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002800000 D- omega pi+ PHSP; #[Reconstructed PDG2011] +0.002890000 D*- omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000490000 D- K0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D*- K0 pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00043 D'_s1+ D- PHSP; +0.00083 D'_s1+ D*- PHSP; +#### Already included above 0.0023 D_s1+ D*- PHSP; +# +# Lam_c X / Sigma_c X 4.0 % +# +#0.01000 anti-cd_0 ud_0 PYTHIA 23; +#0.03000 anti-cd_1 ud_1 PYTHIA 23; +0.010520663 anti-cd_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.021041421 anti-cd_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Xi_c X 2.5% +# +#0.00600 anti-cs_0 ud_0 PYTHIA 23; +#0.01800 anti-cs_1 ud_1 PYTHIA 23; +0.002869298 anti-cs_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.005738595 anti-cs_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# +0.244370327511642 u anti-d anti-c d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0416566238352035 u anti-d anti-c d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0190171881574736 u anti-d anti-c d PYTHIA 13; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0163004338716802 u anti-s anti-c d PYTHIA 13; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.000815007917122011 u anti-c anti-d d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0670128147455628 u anti-c anti-s d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00543350762475084 c anti-s anti-c d PYTHIA 13; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00271675428579336 c anti-d anti-c d PYTHIA 13; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00362233841650057 u anti-d anti-u d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0018564128137567 c anti-s anti-u d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0000634124391340456 u anti-u anti-d d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0000814922701893156 d anti-d anti-d d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00199223263284831 s anti-s anti-d d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.0016300167810799 u anti-u anti-s d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00135837714289669 d anti-d anti-s d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay +0.00514324993273845 s anti-s anti-s d PYTHIA 48; #[Reconstructed PDG2011] # Changed by JB rescaled by same factor as SL e decay + +0.017600000 D*- pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 D*- pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 D_s- pi+ K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000052000 anti-D0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006000 D0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000036000 anti-D*0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002700000 D*0 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 eta_c K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000871000 J/psi K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 J/psi omega K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009500 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019000 J/psi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000460000 J/psi K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 J/psi K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 J/psi K*+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000660000 J/psi K*0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 K0 D0 anti-D0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000620000 psi(2S) K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 chi_c0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 chi_c1 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 chi_c1 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000158000 chi_c1 K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 eta K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009600 eta K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000016000 omega K_0*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 omega K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004700 K0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002700 f_2 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001400 f_0 K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007500 K_2*0 phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 eta K0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004600 K+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000019500 K0 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 K+ pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012400 K_2*0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000860 rho0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002660 p+ anti-p- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001240 p+ anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003140 p+ anti-Lambda0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-Lambda0 Lambda0 K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-Lambda0 Lambda0 K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 anti-Lambda0 Lambda0 D0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000114000 anti-D0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 D_s- anti-Lambda0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000103000 anti-D*0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 D*- p+ anti-n0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000338000 D- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000500000 D*- p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-Lambda_c- p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000630000 anti-Lambda_c- p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 anti-Sigma_c*-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 anti-Sigma_c0 p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 anti-Sigma_c-- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# +# +Decay B- +# Updated to PDG 2008 +# b -> c semileptonic +# +0.057 D*0 e- anti-nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.0223 D0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.00648476821256864 D_10 e- anti-nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00389086092754118 D_0*0 e- anti-nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00113483443719951 D'_10 e- anti-nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00291814569565589 D_2*0 e- anti-nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00988927152416717 D*+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000486357615942648 D*0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +# covered by other decays +0.0000 D+ pi- e- anti-nu_e PHOTOS GOITY_ROBERTS; +0.00162119205314216 D0 pi0 e- anti-nu_e PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +# +0.057 D*0 mu- anti-nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.0223 D0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.00648476821256864 D_10 mu- anti-nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00389086092754118 D_0*0 mu- anti-nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00113483443719951 D'_10 mu- anti-nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00291814569565589 D_2*0 mu- anti-nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00988927152416717 D*+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000486357615942648 D*0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +0.0000 D+ pi- mu- anti-nu_mu PHOTOS GOITY_ROBERTS; +0.00162119205314216 D0 pi0 mu- anti-nu_mu PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +# +# b -> c tau nu +# +0.0188 D*0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0077 D0 tau- anti-nu_tau ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.00210754966908481 D_10 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00210754966908481 D_0*0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00324238410628432 D'_10 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00324238410628432 D_2*0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +# +# b -> u l nu +# +# NOTE: Do NOT CHANGE any BFs without using the corresponding set of +# hybrid weights (and vice versa). + +0.000124831788091946 pi0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0000599841059662599 eta e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000207512582802196 rho0 e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000186437086111348 omega e- anti-nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000437721854348383 eta' e- anti-nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.000000 D(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.000000 D*(2S)0 e- anti-nu_e PHOTOS ISGW2; +0.00315808211952093 Xu0 e- anti-nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; #JB rescaled to add up to PDG inc SL +# +0.000124831788091946 pi0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0000599841059662599 eta mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000207512582802196 rho0 mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000186437086111348 omega mu- anti-nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000437721854348383 eta' mu- anti-nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.000000 D(2S)0 mu- anti-nu_mu PHOTOS ISGW2; +0.000000 D*(2S)0 mu- anti-nu_mu PHOTOS ISGW2; +0.00315808211952093 Xu0 mu- anti-nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; #JB rescaled to add up to PDG inc SL +# +0.0000486357615942648 pi0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000194543046377059 eta tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000680900662319707 rho0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000680900662319707 omega tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000291814569565589 eta' tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000745748344445393 a_10 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000437721854348383 b_10 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000648476821256864 a_00 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000324238410628432 f_0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000324238410628432 f'_0 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000372874172222697 f_1 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000372874172222697 f'_1 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000210754966908481 h_1 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000210754966908481 h'_1 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000324238410628432 f_2 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000324238410628432 f'_2 tau- anti-nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.000000 D(2S)0 tau- anti-nu_tau ISGW2; +0.000000 D*(2S)0 tau- anti-nu_tau ISGW2; +# +# +# +# b->u hadronic +# Ref. [B1]: +# +0.000016000 D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000020 D_s*- pi0 SVS; +# +0.000028 rho0 D_s- SVS; +0.000028 D_s*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +# +# b-> s gamma +# +0.000042100 K*- gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_1- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_1- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*- gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*- gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 anti-Xsu gamma BTOXSGAMMA 2 ; +# +0.000000550 K- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*- e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 anti-Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*- mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 anti-Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*- tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 anti-Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +# b -> l nu +# +0.00018000 tau- anti-nu_tau SLN; #[Reconstructed PDG2011] +0.000000 mu- anti-nu_mu PHOTOS SLN; +0.000000 e- anti-nu_e PHOTOS SLN; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# Exclusive hadronic b->u +# +0.000026 pi- pi0 pi0 CB3PI-P00 alpha; +0.000000 pi- pi- pi+ CB3PI-MPP alpha; +#### +0.000004070 eta pi- PHSP; #[Reconstructed PDG2011] +0.000002330 eta K- PHSP; #[Reconstructed PDG2011] +0.000019300 K*- eta SVS; #[Reconstructed PDG2011] +0.000007000 rho- eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi- PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K- PHSP; #[Reconstructed PDG2011] +0.000004900 K*- eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho- eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi- SVS; #[Reconstructed PDG2011] +0.000006700 omega K- SVS; #[Reconstructed PDG2011] +0.0000010 omega K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi- SVS; +0.000008300 phi K- SVS; #[Reconstructed PDG2011] +#2-body modes from Jim Olsen +# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) +# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) +# PR LHCb 04/08/2004 Split into Ks/KL +0.000000 anti-K0 pi- PHSP; +0.000011550 K_S0 pi- PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi- PHSP; #[Reconstructed PDG2011] +0.000001360 K0 K- PHSP; #[Reconstructed PDG2011] +0.000005700 pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K- pi0 PHSP; #[Reconstructed PDG2011] +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B- modes +# +# rho0 3-body modes +0.000008300 rho0 pi- SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K- SVS; #[Reconstructed PDG2011] +# +# rho- 3-body modes +0.000008000 rho- anti-K0 SVS; #[Reconstructed PDG2011] +0.000010900 rho- pi0 SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000022 rho(2S)0 pi- SVS; +0.000001 rho(2S)0 K- SVS; +# +# f0,a0(980) 3-body modes +0.000001 f_0 pi- PHSP; +0.0000092 f_0 K- PHSP; +0.000001 a_0- anti-K0 PHSP; +0.000001 a_00 K- PHSP; +0.000001 a_00 pi- PHSP; +0.000001 a_0- pi0 PHSP; + +0.000001600 f_2 pi- PHSP; #[Reconstructed PDG2011] + +# +# K*(1430) 3-body modes +0.000045000 anti-K_0*0 pi- PHSP; #[Reconstructed PDG2011] +0.000001 K_0*0 K- PHSP; +0.000002 K_0*- pi0 PHSP; +0.000002 K_0*- K0 PHSP; +# +# K*-(892) 3-body modes +0.000006900 K*- pi0 SVS; #[Reconstructed PDG2011] +0.0000030 K*- K0 SVS; +# +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi-pi+pi-: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi- pi+ pi- PHSP; +# +# K- pi+ pi-: high mass + f0(400-1200) = (5+5)e-6 +0.000000000 K- pi+ pi- PHSP; #[Reconstructed PDG2011] +# +# K- K+ pi-: just non-resonant +0.000005000 K- K+ pi- PHSP; #[Reconstructed PDG2011] +# +# K- K+ K-: high mass structure near 1500 + non-res: total - phiK = 30 - 4 +0.000025400 K- K+ K- PHSP; #[Reconstructed PDG2011] +# +# +# K-K-pi+: suppressed mode (1e-7) +0.0000001 K- K- pi+ PHSP; +# K+pi-pi-: suppressed mode (1e-7) +0.0000001 K+ pi- pi- PHSP; +# +# +# K- K0 pi0 +0.000001 K- K0 pi0 PHSP; +0.000001 K- K0 eta PHSP; +0.000001 K- K0 eta' PHSP; +# +# pi- anti-K0 pi0 +0.000001 pi- anti-K0 pi0 PHSP; +0.000001 pi- anti-K0 eta PHSP; +0.000001 pi- anti-K0 eta' PHSP; +# +# pi- pi0 pi0 +#0402270.000001 pi- pi0 pi0 PHSP; +0.000001 pi- pi0 eta PHSP; +0.000001 pi- pi0 eta' PHSP; +0.000001 pi- eta eta PHSP; +0.000001 pi- eta eta' PHSP; +# +# K- pi0 pi0 +0.000001 K- pi0 pi0 PHSP; +0.000001 K- pi0 eta PHSP; +0.000001 K- pi0 eta' PHSP; +0.000001 K- eta eta PHSP; +0.000001 K- eta eta' PHSP; +0.000001 K- eta' eta' PHSP; +# +# K- anti-K0 K0: 4*BF(K+KsKs) (4 is a guess) +0.000046 K- anti-K0 K0 PHSP; +# +# pi- anti-K0 K0 +0.000001 pi- anti-K0 K0 PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 22 Apr 2004 Set long. pol. for rho rho +0.000024000 rho- rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 pi- pi0 PHSP; +0.000005 rho0 pi- eta PHSP; +0.000002 rho0 pi- eta' PHSP; +0.000010 omega pi- pi0 PHSP; +0.000005 omega pi- eta PHSP; +0.000002 omega pi- eta' PHSP; +0.000010 rho- pi- pi+ PHSP; +# PR LHCb Add rho+ pi- pi- +0.000010 rho+ pi- pi- PHSP; +0.000010 rho- pi0 pi0 PHSP; +0.000005 rho- pi0 eta PHSP; +0.000002 rho- eta eta PHSP; +0.000002 rho- pi0 eta' PHSP; +0.000010 pi+ pi- pi- pi0 PHSP; +0.000005 pi+ pi- pi- eta PHSP; +0.000002 pi+ pi- pi- eta' PHSP; +0.000010 pi- pi0 pi0 pi0 PHSP; +0.000005 pi- eta pi0 pi0 PHSP; +0.000002 pi- eta eta pi0 PHSP; +0.000002 pi- eta' pi0 pi0 PHSP; +0.000001 pi- eta' eta pi0 PHSP; +0.000020000 a_10 pi- SVS; #[Reconstructed PDG2011] +0.000026000 a_1- pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi- SVS; +0.000010 b_1- pi0 SVS; +0.000010 rho- f_0 SVS; +0.000010 rho- a_00 SVS; +0.000002 rho0 a_0- SVS; +0.000010 f_0 pi- pi0 PHSP; +0.000001 a_00 pi- pi0 PHSP; +0.000001 a_0- pi0 pi0 PHSP; +0.000001 a_0+ pi- pi- PHSP; +#--- 4-body rho-K*, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000009200 rho- anti-K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010 pi- pi0 anti-K*0 PHSP; +0.000005 pi- eta anti-K*0 PHSP; +0.000069800 pi+ pi- K*- PHSP; #[Reconstructed PDG2011] +0.000010 pi0 pi0 K*- PHSP; +0.000005 pi0 eta K*- PHSP; +0.000002 eta eta K*- PHSP; +0.000002 pi0 eta' K*- PHSP; +0.000001 eta eta' K*- PHSP; +0.000010 rho- anti-K0 pi0 PHSP; +0.000005 rho- anti-K0 eta PHSP; +0.000002 rho- anti-K0 eta' PHSP; +0.000010 rho- K- pi+ PHSP; +0.000010 rho+ K- pi- PHSP; +0.000005 rho0 anti-K0 pi- PHSP; +0.000005 rho0 K- pi0 PHSP; +0.000002 rho0 K- eta PHSP; +0.000001 rho0 K- eta' PHSP; +0.000005 omega anti-K0 pi- PHSP; +0.000005 omega K- pi0 PHSP; +0.000002 omega K- eta PHSP; +0.000001 omega K- eta' PHSP; +0.000010 pi+ pi- pi- anti-K0 PHSP; +0.000010 pi- pi0 pi0 anti-K0 PHSP; +0.000005 pi- eta pi0 anti-K0 PHSP; +0.000002 pi- eta eta anti-K0 PHSP; +0.000010 pi+ pi- pi0 K- PHSP; +0.000005 pi+ pi- eta K- PHSP; +0.000010 pi0 pi0 pi0 K- PHSP; +0.000005 pi0 pi0 eta K- PHSP; +0.000002 pi0 eta eta K- PHSP; +0.000002 pi0 pi0 eta' K- PHSP; +0.000001 pi0 eta eta' K- PHSP; +0.000010 rho- anti-K_0*0 PHSP; +0.000006 rho0 K_0*- PHSP; +0.000010 pi- pi0 anti-K_0*0 PHSP; +0.000010 pi0 pi0 K_0*- PHSP; +0.000005200 K*- f_0 SVS; #[Reconstructed PDG2011] +0.000010 a_10 K- SVS; +0.000035000 a_1- anti-K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K- SVS; +0.000010 b_1- anti-K0 SVS; +0.000005 K*- a_00 SVS; +0.000005 anti-K*0 a_0- SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001 K*0 K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi rho- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi pi- pi0 PHSP; +0.0000005 phi pi- eta PHSP; +0.0000002 phi pi- eta' PHSP; +0.000001 K+ K- rho- PHSP; +0.000001 K0 anti-K0 rho- PHSP; +0.000001 K0 K- rho0 PHSP; +0.000001 K0 K- omega PHSP; +0.000001 K+ K- pi- pi0 PHSP; +0.0000005 K+ K- pi- eta PHSP; +0.0000002 K+ K- pi- eta' PHSP; +0.000001 K0 anti-K0 pi- pi0 PHSP; +0.0000005 K0 anti-K0 pi- eta PHSP; +0.0000002 K0 anti-K0 pi- eta' PHSP; +0.000001 K0 K- pi+ pi- PHSP; +0.000001 K0 K- pi0 pi0 PHSP; +0.0000005 K0 K- pi0 eta PHSP; +0.0000002 K0 K- eta eta PHSP; +0.0000002 K0 K- pi0 eta' PHSP; +0.0000001 K0 K- eta eta' PHSP; +0.000001 K*+ K- pi- PHSP; +0.000001 K*- K+ pi- PHSP; +0.000001 K*0 anti-K0 pi- PHSP; +0.000001 K0 anti-K*0 pi- PHSP; +0.000001 K- K*0 pi0 PHSP; +0.0000005 K- K*0 eta PHSP; +0.0000002 K- K*0 eta' PHSP; +0.000001 K*- K0 pi0 PHSP; +0.0000005 K*- K0 eta PHSP; +0.0000002 K*- K0 eta' PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000010000 phi K*- SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi anti-K0 pi- PHSP; +0.000010 phi K- pi0 PHSP; +0.000005 phi K- eta PHSP; +0.000002 phi K- eta' PHSP; +0.000026000 K- K+ K*- PHSP; #[Reconstructed PDG2011] +0.000010 K- K*+ K- PHSP; +0.000010 K- K*0 anti-K0 PHSP; +0.000010 K- K0 anti-K*0 PHSP; +0.000010 K0 K*- anti-K0 PHSP; +0.000010 K+ K- K- pi0 PHSP; +0.000005 K+ K- K- eta PHSP; +0.000002 K+ K- K- eta' PHSP; +0.000010 K+ K- anti-K0 pi- PHSP; +0.000010 K0 anti-K0 K- pi0 PHSP; +0.000005 K0 anti-K0 K- eta PHSP; +0.000002 K0 anti-K0 K- eta' PHSP; +0.000010 K0 anti-K0 anti-K0 pi- PHSP; +0.000007000 phi K_0*- PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*- PHSP; +0.000010 K- K- K_0*+ PHSP; +0.000010 K- anti-K_0*0 K0 PHSP; +0.000010 K- K_0*0 anti-K0 PHSP; +0.000002 phi K'_1- PHSP; +0.000002 K- K+ K'_1- PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.000001 phi K0 K- PHSP; +0.000001 K+ K- K- K0 PHSP; +0.000001 K0 anti-K0 K0 K- PHSP; +# +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi- PHSP; +0.000010 rho- rho0 pi0 PHSP; +0.000005 rho- rho0 eta PHSP; +0.000002 rho- rho0 eta' PHSP; +0.000010 rho+ rho- pi- PHSP; +0.000010 omega rho0 pi- PHSP; +0.000010 omega rho- pi0 PHSP; +0.000005 omega rho- eta PHSP; +0.000002 omega rho- eta' PHSP; +0.000002 rho0 pi+ pi- pi- PHSP; +0.000002 rho0 pi- pi0 pi0 PHSP; +0.000001 rho0 pi- eta pi0 PHSP; +0.000001 rho0 pi- eta' pi0 PHSP; +0.000002 omega pi- pi0 pi0 PHSP; +0.000001 omega pi- eta pi0 PHSP; +0.000001 omega pi- eta' pi0 PHSP; +0.000002 rho+ pi- pi- pi0 PHSP; +0.000001 rho+ pi- pi- eta PHSP; +0.000001 rho+ pi- pi- eta' PHSP; +0.000002 rho- pi+ pi- pi0 PHSP; +0.000001 rho- pi+ pi- eta PHSP; +0.000001 rho- pi+ pi- eta' PHSP; +0.000002 rho- pi0 pi0 pi0 PHSP; +0.000001 rho- pi0 eta pi0 PHSP; +0.000001 rho- eta eta pi0 PHSP; +0.000001 rho- pi0 eta' pi0 PHSP; +0.000001 pi+ pi- pi- pi0 pi0 PHSP; +0.000001 pi+ pi- pi- eta pi0 PHSP; +0.000001 pi+ pi- pi- eta' pi0 PHSP; +0.000001 pi- pi0 pi0 pi0 pi0 PHSP; +0.000001 pi- eta pi0 pi0 pi0 PHSP; +0.000001 pi- eta' pi0 pi0 pi0 PHSP; +0.000010 a_1- rho0 PHSP; +0.000010 a_1- omega PHSP; +0.000010 a_1- f_0 PHSP; +0.000010 a_10 pi- pi0 PHSP; +0.000005 a_10 pi- eta PHSP; +0.000002 a_10 pi- eta' PHSP; +0.000010 a_1+ pi- pi- PHSP; +0.000010 a_1- pi+ pi- PHSP; +0.000010 a_1- pi0 pi0 PHSP; +0.000005 a_1- pi0 eta PHSP; +0.000002 a_1- pi0 eta' PHSP; +0.000010 rho- f_0 pi0 PHSP; +0.000005 rho- f_0 eta PHSP; +0.000002 rho- f_0 eta' PHSP; +0.000010 rho0 f_0 pi- PHSP; +0.000010 omega f_0 pi- PHSP; +0.000010 rho- a_00 pi0 PHSP; +0.000005 rho- a_00 eta PHSP; +0.000002 rho- a_00 eta' PHSP; +0.000010 rho+ a_0- pi- PHSP; +0.000010 rho0 a_0- pi0 PHSP; +0.000005 rho0 a_0- eta PHSP; +0.000002 rho0 a_0- eta' PHSP; +0.000002 f_0 pi+ pi- pi- PHSP; +0.000002 f_0 pi- pi0 pi0 PHSP; +0.000001 f_0 pi- pi0 eta PHSP; +0.000001 f_0 pi- pi0 eta' PHSP; +0.000001 a_00 pi- pi0 pi0 PHSP; +0.000001 a_0- pi0 pi0 pi0 PHSP; +0.000001 a_0+ pi- pi- pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho- K*- pi+ PHSP; +0.000010 rho+ K*- pi- PHSP; +0.000010 rho- anti-K*0 pi0 PHSP; +0.000005 rho- anti-K*0 eta PHSP; +0.000002 rho- anti-K*0 eta' PHSP; +0.000010 rho0 anti-K*0 pi- PHSP; +0.000010 rho0 K*- pi0 PHSP; +0.000005 rho0 K*- eta PHSP; +0.000002 rho0 K*- eta' PHSP; +0.000010 omega anti-K*0 pi- PHSP; +0.000010 omega K*- pi0 PHSP; +0.000005 omega K*- eta PHSP; +0.000002 omega K*- eta' PHSP; +0.000010 pi+ pi- anti-K*0 pi- PHSP; +0.000010 pi- pi0 anti-K*0 pi0 PHSP; +0.000005 pi- eta anti-K*0 pi0 PHSP; +0.000002 pi- eta' anti-K*0 pi0 PHSP; +0.000010 pi- pi+ K*- pi0 PHSP; +0.000005 pi- pi+ K*- eta PHSP; +0.000002 pi- pi+ K*- eta' PHSP; +0.000010 pi0 pi0 K*- pi0 PHSP; +0.000005 pi0 eta K*- pi0 PHSP; +0.000002 eta eta K*- pi0 PHSP; +0.000002 pi0 eta' K*- pi0 PHSP; +0.000001 eta eta' K*- pi0 PHSP; +0.000010 rho- anti-K0 pi+ pi- PHSP; +0.000010 rho- anti-K0 pi0 pi0 PHSP; +0.000005 rho- anti-K0 eta pi0 PHSP; +0.000002 rho- anti-K0 eta' pi0 PHSP; +0.000010 rho- K- pi+ pi0 PHSP; +0.000010 rho+ K- pi- pi0 PHSP; +0.000010 rho+ anti-K0 pi- pi- PHSP; +0.000010 rho0 anti-K0 pi- pi0 PHSP; +0.000010 rho0 K- pi0 pi0 PHSP; +0.000005 rho0 K- eta pi0 PHSP; +0.000002 rho0 K- eta' pi0 PHSP; +0.000010 omega anti-K0 pi- pi0 PHSP; +0.000010 omega K- pi0 pi0 PHSP; +0.000005 omega K- eta pi0 PHSP; +0.000002 omega K- eta' pi0 PHSP; +0.000002 pi- pi- pi+ anti-K0 pi0 PHSP; +0.000001 pi- pi- pi+ anti-K0 eta PHSP; +0.000001 pi- pi- pi+ anti-K0 eta' PHSP; +0.000002 pi- pi0 pi0 anti-K0 pi0 PHSP; +0.000001 pi- eta pi0 anti-K0 pi0 PHSP; +0.000001 pi- eta eta anti-K0 pi0 PHSP; +0.000002 pi+ pi- pi+ K- pi- PHSP; +0.000002 pi+ pi- pi0 K- pi0 PHSP; +0.000001 pi+ pi- eta K- pi0 PHSP; +0.000001 pi+ pi- eta' K- pi0 PHSP; +0.000002 pi0 pi0 pi0 K- pi0 PHSP; +0.000001 pi0 pi0 eta K- pi0 PHSP; +0.000001 pi0 eta eta K- pi0 PHSP; +0.000001 pi0 pi0 eta' K- pi0 PHSP; +0.000001 pi0 eta eta' K- pi0 PHSP; +0.000010 rho0 anti-K_0*0 pi- PHSP; +0.000010 rho- anti-K_0*0 pi0 PHSP; +0.000005 rho- anti-K_0*0 eta PHSP; +0.000002 rho- anti-K_0*0 eta' PHSP; +0.000010 rho- K_0*- pi+ PHSP; +0.000010 rho0 K_0*- pi0 PHSP; +0.000005 rho0 K_0*- eta PHSP; +0.000002 rho0 K_0*- eta' PHSP; +0.000010 pi- pi- anti-K_0*0 pi+ PHSP; +0.000010 pi- pi0 anti-K_0*0 pi0 PHSP; +0.000005 pi- pi0 anti-K_0*0 eta PHSP; +0.000002 pi- pi0 anti-K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*- pi0 PHSP; +0.000005 pi0 pi0 K_0*- eta PHSP; +0.000002 pi0 pi0 K_0*- eta' PHSP; +0.000010 anti-K*0 f_0 pi- PHSP; +0.000010 K*- f_0 pi0 PHSP; +0.000005 K*- f_0 eta PHSP; +0.000002 K*- f_0 eta' PHSP; +0.000020 a_10 K*- PHSP; +0.000010 a_10 K- pi0 PHSP; +0.000010 a_10 anti-K0 pi- PHSP; +0.000020 a_1- anti-K*0 PHSP; +0.000010 a_1- K- pi+ PHSP; +0.000010 a_1- anti-K0 pi0 PHSP; +0.000005 K*- a_00 pi0 PHSP; +0.000005 anti-K*0 a_0- pi0 PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*0 anti-K*0 pi- PHSP; +0.000001 K*0 K*- pi0 PHSP; +0.0000005 K*0 K*- eta PHSP; +0.0000002 K*0 K*- eta' PHSP; +0.000001 phi rho0 pi- PHSP; +0.000001 phi omega pi- PHSP; +0.000001 phi f_0 pi- PHSP; +0.000001 phi rho- pi0 PHSP; +0.0000005 phi rho- eta PHSP; +0.0000002 phi rho- eta' PHSP; +0.000001 phi pi+ pi- pi- PHSP; +0.000001 phi pi- pi0 pi0 PHSP; +0.0000005 phi pi- eta pi0 PHSP; +0.0000002 phi pi- eta' pi0 PHSP; +0.000001 K0 K- rho+ pi- PHSP; +0.000001 K0 K- rho- pi+ PHSP; +0.000001 K0 K- rho0 pi0 PHSP; +0.0000005 K0 K- rho0 eta PHSP; +0.0000002 K0 K- rho0 eta' PHSP; +0.000001 K0 K- omega pi0 PHSP; +0.000001 K0 K- f_0 pi0 PHSP; +0.000001 K+ K- rho0 pi- PHSP; +0.000001 K+ K- rho- pi0 PHSP; +0.0000005 K+ K- rho- eta PHSP; +0.0000002 K+ K- rho- eta' PHSP; +0.000001 K+ K- omega pi- PHSP; +0.000001 K0 anti-K0 rho0 pi- PHSP; +0.000001 K0 anti-K0 omega pi- PHSP; +0.000001 K0 anti-K0 f_0 pi- PHSP; +0.000001 K0 anti-K0 rho- pi0 PHSP; +0.0000005 K0 anti-K0 rho- eta PHSP; +0.0000002 K0 anti-K0 rho- eta' PHSP; +0.000001 anti-K0 K+ rho- pi- PHSP; +0.0000002 anti-K0 K+ pi- pi- pi0 PHSP; +0.0000001 anti-K0 K+ pi- pi- eta PHSP; +0.0000001 anti-K0 K+ pi- pi- eta' PHSP; +0.0000002 K+ K- pi+ pi- pi- PHSP; +0.0000002 K+ K- pi- pi0 pi0 PHSP; +0.0000001 K+ K- pi- eta pi0 PHSP; +0.0000001 K+ K- pi- eta' pi0 PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi- PHSP; +0.0000002 K0 anti-K0 pi- pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi- eta pi0 PHSP; +0.0000001 K0 anti-K0 pi- eta' pi0 PHSP; +0.0000002 K0 K- pi+ pi- pi0 PHSP; +0.0000001 K0 K- pi+ pi- eta PHSP; +0.0000001 K0 K- pi+ pi- eta' PHSP; +0.0000002 K0 K- pi0 pi0 pi0 PHSP; +0.0000001 K0 K- pi0 eta pi0 PHSP; +0.0000001 K0 K- pi0 eta' pi0 PHSP; +0.000001 anti-K*0 K+ pi- pi- PHSP; +0.000001 K*+ anti-K0 pi- pi- PHSP; +0.000001 K*- K+ pi- pi0 PHSP; +0.000001 K*+ K- pi- pi0 PHSP; +0.000001 K*0 anti-K0 pi- pi0 PHSP; +0.000001 K0 anti-K*0 pi- pi0 PHSP; +0.000001 K- K*0 pi0 pi0 PHSP; +0.0000005 K- K*0 eta pi0 PHSP; +0.0000002 K- K*0 eta' pi0 PHSP; +0.000001 K*- K0 pi0 pi0 PHSP; +0.0000005 K*- K0 eta pi0 PHSP; +0.0000002 K*- K0 eta' pi0 PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*- pi0 PHSP; +0.000010 phi K- rho0 PHSP; +0.000010 phi K- omega PHSP; +0.000010 phi K- f_0 PHSP; +0.000010 phi anti-K0 rho- PHSP; +0.000010 phi anti-K0 pi- pi0 PHSP; +0.000010 phi K- pi+ pi- PHSP; +0.000010 phi K- pi0 pi0 PHSP; +0.000005 phi K- eta pi0 PHSP; +0.000002 phi K- eta' pi0 PHSP; +0.000010 K+ K- K*- pi0 PHSP; +0.000010 K- K*+ K- pi0 PHSP; +0.000010 K- K*0 anti-K0 pi0 PHSP; +0.000010 K- K0 anti-K*0 pi0 PHSP; +0.000010 K0 K*- anti-K0 pi0 PHSP; +0.000010 K+ K- K- rho0 PHSP; +0.000010 K+ K- K- omega PHSP; +0.000010 K+ K- K- f_0 PHSP; +0.000010 K- K+ anti-K0 rho- PHSP; +0.000010 K- K- K+ pi0 pi0 PHSP; +0.000005 K- K- K+ eta pi0 PHSP; +0.000002 K- K- K+ eta' pi0 PHSP; +0.000010 K+ K- anti-K0 pi- pi0 PHSP; +0.000010 K0 anti-K0 K- pi0 pi0 PHSP; +0.000005 K0 anti-K0 K- eta pi0 PHSP; +0.000002 K0 anti-K0 K- eta' pi0 PHSP; +0.000010 K0 anti-K0 anti-K0 pi- pi0 PHSP; +0.000010 phi anti-K_0*0 pi- PHSP; +0.000010 phi K_0*- pi0 PHSP; +0.000005 phi K_0*- eta PHSP; +0.000002 phi K_0*- eta' PHSP; +0.000010 K- K+ K_0*- pi0 PHSP; +0.000005 K- K+ K_0*- eta PHSP; +0.000002 K- K+ K_0*- eta' PHSP; +0.000010 K- K- K_0*+ pi0 PHSP; +0.000005 K- K- K_0*+ eta PHSP; +0.000002 K- K- K_0*+ eta' PHSP; +0.000010 K- K+ anti-K_0*0 pi- PHSP; +0.000010 K- K- K_0*0 pi+ PHSP; +0.000010 anti-K0 anti-K0 K_0*0 pi- PHSP; +0.000010 K- anti-K_0*0 K0 pi0 PHSP; +0.000005 K- anti-K_0*0 K0 eta PHSP; +0.000002 K- anti-K_0*0 K0 eta' PHSP; +0.000010 K- K_0*0 anti-K0 pi0 PHSP; +0.000005 K- K_0*0 anti-K0 eta PHSP; +0.000002 K- K_0*0 anti-K0 eta' PHSP; +0.000002 phi anti-K'_10 pi- PHSP; +0.000002 phi K'_1- pi0 PHSP; +0.000001 phi K'_1- eta PHSP; +0.000001 phi K'_1- eta' PHSP; +0.000002 K- K+ anti-K'_10 pi- PHSP; +0.000002 K- K+ K'_1- pi0 PHSP; +0.000001 K- K+ K'_1- eta PHSP; +0.000001 K- K+ K'_1- eta' PHSP; +0.000002 K- K- K'_1+ pi0 PHSP; +0.000002 K- K- anti-K'_10 pi+ PHSP; +0.000002 K0 anti-K0 anti-K'_10 pi- PHSP; +0.000002 K0 anti-K0 K'_1- pi0 PHSP; +0.000001 K0 anti-K0 K'_1- eta PHSP; +0.000001 K0 anti-K0 K'_1- eta' PHSP; +0.000002 anti-K0 anti-K0 K'_10 pi- PHSP; +0.000002 K0 K0 K'_1- pi0 PHSP; +0.000001 K0 K0 K'_1- eta PHSP; +0.000001 K0 K0 K'_1- eta' PHSP; +0.000010 K- K0 anti-K'_10 pi0 PHSP; +0.000005 K- K0 anti-K'_10 eta PHSP; +0.000002 K- K0 anti-K'_10 eta' PHSP; +0.000010 K- K'_10 anti-K0 pi0 PHSP; +0.000005 K- K'_10 anti-K0 eta PHSP; +0.000002 K- K'_10 anti-K0 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004900 phi phi K- PHSP; #[Reconstructed PDG2011] +0.000001 phi phi pi- PHSP; +0.000001 phi K+ K- K- PHSP; +0.000001 phi K0 anti-K0 K- PHSP; +0.000001 phi K0 anti-K0 pi- PHSP; +0.000001 phi K0 K- pi0 PHSP; +0.000001 K+ K- K+ K- pi- PHSP; +0.000001 K+ K- K0 anti-K0 pi- PHSP; +0.000001 K+ K- K- K0 pi0 PHSP; +0.000001 K0 anti-K0 K0 K- pi0 PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*- PHSP; +0.000001 phi K+ K- K*- PHSP; +0.000001 phi K0 anti-K0 K*- PHSP; +0.000001 phi K0 K- K*0 PHSP; +0.000001 phi K+ K- K- pi0 PHSP; +0.000001 phi K+ K- anti-K0 pi- PHSP; +0.000001 phi K0 anti-K0 K- pi0 PHSP; +0.000001 phi K0 anti-K0 anti-K0 pi- PHSP; +0.000001 phi K0 K- K- pi+ PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_1- a_10 PHSP; +# +# B -> cc= s sum = 1.92% +# +0.001014000 J/psi K- SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.000049000 J/psi pi- SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0002 J/psi anti-K0 pi- PHSP; +0.0001 J/psi K- pi0 PHSP; +#rl0.0007 J/psi K- pi+ pi- PHSP; +#rl0.00035 J/psi K- pi0 pi0 PHSP; +#rl0.00035 J/psi anti-K0 pi- pi0 PHSP; +0.0001 J/psi K'_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*- PHSP; +0.001800000 J/psi K_1- SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K- PHSP; #[Reconstructed PDG2011] +# +0.000646000 psi(2S) K- SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 psi(2S) anti-K0 pi- PHSP; +0.0002 psi(2S) K- pi0 PHSP; +0.001900000 psi(2S) K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0001 psi(2S) K- pi0 pi0 PHSP; +0.0001 psi(2S) anti-K0 pi- pi0 PHSP; +0.0004 psi(2S) K_1- PHSP; +# +0.000910000 eta_c K- PHSP; #[Reconstructed PDG2011] +0.001200000 K*- eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c anti-K0 pi- PHSP; +0.0001 eta_c K- pi0 PHSP; +0.0002 eta_c K- pi+ pi- PHSP; +0.0001 eta_c K- pi0 pi0 PHSP; +0.0001 eta_c anti-K0 pi- pi0 PHSP; +# +0.000340000 eta_c(2S) K- PHSP; #[Reconstructed PDG2011] +0.00048 K*- eta_c(2S) SVS; +0.00008 eta_c(2S) anti-K0 pi- PHSP; +0.00005 eta_c(2S) K- pi0 PHSP; +0.00008 eta_c(2S) K- pi+ pi- PHSP; +0.00005 eta_c(2S) K- pi0 pi0 PHSP; +0.00005 eta_c(2S) anti-K0 pi- pi0 PHSP; +# +0.000133000 chi_c0 K- PHSP; #[Reconstructed PDG2011] +0.0004 K*- chi_c0 SVS; +0.0002 chi_c0 anti-K0 pi- PHSP; +0.0001 chi_c0 K- pi0 PHSP; +0.0002 chi_c0 K- pi+ pi- PHSP; +0.0001 chi_c0 K- pi0 pi0 PHSP; +0.0001 chi_c0 anti-K0 pi- pi0 PHSP; +# +0.000460000 chi_c1 K- SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*- SVV_HELAMP PKHminus PKphHminus PKHzero PKphHzero PKHplus PKphHplus; #[Reconstructed PDG2011] +0.0004 chi_c1 anti-K0 pi- PHSP; +0.0002 chi_c1 K- pi0 PHSP; +0.0004 chi_c1 K- pi+ pi- PHSP; +0.0002 chi_c1 K- pi0 pi0 PHSP; +0.0002 chi_c1 anti-K0 pi- pi0 PHSP; +# +0.00002 chi_c2 K- STS; +0.00002 chi_c2 K*- PHSP; +0.0002 chi_c2 anti-K0 pi- PHSP; +0.0001 chi_c2 K- pi0 PHSP; +0.0002 chi_c2 K- pi+ pi- PHSP; +0.0001 chi_c2 K- pi0 pi0 PHSP; +0.0001 chi_c2 anti-K0 pi- pi0 PHSP; +# +0.000490000 psi(3770) K- SVS; #[Reconstructed PDG2011] +0.0005 psi(3770) K*- PHSP; +0.0003 psi(3770) anti-K0 pi- PHSP; +0.0002 psi(3770) K- pi0 PHSP; +0.0002 psi(3770) K- pi+ pi- PHSP; +0.0001 psi(3770) K- pi0 pi0 PHSP; +0.0001 psi(3770) anti-K0 pi- pi0 PHSP; +0.0003 psi(3770) K_1- PHSP; +# +# b -> c (sc=) -> D Ds X Sum = 10% +# +0.010000000 D0 D_s- PHSP; #[Reconstructed PDG2011] +0.008200000 D*0 D_s- SVS; #[Reconstructed PDG2011] +0.007600000 D_s*- D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*- D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] +0.0006 D'_10 D_s- SVS; +0.0012 D'_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 D_10 D_s- SVS; +0.0024 D_10 D_s*- SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 D_2*0 D_s- STS; +0.0040 D_2*0 D_s*- PHSP; +# +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# +0.0036 D_s- D+ pi- PHSP; +0.0018 D_s- D0 pi0 PHSP; +0.0037 D_s*- D+ pi- PHSP; +0.0018 D_s*- D0 pi0 PHSP; +0.0033 D_s- D+ pi- pi0 PHSP; +0.0033 D_s- D0 pi- pi+ PHSP; +0.0008 D_s- D0 pi0 pi0 PHSP; +0.0033 D_s*- D+ pi- pi0 PHSP; +0.0033 D_s*- D0 pi- pi+ PHSP; +0.0008 D_s*- D0 pi0 pi0 PHSP; +# +# +# b -> c (sc=) -> D D= K X Sum = 8% +# update: Ref. [B1]: +# +0.0017 D0 D- anti-K0 PHSP; +0.0052 D0 D*- anti-K0 PHSP; +0.0031 D*0 D- anti-K0 PHSP; +0.007800000 D*0 D*- anti-K0 PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.002100000 D0 anti-D0 K- PHSP; #[Reconstructed PDG2011] +0.0018 D*0 anti-D0 K- PHSP; +0.004700000 D0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] +0.005300000 D*0 anti-D*0 K- PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D- D+ K- PHSP; +0.0005 D*- D+ K- PHSP; +0.001500000 D- D*+ K- PHSP; #[Reconstructed PDG2011] +0.0015 D*- D*+ K- PHSP; +# +0.0025 D0 D- anti-K*0 PHSP; +0.0025 D*0 D- anti-K*0 PHSP; +0.0025 D0 D*- anti-K*0 PHSP; +0.0050 D*0 D*- anti-K*0 PHSP; +# +0.0025 D0 anti-D0 K*- PHSP; +0.0025 D*0 anti-D0 K*- PHSP; +0.0025 D0 anti-D*0 K*- PHSP; +0.0050 D*0 anti-D*0 K*- PHSP; +# +0.0005 D- D+ K*- PHSP; +0.0005 D*- D+ K*- PHSP; +0.0005 D- D*+ K*- PHSP; +0.0010 D*- D*+ K*- PHSP; +# +# B->D(*)D(*). See Ref [B1]: +# +0.000380000 D- D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*- D0 SVS; #[Reconstructed PDG2011] +0.000630000 D*0 D- SVS; #[Reconstructed PDG2011] +0.000810000 D*0 D*- SVV_HELAMP 0.47 0.0 0.96 0.0 0.56 0.0; #[Reconstructed PDG2011] + +# +# B -> D(*) X Exclusive Modes +# +0.005190000 D*0 pi- SVS; #[Reconstructed PDG2011] +0.004840000 D0 pi- PHSP; #[Reconstructed PDG2011] +0.013400000 rho- D0 SVS; #[Reconstructed PDG2011] +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.009800000 D*0 rho- SVV_HELAMP 0.228 0.95 0.932 0.0 0.283 1.13; #[Reconstructed PDG2011] +# +0.0005 D0 pi0 pi- PHSP; +0.0005 D*0 pi0 pi- PHSP; +0.001070000 D+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.001350000 D*+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# D a1 updated Ref. [B1]: +0.004000000 a_1- D0 SVS; #[Reconstructed PDG2011] +0.000200000 D0 rho0 pi- PHSP; #[Reconstructed PDG2011] +0.006800000 D0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1]: +# +# +0.019000000 D*0 a_1- SVV_HELAMP 0.200 0.0 0.866 0.0 0.458 0.0; #[Reconstructed PDG2011] +# +0.00042 D*0 rho0 pi- PHSP; +0.010300000 D*0 pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +# +0.0020 D+ rho- pi- PHSP; +0.0020 D+ pi0 pi- pi- PHSP; +0.0020 D*+ rho- pi- PHSP; +0.015000000 D*+ pi0 pi- pi- PHSP; #[Reconstructed PDG2011] +0.0005 D*0 rho- pi0 PHSP; +0.0005 D*0 pi- pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# further update October 26, 2004 Lange +# +0.000876 D_10 pi- SVS; +0.0005 D'_10 pi- SVS; +0.00052 D_2*0 pi- STS; +0.0007 D_10 rho- PHSP; +0.0022 D'_10 rho- PHSP; +0.0038 D_2*0 rho- PHSP; +0.00061 D_0*0 pi- PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref [B1]: +# +0.000368000 D0 K- PHSP; #[Reconstructed PDG2011] +0.000421000 D*0 K- SVS; #[Reconstructed PDG2011] +0.000530000 K*- D0 SVS; #[Reconstructed PDG2011] +0.000810000 D*0 K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.283 0.0; #[Reconstructed PDG2011] +#October 26, 2004 Lange +0.0000005 D- pi0 PHSP; +0.0000005 D*- pi0 SVS; +0.000011 D- anti-K0 PHSP; +0.000006 D*- anti-K0 SVS; +# +#October 26, 2004 - Lange +0.00075 D0 D_s0*- PHSP; +0.0009 D*0 D_s0*- SVS; +0.003100000 D_s1- D0 SVS; #[Reconstructed PDG2011] +0.012000000 D*0 D_s1- SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00055 D0 K- anti-K0 PHSP; +0.00075 D0 K- anti-K*0 PHSP; +0.001500000 D*0 K- anti-K*0 PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.002750000 D0 omega pi- PHSP; #[Reconstructed PDG2011] +0.004500000 D*0 omega pi- PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 D0 D'_s1- PHSP; +0.00094 D*0 D'_s1- PHSP; +# +# Lam_c X / Sigma_c X 4.0 % +# +#0.04000 cd_1 anti-uu_1 PYTHIA 23; +0.032587684 cd_1 anti-uu_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Xi_c X 2.5% +# +#0.02400 cs_1 anti-uu_1 PYTHIA 23; +0.008887593 cs_1 anti-uu_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# +0.206674414227145 anti-u d c anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 1 MDS +0.039260243235704 anti-u d c anti-u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 2 +0.0205431451523135 anti-u s c anti-u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 3 +#lange - try to crank up the psi production.... +0.0675641263565733 anti-c s c anti-u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 4 +0.00365209136279978 anti-c d c anti-u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 5 +0.00273906875335369 anti-u d u anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 6 +0.00365209136279978 anti-c s u anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 7 +# JGS 11/5/02 This and similar a few lines above have been divided by two +# to solve a double-counting problem for this channel +0.00187170953083442 anti-u u d anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 8 +0.0000639296667129716 anti-d d d anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 9 +0.0000821950214836964 anti-s s d anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 10 +0.00200870246666116 anti-u u s anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 11 +0.00164347584758947 anti-d d s anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 12 +0.00136957785240227 anti-s s s anti-u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 13 +0.004937500 s anti-u PYTHIA 32; #[Reconstructed PDG2011] +# +#### +0.000550000 D0 K- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 D0 K- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 D*0 pi+ pi- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 D*0 pi- pi- pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*+ pi- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*+ pi- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 anti-K*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 anti-K_2*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*- anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K- pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 anti-K*0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 anti-K0 pi- pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 anti-p- p+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 anti-p- p+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 anti-p- p+ K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 anti-p- Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 anti-p- Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 anti-p- Lambda0 pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 anti-p- Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 anti-p- Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 anti-Lambda0 Lambda0 K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 anti-Lambda0 Lambda0 K*- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda_c+ anti-p- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 Lambda_c+ anti-p- pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 Lambda_c+ anti-p- pi- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 Sigma_c0 anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 Sigma_c0 anti-p- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Sigma_c++ anti-p- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay B+ +# Updated to PDG 2008, modified by JB 1/2014 +# b -> c semileptonic +# +0.057 anti-D*0 e+ nu_e PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.0223 anti-D0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.00648476821256864 anti-D_10 e+ nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00389086092754118 anti-D_0*0 e+ nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00113483443719951 anti-D'_10 e+ nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00291814569565589 anti-D_2*0 e+ nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00988927152416717 D*- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000486357615942648 anti-D*0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +0.0000 D- pi+ e+ nu_e PHOTOS GOITY_ROBERTS; +0.00162119205314216 anti-D0 pi0 e+ nu_e PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL + +0.057 anti-D*0 mu+ nu_mu PHOTOS HQET 0.77 1.33 0.92; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.0223 anti-D0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB change to 2011 PDG value +0.00648476821256864 anti-D_10 mu+ nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00389086092754118 anti-D_0*0 mu+ nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00113483443719951 anti-D'_10 mu+ nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00291814569565589 anti-D_2*0 mu+ nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.00988927152416717 D*- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000486357615942648 anti-D*0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +0.0000 D- pi+ mu+ nu_mu PHOTOS GOITY_ROBERTS; +0.00162119205314216 anti-D0 pi0 mu+ nu_mu PHOTOS GOITY_ROBERTS; #JB rescaled to add up to PDG inc SL +# +# b -> c tau nu +# +0.0188 anti-D*0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0077 anti-D0 tau+ nu_tau ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.00210754966908481 anti-D_10 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00210754966908481 anti-D_0*0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00324238410628432 anti-D'_10 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00324238410628432 anti-D_2*0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +# +# b -> u l nu +# +# +# +0.000124831788091946 pi0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0000599841059662599 eta e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000207512582802196 rho0 e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000186437086111348 omega e+ nu_e PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000437721854348383 eta' e+ nu_e PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL + +0.000000 anti-D(2S)0 e+ nu_e PHOTOS ISGW2; +0.000000 anti-D*(2S)0 e+ nu_e PHOTOS ISGW2; +0.00315808211952093 Xu0 e+ nu_e VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; #JB rescaled to add up to PDG inc SL +# +0.000124831788091946 pi0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.0000599841059662599 eta mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000207512582802196 rho0 mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000186437086111348 omega mu+ nu_mu PHOTOS ISGW2; #[Reconstructed PDG2011] #JB rescaled to add up to PDG inc SL +0.000437721854348383 eta' mu+ nu_mu PHOTOS ISGW2; #JB rescaled to add up to PDG inc SL +0.000000 anti-D(2S)0 mu+ nu_mu PHOTOS ISGW2; +0.000000 anti-D*(2S)0 mu+ nu_mu PHOTOS ISGW2; +0.00315808211952093 Xu0 mu+ nu_mu VUB 4.8 1.29 0.22 20 0.30 0.54 1.20 0.95 1.26 0.78 1.34 0.98 1.41 0.91 1.48 1.23 1.55 1.36 1.61 1.39 1.67 1.38 1.73 1.43 1.79 1.41 1.84 1.42 1.90 1.45 1.95 1.40 2.00 1.42 2.50 1.31 3.00 1.36 3.50 1.15 4.00 1.01 4.50 1.51; #JB rescaled to add up to PDG inc SL +# +0.0000486357615942648 pi0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000194543046377059 eta tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000680900662319707 rho0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000680900662319707 omega tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000291814569565589 eta' tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000745748344445393 a_10 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000437721854348383 b_10 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000648476821256864 a_00 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000324238410628432 f_0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.00000324238410628432 f'_0 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000372874172222697 f_1 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000372874172222697 f'_1 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000210754966908481 h_1 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000210754966908481 h'_1 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000324238410628432 f_2 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.0000324238410628432 f'_2 tau+ nu_tau ISGW2; #JB rescaled to add up to PDG inc SL +0.000000 anti-D(2S)0 tau+ nu_tau ISGW2; +0.000000 anti-D*(2S)0 tau+ nu_tau ISGW2; +# +# +# +# b->u hadronic +# Ref. [B1]: +# +0.0000160 D_s+ pi0 PHSP; #[Reconstructed PDG2011] +0.000020 D_s*+ pi0 SVS; +# +0.000028 rho0 D_s+ SVS; +0.000028 D_s*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; + +# +# b-> s gamma +# +0.000042100 K*+ gamma HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +#0.0000135 K_1+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000065 K'_1+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000128 K'*+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000166 K_2*+ gamma HELAMP 1.0 0.0 1.0 0.0; +#0.0000017 K''*+ gamma HELAMP 1.0 0.0 1.0 0.0; +0.0003118 Xsu gamma BTOXSGAMMA 2; +# +0.000000550 K+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001550 K*+ e+ e- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000050 Xsu e+ e- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.000000520 K+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.000001160 K*+ mu+ mu- PHOTOS BTOSLLBALL; #[Reconstructed PDG2011] +0.0000025 Xsu mu+ mu- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +0.0000001 K+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 K*+ tau+ tau- PHOTOS BTOSLLBALL; +0.0000002 Xsu tau+ tau- PHOTOS BTOXSLL 4.8 0.2 0.0 0.41; +# +# b -> l nu +# +0.000180000 tau+ nu_tau SLN; #[Reconstructed PDG2011] +0.000000 mu+ nu_mu PHOTOS SLN; +0.000000 e+ nu_e PHOTOS SLN; +# +#------------------------------------------------------------------------------ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +# +# Exclusive hadronic b->u +# +0.000026 pi+ pi0 pi0 CB3PI-P00 alpha; +0.000000 pi+ pi+ pi- CB3PI-MPP alpha; +#### +0.000004070 eta pi+ PHSP; #[Reconstructed PDG2011] +0.000002330 eta K+ PHSP; #[Reconstructed PDG2011] +0.000019300 K*+ eta SVS; #[Reconstructed PDG2011] +0.000007000 rho+ eta SVS; #[Reconstructed PDG2011] +0.000002700 eta' pi+ PHSP; #[Reconstructed PDG2011] +0.000070600 eta' K+ PHSP; #[Reconstructed PDG2011] +0.000004900 K*+ eta' SVS; #[Reconstructed PDG2011] +0.000008700 rho+ eta' SVS; #[Reconstructed PDG2011] +0.000006900 omega pi+ SVS; #[Reconstructed PDG2011] +0.000006700 omega K+ SVS; #[Reconstructed PDG2011] +0.0000010 omega K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000015900 omega rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0000000 phi pi+ SVS; +0.000008300 phi K+ SVS; #[Reconstructed PDG2011] +#2-body modes from Jim Olsen +# (K_S0 K- and K_L0 K- -> 1x10^-6, Jim Olsen - Mar 27, 2001) +# (pi- pi0 -> 5x10^-6 and K- pi0 -> 11x10^-6, Jim Olsen - Mar 27, 2001) +# PR LHCb 04/08/04 split into KS/KL +0.000000 K0 pi+ PHSP; +0.000011550 K_S0 pi+ PHSP; #[Reconstructed PDG2011] +0.000011550 K_L0 pi+ PHSP; #[Reconstructed PDG2011] +0.000001360 anti-K0 K+ PHSP; #[Reconstructed PDG2011] +0.000005700 pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.000012900 K+ pi0 PHSP; #[Reconstructed PDG2011] +# +# 3-body John Back (jback@slac.stanford.edu) - Oct 15, 2002 +# JGS intersperses modes with pi0->eta,eta' +# B+ modes +# +# rho0 3-body modes +0.000008300 rho0 pi+ SVS; #[Reconstructed PDG2011] +0.000003700 rho0 K+ SVS; #[Reconstructed PDG2011] +# +# rho+ 3-body modes +0.000010900 rho+ pi0 SVS; #[Reconstructed PDG2011] +0.000008000 rho+ K0 SVS; #[Reconstructed PDG2011] +# +# rho(1450) 3-body modes +0.0000022 rho(2S)0 pi+ SVS; +0.000001 rho(2S)0 K+ SVS; +# +# f0(980) 3-body modes +0.000001 f_0 pi+ PHSP; +0.0000092 f_0 K+ PHSP; +0.000001 a_0+ K0 PHSP; +0.000001 a_00 K+ PHSP; +0.000001 a_00 pi+ PHSP; +0.000001 a_0+ pi0 PHSP; + +0.000001600 f_2 pi+ PHSP; #[Reconstructed PDG2011] + +# +# K*0(892) 3-body modes +0.000045000 K_0*0 pi+ PHSP; #[Reconstructed PDG2011] +0.0000010 anti-K_0*0 K+ PHSP; +0.000002 K_0*+ pi0 PHSP; +0.000002 K_0*+ anti-K0 PHSP; +# +# K*+(892) 3-body modes +0.000006900 K*+ pi0 SVS; #[Reconstructed PDG2011] +0.000003 K*+ anti-K0 SVS; +# +# +# Non-resonant 3-body left-overs +# Most modes are set at 1e-6 +# +# pi+pi-pi+: high mass + f0(400-1200) = (1+1)e-6 +#0402270.000002 pi+ pi- pi+ PHSP; +# +# K+ pi- pi+: high mass + f0(400-1200) = (5+5)e-6 +0.000000000 K+ pi- pi+ PHSP; #[Reconstructed PDG2011] +# +# K+ K- pi+: just non-resonant +0.000005000 K+ K- pi+ PHSP; #[Reconstructed PDG2011] +# +# K+K-K+: high mass structure near 1500 + non-res: total - phiK = 30-4 +0.000025400 K+ K- K+ PHSP; #[Reconstructed PDG2011] +# +# +# K+K+pi-: suppressed mode (1e-7) +0.0000001 K+ K+ pi- PHSP; +# K-pi+pi+: suppressed mode (1e-7) +0.0000001 K- pi+ pi+ PHSP; +# +# +# K+ anti-K0 pi0 +0.000001 K+ anti-K0 pi0 PHSP; +0.000001 K+ anti-K0 eta PHSP; +0.000001 K+ anti-K0 eta' PHSP; +# +# pi+ K0 pi0 +0.000001 pi+ K0 pi0 PHSP; +0.000001 pi+ K0 eta PHSP; +0.000001 pi+ K0 eta' PHSP; +# +# pi+ pi0 pi0 +#0402270.000001 pi+ pi0 pi0 PHSP; +0.000001 pi+ pi0 eta PHSP; +0.000001 pi+ pi0 eta' PHSP; +0.000001 pi+ eta eta PHSP; +0.000001 pi+ eta eta' PHSP; +# +# K+ pi0 pi0 +0.000001 K+ pi0 pi0 PHSP; +0.000001 K+ pi0 eta PHSP; +0.000001 K+ pi0 eta' PHSP; +0.000001 K+ eta eta PHSP; +0.000001 K+ eta eta' PHSP; +0.000001 K+ eta' eta' PHSP; +# +# K+ K0 anti-K0: 4*BF(K+KsKs) (4 is a guess) +0.0000460 K+ K0 anti-K0 PHSP; +# +# pi+ K0 anti-K0 +0.000001 pi+ K0 anti-K0 PHSP; +# +#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +# 2- and 3-body modes revised Feb.2005 Markus Cristinziani, SLAC +#--------------------------------------------------------------------------- +# +#4-body modes from Andrei Gritsan +#--- 4-body rho-rho, rho-pi-pi, pi-pi-pi-pi -------------------------- +# PR LHCb 22 Apr 2004 Set long. pol. for rho rho +0.000024000 rho+ rho0 SVV_HELAMP 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 pi+ pi0 PHSP; +0.000005 rho0 pi+ eta PHSP; +0.000002 rho0 pi+ eta' PHSP; +0.000010 omega pi+ pi0 PHSP; +0.000005 omega pi+ eta PHSP; +0.000002 omega pi+ eta' PHSP; +0.000010 rho+ pi+ pi- PHSP; +# PR Add rho- pi+ pi+ +0.000010 rho- pi+ pi+ PHSP; +0.000010 rho+ pi0 pi0 PHSP; +0.000005 rho+ pi0 eta PHSP; +0.000002 rho+ eta eta PHSP; +0.000002 rho+ pi0 eta' PHSP; +0.000010 pi- pi+ pi+ pi0 PHSP; +0.000005 pi- pi+ pi+ eta PHSP; +0.000002 pi- pi+ pi+ eta' PHSP; +0.000010 pi+ pi0 pi0 pi0 PHSP; +0.000005 pi+ eta pi0 pi0 PHSP; +0.000002 pi+ eta eta pi0 PHSP; +0.000002 pi+ eta' pi0 pi0 PHSP; +0.000001 pi+ eta' eta pi0 PHSP; +0.000020000 a_10 pi+ SVS; #[Reconstructed PDG2011] +0.000026000 a_1+ pi0 SVS; #[Reconstructed PDG2011] +0.0000067 b_10 pi+ SVS; +0.000010 b_1+ pi0 SVS; +0.000010 rho+ f_0 SVS; +0.000010 rho+ a_00 SVS; +0.000002 rho0 a_0+ SVS; +0.000010 f_0 pi+ pi0 PHSP; +0.000001 a_00 pi+ pi0 PHSP; +0.000001 a_0+ pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ PHSP; +#--- 4-body rho-K*, a1-K, rho-pi-K, K*-pi-pi, pi-pi-pi-K ------------------- +0.000009200 rho+ K*0 SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 rho0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000010 pi+ pi0 K*0 PHSP; +0.000005 pi+ eta K*0 PHSP; +0.000069800 pi- pi+ K*+ PHSP; #[Reconstructed PDG2011] +0.000010 pi0 pi0 K*+ PHSP; +0.000005 pi0 eta K*+ PHSP; +0.000002 eta eta K*+ PHSP; +0.000002 pi0 eta' K*+ PHSP; +0.000001 eta eta' K*+ PHSP; +0.000010 rho+ K0 pi0 PHSP; +0.000005 rho+ K0 eta PHSP; +0.000002 rho+ K0 eta' PHSP; +0.000010 rho+ K+ pi- PHSP; +0.000010 rho- K+ pi+ PHSP; +0.000005 rho0 K0 pi+ PHSP; +0.000005 rho0 K+ pi0 PHSP; +0.000002 rho0 K+ eta PHSP; +0.000001 rho0 K+ eta' PHSP; +0.000005 omega K0 pi+ PHSP; +0.000005 omega K+ pi0 PHSP; +0.000002 omega K+ eta PHSP; +0.000001 omega K+ eta' PHSP; +0.000010 pi+ pi+ pi- K0 PHSP; +0.000010 pi+ pi0 pi0 K0 PHSP; +0.000005 pi+ eta pi0 K0 PHSP; +0.000002 pi+ eta eta K0 PHSP; +0.000010 pi+ pi- pi0 K+ PHSP; +0.000005 pi+ pi- eta K+ PHSP; +0.000010 pi0 pi0 pi0 K+ PHSP; +0.000005 pi0 pi0 eta K+ PHSP; +0.000002 pi0 eta eta K+ PHSP; +0.000002 pi0 pi0 eta' K+ PHSP; +0.000001 pi0 eta eta' K+ PHSP; +0.000010 rho+ K_0*0 PHSP; +0.000006 rho0 K_0*+ PHSP; +0.000010 pi+ pi0 K_0*0 PHSP; +0.000010 pi0 pi0 K_0*+ PHSP; +0.000005200 K*+ f_0 SVS; #[Reconstructed PDG2011] +0.000010 a_10 K+ SVS; +0.000035000 a_1+ K0 SVS; #[Reconstructed PDG2011] +0.0000091 b_10 K+ SVS; +0.000010 b_1+ K0 SVS; +0.000005 K*+ a_00 SVS; +0.000005 K*0 a_0+ SVS; +#--- 4-body K*-K*, rho-K-K, K*-K-pi, phi-pi-pi, pi-pi-K-K ------------ +0.000001 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi rho+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; +0.000001 phi pi+ pi0 PHSP; +0.0000005 phi pi+ eta PHSP; +0.0000002 phi pi+ eta' PHSP; +0.000001 K+ K- rho+ PHSP; +0.000001 K0 anti-K0 rho+ PHSP; +0.000001 anti-K0 K+ rho0 PHSP; +0.000001 anti-K0 K+ omega PHSP; +0.000001 K+ K- pi+ pi0 PHSP; +0.0000005 K+ K- pi+ eta PHSP; +0.0000002 K+ K- pi+ eta' PHSP; +0.000001 K0 anti-K0 pi+ pi0 PHSP; +0.0000005 K0 anti-K0 pi+ eta PHSP; +0.0000002 K0 anti-K0 pi+ eta' PHSP; +0.000001 anti-K0 K+ pi+ pi- PHSP; +0.000001 anti-K0 K+ pi0 pi0 PHSP; +0.0000005 anti-K0 K+ pi0 eta PHSP; +0.0000002 anti-K0 K+ eta eta PHSP; +0.0000002 anti-K0 K+ pi0 eta' PHSP; +0.0000001 anti-K0 K+ eta eta' PHSP; +0.000001 K*+ K- pi+ PHSP; +0.000001 K*- K+ pi+ PHSP; +0.000001 K*0 anti-K0 pi+ PHSP; +0.000001 K0 anti-K*0 pi+ PHSP; +0.000001 K+ anti-K*0 pi0 PHSP; +0.0000005 K+ anti-K*0 eta PHSP; +0.0000002 K+ anti-K*0 eta' PHSP; +0.000001 K*+ anti-K0 pi0 PHSP; +0.0000005 K*+ anti-K0 eta PHSP; +0.0000002 K*+ anti-K0 eta' PHSP; +#--- 4-body phi-K*, phi-K-pi, K-K-K*, pi-K-K-K ----------------------- +0.000010000 phi K*+ SVV_HELAMP 1.0 0.0 1.7 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000010 phi K0 pi+ PHSP; +0.000010 phi K+ pi0 PHSP; +0.000005 phi K+ eta PHSP; +0.000002 phi K+ eta' PHSP; +0.000026000 K- K+ K*+ PHSP; #[Reconstructed PDG2011] +0.000010 K+ K*- K+ PHSP; +0.000010 K+ K*0 anti-K0 PHSP; +0.000010 K+ K0 anti-K*0 PHSP; +0.000010 K0 K*+ anti-K0 PHSP; +0.000010 K+ K- K+ pi0 PHSP; +0.000005 K+ K- K+ eta PHSP; +0.000002 K+ K- K+ eta' PHSP; +0.000010 K+ K- K0 pi+ PHSP; +0.000010 K0 anti-K0 K+ pi0 PHSP; +0.000005 K0 anti-K0 K+ eta PHSP; +0.000002 K0 anti-K0 K+ eta' PHSP; +0.000010 K0 anti-K0 K0 pi+ PHSP; +0.000007000 phi K_0*+ PHSP; #[Reconstructed PDG2011] +0.000010 K- K+ K_0*+ PHSP; +0.000010 K+ K+ K_0*- PHSP; +0.000010 K+ anti-K_0*0 K0 PHSP; +0.000010 K+ K_0*0 anti-K0 PHSP; +0.000002 phi K'_1+ PHSP; +0.000002 K- K+ K'_1+ PHSP; +#--- 4-body phi-phi, phi-K-K, K-K-K-K -------------------------------- +0.000001 phi anti-K0 K+ PHSP; +0.000001 K+ K- K+ anti-K0 PHSP; +0.000001 K0 anti-K0 anti-K0 K+ PHSP; +# +#5-body modes from Jim Smith - 1/30/05 +#--- 5-body rho-rho-pi, rho-pi-pi-pi, pi-pi-pi-pi-pi ------------------- +0.000010 rho0 rho0 pi+ PHSP; +0.000010 rho+ rho0 pi0 PHSP; +0.000005 rho+ rho0 eta PHSP; +0.000002 rho+ rho0 eta' PHSP; +0.000010 rho+ rho- pi+ PHSP; +0.000010 omega rho0 pi+ PHSP; +0.000010 omega rho+ pi0 PHSP; +0.000005 omega rho+ eta PHSP; +0.000002 omega rho+ eta' PHSP; +0.000002 rho0 pi+ pi- pi+ PHSP; +0.000002 rho0 pi+ pi0 pi0 PHSP; +0.000001 rho0 pi+ eta pi0 PHSP; +0.000001 rho0 pi+ eta' pi0 PHSP; +0.000002 omega pi+ pi0 pi0 PHSP; +0.000001 omega pi+ eta pi0 PHSP; +0.000001 omega pi+ eta' pi0 PHSP; +0.000002 rho- pi+ pi+ pi0 PHSP; +0.000001 rho- pi+ pi+ eta PHSP; +0.000001 rho- pi+ pi+ eta' PHSP; +0.000002 rho+ pi+ pi- pi0 PHSP; +0.000001 rho+ pi+ pi- eta PHSP; +0.000001 rho+ pi+ pi- eta' PHSP; +0.000002 rho+ pi0 pi0 pi0 PHSP; +0.000001 rho+ pi0 eta pi0 PHSP; +0.000001 rho+ eta eta pi0 PHSP; +0.000001 rho+ pi0 eta' pi0 PHSP; +0.000001 pi- pi+ pi+ pi0 pi0 PHSP; +0.000001 pi- pi+ pi+ eta pi0 PHSP; +0.000001 pi- pi+ pi+ eta' pi0 PHSP; +0.000001 pi+ pi0 pi0 pi0 pi0 PHSP; +0.000001 pi+ eta pi0 pi0 pi0 PHSP; +0.000001 pi+ eta' pi0 pi0 pi0 PHSP; +0.000010 a_1+ rho0 PHSP; +0.000010 a_1+ omega PHSP; +0.000010 a_1+ f_0 PHSP; +0.000010 a_10 pi+ pi0 PHSP; +0.000005 a_10 pi+ eta PHSP; +0.000002 a_10 pi+ eta' PHSP; +0.000010 a_1- pi+ pi+ PHSP; +0.000010 a_1+ pi+ pi- PHSP; +0.000010 a_1+ pi0 pi0 PHSP; +0.000005 a_1+ pi0 eta PHSP; +0.000002 a_1+ pi0 eta' PHSP; +0.000010 rho+ f_0 pi0 PHSP; +0.000005 rho+ f_0 eta PHSP; +0.000002 rho+ f_0 eta' PHSP; +0.000010 rho0 f_0 pi+ PHSP; +0.000010 omega f_0 pi+ PHSP; +0.000010 rho+ a_00 pi0 PHSP; +0.000005 rho+ a_00 eta PHSP; +0.000002 rho+ a_00 eta' PHSP; +0.000010 rho- a_0+ pi+ PHSP; +0.000010 rho0 a_0+ pi0 PHSP; +0.000005 rho0 a_0+ eta PHSP; +0.000002 rho0 a_0+ eta' PHSP; +0.000002 f_0 pi+ pi- pi+ PHSP; +0.000002 f_0 pi+ pi0 pi0 PHSP; +0.000001 f_0 pi+ pi0 eta PHSP; +0.000001 f_0 pi+ pi0 eta' PHSP; +0.000001 a_00 pi+ pi0 pi0 PHSP; +0.000001 a_0+ pi0 pi0 pi0 PHSP; +0.000001 a_0- pi+ pi+ pi0 PHSP; +#--- 5-body rho-K*pi, rho-2pi-K, K*-3pi, 4pi-K ------------------- +0.000010 rho+ K*+ pi- PHSP; +0.000010 rho- K*+ pi+ PHSP; +0.000010 rho+ K*0 pi0 PHSP; +0.000005 rho+ K*0 eta PHSP; +0.000002 rho+ K*0 eta' PHSP; +0.000010 rho0 K*0 pi+ PHSP; +0.000010 rho0 K*+ pi0 PHSP; +0.000005 rho0 K*+ eta PHSP; +0.000002 rho0 K*+ eta' PHSP; +0.000010 omega K*0 pi+ PHSP; +0.000010 omega K*+ pi0 PHSP; +0.000005 omega K*+ eta PHSP; +0.000002 omega K*+ eta' PHSP; +0.000010 pi+ pi- K*0 pi+ PHSP; +0.000010 pi+ pi0 K*0 pi0 PHSP; +0.000005 pi+ eta K*0 pi0 PHSP; +0.000002 pi+ eta' K*0 pi0 PHSP; +0.000010 pi- pi+ K*+ pi0 PHSP; +0.000005 pi- pi+ K*+ eta PHSP; +0.000002 pi- pi+ K*+ eta' PHSP; +0.000010 pi0 pi0 K*+ pi0 PHSP; +0.000005 pi0 eta K*+ pi0 PHSP; +0.000002 eta eta K*+ pi0 PHSP; +0.000002 pi0 eta' K*+ pi0 PHSP; +0.000001 eta eta' K*+ pi0 PHSP; +0.000010 rho+ K0 pi+ pi- PHSP; +0.000010 rho+ K0 pi0 pi0 PHSP; +0.000005 rho+ K0 eta pi0 PHSP; +0.000002 rho+ K0 eta' pi0 PHSP; +0.000010 rho+ K+ pi- pi0 PHSP; +0.000010 rho- K+ pi+ pi0 PHSP; +0.000010 rho- K0 pi+ pi+ PHSP; +0.000010 rho0 K0 pi+ pi0 PHSP; +0.000010 rho0 K+ pi0 pi0 PHSP; +0.000005 rho0 K+ eta pi0 PHSP; +0.000002 rho0 K+ eta' pi0 PHSP; +0.000010 omega K0 pi+ pi0 PHSP; +0.000010 omega K+ pi0 pi0 PHSP; +0.000005 omega K+ eta pi0 PHSP; +0.000002 omega K+ eta' pi0 PHSP; +0.000002 pi+ pi+ pi- K0 pi0 PHSP; +0.000001 pi+ pi+ pi- K0 eta PHSP; +0.000001 pi+ pi+ pi- K0 eta' PHSP; +0.000002 pi+ pi0 pi0 K0 pi0 PHSP; +0.000001 pi+ eta pi0 K0 pi0 PHSP; +0.000001 pi+ eta eta K0 pi0 PHSP; +0.000002 pi+ pi- pi+ K+ pi- PHSP; +0.000002 pi+ pi- pi0 K+ pi0 PHSP; +0.000001 pi+ pi- eta K+ pi0 PHSP; +0.000001 pi+ pi- eta' K+ pi0 PHSP; +0.000002 pi0 pi0 pi0 K+ pi0 PHSP; +0.000001 pi0 pi0 eta K+ pi0 PHSP; +0.000001 pi0 eta eta K+ pi0 PHSP; +0.000001 pi0 pi0 eta' K+ pi0 PHSP; +0.000001 pi0 eta eta' K+ pi0 PHSP; +0.000010 rho0 K_0*0 pi+ PHSP; +0.000010 rho+ K_0*0 pi0 PHSP; +0.000005 rho+ K_0*0 eta PHSP; +0.000002 rho+ K_0*0 eta' PHSP; +0.000010 rho+ K_0*+ pi- PHSP; +0.000010 rho0 K_0*+ pi0 PHSP; +0.000005 rho0 K_0*+ eta PHSP; +0.000002 rho0 K_0*+ eta' PHSP; +0.000010 pi+ pi+ K_0*0 pi- PHSP; +0.000010 pi+ pi0 K_0*0 pi0 PHSP; +0.000005 pi+ pi0 K_0*0 eta PHSP; +0.000002 pi+ pi0 K_0*0 eta' PHSP; +0.000010 pi0 pi0 K_0*+ pi0 PHSP; +0.000005 pi0 pi0 K_0*+ eta PHSP; +0.000002 pi0 pi0 K_0*+ eta' PHSP; +0.000010 K*0 f_0 pi+ PHSP; +0.000010 K*+ f_0 pi0 PHSP; +0.000005 K*+ f_0 eta PHSP; +0.000002 K*+ f_0 eta' PHSP; +0.000020 a_10 K*+ PHSP; +0.000010 a_10 K+ pi0 PHSP; +0.000010 a_10 K0 pi+ PHSP; +0.000020 a_1+ K*0 PHSP; +0.000010 a_1+ K+ pi- PHSP; +0.000010 a_1+ K0 pi0 PHSP; +0.000005 K*+ a_00 pi0 PHSP; +0.000005 K*0 a_0+ pi0 PHSP; +#--- 5-body K*-K*pi,rho-K-Kpi, K*-K-2pi, phi-3pi, 3pi-K-K ------------ +0.000001 K*0 anti-K*0 pi+ PHSP; +0.000001 anti-K*0 K*+ pi0 PHSP; +0.0000005 anti-K*0 K*+ eta PHSP; +0.0000002 anti-K*0 K*+ eta' PHSP; +0.000001 phi rho0 pi+ PHSP; +0.000001 phi omega pi+ PHSP; +0.000001 phi f_0 pi+ PHSP; +0.000001 phi rho+ pi0 PHSP; +0.0000005 phi rho+ eta PHSP; +0.0000002 phi rho+ eta' PHSP; +0.000001 phi pi+ pi- pi+ PHSP; +0.000001 phi pi+ pi0 pi0 PHSP; +0.0000005 phi pi+ eta pi0 PHSP; +0.0000002 phi pi+ eta' pi0 PHSP; +0.000001 anti-K0 K+ rho+ pi- PHSP; +0.000001 anti-K0 K+ rho- pi+ PHSP; +0.000001 anti-K0 K+ rho0 pi0 PHSP; +0.0000005 anti-K0 K+ rho0 eta PHSP; +0.0000002 anti-K0 K+ rho0 eta' PHSP; +0.000001 anti-K0 K+ omega pi0 PHSP; +0.000001 anti-K0 K+ f_0 pi0 PHSP; +0.000001 K+ K- rho0 pi+ PHSP; +0.000001 K+ K- rho+ pi0 PHSP; +0.0000005 K+ K- rho+ eta PHSP; +0.0000002 K+ K- rho+ eta' PHSP; +0.000001 K+ K- omega pi+ PHSP; +0.000001 K0 anti-K0 rho0 pi+ PHSP; +0.000001 K0 anti-K0 omega pi+ PHSP; +0.000001 K0 anti-K0 f_0 pi+ PHSP; +0.000001 K0 anti-K0 rho+ pi0 PHSP; +0.0000005 K0 anti-K0 rho+ eta PHSP; +0.0000002 K0 anti-K0 rho+ eta' PHSP; +0.000001 K0 K- rho+ pi+ PHSP; +0.0000002 K0 K- pi+ pi+ pi0 PHSP; +0.0000001 K0 K- pi+ pi+ eta PHSP; +0.0000001 K0 K- pi+ pi+ eta' PHSP; +0.0000002 K+ K- pi+ pi- pi+ PHSP; +0.0000002 K+ K- pi+ pi0 pi0 PHSP; +0.0000001 K+ K- pi+ eta pi0 PHSP; +0.0000001 K+ K- pi+ eta' pi0 PHSP; +0.0000002 K0 anti-K0 pi+ pi- pi+ PHSP; +0.0000002 K0 anti-K0 pi+ pi0 pi0 PHSP; +0.0000001 K0 anti-K0 pi+ eta pi0 PHSP; +0.0000001 K0 anti-K0 pi+ eta' pi0 PHSP; +0.0000002 anti-K0 K+ pi+ pi- pi0 PHSP; +0.0000001 anti-K0 K+ pi+ pi- eta PHSP; +0.0000001 anti-K0 K+ pi+ pi- eta' PHSP; +0.0000002 anti-K0 K+ pi0 pi0 pi0 PHSP; +0.0000001 anti-K0 K+ pi0 eta pi0 PHSP; +0.0000001 anti-K0 K+ pi0 eta' pi0 PHSP; +0.000001 K*0 K- pi+ pi+ PHSP; +0.000001 K*- K0 pi+ pi+ PHSP; +0.000001 K*+ K- pi+ pi0 PHSP; +0.000001 K*- K+ pi+ pi0 PHSP; +0.000001 K*0 anti-K0 pi+ pi0 PHSP; +0.000001 K0 anti-K*0 pi+ pi0 PHSP; +0.000001 K+ anti-K*0 pi0 pi0 PHSP; +0.0000005 K+ anti-K*0 eta pi0 PHSP; +0.0000002 K+ anti-K*0 eta' pi0 PHSP; +0.000001 K*+ anti-K0 pi0 pi0 PHSP; +0.0000005 K*+ anti-K0 eta pi0 PHSP; +0.0000002 K*+ anti-K0 eta' pi0 PHSP; +#--- 5-body phi-K*-pi, phi-K-2pi, K-K-K*-pi, 2pi-K-K-K -------------------- +0.000010 phi K*+ pi0 PHSP; +0.000010 phi K+ rho0 PHSP; +0.000010 phi K+ omega PHSP; +0.000010 phi K+ f_0 PHSP; +0.000010 phi K0 rho+ PHSP; +0.000010 phi K0 pi+ pi0 PHSP; +0.000010 phi K+ pi+ pi- PHSP; +0.000010 phi K+ pi0 pi0 PHSP; +0.000005 phi K+ eta pi0 PHSP; +0.000002 phi K+ eta' pi0 PHSP; +0.000010 K- K+ K*+ pi0 PHSP; +0.000010 K+ K*- K+ pi0 PHSP; +0.000010 K+ K*0 anti-K0 pi0 PHSP; +0.000010 K+ K0 anti-K*0 pi0 PHSP; +0.000010 K0 K*+ anti-K0 pi0 PHSP; +0.000010 K- K+ K+ rho0 PHSP; +0.000010 K- K+ K+ omega PHSP; +0.000010 K- K+ K+ f_0 PHSP; +0.000010 K- K+ K0 rho+ PHSP; +0.000010 K+ K- K+ pi0 pi0 PHSP; +0.000005 K+ K- K+ eta pi0 PHSP; +0.000002 K+ K- K+ eta' pi0 PHSP; +0.000010 K+ K- K0 pi+ pi0 PHSP; +0.000010 K0 anti-K0 K+ pi0 pi0 PHSP; +0.000005 K0 anti-K0 K+ eta pi0 PHSP; +0.000002 K0 anti-K0 K+ eta' pi0 PHSP; +0.000010 K0 anti-K0 K0 pi+ pi0 PHSP; +0.000010 phi K_0*0 pi+ PHSP; +0.000010 phi K_0*+ pi0 PHSP; +0.000005 phi K_0*+ eta PHSP; +0.000002 phi K_0*+ eta' PHSP; +0.000010 K- K+ K_0*+ pi0 PHSP; +0.000005 K- K+ K_0*+ eta PHSP; +0.000002 K- K+ K_0*+ eta' PHSP; +0.000010 K+ K+ K_0*- pi0 PHSP; +0.000005 K+ K+ K_0*- eta PHSP; +0.000002 K+ K+ K_0*- eta' PHSP; +0.000010 K- K+ K_0*0 pi+ PHSP; +0.000010 K+ K+ anti-K_0*0 pi- PHSP; +0.000010 K0 K0 anti-K_0*0 pi+ PHSP; +0.000010 K+ anti-K_0*0 K0 pi0 PHSP; +0.000005 K+ anti-K_0*0 K0 eta PHSP; +0.000002 K+ anti-K_0*0 K0 eta' PHSP; +0.000010 K+ K_0*0 anti-K0 pi0 PHSP; +0.000005 K+ K_0*0 anti-K0 eta PHSP; +0.000002 K+ K_0*0 anti-K0 eta' PHSP; +0.000002 phi K'_10 pi+ PHSP; +0.000002 phi K'_1+ pi0 PHSP; +0.000001 phi K'_1+ eta PHSP; +0.000001 phi K'_1+ eta' PHSP; +0.000002 K- K+ K'_10 pi+ PHSP; +0.000002 K- K+ K'_1+ pi0 PHSP; +0.000001 K- K+ K'_1+ eta PHSP; +0.000001 K- K+ K'_1+ eta' PHSP; +0.000002 K+ K+ K'_1- pi0 PHSP; +0.000002 K+ K+ anti-K'_10 pi- PHSP; +0.000002 K0 anti-K0 K'_10 pi+ PHSP; +0.000002 K0 anti-K0 K'_1+ pi0 PHSP; +0.000001 K0 anti-K0 K'_1+ eta PHSP; +0.000001 K0 anti-K0 K'_1+ eta' PHSP; +0.000002 K0 K0 anti-K'_10 pi+ PHSP; +0.000002 anti-K0 anti-K0 K'_1+ pi0 PHSP; +0.000001 anti-K0 anti-K0 K'_1+ eta PHSP; +0.000001 anti-K0 anti-K0 K'_1+ eta' PHSP; +0.000010 K+ K0 anti-K'_10 pi0 PHSP; +0.000005 K+ K0 anti-K'_10 eta PHSP; +0.000002 K+ K0 anti-K'_10 eta' PHSP; +0.000010 K+ K'_10 anti-K0 pi0 PHSP; +0.000005 K+ K'_10 anti-K0 eta PHSP; +0.000002 K+ K'_10 anti-K0 eta' PHSP; +#--- 5-body phi-phi-K, phi-phi-pi, phi-3K, phi-K-K-pi, 5K, 4K-pi ------------ +0.000004900 phi phi K+ PHSP; #[Reconstructed PDG2011] +0.000001 phi phi pi+ PHSP; +0.000001 phi K+ K- K+ PHSP; +0.000001 phi K0 anti-K0 K+ PHSP; +0.000001 phi K0 anti-K0 pi+ PHSP; +0.000001 phi anti-K0 K+ pi0 PHSP; +0.000001 K+ K- K+ K- pi+ PHSP; +0.000001 K+ K- K0 anti-K0 pi+ PHSP; +0.000001 K+ K- K+ anti-K0 pi0 PHSP; +0.000001 K0 anti-K0 anti-K0 K+ pi0 PHSP; +#--- 6-body phi-phi-K*, phi-3Kpi, phi-K-K-2pi ------------ +0.000003 phi phi K*+ PHSP; +0.000001 phi K+ K- K*+ PHSP; +0.000001 phi K0 anti-K0 K*+ PHSP; +0.000001 phi anti-K0 K+ K*0 PHSP; +0.000001 phi K+ K- K+ pi0 PHSP; +0.000001 phi K+ K- K0 pi+ PHSP; +0.000001 phi K0 anti-K0 K+ pi0 PHSP; +0.000001 phi K0 anti-K0 K0 pi+ PHSP; +0.000001 phi anti-K0 K+ K+ pi- PHSP; +#--- 6-body a1a1 ------------ +0.000050 a_1+ a_10 PHSP; +# +# B -> cc= s sum = 1.92% +# +0.001014000 J/psi K+ SVS; #[Reconstructed PDG2011] +0.001430000 J/psi K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.000049000 J/psi pi+ SVS; #[Reconstructed PDG2011] +0.000050000 J/psi rho+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0002 J/psi K0 pi+ PHSP; +0.0001 J/psi K+ pi0 PHSP; +#rl0.0007 J/psi K+ pi- pi+ PHSP; +#rl0.00035 J/psi K+ pi0 pi0 PHSP; +#rl0.00035 J/psi K0 pi+ pi0 PHSP; +0.0001 J/psi K'_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; +0.0005 J/psi K_2*+ PHSP; +0.001800000 J/psi K_1+ SVV_HELAMP 0.5 0.0 1.0 0.0 0.5 0.0; #[Reconstructed PDG2011] +0.000052000 J/psi phi K+ PHSP; #[Reconstructed PDG2011] +# +0.000646000 psi(2S) K+ SVS; #[Reconstructed PDG2011] +0.000620000 psi(2S) K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 psi(2S) K0 pi+ PHSP; +0.0002 psi(2S) K+ pi0 PHSP; +0.001900000 psi(2S) K+ pi- pi+ PHSP; #[Reconstructed PDG2011] +0.0001 psi(2S) K+ pi0 pi0 PHSP; +0.0001 psi(2S) K0 pi+ pi0 PHSP; +0.0004 psi(2S) K_1+ PHSP; +# +0.000910000 eta_c K+ PHSP; #[Reconstructed PDG2011] +0.001200000 K*+ eta_c SVS; #[Reconstructed PDG2011] +0.0002 eta_c K0 pi+ PHSP; +0.0001 eta_c K+ pi0 PHSP; +0.0002 eta_c K+ pi- pi+ PHSP; +0.0001 eta_c K+ pi0 pi0 PHSP; +0.0001 eta_c K0 pi+ pi0 PHSP; +# +0.000340000 eta_c(2S) K+ PHSP; #[Reconstructed PDG2011] +0.00048 K*+ eta_c(2S) SVS; +0.00008 eta_c(2S) K0 pi+ PHSP; +0.00005 eta_c(2S) K+ pi0 PHSP; +0.00008 eta_c(2S) K+ pi- pi+ PHSP; +0.00005 eta_c(2S) K+ pi0 pi0 PHSP; +0.00005 eta_c(2S) K0 pi+ pi0 PHSP; +# +0.000133000 chi_c0 K+ PHSP; #[Reconstructed PDG2011] +0.0004 K*+ chi_c0 SVS; +0.0002 chi_c0 K0 pi+ PHSP; +0.0001 chi_c0 K+ pi0 PHSP; +0.0002 chi_c0 K+ pi- pi+ PHSP; +0.0001 chi_c0 K+ pi0 pi0 PHSP; +0.0001 chi_c0 K0 pi+ pi0 PHSP; +# +0.000460000 chi_c1 K+ SVS; #[Reconstructed PDG2011] +0.000300000 chi_c1 K*+ SVV_HELAMP PKHplus PKphHplus PKHzero PKphHzero PKHminus PKphHminus; #[Reconstructed PDG2011] +0.0004 chi_c1 K0 pi+ PHSP; +0.0002 chi_c1 K+ pi0 PHSP; +0.0004 chi_c1 K+ pi- pi+ PHSP; +0.0002 chi_c1 K+ pi0 pi0 PHSP; +0.0002 chi_c1 K0 pi+ pi0 PHSP; +# +0.00002 chi_c2 K+ STS; +0.00002 chi_c2 K*+ PHSP; +0.0002 chi_c2 K0 pi+ PHSP; +0.0001 chi_c2 K+ pi0 PHSP; +0.0002 chi_c2 K+ pi- pi+ PHSP; +0.0001 chi_c2 K+ pi0 pi0 PHSP; +0.0001 chi_c2 K0 pi+ pi0 PHSP; +# +0.000490000 psi(3770) K+ SVS; #[Reconstructed PDG2011] +0.0005 psi(3770) K*+ PHSP; +0.0003 psi(3770) K0 pi+ PHSP; +0.0002 psi(3770) K+ pi0 PHSP; +0.0002 psi(3770) K+ pi- pi+ PHSP; +0.0001 psi(3770) K+ pi0 pi0 PHSP; +0.0001 psi(3770) K0 pi+ pi0 PHSP; +0.0003 psi(3770) K_1+ PHSP; +# +# b -> c (sc=) -> D Ds X Sum = 10% +# +0.010000000 anti-D0 D_s+ PHSP; #[Reconstructed PDG2011] +0.008200000 anti-D*0 D_s+ SVS; #[Reconstructed PDG2011] +0.007600000 D_s*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.017100000 D_s*+ anti-D*0 SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; #[Reconstructed PDG2011] +0.0006 anti-D'_10 D_s+ SVS; +0.0012 anti-D'_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0012 anti-D_10 D_s+ SVS; +0.0024 anti-D_10 D_s*+ SVV_HELAMP 0.48 0.0 0.734 0.0 0.48 0.0; +0.0042 anti-D_2*0 D_s+ STS; +0.0040 anti-D_2*0 D_s*+ PHSP; +# +# +# +# +# +0.0036 D_s+ D- pi+ PHSP; +0.0018 D_s+ anti-D0 pi0 PHSP; +0.0037 D_s*+ D- pi+ PHSP; +0.0018 D_s*+ anti-D0 pi0 PHSP; +0.0033 D_s+ D- pi+ pi0 PHSP; +0.0033 D_s+ anti-D0 pi+ pi- PHSP; +0.0008 D_s+ anti-D0 pi0 pi0 PHSP; +0.0033 D_s*+ D- pi+ pi0 PHSP; +0.0033 D_s*+ anti-D0 pi+ pi- PHSP; +0.0008 D_s*+ anti-D0 pi0 pi0 PHSP; +# +# b -> c (sc=) -> D D= K X Sum = 8% +# update: Ref. [B1]: +# update October 26, 2004 +# External W-emission amplitude +0.0017 anti-D0 D+ K0 PHSP; +0.0052 anti-D0 D*+ K0 PHSP; +0.0031 anti-D*0 D+ K0 PHSP; +0.007800000 anti-D*0 D*+ K0 PHSP; #[Reconstructed PDG2011] +# External+internal W-emission amplitude +0.002100000 anti-D0 D0 K+ PHSP; #[Reconstructed PDG2011] +0.0018 anti-D*0 D0 K+ PHSP; +0.004700000 anti-D0 D*0 K+ PHSP; #[Reconstructed PDG2011] +0.005300000 anti-D*0 D*0 K+ PHSP; #[Reconstructed PDG2011] +# Internal W-emission amplitude (color suppressed modes) +0.0005 D+ D- K+ PHSP; +0.0005 D*+ D- K+ PHSP; +0.001500000 D+ D*- K+ PHSP; #[Reconstructed PDG2011] +0.0015 D*+ D*- K+ PHSP; +# +0.0025 anti-D0 D+ K*0 PHSP; +0.0025 anti-D*0 D+ K*0 PHSP; +0.0025 anti-D0 D*+ K*0 PHSP; +0.0050 anti-D*0 D*+ K*0 PHSP; +# +0.0025 anti-D0 D0 K*+ PHSP; +0.0025 anti-D*0 D0 K*+ PHSP; +0.0025 anti-D0 D*0 K*+ PHSP; +0.0050 anti-D*0 D*0 K*+ PHSP; +# +0.0005 D+ D- K*+ PHSP; +0.0005 D*+ D- K*+ PHSP; +0.0005 D+ D*- K*+ PHSP; +0.0010 D*+ D*- K*+ PHSP; +# +# B->D(*)D(*). See Ref [B1]: +# +0.000380000 D+ anti-D0 PHSP; #[Reconstructed PDG2011] +0.000390000 D*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000630000 anti-D*0 D+ SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 D*+ SVV_HELAMP 0.56 0.0 0.96 0.0 0.47 0.0; #[Reconstructed PDG2011] + +# +# B -> D(*) X Exclusive Modes +# October 26, 2004 Lange update +0.005190000 anti-D*0 pi+ SVS; #[Reconstructed PDG2011] +0.004840000 anti-D0 pi+ PHSP; #[Reconstructed PDG2011] +0.013400000 rho+ anti-D0 SVS; #[Reconstructed PDG2011] +# D* rho HELAMP parameters taken from ICHEP 98-852. +0.009800000 anti-D*0 rho+ SVV_HELAMP 0.283 1.13 0.932 0.0 0.228 0.95; #[Reconstructed PDG2011] +# +0.0005 anti-D0 pi0 pi+ PHSP; +0.0005 anti-D*0 pi0 pi+ PHSP; +0.001070000 D- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.001350000 D*- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +# D a1 updated Ref. [B1]: +0.004000000 a_1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000200000 anti-D0 rho0 pi+ PHSP; #[Reconstructed PDG2011] +0.006800000 anti-D0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +# SVV_HELAMP from factorization, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/168.html: +# updated Ref. [B1]: +# October 26, 2004 Lange update +# +0.019000000 anti-D*0 a_1+ SVV_HELAMP 0.458 0.0 0.866 0.0 0.200 0.0; #[Reconstructed PDG2011] +# +0.00042 anti-D*0 rho0 pi+ PHSP; +0.010300000 anti-D*0 pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +# +0.0020 D- rho+ pi+ PHSP; +0.0020 D- pi0 pi+ pi+ PHSP; +0.0020 D*- rho+ pi+ PHSP; +0.015000000 D*- pi0 pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0005 anti-D*0 rho+ pi0 PHSP; +0.0005 anti-D*0 pi+ pi0 pi0 PHSP; +# +# B->D** pi and D** rho, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html +# +# +0.000876 anti-D_10 pi+ SVS; +0.0005 anti-D'_10 pi+ SVS; +0.00052 anti-D_2*0 pi+ STS; +0.0007 anti-D_10 rho+ PHSP; +0.0022 anti-D'_10 rho+ PHSP; +0.0038 anti-D_2*0 rho+ PHSP; +0.00061 anti-D_0*0 pi+ PHSP; +# +# +# B->DK, recommendation +# http://babar-hn.slac.stanford.edu:5090/HyperNews/get/event_gen/151.html: +# update: Ref [B1]: +# +0.000368000 anti-D0 K+ PHSP; #[Reconstructed PDG2011] +0.000421000 anti-D*0 K+ SVS; #[Reconstructed PDG2011] +0.000530000 K*+ anti-D0 SVS; #[Reconstructed PDG2011] +0.000810000 anti-D*0 K*+ SVV_HELAMP 0.283 0.0 0.932 0.0 0.228 0.0; #[Reconstructed PDG2011] +#October 26, 2004 Lange +0.0000005 D+ pi0 PHSP; +0.0000005 D*+ pi0 SVS; +0.000011 D+ anti-K0 PHSP; +0.000006 D*+ anti-K0 SVS; +# +#October 26, 2004 - Lange +0.00075 anti-D0 D_s0*+ PHSP; +0.00090 anti-D*0 D_s0*+ SVS; +0.003100000 D_s1+ anti-D0 SVS; #[Reconstructed PDG2011] +0.012000000 anti-D*0 D_s1+ SVV_HELAMP 0.4904 0.0 0.7204 0.0 0.4904 0.0; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.000550000 anti-D0 K+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000750000 anti-D0 K+ anti-K*0 PHSP; #[Reconstructed PDG2011] +0.00150 anti-D*0 K+ anti-K*0 PHSP; +# +# Feb 2009 +# +0.002750000 anti-D0 omega pi+ PHSP; #[Reconstructed PDG2011] +0.004500000 anti-D*0 omega pi+ PHSP; #[Reconstructed PDG2011] +# +# Feb 2009 +# +0.00045 anti-D0 D'_s1+ PHSP; +0.00094 anti-D*0 D'_s1+ PHSP; +# +# Lam_c X / Sigma_c X +# +#0.04000 anti-cd_1 uu_1 PYTHIA 23; +0.032572352 anti-cd_1 uu_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Xi_c X 2.4% +# +#0.02400 anti-cs_1 uu_1 PYTHIA 23; +0.008883411 anti-cs_1 uu_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# +0.207499550685009 u anti-d anti-c u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 1 MDS +0.0390359789361978 u anti-d anti-c u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 2 +0.0204257975844551 u anti-s anti-c u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 3 +0.0671781832186732 c anti-s anti-c u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 4 +0.00363122970623046 c anti-d anti-c u PYTHIA 13; #[Reconstructed PDG2011] #JB rescaled to add up to 5 +0.00272342250960572 u anti-d anti-u u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 6 +0.00363122970623046 c anti-s anti-u u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 7 +0.00186101785925481 u anti-u anti-d u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 8 +0.000063564484514864 d anti-d anti-d u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 9 +0.000081725503024392 s anti-s anti-d u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 10 +0.00199722825727082 u anti-u anti-s u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 11 +0.00163408790372213 d anti-d anti-s u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 12 +0.0013617544821841 s anti-s anti-s u PYTHIA 48; #[Reconstructed PDG2011] #JB rescaled to add up to 13 +0.004935177 anti-s u PYTHIA 32; #[Reconstructed PDG2011] +#### +0.001500000 anti-D*0 K+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 anti-D*0 pi- pi+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 anti-D*0 pi+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002600000 D*- pi+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 D_s- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000145000 D_s*- pi+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011000 D_s- K+ K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001070000 J/psi K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000108000 J/psi eta K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 J/psi omega K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011800 J/psi p+ anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000025800 psi(2S) pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 chi_c1 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000018000 eta K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009100 eta K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000024000 omega K_0*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000021000 omega K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000010100 K*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001070 f_2 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005600 K_2*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001200 K*+ K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000006100 phi K_1+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000008400 phi K_2*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000043000 K_1+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007900 eta K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003500 phi K+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000007600 K+ pi- pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 K*0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000046000 K0 pi+ pi0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 K_2*+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000980 rho+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000001620 p+ anti-p- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000005900 p+ anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003600 p+ anti-p- K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002500 p+ anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003000 p+ anti-Lambda0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004800 p+ anti-Lambda0 rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002000 p+ anti-Lambda0 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000003400 Lambda0 anti-Lambda0 K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000002200 Lambda0 anti-Lambda0 K*+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Lambda_c- p+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 anti-Lambda_c- p+ pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002300000 anti-Lambda_c- p+ pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000035000 anti-Sigma_c0 p+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000440000 anti-Sigma_c0 p+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 anti-Sigma_c-- p+ pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +#----------------------------------------------------------------- +# B references: +# +# [B1]: http://www.slac.stanford.edu/BFROOT/www/Physics/Tools/generators/dec-update/2002/Breco-recommendations.html +# +#----------------------------------------------------------------- + + +# +# +# B* mesons +# +Decay B*+ +1.0000 B+ gamma VSP_PWAVE; +Enddecay +Decay B*- +1.0000 B- gamma VSP_PWAVE; +Enddecay +Decay B*0 +1.0000 B0 gamma VSP_PWAVE; +Enddecay +Decay anti-B*0 +1.0000 anti-B0 gamma VSP_PWAVE; +Enddecay +Decay B_s*0 +1.0000 B_s0 gamma VSP_PWAVE; +Enddecay +Decay anti-B_s*0 +1.0000 anti-B_s0 gamma VSP_PWAVE; +Enddecay +# +# B_s decays. +# +# +# To count up the BR for this decay: +# awk ' /^0./{ sum = sum + $1 ;print sum } ' junk.dec +# +# anti-B_s decays. +# ------------------------------------------------------- +# whb&fkw 3/28/01 Taken from fkw's QQ tables. +# most dubious part are the B to baryons. +# fkw 4/28/00 made the Bs parallel to the Bd as best as I could +# ------------------------------------------------------- +# +# Lange - Nov14 - NOT adjusted for D_s->phipi change +# +Decay anti-B_s0 +# b --> c (l nu) +# Sum = 24.5% +0.0210 D_s+ e- anti-nu_e PHOTOS ISGW2; +0.0490 D_s*+ e- anti-nu_e PHOTOS ISGW2; +0.0040 D_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0040 D_s0*+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D'_s1+ e- anti-nu_e PHOTOS ISGW2; +0.0070 D_s2*+ e- anti-nu_e PHOTOS ISGW2; +# +0.0210 D_s+ mu- anti-nu_mu PHOTOS ISGW2; +0.0490 D_s*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0040 D_s0*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D'_s1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0070 D_s2*+ mu- anti-nu_mu PHOTOS ISGW2; +# +#0.0070 D_s+ tau- anti-nu_tau ISGW2; +#0.0150 D_s*+ tau- anti-nu_tau ISGW2; +#0.0013 D_s1+ tau- anti-nu_tau ISGW2; +#0.0013 D_s0*+ tau- anti-nu_tau ISGW2; +#0.0023 D'_s1+ tau- anti-nu_tau ISGW2; +#0.0023 D_s2*+ tau- anti-nu_tau ISGW2; +# fkw 5/04/01 changed the above to account for the non-res part that I +# had to take out. +0.0080 D_s+ tau- anti-nu_tau ISGW2; +0.0160 D_s*+ tau- anti-nu_tau ISGW2; +0.0018 D_s1+ tau- anti-nu_tau ISGW2; +0.0018 D_s0*+ tau- anti-nu_tau ISGW2; +0.0028 D'_s1+ tau- anti-nu_tau ISGW2; +0.0028 D_s2*+ tau- anti-nu_tau ISGW2; +# +# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped +# between the charm quark and the spectator. I can thus not +# just replace a D by a Ds as above when going from Bd to Bs. +# fkw 5/04/01 Had to take these out because they crash EvtGen. +# Will have to fix this eventually !!! +#0.0010 D*0 K+ tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D*+ K0 tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D0 K+ tau- anti-nu_tau GOITY_ROBERTS; +#0.0010 D+ K0 tau- anti-nu_tau GOITY_ROBERTS; +# fkw 4/28/00 B0B -> TAU D PI0 = 1/2 of TAU D PI+ because of pi0 wave function +# However, the same factor of 1/2 doesn't apply to BSB !!! +# +# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. +# I don't pretend to understand why. PDG 2000 has a limit of +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +#0.0050 anti-nu_e e- ??? Baryon +#0.0050 anti-nu_mu mu- ??? Baryon +# +# b --> c (s c=) +# Sum = 11.44% +# 2-body = 4.72% +# more-body = 6.72% +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; +0.0099 D_s*- D_s+ SVS; +0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/28/00 more states with popped q\bar q. +# The one's here involve only popped and spectator. +# Popping stuff in the cs from the W comes further below. +# The same isospin comment applies here as above in the +# semi-leptonic decays with tau and popped q\bar q. +0.0096 D_s- D+ K0 PHSP; +0.0096 D_s- anti-D0 K+ PHSP; +0.0096 D_s*- D+ K0 PHSP; +0.0096 D_s*- D0 K+ PHSP; +# +0.0024 D_s- D+ pi0 K0 PHSP; +0.0048 D_s- D0 pi+ K0 PHSP; +0.0048 D_s- D+ pi- K+ PHSP; +0.0024 D_s- D0 pi0 K+ PHSP; +# +0.0024 D_s*- D+ pi0 K0 PHSP; +0.0048 D_s*- D0 pi+ K0 PHSP; +0.0048 D_s*- D+ pi- K+ PHSP; +0.0024 D_s*- D0 pi0 K+ PHSP; +# +# +# b --> (c ) (c ) (s ) +# Sum = 8.0% +# DDK amplitudes R.A.Briere 10/97 +# fkw 4/28/00 these are q\bar q popping that don't involve the spectator +# Bd->Bs just involves switching the c\bar d to c\bar s. +# +0.0150 D_s*+ anti-D*0 K- PHSP; +0.0150 D_s*+ D*- anti-K0 PHSP; +# +0.0050 D_s*+ anti-D0 K- PHSP; +0.0050 D_s*+ D- anti-K0 PHSP; +# +0.0050 D_s+ anti-D*0 K- PHSP; +0.0050 D_s+ D*- anti-K0 PHSP; +# +0.0020 D_s+ anti-D0 K- PHSP; +0.0020 D_s+ D- anti-K0 PHSP; +# +0.0030 D_s*+ anti-D*0 K*- PHSP; +0.0030 D_s*+ D*- anti-K*0 PHSP; +# +0.0050 D_s*+ anti-D0 K*- PHSP; +0.0050 D_s*+ D- anti-K*0 PHSP; +# +0.0025 D_s+ anti-D*0 K*- PHSP; +0.0025 D_s+ D*- anti-K*0 PHSP; +# +0.0025 D_s+ anti-D0 K*- PHSP; +0.0025 D_s+ D- anti-K*0 PHSP; +# +# +# b --> c (d c=) +# Sum = 1.0% +0.0017 D_s- D+ PHSP; +0.0017 D*+ D_s- SVS; +0.0017 D_s*- D+ SVS; +0.0017 D_s*- D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/38/00 more popping at the lower vertex +# but with upper vertex cabbibo suppressed. +0.0007 D- D+ K0 PHSP; +0.0007 D- anti-D0 K+ PHSP; +0.0007 D*- D+ K0 PHSP; +0.0007 D*- D0 K+ PHSP; +# +0.0003 D- D+ pi0 K0 PHSP; +0.0007 D- D0 pi+ K0 PHSP; +0.0003 D- D+ pi- K+ PHSP; +0.0007 D- D0 pi0 K+ PHSP; +# +0.0003 D*- D+ pi0 K0 PHSP; +0.0007 D*- D0 pi+ K0 PHSP; +0.0003 D*- D+ pi- K+ PHSP; +0.0007 D*- D0 pi0 K+ PHSP; +# +# b --> c (s u=) +# exclusive +# Sum = 0.09% +0.00015 D_s*+ K- SVS; +0.000150000 D_s+ K- PHSP; #[Reconstructed PDG2011] +0.00030 D_s*+ K*- SVV_HELAMP 0.228 0.0 0.932 0.0 0.0283 0.0; +0.00030 K*- D_s+ SVS; +# +# fkw 4/28/00 Strategy for charmonium modes: +# Take Bd BR's, replace spectator, +# assume etaprime = 2/3 ss +# and eta = 1/3 ss +# +# Note: Just for kicks I gave the c\bar c decays a small piece that is +# self tagging. See if you can find it. This is already in +# the B0 decays in cleo's version of decay.dec . +# +# B --> (c c=) (s s=) +# 2.65% +# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. +0.00064 J/psi eta' SVS; +0.00032 J/psi eta SVS; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.00008 J/psi K0 SVS; +0.00070 J/psi K- K+ PHSP; +0.00070 J/psi anti-K0 K0 PHSP; +0.00070 J/psi anti-K0 K+ pi- PHSP; +0.00070 J/psi anti-K0 K0 pi0 PHSP; +0.00070 J/psi K- K+ pi0 PHSP; +# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) +0.00039 J/psi phi pi+ pi- PHSP; +0.00039 J/psi phi pi0 pi0 PHSP; +# LHCb PR add (cc) phi eta(') + npi see CDF QQ +0.0002 J/psi eta pi+ pi- PHSP; +0.0002 J/psi eta pi0 pi0 PHSP; +0.0004 J/psi eta' pi+ pi- PHSP; +0.0004 J/psi eta' pi0 pi0 PHSP; +0.0002 J/psi pi+ pi- PHSP; +0.0002 J/psi pi0 pi0 PHSP; +# psi' = 0.34% CLNS 94/1315 +# +0.000465 psi(2S) eta' SVS; +0.000235 psi(2S) eta SVS; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0003 psi(2S) K- K+ PHSP; +0.0003 psi(2S) anti-K0 K0 PHSP; +0.0003 psi(2S) anti-K0 K+ pi- PHSP; +0.0003 psi(2S) anti-K0 K0 pi0 PHSP; +0.0003 psi(2S) K- K+ pi0 PHSP; +0.00034 psi(2S) phi pi+ pi- PHSP; +0.00034 psi(2S) phi pi0 pi0 PHSP; +0.0002 psi(2S) eta pi+ pi- PHSP; +0.0002 psi(2S) eta pi0 pi0 PHSP; +0.0004 psi(2S) eta' pi+ pi- PHSP; +0.0004 psi(2S) eta' pi0 pi0 PHSP; +0.0002 psi(2S) pi+ pi- PHSP; +0.0002 psi(2S) pi0 pi0 PHSP; +# +# chic0 = 0.05% (20% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.00010 chi_c0 eta' PHSP; +0.00005 chi_c0 eta PHSP; +0.00020 phi chi_c0 SVS; +0.00003 chi_c0 K- K+ PHSP; +0.00003 chi_c0 anti-K0 K0 PHSP; +0.00003 chi_c0 anti-K0 K+ pi- PHSP; +0.00003 chi_c0 anti-K0 K0 pi0 PHSP; +0.00003 chi_c0 K- K+ pi0 PHSP; +# +# +# chic1 = 0.37% CLNS 94/1315 +0.0007 chi_c1 eta' SVS; +0.0003 chi_c1 eta SVS; +0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00026 chi_c1 K- K+ PHSP; +0.00026 chi_c1 anti-K0 K0 PHSP; +0.00026 chi_c1 anti-K0 K+ pi- PHSP; +0.00026 chi_c1 anti-K0 K0 pi0 PHSP; +0.00026 chi_c1 K- K+ pi0 PHSP; +0.00040 chi_c1 phi pi+ pi- PHSP; +0.00040 chi_c1 phi pi0 pi0 PHSP; +0.0001 chi_c1 eta pi+ pi- PHSP; +0.0001 chi_c1 eta pi0 pi0 PHSP; +0.0002 chi_c1 eta' pi+ pi- PHSP; +0.0002 chi_c1 eta' pi0 pi0 PHSP; +# +# +# chic2 = 0.25% CLNS 94/1315 +0.000465 chi_c2 eta' STS; +0.000235 chi_c2 eta STS; +#0.0010 chi_c2 phi STV; whb: model doesn't exist! +0.00016 chi_c2 K- K+ PHSP; +0.00016 chi_c2 anti-K0 K0 PHSP; +0.00016 chi_c2 anti-K0 K+ pi- PHSP; +0.00016 chi_c2 anti-K0 K0 pi0 PHSP; +0.00016 chi_c2 K- K+ pi0 PHSP; +# +# +# etac(1s) = 0.41% Guess: CBX 97-65 +# +0.0008 eta_c eta' PHSP; +0.0004 eta_c eta PHSP; +0.0015 phi eta_c SVS; +0.00028 eta_c K- K+ PHSP; +0.00028 eta_c anti-K0 K0 PHSP; +0.00028 eta_c anti-K0 K+ pi- PHSP; +0.00028 eta_c anti-K0 K0 pi0 PHSP; +0.00028 eta_c K- K+ pi0 PHSP; +0.00040 eta_c phi pi+ pi- PHSP; +0.00040 eta_c phi pi0 pi0 PHSP; +0.0001 eta_c eta pi+ pi- PHSP; +0.0001 eta_c eta pi0 pi0 PHSP; +0.0002 eta_c eta' pi+ pi- PHSP; +0.0002 eta_c eta' pi0 pi0 PHSP; +# +# +# etac(2s) = 0.18% Guess: CBX 97-65 +0.0004 eta_c(2S) eta' PHSP; +0.0002 eta_c(2S) eta PHSP; +0.0006 phi eta_c(2S) SVS; +0.00012 eta_c(2S) K- K+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 PHSP; +0.00012 eta_c(2S) anti-K0 K+ pi- PHSP; +0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; +0.00012 eta_c(2S) K- K+ pi0 PHSP; +# +# +# hc = 0.25% (100% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +# +0.000465 h_c eta' SVS; +0.000235 h_c eta SVS; +0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00016 h_c K- K+ PHSP; +0.00016 h_c anti-K0 K0 PHSP; +0.00016 h_c anti-K0 K+ pi- PHSP; +0.00016 h_c anti-K0 K0 pi0 PHSP; +0.00016 h_c K- K+ pi0 PHSP; +# +# +# b --> c (d u=) +# Exclusive Channels = 6.33% +# fkw 4/28/00 I rearanged this a bit after copying it from +# B0B decay list. +# +# first come the external W-emission decays: +# +0.0008 D_s1+ pi- SVS; +0.0021 D_s1+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0013 D_s2*+ pi- STS; +#0.0037 D_s2*+ rho- STV; # whb: model doesn't exist +# +0.0027 D_s*+ pi- SVS; +0.003200000 D_s+ pi- PHSP; #[Reconstructed PDG2011] +0.0073 rho- D_s+ SVS; +0.0070 D_s*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0085 a_1- D_s+ SVS; +0.0009 D_s+ rho0 pi- PHSP; +0.0009 D_s+ rho- pi0 PHSP; +0.008400000 D_s+ pi+ pi- pi- PHSP; #[Reconstructed PDG2011] +0.0009 D_s+ pi0 pi- pi0 PHSP; +# +0.0122 D_s*+ a_1- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0010 D_s*+ rho0 pi- PHSP; +0.0010 D_s*+ rho- pi0 PHSP; +0.0077 D_s*+ pi+ pi- pi- PHSP; +0.0010 D_s*+ pi0 pi- pi0 PHSP; +# +# then the color suppressed decays: +# +# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin +# i.e. Bs doesn't have the factor 2 suppression Bd has. +0.0002 D*0 K0 SVS; +0.0002 D0 K0 PHSP; +0.0002 K*0 D0 SVS; +0.0002 D*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# PR LHCb Add p pbar mode +0.000000001 p+ anti-p- PHSP; +# fkw 4/28/00 ignore the internal W emission decays with additional +# q\bar q popping. +# +# Here come the various types of "inclusive unknown" decays: +# +# Start with B to baryons: +# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! +# Mark Whitehead 30/4/2010 Weighted PYHTIA to get total BF = 100% +0.019574780 cs_0 anti-ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.039129957 cs_1 anti-ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Next come external W-emission: +0.301256716 anti-u d c anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.048443906 anti-u d c anti-s PYTHIA 25; #[Reconstructed PDG2011] +# Now the internal W-emission: +0.019086636 anti-u c d anti-s PYTHIA 48; #[Reconstructed PDG2011] +# Then some b->u external W-emission with upper vertex charm +0.003912996 anti-c s u anti-s PYTHIA 48; #[Reconstructed PDG2011] +# and finally some cabibbo suppressed external and internal W-emission +0.014683536 anti-u s c anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.002152148 anti-u s c anti-s PYTHIA 25; #[Reconstructed PDG2011] +0.000880424 anti-u c s anti-s PYTHIA 48; #[Reconstructed PDG2011] +# and some c cbar d stuff as well as c cbar s +0.005391151 anti-c d c anti-s PYTHIA 13; #[Reconstructed PDG2011] +0.001468354 anti-c d c anti-s PYTHIA 13; #[Reconstructed PDG2011] +# and some miscellaneous charmless stuff +0.003521696 anti-u u d anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.000684774 anti-d d d anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.000880424 anti-s s d anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.001956498 anti-u u s anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.001565198 anti-d d s anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.001271724 anti-s s s anti-s PYTHIA 48; #[Reconstructed PDG2011] +0.004891245 s anti-s PYTHIA 32; #[Reconstructed PDG2011] + +# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen +0.000200 K+ e- anti-nu_e PHOTOS ISGW2; +0.000300 K*+ e- anti-nu_e PHOTOS ISGW2; +0.000300 K_1+ e- anti-nu_e PHOTOS ISGW2; +0.000200 K'_1+ e- anti-nu_e PHOTOS ISGW2; +# +# +0.000200 K+ mu- anti-nu_mu PHOTOS ISGW2; +0.000300 K*+ mu- anti-nu_mu PHOTOS ISGW2; +0.000300 K_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.000200 K'_1+ mu- anti-nu_mu PHOTOS ISGW2; +# ------------- +# 2e-3 for charmless semi-leptonic + +#*********************************************************** +# +# fkw 5/10/00 +# +# ideas behind these (largely) made up Br's for charmless +# hadronic B decays: +# (1) any PP and PV modes that are used or calculated +# in globfit code by Hou,Smith,Wuerthwein are taken from +# the latest fit i.e. May2000 +# (2) anything else is from Ali,Kramer,Lue +# +# None of this should be taken too serious! +# +#*********************************************************** +# Mark Whitehead 30/4/2010 Updated K+K- +# PR LHCb 04/07/04 update BR +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] +# PR LHCb 04/07/04 split into KS/KL +0.0000000 anti-K0 K0 PHSP; +0.0000100 K_S0 K_S0 PHSP; +0.0000100 K_L0 K_L0 PHSP; +# PR LHCb 04/07/04 update BR +0.000004900 pi- K+ PHSP; #[Reconstructed PDG2011] +0.0000002 pi0 K0 PHSP; +# PR LHCb 04/07/04 add Bs->pi+ pi- +0.00000001 pi+ pi- PHSP; +# +0.0000012 omega eta SVS; +0.0000025 omega eta' SVS; +0.0000013 phi eta SVS; +0.0000025 phi eta' SVS; +0.00000008 omega anti-K0 SVS; +0.000000002 phi anti-K0 SVS; +# +#next is just twice PI- RHO0 +0.0000250 K*+ pi- SVS; +0.0000120 rho- K+ SVS; +0.00000002 rho0 K0 SVS; +0.00000002 K*0 pi0 SVS; +# +0.0000046 K*- K+ SVS; +# PR LHCb 04/07/04 Split into KS/KL +0.0000000 anti-K*0 K0 SVS; +0.0000020 anti-K*0 K_S0 SVS; +0.0000020 anti-K*0 K_L0 SVS; +0.0000082 K*+ K- SVS; +# PR LHCb 04/07/04 Split into KS/KL +0.0000000 K*0 anti-K0 SVS; +0.0000020 K*0 K_S0 SVS; +0.0000020 K*0 K_L0 SVS; +# +0.0000580 eta' eta' PHSP; +0.0000250 eta' eta PHSP; +0.0000040 eta eta PHSP; +#### Already included above 0.0000200 phi eta SVS; +#### Already included above 0.0000100 phi eta' SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +0.00000007 K0 eta' PHSP; +0.00000023 K0 eta PHSP; +0.000000021 K*0 eta' SVS; +0.00000007 K*0 eta SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +# for vector-vector final states +0.000020 rho- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000008 rho0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000000005 omega K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 04/07/04 Update BR +0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# decays that go via b->d penguins +#### Already included above 0.0000004 phi K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb : add Bs -> mu+ mu- +0.0000000035 mu- mu+ PHSP; +#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) +0.0000000020 tau- tau+ PHSP; +# PR LHCb 04/05/2004 : add Bs -> phi gamma +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e +0.0000023 phi e- e+ BTOSLLALI; +0.0000023 phi mu- mu+ BTOSLLALI; +# PR LHCb 16 apr 2004 : add Bs -> gamma gamma +0.0000005 gamma gamma PHSP; +#-------------- +# 257.122e-6 for all the charmless hadronic +# +0.000150000 D_s- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +# B_s decays. +# ------------------------------------------------------- +# whb&fkw 3/28/01 Taken from fkw's QQ tables. +# most dubious part are the B to baryons. +# fkw 4/28/00 made the Bs parallel to the Bd as best as I could +# ------------------------------------------------------- +Decay B_s0 +0.0210 D_s- e+ nu_e PHOTOS ISGW2; +0.0490 D_s*- e+ nu_e PHOTOS ISGW2; +0.0040 D_s1- e+ nu_e PHOTOS ISGW2; +0.0040 D_s0*- e+ nu_e PHOTOS ISGW2; +0.0070 D'_s1- e+ nu_e PHOTOS ISGW2; +0.0070 D_s2*- e+ nu_e PHOTOS ISGW2; +0.0210 D_s- mu+ nu_mu PHOTOS ISGW2; +0.0490 D_s*- mu+ nu_mu PHOTOS ISGW2; +0.0040 D_s1- mu+ nu_mu PHOTOS ISGW2; +0.0040 D_s0*- mu+ nu_mu PHOTOS ISGW2; +0.0070 D'_s1- mu+ nu_mu PHOTOS ISGW2; +0.0070 D_s2*- mu+ nu_mu PHOTOS ISGW2; +#fkw 5/04/01 changed these to account for taking out non-res +#0.0070 D_s- tau+ nu_tau ISGW2; +#0.0150 D_s*- tau+ nu_tau ISGW2; +#0.0013 D_s1- tau+ nu_tau ISGW2; +#0.0013 D_s0*- tau+ nu_tau ISGW2; +#0.0023 D'_s1- tau+ nu_tau ISGW2; +#0.0023 D_s2*- tau+ nu_tau ISGW2; +0.0080 D_s- tau+ nu_tau ISGW2; +0.0160 D_s*- tau+ nu_tau ISGW2; +0.0018 D_s1- tau+ nu_tau ISGW2; +0.0018 D_s0*- tau+ nu_tau ISGW2; +0.0028 D'_s1- tau+ nu_tau ISGW2; +0.0028 D_s2*- tau+ nu_tau ISGW2; +# +# fkw 4/28/00 the next few are decays where a u\bar u or d\bar d is popped +# between the charm quark and the spectator. I can thus not +# just replace a D by a Ds as above when going from Bd to Bs. +# +# fkw 5/04/01 Had to take non-res out because it crashed EvtGen. +#0.0010 anti-D*0 K- tau+ nu_tau GOITY_ROBERTS; +#0.0010 D*- anti-K0 tau+ nu_tau GOITY_ROBERTS; +#0.0010 anti-D0 K- tau+ nu_tau GOITY_ROBERTS; +#0.0010 D- anti-K0 tau+ nu_tau GOITY_ROBERTS; +# fkw 4/28/00 B0 -> TAU D PI0 = 1/2 of TAU D PI- because of pi0 wave function +# However, the same factor of 1/2 doesn't apply to BS0 !!! +# fkw 3/28/01 There seem to be no semi-leptonic B to baryon decays in nature. +# I don't pretend to understand why. PDG 2000 has a limit of +# < 3.2e-3 where one might naively expect +# 10% * BR(B->/\c) = 0.1 * (6.4+-1.1)% +#0.0050 nu_e e+ B-Baryon +#0.0050 nu_mu mu+ B-Baryon +# +# b --> c (s c=) +# Sum = 11.44% +# 2-body = 4.72% +# more-body = 6.72% +0.010400000 D_s- D_s+ PHSP; #[Reconstructed PDG2011] +0.0099 D_s*+ D_s- SVS; +0.0099 D_s*- D_s+ SVS; +0.0197 D_s*- D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/28/00 more states with popped q\bar q. +# The one's here involve only popped and spectator. +# Popping stuff in the cs from the W comes further below. +# The same isospin comment applies here as above in the +# semi-leptonic decays with tau and popped q\bar q. +0.0096 D_s+ D- anti-K0 PHSP; +0.0096 D_s+ D0 K- PHSP; +0.0096 D_s*+ D- anti-K0 PHSP; +0.0096 D_s*+ anti-D0 K- PHSP; +# +0.0024 D_s+ D- pi0 anti-K0 PHSP; +0.0048 D_s+ anti-D0 pi- anti-K0 PHSP; +0.0048 D_s+ D- pi+ K- PHSP; +0.0024 D_s+ anti-D0 pi0 K- PHSP; +# +0.0024 D_s*+ D- pi0 anti-K0 PHSP; +0.0048 D_s*+ anti-D0 pi- anti-K0 PHSP; +0.0048 D_s*+ D- pi+ K- PHSP; +0.0024 D_s*+ anti-D0 pi0 K- PHSP; +# +# +# b --> (c ) (c ) (s ) +# Sum = 8.0% +# DDK amplitudes R.A.Briere 10/97 +# fkw 4/28/00 these are q\bar q popping that don't involve the spectator +# Bd->Bs just involves switching the c\bar d to c\bar s. +# +0.0150 D_s*- D*0 K+ PHSP; +0.0150 D_s*- D*+ K0 PHSP; +0.0050 D_s*- D0 K+ PHSP; +0.0050 D_s*- D+ K0 PHSP; +0.0050 D_s- D*0 K+ PHSP; +0.0050 D_s- D*+ K0 PHSP; +0.0020 D_s- D0 K+ PHSP; +0.0020 D_s- D+ K0 PHSP; +0.0030 D_s*- D*0 K*+ PHSP; +0.0030 D_s*- D*+ K*0 PHSP; +0.0050 D_s*- D0 K*+ PHSP; +0.0050 D_s*- D+ K*0 PHSP; +0.0025 D_s- D*0 K*+ PHSP; +0.0025 D_s- D*+ K*0 PHSP; +0.0025 D_s- D0 K*+ PHSP; +0.0025 D_s- D+ K*0 PHSP; +# +# +# b --> c (d c=) +# Sum = 1.36% +0.0017 D_s+ D- PHSP; +0.0017 D*- D_s+ SVS; +0.0017 D_s*+ D- SVS; +0.0017 D_s*+ D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# fkw 4/38/00 more popping at the lower vertex +# but with upper vertex cabbibo suppressed. +0.0007 D+ D- anti-K0 PHSP; +0.0007 D+ D0 K- PHSP; +0.0007 D*+ D- anti-K0 PHSP; +0.0007 D*+ anti-D0 K- PHSP; +# +0.0003 D+ D- pi0 anti-K0 PHSP; +0.0007 D+ anti-D0 pi- anti-K0 PHSP; +0.0003 D+ D- pi+ K- PHSP; +0.0007 D+ anti-D0 pi0 K- PHSP; +# +0.0003 D*+ D- pi0 anti-K0 PHSP; +0.0007 D*+ anti-D0 pi- anti-K0 PHSP; +0.0003 D*+ D- pi+ K- PHSP; +0.0007 D*+ anti-D0 pi0 K- PHSP; +# +# b --> c (u s=) +# exclusive +# Sum = 0.9% +0.00015 D_s*- K+ SVS; +0.000150000 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.00030 D_s*- K*+ SVV_HELAMP 0.0283 0.0 0.932 0.0 0.228 0.0; +0.00030 K*+ D_s- SVS; +# +# fkw 4/28/00 Strategy for charmonium modes: +# Take Bd BR's, replace spectator, +# assume etaprime = 2/3 ss +# and eta = 1/3 ss +# +# Note: Just for kicks I gave the c\bar c decays a small piece that is +# self tagging. See if you can find it. This is already in +# the B0 decays in cleo's version of decay.dec . +# +# B --> (c c=) (s s=) +# 2.65% +# should be: psi = 0.80% CLNS 94/1315 but isn't quite right. +0.00064 J/psi eta' SVS; +0.00032 J/psi eta SVS; +0.001300000 J/psi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.00008 J/psi K0 SVS; +0.00070 J/psi K- K+ PHSP; +0.00070 J/psi anti-K0 K0 PHSP; +0.00070 J/psi K0 K- pi+ PHSP; +0.00070 J/psi anti-K0 K0 pi0 PHSP; +0.00070 J/psi K- K+ pi0 PHSP; +# LHCb PR 04/02/04 Add (cc) phi n pi(+/0) +0.00039 J/psi phi pi+ pi- PHSP; +0.00039 J/psi phi pi0 pi0 PHSP; +# LHCb PR Add (cc) phi eta(') + npi like in CDF QQ +0.0002 J/psi eta pi+ pi- PHSP; +0.0002 J/psi eta pi0 pi0 PHSP; +0.0004 J/psi eta' pi+ pi- PHSP; +0.0004 J/psi eta' pi0 pi0 PHSP; +0.0002 J/psi pi+ pi- PHSP; +0.0002 J/psi pi0 pi0 PHSP; +# psi' = 0.34% CLNS 94/1315 +0.000465 psi(2S) eta' SVS; +0.000235 psi(2S) eta SVS; +0.000680000 psi(2S) phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.0003 psi(2S) K- K+ PHSP; +0.0003 psi(2S) anti-K0 K0 PHSP; +0.0003 psi(2S) K0 K- pi+ PHSP; +0.0003 psi(2S) anti-K0 K0 pi0 PHSP; +0.0003 psi(2S) K- K+ pi0 PHSP; +0.00034 psi(2S) phi pi+ pi- PHSP; +0.00034 psi(2S) phi pi0 pi0 PHSP; +0.0002 psi(2S) eta pi+ pi- PHSP; +0.0002 psi(2S) eta pi0 pi0 PHSP; +0.0004 psi(2S) eta' pi+ pi- PHSP; +0.0004 psi(2S) eta' pi0 pi0 PHSP; +0.0002 psi(2S) pi+ pi- PHSP; +0.0002 psi(2S) pi0 pi0 PHSP; +# +# chic0 = 0.05% (20% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.00010 chi_c0 eta' PHSP; +0.00005 chi_c0 eta PHSP; +0.00020 phi chi_c0 SVS; +0.00003 chi_c0 K- K+ PHSP; +0.00003 chi_c0 anti-K0 K0 PHSP; +0.00003 chi_c0 K0 K- pi+ PHSP; +0.00003 chi_c0 anti-K0 K0 pi0 PHSP; +0.00003 chi_c0 K- K+ pi0 PHSP; +# +# +# chic1 = 0.37% CLNS 94/1315 +0.0007 chi_c1 eta' SVS; +0.0003 chi_c1 eta SVS; +0.0014 chi_c1 phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00026 chi_c1 K- K+ PHSP; +0.00026 chi_c1 anti-K0 K0 PHSP; +0.00026 chi_c1 K0 K- pi+ PHSP; +0.00026 chi_c1 anti-K0 K0 pi0 PHSP; +0.00026 chi_c1 K- K+ pi0 PHSP; +0.00040 chi_c1 phi pi+ pi- PHSP; +0.00040 chi_c1 phi pi0 pi0 PHSP; +0.0001 chi_c1 eta pi+ pi- PHSP; +0.0001 chi_c1 eta pi0 pi0 PHSP; +0.0002 chi_c1 eta' pi+ pi- PHSP; +0.0002 chi_c1 eta' pi0 pi0 PHSP; +# +# +# chic2 = 0.25% CLNS 94/1315 +0.000465 chi_c2 eta' STS; +0.000235 chi_c2 eta STS; +#0.0010 chi_c2 phi STV; whb: doesn't exist +0.00016 chi_c2 K- K+ PHSP; +0.00016 chi_c2 anti-K0 K0 PHSP; +0.00016 chi_c2 K0 K- pi+ PHSP; +0.00016 chi_c2 anti-K0 K0 pi0 PHSP; +0.00016 chi_c2 K- K+ pi0 PHSP; +# +# +# etac(1s) = 0.41% Guess: CBX 97-65 +0.0008 eta_c eta' PHSP; +0.0004 eta_c eta PHSP; +0.0015 phi eta_c SVS; +0.00028 eta_c K- K+ PHSP; +0.00028 eta_c K0 anti-K0 PHSP; +0.00028 eta_c K0 K- pi+ PHSP; +0.00028 eta_c K0 anti-K0 pi0 PHSP; +0.00028 eta_c K- K+ pi0 PHSP; +0.00040 eta_c phi pi+ pi- PHSP; +0.00040 eta_c phi pi0 pi0 PHSP; +0.0001 eta_c eta pi+ pi- PHSP; +0.0001 eta_c eta pi0 pi0 PHSP; +0.0002 eta_c eta' pi+ pi- PHSP; +0.0002 eta_c eta' pi0 pi0 PHSP; +# +# +# etac(2s) = 0.18% Guess: CBX 97-65 +0.0004 eta_c(2S) eta' PHSP; +0.0002 eta_c(2S) eta PHSP; +0.0006 phi eta_c(2S) SVS; +0.00012 eta_c(2S) K- K+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 PHSP; +0.00012 eta_c(2S) K0 K- pi+ PHSP; +0.00012 eta_c(2S) anti-K0 K0 pi0 PHSP; +0.00012 eta_c(2S) K- K+ pi0 PHSP; +# +# +# hc = 0.25% (100% of chic2) +# Bodwin et.al. Phys Rev D46 1992 +0.000465 h_c eta' SVS; +0.000235 h_c eta SVS; +0.0010 h_c phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00016 h_c K- K+ PHSP; +0.00016 h_c anti-K0 K0 PHSP; +0.00016 h_c K0 K- pi+ PHSP; +0.00016 h_c anti-K0 K0 pi0 PHSP; +0.00016 h_c K- K+ pi0 PHSP; +# +# +# b --> c (d u=) +# Exclusive Channels = 6.33% +# fkw 4/28/00 I rearanged this a bit after copying it from +# B0B decay list. +# +# first come the external W-emission decays: +# +0.0008 D_s1- pi+ SVS; +0.0021 D_s1- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0013 D_s2*- pi+ STS; +#0.0037 D_s2*- rho+ STV; #whb: STV does not exist yet +# +0.0027 D_s*- pi+ SVS; +0.003200000 D_s- pi+ PHSP; #[Reconstructed PDG2011] +0.0073 rho+ D_s- SVS; +0.0070 D_s*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0085 a_1+ D_s- SVS; +0.0009 D_s- rho0 pi+ PHSP; +0.0009 D_s- rho+ pi0 PHSP; +0.008400000 D_s- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.0009 D_s- pi0 pi+ pi0 PHSP; +# +0.0122 D_s*- a_1+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0010 D_s*- rho0 pi+ PHSP; +0.0010 D_s*- rho+ pi0 PHSP; +0.0077 D_s*- pi- pi+ pi+ PHSP; +0.0010 D_s*- pi0 pi+ pi0 PHSP; +# +# then the color suppressed decays: +# +# fkw 4/28/00 color suppressed modes bumped up by factor 2 from isospin +# i.e. Bs doesn't have the factor 2 suppression Bd has. +0.0002 anti-D*0 anti-K0 SVS; +0.0002 anti-D0 anti-K0 PHSP; +0.0002 anti-K*0 anti-D0 SVS; +0.0002 anti-D*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# PR LHCb : add p ppbar mode +0.000000001 p+ anti-p- PHSP; +# fkw 4/28/00 ignore the internal W emission decays with additional +# q\bar q popping. +# +# Here come the various types of "inclusive unknown" decays: +# +# Start with B to baryons: +# fkw 3/28/01 I don't know what I'm doing here!!! This needs to be checked!!! +# Mark Whitehead 30/4/2010 Weight PYTHIA to get Total BF=100% +0.019574780 anti-cs_0 ud_0 PYTHIA 23; #[Reconstructed PDG2011] +0.039129957 anti-cs_1 ud_1 PYTHIA 23; #[Reconstructed PDG2011] +# +# Next come external W-emission: +0.301256716 u anti-d anti-c s PYTHIA 48; #[Reconstructed PDG2011] +0.048443906 u anti-d anti-c s PYTHIA 25; #[Reconstructed PDG2011] +# Now the internal W-emission: +0.019086636 u anti-c anti-d s PYTHIA 48; #[Reconstructed PDG2011] +# Then some b->u external W-emission with upper vertex charm +0.003912996 c anti-s anti-u s PYTHIA 48; #[Reconstructed PDG2011] +# and finally some cabibbo suppressed external and internal W-emission +0.014683536 u anti-s anti-c s PYTHIA 48; #[Reconstructed PDG2011] +0.002152148 u anti-s anti-c s PYTHIA 25; #[Reconstructed PDG2011] +0.000880424 u anti-c anti-s s PYTHIA 48; #[Reconstructed PDG2011] +# and some c cbar d stuff as well as c cbar s +0.005391151 c anti-d anti-c s PYTHIA 13; #[Reconstructed PDG2011] +0.001468354 c anti-d anti-c s PYTHIA 13; #[Reconstructed PDG2011] +# and some miscellaneous charmless stuff +0.003521696 u anti-u anti-d s PYTHIA 48; #[Reconstructed PDG2011] +0.000684774 d anti-d anti-d s PYTHIA 48; #[Reconstructed PDG2011] +0.000880424 s anti-s anti-d s PYTHIA 48; #[Reconstructed PDG2011] +0.001956498 u anti-u anti-s s PYTHIA 48; #[Reconstructed PDG2011] +0.001565198 d anti-d anti-s s PYTHIA 48; #[Reconstructed PDG2011] +0.001271724 s anti-s anti-s s PYTHIA 48; #[Reconstructed PDG2011] +0.004891245 anti-s s PYTHIA 32; #[Reconstructed PDG2011] + +# fkw 5/10/00 the b->ulnu decays are loosely modelled according to B0 in EvtGen +0.000200 K- e+ nu_e PHOTOS ISGW2; +0.000300 K*- e+ nu_e PHOTOS ISGW2; +0.000300 K_1- e+ nu_e PHOTOS ISGW2; +0.000200 K'_1- e+ nu_e PHOTOS ISGW2; +# +# +0.000200 K- mu+ nu_mu PHOTOS ISGW2; +0.000300 K*- mu+ nu_mu PHOTOS ISGW2; +0.000300 K_1- mu+ nu_mu PHOTOS ISGW2; +0.000200 K'_1- mu+ nu_mu PHOTOS ISGW2; +# ------------- +# 2e-3 for charmless semi-leptonic + +#*********************************************************** +# +# fkw 5/10/00 +# +# ideas behind these (largely) made up Br's for charmless +# hadronic B decays: +# (1) any PP and PV modes that are used or calculated +# in globfit code by Hou,Smith,Wuerthwein are taken from +# the latest fit i.e. May2000 +# (2) anything else is from Ali,Kramer,Lue +# +# None of this should be taken too serious! +# +#*********************************************************** +# Mark Whitehead 30/4/2010 Update K+K- +# PR LHCb update Br Bs -> K- K+ +0.000033000 K- K+ PHSP; #[Reconstructed PDG2011] +# PR LHCb 4/07/04 Split in KS/KL +0.0000000 anti-K0 K0 PHSP; +0.0000100 K_S0 K_S0 PHSP; +0.0000100 K_L0 K_L0 PHSP; +# +0.000004900 pi+ K- PHSP; #[Reconstructed PDG2011] +0.0000002 pi0 anti-K0 PHSP; +# PR LHCb 4/07/04 add Bs -> pi+ pi- +0.00000001 pi+ pi- PHSP; +# +0.0000012 omega eta SVS; +0.0000025 omega eta' SVS; +0.0000013 phi eta SVS; +0.0000025 phi eta' SVS; +0.00000008 omega K0 SVS; +0.000000002 phi K0 SVS; +# +0.0000250 K*- pi+ SVS; +0.0000120 rho+ K- SVS; +0.00000002 rho0 K0 SVS; +0.00000002 anti-K*0 pi0 SVS; +# +0.0000046 K*+ K- SVS; +# PR LHCb 4/07/04 split in KS/KL +0.0000000 K*0 anti-K0 SVS; +0.0000020 K*0 K_S0 SVS; +0.0000020 K*0 K_L0 SVS; +0.0000082 K*- K+ SVS; +# PR LHCb 4/07/04 split in KS/KL +0.0000000 anti-K*0 K0 SVS; +0.0000020 anti-K*0 K_S0 SVS; +0.0000020 anti-K*0 K_L0 SVS; +# +0.0000580 eta' eta' PHSP; +0.0000250 eta' eta PHSP; +0.0000040 eta eta PHSP; +### Already included above 0.0000200 phi eta SVS; +### Already included above 0.0000100 phi eta' SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +0.00000007 anti-K0 eta' PHSP; +0.00000023 anti-K0 eta PHSP; +0.000000021 anti-K*0 eta' SVS; +0.00000007 anti-K*0 eta SVS; +# +#next comes stuff from Ali,Kramer,Lue PRD58, 094009 FOR NC=3 +# for vector-vector final states +0.000020 rho+ K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000008 rho0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000000005 omega anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000006 K*- K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb Update BR +0.000004 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.000014000 phi phi SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.000000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# decays that go via b->d penguins +#### Already included above 0.0000004 phi anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +#PR LHCb add Bs -> mu+ mu- +0.0000000035 mu+ mu- PHSP; +#PR LHCb 04/08/2004 add Bs -> tau+ tau- (BR not to take too seriously) +0.0000000020 tau+ tau- PHSP; +# PR LHCb 04/05/2004 : add Bs -> phi gamma +0.000057000 phi gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +# PR LHCb 04/08/2004 : add Bs -> phi mu mu, phi e e +0.0000023 phi e+ e- BTOSLLALI; +0.0000023 phi mu+ mu- BTOSLLALI; +# PR LHCb 16 Apr 2004 : add Bs -> gamma gamma +0.0000005 gamma gamma PHSP; +#-------------- +# 257.122e-6 for all the charmless hadronic +# +0.000150000 D_s+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +# whb: QQ B_c included- Near end of File +#Decay B_c- +#CHANNEL 0 0.0700 TAU- NUTB +#CHANNEL 1 0.1100 NUEB E- *CC* +#CHANNEL 1 0.1100 NUMB MU- *CC* +#CHANNEL 1 0.0300 NUTB TAU- *CC* +#CHANNEL 0 0.3400 *DU* *CC* +#CHANNEL 0 0.0700 *SC* *CC* +#CHANNEL 0 0.2700 *SC* +#0.0700 tau- anti-nu_tau PHSP; +#0.1100 anti-nu_e e- *CC* Simpleleptonic; +#0.1100 anti-nu_mu mu- *CC* Simple leptonic; +#0.0300 anti-nu_tau tau- *CC* Simple leptonic; +#0.3400 *DU* *CC* PHSP; +#0.0700 *SC* *CC* PHSP; +#0.2700 *SC* PHSP; +#Enddecay +# +#Decay B_c+ +#CHANNEL 0 0.0700 TAU+ NUT +#CHANNEL 1 0.1100 NUE E+ *CC* +#CHANNEL 1 0.1100 NUM MU+ *CC* +#CHANNEL 1 0.0300 NUT TAU+ *CC* +#CHANNEL 0 0.3400 *UD* *CC* +#CHANNEL 0 0.0700 *CS* *CC* +#CHANNEL 0 0.2700 *CS* +#0.0700 tau+ nu_tau PHSP; +#0.1100 nu_e E+ *CC* Simple leptonic; +#0.1100 nu_mu mu+ *CC* Simple leptonic; +#0.0300 nu_tau tau+ *CC* Simple leptonic; +#0.3400 *UD* *CC* PHSP; +#0.0700 *CS* *CC* PHSP; +#0.2700 *CS* PHSP; +#Enddecay + +# +# Updated to PDG 2008 +# +Decay tau- +0.154002925 e- anti-nu_e nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.170000000 mu- anti-nu_mu nu_tau PHOTOS TAULNUNU; #[Reconstructed PDG2011] +0.109100000 pi- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.006960000 K- nu_tau TAUSCALARNU; #[Reconstructed PDG2011] +0.255100000 pi- pi0 nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400; #[Reconstructed PDG2011] +0.001124109 nu_tau gamma pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.079301562 pi0 pi0 pi- nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.000385656 nu_tau K- pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.008508640 nu_tau pi- pi0 pi0 pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.000864699 nu_tau pi- pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +#0.2515 rho- nu_tau TAUVECTORNU; +#0.1790 a_1- nu_tau TAUVECTORNU; +# Modes with K0s +# +0.000319939 nu_tau pi- anti-K0 PYTHIA 41; #[Reconstructed PDG2011] +0.001590000 nu_tau K- K0 PYTHIA 41; #[Reconstructed PDG2011] +0.001700000 nu_tau K0 pi- anti-K0 PYTHIA 41; #[Reconstructed PDG2011] +0.001590000 nu_tau K- pi0 K0 PYTHIA 41; #[Reconstructed PDG2011] +0.004000000 nu_tau pi- anti-K0 pi0 PYTHIA 41; #[Reconstructed PDG2011] +# 3 Charged Particles +# +0.093200000 pi- pi- pi+ nu_tau TAUHADNU -0.108 0.775 0.149 1.364 0.400 1.23 0.4; #[Reconstructed PDG2011] +0.046100000 nu_tau pi- pi+ pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.000501526 nu_tau pi- pi- pi+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000155646 nu_tau pi- pi- pi+ pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003420000 nu_tau K- pi+ pi- PYTHIA 41; #[Reconstructed PDG2011] +0.001360000 nu_tau K- pi+ pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.001400000 nu_tau K- pi- K+ PYTHIA 41; #[Reconstructed PDG2011] +0.000015800 nu_tau K- K+ K- PYTHIA 41; #[Reconstructed PDG2011] +# 5 Charged Particles +# +0.000700406 nu_tau pi- pi- pi- pi+ pi+ PHSP; #[Reconstructed PDG2011] +0.000129705 nu_tau pi- pi- pi- pi+ pi+ pi0 PHSP; #[Reconstructed PDG2011] +# Misc other modes +# +0.012000000 K*- nu_tau TAUVECTORNU; #[Reconstructed PDG2011] +0.001390000 nu_tau eta pi- pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.003199387 nu_tau pi- omega pi0 PYTHIA 41; #[Reconstructed PDG2011] +0.000410000 nu_tau K- omega PYTHIA 41; #[Reconstructed PDG2011] +0.002200000 anti-K*0 pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.002100000 K*0 K- nu_tau PHSP; #[Reconstructed PDG2011] +0.000034000 phi pi- nu_tau PHSP; #[Reconstructed PDG2011] +0.000037000 phi K- nu_tau PHSP; #[Reconstructed PDG2011] +0.003600000 mu- anti-nu_mu nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017500000 e- anti-nu_e nu_tau gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004290000 K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 anti-K0 rho- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi- anti-K0 pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi- K0 anti-K0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000061000 K- K+ pi- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 e- e- e+ anti-nu_e nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 K_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 K'_1- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001500000 K'*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 eta pi- pi0 pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000161000 eta K- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000138000 eta K*- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000048000 eta K- pi0 nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000093000 eta anti-K0 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 f_1 pi- nu_tau PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +CDecay tau+ +# +# Vector Mesons Updated PDG 2008 +# +Decay D*+ +0.6770 D0 pi+ VSS; +0.3070 D+ pi0 VSS; +0.0160 D+ gamma VSP_PWAVE; +Enddecay +Decay D*- +0.6770 anti-D0 pi- VSS; +0.3070 D- pi0 VSS; +0.0160 D- gamma VSP_PWAVE; +Enddecay +Decay D*0 +0.619000000 D0 pi0 VSS; #[Reconstructed PDG2011] +0.381000000 D0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +Enddecay +Decay anti-D*0 +0.6190 anti-D0 pi0 VSS; +0.3810 anti-D0 gamma VSP_PWAVE; +Enddecay +# +Decay D_s*+ +0.942000000 D_s+ gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s+ pi0 VSS; #[Reconstructed PDG2011] +Enddecay +Decay D_s*- +0.942000000 D_s- gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.058000000 D_s- pi0 VSS; #[Reconstructed PDG2011] +Enddecay +# +# +# D+ Meson +# +Decay D+ +0.0554 anti-K*0 e+ nu_e PHOTOS ISGW2; +0.0900 anti-K0 e+ nu_e PHOTOS ISGW2; +0.0036 anti-K_10 e+ nu_e PHOTOS ISGW2; +0.0038 anti-K_2*0 e+ nu_e PHOTOS ISGW2; +0.0043 pi0 e+ nu_e PHOTOS ISGW2; +0.0026 eta e+ nu_e PHOTOS ISGW2; +0.0005 eta' e+ nu_e PHOTOS ISGW2; +0.0028 rho0 e+ nu_e PHOTOS ISGW2; +0.0028 omega e+ nu_e PHOTOS ISGW2; +0.0027 K- pi+ e+ nu_e PHOTOS PHSP; +0.0014 anti-K0 pi0 e+ nu_e PHOTOS PHSP; +# +0.0533 anti-K*0 mu+ nu_mu PHOTOS ISGW2; +0.0874 anti-K0 mu+ nu_mu PHOTOS ISGW2; +0.0036 anti-K_10 mu+ nu_mu PHOTOS ISGW2; +0.0038 anti-K_2*0 mu+ nu_mu PHOTOS ISGW2; +0.0043 pi0 mu+ nu_mu PHOTOS ISGW2; +0.0026 eta mu+ nu_mu PHOTOS ISGW2; +0.0005 eta' mu+ nu_mu PHOTOS ISGW2; +0.0028 rho0 mu+ nu_mu PHOTOS ISGW2; +0.0028 omega mu+ nu_mu PHOTOS ISGW2; +0.0027 K- pi+ mu+ nu_mu PHOTOS PHSP; +0.0014 anti-K0 pi0 mu+ nu_mu PHOTOS PHSP; +# +# +0.0004 mu+ nu_mu PHOTOS SLN; +0.0010 tau+ nu_tau SLN; +# +0.0282 anti-K0 pi+ PHSP; +0.0800 a_1+ anti-K0 SVS; +0.0508 anti-K'_10 pi+ SVS; +0.0115 anti-K_0*0N pi+ PHSP; +0.0210 anti-K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# the Dalitz mode below includes K*bar(892)0 pi+, +# K*bar(1430)0 pi+, and K*bar(1680)0 pi+ resonances. +0.0920 K- pi+ pi+ D_DALITZ; +# the Dalitz mode below includes K0bar rho+, +# and K*bar(892)0 pi+ resonances +0.0970 anti-K0 pi+ pi0 D_DALITZ; +0.0100 anti-K0 eta pi+ PHSP; +0.0050 anti-K0 rho0 pi+ PHSP; +0.0050 anti-K0 omega pi+ PHSP; +0.0110 K- rho+ pi+ PHSP; +0.0070 K*- pi+ pi+ PHSP; +0.0100 anti-K*0 pi0 pi+ PHSP; +0.0100 anti-K*0 eta pi+ PHSP; +0.0078 anti-K*0 rho0 pi+ PHSP; +0.0050 anti-K*0 omega pi+ PHSP; +0.0100 K*- rho+ pi+ PHSP; +# +0.0120 K- pi+ pi+ pi0 PHSP; +0.0000 anti-K0 pi+ pi+ pi- PHSP; +0.0188 anti-K0 pi+ pi0 pi0 PHSP; +0.0022 K- pi+ pi+ pi+ pi- PHSP; +0.005 K- pi+ pi+ pi0 pi0 PHSP; +0.0087 anti-K0 pi+ pi+ pi- pi0 PHSP; +0.0035 anti-K0 pi+ pi0 pi0 pi0 PHSP; +# +0.0100 anti-K0 anti-K0 K+ PHSP; +0.0070 phi pi+ SVS; +0.0230 phi pi+ pi0 PHSP; +0.0074 anti-K0 K+ PHSP; +0.0042 anti-K*0 K+ SVS; +0.0310 K*+ anti-K0 SVS; +0.0180 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0046 K+ K- pi+ PHSP; +0.0010 K+ anti-K0 pi0 PHSP; +0.0010 anti-K0 K0 pi+ PHSP; +0.0010 K*+ K- pi+ PHSP; +0.0010 K+ K*- pi+ PHSP; +0.0010 K*+ anti-K0 pi0 PHSP; +0.0010 K+ anti-K*0 pi0 PHSP; +0.0010 anti-K*0 K0 pi+ PHSP; +0.0010 anti-K0 K*0 pi+ PHSP; +# +0.0026 pi0 pi+ PHSP; +0.0010 rho0 pi+ SVS; +0.0020 pi+ pi+ pi- PHSP; +0.0015 pi+ pi0 pi0 PHSP; +0.0090 pi+ pi+ pi- pi0 PHSP; +0.0050 pi+ pi0 pi0 pi0 PHSP; +0.0076 eta pi+ PHSP; +0.0030 eta pi+ pi0 PHSP; +0.0030 eta pi+ pi+ pi- PHSP; +0.0020 eta pi+ pi0 pi0 PHSP; +#lange jul22,2002 +0.0021 pi+ pi+ pi+ pi- pi- PHSP; +Enddecay +# +# +Decay D- + +0.0554 K*0 e- anti-nu_e PHOTOS ISGW2; +0.0900 K0 e- anti-nu_e PHOTOS ISGW2; +0.0036 K_10 e- anti-nu_e PHOTOS ISGW2; +0.0038 K_2*0 e- anti-nu_e PHOTOS ISGW2; +0.0043 pi0 e- anti-nu_e PHOTOS ISGW2; +0.0026 eta e- anti-nu_e PHOTOS ISGW2; +0.0005 eta' e- anti-nu_e PHOTOS ISGW2; +0.0028 rho0 e- anti-nu_e PHOTOS ISGW2; +0.0028 omega e- anti-nu_e PHOTOS ISGW2; +0.0027 K+ pi- e- anti-nu_e PHOTOS PHSP; +0.0014 K0 pi0 e- anti-nu_e PHOTOS PHSP; +# +0.0533 K*0 mu- anti-nu_mu PHOTOS ISGW2; +0.0874 K0 mu- anti-nu_mu PHOTOS ISGW2; +0.0036 K_10 mu- anti-nu_mu PHOTOS ISGW2; +0.0038 K_2*0 mu- anti-nu_mu PHOTOS ISGW2; +0.0043 pi0 mu- anti-nu_mu PHOTOS ISGW2; +0.0026 eta mu- anti-nu_mu PHOTOS ISGW2; +0.0005 eta' mu- anti-nu_mu PHOTOS ISGW2; +0.0028 rho0 mu- anti-nu_mu PHOTOS ISGW2; +0.0028 omega mu- anti-nu_mu PHOTOS ISGW2; +0.0027 K+ pi- mu- anti-nu_mu PHOTOS PHSP; +0.0014 K0 pi0 mu- anti-nu_mu PHOTOS PHSP; +# +0.0004 mu- anti-nu_mu PHOTOS SLN; +0.0010 tau- anti-nu_tau SLN; +# +0.0282 K0 pi- PHSP; +0.0800 a_1- K0 SVS; +0.0508 K'_10 pi- SVS; +0.0115 K_0*0N pi- PHSP; +0.0210 K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +# the Dalitz mode below includes K*(892)0 pi-, K*(1430)0 pi-, and K*(1680)0 pi- resonances. +0.0920 K+ pi- pi- D_DALITZ; +# the Dalitz mode below includes K0 rho-, and K*(892)0 pi- resonances. +0.0970 K0 pi- pi0 D_DALITZ; +0.0100 K0 eta pi- PHSP; +0.0050 K0 rho0 pi- PHSP; +0.0050 K0 omega pi- PHSP; +0.0110 K+ rho- pi- PHSP; +0.0070 K*+ pi- pi- PHSP; +0.0100 K*0 pi0 pi- PHSP; +0.0100 K*0 eta pi- PHSP; +0.0078 K*0 rho0 pi- PHSP; +0.0050 K*0 omega pi- PHSP; +0.0100 K*+ rho- pi- PHSP; +# +0.0120 K+ pi- pi- pi0 PHSP; +0.0000 K0 pi- pi- pi+ PHSP; +0.0188 K0 pi- pi0 pi0 PHSP; +0.0022 K+ pi- pi- pi- pi+ PHSP; +0.005 K+ pi- pi- pi0 pi0 PHSP; +0.0087 K0 pi- pi- pi+ pi0 PHSP; +0.0035 K0 pi- pi0 pi0 pi0 PHSP; +# +0.0100 K0 K0 K- PHSP; +0.0070 phi pi- SVS; +0.0230 phi pi- pi0 PHSP; +0.0074 K0 K- PHSP; +0.0042 K*0 K- SVS; +0.0310 K*- K0 SVS; +0.0180 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0046 K- K+ pi- PHSP; +0.0010 K- K0 pi0 PHSP; +0.0010 anti-K0 K0 pi- PHSP; +0.0010 K*- K+ pi- PHSP; +0.0010 K- K*+ pi- PHSP; +0.0010 K*- K0 pi0 PHSP; +0.0010 K- K*0 pi0 PHSP; +0.0010 K*0 anti-K0 pi- PHSP; +0.0010 K0 anti-K*0 pi- PHSP; +# +0.0026 pi0 pi- PHSP; +0.0010 rho0 pi- SVS; +0.0020 pi- pi+ pi- PHSP; +0.0015 pi- pi0 pi0 PHSP; +0.0090 pi- pi+ pi- pi0 PHSP; +0.0050 pi- pi0 pi0 pi0 PHSP; +0.0076 eta pi- PHSP; +0.0030 eta pi- pi0 PHSP; +0.0030 eta pi- pi+ pi- PHSP; +0.0020 eta pi- pi0 pi0 PHSP; +#lange jul22,2002 +0.0021 pi+ pi- pi+ pi- pi- PHSP; +Enddecay +# +Decay K*BR +1.0000 anti-K0 pi0 VSS; +Enddecay +# +# +Decay D0 +# updated according to suggestions by P. Roudeau, +# using PDG2004 measurements and imposing the equality +# of sl partial widths for D+ and D0. +# Include additional decay anti-K0 pi- e+ nu_e , K- pi0 e+ nu_e. +# +0.0225 K*- e+ nu_e PHOTOS ISGW2; +0.0350 K- e+ nu_e PHOTOS ISGW2; +0.0014 K_1- e+ nu_e PHOTOS ISGW2; +0.0015 K_2*- e+ nu_e PHOTOS ISGW2; +0.0034 pi- e+ nu_e PHOTOS ISGW2; +0.0022 rho- e+ nu_e PHOTOS ISGW2; +0.0011 anti-K0 pi- e+ nu_e PHOTOS PHSP; +0.0006 K- pi0 e+ nu_e PHOTOS PHSP; +# +0.0214 K*- mu+ nu_mu PHOTOS ISGW2; +0.0340 K- mu+ nu_mu PHOTOS ISGW2; +0.0014 K_1- mu+ nu_mu PHOTOS ISGW2; +0.0015 K_2*- mu+ nu_mu PHOTOS ISGW2; +0.0034 pi- mu+ nu_mu PHOTOS ISGW2; +0.0022 rho- mu+ nu_mu PHOTOS ISGW2; +0.0011 anti-K0 pi- mu+ nu_mu PHOTOS PHSP; +0.0006 K- pi0 mu+ nu_mu PHOTOS PHSP; +# +0.0383 K- pi+ PHSP; +0.0212 anti-K0 pi0 PHSP; +0.0071 anti-K0 eta PHSP; +0.0172 anti-K0 eta' PHSP; +0.0210 omega anti-K0 SVS; +0.0190 anti-K*0 eta SVS; +0.0020 anti-K*0 eta' SVS; +0.0730 a_1+ K- SVS; +0.0610 K*- rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0146 anti-K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0110 anti-K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# the Dalitz mode below includes K*bar(892)0 pi0, +# K*(892)- pi+, and K- rho(770)+ resonances +0.1390 K- pi+ pi0 D_DALITZ; +0.0085 K*BR pi0 SVS; +0.0107 K_1- pi+ SVS; +0.0071 anti-K_10 pi0 SVS; +# +# the Dalitz mode below includes K*(892)- pi+ and Kbar0 rho(770)0 resonances +0.0540 anti-K0 pi+ pi- D_DALITZ; +0.0078 anti-K0 pi0 pi0 PHSP; +0.0225 anti-K*0 pi+ pi- PHSP; +0.0116 anti-K*0 pi0 pi0 PHSP; +0.0100 K*- pi+ pi0 PHSP; +0.0068 K- rho+ pi0 PHSP; +0.0060 K- pi+ rho0 PHSP; +0.0303 K- pi+ omega PHSP; +0.0100 K- pi+ eta PHSP; +0.0075 K- pi+ eta' PHSP; +0.0074 K- pi+ pi+ pi- PHSP; +0.0085 anti-K0 pi+ pi- pi0 PHSP; +# +# K- pi+ pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +# have everything add to 1 and get enough neutral kaons: +0.02575 K- pi+ pi0 pi0 PHSP; +# +0.0143 anti-K0 pi0 pi0 pi0 PHSP; +0.0038 K- pi+ pi+ pi- pi0 PHSP; +0.0038 K- pi+ pi0 pi0 pi0 PHSP; +0.0058 anti-K0 pi+ pi- pi+ pi- PHSP; +# +0.0638 anti-K0 pi+ pi- pi0 pi0 PHSP; +0.0192 anti-K0 pi+ pi- pi0 pi0 pi0 PHSP; +# +0.0086 phi anti-K0 SVS; +0.0051 anti-K0 K+ K- PHSP; +0.0008 K_S0 K_S0 K_S0 PHSP; +0.0043 K+ K- PHSP; +0.0006 K_S0 K_S0 PHSP; +0.0006 K_L0 K_L0 PHSP; +0.0004 K*0 anti-K0 SVS; +0.0008 anti-K*0 K0 SVS; +0.0018 K*- K+ SVS; +0.0035 K*+ K- SVS; +0.0014 anti-K*0 K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0007 phi pi0 SVS; +0.0011 phi pi+ pi- PHSP; +0.0025 K+ K- pi+ pi- PHSP; +0.0030 K+ K- pi0 pi0 PHSP; +0.0015 anti-K0 K0 pi+ pi- PHSP; +0.0015 anti-K0 K0 pi0 pi0 PHSP; +# +0.0015 pi+ pi- PHSP; +0.0008 pi0 pi0 PHSP; +0.0010 eta pi0 PHSP; +0.0010 eta' pi0 PHSP; +0.0010 eta eta PHSP; +0.0040 rho+ pi- SVS; +0.0040 rho- pi+ SVS; +0.0020 rho0 pi0 SVS; +0.0060 pi+ pi- pi0 PHSP; +0.0010 pi0 pi0 pi0 PHSP; +0.0073 pi+ pi+ pi- pi- PHSP; +0.0050 pi+ pi- pi0 pi0 PHSP; +0.0177 pi+ pi- pi+ pi- pi0 PHSP; +0.0060 pi+ pi- pi0 pi0 pi0 PHSP; +# +# Doubly Cabibbo suppressed decays: +0.00015 pi- K+ PHSP; +0.0005 pi- K+ pi0 PHSP; +Enddecay +# +# +Decay K*0R +1.0000 K0 pi0 VSS; +Enddecay +# +# +Decay anti-D0 +0.0225 K*+ e- anti-nu_e PHOTOS ISGW2; +0.0350 K+ e- anti-nu_e PHOTOS ISGW2; +0.0014 K_1+ e- anti-nu_e PHOTOS ISGW2; +0.0015 K_2*+ e- anti-nu_e PHOTOS ISGW2; +0.0034 pi+ e- anti-nu_e PHOTOS ISGW2; +0.0022 rho+ e- anti-nu_e PHOTOS ISGW2; +0.0011 K0 pi+ e- anti-nu_e PHOTOS PHSP; +0.0006 K+ pi0 e- anti-nu_e PHOTOS PHSP; +# +0.0214 K*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0340 K+ mu- anti-nu_mu PHOTOS ISGW2; +0.0014 K_1+ mu- anti-nu_mu PHOTOS ISGW2; +0.0015 K_2*+ mu- anti-nu_mu PHOTOS ISGW2; +0.0034 pi+ mu- anti-nu_mu PHOTOS ISGW2; +0.0022 rho+ mu- anti-nu_mu PHOTOS ISGW2; +0.0011 K0 pi+ mu- anti-nu_mu PHOTOS PHSP; +0.0006 K+ pi0 mu- anti-nu_mu PHOTOS PHSP; +# +0.0383 K+ pi- PHSP; +0.0212 K0 pi0 PHSP; +0.0071 K0 eta PHSP; +0.0172 K0 eta' PHSP; +0.0210 omega K0 SVS; +0.0190 K*0 eta SVS; +0.0020 K*0 eta' SVS; +0.0730 a_1- K+ SVS; +0.0610 K*+ rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0146 K*0 rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0110 K*0 omega SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# the Dalitz mode below includes K*(892)0 pi0, K*(892)+ pi-, and K+ rho(770)- resonances +0.1390 K+ pi- pi0 D_DALITZ; +0.0085 K*0R pi0 SVS; +0.0107 K_1+ pi- SVS; +0.0071 K_10 pi0 SVS; +# the Dalitz mode below includes K*(892)+ pi- and K0 rho(770)0 resonances +0.0540 K0 pi+ pi- D_DALITZ; +0.0078 K0 pi0 pi0 PHSP; +0.0225 K*0 pi+ pi- PHSP; +0.0116 K*0 pi0 pi0 PHSP; +0.0100 K*+ pi- pi0 PHSP; +0.0068 K+ rho- pi0 PHSP; +0.0060 K+ pi- rho0 PHSP; +0.0303 K+ pi- omega PHSP; +0.0100 K+ pi- eta PHSP; +0.0075 K+ pi- eta' PHSP; +0.0074 K+ pi- pi+ pi- PHSP; +0.0085 K0 pi+ pi- pi0 PHSP; +# +# K+ pi- pi0 pi0 is (15 +/- 5)% in the PDG, but we decrease it to +# have everything add to 1 and get enough neutral kaons: +0.02575 K+ pi- pi0 pi0 PHSP; +# +0.0143 K0 pi0 pi0 pi0 PHSP; +0.0038 K+ pi- pi+ pi- pi0 PHSP; +0.0038 K+ pi- pi0 pi0 pi0 PHSP; +0.0058 K0 pi+ pi- pi+ pi- PHSP; +# +0.0638 K0 pi- pi+ pi0 pi0 PHSP; +0.0192 K0 pi- pi+ pi0 pi0 pi0 PHSP; +# +0.0086 phi K0 SVS; +0.0051 K0 K+ K- PHSP; +0.0008 K_S0 K_S0 K_S0 PHSP; +0.0043 K+ K- PHSP; +0.0006 K_S0 K_S0 PHSP; +0.0006 K_L0 K_L0 PHSP; +0.0004 anti-K*0 K0 SVS; +0.0008 K*0 anti-K0 SVS; +0.0018 K*+ K- SVS; +0.0035 K*- K+ SVS; +0.0014 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0007 phi pi0 SVS; +0.0011 phi pi+ pi- PHSP; +0.0025 K+ K- pi+ pi- PHSP; +0.0030 K+ K- pi0 pi0 PHSP; +0.0015 anti-K0 K0 pi+ pi- PHSP; +0.0015 anti-K0 K0 pi0 pi0 PHSP; +# +0.0015 pi+ pi- PHSP; +0.0008 pi0 pi0 PHSP; +0.0010 eta pi0 PHSP; +0.0010 eta' pi0 PHSP; +0.0010 eta eta PHSP; +0.0040 rho+ pi- SVS; +0.0040 rho- pi+ SVS; +0.0020 rho0 pi0 SVS; +0.0060 pi+ pi- pi0 PHSP; +0.0010 pi0 pi0 pi0 PHSP; +0.0073 pi+ pi+ pi- pi- PHSP; +0.0050 pi+ pi- pi0 pi0 PHSP; +0.0177 pi+ pi- pi+ pi- pi0 PHSP; +0.0060 pi+ pi- pi0 pi0 pi0 PHSP; +# +# Doubly Cabibbo suppressed decays: +0.00015 pi+ K- PHSP; +0.0005 pi+ K- pi0 PHSP; +Enddecay +# +# Updated to PDG 2008 +Decay D_s+ +0.0242 phi e+ nu_e PHOTOS ISGW2; +0.0307 eta e+ nu_e PHOTOS ISGW2; +0.0106 eta' e+ nu_e PHOTOS ISGW2; +0.0027 anti-K0 e+ nu_e PHOTOS ISGW2; +0.0010 anti-K*0 e+ nu_e PHOTOS ISGW2; +0.0242 phi mu+ nu_mu PHOTOS ISGW2; +0.0307 eta mu+ nu_mu PHOTOS ISGW2; +0.0106 eta' mu+ nu_mu PHOTOS ISGW2; +0.0027 anti-K0 mu+ nu_mu PHOTOS ISGW2; +0.0010 anti-K*0 mu+ nu_mu PHOTOS ISGW2; +0.00616 mu+ nu_mu PHOTOS SLN; +0.064 tau+ nu_tau SLN; +### Lange Nov14, 2004 - average cleo + babar (prelim) using stat error only.. +0.044 phi pi+ SVS; +0.021 eta pi+ PHSP; +0.047 eta' pi+ PHSP; +0.0034 omega pi+ SVS; +0.0004 rho0 pi+ SVS; +0.0004 rho+ pi0 SVS; +#? +0.0010 pi+ pi0 PHSP; +0.01 f_0 pi+ PHSP; +0.0023 f_2 pi+ PHSP; +0.082 phi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.131 rho+ eta SVS; +0.122 rho+ eta' SVS; +0.00005 pi+ pi- pi+ PHSP; +0.00005 pi+ pi0 pi0 PHSP; +0.010 phi pi+ pi0 PHSP; +0.0150 eta pi+ pi0 PHSP; +0.0150 eta' pi+ pi0 PHSP; +0.008 phi pi+ pi- pi+ PHSP; +0.0050 phi pi+ pi0 pi0 PHSP; +0.0050 eta pi+ pi- pi+ PHSP; +0.0050 eta pi+ pi0 pi0 PHSP; +0.044 anti-K0 K+ PHSP; +0.040 anti-K*0 K+ SVS; +0.053 K*+ anti-K0 SVS; +0.070 anti-K*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.003 anti-K0 K+ pi0 PHSP; +0.0012 anti-K*0 K+ pi0 PHSP; +0.0012 K*+ anti-K0 pi0 PHSP; +0.004 anti-K*0 K*+ pi0 PHSP; +0.011 K+ K- pi+ PHSP; +0.0010 anti-K0 K+ pi+ pi- PHSP; +0.0010 anti-K0 K+ pi0 pi0 PHSP; +0.0043 K+ K- pi+ pi- pi+ PHSP; +0.0003 phi K+ SVS; +0.0002 eta K+ PHSP; +0.0002 eta' K+ PHSP; +0.0002 eta K+ pi0 PHSP; +0.0002 eta K+ pi+ pi- PHSP; +0.0002 eta' K+ pi0 PHSP; +0.0002 eta' K+ pi+ pi- PHSP; +0.0002 K+ K- K+ PHSP; +0.0040 K0 pi+ PHSP; +0.0015 rho+ K0 SVS; +0.0015 rho0 K+ SVS; +0.0010 K0 pi+ pi0 PHSP; +0.0025 a_1+ K0 SVS; +0.0079 K*0 pi+ SVS; +0.0050 K*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0050 K*0 pi+ pi0 PHSP; +Enddecay +# +Decay D_s- +0.0242 phi e- anti-nu_e PHOTOS ISGW2; +0.0307 eta e- anti-nu_e PHOTOS ISGW2; +0.0106 eta' e- anti-nu_e PHOTOS ISGW2; +0.0027 K0 e- anti-nu_e PHOTOS ISGW2; +0.0010 K*0 e- anti-nu_e PHOTOS ISGW2; +0.0242 phi mu- anti-nu_mu PHOTOS ISGW2; +0.0307 eta mu- anti-nu_mu PHOTOS ISGW2; +0.0106 eta' mu- anti-nu_mu PHOTOS ISGW2; +0.0027 K0 mu- anti-nu_mu PHOTOS ISGW2; +0.0010 K*0 mu- anti-nu_mu PHOTOS ISGW2; +0.00616 mu- anti-nu_mu PHOTOS SLN; +0.064 tau- anti-nu_tau SLN; +0.0440 phi pi- SVS; +0.0210 eta pi- PHSP; +0.0470 eta' pi- PHSP; +0.0034 omega pi- SVS; +0.0004 rho0 pi- SVS; +0.0004 rho- pi0 SVS; +0.0010 pi- pi0 PHSP; +0.010 f_0 pi- PHSP; +0.0023 f_2 pi- PHSP; +0.0820 phi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.131 rho- eta SVS; +0.122 rho- eta' SVS; +0.00005 pi- pi- pi+ PHSP; +0.00005 pi- pi0 pi0 PHSP; +0.010 phi pi- pi0 PHSP; +0.0150 eta pi- pi0 PHSP; +0.0150 eta' pi- pi0 PHSP; +0.008 phi pi- pi- pi+ PHSP; +0.0050 phi pi- pi0 pi0 PHSP; +0.0050 eta pi- pi- pi+ PHSP; +0.0050 eta pi- pi0 pi0 PHSP; +# +0.0440 K0 K- PHSP; +0.0400 K*0 K- SVS; +0.0530 K*- K0 SVS; +0.0700 K*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.003 K0 K- pi0 PHSP; +0.0012 K*0 K- pi0 PHSP; +0.0012 K*- K0 pi0 PHSP; +0.004 K*0 K*- pi0 PHSP; +# +0.0110 K+ K- pi- PHSP; +0.0010 K0 K- pi+ pi- PHSP; +0.0010 K0 K- pi0 pi0 PHSP; +0.0043 K- K+ pi- pi+ pi- PHSP; +0.0003 phi K- SVS; +0.0002 eta K- PHSP; +0.0002 eta' K- PHSP; +0.0002 eta K- pi0 PHSP; +0.0002 eta K- pi+ pi- PHSP; +0.0002 eta' K- pi0 PHSP; +0.0002 eta' K- pi+ pi- PHSP; +0.0002 K- K- K+ PHSP; +0.0040 anti-K0 pi- PHSP; +0.0015 rho- anti-K0 SVS; +0.0015 rho0 K- SVS; +0.0010 anti-K0 pi- pi0 PHSP; +0.0025 a_1- anti-K0 SVS; +0.0079 anti-K*0 pi- SVS; +0.0050 anti-K*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0050 anti-K*0 pi- pi0 PHSP; +Enddecay +# +# D** +# +Decay D_0*+ +0.3333 D+ pi0 PHSP; +0.6667 D0 pi+ PHSP; +Enddecay +Decay D_0*- +0.3333 D- pi0 PHSP; +0.6667 anti-D0 pi- PHSP; +Enddecay +Decay D_0*0 +0.3333 D0 pi0 PHSP; +0.6667 D+ pi- PHSP; +Enddecay +Decay anti-D_0*0 +0.3333 anti-D0 pi0 PHSP; +0.6667 D- pi+ PHSP; +Enddecay +# + +SetLineshapePW D_1+ D*+ pi0 2 +SetLineshapePW D_1+ D*0 pi+ 2 +SetLineshapePW D_1- D*- pi0 2 +SetLineshapePW D_1- anti-D*0 pi- 2 +SetLineshapePW D_10 D*0 pi0 2 +SetLineshapePW D_10 D*+ pi- 2 +SetLineshapePW anti-D_10 anti-D*0 pi0 2 +SetLineshapePW anti-D_10 D*- pi+ 2 + +Decay D_1+ +0.3333 D*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay D_1- +0.3333 D*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 anti-D*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay D_10 +0.3333 D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-D_10 +0.3333 anti-D*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.6667 D*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# +Decay D'_1+ +0.3333 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay D'_1- +0.3333 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay D'_10 +0.6667 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-D'_10 +0.3333 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.6667 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# + +SetLineshapePW D_2*+ D*+ pi0 2 +SetLineshapePW D_2*+ D*0 pi+ 2 +SetLineshapePW D_2*- D*- pi0 2 +SetLineshapePW D_2*- anti-D*0 pi- 2 +SetLineshapePW D_2*0 D*0 pi0 2 +SetLineshapePW D_2*0 D*+ pi- 2 +SetLineshapePW anti-D_2*0 anti-D*0 pi0 2 +SetLineshapePW anti-D_2*0 D*- pi+ 2 + +Decay D_2*+ +0.1030 D*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 D*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D+ pi0 TSS; +0.4590 D0 pi+ TSS; +Enddecay +Decay D_2*- +0.1030 D*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 anti-D*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D- pi0 TSS; +0.4590 anti-D0 pi- TSS; +Enddecay +Decay D_2*0 +0.2090 D*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1030 D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 D0 pi0 TSS; +0.4590 D+ pi- TSS; +Enddecay +Decay anti-D_2*0 +0.1030 anti-D*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2090 D*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.2290 anti-D0 pi0 TSS; +0.4590 D- pi+ TSS; +Enddecay +# +# D_s ** +# +Decay D_s0*+ +# 0.5000 D+ K0 PHSP; +# 0.5000 D0 K+ PHSP; +1.000 D_s+ pi0 PHSP; +Enddecay +Decay D_s0*- +# 0.5000 D- anti-K0 PHSP; +# 0.5000 anti-D0 K- PHSP; +1.000 D_s- pi0 PHSP; +Enddecay +Decay D'_s1+ +0.5000 D*+ K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.5000 D*0 K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.0000 gamma D_s*+ PHSP; +0.0000 gamma D_s+ PHSP; +Enddecay +Decay D'_s1- +0.5000 D*- anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.5000 anti-D*0 K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +0.0000 gamma D_s*- PHSP; +0.0000 gamma D_s- PHSP; +Enddecay +Decay D_s1+ +0.80000 D_s*+ pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.20000 D_s+ gamma VSP_PWAVE; +Enddecay +Decay D_s1- +0.80000 D_s*- pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.20000 D_s- gamma VSP_PWAVE; +Enddecay +Decay D_s2*+ +0.0500 D*+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0500 D*0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.4300 D+ K0 TSS; +0.4700 D0 K+ TSS; +Enddecay +Decay D_s2*- +0.0500 D*- anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0500 anti-D*0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.4300 D- anti-K0 TSS; +0.4700 anti-D0 K- TSS; +Enddecay +# +# +# Charm Mesons: Radially Excited States +# +Decay D(2S)0 +0.6667 D*+ pi- SVS; +0.3333 D*0 pi0 SVS; +Enddecay +Decay anti-D(2S)0 +0.3333 anti-D*0 pi0 SVS; +0.6667 D*- pi+ SVS; +Enddecay +Decay D(2S)+ +0.3333 D*+ pi0 SVS; +0.6667 D*0 pi+ SVS; +Enddecay +Decay D(2S)- +0.3333 D*- pi0 SVS; +0.6667 anti-D*0 pi- SVS; +Enddecay +Decay D*(2S)0 +0.3333 D*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D0 pi0 VSS; +0.3333 D+ pi- VSS; +Enddecay +Decay anti-D*(2S)0 +0.1667 anti-D*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 anti-D0 pi0 VSS; +0.3333 D- pi+ VSS; +Enddecay +Decay D*(2S)+ +0.1667 D*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 D*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D+ pi0 VSS; +0.3333 D0 pi+ VSS; +Enddecay +Decay D*(2S)- +0.1667 D*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 anti-D*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1667 D- pi0 VSS; +0.3333 anti-D0 pi- VSS; +Enddecay +# +# +# Strange Mesons updated to PDG 2008 +# +# +# Leave the following decay for Geant +#Decay K_S0 +#0.691321852 pi+ pi- PHSP; #[Reconstructed PDG2011] +#0.306221852 pi0 pi0 PHSP; #[Reconstructed PDG2011] +#0.000000201 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001722185 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000042831 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000025 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000002399 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000344328 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000344328 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +# K_L0 is decayed in GEANT +# +Decay K0 +0.500 K_L0 PHSP; +0.500 K_S0 PHSP; +Enddecay +Decay anti-K0 +0.500 K_L0 PHSP; +0.500 K_S0 PHSP; +Enddecay +# +Decay K*0 +0.6657 K+ pi- VSS; +0.3323 K0 pi0 VSS; +0.0020 K0 gamma VSP_PWAVE; +Enddecay +# +Decay anti-K*0 +0.6657 K- pi+ VSS; +0.3323 anti-K0 pi0 VSS; +0.0020 anti-K0 gamma VSP_PWAVE; +Enddecay +# +Decay K*+ +0.6657 K0 pi+ VSS; +0.3323 K+ pi0 VSS; +0.0020 K+ gamma VSP_PWAVE; +Enddecay +# +Decay K*- +0.6657 anti-K0 pi- VSS; +0.3323 K- pi0 VSS; +0.0020 K- gamma VSP_PWAVE; +Enddecay +# +# The decays below are for particle aliases and used when +# generating CP violating decays that depends on the decay +# of the neutral K* +# +Decay K*L +1.0000 pi0 K_L0 VSS; +Enddecay +Decay K*S +1.0000 pi0 K_S0 VSS; +Enddecay +Decay K*BL +1.0000 pi0 K_L0 VSS; +Enddecay +Decay K*BS +1.0000 pi0 K_S0 VSS; +Enddecay +Decay K*0T +1.0000 pi- K+ VSS; +Enddecay +Decay anti-K*0T +1.0000 pi+ K- VSS; +Enddecay +# +# +Decay K_0*+ +0.6667 K0 pi+ PHSP; +0.3333 K+ pi0 PHSP; +Enddecay +# +Decay K_0*- +0.6667 anti-K0 pi- PHSP; +0.3333 K- pi0 PHSP; +Enddecay +# +Decay K_0*0 +0.6667 K+ pi- PHSP; +0.3333 K0 pi0 PHSP; +Enddecay +# +Decay K_0*0N +1.0000 K0 pi0 PHSP; +Enddecay +# +Decay anti-K_0*0 +0.6667 K- pi+ PHSP; +0.3333 anti-K0 pi0 PHSP; +Enddecay +# +Decay anti-K_0*0N +1.0000 anti-K0 pi0 PHSP; +Enddecay +# +Decay K_10 +0.2800 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K0 pi+ pi- PHSP; +0.1244 K+ pi- pi0 PHSP; +0.0412 K0 pi0 pi0 PHSP; +Enddecay +# +Decay anti-K_10 +0.2800 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 anti-K0 pi+ pi- PHSP; +0.1244 K- pi+ pi0 PHSP; +0.0412 anti-K0 pi0 pi0 PHSP; +Enddecay +# +Decay K_1+ +0.2800 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K+ pi+ pi- PHSP; +0.1244 K0 pi+ pi0 PHSP; +0.0412 K+ pi0 pi0 PHSP; +Enddecay +# +Decay K_1- +0.2800 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1400 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1067 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0533 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +#To large masses can cause infinit loops +0.1100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1444 K- pi+ pi- PHSP; +0.1244 anti-K0 pi- pi0 PHSP; +0.0412 K- pi0 pi0 PHSP; +Enddecay +# +Decay K'_1+ +0.6300 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K+ pi+ pi- PHSP; +0.0067 K+ pi0 pi0 PHSP; +Enddecay +# +Decay K'_1- +0.6300 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho- anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K- pi+ pi- PHSP; +0.0067 K- pi0 pi0 PHSP; +Enddecay +# +Decay K'_10 +0.6300 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 K0 pi+ pi- PHSP; +0.0067 K0 pi0 pi0 PHSP; +Enddecay +# +Decay anti-K'_10 +0.6300 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3100 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0200 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0100 omega anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0133 anti-K0 pi+ pi- PHSP; +0.0067 anti-K0 pi0 pi0 PHSP; +Enddecay +# +Decay K_2*+ +0.3340 K0 pi+ TSS; +0.1670 K+ pi0 TSS; +0.1645 K*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi0 PHSP; +0.0450 K*+ pi+ pi- PHSP; +0.0450 K*+ pi0 pi0 PHSP; +0.0580 rho+ K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay K_2*- +0.3340 anti-K0 pi- TSS; +0.1670 K- pi0 TSS; +0.1645 anti-K*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi- pi0 PHSP; +0.0450 K*- pi+ pi- PHSP; +0.0450 K*- pi0 pi0 PHSP; +0.0580 rho- K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay K_2*0 +0.3340 K+ pi- TSS; +0.1670 K0 pi0 TSS; +0.1645 K*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 K*0 pi+ pi- PHSP; +0.0450 K*0 pi0 pi0 PHSP; +0.0450 K*+ pi- pi0 PHSP; +0.0580 rho- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K_2*0 +0.3340 K- pi+ TSS; +0.1670 anti-K0 pi0 TSS; +0.1645 K*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0835 anti-K*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0450 anti-K*0 pi+ pi- PHSP; +0.0450 anti-K*0 pi0 pi0 PHSP; +0.0450 K*- pi+ pi0 PHSP; +0.0580 rho+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 rho0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0290 omega anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay + + + + +# Decay K*(1410) +Decay K'*0 +0.0467 K+ pi- VSS; +0.0233 K0 pi0 VSS; +0.5760 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K'*0 +0.0467 K- pi+ VSS; +0.0233 anti-K0 pi0 VSS; +0.5760 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K'*+ +0.0467 K0 pi+ VSS; +0.0233 K+ pi0 VSS; +0.5760 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K'*- +0.0467 anti-K0 pi- VSS; +0.0233 K- pi0 VSS; +0.5760 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2880 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0440 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0220 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# + + +# Decay K*(1680) +Decay K''*0 +0.2580 K+ pi- VSS; +0.1290 K0 pi0 VSS; +0.2093 K*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay anti-K''*0 +0.2580 K- pi+ VSS; +0.1290 anti-K0 pi0 VSS; +0.2093 K*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 anti-K*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K''*+ +0.2580 K0 pi+ VSS; +0.1290 K+ pi0 VSS; +0.2093 K*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho+ K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay K''*- +0.2580 anti-K0 pi- VSS; +0.1290 K- pi0 VSS; +0.2093 anti-K*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1047 K*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.1993 rho- K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0997 rho0 K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay + +Decay Xsd +1.00000 d anti-s PYTHIA 11; +Enddecay + +Decay anti-Xsd +1.00000 anti-d s PYTHIA 11; +Enddecay + +Decay Xsu +1.00000 u anti-s PYTHIA 11; +Enddecay + +Decay anti-Xsu +1.00000 anti-u s PYTHIA 11; +Enddecay + +# Xss decays can be uncommented when Jst74/lucomp.F recognizes Xss +Decay Xss +1.00000 s anti-s PYTHIA 11; +Enddecay + +Decay anti-Xss +1.00000 anti-s s PYTHIA 11; +Enddecay + +# +# Light Mesons Updated to PDG 2008 +# +Decay pi0 +0.988228297 gamma gamma PHSP; #[Reconstructed PDG2011] +0.011738247 e+ e- gamma PI0_DALITZ; #[Reconstructed PDG2011] +0.000033392 e+ e+ e- e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000065 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta +0.393100000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.325700000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.227400000 pi- pi+ pi0 ETA_DALITZ; #[Reconstructed PDG2011] +0.046000000 gamma pi- pi+ PHSP; #[Reconstructed PDG2011] +0.007000000 gamma e+ e- PHSP; #[Reconstructed PDG2011] +0.000310000 gamma mu+ mu- PHSP; #[Reconstructed PDG2011] +0.000270000 gamma gamma pi0 PHSP; #[Reconstructed PDG2011] +0.000214200 pi+ pi- e+ e- PHSP; #[Reconstructed PDG2011] +0.000005800 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay rho0 +1.000 pi+ pi- VSS; +Enddecay +Decay rho+ +1.000 pi+ pi0 VSS; +Enddecay +Decay rho- +1.000 pi- pi0 VSS; +Enddecay +# +Decay omega +0.892000000 pi- pi+ pi0 OMEGA_DALITZ; #[Reconstructed PDG2011] +0.082800000 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.015300000 pi- pi+ VSS; #[Reconstructed PDG2011] +0.000460000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000770000 pi0 e+ e- PHOTOS PHSP; #[Reconstructed PDG2011] +0.000130000 pi0 mu+ mu- PHOTOS PHSP; #[Reconstructed PDG2011] +0.00150 pi+ pi- gamma PHSP; +0.000066000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.00050 pi+ pi- pi+ pi- PHSP; +0.000072800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 mu+ mu- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta' +0.432000000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.217000000 pi0 pi0 eta PHSP; #[Reconstructed PDG2011] +0.293511000 rho0 gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.027500000 omega gamma SVP_HELAMP 1.0 0.0 1.0 0.0; #[Reconstructed PDG2011] +0.022200000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.001680000 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.000109000 gamma mu- mu+ PHOTOS PHSP; #[Reconstructed PDG2011] +0.003600000 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002400000 pi+ pi- e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay phi +0.489000000 K+ K- VSS; #[Reconstructed PDG2011] +0.342000000 K_L0 K_S0 VSS; #[Reconstructed PDG2011] +0.0425 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0425 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0250 pi+ pi- pi0 PHSP; +0.013090000 eta gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000687600 pi0 gamma VSP_PWAVE; #[Reconstructed PDG2011] +0.000295400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000287000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000113000 pi0 pi0 gamma PHSP; #[Reconstructed PDG2011] +0.000115000 eta e+ e- PHSP; #[Reconstructed PDG2011] +0.000322000 f_0 gamma PHSP; #[Reconstructed PDG2011] +0.000074000 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000047000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000041000 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000004000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011200 pi0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000072700 pi0 eta gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000062500 eta' gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000014000 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay a_1+ +0.4920 rho0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5080 rho+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay a_10 +0.5000 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5000 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay a_1- +0.4920 rho0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.5080 rho- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay a_2+ +0.3500 rho0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi+ TSS; +0.1000 omega pi+ pi0 PHSP; +0.0490 anti-K0 K+ TSS; +0.0027 pi+ gamma PHSP; +0.0053 eta' pi+ TSS; +Enddecay +# +Decay a_2- +0.3500 rho0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi- TSS; +0.1000 omega pi- pi0 PHSP; +0.0490 anti-K0 K- TSS; +0.0027 pi- gamma PHSP; +0.0053 eta' pi- TSS; +Enddecay +# +Decay a_20 +0.3500 rho+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.3500 rho- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.1430 eta pi0 TSS; +0.1000 omega pi+ pi- PHSP; +0.0245 K+ K- TSS; +0.01225 K_L0 K_L0 TSS; +0.01225 K_S0 K_S0 TSS; +0.0027 pi0 gamma PHSP; +0.0053 eta' pi0 TSS; +Enddecay +# +Decay b_1+ +0.9984 omega pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi+ gamma VSP_PWAVE; +Enddecay +Decay b_1- +0.9984 omega pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi- gamma VSP_PWAVE; +Enddecay +Decay b_10 +0.9984 omega pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.0016 pi0 gamma VSP_PWAVE; +Enddecay +# +Decay a_00 +0.9000 eta pi0 PHSP; +0.0500 K+ K- PHSP; +0.0250 K_S0 K_S0 PHSP; +0.0250 K_L0 K_L0 PHSP; +Enddecay +Decay a_0+ +0.9000 eta pi+ PHSP; +0.1000 anti-K0 K+ PHSP; +Enddecay +Decay a_0- +0.9000 eta pi- PHSP; +0.1000 K0 K- PHSP; +Enddecay +# +Decay f_0 +0.6667 pi+ pi- PHSP; +0.3333 pi0 pi0 PHSP; +#0.1100 K+ K- PHSP; +#0.0550 K_S0 K_S0 PHSP; +#0.0550 K_L0 K_L0 PHSP; +Enddecay +# +Decay f'_0 +0.5200 pi+ pi- PHSP; +0.2600 pi0 pi0 PHSP; +0.0750 pi+ pi+ pi- pi- PHSP; +0.0750 pi+ pi- pi0 pi0 PHSP; +0.0350 K+ K- PHSP; +0.0175 K_S0 K_S0 PHSP; +0.0175 K_L0 K_L0 PHSP; +Enddecay +# +Decay f_1 +0.110000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043364159 rho0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.043442860 rho- pi+ pi0 PHSP; #[Reconstructed PDG2011] +0.094440999 a_00 pi0 VSS; #[Reconstructed PDG2011] +0.094440999 a_0+ pi- VSS; #[Reconstructed PDG2011] +0.094440999 a_0- pi+ VSS; #[Reconstructed PDG2011] +0.086570916 eta pi+ pi- PHSP; #[Reconstructed PDG2011] +0.043285458 eta pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +0.010152407 K0 anti-K0 pi0 PHSP; #[Reconstructed PDG2011] +0.020226114 anti-K0 K+ pi- PHSP; #[Reconstructed PDG2011] +0.020226114 K0 K- pi+ PHSP; #[Reconstructed PDG2011] +0.055000000 gamma rho0 PHSP; #[Reconstructed PDG2011] +0.220000000 pi0 pi0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000740000 phi gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay f'_1 +0.2500 K+ K- pi0 PHSP; +0.2500 K0 anti-K0 pi0 PHSP; +0.2500 anti-K0 K+ pi- PHSP; +0.2500 K0 K- pi+ PHSP; +Enddecay +# +Decay f_2 +0.5650 pi+ pi- TSS; +0.2820 pi0 pi0 TSS; +0.028000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.071000000 pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.003000000 pi0 pi0 pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0230 K+ K- TSS; +0.0115 K_S0 K_S0 TSS; +0.0115 K_L0 K_L0 TSS; +0.004000000 eta eta TSS; #[Reconstructed PDG2011] +0.000016400 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay f_0(1500) +0.019000000 eta eta' PHSP; #[Reconstructed PDG2011] +0.051000000 eta eta PHSP; #[Reconstructed PDG2011] +0.1410 pi0 pi0 pi0 pi0 PHSP; +0.3540 pi+ pi- pi+ pi- PHSP; +0.2330 pi+ pi- PHSP; +0.1160 pi0 pi0 PHSP; +0.0430 K+ K- PHSP; +0.0215 K_S0 K_S0 PHSP; +0.0215 K_L0 K_L0 PHSP; +Enddecay +# +Decay f'_2 +0.443904021 K+ K- TSS; #[Reconstructed PDG2011] +0.221952010 K_S0 K_S0 TSS; #[Reconstructed PDG2011] +0.221952010 K_L0 K_L0 TSS; #[Reconstructed PDG2011] +0.104000000 eta eta TSS; #[Reconstructed PDG2011] +0.005493862 pi+ pi- TSS; #[Reconstructed PDG2011] +0.002696987 pi0 pi0 TSS; #[Reconstructed PDG2011] +0.000001110 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay h_1 +0.3333 rho+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3333 rho- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.3334 rho0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay h'_1 +0.2500 K*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 K*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 anti-K*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.2500 K*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# +Decay rho(2S)+ +0.4000 pi+ pi0 PHSP; +0.4000 pi+ pi+ pi- pi0 PHSP; +0.2000 pi+ pi0 pi0 pi0 PHSP; +Enddecay +Decay rho(2S)- +0.4000 pi- pi0 PHSP; +0.4000 pi- pi+ pi- pi0 PHSP; +0.2000 pi- pi0 pi0 pi0 PHSP; +Enddecay +Decay rho(2S)0 +0.4000 pi+ pi- PHSP; +0.3500 pi+ pi- pi+ pi- PHSP; +0.1500 pi+ pi- pi0 pi0 PHSP; +0.1000 pi0 pi0 pi0 pi0 PHSP; +Enddecay +Decay phi(1680) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay rho(3S)0 +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +Decay omega(1650) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(1900) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +Decay omega(2S) +0.08 pi+ pi- PHSP; +0.05 pi+ pi+ pi- pi- PHSP; +0.10 pi0 pi+ pi- PHSP; +0.10 pi0 pi+ pi+ pi- pi- PHSP; +0.12 pi0 pi0 pi+ pi- PHSP; +0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.05 pi0 pi0 pi0 pi+ pi- PHSP; +0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +0.04 K+ K- pi+ pi- PHSP; +0.02 K0 K- pi+ PHSP; +0.02 anti-K0 K+ pi- PHSP; +0.02 K0 K- pi+ pi+ pi- PHSP; +0.02 anti-K0 K+ pi- pi- pi+ PHSP; +0.02 K0 K- pi0 pi+ PHSP; +0.02 anti-K0 K+ pi0 pi- PHSP; +0.02 eta pi0 pi+ pi- PHSP; +0.01 eta rho- pi0 pi+ PHSP; +0.01 eta rho+ pi0 pi- PHSP; +Enddecay +#Decay rho(2150) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay omega(1960) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +#Decay rho(1965) +#0.08 pi+ pi- PHSP; +#0.05 pi+ pi+ pi- pi- PHSP; +#0.10 pi0 pi+ pi- PHSP; +#0.10 pi0 pi+ pi+ pi- pi- PHSP; +#0.12 pi0 pi0 pi+ pi- PHSP; +#0.04 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.14 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.05 pi0 pi0 pi0 pi+ pi- PHSP; +#0.06 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi+ pi+ pi+ pi- pi- pi- PHSP; +#0.03 pi0 pi0 pi0 pi0 pi+ pi+ pi- pi- PHSP; +#0.04 K+ K- pi+ pi- PHSP; +#0.02 K0 K- pi+ PHSP; +#0.02 anti-K0 K+ pi- PHSP; +#0.02 K0 K- pi+ pi+ pi- PHSP; +#0.02 anti-K0 K+ pi- pi- pi+ PHSP; +#0.02 K0 K- pi0 pi+ PHSP; +#0.02 anti-K0 K+ pi0 pi- PHSP; +#0.02 eta pi0 pi+ pi- PHSP; +#0.01 eta rho- pi0 pi+ PHSP; +#0.01 eta rho+ pi0 pi- PHSP; +#Enddecay +# +# +# cc= mesons Updated to PDG 2008 +# +Decay eta_c +0.001300000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002700000 phi phi SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; #[Reconstructed PDG2011] +0.002900000 phi K+ K- PHSP; #[Reconstructed PDG2011] +0.0067 rho0 rho0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0133 rho+ rho- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.012000000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.015000000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0327 eta pi+ pi- PHSP; +0.0163 eta pi0 pi0 PHSP; +0.0273 eta' pi+ pi- PHSP; +0.0137 eta' pi0 pi0 PHSP; +0.0117 pi0 K+ K- PHSP; +0.0233 K+ anti-K0 pi- PHSP; +0.0233 K- K0 pi+ PHSP; +0.0117 K0 anti-K0 pi0 PHSP; +0.0046 K*+ K*- SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0; +0.0046 K*0 anti-K*0 SVV_HELAMP 1.0 0.0 0.0 0.0 -1.0 0.0 ; +0.01 K*0 K- pi+ PHSP; +0.01 anti-K*0 K+ pi- PHSP; +# +#March 2009 New Modes +0.01500 K*0 anti-K*0 pi+ pi- PHSP; +0.007100000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.015000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001040000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.007600000 f_2 f_2 PHSP; #[Reconstructed PDG2011] +0.027000000 f_2 f'_2 PHSP; #[Reconstructed PDG2011] +# +0.682497000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.000063000 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay eta_c(2S) + 0.019 K+ anti-K0 pi- PHSP; + 0.019 K- K0 pi+ PHSP; + 0.0095 pi0 K+ K- PHSP; + 0.0095 K0 anti-K0 pi0 PHSP; + 0.943 rndmflav anti-rndmflav PYTHIA 12; +Enddecay +# +Decay J/psi +0.059400000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.059300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.005600000 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.00563 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00563 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.004000000 omega pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.00364 a_20 rho0 PHSP; +0.00363 a_2+ rho- PHSP; +0.00363 a_2- rho+ PHSP; +0.008500000 omega pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004300000 omega f_2 PHSP; #[Reconstructed PDG2011] +0.004300000 omega pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00300 K*0 anti-K_2*0 PHSP; +0.00300 anti-K*0 K_2*0 PHSP; +0.00305 omega K*0 anti-K0 PHSP; +0.00305 omega anti-K*0 K0 PHSP; +0.00256 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00256 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.002195 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.00190 K_1+ K- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.00190 K_1- K+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +0.003400000 omega pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001500000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001500000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +# +0.001700000 omega pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi- K+ K_L0 PHSP; +0.001700000 omega pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0017 omega pi+ K- K_L0 PHSP; +0.0000 omega pi- K+ K0 PHSP; +0.0000 omega pi- K+ anti-K0 PHSP; +0.0000 omega pi+ K- K0 PHSP; +0.0000 omega pi+ K- anti-K0 PHSP; +# +0.002300000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.002290000 eta pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000545 phi K*0 anti-K0 PHSP; +0.000545 phi anti-K*0 K0 PHSP; +0.000545 phi K*+ K- PHSP; +0.000545 phi K*- K+ PHSP; +0.0008 omega K0 anti-K0 PHSP; +0.0008 omega K+ K- PHSP; +0.001660000 phi pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001600000 Delta++ anti-p- pi- PHSP; #[Reconstructed PDG2011] +0.0016 anti-Delta-- p+ pi+ PHSP; +0.001740000 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000915 phi K0 anti-K0 PHSP; +0.000915 phi K+ K- PHSP; +0.001100000 omega p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.0011 Delta++ anti-Delta-- PHSP; +0.000515 Sigma- anti-Sigma+ PHSP; +0.001500000 Sigma+ anti-Sigma- PHSP; #[Reconstructed PDG2011] +0.000720000 eta pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000147000 pi+ pi- PHSP; #[Reconstructed PDG2011] + +0.017000000 gamma eta_c PHSP; #[Reconstructed PDG2011] +0.008300000 gamma pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0061 gamma eta pi+ pi- PHSP; +0.00225 gamma rho+ rho- PHSP; +0.00225 gamma rho0 rho0 PHSP; +0.005280000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.001850000 gamma pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002100000 gamma K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001610000 gamma omega omega PHSP; #[Reconstructed PDG2011] +0.001430000 gamma f_2 PHSP; #[Reconstructed PDG2011] +0.0040 gamma K*0 anti-K*0 PHSP; +# +# March 2009 New Modes +0.001100000 eta pi- K+ K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi- K+ K_L0 PHSP; +0.001100000 eta pi+ K- K_S0 PHSP; #[Reconstructed PDG2011] +0.0011 eta pi+ K- K_L0 PHSP; +0.0000 eta pi- K+ K0 PHSP; +0.0000 eta pi- K+ anti-K0 PHSP; +0.0000 eta pi+ K- K0 PHSP; +0.0000 eta pi+ K- anti-K0 PHSP; +# +0.055000000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.029000000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.020700000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.019400000 pi+ pi- pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.016100000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.009000000 pi+ pi- pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.006600000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.001840000 pi+ pi- K+ K- eta PHSP; #[Reconstructed PDG2011] +0.002450000 pi0 pi0 K+ K- PHSP; #[Reconstructed PDG2011] +0.005000000 pi+ pi- pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.00102 K+ K- pi0 PHSP; +0.00102 K0 anti-K0 pi0 PHSP; +0.00203 K+ anti-K0 pi- PHSP; +0.00203 K- K0 pi+ PHSP; +0.003550000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +#### Already included above 0.00229 pi+ pi- pi+ pi- eta PHSP; +0.004300000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002170000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.001190000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.006000000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002300000 p+ anti-p- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.002000000 p+ anti-p- eta PHSP; #[Reconstructed PDG2011] +0.002200000 n0 anti-n0 PHSP; #[Reconstructed PDG2011] +0.004000000 n0 anti-n0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001290000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.002120000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.001200000 Xi0 anti-Xi0 PHSP; #[Reconstructed PDG2011] +0.000850000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.001610000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +# +0.084693481 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.365559757 g g g PYTHIA 4; #[Reconstructed PDG2011] +0.032103862 gamma g g PYTHIA 4; #[Reconstructed PDG2011] +0.0 K0 anti-K0 PHSP; +0.0 K_S0 K_S0 PHSP; +0.0 K_L0 K_L0 PHSP; +0.000146000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +0.001900000 K'_1+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 K'_1- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 phi pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000560000 phi pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000680000 omega f'_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 Xi*- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 omega pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 phi f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi*0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 phi f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000182000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 omega f_0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000230000 K*0 anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000720000 phi f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 p+ anti-p- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000045000 p+ anti-p- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000890000 p+ K- anti-Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000760000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 p+ K- anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000237000 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Lambda0 anti-Lambda0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000012000 gamma gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 gamma f_2 f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001104000 gamma eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 gamma f_1 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma phi phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000380000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000034900 gamma pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008800000 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay psi(2S) +0.007720000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.007700000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.003000000 tau+ tau- PHOTOS VLL; #[Reconstructed PDG2011] +0.336000000 J/psi pi+ pi- VVPIPI; #[Reconstructed PDG2011] +0.177300000 J/psi pi0 pi0 VVPIPI; #[Reconstructed PDG2011] +0.032800000 J/psi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.001300000 J/psi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.096200000 gamma chi_c0 PHSP; #[Reconstructed PDG2011] +0.092000000 gamma chi_c1 PHSP; #[Reconstructed PDG2011] +0.087400000 gamma chi_c2 PHSP; #[Reconstructed PDG2011] +0.003400000 gamma eta_c PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000121000 gamma eta' PHSP; #[Reconstructed PDG2011] +0.000210000 gamma f_2 PHSP; #[Reconstructed PDG2011] +0.003500000 pi+ pi- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000350000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002900000 pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.000200000 b_1+ pi- PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000200000 b_1- pi+ PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000240000 b_10 pi0 PARTWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000168000 pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.0000545 K*0 anti-K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000545 anti-K*0 K0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000022 rho0 eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000021000 omega pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000028000 phi eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000008 rho+ pi- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000008 rho- pi+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000008 rho0 pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000001 phi pi0 PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000001 omega eta PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000085 K*+ K- PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.0000085 K*- K+ PARTWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +0.000185000 omega K+ K- PHSP; #[Reconstructed PDG2011] +0.000340000 K+ K- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000600000 p+ anti-p- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000133000 p+ anti-p- pi0 PHSP; #[Reconstructed PDG2011] +0.000276000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1+ K- PHSP; #[Reconstructed PDG2011] +0.000500000 K_1- K+ PHSP; #[Reconstructed PDG2011] +0.000220000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.000128000 Delta++ anti-Delta-- PHSP; #[Reconstructed PDG2011] +0.000220000 Sigma0 anti-Sigma0 PHSP; #[Reconstructed PDG2011] +0.00026 Sigma*+ anti-Sigma*- PHSP; +0.000180000 Xi- anti-Xi+ PHSP; #[Reconstructed PDG2011] +0.000080000 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000063000 K+ K- PHSP; #[Reconstructed PDG2011] +0.000070000 phi K- K+ PHSP; #[Reconstructed PDG2011] +0.000117000 phi pi- pi+ PHSP; #[Reconstructed PDG2011] +0.000170000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0008 h_c pi0 PHSP; +0.0 K0 anti-K0 PHSP; +0.0 K_S0 K_S0 PHSP; +0.0 K_L0 K_L0 PHSP; +0.000054000 K_S0 K_L0 PHSP; #[Reconstructed PDG2011] +# +# March 2009 New Modes +0.004800000 pi+ pi- pi+ pi- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.001200000 pi+ pi- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001300000 K+ K- pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.001000000 K+ K- pi+ pi- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +0.001900000 K+ K- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001260000 K+ K- pi+ pi- pi0 PHSP; #[Reconstructed PDG2011] +# +0.013568632 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.103318590 g g g PYTHIA 4; #[Reconstructed PDG2011] +0.007344778 gamma g g PYTHIA 4; #[Reconstructed PDG2011] +0.000100000 Lambda0 anti-p- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000180000 Lambda0 anti-p- K+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Lambda0 anti-Lambda0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000280000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 eta p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000069000 omega p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 p+ anti-n0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000950000 eta pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000450000 eta' pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 omega pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 omega f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000220000 rho0 K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 K*0 anti-K_2*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000050000 rho0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000730000 p+ anti-p- pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000060000 K+ K- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 K+ K- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000031000 phi eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000032000 omega eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000027000 p+ anti-p- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000044000 phi f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000870000 gamma eta pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000400000 gamma pi+ pi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 gamma K+ K- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000029000 gamma p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000028000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay psi(4040) +0.000010700 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000014000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000005000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.002099938 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.000899973 D+ D- VSS; #[Reconstructed PDG2011] +0.167895013 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.167895013 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.181494610 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.159695257 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.098197084 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.040298803 D_s+ D_s- VSS; #[Reconstructed PDG2011] +Enddecay +# +Decay psi(4160) +0.000008100 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000009999 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000006000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.039697852 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.038697906 D+ D- VSS; #[Reconstructed PDG2011] +0.051997187 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051997187 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.051497214 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.298613845 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.308183327 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.009999459 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.048897355 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.048897355 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay psi(4415) +0.000009400 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.000011000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.000007000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.024399331 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.021899400 D+ D- VSS; #[Reconstructed PDG2011] +0.031999123 D*0 anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.031999123 anti-D*0 D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*+ D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.034299060 D*- D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.345090544 D*0 anti-D*0 PHSP; #[Reconstructed PDG2011] +0.353890303 D*+ D*- PHSP; #[Reconstructed PDG2011] +0.000000000 D0 anti-D0 pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D- pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D+ pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ D- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D+ pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D*+ anti-D0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D*- D0 pi+ PHSP; #[Reconstructed PDG2011] +0.000000000 D+ anti-D*0 pi- PHSP; #[Reconstructed PDG2011] +0.000000000 D- D*0 pi+ PHSP; #[Reconstructed PDG2011] +0.011799677 D_s+ D_s- VSS; #[Reconstructed PDG2011] +0.041998849 D_s*+ D_s- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.041998849 D_s*- D_s+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.026299279 D_s*+ D_s*- PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s*+ D_s- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D_s*- pi0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s+ D- anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D_s- D+ anti-K0 PHSP; #[Reconstructed PDG2011] +0.000000000 D0 D_s- K+ PHSP; #[Reconstructed PDG2011] +0.000000000 anti-D0 D_s+ K- PHSP; #[Reconstructed PDG2011] +Enddecay +# +Decay chi_c0 +0.011600000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000228000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000222000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.00243 pi0 pi0 PHSP; +0.00487 pi+ pi- PHSP; +0.013800000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.002810000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.012000000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.008900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0100 rho+ pi- pi0 PHSP; +0.0100 rho- pi+ pi0 PHSP; +0.00057 K+ K- PHSP; +0.000920000 phi phi PHSP; #[Reconstructed PDG2011] +0.001700000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0036 anti-K*0 K+ pi- PHSP; +0.0036 K*0 K- pi+ PHSP; +0.0043 K*+ anti-K0 pi- PHSP; +0.0043 K*- K0 pi+ PHSP; +0.018000000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.002100000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.002680000 eta eta PHSP; #[Reconstructed PDG2011] +0.000330000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00086 f_0 f_0 PHSP; +0.0 K0 anti-K0 PHSP; +0.003160000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00282 K_L0 K_L0 PHSP; +0.0 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.002030000 eta' eta' PHSP; #[Reconstructed PDG2011] +0.002200000 omega omega PHSP; #[Reconstructed PDG2011] +0.00325 K_1+ K- PHSP; +0.00325 K_1- K+ PHSP; +0.000990000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001140000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +0.000525 K+ anti-p- Lambda0 PHSP; +0.000525 K- p+ Lambda0 PHSP; +0.005800000 K_S0 K_S0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.00590 K_L0 K_L0 pi+ pi- PHSP; +0.00000 K0 anti-K0 pi+ pi- PHSP; +0.001400000 K+ K- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00150 K+ K- K_L0 K_L0 PHSP; +0.00000 K+ K- K0 anti-K0 PHSP; +# +0.799360000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.034000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005700000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000570000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000370000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001050000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 Sigma0 anti-Sigma0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 Sigma+ anti-Sigma- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 Xi0 anti-Xi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000490000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_c1 +0.344000000 J/psi gamma VVP 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0; #[Reconstructed PDG2011] +0.007600000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000073000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.005800000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.004500000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.003900000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0020 rho+ pi- pi0 PHSP; +0.0020 rho- pi+ pi0 PHSP; +0.0016 anti-K*0 K+ pi- PHSP; +0.0016 K*0 K- pi+ PHSP; +0.001500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0009 K*+ anti-K0 pi- PHSP; +0.0009 K*- K0 pi+ PHSP; +0.000500000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000720000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0003 K+ K- K_S0 K_S0 PHSP; +0.000118000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00385 K+ anti-K0 pi- PHSP; +0.00385 K- K0 pi+ PHSP; +0.000560000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.00001 K_S0 K_S0 PHSP; +0.00001 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.002200000 pi+ pi- eta PHSP; #[Reconstructed PDG2011] +0.002400000 pi+ pi- eta' PHSP; #[Reconstructed PDG2011] +0.001910000 K+ K- pi0 PHSP; #[Reconstructed PDG2011] +# +0.587724 rndmflav anti-rndmflav PYTHIA 12; +0.008700000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001180000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002800000 f_2 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000430000 K+ K- phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000320000 K+ anti-p- Lambda0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000084000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000229000 gamma rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000078000 gamma omega PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + + +# +Decay chi_c2 +0.195000000 gamma J/psi PHSP; #[Reconstructed PDG2011] +0.000256000 gamma gamma PHSP; #[Reconstructed PDG2011] +0.000072000 p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.00072 pi0 pi0 TSS; +0.00145 pi+ pi- TSS; +0.011100000 pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.001780000 K+ K- K+ K- PHSP; #[Reconstructed PDG2011] +0.008600000 pi+ pi- pi+ pi- pi+ pi- PHSP; #[Reconstructed PDG2011] +0.009200000 pi+ pi- K+ K- PHSP; #[Reconstructed PDG2011] +0.004000000 rho0 pi+ pi- PHSP; #[Reconstructed PDG2011] +0.0046 rho+ pi- pi0 PHSP; +0.0046 rho- pi+ pi0 PHSP; +0.001090000 K+ K- TSS; #[Reconstructed PDG2011] +0.002400000 pi+ pi- K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.0003 K+ K- K_S0 K_S0 PHSP; +0.001480000 phi phi PHSP; #[Reconstructed PDG2011] +0.00115 anti-K*0 K+ pi- PHSP; +0.00115 K*0 K- pi+ PHSP; +0.002500000 anti-K*0 K*0 PHSP; #[Reconstructed PDG2011] +0.0016 K*+ anti-K0 pi- PHSP; +0.0016 K*- K0 pi+ PHSP; +0.001320000 pi+ pi- p+ anti-p- PHSP; #[Reconstructed PDG2011] +0.000186000 Lambda0 anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.00000 K0 anti-K0 PHSP; +0.000580000 K_S0 K_S0 PHSP; #[Reconstructed PDG2011] +0.00065 K_L0 K_L0 PHSP; +0.00000 K_S0 K_L0 PHSP; +# +# March 2009 New Modes +0.001900000 omega omega PHSP; #[Reconstructed PDG2011] +0.0007 anti-K0 K+ pi- PHSP; +0.0007 K0 K- pi+ PHSP; +0.001550000 K+ K- phi PHSP; #[Reconstructed PDG2011] +0.001100000 p+ anti-n0 pi- PHSP; #[Reconstructed PDG2011] +# +0.709461000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.020000000 pi+ pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002200000 K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 K+ K- eta pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000520000 pi+ pi- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 pi+ pi- eta' PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000540000 eta eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000330000 K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 p+ anti-p- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 p+ anti-p- eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000850000 pi0 pi0 p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000155000 Xi- anti-Xi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay psi(3770) +0.410000000 D+ D- VSS; #[Reconstructed PDG2011] +0.520000000 D0 anti-D0 VSS; #[Reconstructed PDG2011] +0.001930000 J/psi pi+ pi- PHSP; #[Reconstructed PDG2011] +0.000800000 J/psi pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.0073 gamma chi_c0 PHSP; +0.0029 gamma chi_c1 PHSP; +0.055850300 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.000900000 J/psi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000009700 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 phi eta PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay X_1(3872) +1.000 rndmflav anti-rndmflav PYTHIA 12; +Enddecay +# +# +# bb= Mesons Updated to PDG 2008 +# +Decay eta_b +1.000 rndmflav anti-rndmflav PYTHIA 12; +Enddecay +# +Decay Upsilon +0.024800000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.024800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.026000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.014959973 d anti-d PYTHIA 32; #[Reconstructed PDG2011] +0.044879919 u anti-u PYTHIA 32; #[Reconstructed PDG2011] +0.014959973 s anti-s PYTHIA 32; #[Reconstructed PDG2011] +0.044879919 c anti-c PYTHIA 32; #[Reconstructed PDG2011] +0.774328202 g g g PYTHIA 4; #[Reconstructed PDG2011] +0.028922614 gamma g g PYTHIA 4; #[Reconstructed PDG2011] +0.000063000 gamma pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000017000 gamma pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000011400 gamma K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000290000 gamma pi+ pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000250000 gamma pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 gamma pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 gamma pi+ pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000040000 gamma pi+ pi+ pi- pi- p+ anti-p- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000020000 gamma K+ K+ K- K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000037000 gamma f'_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000101000 gamma f_2 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Upsilon(2S) +0.019100000 e+ e- PHOTOS VLL; #[Reconstructed PDG2011] +0.019300000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.020000000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.181000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.086000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,1) +0.038000000 gamma chi_b0 HELAMP 1. 0. +1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.069000000 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.071500000 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00500 d anti-d PYTHIA 32; +0.02000 u anti-u PYTHIA 32; +0.00500 s anti-s PYTHIA 32; +0.02000 c anti-c PYTHIA 32; +0.42160 g g g PYTHIA 4; +0.01600 gamma g g PYTHIA 4; +0.000210000 Upsilon eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Upsilon(3S) +0.0181 e+ e- PHOTOS VLL; +0.021800000 mu+ mu- PHOTOS VLL; #[Reconstructed PDG2011] +0.022900000 tau+ tau- VLL; #[Reconstructed PDG2011] +0.044000000 Upsilon pi+ pi- PHSP; #[Reconstructed PDG2011] +0.022000000 Upsilon pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.024500000 Upsilon(2S) pi+ pi- PHSP; #[Reconstructed PDG2011] +0.018500000 Upsilon(2S) pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.050000000 Upsilon(2S) gamma gamma PHSP; #[Reconstructed PDG2011] +# V-> gamma S Partial wave (L,S)=(0,1) +0.059000000 gamma chi_b0(2P) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.126000000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma T Partial wave (L,S)=(0,1) +0.131000000 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; #[Reconstructed PDG2011] +0.00700 d anti-d PYTHIA 32; +0.02800 u anti-u PYTHIA 32; +0.00700 s anti-s PYTHIA 32; +0.02800 c anti-c PYTHIA 32; +0.37780 g g g PYTHIA 4; +0.01000 gamma g g PYTHIA 4; +0.003000000 gamma chi_b0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000510000 gamma eta_b PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# + +Decay Upsilon(5S) +0.5 B+ B- PHSP; +0.481487200 g g g PYTHIA 4; #[Reconstructed PDG2011] +0.000002800 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005300000 Upsilon pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007800000 Upsilon(2S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004800000 Upsilon(3S) pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 Upsilon K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay chi_b0 +# S-> gamma V Partial wave (L,S)=(0,0) +0.0500 gamma Upsilon HELAMP 1. 0. 1. 0.; +0.949650000 rndmflav anti-rndmflav PYTHIA 12; #[Reconstructed PDG2011] +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b1 +# V-> gamma V Partial wave (L,S)=(0,1) +0.350000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.643080000 g g PYTHIA 32; #[Reconstructed PDG2011] +0.000200000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000800000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000150000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000860000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000190000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001700000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000750000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000260000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001400000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b2 +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.220000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] +#0.2200 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.775550000 g g PYTHIA 32; #[Reconstructed PDG2011] +0.000080000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000350000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000110000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000210000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000070000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000360000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000080000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b0(2P) +# S-> gamma V Partial wave (L,S)=(0,0) +0.009000000 gamma Upsilon HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +0.046000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0.; #[Reconstructed PDG2011] +# S-> gamma V Partial wave (L,S)=(0,0) +0.00150 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0.; +0.94350 g g PYTHIA 32; +Enddecay +# +Decay chi_b1(2P) +# V-> gamma V Partial wave (L,S)=(0,1) +0.085000000 gamma Upsilon HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +0.210000000 gamma Upsilon(2S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; #[Reconstructed PDG2011] +# V-> gamma V Partial wave (L,S)=(0,1) +0.0097 gamma Upsilon_1(1D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.0236 gamma Upsilon_2(1D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.648650000 g g PYTHIA 32; #[Reconstructed PDG2011] +0.016300000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000310000 pi+ pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000590000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000100000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000550000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001000000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000120000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000200000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000610000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000170000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001900000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay chi_b2(2P) +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.071000000 gamma Upsilon PHSP; #[Reconstructed PDG2011] +#0.0710 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.162000000 gamma Upsilon(2S) PHSP; #[Reconstructed PDG2011] +#0.1620 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.00023 gamma Upsilon_1(1D) PHSP; +#0.00023 gamma Upsilon_1(1D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# T -> gamma T Partial wave (L,S)=(0,2) +0.00290 gamma Upsilon_2(1D) PHSP; +#0.00290 gamma Upsilon_2(1D) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# spin 3 not yet in HELAMP. +0.01420 gamma Upsilon_3(1D) PYTHIA 0; +# T-> gamma 3 Partial wave (L,S)=(0,2) +#0.01420 gamma Upsilon_3(1D) HELAMP 3.8729833 0. 3.1622777 0. +# 2.4494897 0. 1.7320508. 0. 1. 0. +# 1. 0. 1.7320508 0. 2.4494897 0. +# 3.1622777 0. 3.8729833 0.; +0.734240000 g g PYTHIA 32; #[Reconstructed PDG2011] +0.011000000 omega Upsilon PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000390000 pi+ pi+ pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000240000 pi+ pi+ pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000470000 pi+ pi+ pi- pi- K+ K- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001200000 pi+ pi+ pi+ pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000140000 pi+ pi+ pi+ pi- pi- pi- K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000420000 pi+ pi+ pi+ pi- pi- pi- K+ K- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000090000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001300000 pi+ pi+ pi+ pi+ pi- pi- pi- pi- pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay h_b +1.00000 g g PYTHIA 32; +Enddecay + +Decay chi_b0(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# S-> gamma V Partial wave (L,S)=(0,0) +0.01700 gamma Upsilon(3S) HELAMP 1. 0. 1. 0.; +# S-> gamma V Partial wave (L,S)=(0,0) +0.00400 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0.; +0.97900 g g PYTHIA 32; +Enddecay + +Decay chi_b1(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# V-> gamma V Partial wave (L,S)=(0,1) +0.15000 gamma Upsilon(3S) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.03100 gamma Upsilon_2(2D) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.01300 gamma Upsilon_1(2D) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +0.80600 g g PYTHIA 32; +Enddecay + +Decay chi_b2(3P) +#see Kwong and Rosner, PRD 38,279 (1988) +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.08700 gamma Upsilon(3S) PHSP; +0.00000 gamma Upsilon(2S) PHSP; +0.00000 gamma Upsilon PHSP; +#0.08700 gamma Upsilon(3S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +#0.00000 gamma Upsilon(2S) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +#0.00000 gamma Upsilon HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +# spin 3 not yet in HELAMP +0.02200 Upsilon_3(2D) gamma PHSP; +# T -> gamma 3 Partial wave (L,S)=(0,2) +#0.02200 gamma Upsilon_3(2D) HELAMP 3.8729833 0. 3.1622777 0. +# 2.4494897 0. 1.7320508. 0. 1. 0. +# 1. 0. 1.7320508 0. 2.4494897 0. +# 3.1622777 0. 3.8729833 0.; +# T -> gamma T Partial wave (L,S)=(0,2) +0.00400 gamma Upsilon_2(2D) PHSP; +#0.00400 gamma Upsilon_2(2D) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) +0.00040 gamma Upsilon_1(2D) PHSP; +#0.00040 gamma Upsilon_1(2D) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.88660 g g PYTHIA 32; +Enddecay + +Decay Upsilon_1(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00140 Upsilon pi+ pi- PHSP; +0.00070 Upsilon pi0 pi0 PHSP; +# V-> gamma S Partial wave (L,S)=(0,1) +0.60200 gamma chi_b0 HELAMP 1. 0. +1. 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.31800 gamma chi_b1 HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.02600 gamma chi_b2 HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.05190 g g g PYTHIA 4; +Enddecay + +Decay Upsilon_2(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00140 Upsilon pi+ pi- PHSP; +0.00070 Upsilon pi0 pi0 PHSP; +# T-> gamma T Partial wave (L,S)=(0,2) +0.20300 gamma chi_b2 PHSP; +#0.20300 gamma chi_b2 HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.78500 gamma chi_b1 PHSP; +#0.78500 gamma chi_b1 HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.00990 g g g PYTHIA 4; +Enddecay + +Decay Upsilon_3(1D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00200 Upsilon pi+ pi- PHSP; +0.00100 Upsilon pi0 pi0 PHSP; +0.95400 chi_b2 gamma PHSP; +0.04300 g g g PYTHIA 4; +Enddecay + +Decay Upsilon_1(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +# V-> gamma S Partial wave (L,S)=(0,1) +0.51000 gamma chi_b0(2P) HELAMP 1. 0. +1. 0.; +# V-> gamma V Partial wave (L,S)=(0,1) +0.26000 gamma chi_b1(2P) HELAMP 1. 0. 1. 0. -1. 0. -1. 0.; +# V-> gamma T Partial wave (L,S)=(0,1) +0.01400 gamma chi_b2(2P) HELAMP 2.4494897 0. 1.7320508 0. 1. 0. 1. 0. 1.7320508 0. 2.4494897 0.; +0.21600 g g g PYTHIA 4; +Enddecay + +Decay Upsilon_2(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +# T-> gamma T Partial wave (L,S)=(0,2) +0.04000 gamma chi_b2(2P) PHSP; +#0.04000 gamma chi_b2(2P) HELAMP -1. 0. -1.2247449 0. +# -1.2247449 0. -1. 0. +# 1. 0. 1.2247449 0. +# 1.2247449 0. 1. 0.; +# T-> gamma V Partial wave (L,S)=(0,2) Use PHSP. +0.13000 gamma chi_b1(2P) PHSP; +#0.13000 gamma chi_b1(2P) HELAMP 1. 0. 1.7320508 0. 2.4494897 0. +# 2.4494897 0. 1.7320508 0. 1. 0.; +0.83000 g g g PYTHIA 4; +Enddecay + +Decay Upsilon_3(2D) +#see Kwong and Rosner, PRD 38,279 (1988) +0.00000 Upsilon pi+ pi- PHSP; +0.00000 Upsilon pi0 pi0 PHSP; +0.00000 Upsilon(2S) pi+ pi- PHSP; +0.00000 Upsilon(2S) pi0 pi0 PHSP; +0.72000 chi_b2(2P) gamma PHSP; +0.28000 g g g PYTHIA 4; +Enddecay + +Decay h_b(2P) +1.00000 g g PYTHIA 32; +Enddecay +Decay h_b(3P) +1.00000 g g PYTHIA 32; +Enddecay +Decay eta_b2(1D) +1.00000 g g PYTHIA 32; +Enddecay +Decay eta_b2(2D) +1.00000 g g PYTHIA 32; +Enddecay +# +# Charm Baryons +# +Decay Lambda_c+ +0.021000000 e+ nu_e Lambda0 PYTHIA 42; #[Reconstructed PDG2011] +0.00500 e+ nu_e Sigma0 PYTHIA 42; +0.00500 e+ nu_e Sigma*0 PYTHIA 42; +0.00300 e+ nu_e n0 PYTHIA 42; +0.00200 e+ nu_e Delta0 PYTHIA 42; +0.00600 e+ nu_e p+ pi- PYTHIA 42; +0.00600 e+ nu_e n0 pi0 PYTHIA 42; +0.020000000 mu+ nu_mu Lambda0 PYTHIA 42; #[Reconstructed PDG2011] +0.00500 mu+ nu_mu Sigma0 PYTHIA 42; +0.00500 mu+ nu_mu Sigma*0 PYTHIA 42; +0.00300 mu+ nu_mu n0 PYTHIA 42; +0.00200 mu+ nu_mu Delta0 PYTHIA 42; +0.00600 mu+ nu_mu p+ pi- PYTHIA 42; +0.00600 mu+ nu_mu n0 pi0 PYTHIA 42; +0.008600000 Delta++ K- PYTHIA 0; #[Reconstructed PDG2011] +0.02500 Delta++ K*- PYTHIA 0; +0.023000000 p+ anti-K0 PYTHIA 0; #[Reconstructed PDG2011] +0.016000000 p+ anti-K*0 PYTHIA 0; #[Reconstructed PDG2011] +0.00500 Delta+ anti-K0 PYTHIA 0; +0.00500 Delta+ anti-K*0 PYTHIA 0; +0.010700000 Lambda0 pi+ PYTHIA 0; #[Reconstructed PDG2011] +0.00500 Lambda0 rho+ PYTHIA 0; +0.010500000 Sigma0 pi+ PYTHIA 0; #[Reconstructed PDG2011] +0.00400 Sigma0 rho+ PYTHIA 0; +0.00400 Sigma*0 pi+ PYTHIA 0; +0.00400 Sigma*0 rho+ PYTHIA 0; +0.010000000 Sigma+ pi0 PYTHIA 0; #[Reconstructed PDG2011] +0.005500000 Sigma+ eta PYTHIA 0; #[Reconstructed PDG2011] +0.00200 Sigma+ eta' PYTHIA 0; +0.00400 Sigma+ rho0 PYTHIA 0; +0.027000000 Sigma+ omega PYTHIA 0; #[Reconstructed PDG2011] +0.00300 Sigma*+ pi0 PYTHIA 0; +0.008500000 Sigma*+ eta PYTHIA 0; #[Reconstructed PDG2011] +0.00300 Sigma*+ rho0 PYTHIA 0; +0.00300 Sigma*+ omega PYTHIA 0; +0.003900000 Xi0 K+ PYTHIA 0; #[Reconstructed PDG2011] +0.00200 Xi0 K*+ PYTHIA 0; +0.002600000 Xi*0 K+ PYTHIA 0; #[Reconstructed PDG2011] +0.00100 Delta++ pi- PYTHIA 0; +0.00100 Delta++ rho- PYTHIA 0; +0.00200 p+ pi0 PYTHIA 0; +0.00100 p+ eta PYTHIA 0; +0.00100 p+ eta' PYTHIA 0; +0.00200 p+ rho0 PYTHIA 0; +0.00200 p+ omega PYTHIA 0; +0.000820000 p+ phi PYTHIA 0; #[Reconstructed PDG2011] +0.002800000 p+ f_0 PYTHIA 0; #[Reconstructed PDG2011] +0.00100 Delta+ pi0 PYTHIA 0; +0.00100 Delta+ eta PYTHIA 0; +0.00100 Delta+ eta' PYTHIA 0; +0.00100 Delta+ rho0 PYTHIA 0; +0.00100 Delta+ omega PYTHIA 0; +0.00300 n0 pi+ PYTHIA 0; +0.00300 n0 rho+ PYTHIA 0; +0.00300 Delta0 pi+ PYTHIA 0; +0.00300 Delta0 rho+ PYTHIA 0; +0.00500 Lambda0 K+ PYTHIA 0; +0.00500 Lambda0 K*+ PYTHIA 0; +0.00200 Sigma0 K+ PYTHIA 0; +0.00200 Sigma0 K*+ PYTHIA 0; +0.00100 Sigma*0 K+ PYTHIA 0; +0.00100 Sigma*0 K*+ PYTHIA 0; +0.00200 Sigma+ K0 PYTHIA 0; +0.002800000 Sigma+ K*0 PYTHIA 0; #[Reconstructed PDG2011] +0.00100 Sigma*+ K0 PYTHIA 0; +0.00100 Sigma*+ K*0 PYTHIA 0; +0.064094509 u anti-d d su_0 PYTHIA 13; #[Reconstructed PDG2011] +0.028102977 u anti-d d su_1 PYTHIA 13; #[Reconstructed PDG2011] +0.017256214 u anti-s d su_0 PYTHIA 13; #[Reconstructed PDG2011] +0.017256214 u anti-d d ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.046838295 s uu_1 PYTHIA 13; #[Reconstructed PDG2011] +0.069024855 u su_0 PYTHIA 13; #[Reconstructed PDG2011] +0.069024855 u su_1 PYTHIA 13; #[Reconstructed PDG2011] +0.014791040 d uu_1 PYTHIA 13; #[Reconstructed PDG2011] +0.007395520 u ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.007395520 u ud_1 PYTHIA 13; #[Reconstructed PDG2011] +0.025400000 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.033000000 p+ anti-K0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 p+ anti-K0 eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.026000000 p+ anti-K0 pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023000000 p+ K- pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 p+ K*- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001100000 p+ K- pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008000000 p+ K- pi+ pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000700000 p+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.001800000 p+ pi+ pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 p+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Lambda0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.015000000 Lambda0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011000000 Lambda0 pi+ rho0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Lambda0 pi+ pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009500000 Lambda0 pi+ eta PHSP; #[New mode added] #[Reconstructed PDG2011] +0.012000000 Lambda0 pi+ omega PHSP; #[New mode added] #[Reconstructed PDG2011] +0.004700000 Lambda0 K+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.036000000 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.017000000 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.018000000 Sigma0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.008300000 Sigma0 pi+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.003100000 Sigma+ phi PHSP; #[New mode added] #[Reconstructed PDG2011] +0.002500000 Xi- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.000000000 Sigma+ K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +CDecay anti-Lambda_c- +# +Decay Xi_c0 +1.000 PYTHIA 84; +Enddecay +Decay anti-Xi_c0 +1.000 PYTHIA 84; +Enddecay +# +Decay c-hadron +0.08000 e+ nu_e s specflav PYTHIA 42; +0.08000 mu+ nu_mu s specflav PYTHIA 42; +0.76000 u anti-d s specflav PYTHIA 11; +0.08000 u anti-s s specflav PYTHIA 11; +Enddecay +CDecay anti-c-hadron +# +Decay Sigma_c0 +1.0000 Lambda_c+ pi- PHSP; +Enddecay +Decay anti-Sigma_c0 +1.0000 anti-Lambda_c- pi+ PHSP; +Enddecay +# +Decay Sigma_c+ +1.0000 Lambda_c+ pi0 PHSP; +Enddecay +Decay anti-Sigma_c- +1.0000 anti-Lambda_c- pi0 PHSP; +Enddecay +# +Decay Xi_c+ +0.079535513 PYTHIA 84; #[Reconstructed PDG2011] +0.079535513 Sigma*+ anti-K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 Lambda0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 Sigma+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 Sigma+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 Sigma0 K- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 Xi0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 Xi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 Xi0 pi+ pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 Xi0 pi- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 Omega- K+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 p+ K- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 p+ anti-K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 Sigma+ pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 Sigma- pi+ pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 Sigma+ K+ K- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Xi_c- +0.079535513 PYTHIA 84; #[Reconstructed PDG2011] +0.079535513 anti-Sigma*- K0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.025689971 anti-Lambda0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.010339617 anti-Sigma- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.064423765 anti-Sigma- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.023065299 anti-Sigma0 K+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.043744532 anti-Xi0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.079535513 anti-Xi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.186113099 anti-Xi0 pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.138391792 anti-Xi0 pi+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.182931679 anti-Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +0.005567486 anti-Omega+ K- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.007158196 anti-p- K+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.009544262 anti-p- K*0 PHSP; #[New mode added] #[Reconstructed PDG2011] +0.038177046 anti-Sigma- pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.014316392 anti-Sigma+ pi- pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.011930327 anti-Sigma- K- K+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Sigma_c++ +1.0000 Lambda_c+ pi+ PHSP; +Enddecay +Decay anti-Sigma_c-- +1.0000 anti-Lambda_c- pi- PHSP; +Enddecay +# +Decay Xi'_c+ +0.1000 Lambda0 K- pi+ pi+ PHSP; +0.0800 Sigma0 K- pi+ pi+ PHSP; +0.8200 gamma Xi_c+ PHSP; +Enddecay +Decay anti-Xi'_c- +0.1000 anti-Lambda0 K+ pi- pi- PHSP; +0.0800 anti-Sigma0 K+ pi- pi- PHSP; +0.8200 gamma anti-Xi_c- PHSP; +Enddecay +# +Decay Xi'_c0 +1.0000 gamma Xi_c0 PHSP; +Enddecay +Decay anti-Xi'_c0 +1.0000 gamma anti-Xi_c0 PHSP; +Enddecay +# +# Light Baryons +# Lambda0 updated Feb 2009 +# Leave the following decay for Geant +#Decay Lambda0 +#0.638719992 p+ pi- PHSP; #[Reconstructed PDG2011] +#0.357719992 n0 pi0 PHSP; #[Reconstructed PDG2011] +#0.001741600 n0 gamma PHSP; #[Reconstructed PDG2011] +#0.000832160 p+ pi- gamma PHSP; #[Reconstructed PDG2011] +#0.000831216 p+ e- anti-nu_e PHOTOS PHSP; #[Reconstructed PDG2011] +#0.000155040 p+ mu- anti-nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +#Enddecay +# +#Decay anti-Lambda0 +#0.638719992 anti-p- pi+ PHSP; #[Reconstructed PDG2011] +#0.357719992 anti-n0 pi0 PHSP; #[Reconstructed PDG2011] +#0.001741600 anti-n0 gamma PHSP; #[Reconstructed PDG2011] +#0.000832160 anti-p- pi+ gamma PHSP; #[Reconstructed PDG2011] +#0.000831216 anti-p- e+ nu_e PHOTOS PHSP; #[Reconstructed PDG2011] +#0.000155040 anti-p- mu+ nu_mu PHOTOS PHSP; #[Reconstructed PDG2011] +#Enddecay +# +Decay Lambda(1405)0 +0.3333 Sigma+ pi- PHSP; +0.3333 Sigma- pi+ PHSP; +0.3333 Sigma0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1405)0 +0.3333 anti-Sigma+ pi- PHSP; +0.3333 anti-Sigma- pi+ PHSP; +0.3333 anti-Sigma0 pi0 PHSP; +Enddecay +# +Decay Lambda(1520)0 +0.23 p+ K- PHSP; +0.23 n0 anti-K0 PHSP; +0.14 Sigma+ pi- PHSP; +0.14 Sigma- pi+ PHSP; +0.14 Sigma0 pi0 PHSP; +0.0333 Lambda0 pi0 pi0 PHSP; +0.0667 Lambda0 pi+ pi- PHSP; +0.003 Sigma+ pi- pi0 PHSP; +0.003 Sigma- pi+ pi0 PHSP; +0.001 Sigma0 pi0 pi0 PHSP; +0.002 Sigma0 pi+ pi- PHSP; +0.011 Lambda0 gamma PHSP; +Enddecay +# +Decay anti-Lambda(1520)0 +0.23 anti-p- K+ PHSP; +0.23 anti-n0 K0 PHSP; +0.14 anti-Sigma- pi+ PHSP; +0.14 anti-Sigma+ pi- PHSP; +0.14 anti-Sigma0 pi0 PHSP; +0.0333 anti-Lambda0 pi0 pi0 PHSP; +0.0667 anti-Lambda0 pi+ pi- PHSP; +0.003 anti-Sigma+ pi- pi0 PHSP; +0.003 anti-Sigma- pi+ pi0 PHSP; +0.001 anti-Sigma0 pi0 pi0 PHSP; +0.002 anti-Sigma0 pi+ pi- PHSP; +0.011 anti-Lambda0 gamma PHSP; +Enddecay +# +Decay Lambda(1600)0 +0.176 p+ K- PHSP; +0.176 n0 anti-K0 PHSP; +0.216 Sigma+ pi- PHSP; +0.216 Sigma- pi+ PHSP; +0.216 Sigma0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1600)0 +0.176 anti-p- K+ PHSP; +0.176 anti-n0 K0 PHSP; +0.216 anti-Sigma+ pi- PHSP; +0.216 anti-Sigma- pi+ PHSP; +0.216 anti-Sigma0 pi0 PHSP; +Enddecay +# +Decay Lambda(1670)0 +0.10 p+ K- PHSP; +0.10 n0 anti-K0 PHSP; +0.16 Sigma+ pi- PHSP; +0.16 Sigma- pi+ PHSP; +0.16 Sigma0 pi0 PHSP; +0.32 Lambda0 eta PHSP; +Enddecay +# +Decay anti-Lambda(1670)0 +0.10 anti-p- K+ PHSP; +0.10 anti-n0 K0 PHSP; +0.16 anti-Sigma+ pi- PHSP; +0.16 anti-Sigma- pi+ PHSP; +0.16 anti-Sigma0 pi0 PHSP; +0.32 anti-Lambda0 eta PHSP; +Enddecay +# +Decay Lambda(1690)0 +0.125 p+ K- PHSP; +0.125 n0 anti-K0 PHSP; +0.10 Sigma+ pi- PHSP; +0.10 Sigma- pi+ PHSP; +0.10 Sigma0 pi0 PHSP; +0.0833 Lambda0 pi0 pi0 PHSP; +0.1667 Lambda0 pi+ pi- PHSP; +0.067 Sigma+ pi- pi0 PHSP; +0.067 Sigma- pi+ pi0 PHSP; +0.022 Sigma0 pi0 pi0 PHSP; +0.044 Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay anti-Lambda(1690)0 +0.125 anti-p- K+ PHSP; +0.125 anti-n0 K0 PHSP; +0.10 anti-Sigma+ pi- PHSP; +0.10 anti-Sigma- pi+ PHSP; +0.10 anti-Sigma0 pi0 PHSP; +0.0833 anti-Lambda0 pi0 pi0 PHSP; +0.1667 anti-Lambda0 pi+ pi- PHSP; +0.067 anti-Sigma+ pi- pi0 PHSP; +0.067 anti-Sigma- pi+ pi0 PHSP; +0.022 anti-Sigma0 pi0 pi0 PHSP; +0.044 anti-Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay Lambda(1800)0 +0.165 p+ K- PHSP; +0.165 n0 anti-K0 PHSP; +0.08 Sigma+ pi- PHSP; +0.08 Sigma- pi+ PHSP; +0.08 Sigma0 pi0 PHSP; +0.003 Sigma*+ pi- PHSP; +0.003 Sigma*- pi+ PHSP; +0.004 Sigma*0 pi0 PHSP; +0.21 p+ K*- PHSP; +0.21 n0 anti-K*0 PHSP; +Enddecay +# +Decay anti-Lambda(1800)0 +0.165 anti-p- K+ PHSP; +0.165 anti-n0 K0 PHSP; +0.08 anti-Sigma+ pi- PHSP; +0.08 anti-Sigma- pi+ PHSP; +0.08 anti-Sigma0 pi0 PHSP; +0.003 anti-Sigma*+ pi- PHSP; +0.003 anti-Sigma*- pi+ PHSP; +0.004 anti-Sigma*0 pi0 PHSP; +0.21 anti-p- K*+ PHSP; +0.21 anti-n0 K*0 PHSP; +Enddecay +# +Decay Lambda(1810)0 +0.165 p+ K- PHSP; +0.165 n0 anti-K0 PHSP; +0.08 Sigma+ pi- PHSP; +0.08 Sigma- pi+ PHSP; +0.08 Sigma0 pi0 PHSP; +0.003 Sigma*+ pi- PHSP; +0.003 Sigma*- pi+ PHSP; +0.004 Sigma*0 pi0 PHSP; +0.21 p+ K*- PHSP; +0.21 n0 anti-K*0 PHSP; +Enddecay +# +Decay anti-Lambda(1810)0 +0.165 anti-p- K+ PHSP; +0.165 anti-n0 K0 PHSP; +0.08 anti-Sigma+ pi- PHSP; +0.08 anti-Sigma- pi+ PHSP; +0.08 anti-Sigma0 pi0 PHSP; +0.003 anti-Sigma*+ pi- PHSP; +0.003 anti-Sigma*- pi+ PHSP; +0.004 anti-Sigma*0 pi0 PHSP; +0.21 anti-p- K*+ PHSP; +0.21 anti-n0 K*0 PHSP; +Enddecay +# +Decay Lambda(1820)0 +0.34 p+ K- PHSP; +0.34 n0 anti-K0 PHSP; +0.06 Sigma+ pi- PHSP; +0.06 Sigma- pi+ PHSP; +0.06 Sigma0 pi0 PHSP; +0.04 Sigma*+ pi- PHSP; +0.04 Sigma*- pi+ PHSP; +0.04 Sigma*0 pi0 PHSP; +0.01 Lambda0 eta PHSP; +0.003 Sigma+ pi- pi0 PHSP; +0.004 Sigma- pi+ pi0 PHSP; +0.001 Sigma0 pi0 pi0 PHSP; +0.002 Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay anti-Lambda(1820)0 +0.34 anti-p- K+ PHSP; +0.34 anti-n0 K0 PHSP; +0.06 anti-Sigma+ pi- PHSP; +0.06 anti-Sigma- pi+ PHSP; +0.06 anti-Sigma0 pi0 PHSP; +0.04 anti-Sigma*+ pi- PHSP; +0.04 anti-Sigma*- pi+ PHSP; +0.04 anti-Sigma*0 pi0 PHSP; +0.01 anti-Lambda0 eta PHSP; +0.003 anti-Sigma+ pi- pi0 PHSP; +0.004 anti-Sigma- pi+ pi0 PHSP; +0.001 anti-Sigma0 pi0 pi0 PHSP; +0.002 anti-Sigma0 pi+ pi- PHSP; +Enddecay +# +Decay Lambda(1830)0 +0.05 p+ K- PHSP; +0.05 n0 anti-K0 PHSP; +0.24 Sigma+ pi- PHSP; +0.24 Sigma- pi+ PHSP; +0.24 Sigma0 pi0 PHSP; +0.06 Sigma*+ pi- PHSP; +0.06 Sigma*- pi+ PHSP; +0.06 Sigma*0 pi0 PHSP; +Enddecay +# +Decay anti-Lambda(1830)0 +0.05 anti-p- K+ PHSP; +0.05 anti-n0 K0 PHSP; +0.24 anti-Sigma+ pi- PHSP; +0.24 anti-Sigma- pi+ PHSP; +0.24 anti-Sigma0 pi0 PHSP; +0.06 anti-Sigma*+ pi- PHSP; +0.06 anti-Sigma*- pi+ PHSP; +0.06 anti-Sigma*0 pi0 PHSP; +Enddecay +# +# +Decay Sigma(1660)0 +0.07 p+ K- PHSP; +0.07 n0 anti-K0 PHSP; +0.16 Lambda0 pi0 PHSP; +0.35 Sigma+ pi- PHSP; +0.35 Sigma- pi+ PHSP; +Enddecay +# +Decay anti-Sigma(1660)0 +0.07 anti-p- K+ PHSP; +0.07 anti-n0 K0 PHSP; +0.16 anti-Lambda0 pi0 PHSP; +0.35 anti-Sigma+ pi- PHSP; +0.35 anti-Sigma- pi+ PHSP; +Enddecay +# +Decay Sigma(1670)0 +0.07 p+ K- PHSP; +0.07 n0 anti-K0 PHSP; +0.16 Lambda0 pi0 PHSP; +0.35 Sigma+ pi- PHSP; +0.35 Sigma- pi+ PHSP; +Enddecay +# +Decay anti-Sigma(1670)0 +0.07 anti-p- K+ PHSP; +0.07 anti-n0 K0 PHSP; +0.16 anti-Lambda0 pi0 PHSP; +0.35 anti-Sigma+ pi- PHSP; +0.35 anti-Sigma- pi+ PHSP; +Enddecay +# +Decay Sigma(1775)0 +0.215 p+ K- PHSP; +0.215 n0 anti-K0 PHSP; +0.20 Lambda0 pi0 PHSP; +0.02 Sigma+ pi- PHSP; +0.02 Sigma- pi+ PHSP; +0.055 Sigma*+ pi- PHSP; +0.055 Sigma*- pi+ PHSP; +0.22 Lambda(1520)0 pi0 PHSP; +Enddecay +# +Decay anti-Sigma(1775)0 +0.215 anti-p- K+ PHSP; +0.215 anti-n0 K0 PHSP; +0.20 anti-Lambda0 pi0 PHSP; +0.02 anti-Sigma+ pi- PHSP; +0.02 anti-Sigma- pi+ PHSP; +0.055 anti-Sigma*+ pi- PHSP; +0.055 anti-Sigma*- pi+ PHSP; +0.22 anti-Lambda(1520)0 pi0 PHSP; +Enddecay +# Leave the following decay for Geant +#Decay Sigma+ +#0.515454300 p+ pi0 PHSP; #[Reconstructed PDG2011] +#0.482854300 n0 pi+ PHSP; #[Reconstructed PDG2011] +#0.001225905 p+ gamma PHSP; #[Reconstructed PDG2011] +#0.000445905 n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000019590 Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +#Decay anti-Sigma- +#0.515454300 anti-p- pi0 PHSP; #[Reconstructed PDG2011] +#0.482854300 anti-n0 pi- PHSP; #[Reconstructed PDG2011] +#0.001225905 anti-p- gamma PHSP; #[Reconstructed PDG2011] +#0.000445905 anti-n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000019590 anti-Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +Decay Delta+ +0.6630 p+ pi0 PHSP; +0.3310 n0 pi+ PHSP; +0.0060 p+ gamma PHSP; +Enddecay +Decay anti-Delta- +0.6630 anti-p- pi0 PHSP; +0.3310 anti-n0 pi- PHSP; +0.0060 anti-p- gamma PHSP; +Enddecay +# +Decay Delta++ +1.0000 p+ pi+ PHSP; +Enddecay +Decay anti-Delta-- +1.0000 anti-p- pi- PHSP; +Enddecay +# +Decay Xi*0 +0.3330 Xi0 pi0 PHSP; +0.6670 Xi- pi+ PHSP; +Enddecay +Decay anti-Xi*0 +0.3330 anti-Xi0 pi0 PHSP; +0.6670 anti-Xi+ pi- PHSP; +Enddecay +# +Decay Delta0 +0.3310 p+ pi- PHSP; +0.6630 n0 pi0 PHSP; +0.0060 n0 gamma PHSP; +Enddecay +Decay anti-Delta0 +0.3310 anti-p- pi+ PHSP; +0.6630 anti-n0 pi0 PHSP; +0.0060 anti-n0 gamma PHSP; +Enddecay +# +Decay Delta- +1.0000 n0 pi- PHSP; +Enddecay +Decay anti-Delta+ +1.0000 anti-n0 pi+ PHSP; +Enddecay +# +# Leave the following decay for Geant +#Decay Sigma- +#0.998015700 n0 pi- PHSP; #[Reconstructed PDG2011] +#0.000460000 n0 pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001017000 n0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000450000 n0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000057300 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +#Decay anti-Sigma+ +#0.998015700 anti-n0 pi+ PHSP; #[Reconstructed PDG2011] +#0.000460000 anti-n0 pi+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001017000 anti-n0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000450000 anti-n0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000057300 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +Decay Sigma0 +0.995024876 gamma Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Sigma0 +0.995024876 gamma anti-Lambda0 PHSP; #[Reconstructed PDG2011] +0.004975124 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Sigma*- +0.8800 Lambda0 pi- PHSP; +0.0600 Sigma0 pi- PHSP; +0.0600 Sigma- pi0 PHSP; +Enddecay +Decay anti-Sigma*+ +0.8800 anti-Lambda0 pi+ PHSP; +0.0600 anti-Sigma0 pi+ PHSP; +0.0600 anti-Sigma+ pi0 PHSP; +Enddecay +# +Decay Sigma*+ +0.8800 Lambda0 pi+ PHSP; +0.0600 Sigma+ pi0 PHSP; +0.0600 Sigma0 pi+ PHSP; +Enddecay +Decay anti-Sigma*- +0.8800 anti-Lambda0 pi- PHSP; +0.0600 anti-Sigma- pi0 PHSP; +0.0600 anti-Sigma0 pi- PHSP; +Enddecay +# +Decay Sigma*0 +0.8800 Lambda0 pi0 PHSP; +0.0600 Sigma+ pi- PHSP; +0.0600 Sigma- pi+ PHSP; +Enddecay +Decay anti-Sigma*0 +0.8800 anti-Lambda0 pi0 PHSP; +0.0600 anti-Sigma- pi+ PHSP; +0.0600 anti-Sigma+ pi- PHSP; +Enddecay +# +# Leave the following decay for Geant +#Decay Xi0 +#0.995242400 Lambda0 pi0 PHSP; #[Reconstructed PDG2011] +#0.001162400 Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000007600 Lambda0 e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.003330000 Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000253000 Sigma+ e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000004600 Sigma+ mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +#Decay anti-Xi0 +#0.995242400 anti-Lambda0 pi0 PHSP; #[Reconstructed PDG2011] +#0.001162400 anti-Lambda0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000007600 anti-Lambda0 e- e+ PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.003330000 anti-Sigma0 gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000253000 anti-Sigma- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000004600 anti-Sigma- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +# Leave the following decay for Geant +#Decay Xi- +#0.998870000 Lambda0 pi- PHSP; #[Reconstructed PDG2011] +#0.000127000 Sigma- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000563000 Lambda0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000350000 Lambda0 mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000087000 Sigma0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +#Decay anti-Xi+ +#0.998870000 anti-Lambda0 pi+ PHSP; #[Reconstructed PDG2011] +#0.000127000 anti-Sigma+ gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000563000 anti-Lambda0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000350000 anti-Lambda0 mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000087000 anti-Sigma0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +Decay Xi*- +0.6670 Xi0 pi- PHSP; +0.3330 Xi- pi0 PHSP; +Enddecay +Decay anti-Xi*+ +0.6670 anti-Xi0 pi+ PHSP; +0.3330 anti-Xi+ pi0 PHSP; +Enddecay +# +# Leave the following decay for Geant +#Decay Omega- +#0.675949296 Lambda0 K- PHSP; #[Reconstructed PDG2011] +#0.233949296 Xi0 pi- PHSP; #[Reconstructed PDG2011] +#0.084828169 Xi- pi0 PHSP; #[Reconstructed PDG2011] +#0.000000000 Xi- pi+ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000493521 Xi*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.004779718 Xi0 e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +#Decay anti-Omega+ +#0.675949296 anti-Lambda0 K+ PHSP; #[Reconstructed PDG2011] +#0.233949296 anti-Xi0 pi+ PHSP; #[Reconstructed PDG2011] +#0.084828169 anti-Xi+ pi0 PHSP; #[Reconstructed PDG2011] +#0.000000000 anti-Xi+ pi- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000493521 anti-Xi*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.004779718 anti-Xi0 e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#Enddecay +# +# +Decay Sigma_c*0 +1.0000 Lambda_c+ pi- PHSP; +Enddecay +CDecay anti-Sigma_c*0 +# +Decay Sigma_c*+ +1.0000 Lambda_c+ pi0 PHSP; +Enddecay +CDecay anti-Sigma_c*- +# +Decay Sigma_c*++ +1.0000 Lambda_c+ pi+ PHSP; +Enddecay +CDecay anti-Sigma_c*-- +# +Decay Xi_c*0 +0.5000 Xi_c0 pi0 PHSP; +0.5000 Xi_c0 gamma PHSP; +Enddecay +CDecay anti-Xi_c*0 +# +Decay Xi_c*+ +0.5000 Xi_c+ pi0 PHSP; +0.5000 Xi_c+ gamma PHSP; +Enddecay +CDecay anti-Xi_c*- +# +Decay Omega_c0 +1.00000 PYTHIA 84; +Enddecay +# +CDecay anti-Omega_c0 +# +Decay Omega_c*0 +1.0000 Omega_c0 gamma PHSP; +Enddecay +# +CDecay anti-Omega_c*0 +# +Decay Xu0 +# X_u^0 -> u anti-u +# +1.0 u anti-u PYTHIA 11; +Enddecay +Decay Xu+ +# X_u^+ -> u anti-d +# +1.0 u anti-d PYTHIA 11; +Enddecay +CDecay Xu- + +#lange - PYTHIA is making h_c mesons - better add a decay +# channel for them. +Decay h_c +0.01 J/psi pi0 PHSP; +0.5 eta_c gamma PHSP; +0.49 rndmflav anti-rndmflav PYTHIA 12; +Enddecay + +# 12/08/03 RJT Update b-baryon decays... +Decay Lambda_b0 +# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) +0.050000000 Lambda_c+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ e- anti-nu_e PHSP; #[Reconstructed PDG2011] + 0.00000 Sigma_c0 pi+ e- anti-nu_e PHSP; + 0.00000 Sigma_c+ pi0 e- anti-nu_e PHSP; + 0.00000 Sigma_c++ pi- e- anti-nu_e PHSP; + 0.00000 Sigma_c*0 pi+ e- anti-nu_e PHSP; + 0.00000 Sigma_c*+ pi0 e- anti-nu_e PHSP; + 0.00000 Sigma_c*++ pi- e- anti-nu_e PHSP; +# +0.050000000 Lambda_c+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 Lambda_c(2593)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 Lambda_c(2625)+ mu- anti-nu_mu PHSP; #[Reconstructed PDG2011] + 0.00000 Sigma_c0 pi+ mu- anti-nu_mu PHSP; + 0.00000 Sigma_c+ pi0 mu- anti-nu_mu PHSP; + 0.00000 Sigma_c++ pi- mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*0 pi+ mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*+ pi0 mu- anti-nu_mu PHSP; + 0.00000 Sigma_c*++ pi- mu- anti-nu_mu PHSP; +# + 0.01720 Lambda_c+ tau- anti-nu_tau PHSP; + 0.00430 Lambda_c(2593)+ tau- anti-nu_tau PHSP; + 0.00320 Lambda_c(2625)+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c0 pi+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c+ pi0 tau- anti-nu_tau PHSP; + 0.00000 Sigma_c++ pi- tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*0 pi+ tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*+ pi0 tau- anti-nu_tau PHSP; + 0.00000 Sigma_c*++ pi- tau- anti-nu_tau PHSP; +# Hadronic Decays with Lambda_c+ +0.008800000 Lambda_c+ pi- PHSP; #[Reconstructed PDG2011] + 0.02200 Lambda_c+ pi- pi+ pi- PHSP; + 0.00055 Lambda_c+ K- PHSP; + 0.02200 Lambda_c+ D_s- PHSP; + 0.04400 Lambda_c+ D_s*- PHSP; + 0.01000 Lambda_c+ rho- PHSP; + 0.02000 Lambda_c+ a_1- PHSP; + 0.02000 Lambda0 K0 pi+ pi+ pi- pi- PHSP; +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda D0b + 0.00080 Lambda0 anti-D0 PHSP; +# Addition PR LHCb 04/07/04 +0.000006000 p+ K- PHSP; #[Reconstructed PDG2011] +0.000003800 p+ pi- PHSP; #[Reconstructed PDG2011] +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi + 0.0000050 Lambda0 rho0 PHSP; + 0.0000200 Lambda0 phi PHSP; +# + 0.00047 Lambda0 J/psi PHSP; + 0.00038 Lambda0 psi(2S) PHSP; + 0.00100 Lambda0 eta_c PHSP; + 0.00080 n0 D0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00060 Sigma_c+ pi- PHSP; + 0.00060 Sigma_c0 pi0 PHSP; + 0.00040 Sigma_c0 eta PHSP; + 0.00050 Sigma_c0 eta' PHSP; + 0.00030 Xi_c0 K0 PHSP; + 0.00050 Xi'_c0 K0 PHSP; +# PR LHCb 27 Apr 2004, addition of Pythia decays +0.398544837 anti-u d c ud_0 PYTHIA 48; #[Reconstructed PDG2011] +0.082218903 anti-u c d ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.072280354 anti-c s c ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.010842053 anti-u d u ud_0 PYTHIA 42; #[Reconstructed PDG2011] +0.010842053 anti-c s u ud_0 PYTHIA 42; #[Reconstructed PDG2011] +# PR LHCb 2 Dec 2004, add Lambda gamma decay mode + 0.000065 Lambda0 gamma HELAMP 1. 0. 0. 0. ; + 0.000059 Lambda(1520)0 gamma PHSP ; + 0.000056 Lambda(1670)0 gamma HELAMP 1. 0. 0. 0. ; + 0.000057 Lambda(1600)0 gamma HELAMP 1. 0. 0. 0. ; +0.056000000 Lambda_c+ pi+ pi- mu- anti-nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 Lambda_c+ pi+ pi- e- anti-nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay anti-Lambda_b0 +# SemiLeptonic Decays (inclusive BR = 7.7 +/- 1.8%) +0.050000000 anti-Lambda_c- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- e+ nu_e PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- e+ nu_e PHSP; #[Reconstructed PDG2011] + 0.00000 anti-Sigma_c0 pi- e+ nu_e PHSP; + 0.00000 anti-Sigma_c- pi0 e+ nu_e PHSP; + 0.00000 anti-Sigma_c-- pi+ e+ nu_e PHSP; + 0.00000 anti-Sigma_c*0 pi- e+ nu_e PHSP; + 0.00000 anti-Sigma_c*- pi0 e+ nu_e PHSP; + 0.00000 anti-Sigma_c*-- pi+ e+ nu_e PHSP; +# +0.050000000 anti-Lambda_c- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.006300000 anti-Lambda_c(2593)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] +0.011000000 anti-Lambda_c(2625)- mu+ nu_mu PHSP; #[Reconstructed PDG2011] + 0.00000 anti-Sigma_c0 pi- mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c- pi0 mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c-- pi+ mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*0 pi- mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*- pi0 mu+ nu_mu PHSP; + 0.00000 anti-Sigma_c*-- pi+ mu+ nu_mu PHSP; +# + 0.01720 anti-Lambda_c- tau+ nu_tau PHSP; + 0.00430 anti-Lambda_c(2593)- tau+ nu_tau PHSP; + 0.00320 anti-Lambda_c(2625)- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c0 pi- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c- pi0 tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c-- pi+ tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*0 pi- tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*- pi0 tau+ nu_tau PHSP; + 0.00000 anti-Sigma_c*-- pi+ tau+ nu_tau PHSP; +# Hadronic Decays with anti-Lambda_c- +0.008800000 anti-Lambda_c- pi+ PHSP; #[Reconstructed PDG2011] + 0.02200 anti-Lambda_c- pi+ pi+ pi- PHSP; + 0.00055 anti-Lambda_c- K+ PHSP; + 0.02200 anti-Lambda_c- D_s+ PHSP; + 0.04400 anti-Lambda_c- D_s*+ PHSP; + 0.01000 anti-Lambda_c- rho+ PHSP; + 0.02000 anti-Lambda_c- a_1+ PHSP; + 0.02000 Lambda0 anti-K0 pi- pi- pi+ pi+ PHSP; + # Addition LHCb PR 09 Apr 2004 Lambda_b -> Lambda D0b + 0.00080 anti-Lambda0 D0 PHSP; + # PR LHCb 04/07/04 Addition +0.000006000 anti-p- K+ PHSP; #[Reconstructed PDG2011] +0.000003800 anti-p- pi+ PHSP; #[Reconstructed PDG2011] +# Addition PR LHCb 09 Apr 2004, Lambda_b -> Lambda rho0 and -> Lambda phi + 0.0000050 anti-Lambda0 rho0 PHSP; + 0.0000200 anti-Lambda0 phi PHSP; +# + 0.00047 anti-Lambda0 J/psi PHSP; + 0.00038 anti-Lambda0 psi(2S) PHSP; + 0.001000 anti-Lambda0 eta_c PHSP; + 0.00080 anti-n0 anti-D0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00060 anti-Sigma_c- pi+ PHSP; + 0.00060 anti-Sigma_c0 pi0 PHSP; + 0.00040 anti-Sigma_c0 eta PHSP; + 0.00050 anti-Sigma_c0 eta' PHSP; + 0.00030 anti-Xi_c0 anti-K0 PHSP; + 0.00050 anti-Xi'_c0 anti-K0 PHSP; +# PR LHCb 27 Apr 2004, addition of Pythia decays +0.398544837 u anti-d anti-c anti-ud_0 PYTHIA 48; #[Reconstructed PDG2011] +0.082218903 u anti-c anti-d anti-ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.072280354 c anti-s anti-c anti-ud_0 PYTHIA 13; #[Reconstructed PDG2011] +0.010842053 u anti-d anti-u anti-ud_0 PYTHIA 42; #[Reconstructed PDG2011] +0.010842053 c anti-s anti-u anti-ud_0 PYTHIA 42; #[Reconstructed PDG2011] +# PR LHCb 2 Dec 2004 add Lambda gamma + 0.000065 anti-Lambda0 gamma HELAMP 0. 0. 1. 0. ; + 0.000059 anti-Lambda(1520)0 gamma PHSP ; + 0.000056 anti-Lambda(1670)0 gamma HELAMP 0. 0. 1. 0. ; + 0.000057 anti-Lambda(1600)0 gamma HELAMP 0. 0. 1. 0. ; +0.056000000 anti-Lambda_c- pi- pi+ mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +0.056000000 anti-Lambda_c- pi- pi+ e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +Decay Xi_b- +# SemiLeptonic Decays + 0.05460 Xi_c0 e- anti-nu_e PHSP; + 0.05460 Xi_c0 mu- anti-nu_mu PHSP; + 0.02000 Xi_c0 tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c0 + 0.00600 Xi_c0 pi- PHSP; + 0.02200 Xi_c0 pi- pi+ pi- PHSP; + 0.00055 Xi_c0 K- PHSP; + 0.02200 Xi_c0 D_s- PHSP; + 0.00047 Xi- J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00038 Xi- psi(2S) PHSP; + 0.00018 D0 Lambda0 pi- PHSP; + 0.00020 Sigma_c0 K- PHSP; + 0.00020 Omega_c0 K- PHSP; +# +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.38757 d anti-u d cs_0 PYTHIA 13; +0.16995 d anti-u d cs_1 PYTHIA 13; +0.06335 s anti-u d cs_0 PYTHIA 13; +0.00568 d anti-u s cs_1 PYTHIA 13; +0.00797 d anti-u s cs_0 PYTHIA 13; +0.06148 s anti-c d cs_0 PYTHIA 13; +0.06918 d anti-u d cd_0 PYTHIA 13; +0.03999 s anti-c d cd_0 PYTHIA 13; +0.00865 d anti-u d su_0 PYTHIA 13; +0.00500 s anti-c d su_0 PYTHIA 13; +Enddecay + +Decay anti-Xi_b+ +# SemiLeptonic Decays + 0.05460 anti-Xi_c0 e+ nu_e PHSP; + 0.05460 anti-Xi_c0 mu+ nu_mu PHSP; + 0.02000 anti-Xi_c0 tau+ nu_tau PHSP; +# Hadronic Decays with anti-Xi_c0 + 0.00600 anti-Xi_c0 pi+ PHSP; + 0.02200 anti-Xi_c0 pi+ pi+ pi- PHSP; + 0.00055 anti-Xi_c0 K+ PHSP; + 0.02200 anti-Xi_c0 D_s+ PHSP; + 0.00047 anti-Xi+ J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00038 anti-Xi+ psi(2S) PHSP; + 0.00018 anti-D0 anti-Lambda0 pi+ PHSP; + 0.00020 anti-Sigma_c0 K+ PHSP; + 0.00020 anti-Omega_c0 K+ PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.38757 u anti-d anti-d anti-cs_0 PYTHIA 13; +0.16995 u anti-d anti-d anti-cs_1 PYTHIA 13; +0.06335 u anti-s anti-d anti-cs_0 PYTHIA 13; +0.00568 u anti-d anti-s anti-cs_1 PYTHIA 13; +0.00797 u anti-d anti-s anti-cs_0 PYTHIA 13; +0.06148 c anti-s anti-d anti-cs_0 PYTHIA 13; +0.06918 u anti-d anti-d anti-cd_0 PYTHIA 13; +0.03999 c anti-s anti-d anti-cd_0 PYTHIA 13; +0.00865 u anti-d anti-d anti-su_0 PYTHIA 13; +0.00500 c anti-s anti-d anti-su_0 PYTHIA 13; +Enddecay + +Decay Xi_b0 +# SemiLeptonic Decays + 0.05460 Xi_c+ e- anti-nu_e PHSP; + 0.05460 Xi_c+ mu- anti-nu_mu PHSP; + 0.02000 Xi_c+ tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 Xi_c+ pi- PHSP; + 0.02200 Xi_c+ pi- pi+ pi- PHSP; + 0.00055 Xi_c+ K- PHSP; + 0.02200 Xi_c+ D_s- PHSP; + 0.00047 Xi0 J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00020 D0 Lambda0 PHSP; + 0.00010 Lambda_c+ K- PHSP; + 0.00020 Sigma_c0 anti-K0 PHSP; + 0.00020 Omega_c0 K0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00020 Xi'_c+ pi- PHSP; + 0.00003 Xi_c0 pi0 PHSP; + 0.00015 Xi_c0 eta PHSP; + 0.00004 Xi_c0 eta' PHSP; + 0.00020 Xi'_c0 pi0 PHSP; + 0.00020 Xi'_c0 eta PHSP; + 0.00030 Xi'_c0 eta' PHSP; + 0.00040 Sigma_c+ K- PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.58591 d anti-u s cu_0 PYTHIA 13; +0.01363 s anti-u s cu_1 PYTHIA 13; +0.09539 s anti-u s cc_1 PYTHIA 13; +0.10900 s anti-u d cu_1 PYTHIA 13; +0.01363 d anti-u d uu_1 PYTHIA 13; +Enddecay + +Decay anti-Xi_b0 + 0.05460 anti-Xi_c- e+ nu_e PHSP; + 0.05460 anti-Xi_c- mu+ nu_mu PHSP; + 0.02000 anti-Xi_c- tau+ nu_tau PHSP; +# Hadronic Decays with anti-Xi_c- + 0.00600 anti-Xi_c- pi+ PHSP; + 0.02200 anti-Xi_c- pi+ pi+ pi- PHSP; + 0.00055 anti-Xi_c- K+ PHSP; + 0.02200 anti-Xi_c- D_s+ PHSP; + 0.00047 anti-Xi0 J/psi PHSP; +# added by D.Litvintsev 12/8/03: + 0.00020 anti-D0 anti-Lambda0 PHSP; + 0.00010 anti-Lambda_c- K+ PHSP; + 0.00020 anti-Sigma_c0 K0 PHSP; + 0.00020 anti-Omega_c0 anti-K0 PHSP; +# +# Additional decays from hep-ph/9709372 scaled to the Lambda_c0 pi rate + 0.00020 anti-Xi'_c- pi+ PHSP; + 0.00003 anti-Xi_c0 pi0 PHSP; + 0.00015 anti-Xi_c0 eta PHSP; + 0.00004 anti-Xi_c0 eta' PHSP; + 0.00020 anti-Xi'_c0 pi0 PHSP; + 0.00020 anti-Xi'_c0 eta PHSP; + 0.00030 anti-Xi'_c0 eta' PHSP; + 0.00040 anti-Sigma_c- K+ PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.58591 u anti-d anti-s anti-cu_0 PYTHIA 13; +0.01363 u anti-s anti-s anti-cu_1 PYTHIA 13; +0.09539 u anti-s anti-s anti-cc_1 PYTHIA 13; +0.10900 u anti-s anti-d anti-cu_1 PYTHIA 13; +0.01363 u anti-d anti-d anti-uu_1 PYTHIA 13; +Enddecay + +# added by D.Litvintsev 12/8/03: +Decay Omega_b- +# SemiLeptonic Decays + 0.05460 Omega_c0 e- anti-nu_e PHSP; + 0.05460 Omega_c0 mu- anti-nu_mu PHSP; + 0.02000 Omega_c0 tau- anti-nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 Omega_c0 pi- PHSP; + 0.02200 Omega_c0 pi- pi+ pi- PHSP; + 0.00055 Omega_c0 K- PHSP; + 0.02200 Omega_c0 D_s- PHSP; + 0.0011 D0 Xi- PHSP; +# + 0.00047 Omega- J/psi PHSP; + 0.00038 Omega- psi(2S) PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.68192 d anti-u s cs_0 PYTHIA 13; +0.10910 d anti-u d cs_0 PYTHIA 13; +0.02728 d anti-u s su_0 PYTHIA 13; +Enddecay + +Decay anti-Omega_b+ +# SemiLeptonic Decays + 0.05460 anti-Omega_c0 e+ nu_e PHSP; + 0.05460 anti-Omega_c0 mu+ nu_mu PHSP; + 0.02000 anti-Omega_c0 tau+ nu_tau PHSP; +# Hadronic Decays with Xi_c+ + 0.00600 anti-Omega_c0 pi+ PHSP; + 0.02200 anti-Omega_c0 pi+ pi+ pi- PHSP; + 0.00055 anti-Omega_c0 K+ PHSP; + 0.02200 anti-Omega_c0 D_s+ PHSP; + 0.0011 anti-D0 anti-Xi+ PHSP; +# + 0.00047 anti-Omega+ J/psi PHSP; + 0.00038 anti-Omega+ psi(2S) PHSP; +# aaa 10/19/05 Do not if this is correct but filling out with inclusives +0.68192 u anti-d anti-s anti-cs_0 PYTHIA 13; +0.10910 u anti-d anti-d anti-cs_0 PYTHIA 13; +0.02728 u anti-d anti-s anti-su_0 PYTHIA 13; +Enddecay + + +Decay Sigma_b+ + 1.00000 Lambda_b0 pi+ PHSP; +Enddecay +Decay anti-Sigma_b- + 1.00000 anti-Lambda_b0 pi- PHSP; +Enddecay + +Decay Sigma_b- + 1.00000 Lambda_b0 pi- PHSP; +Enddecay +Decay anti-Sigma_b+ + 1.00000 anti-Lambda_b0 pi+ PHSP; +Enddecay + +Decay Sigma_b0 + 1.00000 Lambda_b0 gamma PHOTOS PHSP; +Enddecay +Decay anti-Sigma_b0 + 1.00000 anti-Lambda_b0 gamma PHOTOS PHSP; +Enddecay + + +# +# B_c Mesons +# + +Decay B_c- +0.01600 tau- anti-nu_tau SLN; +# +# SemiLeptonic Decays +0.01900 J/psi e- anti-nu_e PHOTOS PHSP; +0.00094 psi(2S) e- anti-nu_e PHOTOS PHSP; +0.00750 eta_c e- anti-nu_e PHOTOS PHSP; +0.00020 eta_c(2S) e- anti-nu_e PHOTOS PHSP; +0.00004 anti-D0 e- anti-nu_e PHOTOS PHSP; +0.00018 anti-D*0 e- anti-nu_e PHOTOS PHSP; +0.04030 anti-B_s0 e- anti-nu_e PHOTOS PHSP; +0.05060 anti-B_s*0 e- anti-nu_e PHOTOS PHSP; +0.00340 anti-B0 e- anti-nu_e PHOTOS PHSP; +0.00580 anti-B*0 e- anti-nu_e PHOTOS PHSP; +# +0.01900 J/psi mu- anti-nu_mu PHOTOS PHSP; +0.00094 psi(2S) mu- anti-nu_mu PHOTOS PHSP; +0.00750 eta_c mu- anti-nu_mu PHOTOS PHSP; +0.00020 eta_c(2S) mu- anti-nu_mu PHOTOS PHSP; +0.00004 anti-D0 mu- anti-nu_mu PHOTOS PHSP; +0.00018 anti-D*0 mu- anti-nu_mu PHOTOS PHSP; +0.04030 anti-B_s0 mu- anti-nu_mu PHOTOS PHSP; +0.05060 anti-B_s*0 mu- anti-nu_mu PHOTOS PHSP; +0.00340 anti-B0 mu- anti-nu_mu PHOTOS PHSP; +0.00580 anti-B*0 mu- anti-nu_mu PHOTOS PHSP; +# +0.00480 J/psi tau- anti-nu_tau PHSP; +0.00008 psi(2S) tau- anti-nu_tau PHSP; +0.00230 eta_c tau- anti-nu_tau PHSP; +0.000016 eta_c(2S) tau- anti-nu_tau PHSP; +0.00002 anti-D0 tau- anti-nu_tau PHSP; +0.00008 anti-D*0 tau- anti-nu_tau PHSP; +# +# +# Hadronic Decays +0.00200 eta_c pi- PHSP; +0.00420 rho- eta_c SVS; +0.00013 eta_c K- PHSP; +0.00020 K*- eta_c SVS; +0.00130 J/psi pi- SVS; +0.00400 J/psi rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K- SVS; +0.00022 J/psi K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D- D0 PHSP; +0.000075 D*0 D- SVS; +0.000049 D*- D0 SVS; +0.00033 D*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s- D0 PHSP; +0.0000071 D*0 D_s- SVS; +0.0000045 D_s*- D0 SVS; +0.000026 D_s*- D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D- anti-D0 PHSP; +0.0000003 anti-D*0 D- SVS; +0.0000004 D*- anti-D0 SVS; +0.0000016 anti-D*0 D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s- anti-D0 PHSP; +0.0000063 anti-D*0 D_s- SVS; +0.0000085 D_s*- anti-D0 SVS; +0.0000404 D_s*- anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s- PHSP; +0.00270 D_s*- eta_c SVS; +0.00015 eta_c D- PHSP; +0.00010 D*- eta_c SVS; +0.00170 J/psi D_s- SVS; +0.00670 J/psi D_s*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D- SVS; +0.00028 J/psi D*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 anti-B_s0 pi- PHSP; +0.07200 rho- anti-B_s0 SVS; +0.01060 anti-B_s0 K- PHSP; +0.00000 K*- anti-B_s0 SVS; +0.06500 anti-B_s*0 pi- SVS; +0.20200 anti-B_s*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 anti-B_s*0 K- SVS; +0.00000 anti-B_s*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 anti-B0 pi- PHSP; +0.00960 rho- anti-B0 SVS; +0.00070 anti-B0 K- PHSP; +0.00015 K*- anti-B0 SVS; +0.00950 anti-B*0 pi- SVS; +0.02570 anti-B*0 rho- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 anti-B*0 K- SVS; +0.00058 anti-B*0 K*- SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B- pi0 PHSP; +0.00034 rho0 B- SVS; +0.01980 B- K0 PHSP; +0.00430 K*0 B- SVS; +0.00033 B*- pi0 SVS; +0.00090 B*- rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*- K0 SVS; +0.01670 B*- K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ + 0.00002 rho0 pi- SVS; + 0.06005 anti-c s PYTHIA 11; +# PR LHCb 27 Apr 2004 Add Pythia Modes +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 cs_0 anti-uu_0 PYTHIA 23; +#0.0400470 cs_1 anti-uu_1 PYTHIA 23; +# +Enddecay + +# 09/15/03 A. Sanchez: Using BR's from hep-ph/0308214 +# +# Total Br = 0.939865 + .06135 cs +Decay B_c+ +0.01600 tau+ nu_tau SLN; +# +# SemiLeptonic Decays +0.01900 J/psi e+ nu_e PHOTOS PHSP; +0.00094 psi(2S) e+ nu_e PHOTOS PHSP; +0.00750 eta_c e+ nu_e PHOTOS PHSP; +0.00020 eta_c(2S) e+ nu_e PHOTOS PHSP; +0.00004 D0 e+ nu_e PHOTOS PHSP; +0.00018 D*0 e+ nu_e PHOTOS PHSP; +0.04030 B_s0 e+ nu_e PHOTOS PHSP; +0.05060 B_s*0 e+ nu_e PHOTOS PHSP; +0.00340 B0 e+ nu_e PHOTOS PHSP; +0.00580 B*0 e+ nu_e PHOTOS PHSP; +# +0.01900 J/psi mu+ nu_mu PHOTOS PHSP; +0.00094 psi(2S) mu+ nu_mu PHOTOS PHSP; +0.00750 eta_c mu+ nu_mu PHOTOS PHSP; +0.00020 eta_c(2S) mu+ nu_mu PHOTOS PHSP; +0.00004 D0 mu+ nu_mu PHOTOS PHSP; +0.00018 D*0 mu+ nu_mu PHOTOS PHSP; +0.04030 B_s0 mu+ nu_mu PHOTOS PHSP; +0.05060 B_s*0 mu+ nu_mu PHOTOS PHSP; +0.00340 B0 mu+ nu_mu PHOTOS PHSP; +0.00580 B*0 mu+ nu_mu PHOTOS PHSP; +# +0.00480 J/psi tau+ nu_tau PHSP; +0.00008 psi(2S) tau+ nu_tau PHSP; +0.00230 eta_c tau+ nu_tau PHSP; +0.000016 eta_c(2S) tau+ nu_tau PHSP; +0.00002 D0 tau+ nu_tau PHSP; +0.00008 D*0 tau+ nu_tau PHSP; +# +# Hadronic Decays +0.00200 eta_c pi+ PHSP; +0.00420 rho+ eta_c SVS; +0.00013 eta_c K+ PHSP; +0.00020 K*+ eta_c SVS; +0.00130 J/psi pi+ SVS; +0.00400 J/psi rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00011 J/psi K+ SVS; +0.00022 J/psi K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.000053 D+ anti-D0 PHSP; +0.000075 anti-D*0 D+ SVS; +0.000049 D*+ anti-D0 SVS; +0.00033 D*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000048 D_s+ anti-D0 PHSP; +0.0000071 anti-D*0 D_s+ SVS; +0.0000045 D_s*+ anti-D0 SVS; +0.000026 D_s*+ anti-D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.0000003 D+ D0 PHSP; +0.0000003 D*0 D+ SVS; +0.0000004 D*+ D0 SVS; +0.0000016 D*0 D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.0000066 D_s+ D0 PHSP; +0.0000063 D*0 D_s+ SVS; +0.0000085 D_s*+ D0 SVS; +0.0000404 D_s*+ D*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.00280 eta_c D_s+ PHSP; +0.00270 D_s*+ eta_c SVS; +0.00015 eta_c D+ PHSP; +0.00010 D*+ eta_c SVS; +0.00170 J/psi D_s+ SVS; +0.00670 J/psi D_s*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00009 J/psi D+ SVS; +0.00028 J/psi D*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# +0.16400 B_s0 pi+ PHSP; +0.07200 rho+ B_s0 SVS; +0.01060 B_s0 K+ PHSP; +0.00000 K*+ B_s0 SVS; +0.06500 B_s*0 pi+ SVS; +0.20200 B_s*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00370 B_s*0 K+ SVS; +0.00000 B_s*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01060 B0 pi+ PHSP; +0.00960 rho+ B0 SVS; +0.00070 B0 K+ PHSP; +0.00015 K*+ B0 SVS; +0.00950 B*0 pi+ SVS; +0.02570 B*0 rho+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00055 B*0 K+ SVS; +0.00058 B*0 K*+ SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.00037 B+ pi0 PHSP; +0.00034 rho0 B+ SVS; +0.01980 B+ anti-K0 PHSP; +0.00430 K*0 B+ SVS; +0.00033 B*+ pi0 SVS; +0.00090 B*+ rho0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +0.01600 B*+ anti-K0 SVS; +0.01670 B*+ K*0 SVV_HELAMP 1.0 0.0 1.0 0.0 1.0 0.0; +# PR LHCb 09 Apr 2004 Add B_c+ -> rho0 pi+ + 0.00002 rho0 pi+ SVS; + 0.06005 c anti-s PYTHIA 11; +# PR LHCb 27 Apr 2004 Add Pythia Modes +# +# ash 10/27/03 Do not if this is correct but filling out with unknown cs +#0.0200235 anti-cs_0 uu_0 PYTHIA 23; +#0.0400470 anti-cs_1 uu_1 PYTHIA 23; +# +Enddecay + + +# Add excited Lambda_c decays (R.J. Tesarek 12/9/03) +# Just a guess for the last two BR [Lambda_c(2593)+]. +Decay Lambda_c(2593)+ +0.096585366 Sigma_c++ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c0 pi+ PHSP; #[Reconstructed PDG2011] +0.190000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.096585366 Sigma_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 Lambda_c+ pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] +0.240000000 Sigma_c*++ pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 Sigma_c*0 pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +Decay anti-Lambda_c(2593)- +0.096585366 anti-Sigma_c-- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c0 pi- PHSP; #[Reconstructed PDG2011] +0.190000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.096585366 anti-Sigma_c- pi0 PHSP; #[Reconstructed PDG2011] +0.036219512 anti-Lambda_c- pi0 pi0 PHSP; #[Reconstructed PDG2011] +0.004024390 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*-- pi+ PHSP; #[New mode added] #[Reconstructed PDG2011] +0.240000000 anti-Sigma_c*0 pi- PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay +# +Decay Lambda_c(2625)+ +0.670000000 Lambda_c+ pi+ pi- PHSP; #[Reconstructed PDG2011] +0.320294118 Lambda_c+ pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 Lambda_c+ gamma PHSP; #[Reconstructed PDG2011] +Enddecay +Decay anti-Lambda_c(2625)- +0.670000000 anti-Lambda_c- pi- pi+ PHSP; #[Reconstructed PDG2011] +0.320294118 anti-Lambda_c- pi0 PHSP; #[Reconstructed PDG2011] +0.009705882 anti-Lambda_c- gamma PHSP; #[Reconstructed PDG2011] +Enddecay + +# Add excited B hadrons (LHCb PR 10/03/04) +# Reference : Pythia 6.205 decay table +# PDG Id = 5312 +Decay Xi'_b- + 1.0000 Xi_b- gamma PHSP; +Enddecay +Decay anti-Xi'_b+ + 1.0000 anti-Xi_b+ gamma PHSP; +Enddecay +# PDG Id = 5322 +Decay Xi'_b0 + 1.0000 Xi_b0 gamma PHSP; +Enddecay +Decay anti-Xi'_b0 + 1.0000 anti-Xi_b0 gamma PHSP; +Enddecay +# PDG Id = 10521 +Decay B_0*+ + 0.6670 B0 pi+ PHSP; + 0.3330 B+ pi0 PHSP; +Enddecay +Decay B_0*- + 0.6670 anti-B0 pi- PHSP; + 0.3330 B- pi0 PHSP; +Enddecay +# PDG Id = 20523 Broad : S wave +Decay B'_1+ + 0.6670 B*0 pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*+ pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay B'_1- + 0.6670 anti-B*0 pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*- pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10523 Narrow : D wave +Decay B_1+ + 0.6670 B*0 pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*+ pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay B_1- + 0.6670 anti-B*0 pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*- pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 525 Narrow : D wave +Decay B_2*+ + 0.3000 B0 pi+ TSS; + 0.1500 B+ pi0 TSS; + 0.1600 B*0 pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*+ pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*0 pi+ pi0 PHSP; + 0.0600 B*+ pi+ pi- PHSP; + 0.0800 B0 pi+ pi0 PHSP; + 0.0400 B+ pi+ pi- PHSP; +Enddecay +Decay B_2*- + 0.3000 anti-B0 pi- TSS; + 0.1500 B- pi0 TSS; + 0.1600 anti-B*0 pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*- pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 anti-B*0 pi- pi0 PHSP; + 0.0600 B*- pi- pi+ PHSP; + 0.0800 anti-B0 pi- pi0 PHSP; + 0.0400 B- pi- pi+ PHSP; +Enddecay +# PDG Id = 10511 +Decay B_0*0 + 0.6670 B+ pi- PHSP; + 0.3330 B0 pi0 PHSP; +Enddecay +Decay anti-B_0*0 + 0.6670 B- pi+ PHSP; + 0.3330 anti-B0 pi0 PHSP; +Enddecay +# PDG Id = 20513 Broad : S wave +Decay B'_10 + 0.6670 B*+ pi- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-B'_10 + 0.6670 B*- pi+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.3330 anti-B*0 pi0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10513 Narrow : D wave +Decay B_10 + 0.6670 B*+ pi- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-B_10 + 0.6670 B*- pi+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.3330 anti-B*0 pi0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 515 +Decay B_2*0 + 0.3000 B+ pi- TSS; + 0.1500 B0 pi0 TSS; + 0.1600 B*+ pi- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*+ pi- pi0 PHSP; + 0.0600 B*0 pi+ pi- PHSP; + 0.0800 B+ pi- pi0 PHSP; + 0.0400 B0 pi+ pi- PHSP; +Enddecay +Decay anti-B_2*0 + 0.3000 B- pi+ TSS; + 0.1500 anti-B0 pi0 TSS; + 0.1600 B*- pi+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.0800 anti-B*0 pi0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.1300 B*- pi+ pi0 PHSP; + 0.0600 anti-B*0 pi- pi+ PHSP; + 0.0800 B- pi+ pi0 PHSP; + 0.0400 anti-B0 pi- pi+ PHSP; +Enddecay +# PDG Id = 10531 +Decay B_s0*0 + 0.5000 B+ K- PHSP; + 0.5000 B0 anti-K0 PHSP; +Enddecay +Decay anti-B_s0*0 + 0.5000 B- K+ PHSP; + 0.5000 anti-B0 K0 PHSP; +Enddecay +# PDG Id = 20533 Broad : S wave +Decay B'_s10 + 0.5000 B*+ K- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*0 anti-K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay anti-B'_s10 + 0.5000 B*- K+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 anti-B*0 K0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 10533 Narrow : D wave +Decay B_s10 + 0.5000 B*+ K- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*0 anti-K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay anti-B_s10 + 0.5000 B*- K+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 anti-B*0 K0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 535 Narrow : D wave +Decay B_s2*0 + 0.3000 B+ K- TSS; + 0.3000 B0 anti-K0 TSS; + 0.2000 B*+ K- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*0 anti-K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +Decay anti-B_s2*0 + 0.3000 B- K+ TSS; + 0.3000 anti-B0 K0 TSS; + 0.2000 B*- K+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 anti-B*0 K0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 543 +Decay B_c*+ + 1.0000 B_c+ gamma VSP_PWAVE; +Enddecay +Decay B_c*- + 1.0000 B_c- gamma VSP_PWAVE; +Enddecay +# PDG Id = 545 Narrow : D wave +Decay B_c2*+ + 0.3000 B0 D+ TSS; + 0.3000 B+ D0 TSS; + 0.2000 B*0 D+ TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*+ D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +Decay B_c2*- + 0.3000 anti-B0 D- TSS; + 0.3000 B- anti-D0 TSS; + 0.2000 anti-B*0 D- TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; + 0.2000 B*- anti-D0 TVS_PWAVE 0.0 0.0 1.0 0.0 0.0 0.0; +Enddecay +# PDG Id = 5114 +Decay Sigma_b*- + 1.0000 Lambda_b0 pi- PHSP; +Enddecay +Decay anti-Sigma_b*+ + 1.0000 anti-Lambda_b0 pi+ PHSP; +Enddecay +# PDG Id = 5224 +Decay Sigma_b*+ + 1.0000 Lambda_b0 pi+ PHSP; +Enddecay +Decay anti-Sigma_b*- + 1.0000 anti-Lambda_b0 pi- PHSP; +Enddecay +# PDG Id = 5214 +Decay Sigma_b*0 + 1.0000 Lambda_b0 pi0 PHSP; +Enddecay +Decay anti-Sigma_b*0 + 1.0000 anti-Lambda_b0 pi0 PHSP; +Enddecay +# PDG Id = 5314 +Decay Xi_b*- + 1.0000 Xi_b- gamma PHSP; +Enddecay +Decay anti-Xi_b*+ + 1.0000 anti-Xi_b+ gamma PHSP; +Enddecay +# PDG Id = 5324 +Decay Xi_b*0 + 1.0000 Xi_b0 gamma PHSP; +Enddecay +Decay anti-Xi_b*0 + 1.0000 anti-Xi_b0 gamma PHSP; +Enddecay +# PDG Id = 5334 +Decay Omega_b*- + 1.0000 Omega_b- gamma PHSP; +Enddecay +Decay anti-Omega_b*+ + 1.0000 anti-Omega_b+ gamma PHSP; +Enddecay +# PDG Id = 10541 +Decay B_c0*+ + 0.5000 B0 D+ PHSP; + 0.5000 B+ D0 PHSP; +Enddecay +Decay B_c0*- + 0.5000 anti-B0 D- PHSP; + 0.5000 B- anti-D0 PHSP; +Enddecay +# PDG Id = 10543 Narrow : D wave +Decay B_c1+ + 0.5000 B*0 D+ VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*+ D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +Decay B_c1- + 0.5000 anti-B*0 D- VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; + 0.5000 B*- anti-D0 VVS_PWAVE 0.0 0.0 0.0 0.0 1.0 0.0; +Enddecay +# PDG Id = 20543 Broad : S wave +Decay B'_c1+ + 0.5000 B*0 D+ VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*+ D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay +Decay B'_c1- + 0.5000 anti-B*0 D- VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; + 0.5000 B*- anti-D0 VVS_PWAVE 1.0 0.0 0.0 0.0 0.0 0.0; +Enddecay + +# Excited charmed Baryons LHCb PR 3-05-2006 +Decay Xi_cc*++ + 0.08 e+ nu_e Xi_c+ PHSP ; + 0.08 mu+ nu_mu Xi_c+ PHSP ; + 0.51 u anti-d s cu_0 PYTHIA 11 ; + 0.25 u anti-d s cu_1 PYTHIA 11 ; + 0.05 u anti-s s cu_0 PYTHIA 11 ; + 0.03 u anti-s s cu_1 PYTHIA 11 ; +Enddecay + +Decay anti-Xi_cc*-- + 0.08 e- anti-nu_e anti-Xi_c- PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; + 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; + 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; + 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; + 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; +Enddecay + +Decay Xi_cc++ + 0.08 e+ nu_e Xi_c+ PHSP ; + 0.08 mu+ nu_mu Xi_c+ PHSP ; + 0.51 u anti-d s cu_0 PYTHIA 11 ; + 0.25 u anti-d s cu_1 PYTHIA 11 ; + 0.05 u anti-s s cu_0 PYTHIA 11 ; + 0.03 u anti-s s cu_1 PYTHIA 11 ; +Enddecay + +Decay anti-Xi_cc-- + 0.08 e- anti-nu_e anti-Xi_c- PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c- PHSP; + 0.51 anti-u d anti-s anti-cu_0 PYTHIA 11 ; + 0.25 anti-u d anti-s anti-cu_0 PYTHIA 11 ; + 0.05 anti-u s anti-s anti-cu_1 PYTHIA 11 ; + 0.03 anti-u s anti-s anti-cu_1 PYTHIA 11 ; +Enddecay + +Decay Xi_cc*+ + 0.08 e+ nu_e Xi_c0 PHSP; + 0.08 mu+ nu_mu Xi_c0 PHSP; + 0.51 u anti-d s cd_0 PYTHIA 11 ; + 0.25 u anti-d s cd_1 PYTHIA 11 ; + 0.05 u anti-s s cd_0 PYTHIA 11 ; + 0.03 u anti-s s cd_1 PYTHIA 11 ; +Enddecay + +Decay anti-Xi_cc*- + 0.08 e- anti-nu_e anti-Xi_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; + 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; + 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; + 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; + 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; +Enddecay + +Decay Xi_cc+ + 0.08 e+ nu_e Xi_c0 PHSP; + 0.08 mu+ nu_mu Xi_c0 PHSP; + 0.51 u anti-d s cd_0 PYTHIA 11 ; + 0.25 u anti-d s cd_1 PYTHIA 11 ; + 0.05 u anti-s s cd_0 PYTHIA 11 ; + 0.03 u anti-s s cd_1 PYTHIA 11 ; +Enddecay + +Decay anti-Xi_cc- + 0.08 e- anti-nu_e anti-Xi_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Xi_c0 PHSP; + 0.51 anti-u d anti-s anti-cd_0 PYTHIA 11 ; + 0.25 anti-u d anti-s anti-cd_1 PYTHIA 11 ; + 0.05 anti-u s anti-s anti-cd_0 PYTHIA 11 ; + 0.03 anti-u s anti-s anti-cd_1 PYTHIA 11 ; +Enddecay + +Decay Omega_cc+ + 0.08 e+ nu_e Omega_c0 PHSP; + 0.08 mu+ nu_mu Omega_c0 PHSP; + 0.51 u anti-d s cs_0 PYTHIA 11; + 0.25 u anti-d s cs_1 PYTHIA 11; + 0.05 u anti-s s cs_0 PYTHIA 11; + 0.03 u anti-s s cs_1 PYTHIA 11; +Enddecay + +Decay anti-Omega_cc- + 0.08 e- anti-nu_e anti-Omega_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; + 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; + 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; + 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; + 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; +Enddecay + +Decay Omega_cc*+ + 0.08 e+ nu_e Omega_c0 PHSP; + 0.08 mu+ nu_mu Omega_c0 PHSP; + 0.51 u anti-d s cs_0 PYTHIA 11; + 0.25 u anti-d s cs_1 PYTHIA 11; + 0.05 u anti-s s cs_0 PYTHIA 11; + 0.03 u anti-s s cs_1 PYTHIA 11; +Enddecay + +Decay anti-Omega_cc*- + 0.08 e- anti-nu_e anti-Omega_c0 PHSP; + 0.08 mu- anti-nu_mu anti-Omega_c0 PHSP; + 0.51 anti-u d anti-s anti-cs_0 PYTHIA 11; + 0.25 anti-u d anti-s anti-cs_1 PYTHIA 11; + 0.05 anti-u s anti-s anti-cs_0 PYTHIA 11; + 0.03 anti-u s anti-s anti-cs_1 PYTHIA 11; +Enddecay + +Decay K_L0 +#0.202464226 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.202464226 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.135033299 pi+ mu- nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.135033299 pi- mu+ nu_mu PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000025738 pi0 pi+ e- nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000025738 pi0 pi- e+ nu_e PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000006205 pi+ e- nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000006205 pi- e+ nu_e e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.194795855 pi0 pi0 pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.125231606 pi+ pi- pi0 PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001880711 pi+ e- nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.001880711 pi- e+ nu_e gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000277023 pi+ mu- nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000277023 pi- mu+ nu_mu gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000040995 pi+ pi- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000001262 pi0 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000016 pi0 gamma e+ e- PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000545653 gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000009265 e+ e- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000355 mu+ mu- gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000584 e+ e- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +#0.000000007 mu+ mu- gamma gamma PHSP; #[New mode added] #[Reconstructed PDG2011] +Enddecay + +End diff --git a/Generators/EvtGen_i/share/Bdecays0.dat b/Generators/EvtGen_i/share/file/Bdecays0.dat similarity index 100% rename from Generators/EvtGen_i/share/Bdecays0.dat rename to Generators/EvtGen_i/share/file/Bdecays0.dat diff --git a/Generators/EvtGen_i/share/Bplus_Kplus_mu6mu4.DEC b/Generators/EvtGen_i/share/file/Bplus_Kplus_mu6mu4.DEC similarity index 100% rename from Generators/EvtGen_i/share/Bplus_Kplus_mu6mu4.DEC rename to Generators/EvtGen_i/share/file/Bplus_Kplus_mu6mu4.DEC diff --git a/Generators/EvtGen_i/share/Bplus_Kplus_star_K0s_pi_mu6mu4.DEC b/Generators/EvtGen_i/share/file/Bplus_Kplus_star_K0s_pi_mu6mu4.DEC similarity index 100% rename from Generators/EvtGen_i/share/Bplus_Kplus_star_K0s_pi_mu6mu4.DEC rename to Generators/EvtGen_i/share/file/Bplus_Kplus_star_K0s_pi_mu6mu4.DEC diff --git a/Generators/EvtGen_i/share/Bs2Jpsiphi.DEC b/Generators/EvtGen_i/share/file/Bs2Jpsiphi.DEC similarity index 100% rename from Generators/EvtGen_i/share/Bs2Jpsiphi.DEC rename to Generators/EvtGen_i/share/file/Bs2Jpsiphi.DEC diff --git a/Generators/EvtGen_i/share/DECAY.DEC b/Generators/EvtGen_i/share/file/DECAY.DEC similarity index 100% rename from Generators/EvtGen_i/share/DECAY.DEC rename to Generators/EvtGen_i/share/file/DECAY.DEC diff --git a/Generators/EvtGen_i/share/DstarP2D0PiP_D02Kpi_evtgen.DEC b/Generators/EvtGen_i/share/file/DstarP2D0PiP_D02Kpi_evtgen.DEC similarity index 100% rename from Generators/EvtGen_i/share/DstarP2D0PiP_D02Kpi_evtgen.DEC rename to Generators/EvtGen_i/share/file/DstarP2D0PiP_D02Kpi_evtgen.DEC diff --git a/Generators/EvtGen_i/share/HerwigppInclusiveP8.pdt b/Generators/EvtGen_i/share/file/HerwigppInclusiveP8.pdt similarity index 100% rename from Generators/EvtGen_i/share/HerwigppInclusiveP8.pdt rename to Generators/EvtGen_i/share/file/HerwigppInclusiveP8.pdt diff --git a/Generators/EvtGen_i/share/MYDECAY.DEC b/Generators/EvtGen_i/share/file/MYDECAY.DEC similarity index 100% rename from Generators/EvtGen_i/share/MYDECAY.DEC rename to Generators/EvtGen_i/share/file/MYDECAY.DEC diff --git a/Generators/EvtGen_i/share/MYDECAY_Lb2Lll.DEC b/Generators/EvtGen_i/share/file/MYDECAY_Lb2Lll.DEC similarity index 100% rename from Generators/EvtGen_i/share/MYDECAY_Lb2Lll.DEC rename to Generators/EvtGen_i/share/file/MYDECAY_Lb2Lll.DEC diff --git a/Generators/EvtGen_i/share/MYDECAY_antiLb2Lll.DEC b/Generators/EvtGen_i/share/file/MYDECAY_antiLb2Lll.DEC similarity index 100% rename from Generators/EvtGen_i/share/MYDECAY_antiLb2Lll.DEC rename to Generators/EvtGen_i/share/file/MYDECAY_antiLb2Lll.DEC diff --git a/Generators/EvtGen_i/share/inclusive.dec b/Generators/EvtGen_i/share/file/inclusive.dec similarity index 100% rename from Generators/EvtGen_i/share/inclusive.dec rename to Generators/EvtGen_i/share/file/inclusive.dec diff --git a/Generators/EvtGen_i/share/inclusive.pdt b/Generators/EvtGen_i/share/file/inclusive.pdt similarity index 100% rename from Generators/EvtGen_i/share/inclusive.pdt rename to Generators/EvtGen_i/share/file/inclusive.pdt diff --git a/Generators/EvtGen_i/share/inclusiveP8.dec b/Generators/EvtGen_i/share/file/inclusiveP8.dec similarity index 100% rename from Generators/EvtGen_i/share/inclusiveP8.dec rename to Generators/EvtGen_i/share/file/inclusiveP8.dec diff --git a/Generators/EvtGen_i/share/inclusiveP8.pdt b/Generators/EvtGen_i/share/file/inclusiveP8.pdt similarity index 100% rename from Generators/EvtGen_i/share/inclusiveP8.pdt rename to Generators/EvtGen_i/share/file/inclusiveP8.pdt diff --git a/Generators/EvtGen_i/share/inclusiveP8DsDPlus.pdt b/Generators/EvtGen_i/share/file/inclusiveP8DsDPlus.pdt similarity index 100% rename from Generators/EvtGen_i/share/inclusiveP8DsDPlus.pdt rename to Generators/EvtGen_i/share/file/inclusiveP8DsDPlus.pdt diff --git a/Generators/EvtGen_i/share/pdt.table b/Generators/EvtGen_i/share/file/pdt.table similarity index 100% rename from Generators/EvtGen_i/share/pdt.table rename to Generators/EvtGen_i/share/file/pdt.table diff --git a/Generators/Photospp_i/CMakeLists.txt b/Generators/Photospp_i/CMakeLists.txt index fa85facc811e14021e8adc743cde305f5c96125e..cca200250bddeac1eff9a370e63d1e1c544df9b4 100644 --- a/Generators/Photospp_i/CMakeLists.txt +++ b/Generators/Photospp_i/CMakeLists.txt @@ -41,4 +41,5 @@ atlas_add_component( Photospp_i LINK_LIBRARIES GaudiKernel Photospp_iLib ) # Install files from the package: -atlas_install_joboptions( share/*.py ) +atlas_install_joboptions( share/common/*.py ) + diff --git a/Generators/Photospp_i/share/common/Photospp_Fragment.py b/Generators/Photospp_i/share/common/Photospp_Fragment.py new file mode 100644 index 0000000000000000000000000000000000000000..66913f7181a946740ab60d6f5ec1839ed6906867 --- /dev/null +++ b/Generators/Photospp_i/share/common/Photospp_Fragment.py @@ -0,0 +1,7 @@ +## Photos++ QED config + +from Photospp_i.Photospp_iConf import Photospp_i +genSeq += Photospp_i("Photospp") +genSeq.Photospp.InfraRedCutOff = 1E-7 +evgenConfig.generators += ["Photospp"] + diff --git a/Generators/Photospp_i/share/photos_example.py b/Generators/Photospp_i/share/photos_example.py deleted file mode 100644 index 30c0be23bea527585ba84f12f47269d06c56ba14..0000000000000000000000000000000000000000 --- a/Generators/Photospp_i/share/photos_example.py +++ /dev/null @@ -1,36 +0,0 @@ -#import AthenaCommon.AtlasUnixGeneratorJob -from AthenaCommon.AppMgr import ServiceMgr as svcMgr - -#-------------------------------------------------------------- -# Event related parameters -#-------------------------------------------------------------- -# Number of events to be processed (default is 10) -theApp.EvtMax = 3 -#-------------------------------------------------------------- -# Algorithms Private Options -#-------------------------------------------------------------- -from AthenaServices.AthenaServicesConf import AtRndmGenSvc -ServiceMgr += AtRndmGenSvc() -ServiceMgr.AtRndmGenSvc.Seeds = ["PYTHIA8 4789899 989240512", - "PYTHIA8_INIT 820021 2347532"] - -svcMgr.MessageSvc.OutputLevel = INFO - -from AthenaCommon.AlgSequence import AlgSequence -topSequence = AlgSequence() -from Pythia8_i.Pythia8_iConf import Pythia8_i - - -topSequence+=Pythia8_i() -topSequence.Pythia8_i.Commands += ['PromptPhoton:all = on'] -topSequence.Pythia8_i.Commands += ['TimeShower:QEDshowerByL = off'] - -topSequence.Pythia8_i.CollisionEnergy = 7000 - -from Photospp_i.Photospp_iConf import Photospp_i -topSequence += Photospp_i() - -from TruthExamples.TruthExamplesConf import DumpMC -topSequence += DumpMC() - - diff --git a/Generators/Photospp_i/share/photos_rivet_zpT.py b/Generators/Photospp_i/share/photos_rivet_zpT.py deleted file mode 100644 index cff508ff61eaf4d8ee45faa50a71f38a9db8cd81..0000000000000000000000000000000000000000 --- a/Generators/Photospp_i/share/photos_rivet_zpT.py +++ /dev/null @@ -1,25 +0,0 @@ -evgenConfig.description = "Test of Pythia 8 + Photos++ in Z pT" -evgenConfig.keywords = ["QED", "Z"] - -include("MC12JobOptions/Pythia8_AU2_CTEQ6L1_Common.py") -include("MC12JobOptions/PhotosPythia8_Fragment.py") - -# Uncomment to turn exponentiation mode off -# Most physics channels should leave the default mode to on (i.e. leave this commented out) -#topAlg.Photospp.ExponentiationMode=False - -topAlg.Pythia8.Commands += ["WeakSingleBoson:ffbar2gmZ=on"] -topAlg.Pythia8.Commands += ["23:onMode=off", "23:onIfAny=11"] - -evgenConfig.minevents = 25000 - -from Rivet_i.Rivet_iConf import Rivet_i -rivet = Rivet_i("Rivet") -rivet.Analyses = ["ATLAS_2011_S9131140"] - -topAlg += rivet - -from AthenaCommon.AppMgr import ServiceMgr as svcMgr -from GaudiSvc.GaudiSvcConf import THistSvc -svcMgr += THistSvc() -svcMgr.THistSvc.Output = ["Rivet DATAFILE='Rivet.root' OPT='RECREATE'"] diff --git a/Generators/Pythia8_i/CMakeLists.txt b/Generators/Pythia8_i/CMakeLists.txt index 23528794ad70bfc402c6ae0a132a653ec40f9958..2edc52abdaaf9401e419f822df7cf7631ef2f44e 100644 --- a/Generators/Pythia8_i/CMakeLists.txt +++ b/Generators/Pythia8_i/CMakeLists.txt @@ -70,5 +70,6 @@ atlas_add_component( Pythia8_i LINK_LIBRARIES ${Boost_LIBRARIES} ${LHAPDF_LIBRARIES} ${CLHEP_LIBRARIES} ${PYTHIA8_LIBRARIES} AthenaKernel GeneratorModulesLib GaudiKernel GeneratorObjects PathResolver Pythia8_iLib ) # Install files from the package: -atlas_install_joboptions( share/*.py ) +atlas_install_joboptions( share/common/*.py + share/example/*.py ) diff --git a/Generators/Pythia8_i/share/common/MCFM_Pythia8_A14_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/MCFM_Pythia8_A14_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..bf0f5058cdf6ea9f9f2ef06aba34cb2e1a25381d --- /dev/null +++ b/Generators/Pythia8_i/share/common/MCFM_Pythia8_A14_NNPDF23LO_Common.py @@ -0,0 +1,25 @@ +###################################################################### +# +# MCFM 8.0 / Pythia8 +# Joboption only for showering the LHE files.. +# + +#-------------------------------------------------------------- +# EVGEN configuration +#-------------------------------------------------------------- +evgenConfig.generators += [ 'MCFM', 'Pythia8' ] +evgenConfig.description = 'MCFM, CT10nnlo PDF , Pythia8' +evgenConfig.keywords = ['diboson', '2lepton', 'electroweak', 'Higgs', 'ZZ'] +evgenConfig.contact = ['denys.denysiuk@cern.ch', 'xiangyang.ju@cern.ch'] +#evgenConfig.inputfilecheck = 'ggH300_5SMW_ZZ_4l' + +include('Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') +include("Pythia8_i/Pythia8_LHEF.py") + +# boson decays already done in the lhe file +genSeq.Pythia8.Commands += [ '25:onMode = off' ] +genSeq.Pythia8.Commands += [ '24:onMode = off' ] +genSeq.Pythia8.Commands += [ '23:onMode = off' ] + +# no power shower, just wimpy showers +genSeq.Pythia8.Commands += [ 'SpaceShower:pTmaxMatch = 1' ] diff --git a/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DD_Common.py b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DD_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..35a61fdfadbd2b92e9df0a4ba1629de0889f15f3 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DD_Common.py @@ -0,0 +1,22 @@ +## Config for Py8 with NNPDF23 QED pdf + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet= LHAPDF6:NNPDF23_nnlo_as_0118_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "SpaceShower:pTdampMatch = 1", + "BeamRemnants:primordialKThard = 1.88" +] + +evgenConfig.tune = "NNPDF23_QED" + +#EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DS_Common.py b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DS_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..7eb7cea460114e099d63ac41e4c39c744f8d53f6 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_DS_Common.py @@ -0,0 +1,35 @@ +## Config for Py8 with NNPDF23 QED pdf + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet= LHAPDF6:NNPDF23_nnlo_as_0118_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "BeamRemnants:unresolvedHadron=2", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "SpaceShower:pTdampMatch = 1", + "BeamRemnants:primordialKThard = 0.1", + "BeamRemnants:primordialKTsoft=0.1", + "PartonLevel:MPI = off", + "PartonLevel:ISR = on", + "SpaceShower:pTmaxMatch = 1", + "SpaceShower:pTmaxFudge = 1.", + "TimeShower:pTmaxMatch = 1", + "TimeShower:pTmaxFudge = 1.", + "SpaceShower:MEcorrections = off", + "TimeShower:MEcorrections = off", + "TimeShower:globalRecoil = on", + "TimeShower:weightGluonToQuark = 1", + "BeamRemnants:primordialKTremnant = 0.1" +] + +evgenConfig.tune = "NNPDF23_QED" + +#EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_EE_Common.py b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_EE_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..18f8ec115945bbe5f573db9a16655a2b9b5a022d --- /dev/null +++ b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_EE_Common.py @@ -0,0 +1,35 @@ +## Config for Py8 with NNPDF23 QED pdf + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet= LHAPDF6:NNPDF23_nnlo_as_0118_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "BeamRemnants:unresolvedHadron=3", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "SpaceShower:pTdampMatch = 1", + "BeamRemnants:primordialKThard = 0.1", + "BeamRemnants:primordialKTsoft=0.1", + "PartonLevel:MPI = off", + "PartonLevel:ISR = off", + "SpaceShower:pTmaxMatch = 1", + "SpaceShower:pTmaxFudge = 1.", + "TimeShower:pTmaxMatch = 1", + "TimeShower:pTmaxFudge = 1.", + "SpaceShower:MEcorrections = off", + "TimeShower:MEcorrections = off", + "TimeShower:globalRecoil = on", + "TimeShower:weightGluonToQuark = 1" , + "BeamRemnants:primordialKTremnant = 0.1" +] + +evgenConfig.tune = "NNPDF23_QED" + +#EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_SD_Common.py b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_SD_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..5e957017a5f9bca03245168074a947347e5e3f2e --- /dev/null +++ b/Generators/Pythia8_i/share/common/Py8_NNPDF23_NNLO_as118_QED_SD_Common.py @@ -0,0 +1,35 @@ +## Config for Py8 with NNPDF23 QED pdf + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet= LHAPDF6:NNPDF23_nnlo_as_0118_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "BeamRemnants:unresolvedHadron=1", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "SpaceShower:pTdampMatch = 1", + "BeamRemnants:primordialKThard = 0.1", + "BeamRemnants:primordialKTsoft=0.1", + "PartonLevel:MPI = off", + "PartonLevel:ISR = on", + "SpaceShower:pTmaxMatch = 1", + "SpaceShower:pTmaxFudge = 1.", + "TimeShower:pTmaxMatch = 1", + "TimeShower:pTmaxFudge = 1.", + "SpaceShower:MEcorrections = off", + "TimeShower:MEcorrections = off", + "TimeShower:globalRecoil = on", + "TimeShower:weightGluonToQuark = 1", + "BeamRemnants:primordialKTremnant = 0.1" +] + +evgenConfig.tune = "NNPDF23_QED" + +#EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14F2L_NNPDF23LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14F2L_NNPDF23LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..cfc15e7d2f39dbd8bde0a62ff99ccc11fb14ef13 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14F2L_NNPDF23LO_EvtGen_Common.py @@ -0,0 +1,6 @@ +## Config for Py8 tune A14 FSR 2-loop alpha_s evolution with NNPDF23LO + +## Baseline A14 tune with EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") + +genSeq.Pythia8.Commands += ["TimeShower:alphaSorder=2"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..803a9fdd3b314b880a80d011b7be56c4212f4d17 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_Common.py @@ -0,0 +1,36 @@ +## Config for Py8 tune A14 with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = cteq6ll", +# "PDF:pSet=LHAPDF6:cteq6l1", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.144", + "SpaceShower:pT0Ref = 1.30", + "SpaceShower:pTmaxFudge = 0.95", + "SpaceShower:pTdampFudge = 1.21", + "SpaceShower:alphaSvalue = 0.125", + "TimeShower:alphaSvalue = 0.126", + "BeamRemnants:primordialKThard = 1.72", + "MultipartonInteractions:pT0Ref = 1.98", + "MultipartonInteractions:alphaSvalue = 0.118", + "ColourReconnection:range = 2.08" ] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "A14 CTEQ6L1" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..3596b251bba8799e3476abd6ee7d6bc9a05d5242 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_CTEQ6L1_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with CTEQ6L1 +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_CTEQ6L1_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..2c4914c60227d2d32133d5c1570413507b3c56f8 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_Common.py @@ -0,0 +1,36 @@ +## Config for Py8 tune A14 with MSTW2008LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.62", + "SpaceShower:pTmaxFudge = 0.92", + "SpaceShower:pTdampFudge = 1.14", + "SpaceShower:alphaSvalue = 0.129", + "TimeShower:alphaSvalue = 0.129", + "BeamRemnants:primordialKThard = 1.82", + "MultipartonInteractions:pT0Ref = 2.22", + "MultipartonInteractions:alphaSvalue = 0.127"] +# "BeamRemnants:reconnectRange = 1.87"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = MSTW2008lo68cl", + "BeamRemnants:reconnectRange = 1.87" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range = 1.87"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range = 1.87"] + +evgenConfig.tune = "A14 MSTW2008LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..28f74bd4cce83ffd326da10771c9465a06ad028a --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_MSTW2008LO_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with MSTW2008LO +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_MSTW2008LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..af7fd5f3e4cb5d0ea1c3df98a542733b115c2452 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Common.py @@ -0,0 +1,41 @@ +## Config for Py8 tune A14 with NNPDF23LO +## This is the version without EvtGen, and as such is not the standard. +## The default version is available in common/Pythia8/Pythia8_A14_NNPDF23LO_EvtGen_Common.py + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +# todo - replace BeamRemnants with new ColourReconnection syntax once Pythia 8.201 is in place +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +include("Pythia8_i/Pythia8_RapidityOrderMPI.py") + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..3e0f9428c1181797aea77525d730051588b60c15 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_SSM_Zprime.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_SSM_Zprime.py new file mode 100644 index 0000000000000000000000000000000000000000..f98b6b78abc61a9ecbfb52d8a24589ddbbadc528 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_SSM_Zprime.py @@ -0,0 +1,21 @@ +# Zprime resonance mass (in GeV) + +splitConfig = runArgs.jobConfig[0].rstrip('.py').split('_') +ZprimeMass = splitConfig[4] + +include('Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py') + +genSeq.Pythia8.Commands += [ + "NewGaugeBoson:ffbar2gmZZprime = on", # create Z' bosons + "Zprime:gmZmode = 3", # Z',Z,g with interference: switch off gamma-Z-Z' interference + "32:m0 = "+str(ZprimeMass)] + + +# EVGEN configuration +evgenConfig.description = 'Pythia8 SSM Zprime: all decays' +evgenConfig.contact = ["Simone Amoroso <simone.amoroso@cern.ch>, Adam Jinaru <adam.jinaru@cern.ch>"] +evgenConfig.keywords = [ 'BSM', 'Zprime', 'heavyBoson', 'SSM', 'resonance', 'electroweak' ] +evgenConfig.generators += [ 'Pythia8' ] +evgenConfig.process = "pp>Zprime>inclusive" + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..ddb6a99f15e376bb418b0c5cc3e57cb4a72cfdf2 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_Common.py @@ -0,0 +1,41 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.121"] +# "BeamRemnants:reconnectRange = 1.69"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.69" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.69"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.69"] + +evgenConfig.tune = "A14 NNPDF23LO" + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..7d2e313a68e9d8d79f8fb956a67a600598cf5570 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Down_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var1 Down +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var1Down_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..e01ae16428f904fc265a02818b5dbd908666c3e2 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_Common.py @@ -0,0 +1,41 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.127", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.131"] +# "BeamRemnants:reconnectRange = 1.73"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.73" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.73"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.73"] + +evgenConfig.tune = "A14 NNPDF23LO" + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..029f074dd775a2a1470abf1d7bb6ff5508124e87 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var1Up_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var1 Up +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var1Up_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..b50228f5f58b62ac0f5a71f8225a053a7fe57b56 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.50", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.08", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.111", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..c3c47f1e48b39eeb67120118c15282617e98df06 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Down_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var2 Down +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var2Down_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..43590ed93bc23e793d32dc313a4a86eafa3196cf --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.60", + "SpaceShower:pTmaxFudge = 1.05", + "SpaceShower:pTdampFudge = 1.04", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.139", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..097a3150cc738b602251c888b0c59ee0a35f1e6c --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var2Up_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var2 Up +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var2Up_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..f158366de95b5f482c349919834fc32b51a9b21d --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.51", + "SpaceShower:pTmaxFudge = 0.88", + "SpaceShower:pTdampFudge = 0.93", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.124", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.127"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..d661ebdec0ce61502b01a47c1e8eb05644dfbc60 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aDown_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3a Down +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3aDown_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..1fada13049842bc6cdf321f5cacbd415150aff20 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.67", + "SpaceShower:pTmaxFudge = 0.98", + "SpaceShower:pTdampFudge = 1.36", + "SpaceShower:alphaSvalue = 0.127", + "TimeShower:alphaSvalue = 0.136", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.125"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..70a32db8648b43a21a2425d3ea98532fd9f598b0 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3aUp_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3a Up +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3aUp_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..67998324193d980ee403fc7ec2032acdd5a80dbe --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.83", + "SpaceShower:pTdampFudge = 1.07", + "SpaceShower:alphaSvalue = 0.126", + "TimeShower:alphaSvalue = 0.138", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..990704c9c3556eb7cb8c33c0b4003833546a8556 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bDown_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3b Down +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3bDown_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..5c60f814f41beb3cebde23b64b110f6cc6f05d7c --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 1.00", + "SpaceShower:pTdampFudge = 1.04", + "SpaceShower:alphaSvalue = 0.129", + "TimeShower:alphaSvalue = 0.114", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..3816dc98b93d595f949ecf271a1fa9529ee852a9 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3bUp_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3b Up +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3bUp_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..8c7fe05aced44ce99baa042b02b56fa4a5b382b6 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.115", + "TimeShower:alphaSvalue = 0.127", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..d770b3f529bcd635091cc51b705cd912309cb8b0 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cDown_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3c Down +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3cDown_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..c9619685a4a71394a9d812c08e8165d736bbd6b6 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune A14 with NNPDF23LO +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.UseLHAPDF=False + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "SpaceShower:rapidityOrder = on", + "SigmaProcess:alphaSvalue = 0.140", + "SpaceShower:pT0Ref = 1.56", + "SpaceShower:pTmaxFudge = 0.91", + "SpaceShower:pTdampFudge = 1.05", + "SpaceShower:alphaSvalue = 0.140", + "TimeShower:alphaSvalue = 0.127", + "BeamRemnants:primordialKThard = 1.88", + "MultipartonInteractions:pT0Ref = 2.09", + "MultipartonInteractions:alphaSvalue = 0.126"] +# "BeamRemnants:reconnectRange = 1.71"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.71" ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.71"] + +evgenConfig.tune = "A14 NNPDF23LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..9f5f266afef4260ac5a2d89ab170ceb10fc6c642 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_Var3cUp_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune A14 with NNPDF23LO Var3c Up +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A14_NNPDF23LO_Var3cUp_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_forMGHT_EvtGen.py b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_forMGHT_EvtGen.py new file mode 100644 index 0000000000000000000000000000000000000000..4bf970b7352e48287b5170b484b4ccc6fc8e5d78 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A14_NNPDF23LO_forMGHT_EvtGen.py @@ -0,0 +1,20 @@ +include("Pythia8_i/Pythia8_A14_NNPDF23LO_EvtGen_Common.py") +genSeq.Pythia8.Commands += ["SoftQCD:inelastic = on"] + +name = runArgs.jobConfig[0] +name_info = name.split("CKKW")[1].split("_for")[0].split("_JZ") +slice = int(name_info[1]) +ktdurham = int(name_info[0]) + +ptcut = 1.5*ktdurham + +minDict = {0:-1,1:20,2:ptcut} +maxDict = {0:20,1:ptcut,2:ptcut+100} + +if slice == 2: + genSeq.Pythia8.Commands += ["PhaseSpace:pTHatMin = 15."] + +# Leading jet pT filter +include("GeneratorFilters/JetFilterAkt4.py") +filtSeq.QCDTruthJetFilter.MinPt = minDict[slice]*GeV +filtSeq.QCDTruthJetFilter.MaxPt = maxDict[slice]*GeV diff --git a/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..f1f35fd7f6faa59d584b50fbe6f830eeea1f2f42 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_Common.py @@ -0,0 +1,37 @@ +## Config for Py8 tune A2 with MSTW2008LO +## This is the version without EvtGen, but the default is to use EvtGen +## The default version is in common/Pythia8/Pythia8_A2_MSTW2008LO_Common.py +## PDF syntax depending on Pythia8 version + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", + "MultipartonInteractions:bProfile = 4", + "MultipartonInteractions:a1 = 0.03", + "MultipartonInteractions:pT0Ref = 1.90", + "MultipartonInteractions:ecmPow = 0.30", +# "BeamRemnants:reconnectRange = 2.28", + "SpaceShower:rapidityOrder=0"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) +# ver = os.popen("acmake.py show_versions Generators/Pythia8_i").read() + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = MSTW2008lo68cl.LHgrid", + "BeamRemnants:reconnectRange = 2.28"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range=2.28"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range=2.28"] + +include("Pythia8_i/Pythia8_RapidityOrderMPI.py") + +evgenConfig.tune = "A2 MSTW2008LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..cfc74665af8c08817b0304df09e085bc37aa25bc --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A2_MSTW2008LO_EvtGen_Common.py @@ -0,0 +1,10 @@ +## Config for Py8 tune A2 with MSTW2008LO tune +## The default version of this includes EvtGen for standardised b fragmentation +## This tune is generally only used for pile up samples at the start of run 2 - for high pT physics at the start of run 2 the A14 tune is more appropriate. +## There are also more recent soft QCD tunes, such as Monash, but A2 was a conservative choice for initial 13 TeV pile up + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A2_MSTW2008LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_A3_ALT_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A3_ALT_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..e177ff274161b55d7ba58fd7fa30677ef7ba973f --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A3_ALT_NNPDF23LO_Common.py @@ -0,0 +1,42 @@ +## Config for Py8 tune A3 with NNPDF23LO +## This is the version without EvtGen, and as such is not the standard. +## The default version is available in common/Pythia8_i/Pythia8_A3_NNPDF23LO_EvtGen_Common.py + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "MultipartonInteractions:bProfile = 2", + "MultipartonInteractions:pT0Ref = 2.45", + "MultipartonInteractions:ecmPow = 0.21", + "MultipartonInteractions:coreRadius = 0.55", + "MultipartonInteractions:coreFraction = 0.9", + "SigmaDiffractive:PomFlux = 4", + "SigmaDiffractive:PomFluxEpsilon = 0.037", + "SigmaDiffractive:PomFluxAlphaPrime = 0.25"] +# "BeamRemnants:reconnectRange = 1.8"] + + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: +# todo - replace BeamRemnants with new ColourReconnection syntax once Pythia 8.201 is in place + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.8"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.8"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.8"] + +evgenConfig.tune = "A3 NNPDF23LO" +print ("WARNING! These parameters are derived tuning Pythia 8.186 to data") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..18d75006f43b9fcc88f49363985d71250aee3a04 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_Common.py @@ -0,0 +1,41 @@ +## Config for Py8 tune A3 with NNPDF23LO +## This is the version without EvtGen, and as such is not the standard. +## The default version is available in common/Pythia8/Pythia8_A3_NNPDF23LO_EvtGen_Common.py + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "MultipartonInteractions:bProfile = 2", + "MultipartonInteractions:pT0Ref = 2.45", + "MultipartonInteractions:ecmPow = 0.21", + "MultipartonInteractions:coreRadius = 0.55", + "MultipartonInteractions:coreFraction = 0.9", + "SigmaDiffractive:PomFlux = 4", + "SigmaDiffractive:PomFluxEpsilon = 0.07", + "SigmaDiffractive:PomFluxAlphaPrime = 0.25"] +# "BeamRemnants:reconnectRange = 1.8"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: +# todo - replace BeamRemnants with new ColourReconnection syntax once Pythia 8.201 is in place + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "BeamRemnants:reconnectRange = 1.8"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.8"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed", + "ColourReconnection:range = 1.8"] + +evgenConfig.tune = "A3 NNPDF23LO" +print ("WARNING! These parameters are derived tuning Pythia 8.186 to data") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..7b2f20865af880b0b78d886efe777c573180949d --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_A3_NNPDF23LO_EvtGen_Common.py @@ -0,0 +1,14 @@ +## Config for Py8 tune A3 with NNPDF23LO tune +## The default version of this includes EvtGen for standardised b hadronization +## This tune is generally only used for pile up samples in run 2 - for high pT physics at the start of run 2 the A14 tune is more appropriate. + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_A3_NNPDF23LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + +print ("WARNING! These parameters are derived tuning Pythia 8.186 to data") + + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..c7efd6a5ea7daa5e6c78c45da3a373aaf5df5aa4 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_Common.py @@ -0,0 +1,32 @@ +# Config for Py8 tune ATTBAR with NNPDF23LO +# if used for the standalone Pythia8 add the two following lines to enable the ISR damping: +# "SpaceShower:pTdampMatch = 1" +# "SpaceShower:pTdampFudge=1.18" +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:ee = 7", + "Tune:pp = 14", +# "PDF:useLHAPDF=on", +# "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed", + "TimeShower:alphaSvalue = 0.137", + "TimeShower:pTmin = 1.26", + "SpaceShower:alphaSvalue = 0.121", + "MultipartonInteractions:pT0Ref = 2.16"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if ('Pythia8-01' in ver[:50]) or ('Pythia8_i-00-11' in ver): + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed"] + +evgenConfig.tune = "ATTBAR NNPDF23LO" + diff --git a/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..d72f1985501ff261fbaf8197b281abb5f2487fb0 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_ATTBAR_NNPDF23LO_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune ATTBAR with NNPDF23LO +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_ATTBAR_NNPDF23LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..b7a9f71293c08f59d752a7da3343164d47c9a9e4 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_Common.py @@ -0,0 +1,36 @@ +## Config for Py8 tune A2 with CTEQ6L1 + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", +# "PDF:LHAPDFset = MSTW2008lo68cl.LHgrid", +# "PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "MultipartonInteractions:bProfile = 4", + "MultipartonInteractions:a1 = 0.01", + "MultipartonInteractions:pT0Ref = 1.87", + "MultipartonInteractions:ecmPow = 0.28", +# "BeamRemnants:reconnectRange = 5.32", + "SpaceShower:rapidityOrder=0"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = MSTW2008lo68cl.LHgrid", + "BeamRemnants:reconnectRange = 5.32"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range = 5.32"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:MSTW2008lo68cl", + "ColourReconnection:range = 5.32"] + +include("Pythia8_i/Pythia8_RapidityOrderMPI.py") + +evgenConfig.tune = "AU2 MSTW2008LO" diff --git a/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..366cec0207d76c9e3c336915534258dd00947ca2 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AU2_MSTW2008LO_EvtGen_Common.py @@ -0,0 +1,10 @@ +## Config for Py8 tune AU2 with MSTW2008LO +## The default version of this tune fragment include EvtGen for standardised b fragmentation +## but it is also non standard + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_AU2_MSTW2008LO_Common.py") + +# Add EvtGen for b fragmentation. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..7751f31d976ce53fc1ffe1ece773e673f696a674 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Common.py @@ -0,0 +1,33 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +## changed to Pythia8.2 standard for pdfs, for Pythia8.1 was PDF:LHAPDFset = cteq6ll.LHpdf +include("Pythia8_i/Pythia8_Base_Fragment.py") +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +evgenConfig.tune = "AZNLO CTEQ6L1" + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + + + +if "UserHooks" in genSeq.Pythia8.__slots__.keys(): + + genSeq.Pythia8.Commands += ['Powheg:NFinal = 1', + 'Powheg:pTHard = 0', + 'Powheg:pTdef = 2', + "PDF:pSet=LHAPDF6:cteq6l1"] +else: + + genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2'] + + genSeq.Pythia8.Commands += ["PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6l1"] + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..ed406d85f1262827965944f43da75c1e0aff4677 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_SM_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_SM_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..0ec0fb636979a0aee7d6078f26230bb4dc2d1a95 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_EvtGen_SM_Common.py @@ -0,0 +1,9 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_SM_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..2ac88048331e7e64c364041940e63669200d8d12 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 1.97" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..866f140924606cfaa05eff9e4afba10864fa7e9e --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIDown_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and MPI down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_MPIDown_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..8ca4063b1404256eef18d477a7ec1b1ae22d8090 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 2.05" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..7c91f84a081a6230054da4f1ba55a9af0fbe81c2 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_MPIUp_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and MPI scale up +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_MPIUp_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..230b2400698454085ded21e4a9b2302581fa0bc1 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 2.002887", + "TimeShower:renormMultFac = 0.5", + "TimeShower:factorMultFac = 0.5" +] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..b97e777b7e04fd9b9d47e0a61af8a0807a73fe4a --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenDown_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_RenDown_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..46be1787a9d0dd4077563829c7c60f7b7031d174 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_Common.py @@ -0,0 +1,40 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 2.002887", + "TimeShower:renormMultFac = 2.0", + "TimeShower:factorMultFac = 2.0" +] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..e9642f563970814de0819b122d0ba568cb6dc78a --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_RenUp_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_RenUp_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_SM_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_SM_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..783b058531279a768115ac60a01aad0a5c90de37 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_SM_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +## changed to Pythia8.2 standard for pdfs, for Pythia8.1 was PDF:LHAPDFset = cteq6ll.LHpdf +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", + "BeamRemnants:primordialKThard = 1.74948", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.923589", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +#this block may be needed for future reference +#genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', +# 'Main31:pTHard = 0', +# 'Main31:pTdef = 2' +# ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..01bfc5adf31f3c9fd87dcd817ea8b1a128d6cbb4 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.780", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.928", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..00ec6a1c203989120df003d733671a0e2714a17d --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Down_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_Var1Down_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..ad49f80e3313e889f7b994e5318277bb05ecad35 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.719", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.919", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..4686ab4a45c8a48ec3de560998f70bb8d48b89ea --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var1Up_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_Var1Up_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..1c3b0cddd56b7f137cb64a32bf72aabb972b0b90 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.737", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 2.004", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..e35325b4f77a97e5e021733e9fafbf8e978f43f6 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Down_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_Var2Down_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..52c5de3b3ac7b134f009d82ee07a5e70aced9c66 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_Common.py @@ -0,0 +1,38 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "Tune:pp = 5", +# "PDF:useLHAPDF = on", + "BeamRemnants:primordialKThard = 1.762", + "SpaceShower:alphaSorder = 2", + "SpaceShower:alphaSvalue = 0.118", + "SpaceShower:pT0Ref = 1.844", + "MultipartonInteractions:pT0Ref = 2.002887" + ] + +# Deal with cteq6l1/ll pdf naming in Pythia8 release +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHpdf" + ] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZNLO CTEQ6L1" + +# needs Pythia8 Main31 matching +include('Pythia8_i/Pythia8_Powheg_Main31.py') + +genSeq.Pythia8.UserModes += ['Main31:NFinal = 1', + 'Main31:pTHard = 0', + 'Main31:pTdef = 2' + ] diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..d7ca0909055d094ef5e47ff714e71955babc7a13 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZNLO_CTEQ6L1_Var2Up_EvtGen_Common.py @@ -0,0 +1,5 @@ +## Config for Py8 tune AZNLO with CTEQ6L1 with AZNLO tune and renormalization scale down +include("Pythia8_i/Pythia8_AZNLO_CTEQ6L1_Var2Up_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..9d1c54e482e2103dfc6e7f76377ed3f2095c405b --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_Common.py @@ -0,0 +1,30 @@ +## Config for Py8 tune AZ with CTEQ6L1 +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ +# "PDF:pSet=LHAPDF6:cteq6l1", + "BeamRemnants:primordialKThard = 1.713", + "SpaceShower:pT0Ref = 0.586", + "SpaceShower:alphaSvalue = 0.12374", + "MultipartonInteractions:pT0Ref = 2.18"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF = on", + "PDF:LHAPDFset = cteq6ll.LHgrid"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:cteq6l1"] + +evgenConfig.tune = "AZ CTEQ6L1" + + + + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..1835264ae8142fc26f4dfe50719c306eacb774c9 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_AZ_CTEQ6L1_EvtGen_Common.py @@ -0,0 +1,12 @@ +## Config for Py8 tune AZ with CTEQ6L1 +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_AZ_CTEQ6L1_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + + + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_BCVEGPY.py b/Generators/Pythia8_i/share/common/Pythia8_BCVEGPY.py new file mode 100644 index 0000000000000000000000000000000000000000..f6d6898ca3b48b2f9d3f07b83e7681c6f6522e2c --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_BCVEGPY.py @@ -0,0 +1,3 @@ +## Enable MadGraph LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators += ["BCVEGPY"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_Base_Fragment.py b/Generators/Pythia8_i/share/common/Pythia8_Base_Fragment.py new file mode 100644 index 0000000000000000000000000000000000000000..0d52a4b6b18e4d10ae80610aa05cbcd6ea34b974 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Base_Fragment.py @@ -0,0 +1,56 @@ +## Base config for Pythia8 +from Pythia8_i.Pythia8_iConf import Pythia8_i +genSeq += Pythia8_i("Pythia8") +evgenConfig.generators += ["Pythia8"] + +if evgenConfig.PDGparams: +## Load basic parameters + genSeq.Pythia8.Commands += [ + "Main:timesAllowErrors = 500", + "ParticleDecays:limitTau0 = on", + "ParticleDecays:tau0Max = 10.0"] + +## Load parameters by including parameter dictionary 'parameters' in 'offline_dict' + from EvgenProdTools.offline_dict import parameters + +## Particle masses and widths + particle_params = parameters.get("particles") + if particle_params: + for key, value in particle_params.items(): + ## Only the top quark, the leptons and the bosons are applied + if int(key) in range(6,26): + genSeq.Pythia8.Commands += [ + "{:d}:m0 = {}".format(int(key), value['mass']), + "{:d}:mWidth = {}".format(int(key), value['width']) + ] + else: + print ("Could not retrieve standard ATLAS particle parameters") + +## SM electroweak parameters + ew_params = parameters.get("EW_parameters") + if ew_params: + ## Only the parameters sin2thetaW and sin2thetaWbar are applied + for key,value in ew_params.items(): + if key[1] in ('sin2thetaW', 'sin2thetaWbar'): + genSeq.Pythia8.Commands += [ + 'StandardModel:{} = {}'.format(key[1], value) + ] + else: + print ("Could not retrieve standard ATLAS EW parameters") +else: +## Load basic parameters + genSeq.Pythia8.Commands += [ + "Main:timesAllowErrors = 500", + "6:m0 = 172.5", + "23:m0 = 91.1876", + "23:mWidth = 2.4952", + "24:m0 = 80.399", + "24:mWidth = 2.085", + "StandardModel:sin2thetaW = 0.23113", + "StandardModel:sin2thetaWbar = 0.23146", + "ParticleDecays:limitTau0 = on", + "ParticleDecays:tau0Max = 10.0"] +## Control storing LHE in the HepMC record +if "StoreLHE" in genSeq.Pythia8.__slots__.keys(): + print ("Pythia8_Base_Fragment.py: DISABLING storage of LHE record in HepMC by default. Please re-enable storage if desired") + genSeq.Pythia8.StoreLHE = False diff --git a/Generators/Pythia8_i/share/common/Pythia8_BcStates.py b/Generators/Pythia8_i/share/common/Pythia8_BcStates.py new file mode 100644 index 0000000000000000000000000000000000000000..4e641819bb2c43025070bee11d0e178460da7b63 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_BcStates.py @@ -0,0 +1,7 @@ +genSeq.Pythia8.Commands += ['541:m0 = 6.2749']# PDG 2018 +genSeq.Pythia8.Commands += ['541:tau0 = 1.5199e-01']# PDG 2018 +genSeq.Pythia8.Commands += ['543:m0 = 6.346'] # M(Bc)+71.1 MeV +genSeq.Pythia8.Commands += ['100541:all B_c(2S)+ B_c(2S)- 1 3 0 6.8423 0 0 0 0'] # M(Bc)+288.3+2m(pi+) +genSeq.Pythia8.Commands += ['100541:addChannel 1 1.0 0 541 211 -211'] +genSeq.Pythia8.Commands += ['100543:all B*_c(2S)+ B*_c(2S)- 3 3 0 6.873 0 0 0 0'] # M(Bc2S)+30.7 MeV +genSeq.Pythia8.Commands += ['100543:addChannel 1 1.0 0 100541 22'] diff --git a/Generators/Pythia8_i/share/common/Pythia8_CKKWL_kTMerge.py b/Generators/Pythia8_i/share/common/Pythia8_CKKWL_kTMerge.py new file mode 100644 index 0000000000000000000000000000000000000000..f06491c8d2857a245a350abb1f97e79bbd3b8518 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_CKKWL_kTMerge.py @@ -0,0 +1,43 @@ +try: + PYTHIA8_nJetMax +except RuntimeError: + raise RuntimeError("Variable \"PYTHIA8_nJetMax\" is not defined, this is needed to configure Pythia8 CKKW-L kT merging settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_nJetMax = %i" % PYTHIA8_nJetMax) + +try: + PYTHIA8_Process +except RuntimeError: + raise RuntimeError("Variable \"PYTHIA8_Process\" is not defined, this is needed to configure Pythia8 CKKW-L kT merging settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_Process = %s" % PYTHIA8_Process) + +try: + PYTHIA8_TMS +except RuntimeError: + raise RuntimeError("Variable \"TMS\" is not defined, this is needed to configure Pythia8 CKKW-L kT merging settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_TMS = %f" % PYTHIA8_TMS) + +try: + PYTHIA8_Dparameter +except RuntimeError: + raise RuntimeError("Variable \"Dparameter\" is not defined, this is needed to configure Pythia8 CKKW-L kT merging settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_Dparameter = %f" % PYTHIA8_Dparameter) + +try: + PYTHIA8_nQuarksMerge +except RuntimeError: + raise RuntimeError("Variable \"PYTHIA8_nQuarksMerge\" is not defined, this is needed to configure Pythia8 CKKW-L kT merging settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_nQuarksMerge = %i" % PYTHIA8_nQuarksMerge) + +genSeq.Pythia8.Commands += ["Merging:doKTMerging = on", + "Merging:ktType = 1", + "Merging:nJetMax = %i" % PYTHIA8_nJetMax, + "Merging:Process = %s" % PYTHIA8_Process, + "Merging:TMS = %f" % PYTHIA8_TMS, + "Merging:Dparameter = %f" % PYTHIA8_Dparameter, + "Merging:nQuarksMerge = %i" % PYTHIA8_nQuarksMerge] + diff --git a/Generators/Pythia8_i/share/common/Pythia8_CalcHep.py b/Generators/Pythia8_i/share/common/Pythia8_CalcHep.py new file mode 100644 index 0000000000000000000000000000000000000000..86e70f4542ed744511631768338600db3c7e9734 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_CalcHep.py @@ -0,0 +1,3 @@ +## Enable CalcHep LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators += ["CalcHep", "Pythia8"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_CompHep.py b/Generators/Pythia8_i/share/common/Pythia8_CompHep.py new file mode 100644 index 0000000000000000000000000000000000000000..0c06966ab77eb6fdc7d13bff9c8c39f6732a2d8a --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_CompHep.py @@ -0,0 +1,3 @@ +## Enable CompHep LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators = ["CompHep", "Pythia8"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_EvtGen.py b/Generators/Pythia8_i/share/common/Pythia8_EvtGen.py new file mode 100644 index 0000000000000000000000000000000000000000..91b2fbfe78ce43ba5ffbae7685f244a320394404 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_EvtGen.py @@ -0,0 +1,11 @@ +## Run EvtGen afterburner on top of Pythia 8 +assert hasattr(genSeq, "Pythia8") +include("EvtGen_i/EvtGen_Fragment.py") +evgenConfig.auxfiles += ['inclusiveP8DsDPlus.pdt'] +#genSeq.EvtInclusiveDecay.pdtFile = "inclusiveP8.pdt" +genSeq.EvtInclusiveDecay.pdtFile = "inclusiveP8DsDPlus.pdt" + +# FHerwig has problems with omega b* (5334), so not present in the base EvtGen fragment. Add it here. +genSeq.EvtInclusiveDecay.whiteList+=[-5334, 5334] + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_FxFx.py b/Generators/Pythia8_i/share/common/Pythia8_FxFx.py new file mode 100644 index 0000000000000000000000000000000000000000..9d72647c641b19a088176a5a72332f4fe5becc24 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_FxFx.py @@ -0,0 +1,34 @@ + +try: + PYTHIA8_nJetMax +except RuntimeError: + raise RuntimeError("Variable \"PYTHIA8_nJetMax\" is not defined, this is needed to configure Pythia8 FxFx matching settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_nJetMax = %i"%PYTHIA8_nJetMax) + + +try: + PYTHIA8_qCut +except RuntimeError: + raise RuntimeError("Variable \"PYTHIA8_qCut\" is not defined, this is needed to configure Pythia8 FxFx matching settings. Please define it in your jobOptions") +else: + print ("PYTHIA8_qCut = %i"%PYTHIA8_qCut) + + + +genSeq.Pythia8.Commands += ["JetMatching:merge = on", + "JetMatching:scheme = 1", + "JetMatching:setMad = off", + "JetMatching:qCut = %f"%PYTHIA8_qCut, + "JetMatching:coneRadius = 1.0", + "JetMatching:etaJetMax = 10.0", + "JetMatching:doFxFx = on", + "JetMatching:qCutME = 8.0", + "JetMatching:nJetMax = %i"%PYTHIA8_nJetMax ] + + + +genSeq.Pythia8.UserHooks += [ 'JetMatchingMadgraph'] +genSeq.Pythia8.FxFxXS = True + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_LHEF.py b/Generators/Pythia8_i/share/common/Pythia8_LHEF.py new file mode 100644 index 0000000000000000000000000000000000000000..f4d52763fe84d9d58f4ac23cace5489bc70d91ef --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_LHEF.py @@ -0,0 +1,8 @@ +## Configure Pythia8 to read input events from an LHEF file +hasInput = hasattr(runArgs,"inputGeneratorFile") +if hasInput: + include ('EvgenProdTools/mult_lhe_input.py') +assert hasattr(genSeq, "Pythia8") +#genSeq.Pythia8.LHEFile = runArgs.inputGeneratorFile +genSeq.Pythia8.LHEFile = "events.lhe" +genSeq.Pythia8.CollisionEnergy = int(runArgs.ecmEnergy) diff --git a/Generators/Pythia8_i/share/common/Pythia8_MadGraph.py b/Generators/Pythia8_i/share/common/Pythia8_MadGraph.py new file mode 100644 index 0000000000000000000000000000000000000000..f95c19b72341d5406a1fe16bfd69407e55bd0a08 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_MadGraph.py @@ -0,0 +1,3 @@ +## Enable MadGraph LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators += ["MadGraph"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_MonashStar_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_MonashStar_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..c1d79a8211040124a8875e425f6829d75f38bd10 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_MonashStar_NNPDF23LO_Common.py @@ -0,0 +1,23 @@ +## Config for Py8 MonashStar tune (aka CUETP8M1-NNPDF2.3LO aka CMS tune) +## This is not a default recommended tune but is being used for validation studies +## and tune comparisons + +include("Pythia8_i/Pythia8_Base_Fragment.py") +genSeq.Pythia8.Commands += ["Tune:ee = 7", + "Tune:pp = 18"] + +rel = os.popen("echo $AtlasVersion").read() +print ("Atlas release " + rel) + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += ["PDF:useLHAPDF = on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet=LHAPDF6:NNPDF23_lo_as_0130_qed"] + +evgenConfig.tune = "MonashStar" diff --git a/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_Common.py b/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..e52c1a4f885cc6ef41e7786ed5b27bb5c9f558be --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_Common.py @@ -0,0 +1,23 @@ +## Config for Py8 Monash tune +## This is not the default recommended tune, but forms the base for A14 +## In principle it could be set with Tune:pp=14, but there are some problems with PDFs + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet = LHAPDF6:NNPDF23_lo_as_0130_qed"] + +rel = os.popen("echo $AtlasVersion").read() + +if rel[:2].isdigit() and int(rel[:2])<20: + ver = os.popen("cmt show versions External/Pythia8").read() + print ("Pythia8 version: " + ver) + if 'Pythia8-01' in ver[:50]: + genSeq.Pythia8.Commands += [ + "PDF:useLHAPDF=on", + "PDF:LHAPDFset = NNPDF23_lo_as_0130_qed"] + else: + genSeq.Pythia8.Commands += ["PDF:pSet = LHAPDF6:NNPDF23_lo_as_0130_qed"] +else: + genSeq.Pythia8.Commands += ["PDF:pSet = LHAPDF6:NNPDF23_lo_as_0130_qed"] +evgenConfig.tune = "Monash" diff --git a/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_EvtGen_Common.py b/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_EvtGen_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..a75708dc8595e4ecccbbfef5736440232de0e142 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Monash_NNPDF23LO_EvtGen_Common.py @@ -0,0 +1,8 @@ +## Config for Py8 Monash tune with NNPDF23LO +## The default version of this tune fragment include EvtGen for standardised b fragmentation + +# Reference the non-standard version without EvtGen +include("Pythia8_i/Pythia8_Monash_NNPDF23LO_Common.py") + +# Add EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_NNPDF23_NNLO_as118_QED_Common.py b/Generators/Pythia8_i/share/common/Pythia8_NNPDF23_NNLO_as118_QED_Common.py new file mode 100644 index 0000000000000000000000000000000000000000..6885be7ab5c7a669aa213c66fd1c66eb58c4766f --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_NNPDF23_NNLO_as118_QED_Common.py @@ -0,0 +1,13 @@ +## Config for Py8 with NNPDF23 QED pdf + +include("Pythia8_i/Pythia8_Base_Fragment.py") + +genSeq.Pythia8.Commands += [ + "PDF:pSet= LHAPDF6:NNPDF23_nnlo_as_0118_qed" +] + +evgenConfig.tune = "NNPDF23_QED" + +#EvtGen for b fragmentation as default. No EvtGen is available in "nonStandard" +include("Pythia8_i/Pythia8_EvtGen.py") + diff --git a/Generators/Pythia8_i/share/common/Pythia8_Photospp.py b/Generators/Pythia8_i/share/common/Pythia8_Photospp.py new file mode 100644 index 0000000000000000000000000000000000000000..ca1d1463d922b1fb60a235ab7c6ff7fbd8e00b3c --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Photospp.py @@ -0,0 +1,16 @@ +## Photos++ QED config for Pythia8 + +## Disable native QED FSR +assert hasattr(genSeq, "Pythia8") +genSeq.Pythia8.Commands += ["TimeShower:QEDshowerByL = off"] + +if "PYTHIA8VER" in os.environ: + verph8str = str(os.environ['PYTHIA8VER'])[:3] + verph8 = int(verph8str) + print("verph8 ", verph8) + if (verph8 > 218): + print ("time shower cut active") + genSeq.Pythia8.Commands += ["TimeShower:QEDshowerByOther = off"] + +## Enable Photos++ +include("Photospp_i/Photospp_Fragment.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_Powheg.py b/Generators/Pythia8_i/share/common/Pythia8_Powheg.py new file mode 100644 index 0000000000000000000000000000000000000000..06a3a5117ebe434d67128b8e520a84a466658bad --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Powheg.py @@ -0,0 +1,3 @@ +## Enable POWHEG LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators += ["Powheg"] diff --git a/Generators/Pythia8_i/share/common/Pythia8_Powheg_Main31.py b/Generators/Pythia8_i/share/common/Pythia8_Powheg_Main31.py new file mode 100644 index 0000000000000000000000000000000000000000..001af9e49043a8338900255c255604f0dc40d42b --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_Powheg_Main31.py @@ -0,0 +1,13 @@ +## Configure Pythia 8 to shower PoWHEG input using Main31 shower veto +include("Pythia8_i/Pythia8_Powheg.py") +genSeq.Pythia8.Commands += [ 'SpaceShower:pTmaxMatch = 2', + 'TimeShower:pTmaxMatch = 2' ] + +if "UserHooks" in genSeq.Pythia8.__slots__.keys(): + genSeq.Pythia8.UserHooks += ['PowhegMain31'] + genSeq.Pythia8.Commands += ['Powheg:veto = 1'] +else: + genSeq.Pythia8.UserHook = 'Main31' + + +include("Pythia8_i/Pythia8_ShowerWeights.py") diff --git a/Generators/Pythia8_i/share/common/Pythia8_RapidityOrderMPI.py b/Generators/Pythia8_i/share/common/Pythia8_RapidityOrderMPI.py new file mode 100644 index 0000000000000000000000000000000000000000..86d7b3664fe2ee558b1f9b019e0ac9248ee48537 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_RapidityOrderMPI.py @@ -0,0 +1,48 @@ +## this fragment makes sure that the MPI rapidity order is set consistently for Pythia versions 8.219 and later +## Since it depends on the tune settings it must be included *after* the main tune fragment in the JO + +addRapidityOrderMPI = True +rapidityOrderMPICommand = [] + +for cmd in genSeq.Pythia8.Commands: + + if "SpaceShower:rapidityOrderMPI = " in cmd: + addRapidityOrderMPI = False + + if "SpaceShower:rapidityOrder" in cmd and "SpaceShower:rapidityOrderMPI" not in cmd and addRapidityOrderMPI: + + val = cmd.split("=")[-1] + +# rel = os.popen("echo $AtlasVersion").read() +# if rel[:2].isdigit() and int(rel[:2])<=20 : + cmak_sys = os.getenv('CMAKE_PREFIX_PATH') + if not cmak_sys: + verstr = os.popen("cmt show versions External/Pythia8").read() + + start=1 + versions=[] + while start > 0: + start = verstr.find("Pythia8-", start + 1) + if start < 0: + break + versions.append(verstr[start+8: start+16]) + + versions.sort() + series = versions[-1][0:2] + majorStr = versions[-1][3:5] + + else: + print(" running in cmake system") + verstr = os.popen("acmake.py show_versions Pythia8_i").read() + majorStr=0 + ver1=verstr[-6:-4] + ver2=verstr[-9:-7] + if ver1 == 12 and ver2==8: + majorStr=19 + series="02" + + if int(majorStr) >= 19 and series != "01" : + rapidityOrderMPICommand = ["SpaceShower:rapidityOrderMPI = " + val] + +if addRapidityOrderMPI and len(rapidityOrderMPICommand) != 0: + genSeq.Pythia8.Commands += rapidityOrderMPICommand diff --git a/Generators/Pythia8_i/share/common/Pythia8_ShowerWeights.py b/Generators/Pythia8_i/share/common/Pythia8_ShowerWeights.py new file mode 100644 index 0000000000000000000000000000000000000000..cf4aaa4acaf5d75b972e7329381f594a613ed2ca --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_ShowerWeights.py @@ -0,0 +1,143 @@ +# Warnings: +# UserHooks Warning: the calculation of uncertainty variations will only be consistent in the absence of any external modifications to the shower branching probabilities via the UserHooks framework. It is therefore strongly advised to avoid combining the automated uncertainty calculations with any such UserHooks modifications. +# +#Merging Warning: in multi-jet merging approaches, trial showers are used to generate missing Sudakov factor corrections to the hard matrix elements. Currently that framework is not consistently combined with the variations introduced here, so the two should not be used simultaneously. This means shower weights should NOT be used with CKKLW or FxFx merging! +# +# +# Pythia8 shower weights are only available in release 2.26 and later. The +# test below checks the Pythia8 release and also verifies that the Pythia_i +# tag is recent enought to store the shower weights. + +if "PYTHIA8VER" in os.environ: + verph8str = str(os.environ['PYTHIA8VER'])[:3] + verph8 = int(verph8str) + print("verph8 ", verph8) +else: + print("PYTHIA8VER not available !!! assuming version 2.44") + verph8 = 244 + +if (verph8 >= 226): + if "ShowerWeightNames" in genSeq.Pythia8.__slots__.keys(): + print ("Initalizing Shower Weights from Pythia8_ShowerWeights.py") + if("NNPDF" in evgenConfig.tune): + genSeq.Pythia8.Commands += [ + 'UncertaintyBands:doVariations = on', + 'UncertaintyBands:List = {\ + Var3cUp isr:muRfac=0.549241,\ + Var3cDown isr:muRfac=1.960832,\ + isr:muRfac=2.0_fsr:muRfac=2.0 isr:muRfac=2.0 fsr:muRfac=2.0,\ + isr:muRfac=2.0_fsr:muRfac=1.0 isr:muRfac=2.0 fsr:muRfac=1.0,\ + isr:muRfac=2.0_fsr:muRfac=0.5 isr:muRfac=2.0 fsr:muRfac=0.5,\ + isr:muRfac=1.0_fsr:muRfac=2.0 isr:muRfac=1.0 fsr:muRfac=2.0,\ + isr:muRfac=1.0_fsr:muRfac=0.5 isr:muRfac=1.0 fsr:muRfac=0.5,\ + isr:muRfac=0.5_fsr:muRfac=2.0 isr:muRfac=0.5 fsr:muRfac=2.0,\ + isr:muRfac=0.5_fsr:muRfac=1.0 isr:muRfac=0.5 fsr:muRfac=1.0,\ + isr:muRfac=0.5_fsr:muRfac=0.5 isr:muRfac=0.5 fsr:muRfac=0.5,\ + isr:muRfac=1.75_fsr:muRfac=1.0 isr:muRfac=1.75 fsr:muRfac=1.0,\ + isr:muRfac=1.5_fsr:muRfac=1.0 isr:muRfac=1.5 fsr:muRfac=1.0,\ + isr:muRfac=1.25_fsr:muRfac=1.0 isr:muRfac=1.25 fsr:muRfac=1.0,\ + isr:muRfac=0.625_fsr:muRfac=1.0 isr:muRfac=0.625 fsr:muRfac=1.0,\ + isr:muRfac=0.75_fsr:muRfac=1.0 isr:muRfac=0.75 fsr:muRfac=1.0,\ + isr:muRfac=0.875_fsr:muRfac=1.0 isr:muRfac=0.875 fsr:muRfac=1.0,\ + isr:muRfac=1.0_fsr:muRfac=1.75 isr:muRfac=1.0 fsr:muRfac=1.75,\ + isr:muRfac=1.0_fsr:muRfac=1.5 isr:muRfac=1.0 fsr:muRfac=1.5,\ + isr:muRfac=1.0_fsr:muRfac=1.25 isr:muRfac=1.0 fsr:muRfac=1.25,\ + isr:muRfac=1.0_fsr:muRfac=0.625 isr:muRfac=1.0 fsr:muRfac=0.625,\ + isr:muRfac=1.0_fsr:muRfac=0.75 isr:muRfac=1.0 fsr:muRfac=0.75,\ + isr:muRfac=1.0_fsr:muRfac=0.875 isr:muRfac=1.0 fsr:muRfac=0.875,\ + hardHi fsr:cNS=2.0 isr:cNS=2.0,\ + hardLo fsr:cNS=-2.0 isr:cNS=-2.0,\ + isr:PDF:plus isr:PDF:plus=1,\ + isr:PDF:minus isr:PDF:minus=2\ + }'] + + genSeq.Pythia8.ShowerWeightNames = [ + "Var3cUp", + "Var3cDown", + "isr:muRfac=2.0_fsr:muRfac=2.0", + "isr:muRfac=2.0_fsr:muRfac=1.0", + "isr:muRfac=2.0_fsr:muRfac=0.5", + "isr:muRfac=1.0_fsr:muRfac=2.0", + "isr:muRfac=1.0_fsr:muRfac=0.5", + "isr:muRfac=0.5_fsr:muRfac=2.0", + "isr:muRfac=0.5_fsr:muRfac=1.0", + "isr:muRfac=0.5_fsr:muRfac=0.5", + "isr:muRfac=1.75_fsr:muRfac=1.0", + "isr:muRfac=1.5_fsr:muRfac=1.0", + "isr:muRfac=1.25_fsr:muRfac=1.0", + "isr:muRfac=0.625_fsr:muRfac=1.0", + "isr:muRfac=0.75_fsr:muRfac=1.0", + "isr:muRfac=0.875_fsr:muRfac=1.0", + "isr:muRfac=1.0_fsr:muRfac=1.75", + "isr:muRfac=1.0_fsr:muRfac=1.5", + "isr:muRfac=1.0_fsr:muRfac=1.25", + "isr:muRfac=1.0_fsr:muRfac=0.625", + "isr:muRfac=1.0_fsr:muRfac=0.75", + "isr:muRfac=1.0_fsr:muRfac=0.875", + "hardHi", + "hardLo", + "isr:PDF:plus", + "isr:PDF:minus" + ] + else: + genSeq.Pythia8.Commands += [ + 'UncertaintyBands:doVariations = on', + 'UncertaintyBands:List = {\ + Var3cUp isr:muRfac=0.549241,\ + Var3cDown isr:muRfac=1.960832,\ + isr:muRfac=2.0_fsr:muRfac=2.0 isr:muRfac=2.0 fsr:muRfac=2.0,\ + isr:muRfac=2.0_fsr:muRfac=1.0 isr:muRfac=2.0 fsr:muRfac=1.0,\ + isr:muRfac=2.0_fsr:muRfac=0.5 isr:muRfac=2.0 fsr:muRfac=0.5,\ + isr:muRfac=1.0_fsr:muRfac=2.0 isr:muRfac=1.0 fsr:muRfac=2.0,\ + isr:muRfac=1.0_fsr:muRfac=0.5 isr:muRfac=1.0 fsr:muRfac=0.5,\ + isr:muRfac=0.5_fsr:muRfac=2.0 isr:muRfac=0.5 fsr:muRfac=2.0,\ + isr:muRfac=0.5_fsr:muRfac=1.0 isr:muRfac=0.5 fsr:muRfac=1.0,\ + isr:muRfac=0.5_fsr:muRfac=0.5 isr:muRfac=0.5 fsr:muRfac=0.5,\ + isr:muRfac=1.75_fsr:muRfac=1.0 isr:muRfac=1.75 fsr:muRfac=1.0,\ + isr:muRfac=1.5_fsr:muRfac=1.0 isr:muRfac=1.5 fsr:muRfac=1.0,\ + isr:muRfac=1.25_fsr:muRfac=1.0 isr:muRfac=1.25 fsr:muRfac=1.0,\ + isr:muRfac=0.625_fsr:muRfac=1.0 isr:muRfac=0.625 fsr:muRfac=1.0,\ + isr:muRfac=0.75_fsr:muRfac=1.0 isr:muRfac=0.75 fsr:muRfac=1.0,\ + isr:muRfac=0.875_fsr:muRfac=1.0 isr:muRfac=0.875 fsr:muRfac=1.0,\ + isr:muRfac=1.0_fsr:muRfac=1.75 isr:muRfac=1.0 fsr:muRfac=1.75,\ + isr:muRfac=1.0_fsr:muRfac=1.5 isr:muRfac=1.0 fsr:muRfac=1.5,\ + isr:muRfac=1.0_fsr:muRfac=1.25 isr:muRfac=1.0 fsr:muRfac=1.25,\ + isr:muRfac=1.0_fsr:muRfac=0.625 isr:muRfac=1.0 fsr:muRfac=0.625,\ + isr:muRfac=1.0_fsr:muRfac=0.75 isr:muRfac=1.0 fsr:muRfac=0.75,\ + isr:muRfac=1.0_fsr:muRfac=0.875 isr:muRfac=1.0 fsr:muRfac=0.875,\ + hardHi fsr:cNS=2.0 isr:cNS=2.0,\ + hardLo fsr:cNS=-2.0 isr:cNS=-2.0\ + }'] + + genSeq.Pythia8.ShowerWeightNames = [ + "Var3cUp", + "Var3cDown", + "isr:muRfac=2.0_fsr:muRfac=2.0", + "isr:muRfac=2.0_fsr:muRfac=1.0", + "isr:muRfac=2.0_fsr:muRfac=0.5", + "isr:muRfac=1.0_fsr:muRfac=2.0", + "isr:muRfac=1.0_fsr:muRfac=0.5", + "isr:muRfac=0.5_fsr:muRfac=2.0", + "isr:muRfac=0.5_fsr:muRfac=1.0", + "isr:muRfac=0.5_fsr:muRfac=0.5", + "isr:muRfac=1.75_fsr:muRfac=1.0", + "isr:muRfac=1.5_fsr:muRfac=1.0", + "isr:muRfac=1.25_fsr:muRfac=1.0", + "isr:muRfac=0.625_fsr:muRfac=1.0", + "isr:muRfac=0.75_fsr:muRfac=1.0", + "isr:muRfac=0.875_fsr:muRfac=1.0", + "isr:muRfac=1.0_fsr:muRfac=1.75", + "isr:muRfac=1.0_fsr:muRfac=1.5", + "isr:muRfac=1.0_fsr:muRfac=1.25", + "isr:muRfac=1.0_fsr:muRfac=0.625", + "isr:muRfac=1.0_fsr:muRfac=0.75", + "isr:muRfac=1.0_fsr:muRfac=0.875", + "hardHi", + "hardLo" + ] + else: + print ("Pythia8_i version too old for shower weights") +else: + print ("No shower weights since not supported in Pythia8.",verph8) + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_TauolaPP.py b/Generators/Pythia8_i/share/common/Pythia8_TauolaPP.py new file mode 100644 index 0000000000000000000000000000000000000000..c6d46220a1d86895ee94112ffae253104c89aac3 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_TauolaPP.py @@ -0,0 +1,10 @@ +## TAUOLA config for PYTHIA + +## Disable native tau decays +assert hasattr(genSeq, "Pythia8") +genSeq.Pythia8.Commands += ["15:onMode = off"] + +## Enable TAUOLA +include("Tauolapp_i/TauolaPP_Fragment.py") + + diff --git a/Generators/Pythia8_i/share/common/Pythia8_aMcAtNlo.py b/Generators/Pythia8_i/share/common/Pythia8_aMcAtNlo.py new file mode 100644 index 0000000000000000000000000000000000000000..5e58c0e4209ae704c655694a972f9362d1359cd8 --- /dev/null +++ b/Generators/Pythia8_i/share/common/Pythia8_aMcAtNlo.py @@ -0,0 +1,18 @@ +## Enable MG5_aMC@NLO LHEF reading in Pythia8 +include("Pythia8_i/Pythia8_LHEF.py") +evgenConfig.generators += ["aMcAtNlo"] + +#aMC@NLO default Pythia8 settings from http://amcatnlo.web.cern.ch/amcatnlo/list_detailed2.htm#showersettings +genSeq.Pythia8.Commands += ["SpaceShower:pTmaxMatch = 1", + "SpaceShower:pTmaxFudge = 1", + "SpaceShower:MEcorrections = off", + "TimeShower:pTmaxMatch = 1", + "TimeShower:pTmaxFudge = 1", + "TimeShower:MEcorrections = off", + "TimeShower:globalRecoil = on", + "TimeShower:limitPTmaxGlobal = on", + "TimeShower:nMaxGlobalRecoil = 1", + "TimeShower:globalRecoilMode = 2", + "TimeShower:nMaxGlobalBranch = 1.", + "TimeShower:weightGluonToQuark=1.", + "Check:epTolErr = 1e-2" ] diff --git a/Generators/Pythia8_i/share/Powheg.ZMu.MC11.events b/Generators/Pythia8_i/share/example/Powheg.ZMu.MC11.events similarity index 100% rename from Generators/Pythia8_i/share/Powheg.ZMu.MC11.events rename to Generators/Pythia8_i/share/example/Powheg.ZMu.MC11.events diff --git a/Generators/Pythia8_i/share/enhanceMPI_example.py b/Generators/Pythia8_i/share/example/enhanceMPI_example.py similarity index 100% rename from Generators/Pythia8_i/share/enhanceMPI_example.py rename to Generators/Pythia8_i/share/example/enhanceMPI_example.py diff --git a/Generators/Pythia8_i/share/jobOptions.pythia8.py b/Generators/Pythia8_i/share/example/jobOptions.pythia8.py similarity index 100% rename from Generators/Pythia8_i/share/jobOptions.pythia8.py rename to Generators/Pythia8_i/share/example/jobOptions.pythia8.py diff --git a/Generators/Pythia8_i/share/lhef_example.py b/Generators/Pythia8_i/share/example/lhef_example.py similarity index 100% rename from Generators/Pythia8_i/share/lhef_example.py rename to Generators/Pythia8_i/share/example/lhef_example.py diff --git a/Generators/Pythia8_i/share/qcdVetoedShowerExample.py b/Generators/Pythia8_i/share/example/qcdVetoedShowerExample.py similarity index 100% rename from Generators/Pythia8_i/share/qcdVetoedShowerExample.py rename to Generators/Pythia8_i/share/example/qcdVetoedShowerExample.py diff --git a/Generators/Pythia8_i/share/suppressMPI_example.py b/Generators/Pythia8_i/share/example/suppressMPI_example.py similarity index 100% rename from Generators/Pythia8_i/share/suppressMPI_example.py rename to Generators/Pythia8_i/share/example/suppressMPI_example.py diff --git a/Generators/Pythia8_i/share/userProcess_example.py b/Generators/Pythia8_i/share/example/userProcess_example.py similarity index 100% rename from Generators/Pythia8_i/share/userProcess_example.py rename to Generators/Pythia8_i/share/example/userProcess_example.py diff --git a/Generators/Pythia8_i/share/vetoedISR_example.py b/Generators/Pythia8_i/share/example/vetoedISR_example.py similarity index 100% rename from Generators/Pythia8_i/share/vetoedISR_example.py rename to Generators/Pythia8_i/share/example/vetoedISR_example.py diff --git a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx index 1751b8d153361b1031f01df010aea72013bba332..c619cb671b528f585a3966e9fe7a37674ca396d8 100644 --- a/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx +++ b/HLT/Trigger/TrigControl/TrigServices/src/HltEventLoopMgr.cxx @@ -834,16 +834,6 @@ StatusCode HltEventLoopMgr::updateMagField(const ptree& pt) const auto tor_cur = pt.get<float>("Magnets.ToroidsCurrent.value"); auto sol_cur = pt.get<float>("Magnets.SolenoidCurrent.value"); - // Set currents on service (deprecated: ATLASRECTS-4687) - IProperty* fieldSvc{nullptr}; - service("AtlasFieldSvc", fieldSvc, /*createIf=*/false).ignore(); - if ( fieldSvc ) { - ATH_MSG_INFO("Setting field currents on AtlasFieldSvc"); - ATH_CHECK( Gaudi::Utils::setProperty(fieldSvc, "UseSoleCurrent", sol_cur) ); - ATH_CHECK( Gaudi::Utils::setProperty(fieldSvc, "UseToroCurrent", tor_cur) ); - } - else ATH_MSG_WARNING("Cannot retrieve AtlasFieldSvc"); - // Set current on conditions alg const IAlgManager* algMgr = Gaudi::svcLocator()->as<IAlgManager>(); IAlgorithm* fieldAlg{nullptr}; diff --git a/InnerDetector/InDetConditions/InDetCoolCoralClientUtils/src/TRT_COOLCORALClient.cpp b/InnerDetector/InDetConditions/InDetCoolCoralClientUtils/src/TRT_COOLCORALClient.cpp index 28dbac97546e6ca313c7c735765c5b96df3205ed..3e49e48623fb50e4817530205762fb29407e2f6f 100644 --- a/InnerDetector/InDetConditions/InDetCoolCoralClientUtils/src/TRT_COOLCORALClient.cpp +++ b/InnerDetector/InDetConditions/InDetCoolCoralClientUtils/src/TRT_COOLCORALClient.cpp @@ -503,7 +503,7 @@ void TRT_COOLCORALClient::GetHVLineFromPad( const DetectorType& detector, std::map<float,std::string>::iterator PadMap_iter; - for (PadMap_iter=PadMap.begin(); PadMap_iter != PadMap.end(); PadMap_iter++) + for (PadMap_iter=PadMap.begin(); PadMap_iter != PadMap.end(); ++PadMap_iter) { std::string theString = (*PadMap_iter).second; int bg = theString.find_first_of("d"); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/AnalysisResultList_t.hh b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/AnalysisResultList_t.hh index 699085e27d6ae943be3d9c7998d3158bbb334c00..6e6b7fde0cdceab2534dd421a83371e9910bc1ed 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/AnalysisResultList_t.hh +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/AnalysisResultList_t.hh @@ -84,7 +84,7 @@ namespace CAN { template <class T> const std::map<std::string, std::map<std::string, T> > &getMap() const; - void throwValueDoesNotExist(const std::string &var_name, const std::string conn_name) const { + void throwValueDoesNotExist(const std::string &var_name, const std::string& conn_name) const { std::stringstream message; message << "No value of name " << var_name << " for connectivity object " << conn_name << "."; throw AnalysisResultValueNotFound("AnalysisResultList_t::value<T>",message.str()); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/CoralClient.hh b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/CoralClient.hh index 55575c8cf023467c5a7de617e21fc1a933ad1253..dc5285d607b21f1ec25f3dafc9d1e058cf47cb16 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/CoralClient.hh +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/CoralClient.hh @@ -98,15 +98,16 @@ protected: public: // added table name -- A.X. - PixCoralClient(std::string id1, bool verbose = false, coral::AccessMode access_mode = coral::Update, const char* tableName = "CALIB_ANAL"); + PixCoralClient(const std::string& id1, + bool verbose = false, coral::AccessMode access_mode = coral::Update, const char* tableName = "CALIB_ANAL"); PixCoralClient(bool verbose = false, coral::AccessMode access_mode = coral::Update, const char* tableName = "CALIB_ANAL"); ~PixCoralClient(); void disconnect(); void printTables(const char* option = 0); // added option -- A.X. - void printTableDesc(std::string tableName); - void printTableContent(std::string tableName); + void printTableDesc(const std::string& tableName); + void printTableContent(const std::string& tableName); void createTables(const char* option = 0); // added option -- A.X. template <typename T> void createTable(); template <typename T> int fillTable(long long fk, CAN::AnalysisResultList_t *results); @@ -118,13 +119,13 @@ public: void fillTables(const char* option); //PVSS methods - double get_value_from_PVSSarch(std::string,const coral::TimeStamp &,const coral::TimeStamp &); - double get_values_from_PVSSarch(std::string,const coral::TimeStamp &,const coral::TimeStamp &); + double get_value_from_PVSSarch(const std::string&,const coral::TimeStamp &,const coral::TimeStamp &); + double get_values_from_PVSSarch(const std::string&,const coral::TimeStamp &,const coral::TimeStamp &); void get_alias_from_PVSSarch(); - void queryTable(CAN::SerialNumber_t anal_id, std::string varname="", std::string connName=""); - CAN::AnalysisResultList_t getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, std::string varname="", std::string connName=""); - CAN::AnalysisResultList_t getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::vector<std::string> &connName, std::string varname=""); + void queryTable(CAN::SerialNumber_t anal_id, const std::string& varname="", const std::string& connName=""); + CAN::AnalysisResultList_t getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::string& varname="", const std::string& connName=""); + CAN::AnalysisResultList_t getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::vector<std::string> &connName, const std::string& varname=""); /** Get analysis results for a list of connectivity objects. * @param analysis_id list of analysis serial numbers, diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDDb.h b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDDb.h index a2ba6c0773ad864d361cd4f7bccf15ef4a27e7ee..88282cd0e4eb17f9f15d4a8551a9a91713df237e 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDDb.h +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDDb.h @@ -1,9 +1,9 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -#ifndef _PCDDb_h_ -#define _PCDDb_h_ +#ifndef PIXELCORALCLIENTUTILS_PCDDB_H +#define PIXELCORALCLIENTUTILS_PCDDB_H #include <string> @@ -20,10 +20,12 @@ namespace coral { class PCDDb { public: - PCDDb(std::string connString, std::string tableName, bool verbose, bool load_text); + PCDDb(const std::string& connString, + const std::string& tableName, + bool verbose, bool load_text); ~PCDDb(); - bool init(std::string tag, int revision); + bool init(const std::string& tag, int revision); int next(); bool set(int idmod_cur, PixelCoralClientUtils::PixelCalibData& pcd); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDio.h b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDio.h index ba296d00cb6f4363a786886a4377a62bafdba126..ca3bfa03d2776fc479260a615439e616f1a15250 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDio.h +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDio.h @@ -17,12 +17,14 @@ namespace coral { class PCDio { public: - PCDio(std::string connString, std::string tableName, int verbose); + PCDio(const std::string& connString, + const std::string& tableName, + int verbose); ~PCDio(); void init(coral::AccessMode access_mode); - void load(std::string tag, int revision); - void save(std::string tag, int revision, std::string sources); + void load(const std::string& tag, int revision); + void save(const std::string& tag, int revision, const std::string& sources); private: std::string m_connString; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDkr.h b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDkr.h index 2877810b631977f39e34b46292180bc1c12787b3..7b72f5cee190b09e4c6a5be464bb0c4dadd26f76 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDkr.h +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PCDkr.h @@ -1,9 +1,9 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -#ifndef _PCDkr_h_ -#define _PCDkr_h_ +#ifndef PIXELCORALCLIENTUTILS_PCDKR_H +#define PIXELCORALCLIENTUTILS_PCDKR_H #include "RelationalAccess/AccessMode.h" @@ -16,13 +16,15 @@ namespace coral { class PCDkr { public: - PCDkr(std::string connString, std::string tableName, int verbose); + PCDkr(const std::string& connString, + const std::string& tableName, + int verbose); ~PCDkr(); void init(coral::AccessMode access_mode); void load(); - void save(std::string tag, std::string cid); - void validate(std::string tag); + void save(cosnt std::string& tag, const std::string& cid); + void validate(const std::string& tag); private: std::string m_connString; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibCoralCoolDb.h b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibCoralCoolDb.h index b410b5a50ea7a37b58abdb16650bcbb708bcdbab..a94d8339ec62281ce6cd9107c91dbbf639f5ce21 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibCoralCoolDb.h +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibCoralCoolDb.h @@ -13,7 +13,7 @@ class ATLAS_NOT_THREAD_SAFE PixCalibCoralCoolDb // Use of singleton databaseService { public: - PixCalibCoralCoolDb(std::string dbString, int verbose); + PixCalibCoralCoolDb(const std::string& dbString, int verbose); ~PixCalibCoralCoolDb(); bool init(); @@ -23,7 +23,7 @@ class ATLAS_NOT_THREAD_SAFE PixCalibCoralCoolDb // Use of singleton databaseServ /* cool::ValidityKey vk2); */ bool saveCalibData(std::string textfile, long long FK); - bool referenceToRunInterval(long long FK, cool::ValidityKey vk1, cool::ValidityKey vk2, const std::string tagname ); + bool referenceToRunInterval(long long FK, cool::ValidityKey vk1, cool::ValidityKey vk2, const std::string& tagname ); private: std::string m_dbstring; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibKnowledgeDb.h b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibKnowledgeDb.h index a2800efd0830d5b5013d06321c98bc30f031a240..2d94ce1e40533d33436bc432165913ae41b72a3a 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibKnowledgeDb.h +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixCalibKnowledgeDb.h @@ -16,13 +16,15 @@ namespace coral { class PixCalibKnowledgeDb { public: - PixCalibKnowledgeDb(std::string connString, std::string tableName, int verbose); + PixCalibKnowledgeDb(const std::string& connString, + const std::string& tableName, + int verbose); ~PixCalibKnowledgeDb(); void init(coral::AccessMode access_mode); //long long findFK(std::string tag); - void saveCorrespondingConfig(long int UnixTimeInSeconds, long int RunNumber, std::string calibtags_in_string, std::string idTag, std::string connTag, std::string cfgTag, std::string cfgModTag ); + void saveCorrespondingConfig(long int UnixTimeInSeconds, long int RunNumber, const std::string& calibtags_in_string, const std::string& idTag, const std::string& connTag, const std::string& cfgTag, const std::string& cfgModTag ); void readCorrespondingCalibTag(long int Utime); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/SpecialPixelMap.hh b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/SpecialPixelMap.hh index 4f3dfc396ebfd683dd718a4f5866cdd0d2ad8b19..b857b789885528f700f9c60542492626983667fb 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/SpecialPixelMap.hh +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/SpecialPixelMap.hh @@ -117,8 +117,8 @@ class ModuleSpecialPixelMap : private std::map<unsigned int, unsigned int>{ //!< construct from blob ModuleSpecialPixelMap(const std::map<unsigned int, unsigned int>& pixels, unsigned int module_status, - std::vector<unsigned int> chip_status, - std::vector<std::vector<unsigned int> > column_pair_status,unsigned int mchips = 16); + const std::vector<unsigned int>& chip_status, + const std::vector<std::vector<unsigned int> >& column_pair_status,unsigned int mchips = 16); //!< construct from contents virtual ~ModuleSpecialPixelMap(); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/CoralClient.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/CoralClient.cc index 56e0fd019b9f1872977b3001d8d6bee5b46f0df8..3d8d54d390e7ca7680900b95faec8b61fd3b039f 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/CoralClient.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/CoralClient.cc @@ -95,7 +95,8 @@ std::string connectionString(const std::string &connection_string_in) { /** Constructor. Open a database identified by the connection string. */ -PixCoralClient::PixCoralClient(std::string id1, bool verbose, coral::AccessMode access_mode, const char* tableName) +PixCoralClient::PixCoralClient(const std::string& id1, + bool verbose, coral::AccessMode access_mode, const char* tableName) : m_connString(connectionString(id1)), m_accessMode(access_mode), m_connectionService(connectionService(verbose)), @@ -180,7 +181,7 @@ void PixCoralClient::printTables(const char* /* option */) //-------------------------------------------------------------------------- /** Get the description of a table identified by an input string on the database and print it on stdout. */ -void PixCoralClient::printTableDesc(std::string tableName) +void PixCoralClient::printTableDesc(const std::string& tableName) { if (m_verbose) std::cout << "\nCOOLCORAL Client: " << tableName <<" Table description" << std::endl; @@ -215,7 +216,7 @@ void PixCoralClient::printTableDesc(std::string tableName) /** Get the content of a table identified by an input string on the database and print its number of lines. */ -void PixCoralClient::printTableContent(std::string tableName){ +void PixCoralClient::printTableContent(const std::string& tableName){ if (m_verbose) std::cout << "\nCOOLCORAL Client: " << tableName <<" Table content"<< std::endl; @@ -553,7 +554,7 @@ void PixCoralClient::fillTables(const char* option){ /** Get results for a particular analysis ID Optionally get only variable "varname" and/or connectivity object connName */ -void PixCoralClient::queryTable(CAN::SerialNumber_t anal_id, std::string varname, std::string connName){ +void PixCoralClient::queryTable(CAN::SerialNumber_t anal_id, const std::string& varname, const std::string& connName){ std::cout << "\n COOLCORAL Client: " << m_pixeltable <<" Putting table content in AnalysisResultList for analysis " << anal_id; if (varname != "") std::cout<<", variable " << varname; @@ -1212,7 +1213,7 @@ int PixCoralClient::fillTable(long long fk, CAN::AnalysisResultList_t *results){ unsigned int empty_conn_names=0; for (typename std::map<std::string, std::map<std::string, T> >::const_iterator iter=results->begin<T>(); iter != results->end<T>(); - iter ++) { + ++iter) { if (iter->first.empty()) { empty_var_names++; @@ -1232,7 +1233,7 @@ int PixCoralClient::fillTable(long long fk, CAN::AnalysisResultList_t *results){ std::unique_ptr<coral::IBulkOperation> pixel_bulk_2(pixel_editor_2.bulkInsert(pixel_row_2,iter->second.size())); for (typename std::map<std::string, T >::const_iterator val_iter=iter->second.begin(); val_iter != iter->second.end(); - val_iter ++) { + ++val_iter) { if (val_iter->first.empty()) { empty_conn_names++; @@ -1429,7 +1430,7 @@ int PixCoralClient::fillTablePixelCalibData(long long fk, const char* option){ and fill an AnalysisResultList_t container Optionally get only variable "varname" and/or connectivity object connName */ -CAN::AnalysisResultList_t PixCoralClient::getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, std::string varname, std::string connName){ +CAN::AnalysisResultList_t PixCoralClient::getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::string& varname, const std::string& connName){ if (m_verbose) { std::cout << "\n COOLCORAL Client: " << m_pixeltable <<" Putting table content in AnalysisResultList for analysis " << anal_id; @@ -1566,7 +1567,7 @@ CAN::AnalysisResultList_t PixCoralClient::getAnalysisResultsFromDB(CAN::SerialNu objects connName and fill an AnalysisResultList_t container Optionally get only variable "varname" */ -CAN::AnalysisResultList_t PixCoralClient::getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::vector<std::string> &connName, std::string varname){ +CAN::AnalysisResultList_t PixCoralClient::getAnalysisResultsFromDB(CAN::SerialNumber_t anal_id, const std::vector<std::string> &connName, const std::string& varname){ if (m_verbose) { std::cout << "\n COOLCORAL Client: " << m_pixeltable <<" Putting table content in AnalysisResultList for analysis " << anal_id; @@ -2058,7 +2059,7 @@ PixelMap_t PixCoralClient::CLOBtoPixelMap(const std::string & clob) { //------------------------------------------------ /// Get value from PVSS archive //------------------------------------------------ -double PixCoralClient::get_value_from_PVSSarch(std::string element_name, const coral::TimeStamp &since, const coral::TimeStamp &until) +double PixCoralClient::get_value_from_PVSSarch(const std::string& element_name, const coral::TimeStamp &since, const coral::TimeStamp &until) { double result=0; @@ -2125,7 +2126,7 @@ double PixCoralClient::get_value_from_PVSSarch(std::string element_name, const c //------------------------------------------------ /// Get value from PVSS archive //------------------------------------------------ -double PixCoralClient::get_values_from_PVSSarch(std::string element_name, const coral::TimeStamp &since, const coral::TimeStamp &until){ +double PixCoralClient::get_values_from_PVSSarch(const std::string& element_name, const coral::TimeStamp &since, const coral::TimeStamp &until){ double result=0; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDDb.cxx b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDDb.cxx index e1c5a5b91164fa75b32e9aa0d006592b6f002822..eece038f893566a6d7354efb81bdf731d7909eda 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDDb.cxx +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDDb.cxx @@ -41,7 +41,9 @@ using namespace std; /** Constructor. Open the default database and seal context. */ -PCDDb::PCDDb(std::string connString, std::string tableName, bool verbose, bool /*load_text*/) : +PCDDb::PCDDb(const std::string& connString, + const std::string& tableName, + bool verbose, bool /*load_text*/) : m_verbose(verbose), m_session(0), m_connString(connString), m_pixeltable(tableName), m_query(0), m_query_2(0), m_cursor(0) @@ -82,7 +84,7 @@ PCDDb::~PCDDb() } } -bool PCDDb::init (std::string tag, int revision) +bool PCDDb::init (const std::string& tag, int revision) { if (m_verbose) cout << "PCDDb::init(" << tag << ", " << revision << ")" << endl; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDio.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDio.cc index e7155498294f88ec9ab5717631558c10287b22e5..3f30e34ab259b39956405bc39f9e67cc0472af1f 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDio.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDio.cc @@ -40,7 +40,9 @@ using namespace std; /** Constructor. Open the default database and seal context. */ -PCDio::PCDio(string connString, string tableName, int verbose) : +PCDio::PCDio(const std::string& connString, + const std::string& tableName, + int verbose) : m_connString(connString), m_pixeltable(tableName), m_verbose(verbose), m_session(0) {} @@ -72,7 +74,7 @@ void PCDio::init(coral::AccessMode access_mode) /** DB -> pcd.sav */ -void PCDio::load(string tag, int revision) +void PCDio::load(const std::string& tag, int revision) { // start timer struct timeval start_time, end_time; @@ -277,7 +279,7 @@ void PCDio::load(string tag, int revision) /** pcd.dat -> DB */ -void PCDio::save(string tag, int revision, string sources) +void PCDio::save(const std::string& tag, int revision, const std::string& sources) { // start timer struct timeval start_time, end_time; diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDkr.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDkr.cc index 1efa3485bb0a856514a1a86226504560a37a21a7..8acd6984d1cdb97dfab8617719e0e106339ca261 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDkr.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PCDkr.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "PixelCoralClientUtils/PCDkr.h" @@ -36,7 +36,9 @@ using namespace std; /** Constructor. Open the default database and seal context. */ -PCDkr::PCDkr(string connString, string tableName, int verbose) : +PCDkr::PCDkr(const std::string& connString, + const std::string& tableName, + int verbose) : m_connString(connString), m_pixeltable(tableName), m_verbose(verbose), m_session(0) {} @@ -115,7 +117,7 @@ void PCDkr::load() /** add a new record to DB */ -void PCDkr::save(string tag, string cid) +void PCDkr::save(const std::string& tag, const std::string& cid) { // start timer struct timeval start_time, end_time; @@ -171,7 +173,7 @@ void PCDkr::createTable() /** validate a record example: Integration_Basic/src/DmlOperations.cpp */ -void PCDkr::validate(string tag) +void PCDkr::validate(const std::string& tag) { transactionStartUpdate(); diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibCoralCoolDb.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibCoralCoolDb.cc index 8417b56de912000e3ac93feeee986107623a6840..0fcfe824b3e239c790f80ca40e927bed50798a0b 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibCoralCoolDb.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibCoralCoolDb.cc @@ -25,7 +25,8 @@ using namespace std; // // this code is based on CoraCoolExample by R. Hawkings // -PixCalibCoralCoolDb::PixCalibCoralCoolDb(string dbString, int /*verbose*/) : +PixCalibCoralCoolDb::PixCalibCoralCoolDb(const std::string& dbString, + int /*verbose*/) : m_dbstring(dbString) { @@ -207,7 +208,7 @@ bool PixCalibCoralCoolDb::saveCalibData ( string textfile , long long FK ) return true; } -bool PixCalibCoralCoolDb::referenceToRunInterval(long long FK, cool::ValidityKey vk1,cool::ValidityKey vk2, const std::string tagname) +bool PixCalibCoralCoolDb::referenceToRunInterval(long long FK, cool::ValidityKey vk1,cool::ValidityKey vk2, const std::string& tagname) { cool::RecordSpecification payloadspec; // primary / foreign keys diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibKnowledgeDb.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibKnowledgeDb.cc index 7024e53e03bf3f8c0a05bb35e8b62d342ef645ee..e30b2e2f11415e9da883d5cd8693aa4c69540431 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibKnowledgeDb.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/PixCalibKnowledgeDb.cc @@ -40,7 +40,9 @@ using namespace std; /** Constructor. Open the default database and seal context. */ -PixCalibKnowledgeDb::PixCalibKnowledgeDb(string connString, string tableName, int verbose) : +PixCalibKnowledgeDb::PixCalibKnowledgeDb(const std::string& connString, + const std::string& tableName, + int verbose) : m_connString(connString), m_pixeltable(tableName), m_verbose(verbose), m_session(0) {} @@ -70,7 +72,7 @@ void PixCalibKnowledgeDb::init(coral::AccessMode access_mode) } void PixCalibKnowledgeDb::saveCorrespondingConfig -(long int UNIXTimeInSeconds, long int RunNumber, std::string calibtags_in_string, std::string idTag, std::string connTag, std::string cfgTag, std::string cfgModTag ) +(long int UNIXTimeInSeconds, long int RunNumber, const std::string& calibtags_in_string, const std::string& idTag, const std::string& connTag, const std::string& cfgTag, const std::string& cfgModTag ) { // create tables if needed diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/SpecialPixelMap.cc b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/SpecialPixelMap.cc index 212c6ecdcca3a7d5b9184d19c88657a14601dfe7..4107349e998a23158ad320349938a5d0dec396ae 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/src/SpecialPixelMap.cc +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/src/SpecialPixelMap.cc @@ -205,8 +205,8 @@ ModuleSpecialPixelMap::ModuleSpecialPixelMap(const coral::Blob& blob, unsigned i ModuleSpecialPixelMap::ModuleSpecialPixelMap(const std::map<unsigned int, unsigned int>& pixels, unsigned int module_status, - std::vector<unsigned int> chip_status, - std::vector<std::vector<unsigned int> > column_pair_status, + const std::vector<unsigned int>& chip_status, + const std::vector<std::vector<unsigned int> >& column_pair_status, unsigned int mchips) : std::map<unsigned int, unsigned int>(pixels), m_chipsPerModule(mchips), @@ -240,7 +240,7 @@ ModuleSpecialPixelMap& ModuleSpecialPixelMap::operator+=(ModuleSpecialPixelMap m mspm.resetSpecialRegions(); resetSpecialRegions(); - for(ModuleSpecialPixelMap::const_iterator pixel = mspm.begin(); pixel != mspm.end(); pixel++){ + for(ModuleSpecialPixelMap::const_iterator pixel = mspm.begin(); pixel != mspm.end(); ++pixel){ (*this)[(*pixel).first] |= (*pixel).second; } @@ -610,7 +610,7 @@ unsigned int ModuleSpecialPixelMap::pixelStatus(unsigned int pixelID) const{ bool ModuleSpecialPixelMap::pixelStatusBit(unsigned int pixelID, unsigned int bit) const{ if(bit < 32){ unsigned int status = pixelStatus(pixelID); - return static_cast<bool>(status & (1 << bit)); + return static_cast<bool>(status & (1u << bit)); } else { std::cout << "Requested bit " << bit << " out of range ([0,31] allowed)" << std::endl; @@ -906,7 +906,7 @@ void ModuleSpecialPixelMap::print(int component, unsigned int pixelStatus = pixel->second; std::cout << " status: "; for(int i = 31; i >= 0; i--){ - bool statusBit = pixelStatus & (1 << i); + bool statusBit = pixelStatus & (1u << i); std::cout << statusBit; if(!(i%4)) std::cout << ' '; } @@ -990,7 +990,7 @@ void ModuleSpecialPixelMap::print(int component, unsigned int pixelStatus = pixel->second; std::cout << " status: "; for(int i = 31; i >= 0; i--){ - bool statusBit = pixelStatus & (1 << i); + bool statusBit = pixelStatus & (1u << i); std::cout << statusBit; if(!(i%4)) std::cout << ' '; } @@ -1424,12 +1424,7 @@ unsigned int ModuleSpecialPixelMap::encodePixelID(int component, unsigned int mo if(pixel_phi_index > (mrows+ng-1) && pixel_phi_index < 2*mrows){ chip = mch/2 -(1 + pixel_eta_index / mcolumns); column = mcolumns - (1 + pixel_eta_index % mcolumns); - if(pixel_phi_index > (mrows+ng-1))row = 2*mrows - 1 - pixel_phi_index; - else if(ng>0){ - for(int k = 0; k<ng; ++k){ - if(pixel_phi_index ==(mrows+k))row =mrowsrdo-1-2*k; - } - } + row = 2*mrows - 1 - pixel_phi_index; } else if(pixel_phi_index < mrows){ chip = pixel_eta_index / mcolumns + mch/2; diff --git a/InnerDetector/InDetConfig/CMakeLists.txt b/InnerDetector/InDetConfig/CMakeLists.txt index addd65e59eb86e0db825f74c5326ecc5f1410d0c..b5c9ae719ceca86c8568c1591fffc9269087ad3a 100644 --- a/InnerDetector/InDetConfig/CMakeLists.txt +++ b/InnerDetector/InDetConfig/CMakeLists.txt @@ -6,9 +6,11 @@ atlas_subdir( InDetConfig ) # Install files from the package: -atlas_install_python_modules( python/*.py - POST_BUILD_CMD ${ATLAS_FLAKE8} ) +atlas_install_python_modules( python/*.py ${ATLAS_FLAKE8} ) +#atlas_install_scripts( test/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) +#atlas_install_joboptions( share/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) -atlas_add_test( InDetClusterization_test - SCRIPT python -m InDetConfig.ClusterizationConfig - PROPERTIES TIMEOUT 600) +atlas_add_test( TrackingCutsFlags_test + SCRIPT python -m InDetConfig.TrackingCutsFlags + POST_EXEC_SCRIPT nopost.sh) + diff --git a/InnerDetector/InDetConfig/python/InDetConfigFlags.py b/InnerDetector/InDetConfig/python/InDetConfigFlags.py index fc36ba07c72bbe939b19c3c05f2b6e5682150bb0..b04a31baeb1c4bfa5d83c6d05ac5b4608c1fb42c 100644 --- a/InnerDetector/InDetConfig/python/InDetConfigFlags.py +++ b/InnerDetector/InDetConfig/python/InDetConfigFlags.py @@ -39,7 +39,7 @@ def createInDetConfigFlags(): icf.addFlag("InDet.doLowPtLargeD0", False) # Turn running of doLargeD0 second pass down to 100 MeV on and off Turn running of doLargeD0 second pass on and off icf.addFlag("InDet.doLargeD0", False) icf.addFlag("InDet.useExistingTracksAsInput", False) # Use already processed Track from a (D)ESD input file. This flag is related with ProcessedESDTracks InDetKey - icf.addFlag("InDet.cutLevel", 16) # Control cuts and settings for different lumi to limit CPU and disk space + icf.addFlag("InDet.cutLevel", 19) # Control cuts and settings for different lumi to limit CPU and disk space icf.addFlag("InDet.priVtxCutLevel", 3 ) # Control vertexing cuts and settings for different lumi to limit CPU and disk space icf.addFlag("InDet.doBremRecovery", True) # Turn on running of Brem Recover in tracking icf.addFlag("InDet.doCaloSeededBrem", True) # Brem Recover in tracking restricted to Calo ROIs @@ -165,7 +165,6 @@ def createInDetConfigFlags(): icf.addFlag("InDet.doTIDE_Ambi", True) # Switch for running TIDE Ambi icf.addFlag("InDet.doRefitInvalidCov", False) # Try Kalman fitter if the track fit in the ambiguity processor produces non positive definitematrices. icf.addFlag("InDet.doRejectInvalidCov", False) # Reject all tracks which have a non positive definite covariance matrix after the refit. - icf.addFlag("InDet.doTIDE_RescalePixelCovariances", False) # Switch for running TIDE pixel cluster covariance rescaling icf.addFlag("InDet.doSSSfilter", True) # Switch for running SSS filter icf.addFlag("InDet.pT_SSScut", -1) # Pt cut for SSS filter [GeV] icf.addFlag("InDet.ForceCoraCool", False) # Use old (non CoolVectorPayload) SCT Conditions @@ -183,4 +182,33 @@ def createInDetConfigFlags(): icf.addFlag("InDet.doDigitalROTCreation",False) # use PixelClusterOnTrackToolDigital during ROT creation to save CPU icf.addFlag("InDet.usePixelDCS", lambda prevFlags : (prevFlags.InDet.useDCS and prevFlags.Detector.RecoPixel)) icf.addFlag("InDet.useSctDCS", lambda prevFlags : (prevFlags.InDet.useDCS and prevFlags.Detector.RecoSCT)) + + from InDetConfig.TrackingCutsFlags import createTrackingFlags, createSLHCTrackingFlags, createIBLTrackingFlags, createHighPileupTrackingFlags, createMinBiasTrackingFlags, createLargeD0TrackingFlags, createR3LargeD0TrackingFlags, createLowPtLargeD0TrackingFlags, createLowPtTrackingFlags, createSLHCConversionFindingTrackingFlags, createVeryLowPtTrackingFlags, createForwardTracksTrackingFlags, createForwardSLHCTracksTrackingFlags, createVeryForwardSLHCTracksTrackingFlags, createBeamGasTrackingFlags, createVtxLumiTrackingFlags, createVtxBeamSpotTrackingFlags, createCosmicsTrackingFlags, createHeavyIonTrackingFlags, createPixelTrackingFlags, createDisappearingTrackingFlags, createSCTTrackingFlags, createTRTTrackingFlags, createSCTandTRTTrackingFlags, createDBMTrackingFlags + + icf.addFlagsCategory ("InDet.Tracking", createTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.SLHCTracking", createSLHCTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.IBLTracking", createIBLTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.HighPileupTracking", createHighPileupTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.MinBiasTracking", createMinBiasTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.LargeD0Tracking", createLargeD0TrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.R3LargeD0Tracking", createR3LargeD0TrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.LowPtLargeD0Tracking", createLowPtLargeD0TrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.LowPtTracking", createLowPtTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.SLHCConversionFindingTracking", createSLHCConversionFindingTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.VeryLowPtTracking", createVeryLowPtTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.ForwardTracksTracking", createForwardTracksTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.ForwardSLHCTracksTracking", createForwardSLHCTracksTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.VeryForwardSLHCTracksTracking", createVeryForwardSLHCTracksTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.BeamGasTracking", createBeamGasTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.VtxLumiTracking", createVtxLumiTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.VtxBeamSpotTracking", createVtxBeamSpotTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.CosmicsTracking", createCosmicsTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.HeavyIonTracking", createHeavyIonTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.PixelTracking", createPixelTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.DisappearingTracking", createDisappearingTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.SCTTracking", createSCTTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.TRTTracking", createTRTTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.SCTandTRTTracking", createSCTandTRTTrackingFlags, prefix=True) + icf.addFlagsCategory ("InDet.DBMTracking", createDBMTrackingFlags, prefix=True) + return icf diff --git a/InnerDetector/InDetConfig/python/TrackingCutsFlags.py b/InnerDetector/InDetConfig/python/TrackingCutsFlags.py new file mode 100644 index 0000000000000000000000000000000000000000..a59976e2e1157abc5bbc6a27afd31ff8b9332819 --- /dev/null +++ b/InnerDetector/InDetConfig/python/TrackingCutsFlags.py @@ -0,0 +1,1004 @@ +#Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function + +import AthenaCommon.SystemOfUnits as Units +##from AthenaCommon.DetFlags import DetFlags + +## constants +max_holes = 2 ## was 5 + +def select( selInd, valuesmap ): + for k,v in valuesmap.items(): + ranges = [int(x) for x in k.split('-') if x != ''] + if len(ranges) == 2: + if ranges[0] <= selInd and selInd <= ranges[1]: return v + if len(ranges) == 1 and k.startswith('-'): + if selInd <= ranges[0]: return v + if len(ranges) == 1 and k.endswith('-'): + if ranges[0] <= selInd: return v + raise RuntimeError("No value can be selected from ranges {} given key {}".format( valuesmap.keys(), selInd )) + +def minPT_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-1': 0.1 * Units.GeV, + '2-13': 0.4 * Units.GeV, + '14-': 0.5 * Units.GeV } ) + +def minSecondaryPT_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-1': 0.4 * Units.GeV, + '2-18': 1.0 * Units.GeV, + '19-': 3.0 * Units.GeV } ) + +def minTRTonlyPt_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-1': 0.4 * Units.GeV, + '2-5': 1.0 * Units.GeV, + '6-': 2.0 * Units.GeV, } ) + +def minClusters_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-14': 7, + '15-': 8 } ) + +def maxHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-7': max_holes, + '8-': max_holes } ) + +def maxPixelHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-7': 2, + '8-': 1 } ) + +def maxPrimaryImpact_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-15': 10.0 * Units.mm, + '16-': 5.0 * Units.mm } ) + +def maxZImpact_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-8': 320.0 * Units.mm, + '9-': 250 * Units.mm } ) + +def nHolesMax_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-11': max_holes, + '12-': 2 } ) + +def nHolesGapMax_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-11': max_holes, + '12-': 2 } ) + +def Xi2max_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-11': 15.0, + '12-': 9.0 } ) + +def Xi2maxNoAdd_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-11': 35.0, + '12-': 25.0 } ) + +def seedFilterLevel_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-4': 1, + '5-': 2 } ) + +def maxdImpactPPSSeeds_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-3': 1.7, + '4-': 2.0 } ) + +def maxdImpactSSSSeeds_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-3': 1000.0, + '4-16': 20.0, + '17-': 5.0 * Units.mm } ) + +def doZBoundary_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-9': False, + '10-': True } ) + +def TRTSegFinderPtBins_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-1': 70, + '2-': 50 } ) + +def excludeUsedTRToutliers_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-5': False, + '6-': True } ) + +def useParameterizedTRTCuts_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-2': False, + '3-': True } ) + +def useNewParameterizationTRT_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-2': False, + '3-': True } ) + +def minSecondaryTRTonTrk_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 10, + '7-': 15 } ) + +def minSecondaryTRTPrecFrac_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 0.0, + '7-': 0.3 } ) + +def maxSecondaryHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 2, + '7-': 1 } ) + +def maxSecondaryPixelHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 2, + '7-': 1 } ) + +def maxSecondarySCTHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 2, + '7-': 1 } ) + +def maxSecondaryDoubleHoles_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': 1, + '7-': 0 } ) + +def rejectShortExtensions_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': False, + '7-': True } ) + +def SiExtensionCuts_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-6': False, + '7-': True } ) + +def RoISeededBackTracking_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-12': False, + '13-': True } ) + +def roadWidth_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-16': 20.0, + '17-': 12.0 } ) + +def keepAllConfirmedSeeds_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-17': False, + '18-': True } ) + +def maxSeedsPerSP_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-17': 5, + '18-': 1 } ) + +def minRoIClusterEt_ranges( inflags ): + return select( inflags.InDet.cutLevel, + {'-18': 0.0, + '19-': 6000. * Units.MeV } ) + + +################################################################ + ## create set of tracking cut flags +################################################################ +def createTrackingFlags(): + #from InDetConfig.InDetConfigFlags import createInDetConfigFlags + #icf = createInDetConfigFlags() + from AthenaConfiguration.AthConfigFlags import AthConfigFlags + icf = AthConfigFlags() + + icf.addFlag("extension", "" ) ### for extension + icf.addFlag("maxSCTHoles", 0 ) + + icf.addFlag("minPT", minPT_ranges ) + icf.addFlag("minSecondaryPt", minSecondaryPT_ranges ) #Pt cut for back tracking + segment finding for these + icf.addFlag("minTRTonlyPt", minTRTonlyPt_ranges ) #Pt cut for TRT only + + # --- first set kinematic defaults + icf.addFlag("maxPT", 1000.0 * Units.TeV) # off! + icf.addFlag("minEta", -1) # off! + icf.addFlag("maxEta", 2.7) + + # --- cluster cuts + icf.addFlag("minClusters", lambda pcf: + 6 if pcf.InDet.doInnerDetectorCommissioning else + 7 if pcf.InDet.doRobustReco else + minClusters_ranges( pcf ) ) # Igor 6, was 7 + + icf.addFlag("minSiNotShared", lambda pcf: + 5 if pcf.InDet.doInnerDetectorCommissioning else + 6) + + icf.addFlag("maxShared", 1) # cut is now on number of shared modules + icf.addFlag("minPixel", 0) + + icf.addFlag("maxHoles", lambda pcf: + 5 if pcf.InDet.doRobustReco + else maxHoles_ranges( pcf ) ) + + icf.addFlag("maxPixelHoles", lambda pcf: + 2 if pcf.InDet.doRobustReco else + maxPixelHoles_ranges( pcf ) ) + + icf.addFlag("maxSctHoles", lambda pcf: + 5 if pcf.InDet.doRobustReco else + 2) #was 5 + + icf.addFlag("maxDoubleHoles", lambda pcf: + 4 if pcf.InDet.doRobustReco else + 1) #was 2 + + icf.addFlag("maxPrimaryImpact", maxPrimaryImpact_ranges ) #low lumi + + icf.addFlag("maxZImpact", lambda pcf: + 500*Units.mm if pcf.InDet.doRobustReco else + maxZImpact_ranges( pcf ) ) + + # --- this is for the TRT-extension + icf.addFlag("minTRTonTrk", 9) + icf.addFlag("minTRTPrecFrac", 0.4) #old: 0.3 + + # --- general pattern cuts for NewTracking + + icf.addFlag("radMax", 600.0 * Units.mm) # default R cut for SP in SiSpacePointsSeedMaker + icf.addFlag("roadWidth", roadWidth_ranges) + icf.addFlag("nHolesMax", nHolesMax_ranges ) + icf.addFlag("nHolesGapMax", nHolesGapMax_ranges ) # not as tight as 2*maxDoubleHoles + icf.addFlag("Xi2max", Xi2max_ranges ) + icf.addFlag("Xi2maxNoAdd", Xi2maxNoAdd_ranges) + icf.addFlag("nWeightedClustersMin", 6) + + # --- seeding + icf.addFlag("seedFilterLevel", seedFilterLevel_ranges) + icf.addFlag("maxTracksPerSharedPRD", 0) ## is 0 ok for default?? + icf.addFlag("maxdImpactPPSSeeds", 2) + icf.addFlag("maxdImpactSSSSeeds", maxdImpactSSSSeeds_ranges) + icf.addFlag("keepAllConfirmedSeeds", keepAllConfirmedSeeds_ranges) + icf.addFlag("maxSeedsPerSP", maxSeedsPerSP_ranges) + + # --- min pt cut for brem + icf.addFlag("minPTBrem", 1. * Units.GeV) # off + icf.addFlag("phiWidthBrem", 0.3 ) # default is 0.3 + icf.addFlag("etaWidthBrem", 0.2 ) # default is 0.3 + + # --- Z Boundary Seeding + icf.addFlag("doZBoundary", doZBoundary_ranges) + + # -------------------------------------- + # --- BACK TRACKING cuts + # -------------------------------------- + + # --- settings for segment finder + icf.addFlag("TRTSegFinderPtBins", TRTSegFinderPtBins_ranges) + icf.addFlag("maxSegTRTShared", 0.7) + icf.addFlag("excludeUsedTRToutliers", excludeUsedTRToutliers_ranges) + + # --- triggers SegmentFinder and BackTracking + icf.addFlag("useParameterizedTRTCuts", useParameterizedTRTCuts_ranges) + icf.addFlag("useNewParameterizationTRT", useNewParameterizationTRT_ranges) + icf.addFlag("maxSecondaryTRTShared", 0.7) + + # --- defaults for secondary tracking + icf.addFlag("maxSecondaryImpact", 100.0 * Units.mm) # low lumi + + icf.addFlag("minSecondaryClusters" , 4) + icf.addFlag("minSecondarySiNotShared" , 4) + icf.addFlag("maxSecondaryShared" , 1) # cut is now on number of shared modules + icf.addFlag("minSecondaryTRTonTrk" , minSecondaryTRTonTrk_ranges) + icf.addFlag("minSecondaryTRTPrecFrac" , minSecondaryTRTPrecFrac_ranges) + + icf.addFlag("maxSecondaryHoles" , lambda pcf: + 5 if pcf.InDet.doRobustReco else + maxSecondaryHoles_ranges( pcf ) ) + + icf.addFlag("maxSecondaryPixelHoles" , lambda pcf: + 5 if pcf.InDet.doRobustReco else + maxSecondaryPixelHoles_ranges( pcf )) + + icf.addFlag("maxSecondarySCTHoles" , lambda pcf: + 5 if pcf.InDet.doRobustReco else + maxSecondarySCTHoles_ranges( pcf ) ) + + icf.addFlag("maxSecondaryDoubleHoles" , lambda pcf: + 2 if pcf.InDet.doRobustReco else + maxSecondaryDoubleHoles_ranges( pcf ) ) + + icf.addFlag("SecondarynHolesMax" , 2 ) + icf.addFlag("SecondarynHolesGapMax" , 2 ) + + icf.addFlag("rejectShortExtensions" , lambda pcf: + False if pcf.InDet.doInnerDetectorCommissioning else + rejectShortExtensions_ranges) # extension finder in back tracking + + icf.addFlag("SiExtensionCuts" , SiExtensionCuts_ranges) # cut in Si Extensions before fit + + # --- pattern cuts for back tracking + icf.addFlag("SecondaryXi2max" , 15.0) + icf.addFlag("SecondaryXi2maxNoAdd" , 50.0) + + # --- run back tracking and TRT only in RoI seed regions + icf.addFlag("RoISeededBackTracking" , RoISeededBackTracking_ranges and ( lambda pcf : pcf.Detector.GeometryCalo ) ) + icf.addFlag("minRoIClusterEt" , minRoIClusterEt_ranges) + + icf.addFlag("usePixel" , False) ####use some existing flag??? + icf.addFlag("useTRT" , False) ####use some existing flag??? + icf.addFlag("useSCT" , False) ####use some existing flag??? + icf.addFlag("useSCTSeeding" , True) ####use some existing flag??? + + # -------------------------------------- + # --- TRT Only TRACKING cuts + # -------------------------------------- + + # --- TRT only + icf.addFlag("minTRTonly" , 15) + icf.addFlag("maxTRTonlyShared" , 0.7) + icf.addFlag("useTRTonlyParamCuts" , True) + icf.addFlag("useTRTonlyOldLogic" , False) + + + ####################################################### + # --- changes for Pixel/SCT segments + # TODO make it depend on the new flags as well + from AthenaCommon.DetFlags import DetFlags + if ( DetFlags.haveRIO.pixel_on() and not DetFlags.haveRIO.SCT_on() ): + icf.minClusters = 3 + elif ( DetFlags.haveRIO.SCT_on() and not DetFlags.haveRIO.pixel_on() ): + icf.minClusters = 6 + return icf + + +### SLHC mode #################### +def createSLHCTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "SLHC" + icf.minPT = 0.9 * Units.GeV + icf.maxPT = 999 * Units.TeV + icf.maxPrimaryImpact = 2.0 * Units.mm # highlumi + icf.maxZImpact = 250.0 * Units.mm + + # --- cluster cuts + icf.minClusters = 9 + icf.minSiNotShared = 8 + #icf.maxShared = 3 # cut is now on number of shared modules + #icf.maxHoles = 3 + #icf.maxPixelHoles = D2 + #icf.maxSctHoles = 2 + #icf.maxDoubleHoles = 2 + # --- also tighten pattern cuts + icf.radMax = 1000. * Units.mm + #icf.seedFilterLevel = 1 + #icf.nHolesMax = max_holes + #icf.nHolesGapMax = max_holes + #icf.Xi2max = 15.0 + #icf.Xi2maxNoAdd = 35.0 + #icf.nWeightedClustersMin = icf.InDet.Tracking.minClusters-1 + + return icf + + +### IBL mode #################### +def createIBLTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "IBL" + icf.seedFilterLevel = 1 + icf.minPT = 0.900 * Units.GeV + icf.minClusters = 10 + icf.maxPixelHoles = 1 + + return icf + +### HighPileUP mode #################### +def createHighPileupTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "HighPileup" + icf.seedFilterLevel = 1 + icf.minPT = 0.900 * Units.GeV + icf.minClusters = 9 + icf.maxPixelHoles = 0 + + return icf + +## MinBias mode ######################## +def createMinBiasTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "MinBias" + icf.minPT = lambda pcf: (0.3 if pcf.InDet.doHIP300 else 0.1) * Units.GeV + + icf.minClusters = 5 + icf.minSecondaryPt = 0.4 * Units.GeV # Pt cut for back tracking + segment finding for these + icf.minTRTonlyPt = 0.4 * Units.GeV # Pt cut for TRT only + icf.TRTSegFinderPtBins = 50 + icf.maxdImpactSSSSeeds = 20.0 # apply cut on SSS seeds + icf.excludeUsedTRToutliers = False # TRT outliers are added to the exclusion list + icf.useTRTonlyOldLogic = True # turn off ole overlap logic to reduce number of hits + icf.maxSecondaryImpact = 100.0 * Units.mm # low lumi + + return icf + +## LargeD0 mode ######################## +def createLargeD0TrackingFlags(): + icf = createTrackingFlags() + icf.extension = "LargeD0" + icf.maxPT = 1.0 * Units.TeV + icf.minPT = 900 * Units.MeV + icf.maxEta = 5 + icf.maxPrimaryImpact = 300.0 * Units.mm + icf.maxZImpact = 1500.0 * Units.mm + icf.maxSecondaryImpact = 300.0 * Units.mm + icf.minSecondaryPt = 500.0 * Units.MeV + icf.minClusters = 7 + icf.minSiNotShared = 5 + icf.maxShared = 2 # cut is now on number of shared modules + icf.minPixel = 0 + icf.maxHoles = 2 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 2 + icf.maxDoubleHoles = 1 + icf.radMax = 600. * Units.mm + icf.nHolesMax = max_holes + icf.nHolesGapMax = max_holes # not as tight as 2*maxDoubleHoles + icf.seedFilterLevel = 1 + icf.maxTracksPerSharedPRD = 2 + + return icf + + +## R3LargeD0 mode ######################## +def createR3LargeD0TrackingFlags(): + icf = createTrackingFlags() + icf.extension = "R3LargeD0" + icf.maxPT = 1.0 * Units.TeV + icf.minPT = 1.0 * Units.GeV + icf.maxEta = 3 + icf.maxPrimaryImpact = 300.0 * Units.mm + icf.maxZImpact = 750 * Units.mm + icf.maxSecondaryImpact = 300.0 * Units.mm + icf.minSecondaryPt = 1000.0 * Units.MeV + icf.minClusters = 8 + icf.minSiNotShared = 6 + icf.maxShared = 2 # cut is now on number of shared modules + icf.minPixel = 0 + icf.maxHoles = 2 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 1 + icf.maxDoubleHoles = 0 + icf.radMax = 600. * Units.mm + icf.nHolesMax = max_holes + icf.nHolesGapMax = 1 + icf.seedFilterLevel = 1 + icf.maxTracksPerSharedPRD = 2 + icf.Xi2max = 9.0 + icf.Xi2maxNoAdd = 25.0 + icf.roadWidth = 10. + icf.nWeightedClustersMin = 8 + icf.maxdImpactSSSSeeds = 300.0 + icf.doZBoundary = True + icf.keepAllConfirmedSeeds = True + icf.maxSeedsPerSP = 1 + + return icf + +## LowPtLargeD0 mode ######################## +def createLowPtLargeD0TrackingFlags(): + icf = createTrackingFlags() + icf.extension = "LowPtLargeD0" + icf.maxPT = 1.0 * Units.TeV + icf.minPT = 100 * Units.MeV + icf.maxEta = 5 + icf.maxPrimaryImpact = 300.0 * Units.mm + icf.maxZImpact = 1500.0 * Units.mm + icf.maxSecondaryImpact = 300.0 * Units.mm + icf.minSecondaryPt = 400.0 * Units.MeV + icf.minClusters = 5 + icf.minSiNotShared = 5 + icf.maxShared = 2 # cut is now on number of shared modules + icf.minPixel = 0 + icf.maxHoles = 2 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 2 + icf.maxDoubleHoles = 1 + icf.radMax = 600. * Units.mm + icf.nHolesMax = max_holes + icf.nHolesGapMax = max_holes # not as tight as 2*maxDoubleHoles + icf.seedFilterLevel = 1 + icf.maxTracksPerSharedPRD = 2 + + return icf + +## LowPt mode ######################## +def createLowPtTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "LowPt" + icf.maxPT = lambda pcf: (1e6 if pcf.InDet.doMinBias else pcf.InDet.Tracking.minPt + 0.3) * Units.GeV + icf.minPT = 0.050 * Units.GeV + icf.minClusters = 5 + icf.minSiNotShared = 4 + icf.maxShared = 1 # cut is now on number of shared modules + icf.minPixel = 2 # At least one pixel hit for low-pt (assoc. seeded on pixels!) + icf.maxHoles = 2 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 2 + icf.maxDoubleHoles = 1 + icf.radMax = 600. * Units.mm + icf.nHolesMax = max_holes + icf.nHolesGapMax = max_holes # not as tight as 2*maxDoubleHoles + icf.maxPrimaryImpact = lambda pcf: 100.0 * Units.mm if pcf.InDet.doMinBias else maxPrimaryImpact_ranges( pcf ) + + return icf + +## SLHCConversionFinding mode ######################## +def createSLHCConversionFindingTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "SLHCConversionFinding" + icf.minPT = 0.9 * Units.GeV + icf.maxPrimaryImpact = 10.0 * Units.mm + icf.maxZImpact = 150.0 * Units.mm + icf.minClusters = 6 + icf.minSiNotShared = 4 + #icf.maxShared = 3 + icf.maxHoles = 0 + #icf.maxPixelHoles = D2 + #icf.maxSctHoles = 2 + #icf.maxDoubleHoles = 2 + # --- also tighten pattern cuts + icf.radMax = 1000. * Units.mm + #icf.seedFilterLevel = 1 + #icf.nHolesMax = max_holes + #icf.nHolesGapMax = max_holes + #icf.Xi2max = 15.0 + #icf.Xi2maxNoAdd = 35.0 + #icf.nWeightedClustersMin = icf.InDet.Tracking.minClusters-1 + # --- turn on Z Boundary seeding + icf.doZBoundary = False # + + return icf + +## VeryLowPt mode ######################## +def createVeryLowPtTrackingFlags(): + icf = createTrackingFlags() #TODO consider using createLowPtTrackingFlags as a base here + icf.extension = "VeryLowPt" + icf.maxPT = lambda pcf: (1e6 if pcf.InDet.doMinBias else pcf.InDet.Tracking.minPT + 0.3) * Units.GeV # some overlap + icf.minPT = 0.050 * Units.GeV + icf.minClusters = 3 + icf.minSiNotShared = 3 + icf.maxShared = 1 # cut is now on number of shared modules + icf.minPixel = 3 # At least one pixel hit for low-pt (assoc. seeded on pixels!) + icf.maxHoles = 1 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 1 + icf.maxDoubleHoles = 0 + icf.nHolesMax = 1 + icf.nHolesGapMax = 1 # not as tight as 2*maxDoubleHoles + icf.radMax = 600. * Units.mm # restrivt to pixels + + return icf + +## ForwardTracks mode ######################## +def createForwardTracksTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "ForwardTracks" + icf.minEta = 2.4 # restrict to minimal eta + icf.maxEta = 2.7 + icf.minPT = 2 * Units.GeV + icf.minClusters = 3 + icf.minSiNotShared = 3 + icf.maxShared = 1 + icf.minPixel = 3 + icf.maxHoles = 1 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 1 + icf.maxDoubleHoles = 0 + icf.nHolesMax = icf.maxHoles + icf.nHolesGapMax = icf.maxHoles + icf.radMax = 600. * Units.mm + icf.useTRT = False # no TRT for forward tracks + icf.useSCTSeeding = False + icf.minSecondaryPt = 3 * Units.GeV + icf.maxPrimaryImpact = 5. * Units.mm + icf.roadWidth = 12. + icf.maxdImpactSSSSeeds = 5.0 + icf.maxSeedsPerSP = 1 + icf.keepAllConfirmedSeeds = True + icf.SecondarynHolesMax = 2 + icf.SecondarynHolesGapMax = 2 + icf.RoISeededBackTracking = False + icf.minRoIClusterEt = 6000. * Units.MeV + + return icf + +## ForwardSLHCTracks mode ######################## +def createForwardSLHCTracksTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "ForwardSLHCTracks" + icf.minEta = 2.4 # restrict to minimal eta + icf.maxEta = 3.0 + icf.minPT = 0.9 * Units.GeV + icf.minClusters = 5 + icf.minSiNotShared = 3 + icf.maxShared = 1 + icf.minPixel = 3 + icf.maxHoles = 1 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 1 + icf.maxDoubleHoles = 0 + icf.nHolesMax = 1 + icf.nHolesGapMax = 1 + icf.radMax = 600. * Units.mm + icf.useTRT = False # no TRT for forward tracks + + return icf + +## VeryForwardSLHCTracks mode ######################## +def createVeryForwardSLHCTracksTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "VeryForwardSLHCTracks" + icf.minEta = 2.4 # restrict to minimal eta + icf.maxEta = 4.0 + icf.minPT = 0.9 * Units.GeV + icf.minClusters = 5 + icf.minSiNotShared = 3 + icf.maxShared = 1 + icf.minPixel = 3 + icf.maxHoles = 1 + icf.maxPixelHoles = 1 + icf.maxSctHoles = 0 + icf.maxDoubleHoles = 0 + icf.nHolesMax = max_holes + icf.nHolesGapMax = max_holes + icf.radMax = 600. * Units.mm + icf.useTRT = False # no TRT for forward tracks + + return icf + +## BeamGas mode ######################## +def createBeamGasTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "BeamGas" + icf.minPT = 0.500 * Units.GeV + icf.maxPrimaryImpact = 300. * Units.mm + icf.maxZImpact = 2000. * Units.mm + icf.minClusters = 6 + icf.maxHoles = 3 + icf.maxPixelHoles = 3 + icf.maxSctHoles = 3 + icf.maxDoubleHoles = 1 + icf.nHolesMax = 3 + icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles + + return icf + +## VtxLumi mode ######################## +def createVtxLumiTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "VtxLumi" + icf.seedFilterLevel = 1 + icf.minPT = 0.900 * Units.GeV + icf.minClusters = 7 + icf.maxPixelHoles = 1 + icf.radMax = 600. * Units.mm + icf.nHolesMax = 2 + icf.nHolesGapMax = 1 + icf.useTRT = False + + return icf + +## VtxBeamSpot mode ######################## +def createVtxBeamSpotTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "VtxBeamSpot" + icf.seedFilterLevel = 1 + icf.minPT = 0.900 * Units.GeV + icf.minClusters = 9 + icf.maxPixelHoles = 0 + icf.radMax = 320. * Units.mm + icf.nHolesMax = 2 + icf.nHolesGapMax = 1 + icf.useTRT = False + + return icf + +## Cosmics mode ######################## +def createCosmicsTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "Cosmics" + icf.minPT = 0.500 * Units.GeV + icf.maxPrimaryImpact = 1000. * Units.mm + icf.maxZImpact = 10000. * Units.mm + icf.minClusters = 4 + icf.minSiNotShared = 4 + icf.maxHoles = 3 + icf.maxPixelHoles = 3 + icf.maxSctHoles = 3 + icf.maxDoubleHoles = 1 + icf.minTRTonTrk = 15 + icf.minTRTonly = 15 + icf.roadWidth = 60. + icf.seedFilterLevel = 3 + icf.Xi2max = 60.0 + icf.Xi2maxNoAdd = 100.0 + icf.nWeightedClustersMin = 8 + icf.nHolesMax = 3 + icf.nHolesGapMax = 3 # not as tight as 2*maxDoubleHoles + + return icf + +## Heavyion mode ####################### +def createHeavyIonTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "HeavyIon" + icf.maxZImpact = 200. * Units.mm + icf.minClusters = 9 + icf.minSiNotShared = 7 + icf.maxShared = 2 # was 1, cut is now on number of shared modules + + icf.nHolesMax = 0 + icf.nHolesGapMax = 0 + icf.Xi2max = 6. + icf.Xi2maxNoAdd = 10. + + # CutLevel dependendent flags: + # CutLevel 3 MinBias + # CutLevel 4 # ==CutLevel 2 with loosened hole cuts and chi^2 cuts + # CutLevel 5 # ==CutLevel 3 with loosened hole cuts and chi^2 cuts + icf.seedFilterLevel = lambda pcf: 2 if pcf.InDet.cutLevel >= 2 else 1 + + icf.maxdImpactSSSSeeds = lambda pcf: \ + 20. if pcf.InDet.cutLevel >= 2 else 1000. + + icf.minPT = lambda pcf: \ + 0.3 *Units.GeV if pcf.InDet.cutLevel in [3, 5] else 0.5 * Units.GeV + icf.useParameterizedTRTCuts = lambda pcf: \ + False if pcf.InDet.cutLevel >= 3 else True #Make these false on all HI cut levels >=3, since standard cut levels set it true from levels >=3 + icf.useNewParameterizationTRT = lambda pcf: \ + False if pcf.InDet.cutLevel >= 3 else True + + #set this to 1.7 for all HI cut levels >=4, since standard cut levels set it to 2.0 from levels >=4. Not sure it has any effect, since we don't usually run mixed seeds (also true for HI?) + icf.maxdImpactPPSSeeds = lambda pcf: \ + 1.7 if pcf.InDet.cutLevel >= 4 else True + + icf.maxHoles = lambda pcf: 2 if pcf.InDet.cutLevel >= 4 else 0 + icf.maxPixelHoles = lambda pcf: 1 if pcf.InDet.cutLevel >= 4 else 0 + icf.maxSctHoles = lambda pcf: 1 if pcf.InDet.cutLevel >= 4 else 0 + icf.maxDoubleHoles = 0 + icf.Xi2max = lambda pcf: 9. if pcf.InDet.cutLevel >= 4 else 6. + icf.Xi2maxNoAdd = lambda pcf: 25. if pcf.InDet.cutLevel >= 4 else 10. + icf.radMax = 600. * Units.mm # restrict to pixels + first SCT layer + icf.useTRT = False + + return icf + +### Pixel mode ############################################### +def createPixelTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "Pixel" + + def _minPt( pcf ): + if pcf.Beam.Type == "cosmics": + return 0.5 * Units.GeV + if pcf.InDet.doHeavyIon: + return 0.1 * Units.GeV + if pcf.InDet.doMinBias: + if pcf.InDet.doHIP300: + return 0.300 * Units.GeV + else: + return 0.05 * Units.GeV + return 0.1 * Units.GeV + + icf.minPT = _minPt + icf.minClusters = 3 + + def _pick( default, hion, cosmics): + def _internal( pcf ): + if pcf.InDet.doHeavyIon: + return hion + if pcf.Beam.Type == "cosmics": + return cosmics + return default + return _internal + + icf.maxHoles = _pick( default = 1, hion = 0, cosmics = 3 ) + icf.maxPixelHoles = _pick( default = 1, hion = 0, cosmics = 3 ) + icf.maxSctHoles = 0 + icf.maxDoubleHoles = 0 + icf.minSiNotShared = 3 + icf.maxShared = 0 + icf.seedFilterLevel = _pick( default = 2, hion = 2, cosmics = 3 ) + icf.nHolesMax = _pick( default = 1, hion = 0, cosmics = 3 ) + icf.nHolesGapMax = _pick( default = 1, hion = 0, cosmics = 3 ) + icf.useSCT = False + icf.useTRT = False + icf.useSCTSeeding = True + icf.minSecondaryPt = 3 * Units.GeV + icf.maxPrimaryImpact = lambda pcf: 1000. * Units.mm if pcf.Beam.Type =="cosmics" else 5. * Units.mm + icf.roadWidth = lambda pcf: 60.0 if pcf.Beam.Type =="cosmics" else 12.0 + icf.maxdImpactSSSSeeds = 5.0 + icf.maxSeedsPerSP = 1 + icf.keepAllConfirmedSeeds = True + icf.SecondarynHolesMax = 2 + icf.SecondarynHolesGapMax = 2 + icf.RoISeededBackTracking = False + icf.minRoIClusterEt = 6000. * Units.MeV + + icf.maxZImpact = lambda pcf: 10000. * Units.mm if pcf.Beam.Type == "cosmics" else maxZImpact_ranges + icf.Xi2max = lambda pcf: 60.0 if pcf.Beam.Type =="cosmics" else Xi2max_ranges + icf.nWeightedClustersMin = lambda pcf: 6 if pcf.Beam.Type =="cosmics" else 6 # why change if detault is also 6! + + return icf + +########## Disappearing mode ###################### +def createDisappearingTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "Disappearing" + icf.minClusters = 4 + icf.maxHoles = 0 + icf.maxPixelHoles = 0 + icf.maxSctHoles = 0 + icf.maxDoubleHoles = 0 + icf.minSiNotShared = 3 + icf.maxShared = 0 + icf.seedFilterLevel = 2 + icf.nHolesMax = 0 + icf.nHolesGapMax = 0 + icf.useSCT = True + icf.useTRT = True + icf.useSCTSeeding = False + icf.maxEta = 2.2 + + return icf + +########## SCT mode ###################### +def createSCTTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "SCT" + icf.minClusters = 7 + icf.maxDoubleHoles = 1 + icf.minSiNotShared = 5 + icf.usePixel = False + icf.useTRT = False + + + def _pick( default, cosmics, minbias, hion): + def _internal( pcf ): + if pcf.Beam.Type == "cosmics": + return cosmics + if pcf.InDet.doMinBias and pcf.InDet.doHIP300: + return hion + if pcf.InDet.doMinBias and not pcf.InDet.doHIP300: + minbias + return default + return _internal + + icf.minPT = _pick( default = 0.1 * Units.GeV, minbias=0.1 * Units.GeV, hion=0.3* Units.GeV, cosmics = 0.5* Units.GeV ) + icf.maxPrimaryImpact = lambda pcf: 1000. * Units.mm if pcf.Beam.Type == "cosmics" else maxPrimaryImpact_ranges + icf.maxZImpact = lambda pcf: 10000. * Units.mm if pcf.Beam.Type == "cosmics" else maxZImpact_ranges + maxHolesDefault = 2 + icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.maxPixelHoles = lambda pcf: 0 if pcf.Beam.Type == "cosmics" else 0 + icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else 2 + icf.maxShared = 0 + icf.roadWidth = lambda pcf: 60. if pcf.Beam.Type == "cosmics" else roadWidth_ranges + icf.seedFilterLevel = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else 2 + icf.Xi2max = lambda pcf: 60.0 if pcf.Beam.Type == "cosmics" else Xi2max_ranges + icf.Xi2maxNoAdd = lambda pcf: 100.0 if pcf.Beam.Type == "cosmics" else Xi2maxNoAdd_ranges + icf.nWeightedClustersMin = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning and pcf.Beam.Type == "cosmics" else 6 + icf.minClusters = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning and pcf.Beam.Type == "cosmics" else minClusters_ranges + icf.minSiNotShared = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning and pcf.Beam.Type == "cosmics" else 5 + + return icf + +########## TRT subdetector tracklet cuts ########## +def createTRTTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "TRT" + icf.minPT = 0.4 * Units.GeV + icf.minTRTonly = 15 + icf.maxTRTonlyShared = 0.7 + + return icf + + +######### SCTandTRT mode ########################### +def createSCTandTRTTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "SCTandTRT" + icf.minPT = lambda pcf: 0.500 * Units.GeV if pcf.Beam.Type == "cosmics" else 0.4 * Units.GeV + icf.maxDoubleHoles = 0 + icf.minSiNotShared = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning else 5 + icf.maxShared = 0 + icf.seedFilterLevel = 2 + icf.usePixel = False + icf.useTRT = True + icf.maxPrimaryImpact = lambda pcf: 1000. * Units.mm if pcf.Beam.Type == "cosmics" else maxPrimaryImpact_ranges + icf.maxZImpact = lambda pcf: 10000. * Units.mm if pcf.Beam.Type == "cosmics" else maxZImpact_ranges + maxHolesDefault = 2 + icf.maxHoles = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.maxPixelHoles = 0 + icf.maxSctHoles = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.nHolesMax = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.nHolesGapMax = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else maxHolesDefault + icf.maxShared = 0 + icf.roadWidth = lambda pcf: 60. if pcf.Beam.Type == "cosmics" else roadWidth_ranges + icf.seedFilterLevel = lambda pcf: 3 if pcf.Beam.Type == "cosmics" else 2 + icf.Xi2max = lambda pcf: 60.0 if pcf.Beam.Type == "cosmics" else Xi2max_ranges + icf.Xi2maxNoAdd = lambda pcf: 100.0 if pcf.Beam.Type == "cosmics" else Xi2maxNoAdd_ranges + icf.nWeightedClustersMin = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning else 6 + icf.minClusters = lambda pcf: 4 if pcf.InDet.doInnerDetectorCommissioning else 7 + icf.rejectShortExtensions = lambda pcf: False if pcf.InDet.doInnerDetectorCommissioning else rejectShortExtensions_ranges + + return icf + +########## DBM mode ################################ +def createDBMTrackingFlags(): + icf = createTrackingFlags() + icf.extension = "DBM" + icf.minEta = 3.05 + icf.maxEta = 3.45 + icf.Xi2maxNoAdd = 10000 + icf.Xi2max = 10000 + icf.nWeightedClustersMin = 0 + icf.seedFilterLevel = 1 + icf.maxdImpactPPSSeeds = 100000.0 * Units.mm + icf.maxdImpactSSSSeeds = 100000.0 * Units.mm + icf.maxPrimaryImpact = 100000.0 * Units.mm # low lumi + icf.maxZImpact = 320000.0 * Units.mm # Was 250 mm + icf.maxPT = 100000.0 * Units.GeV # some overlap + icf.minPT = 0.0 * Units.GeV + icf.minClusters = 0 + icf.minSiNotShared = 0 + icf.maxShared = 1000 # cut is now on number of shared modules + icf.minPixel = 0 + icf.maxHoles = 0 + icf.maxPixelHoles = 0 + icf.maxSctHoles = 0 + icf.maxDoubleHoles = 0 + icf.radMax = 600000. * Units.mm + icf.nHolesMax = max_holes + icf.nHolesGapMax = max_holes # not as tight as 2*maxDoubleHoles + icf.useTRT = False + icf.useSCT = False + icf.usePixel = True + + return icf + + +##################################################################### +##################################################################### +##################################################################### + +if __name__ == "__main__": + #from AthenaConfiguration.AthConfigFlags import AthConfigFlags + #from AthenaConfiguration.AllConfigFlags import ConfigFlags + #ConfigFlags = createTrackingFlags() + from InDetConfig.InDetConfigFlags import createInDetConfigFlags + ConfigFlags = createInDetConfigFlags() + from AthenaCommon.Logging import logging + l = logging.getLogger('AthConfigFlags') + from AthenaCommon.Constants import WARNING + l.setLevel(WARNING) + ConfigFlags.loadAllDynamicFlags() + + assert ConfigFlags.InDet.cutLevel == 19 , "default cut level is wrong" + assert ConfigFlags.InDet.Tracking.minRoIClusterEt == 6000.0 * Units.MeV, "wrong value {} ".format(ConfigFlags.InDet.Tracking.minRoIClusterEt) + ConfigFlags.InDet.cutLevel = 2 + assert ConfigFlags.InDet.Tracking.minRoIClusterEt == 0.0, "wrong value {} ".format(ConfigFlags.InDet.Tracking.minRoIClusterEt) + assert ConfigFlags.InDet.BeamGasTracking.minRoIClusterEt == 0.0, "wrong value {}, not following cutLevel setting ".format(ConfigFlags.InDet.BeamGasTracking.minRoIClusterEt) + + assert ConfigFlags.InDet.HeavyIonTracking.minSiNotShared == 7, "wrong value, overwrite" + assert ConfigFlags.InDet.HeavyIonTracking.minRoIClusterEt == 0.0, "wrong value, overwrite" + #ConfigFlags.dump() + print( "allok" ) + + diff --git a/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py b/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py index ecd768873b242efdf91c18a9f87ebaa878f77f26..160c7f3fcfe4db9c2e2c823a0e5f2045fad627c4 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/InDetJobProperties.py @@ -1085,12 +1085,6 @@ class doTIDE_Ambi(InDetFlagsJobProperty): allowedTypes = ['bool'] StoredValue = True -class doTIDE_RescalePixelCovariances(InDetFlagsJobProperty): - """ Switch for running TIDE pixel cluster covariance rescaling """ - statusOn = True - allowedTypes = ['bool'] - StoredValue = False - class doRefitInvalidCov(InDetFlagsJobProperty): """ Try Kalman fitter if the track fit in the ambiguity processor produces non positive definitematrices.""" statusOn = True @@ -1357,7 +1351,6 @@ class InDetJobProperties(JobPropertyContainer): self.checkThenSet(self.doTrackSegmentsTRT , False) self.checkThenSet(self.doSlimming , False) self.checkThenSet(self.doSGDeletion , True ) - self.checkThenSet(self.doTIDE_RescalePixelCovariances, False) # TEMPORARY FIX TO STOP SEG FAULT self.checkThenSet(self.doPixelClusterSplitting, False) self.checkThenSet(self.doTIDE_Ambi, False) @@ -1654,7 +1647,6 @@ class InDetJobProperties(JobPropertyContainer): self.checkThenSet(self.doTrackSegmentsTRT , True ) self.checkThenSet(self.doPixelClusterSplitting, False) self.checkThenSet(self.doTIDE_Ambi, False) - self.checkThenSet(self.doTIDE_RescalePixelCovariances, False) self.checkThenSet(self.doTrackSegmentsDisappearing, False) if rec.doExpressProcessing() : @@ -1715,11 +1707,6 @@ class InDetJobProperties(JobPropertyContainer): self.doSpacePointFormation = self.preProcessing() and self.doSpacePointFormation() and (DetFlags.haveRIO.pixel_on() or DetFlags.haveRIO.SCT_on()) self.doPRDFormation = self.preProcessing() and self.doPRDFormation() and (DetFlags.makeRIO.pixel_on() or DetFlags.makeRIO.SCT_on() or DetFlags.makeRIO.TRT_on()) - # -------------------------------------------------------------------- - # ---- TIDE Pixel cluster covariance rescaling - # -------------------------------------------------------------------- - self.doTIDE_RescalePixelCovariances = self.doTIDE_RescalePixelCovariances() and self.doPixelClusterSplitting() and self.pixelClusterSplittingType() == 'NeuralNet' and self.doTIDE_Ambi() - # -------------------------------------------------------------------- # --- 1st iteration, inside out tracking # -------------------------------------------------------------------- @@ -2231,8 +2218,6 @@ class InDetJobProperties(JobPropertyContainer): print('* split prob1 cut: ', self.pixelClusterSplitProb1()) print('* split prob2 cut: ', self.pixelClusterSplitProb2()) print('* Min split pt: [MeV] ', self.pixelClusterSplitMinPt()) - if self.doTIDE_RescalePixelCovariances(): - print('* rescaling pixel cluster covariances: ', self.doTIDE_RescalePixelCovariances()) else: print('* - run new Pixel clustering with splitting using analog information') print('* splitting technique: ', self.pixelClusterSplittingType()) @@ -2764,7 +2749,6 @@ _list_InDetJobProperties = [Enabled, doTIDE_Ambi, doRefitInvalidCov, doRejectInvalidCov, - doTIDE_RescalePixelCovariances, doSSSfilter, pT_SSScut, ForceCoraCool, diff --git a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py index 84f5ebc4b79abb4d858049f600c0f3190f606cb7..088720d63265487ba71698f4e9b2d8cedcf3530f 100644 --- a/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py +++ b/InnerDetector/InDetExample/InDetRecExample/python/TrackingCommon.py @@ -353,8 +353,6 @@ def getInDetPixelClusterOnTrackToolNNSplitting(name='InDetPixelClusterOnTrackToo if 'NnClusterizationFactory' not in kwargs : kwargs = setDefaults(kwargs, NnClusterizationFactory = getNnClusterizationFactory()) - if InDetFlags.doTIDE_RescalePixelCovariances() : - kwargs = setDefaults(kwargs, applydRcorrection = True) return getInDetPixelClusterOnTrackToolBase(name=name, **kwargs) def getInDetPixelClusterOnTrackTool(name='InDetPixelClusterOnTrackTool', **kwargs) : diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py index 74d387eb1801db76f4379260398c8b6ee0fcbdaa..641770f10935c4e0bc847cabb9f8c12d617c6621 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredNewTrackingSiPattern.py @@ -514,9 +514,8 @@ class ConfiguredNewTrackingSiPattern: tryBremFit = InDetFlags.doBremRecovery() and useBremMode and NewTrackingCuts.mode() != "DBM", caloSeededBrem = InDetFlags.doCaloSeededBrem() and NewTrackingCuts.mode() != "DBM", pTminBrem = NewTrackingCuts.minPTBrem(), - RefitPrds = True, - doHadCaloSeed = InDetFlags.doCaloSeededRefit(), - InputHadClusterContainerName = InDetKeys.HadCaloClusterROIContainer()+"Bjet") + RefitPrds = True) + # DenseEnvironmentsAmbiguityScoreProcessorTool from TrkAmbiguityProcessor.TrkAmbiguityProcessorConf import Trk__DenseEnvironmentsAmbiguityScoreProcessorTool as ScoreProcessorTool @@ -553,8 +552,6 @@ class ConfiguredNewTrackingSiPattern: elif NewTrackingCuts.extension() == "Disappearing": InDetAmbiguityScoreProcessor.SplitClusterMap_old = InDetKeys.SplitClusterAmbiguityMap() InDetAmbiguityScoreProcessor.SplitClusterMap_new = InDetKeys.SplitClusterAmbiguityMap()+NewTrackingCuts.extension() - if InDetFlags.doTIDE_RescalePixelCovariances() : - InDetAmbiguityProcessor.applydRcorrection = True if NewTrackingCuts.mode() == "Pixel" or NewTrackingCuts.mode() == "DBM": InDetAmbiguityProcessor.SuppressHoleSearch = True diff --git a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py index 5b6012e177ae740bcf0402bf37ffc9bcc93e8cf6..800bf2d703a4e5b8470f7c0e4339617069be27ce 100755 --- a/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/InDetRecLoadTools.py @@ -82,15 +82,6 @@ if InDetFlags.doPixelClusterSplitting() and not InDetFlags.doSLHC(): ToolSvc += NnClusterizationFactory - # special setup for DVRetracking mode - # if InDetFlags.doDVRetracking() : - # COOL binding - from IOVDbSvc.CondDB import conddb - if InDetFlags.doTIDE_RescalePixelCovariances() : - if not conddb.folderRequested('/PIXEL/PixelClustering/PixelCovCorr'): - # COOL binding - conddb.addFolder("PIXEL_OFL","/PIXEL/PixelClustering/PixelCovCorr") - if (InDetFlags.doPrintConfigurables()): printfunc (NnClusterizationFactory) elif InDetFlags.doPixelClusterSplitting(): diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigRecLoadTools.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigRecLoadTools.py index cedfd5bd811585e4e3636ba8d9062b440bff8363..8cdd29a1ce71646b0ec09ce3ee3de9851583c92a 100755 --- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigRecLoadTools.py +++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigConfigRecLoadTools.py @@ -112,11 +112,6 @@ if InDetTrigFlags.loadRotCreator(): NnCollectionWithTrackReadKey = 'PixelClusterNNWithTrack') ToolSvc += TrigNnClusterizationFactory - - from IOVDbSvc.CondDB import conddb - if InDetTrigFlags.doTIDE_RescalePixelCovariances() : - if not conddb.folderRequested('/PIXEL/PixelClustering/PixelCovCorr'): - conddb.addFolder("PIXEL_OFL","/PIXEL/PixelClustering/PixelCovCorr") else: TrigNnClusterizationFactory = None diff --git a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt index c8ff0c79709f264d597cbd897595860a2d02bd4f..961ff0106c745b859eb1bc5174f4aee5ee36a0ec 100644 --- a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt +++ b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/CMakeLists.txt @@ -17,7 +17,6 @@ atlas_depends_on_subdirs( PUBLIC InnerDetector/InDetRecEvent/InDetRIO_OnTrack Tracking/TrkEvent/TrkParameters Tracking/TrkTools/TrkToolInterfaces - Tracking/TrkTools/TrkAmbiguityProcessor Tracking/TrkEvent/TrkRIO_OnTrack Tracking/TrkUtilityPackages/TrkNeuralNetworkUtils Control/StoreGate @@ -40,7 +39,7 @@ atlas_add_component( SiClusterOnTrackTool src/*.cxx src/components/*.cxx INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS} - LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaPoolUtilities GeoPrimitives GaudiKernel InDetPrepRawData InDetRIO_OnTrack TrkParameters TrkToolInterfaces TrkAmbiguityProcessorLib StoreGateLib SGtests EventPrimitives InDetIdentifier InDetReadoutGeometry PixelReadoutGeometry SiClusterizationToolLib TrkSurfaces TrkRIO_OnTrack PixelConditionsData TrkNeuralNetworkUtilsLib ) + LINK_LIBRARIES ${EIGEN_LIBRARIES} AthenaBaseComps AthenaPoolUtilities GeoPrimitives GaudiKernel InDetPrepRawData InDetRIO_OnTrack TrkParameters TrkToolInterfaces StoreGateLib SGtests EventPrimitives InDetIdentifier InDetReadoutGeometry PixelReadoutGeometry SiClusterizationToolLib TrkSurfaces TrkRIO_OnTrack PixelConditionsData TrkNeuralNetworkUtilsLib TrkEventUtils) # Install files from the package: atlas_install_headers( SiClusterOnTrackTool ) diff --git a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/SiClusterOnTrackTool/PixelClusterOnTrackTool.h b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/SiClusterOnTrackTool/PixelClusterOnTrackTool.h index e60bd26b65c92630d0ea9f639e0a5e2062a18ddd..b583ff3dea5490131103f68297a13bca6731544c 100755 --- a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/SiClusterOnTrackTool/PixelClusterOnTrackTool.h +++ b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/SiClusterOnTrackTool/PixelClusterOnTrackTool.h @@ -15,7 +15,6 @@ #include "InDetPrepRawData/PixelGangedClusterAmbiguities.h" #include "TrkParameters/TrackParameters.h" #include "GeoPrimitives/GeoPrimitives.h" -#include "TrkAmbiguityProcessor/dRMap.h" #include "Identifier/Identifier.h" #include "InDetIdentifier/PixelID.h" @@ -73,12 +72,6 @@ public: virtual StatusCode initialize() override; //! AlgTool termination virtual StatusCode finalize () override; - - - - void correctBow(const Identifier&, Amg::Vector2D& locpos, const double tanphi, const double taneta) const; - - double splineIBLPullX(float x, int layer) const; /** @brief produces a PixelClusterOnTrack (object factory!). @@ -89,8 +82,15 @@ public: virtual const InDet::PixelClusterOnTrack* correct(const Trk::PrepRawData&, const Trk::TrackParameters&) const override; - virtual const InDet::PixelClusterOnTrack* correctDefault(const Trk::PrepRawData&, - const Trk::TrackParameters&) const; + /////////////////////////////////////////////////////////////////// + // Private methods: + /////////////////////////////////////////////////////////////////// + +protected: + void correctBow(const Identifier&, Amg::Vector2D& locpos, const double tanphi, const double taneta) const; + + const InDet::PixelClusterOnTrack* correctDefault(const Trk::PrepRawData&, + const Trk::TrackParameters&) const; virtual const InDet::PixelClusterOnTrack* correctNN(const Trk::PrepRawData&, const Trk::TrackParameters&) const; virtual bool getErrorsDefaultAmbi( const InDet::PixelCluster*, const Trk::TrackParameters&, @@ -110,15 +110,6 @@ public: private: - /** @brief parametrizes the pixel cluster position error as a function of - the track angle alpha and the cluster width (number of rows) deltax */ - // double getBarrelPhiError(double& alpha, int& deltax) const; - // double getBarrelEtaError(double eta, int deltax, int deltay) const; - // double getEndcapPhiError(int etasize, int phisize) const; - // double getEndcapEtaError(int etasize, int phisize) const; - - void FillFromDataBase() const; - /////////////////////////////////////////////////////////////////// // Private data: /////////////////////////////////////////////////////////////////// @@ -134,17 +125,6 @@ public: SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> m_pixelErrorScalingKey {this,"PixelErrorScalingKey", "/Indet/TrkErrorScalingPixel", "Key for pixel error scaling conditions data."}; - /* ME: Test histos have nothing to do with production code, use a flag - IHistogram1D* m_h_Resx; - IHistogram1D* m_h_Resy; - IHistogram1D* m_h_Locx; - IHistogram1D* m_h_Locy; - IHistogram1D* m_h_PhiTrack; - IHistogram1D* m_h_ThetaTrack; - IHistogram1D* m_h_Rad; - IHistogram1D* m_h_Slope; - */ - //! toolhandle for central error scaling //! flag storing if errors need scaling or should be kept nominal bool m_disableDistortions; @@ -172,7 +152,6 @@ public: /** Enable NN based calibration (do only if NN calibration is applied) **/ bool m_applyNNcorrection{false}; BooleanProperty m_applyNNcorrectionProperty{this, "applyNNcorrection", false}; - bool m_applydRcorrection; bool m_NNIBLcorrection; bool m_IBLAbsent; @@ -180,22 +159,12 @@ public: ToolHandle<NnClusterizationFactory> m_NnClusterizationFactory; ServiceHandle<IIBLParameterSvc> m_IBLParameterSvc; - - SG::ReadHandleKey<InDet::DRMap> m_dRMap; //!< the actual dR map - std::string m_dRMapName; - bool m_doNotRecalibrateNN; bool m_noNNandBroadErrors; /** Enable different treatment of cluster errors based on NN information (do only if TIDE ambi is run) **/ bool m_usingTIDE_Ambi; - SG::ReadHandleKey<InDet::PixelGangedClusterAmbiguities> m_splitClusterMapKey; - mutable std::vector< std::vector<float> > m_fX ATLAS_THREAD_SAFE; // Guarded by m_mutex - mutable std::vector< std::vector<float> > m_fY ATLAS_THREAD_SAFE; // Guarded by m_mutex - mutable std::vector< std::vector<float> > m_fB ATLAS_THREAD_SAFE; // Guarded by m_mutex - mutable std::vector< std::vector<float> > m_fC ATLAS_THREAD_SAFE; // Guarded by m_mutex - mutable std::vector< std::vector<float> > m_fD ATLAS_THREAD_SAFE; // Guarded by m_mutex - mutable std::mutex m_mutex; - + SG::ReadHandleKey<InDet::PixelGangedClusterAmbiguities> m_splitClusterMapKey; + //moved from static to member variable static constexpr int s_nbinphi=9; static constexpr int s_nbineta=6; diff --git a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/PixelClusterOnTrackTool.cxx b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/PixelClusterOnTrackTool.cxx index 3d830b65b6e132e2d0479ad90fc110e43a4ca900..1339a792da2d501a8f9b9491da276e600815859a 100755 --- a/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/PixelClusterOnTrackTool.cxx +++ b/InnerDetector/InDetRecTools/SiClusterOnTrackTool/src/PixelClusterOnTrackTool.cxx @@ -60,13 +60,10 @@ InDet::PixelClusterOnTrackTool::PixelClusterOnTrackTool m_disableDistortions(false), m_rel13like(false), m_pixelid(nullptr), - m_applydRcorrection(false), m_NNIBLcorrection(false), m_IBLAbsent(true), m_NnClusterizationFactory("InDet::NnClusterizationFactory/NnClusterizationFactory", this), m_IBLParameterSvc("IBLParameterSvc", n), - m_dRMap(""), - m_dRMapName("dRMap"), m_doNotRecalibrateNN(false), m_noNNandBroadErrors(false), m_usingTIDE_Ambi(false), @@ -76,11 +73,9 @@ InDet::PixelClusterOnTrackTool::PixelClusterOnTrackTool declareProperty("PositionStrategy", m_positionStrategy = 1, "Which calibration of cluster positions"); declareProperty("DisableDistortions", m_disableDistortions, "Disable simulation of module distortions"); declareProperty("Release13like", m_rel13like, "Activate release-13 like settigs"); - declareProperty("applydRcorrection", m_applydRcorrection); declareProperty("NNIBLcorrection", m_NNIBLcorrection); declareProperty("NnClusterizationFactory", m_NnClusterizationFactory); declareProperty("SplitClusterAmbiguityMap", m_splitClusterMapKey);//Remove Later - declareProperty("dRMapName", m_dRMapName); //This is a string to prevent the scheduler seeing trkAmbSolver as both creating and requiring the map declareProperty("doNotRecalibrateNN", m_doNotRecalibrateNN); declareProperty("m_noNNandBroadErrors", m_noNNandBroadErrors); declareProperty("RunningTIDE_Ambi", m_usingTIDE_Ambi); @@ -133,9 +128,6 @@ InDet::PixelClusterOnTrackTool::initialize() { ATH_CHECK (detStore()->retrieve(m_pixelid, "PixelID")); - m_dRMap = SG::ReadHandleKey<InDet::DRMap>(m_dRMapName); - ATH_CHECK( m_dRMap.initialize() ); - m_applyNNcorrection &= !m_splitClusterMapKey.key().empty(); ATH_CHECK(m_splitClusterMapKey.initialize(m_applyNNcorrection)); ATH_CHECK(m_NnClusterizationFactory.retrieve( DisableTool{!m_applyNNcorrection} )); @@ -169,70 +161,6 @@ InDet::PixelClusterOnTrackTool::finalize() { return StatusCode::SUCCESS; } -void -InDet::PixelClusterOnTrackTool::FillFromDataBase() const{ - if (m_fX.empty()) { - const CondAttrListCollection *atrlistcol = nullptr; - if (StatusCode::SUCCESS == detStore()->retrieve(atrlistcol, "/PIXEL/PixelClustering/PixelCovCorr")) { - // loop over objects in collection - for (CondAttrListCollection::const_iterator citr = atrlistcol->begin(); citr != atrlistcol->end(); ++citr) { - std::vector<float> fx, fy, fb, fc, fd; - const coral::AttributeList &atrlist = citr->second; - - fx.push_back(atrlist["fX1"].data<float>()); - fx.push_back(atrlist["fX2"].data<float>()); - fx.push_back(atrlist["fX3"].data<float>()); - fx.push_back(atrlist["fX4"].data<float>()); - fx.push_back(atrlist["fX5"].data<float>()); - fx.push_back(atrlist["fX6"].data<float>()); - fx.push_back(atrlist["fX7"].data<float>()); - m_fX.emplace_back(std::move(fx)); - - fy.push_back(atrlist["fY1"].data<float>()); - fy.push_back(atrlist["fY2"].data<float>()); - fy.push_back(atrlist["fY3"].data<float>()); - fy.push_back(atrlist["fY4"].data<float>()); - fy.push_back(atrlist["fY5"].data<float>()); - fy.push_back(atrlist["fY6"].data<float>()); - fy.push_back(atrlist["fY7"].data<float>()); - m_fY.emplace_back(std::move(fy)); - - fb.push_back(atrlist["fB1"].data<float>()); - fb.push_back(atrlist["fB2"].data<float>()); - fb.push_back(atrlist["fB3"].data<float>()); - fb.push_back(atrlist["fB4"].data<float>()); - fb.push_back(atrlist["fB5"].data<float>()); - fb.push_back(atrlist["fB6"].data<float>()); - fb.push_back(atrlist["fB7"].data<float>()); - m_fB.emplace_back(std::move(fb)); - - fc.push_back(atrlist["fC1"].data<float>()); - fc.push_back(atrlist["fC2"].data<float>()); - fc.push_back(atrlist["fC3"].data<float>()); - fc.push_back(atrlist["fC4"].data<float>()); - fc.push_back(atrlist["fC5"].data<float>()); - fc.push_back(atrlist["fC6"].data<float>()); - fc.push_back(atrlist["fC7"].data<float>()); - m_fC.emplace_back(std::move(fc)); - - fd.push_back(atrlist["fD1"].data<float>()); - fd.push_back(atrlist["fD2"].data<float>()); - fd.push_back(atrlist["fD3"].data<float>()); - fd.push_back(atrlist["fD4"].data<float>()); - fd.push_back(atrlist["fD5"].data<float>()); - fd.push_back(atrlist["fD6"].data<float>()); - fd.push_back(atrlist["fD7"].data<float>()); - m_fD.emplace_back(std::move(fd)); - } - }else { - ATH_MSG_ERROR( "Cannot find covariance corrections for key " - << "/PIXEL/PixelClustering/PixelCovCorr" << " - no correction " ); - - } - } -} - - /////////////////////////////////////////////////////////////////// // Trk::SiClusterOnTrack production /////////////////////////////////////////////////////////////////// @@ -954,102 +882,11 @@ InDet::PixelClusterOnTrackTool::getErrorsTIDE_Ambi(const InDet::PixelCluster *pi return false; } - bool correctdR = false; - - std::array<float, 3> correctiondR = {{0., 0., 0.}}; - - if(m_applydRcorrection){ - SG::ReadHandle<InDet::DRMap> mapHandle(m_dRMap); - if(!mapHandle.isValid()){ - ATH_MSG_ERROR("Error retreving " << m_dRMap.key()); - return false; - } - - if(!mapHandle->empty() && pixelPrepCluster->isSplit() ){ - - const InDetDD::SiDetectorElement *det = pixelPrepCluster->detectorElement(); - - if (det->isBarrel()) { - int pixelLayer = m_pixelid->layer_disk(det->identify()); - - float correctiondRX = 1.0; // correction factor to be applied to covariance(!) - float correctiondRZ = 1.0; // correction factor to be applied to covariance(!) - - const InDetDD::PixelModuleDesign *design(dynamic_cast<const InDetDD::PixelModuleDesign *>(&det->design())); - if (! design){ - ATH_MSG_WARNING("Design cannot be cast to a pixel design"); - return false; - } - const float pitchX = design->phiPitch(); - const float pitchZ = design->etaPitch(); - - ATH_MSG_DEBUG("PixelClusterOnTrackTool: Trying to apply dR correction for pixelLayer " << pixelLayer); - - InDet::DRMap::const_iterator it = mapHandle->find(pixelPrepCluster); - if (it != mapHandle->end()) { - correctdR = true; - float mindX = it->second.first; - float mindZ = it->second.second; - float mindXOverPitch = mindX / pitchX; - float mindZOverPitch = mindZ / pitchZ; - - float dR = std::sqrt(mindX * mindX + mindZ * mindZ); - - ATH_MSG_DEBUG(" ---- Min dX ---- " << mindX << " mindZ " << mindZ); - - if (dR > 0. && dR < 2.0) { - correctiondRX = splineIBLPullX(mindXOverPitch, pixelLayer); - correctiondRZ = splineIBLPullX(mindZOverPitch, pixelLayer); - - if (correctiondRX > 3.75) { - correctiondRX = 3.75; - } - if (correctiondRZ > 3.75) { - correctiondRZ = 3.75; - } - }else { - correctiondRX = 2.35; - correctiondRZ = 1.70; - } - - ATH_MSG_DEBUG( - "PixelClusterOnTrackTool: Correction factor calculation for distX/pitch= " << mindXOverPitch << " -> " << correctiondRX << " distZ/pitch= " << mindZOverPitch << " -> " << - correctiondRZ); - }else { - ATH_MSG_WARNING("Split Pixel cluster not found in dRmap! " << pixelPrepCluster); - } - - ATH_MSG_DEBUG( - " ++++ Hit Error ++++ Layer " << pixelLayer << " Correction Flag " << m_applydRcorrection << " Split " << pixelPrepCluster->isSplit() << " Scaling " << correctiondRX << " " << - correctiondRZ); - - correctiondRX *= correctiondRX; - correctiondRZ *= correctiondRZ; - - correctiondR[0] = correctiondRX * correctiondRX; - correctiondR[1] = correctiondRZ * correctiondRZ; - correctiondR[2] = correctiondRX * correctiondRZ; - } - } - } // AKM: now the not so nice part find the best match position option // Takes the error into account to scale the importance of the measurement if (numberOfSubclusters == 1) { finalposition = allLocalPositions[0]; - - if (correctdR) { - allErrorMatrix[0](0, 0) *= correctiondR[0]; - allErrorMatrix[0](1, 1) *= correctiondR[1]; - allErrorMatrix[0](0, 1) *= correctiondR[2]; - allErrorMatrix[0](1, 0) *= correctiondR[2]; - ATH_MSG_DEBUG( - " ++++ Hit Error ++++ " << numberOfSubclusters << " Split " << pixelPrepCluster->isSplit() << " Scaling " << - std::sqrt(correctiondR[0]) << " " << std::sqrt(correctiondR[1]) << " Rescaled ErrX " << std::sqrt(allErrorMatrix[0](0, - 0)) << " Rescaled ErrZ " << - std::sqrt(allErrorMatrix[0](1, 1))); - } - finalerrormatrix = allErrorMatrix[0]; return true; } @@ -1077,60 +914,6 @@ InDet::PixelClusterOnTrackTool::getErrorsTIDE_Ambi(const InDet::PixelCluster *pi } finalposition = allLocalPositions[index]; - - if (correctdR) { - allErrorMatrix[index](0, 0) *= correctiondR[0]; - allErrorMatrix[index](1, 1) *= correctiondR[1]; - allErrorMatrix[index](0, 1) *= correctiondR[2]; - allErrorMatrix[index](1, 0) *= correctiondR[2]; - ATH_MSG_DEBUG( - " ++++ Hit Error ++++ " << numberOfSubclusters << " Split " << pixelPrepCluster->isSplit() << " Scaling " << - std::sqrt(correctiondR[0]) << " " << std::sqrt(correctiondR[1]) << " Rescaled ErrX " << std::sqrt(allErrorMatrix[index](0, - 0)) << " Rescaled ErrZ " << - std::sqrt(allErrorMatrix[index](1, 1))); - } - finalerrormatrix = allErrorMatrix[index]; return true; } - -double -InDet::PixelClusterOnTrackTool::splineIBLPullX(float x, int layer) const { - std::lock_guard<std::mutex> lock(m_mutex); - FillFromDataBase(); - const int fNp = m_fY[layer].size(); - const int fKstep = 0; - const double fDelta = -1; - const auto result = std::minmax_element(std::begin(m_fX[layer]), std::end(m_fX[layer])); - const double fXmin = *(result.first); - const double fXmax = *(result.second); - - int klow = 0; - - if (x <= fXmin) { - klow = 0; - } else if (x >= fXmax) { - klow = fNp - 1; - } else { - if (fKstep) { - // Equidistant knots, use histogramming - klow = int((x - fXmin) / fDelta); - if (klow < fNp - 1) { - klow = fNp - 1; - } - } else { - int khig = fNp - 1, khalf; - // Non equidistant knots, binary search - while (khig - klow > 1) { - if (x > m_fX[layer][khalf = (klow + khig) / 2]) { - klow = khalf; - } else { - khig = khalf; - } - } - } - } - // Evaluate now - double dx = x - m_fX[layer][klow]; - return(m_fY[layer][klow] + dx * (m_fB[layer][klow] + dx * (m_fC[layer][klow] + dx * m_fD[layer][klow]))); -} diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/CMakeLists.txt b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/CMakeLists.txt index 6d9444aab641a9ed1aad4209df86b6a6190c5fff..dbea24520c3939ddfec39c0bbb93e64262738ea4 100644 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/CMakeLists.txt +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/CMakeLists.txt @@ -13,7 +13,6 @@ atlas_depends_on_subdirs( PUBLIC Control/StoreGate Event/EventPrimitives InnerDetector/InDetRecTools/InDetRecToolInterfaces - MagneticField/MagFieldInterfaces InnerDetector/InDetConditions/InDetBeamSpotService Tracking/TrkEvent/TrkEventPrimitives Tracking/TrkEvent/TrkParameters @@ -27,7 +26,7 @@ atlas_depends_on_subdirs( PUBLIC atlas_add_component( InDetTrigPriVxFinder src/*.cxx src/components/*.cxx - LINK_LIBRARIES GaudiKernel TrigInterfacesLib StoreGateLib SGtests EventPrimitives InDetRecToolInterfaces MagFieldInterfaces TrkEventPrimitives TrkParameters TrkParticleBase TrkTrack VxVertex TrigParticle xAODTracking InDetBeamSpotServiceLib ) + LINK_LIBRARIES GaudiKernel TrigInterfacesLib StoreGateLib SGtests EventPrimitives InDetRecToolInterfaces TrkEventPrimitives TrkParameters TrkParticleBase TrkTrack VxVertex TrigParticle xAODTracking InDetBeamSpotServiceLib MagFieldConditions ) # Install files from the package: atlas_install_headers( InDetTrigPriVxFinder ) diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimary.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimary.h index c9e97d42b12083ec904b22d491e84d932682afd7..da19a2c0da1a48a3f10234a969c4872112561e2a 100755 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimary.h +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimary.h @@ -27,6 +27,8 @@ #include <vector> +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" + /** Primary Vertex Finder. InDetTrigPriVxFinder uses the InDetPrimaryVertexFinderTool in the package InnerDetector/InDetRecTools/InDetPriVxFinderTool. It only gives the @@ -34,12 +36,6 @@ VxContainer. */ -/* Forward declarations */ - -namespace MagField { - class IMagFieldSvc; -} - class IBeamCondSvc; namespace InDet @@ -67,7 +63,7 @@ namespace InDet bool m_createVtxTPLinks; ToolHandle< IVertexFinder > m_VertexFinderTool; - ServiceHandle< MagField::IMagFieldSvc> m_fieldSvc; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; ServiceHandle<IBeamCondSvc> m_BeamCondSvc; }; diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimaryAllTE.h b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimaryAllTE.h index 701d36185122d44f8162d54026968e14300c5956..ec14dcae228c83ed4c1e0e063cd7556ea8d76d65 100755 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimaryAllTE.h +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/InDetTrigPriVxFinder/TrigVxPrimaryAllTE.h @@ -15,6 +15,8 @@ #include "TrigInterfaces/AllTEAlgo.h" #include <vector> +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" + /** Primary Vertex Finder. InDetTrigPriVxFinder uses the InDetPrimaryVertexFinderTool in the package InnerDetector/InDetRecTools/InDetPriVxFinderTool. It only gives the @@ -22,12 +24,6 @@ VxContainer. */ -/* Forward declarations */ - -namespace MagField { - class IMagFieldSvc; -} - class IBeamCondSvc; @@ -53,7 +49,7 @@ namespace InDet bool m_runWithoutField; ToolHandle< IVertexFinder > m_VertexFinderTool; - ServiceHandle< MagField::IMagFieldSvc> m_fieldSvc; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; ServiceHandle<IBeamCondSvc> m_BeamCondSvc; bool m_retrieve_tracks_from_SG; diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimary.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimary.cxx index 79fe7b91b97fc3e3494af902f0bb5ed5b546d739..664013376caa9ac5f09104737ee26026de33ff45 100755 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimary.cxx +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimary.cxx @@ -28,7 +28,6 @@ #include "TrkEventPrimitives/ParamDefs.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "EventPrimitives/EventPrimitivesHelpers.h" #include "InDetBeamSpotService/IBeamCondSvc.h" @@ -43,7 +42,6 @@ namespace InDet m_useTracksAsInput(false), m_createVtxTPLinks(false), m_VertexFinderTool("InDet::InDetPriVxFinderTool/InDetTrigPriVxFinderTool"), - m_fieldSvc("AtlasFieldSvc", n), m_BeamCondSvc("BeamCondSvc", n) { declareProperty("VertexFinderTool",m_VertexFinderTool); @@ -73,26 +71,16 @@ namespace InDet ATH_MSG_FATAL("Failed to retrieve tool " << m_VertexFinderTool); return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else{ - ATH_MSG_INFO("Retrieved tool " << m_VertexFinderTool); - } - if (m_fieldSvc.retrieve().isFailure()){ - ATH_MSG_FATAL("Failed to retrieve tool " << m_fieldSvc); + if (m_fieldCondObjInputKey.initialize().isFailure()){ + ATH_MSG_FATAL("Failed to initialize " << m_fieldCondObjInputKey); return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else { - ATH_MSG_INFO("Retrieved service " << m_fieldSvc); - } if (m_BeamCondSvc.retrieve().isFailure()){ ATH_MSG_FATAL("Failed to retrieve tool " << m_BeamCondSvc); return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else { - ATH_MSG_INFO("Retrieved service " << m_fieldSvc); - - } ATH_MSG_INFO("UseTracksAsInput: " << m_useTracksAsInput << " CreateVtxTrackParticleLinks: " << m_createVtxTPLinks); return HLT::OK; @@ -112,9 +100,15 @@ namespace InDet bool runVtx(true); - ATH_MSG_DEBUG(" In execHLTAlgorithm()"); + EventContext ctx = Gaudi::Hive::currentContext(); + MagField::AtlasFieldCache fieldCache; + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + fieldCondObj->getInitializedCache (fieldCache); + + - if (!m_runWithoutField && !m_fieldSvc->solenoidOn()){ + if (!m_runWithoutField && !fieldCache.solenoidOn()){ ATH_MSG_DEBUG("Solenoid Off and RunWithoutField=False. Algorithm not executed!"); runVtx = false; } diff --git a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimaryAllTE.cxx b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimaryAllTE.cxx index f3815c2efb7f407ad95bc6262cca6572beff6dd1..07a13e422568d5347b4d7c000ab16b737ea9cb69 100755 --- a/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimaryAllTE.cxx +++ b/InnerDetector/InDetTrigRecAlgs/InDetTrigPriVxFinder/src/TrigVxPrimaryAllTE.cxx @@ -14,7 +14,6 @@ #include "TrkEventPrimitives/ParamDefs.h" #include "AthContainers/ConstDataVector.h" -#include "MagFieldInterfaces/IMagFieldSvc.h" #include "InDetBeamSpotService/IBeamCondSvc.h" namespace InDet @@ -24,7 +23,6 @@ namespace InDet : HLT::AllTEAlgo(n, pSvcLoc), m_runWithoutField(false), m_VertexFinderTool("InDet::InDetPriVxFinderTool/InDetTrigPriVxFinderTool"), - m_fieldSvc("AtlasFieldSvc", n), m_BeamCondSvc("BeamCondSvc", n), m_retrieve_tracks_from_SG(false), m_track_collection_from_SG("Unconfigured_TrigVxPrimaryAllTE_For_SG_Access") @@ -59,25 +57,16 @@ namespace InDet msg() << MSG::FATAL << "Failed to retrieve tool " << m_VertexFinderTool << endmsg; return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else{ - msg() << MSG::INFO << "Retrieved tool " << m_VertexFinderTool << endmsg; - } - if (m_fieldSvc.retrieve().isFailure()){ - msg() << MSG::FATAL << "Failed to retrieve service " << m_fieldSvc << endmsg; + if (m_fieldCondObjInputKey.initialize().isFailure()){ + ATH_MSG_FATAL("Failed to initialize " << m_fieldCondObjInputKey); return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else { - msg() << MSG::INFO << "Retrieved tool " << m_fieldSvc << endmsg; - } if (m_BeamCondSvc.retrieve().isFailure()){ msg() << MSG::FATAL << "Failed to retrieve tool " << m_BeamCondSvc << endmsg; return HLT::ErrorCode(HLT::Action::ABORT_JOB, HLT::Reason::BAD_JOB_SETUP); } - else { - msg() << MSG::INFO << "Retrieved service " << m_fieldSvc << endmsg; - } return HLT::OK; } @@ -164,7 +153,13 @@ namespace InDet runVtx = false; } - if (!m_runWithoutField && !m_fieldSvc->solenoidOn()){ + EventContext ctx = Gaudi::Hive::currentContext(); + MagField::AtlasFieldCache fieldCache; + SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCondObjInputKey, ctx}; + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + fieldCondObj->getInitializedCache (fieldCache); + + if (!m_runWithoutField && !fieldCache.solenoidOn()){ if(outputLevel <= MSG::DEBUG) msg() << MSG::DEBUG << "Solenoid Off and RunWithoutField=False. Algorithm not executed!" << endmsg; runVtx = false; diff --git a/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.h b/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.h index b6dc1f34ffce2e01150893a173971af2c1929dbc..8be3f4ddb765bd6e2bf8e8e78996f31b3aebb530 100644 --- a/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.h +++ b/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.h @@ -39,37 +39,24 @@ public: double rmax, double phimin, double phimax, - double bscale) - : m_scale(bscale) - , m_nomScale(bscale) - { - m_min = { zmin, rmin, phimin }; - m_max = { zmax, rmax, phimax }; - } + double bscale); // set ranges void setRange(double zmin, double zmax, double rmin, double rmax, double phimin, - double phimax) - { - m_min = { zmin, rmin, phimin }; - m_max = { zmax, rmax, phimax }; - } + double phimax); // set bscale - void setBscale(double bscale) { m_scale = m_nomScale = bscale; } + void setBscale(double bscale); // scale bscale by a factor - void scaleBscale(double factor) { m_scale = factor * m_nomScale; } + void scaleBscale(double factor); // allocate space to vectors void reserve(int nz, int nr, int nphi, int nfield); - void reserve(int nz, int nr, int nphi) - { - reserve(nz, nr, nphi, nz * nr * nphi); - } + void reserve(int nz, int nr, int nphi); // add elements to vectors - void appendMesh(int i, double mesh) { m_mesh[i].push_back(mesh); } - void appendField(const BFieldVector<T>& field) { m_field.push_back(field); } + void appendMesh(int i, double mesh); + void appendField(const BFieldVector<T>& field); // build Look Up Table void buildLUT(); // test if a point is inside this zone @@ -85,25 +72,25 @@ public: double* ATH_RESTRICT B, double* ATH_RESTRICT deriv = nullptr) const; // accessors - double min(size_t i) const { return m_min[i]; } - double max(size_t i) const { return m_max[i]; } - double zmin() const { return m_min[0]; } - double zmax() const { return m_max[0]; } - double rmin() const { return m_min[1]; } - double rmax() const { return m_max[1]; } - double phimin() const { return m_min[2]; } - double phimax() const { return m_max[2]; } - unsigned nmesh(size_t i) const { return m_mesh[i].size(); } - double mesh(size_t i, size_t j) const { return m_mesh[i][j]; } - unsigned nfield() const { return m_field.size(); } - const BFieldVector<T>& field(size_t i) const { return m_field[i]; } - double bscale() const { return m_scale; } + double min(size_t i) const; + double max(size_t i) const; + double zmin() const; + double zmax() const; + double rmin() const; + double rmax() const; + double phimin() const; + double phimax() const; + unsigned nmesh(size_t i) const; + double mesh(size_t i, size_t j) const; + unsigned nfield() const; + const BFieldVector<T>& field(size_t i) const; + double bscale() const; int memSize() const; protected: std::array<double, 3> m_min; std::array<double, 3> m_max; - std::array<std::vector<double>,3> m_mesh; + std::array<std::vector<double>, 3> m_mesh; private: std::vector<BFieldVector<T>> m_field; @@ -111,10 +98,9 @@ private: double m_nomScale; // nominal m_scale from the map // look-up table and related variables - std::array<std::vector<int>,3> m_LUT; - std::array<double,3> m_invUnit; // inverse unit size in the LUT + std::array<std::vector<int>, 3> m_LUT; + std::array<double, 3> m_invUnit; // inverse unit size in the LUT int m_roff, m_zoff; - }; #include "MagFieldElements/BFieldMesh.icc" #endif diff --git a/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.icc b/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.icc index b43cfc406b0513d8e4bb90dca6ede70cced3f0de..5409a576752b344f775b7f0a23272865fe461225 100644 --- a/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.icc +++ b/MagneticField/MagFieldElements/MagFieldElements/BFieldMesh.icc @@ -3,6 +3,51 @@ */ #include "CxxUtils/vec.h" +// constructor +template<class T> +BFieldMesh<T>::BFieldMesh(double zmin, + double zmax, + double rmin, + double rmax, + double phimin, + double phimax, + double bscale) + : m_scale(bscale) + , m_nomScale(bscale) +{ + m_min = { zmin, rmin, phimin }; + m_max = { zmax, rmax, phimax }; +} +// set ranges +template<class T> +void +BFieldMesh<T>::setRange(double zmin, + double zmax, + double rmin, + double rmax, + double phimin, + double phimax) +{ + m_min = { zmin, rmin, phimin }; + m_max = { zmax, rmax, phimax }; +} + +// set bscale +template<class T> +void +BFieldMesh<T>::setBscale(double bscale) +{ + m_scale = m_nomScale = bscale; +} + +// scale bscale by a factor +template<class T> +void +BFieldMesh<T>::scaleBscale(double factor) +{ + m_scale = factor * m_nomScale; +} + // // Reserve space in the vectors to avoid unnecessary memory re-allocations. // @@ -16,6 +61,77 @@ BFieldMesh<T>::reserve(int nz, int nr, int nphi, int nfield) m_field.reserve(nfield); } +template<class T> +void +BFieldMesh<T>::reserve(int nz, int nr, int nphi) +{ + reserve(nz, nr, nphi, nz * nr * nphi); +} + +// add elements to vectors +template<class T> +void +BFieldMesh<T>::appendMesh(int i, double mesh) +{ + m_mesh[i].push_back(mesh); +} + +template<class T> +void +BFieldMesh<T>::appendField(const BFieldVector<T>& field) +{ + m_field.push_back(field); +} + +// +// Construct the look-up table to accelerate bin-finding. +// +template<class T> +void +BFieldMesh<T>::buildLUT() +{ + for (int j = 0; j < 3; ++j) { // z, r, phi + // align the m_mesh edges to m_min/m_max + m_mesh[j].front() = m_min[j]; + m_mesh[j].back() = m_max[j]; + // determine the unit size, q, to be used in the LUTs + const double width = m_mesh[j].back() - m_mesh[j].front(); + double q(width); + for (unsigned i = 0; i < m_mesh[j].size() - 1; ++i) { + q = std::min(q, m_mesh[j][i + 1] - m_mesh[j][i]); + } + // find the number of units in the LUT + int n = int(width / q) + 1; + q = width / (n + 0.5); + m_invUnit[j] = 1.0 / q; // new unit size + ++n; + int m = 0; // mesh number + for (int i = 0; i < n; ++i) { // LUT index + if (i * q + m_mesh[j].front() > m_mesh[j][m + 1]) { + m++; + } + m_LUT[j].push_back(m); + } + } + m_roff = m_mesh[2].size(); // index offset for incrementing r by 1 + m_zoff = m_roff * m_mesh[1].size(); // index offset for incrementing z by 1 +} + +template<class T> +int +BFieldMesh<T>::memSize() const +{ + int size = 0; + size += sizeof(double) * 10; + size += sizeof(int) * 2; + for (int i = 0; i < 3; ++i) { + size += sizeof(double) * m_mesh[i].capacity(); + size += sizeof(int) * m_LUT[i].capacity(); + } + size += sizeof(BFieldVector<T>) * m_field.capacity(); + return size; +} + // // Test if a point (z,r,phi) is inside this mesh region. // @@ -244,53 +360,95 @@ BFieldMesh<T>::getB(const double* ATH_RESTRICT xyz, deriv[8] = dBdz[0]; } } +// accessors +template<class T> +double +BFieldMesh<T>::min(size_t i) const +{ + return m_min[i]; +} -// -// Construct the look-up table to accelerate bin-finding. -// template<class T> -void -BFieldMesh<T>::buildLUT() +double +BFieldMesh<T>::max(size_t i) const { - for (int j = 0; j < 3; ++j) { // z, r, phi - // align the m_mesh edges to m_min/m_max - m_mesh[j].front() = m_min[j]; - m_mesh[j].back() = m_max[j]; - // determine the unit size, q, to be used in the LUTs - const double width = m_mesh[j].back() - m_mesh[j].front(); - double q(width); - for (unsigned i = 0; i < m_mesh[j].size() - 1; ++i) { - q = std::min(q, m_mesh[j][i + 1] - m_mesh[j][i]); - } - // find the number of units in the LUT - int n = int(width / q) + 1; - q = width / (n + 0.5); - m_invUnit[j] = 1.0 / q; // new unit size - ++n; - int m = 0; // mesh number - for (int i = 0; i < n; ++i) { // LUT index - if (i * q + m_mesh[j].front() > m_mesh[j][m + 1]) { - m++; - } - m_LUT[j].push_back(m); - } - } - m_roff = m_mesh[2].size(); // index offset for incrementing r by 1 - m_zoff = m_roff * m_mesh[1].size(); // index offset for incrementing z by 1 + return m_max[i]; } template<class T> -int -BFieldMesh<T>::memSize() const +double +BFieldMesh<T>::zmin() const { - int size = 0; - size += sizeof(double) * 10; - size += sizeof(int) * 2; - for (int i = 0; i < 3; ++i) { - size += sizeof(double) * m_mesh[i].capacity(); - size += sizeof(int) * m_LUT[i].capacity(); - } - size += sizeof(BFieldVector<T>) * m_field.capacity(); - return size; + return m_min[0]; +} + +template<class T> +double +BFieldMesh<T>::zmax() const +{ + return m_max[0]; +} + +template<class T> +double +BFieldMesh<T>::rmin() const +{ + return m_min[1]; +} + +template<class T> +double +BFieldMesh<T>::rmax() const +{ + return m_max[1]; +} + +template<class T> +double +BFieldMesh<T>::phimin() const +{ + return m_min[2]; +} + +template<class T> +double +BFieldMesh<T>::phimax() const +{ + return m_max[2]; +} + +template<class T> +unsigned +BFieldMesh<T>::nmesh(size_t i) const +{ + return m_mesh[i].size(); +} + +template<class T> +double +BFieldMesh<T>::mesh(size_t i, size_t j) const +{ + return m_mesh[i][j]; +} + +template<class T> +unsigned +BFieldMesh<T>::nfield() const +{ + return m_field.size(); +} + +template<class T> +const BFieldVector<T>& +BFieldMesh<T>::field(size_t i) const +{ + return m_field[i]; +} + +template<class T> +double +BFieldMesh<T>::bscale() const +{ + return m_scale; } diff --git a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvc.h b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvc.h deleted file mode 100644 index 15a5e27d213e78880aa0f3adc08a4ef38892ac0c..0000000000000000000000000000000000000000 --- a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvc.h +++ /dev/null @@ -1,261 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// AtlasFieldSvc.h, (c) ATLAS Detector software -/////////////////////////////////////////////////////////////////// - -#ifndef MAGFIELDSERVICES_ATLASFIELDSVC_H -#define MAGFIELDSERVICES_ATLASFIELDSVC_H 1 - -// FrameWork includes -#include "AthenaBaseComps/AthService.h" -#include "GaudiKernel/ToolHandle.h" -#include "GaudiKernel/IIncidentListener.h" - -// MagField includes -#include "MagFieldInterfaces/IMagFieldSvc.h" -#include "MagFieldServices/AtlasFieldSvcTLS.h" -#include "MagFieldElements/BFieldCache.h" -#include "MagFieldElements/BFieldCacheZR.h" -#include "MagFieldElements/BFieldCond.h" -#include "MagFieldElements/BFieldZone.h" -#include "MagFieldElements/BFieldMeshZR.h" - -// STL includes -#include <vector> -#include <iostream> - -#include "CxxUtils/checker_macros.h" - -// forward declarations -class CondAttrListCollection; -class BFieldZone; -class TFile; -class Incident; - -namespace MagField { - - /** @class AtlasFieldSvc - @author Elmar.Ritsch -at- cern.ch - */ - - class ATLAS_NOT_THREAD_SAFE AtlasFieldSvc : public extends<AthService, IMagFieldSvc, IIncidentListener> { - public: - - //** Constructor with parameters */ - AtlasFieldSvc( const std::string& name, ISvcLocator* pSvcLocator ); - - /** Destructor */ - virtual ~AtlasFieldSvc(); - - /** Athena algorithm's interface methods */ - virtual StatusCode initialize() override; - virtual StatusCode finalize() override; - - /** Read **/ - virtual void handle(const Incident& runIncident) override; - - /** Call back for possible magnet current update **/ - StatusCode updateCurrent(IOVSVC_CALLBACK_ARGS); - - /** Call back for possible magnet filename update **/ - StatusCode updateMapFilenames(IOVSVC_CALLBACK_ARGS); - - /** get B field value at given position */ - /** xyz[3] is in mm, bxyz[3] is in kT */ - /** if deriv[9] is given, field derivatives are returned in kT/mm */ - virtual void getField(const double *xyz, double *bxyz, double *deriv = nullptr) const override final; - virtual void getFieldZR(const double *xyz, double *bxyz, double *deriv = nullptr) const override final; - - private: - /** Retrieve, initialize and return a thread-local storage object */ - inline struct AtlasFieldSvcTLS &getAtlasFieldSvcTLS() const; - - /* // Methods called to get field - // pointer to actual function - typedef void (AtlasFieldSvc::*FuncPtr)(const double *, double *, double *); - FuncPtr getFieldActual; - // standard calculation - void getFieldStandard(const double *xyz, double *bxyz, double *deriv = 0); - // manipulated field - void getFieldManipulated(const double *xyz, double *bxyz, double *deriv = 0); - */ - - // Functions used by getField[ZR] - // search for a "zone" to which the point (z,r,phi) belongs - inline const BFieldZone* findZone( double z, double r, double phi ) const; - // slow search is used during initialization to build the LUT - BFieldZone* findZoneSlow( double z, double r, double phi ); - // fill the cache. return true if successful - // return false if the position is outside the valid map volume - inline bool fillFieldCache(double z, double r, double phi, AtlasFieldSvcTLS &tls) const; - inline bool fillFieldCacheZR(double z, double r, AtlasFieldSvcTLS &tls) const; - - // set currents from when DCS is not read - StatusCode importCurrents(AtlasFieldSvcTLS &tls); - // initialize map - StatusCode initializeMap(AtlasFieldSvcTLS &tls); - // read the field map from an ASCII or ROOT file - StatusCode readMap( const char* filename ); - StatusCode readMap( std::istream& input ); - StatusCode readMap( TFile* rootfile ); - // write the field map to a ROOT file - void writeMap( TFile* rootfile ) const; - // clear the field map - void clearMap(AtlasFieldSvcTLS &tls); - - // utility functions used by readMap - int read_packed_data( std::istream& input, std::vector<int>& data ) const; - int read_packed_int( std::istream& input, int &n ) const; - void buildLUT(); - void buildZR(); - - // scale field according to the current - void scaleField(); - - /** approximate memory footprint in bytes */ - int memSize() const; - - /** Data Members **/ - - // field map names - std::string m_fullMapFilename; // all magnets on - std::string m_soleMapFilename; // solenoid on / toroid off - std::string m_toroMapFilename; // toroid on / solenoid off - // current associated with the map - double m_mapSoleCurrent; // solenoid current in A - double m_mapToroCurrent; // toroid current in A - // threshold below which currents are considered zero - double m_soleMinCurrent; // minimum solenoid current to be considered ON - double m_toroMinCurrent; // minimum toroid current to be considered ON - // flag to use magnet current from DCS in COOL - bool m_useDCS; - // COOL folder name containing current information - std::string m_coolCurrentsFolderName; - // flag to read magnet map filenames from COOL - bool m_useMapsFromCOOL; - // COOL folder name containing field maps - std::string m_coolMapsFolderName; - // actual current if DCS is not in use - double m_useSoleCurrent; // solenoid current in A - double m_useToroCurrent; // toroid current in A - // flag to skip current rescale and use map currents as they are - bool m_lockMapCurrents; - - // handle for COOL field map filenames - const DataHandle<CondAttrListCollection> m_mapHandle; - // handle for COOL currents - const DataHandle<CondAttrListCollection> m_currentHandle; - - // full 3d map (made of multiple zones) - std::vector<BFieldZone> m_zone; - - // fast 2d map (made of one zone) - BFieldMeshZR *m_meshZR; - - // data members used in zone-finding - std::vector<double> m_edge[3]; // zone boundaries in z, r, phi - std::vector<int> m_edgeLUT[3]; // look-up table for zone edges - double m_invq[3]; // 1/stepsize in m_edgeLUT - std::vector<const BFieldZone*> m_zoneLUT; // look-up table for zones - // more data members to speed up zone-finding - double m_zmin; // minimum z - double m_zmax; // maximum z - int m_nz; // number of z bins in zoneLUT - double m_rmax; // maximum r - int m_nr; // number of r bins in zoneLUT - int m_nphi; // number of phi bins in zoneLUT - - /* // handle for field manipulator, if any - bool m_doManipulation; - ToolHandle<IMagFieldManipulator> m_manipulator; */ - - }; -} - -// inline functions - -// -// Initialize and return a thread-local storage object -// -struct MagField::AtlasFieldSvcTLS& -MagField::AtlasFieldSvc::getAtlasFieldSvcTLS() const { - static thread_local AtlasFieldSvcTLS tls = AtlasFieldSvcTLS(); - // return thread-local object - return tls; -} - -// -// Search for the zone that contains a point (z, r, phi) -// Fast version utilizing the LUT. -// -const BFieldZone* -MagField::AtlasFieldSvc::findZone( double z, double r, double phi ) const -{ - // make sure it's inside the largest zone - // NB: the sign of the logic is chosen in order to return 0 on NaN inputs - if ( z >= m_zmin && z <= m_zmax && r <= m_rmax ) { - // find the edges of the zone - // z - const std::vector<double>& edgez(m_edge[0]); - int iz = int(m_invq[0]*(z-m_zmin)); // index to LUT - iz = m_edgeLUT[0][iz]; // tentative index from LUT - if ( z > edgez[iz+1] ) iz++; - // r - const std::vector<double>& edger(m_edge[1]); - int ir = int(m_invq[1]*r); // index to LUT - note minimum r is always 0 - ir = m_edgeLUT[1][ir]; // tentative index from LUT - if ( r > edger[ir+1] ) ir++; - // phi - const std::vector<double>& edgephi(m_edge[2]); - int iphi = int(m_invq[2]*(phi+M_PI)); // index to LUT - minimum phi is -pi - iphi = m_edgeLUT[2][iphi]; // tentative index from LUT - if ( phi > edgephi[iphi+1] ) iphi++; - // use LUT to get the zone - return m_zoneLUT[(iz*m_nr+ir)*m_nphi+iphi]; - } else { - return nullptr; - } -} - -/** fill given magnetic field zone */ -bool -MagField::AtlasFieldSvc::fillFieldCache(double z, double r, double phi, AtlasFieldSvcTLS &tls) const -{ - // search for the zone - const BFieldZone* zone = findZone( z, r, phi ); - if ( zone == nullptr ) { - // outsize all zones - return false; - } - // fill the cache - zone->getCache( z, r, phi, tls.cache ); - - // pointer to the conductors in the zone - tls.cond = zone->condVector(); - - // set a flag that the thread-local storage is initialized - tls.isInitialized = true; - - return true; -} - -/** fill Z-R cache for solenoid */ -bool -MagField::AtlasFieldSvc::fillFieldCacheZR(double z, double r, AtlasFieldSvcTLS &tls) const -{ - // is it inside the solenoid zone? - if ( m_meshZR && m_meshZR->inside( z, r ) ) { - // fill the cache - m_meshZR->getCache( z, r, tls.cacheZR ); - } else { - // outside solenoid - return false; - } - - return true; -} - -#endif //> !MAGFIELDSERVICES_ATLASFIELDSVC_H diff --git a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvcTLS.h b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvcTLS.h deleted file mode 100644 index 1b9784384edf5fb44bcac7e24044cc43e0e627c3..0000000000000000000000000000000000000000 --- a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldSvcTLS.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @author Elmar.Ritsch -at- cern.ch - * @author Robert.Langenberg -at- cern.ch - * @date March 2017 - * @brief Thread-local storage object used by MagField::AtlasFieldSvc - */ - -#ifndef MAGFIELDSERVICES_ATLASFIELDSVCTLS_H -#define MAGFIELDSERVICES_ATLASFIELDSVCTLS_H 1 - -// MagField includes -#include "MagFieldElements/BFieldCond.h" -#include "MagFieldElements/BFieldZone.h" -#include "MagFieldElements/BFieldMeshZR.h" - -namespace MagField { - -/** @class AtlasFieldSvcTLS - * - * @brief Thread-local storage object used by MagField::AtlasFieldSvc - * - * @author Elmar.Ritsch -at- cern.ch - * @author Robert.Langenberg -at- cern.ch - */ -struct AtlasFieldSvcTLS { - - /// Constructor - AtlasFieldSvcTLS() : isInitialized(false), cond(nullptr), cache(), cacheZR() { ; } - - /// Is the current AtlasFieldSvcTLS object properly initialized - bool isInitialized; - - /// Pointer to the conductors in the current field zone (to compute Biot-Savart component) - const std::vector<BFieldCond> *cond; - - /// Full 3d field - BFieldCache cache; - /// Fast 2d field - BFieldCacheZR cacheZR; -}; - -} // namespace MagField - -#endif // MAGFIELDSERVICES_ATLASFIELDSVCTLS_H diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py index 6183fb6b4db153cfed674a73eb06218f2b154aec..1de8bd82eab16e24f027aa83e2c90f52fed4caf6 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfig.py @@ -20,21 +20,6 @@ def MagneticFieldSvcCfg(flags, **kwargs): result.merge(addFolders(flags, ['/EXT/DCS/MAGNETS/SENSORDATA'], detDb='DCS_OFL', className="CondAttrListCollection") ) - # AtlasFieldSvc - old one - afsArgs = { - "name": "AtlasFieldSvc", - } - if flags.Common.isOnline: - afsArgs.update( UseDCS = False ) - afsArgs.update( UseSoleCurrent = 7730 ) - afsArgs.update( UseToroCurrent = 20400 ) - else: - afsArgs.update( UseDCS = True ) - if 'UseDCS' in kwargs: - afsArgs['UseDCS'] = kwargs['UseDCS'] - mag_field_svc = CompFactory.MagField.AtlasFieldSvc(**afsArgs) - result.addService(mag_field_svc, primary=True) - # AtlasFieldMapCondAlg - for reading in map afmArgs = { "name": "AtlasFieldMapCondAlg", @@ -91,7 +76,7 @@ if __name__=="__main__": cfg=ComponentAccumulator() acc = MagneticFieldSvcCfg(ConfigFlags) - log.verbose(acc.getPrimary()) + log.verbose(acc) cfg.merge(acc) diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesConfigDb.py b/MagneticField/MagFieldServices/python/MagFieldServicesConfigDb.py index 7ae3d14208463c0d7e46e2fad1e1c3387c6d694b..bf66b127b0715ca101a4ccf0f66e38d602fcdde3 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesConfigDb.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesConfigDb.py @@ -2,8 +2,7 @@ # database entries for https://twiki.cern.ch/twiki/bin/view/AtlasComputing/ConfiguredFactory#Factory_functions_vs_derived_cla # Valerio Ippolito - Harvard University -from AthenaCommon.CfgGetter import addService,addAlgorithm +from AthenaCommon.CfgGetter import addAlgorithm -addService('MagFieldServices.MagFieldServicesSetup.GetFieldSvc', 'AtlasFieldSvc') addAlgorithm('MagFieldServices.MagFieldServicesSetup.GetFieldMapCondAlg', 'AtlasFieldMapCondAlg') addAlgorithm('MagFieldServices.MagFieldServicesSetup.GetFieldCacheCondAlg', 'AtlasFieldCacheCondAlg') diff --git a/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py b/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py index 832602411d1d7ed01cde40417f7fe39818a9171a..1f9275c7a64401ba3a2c73b291d446866a0ccc43 100644 --- a/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py +++ b/MagneticField/MagFieldServices/python/MagFieldServicesSetup.py @@ -1,6 +1,6 @@ # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -# JobOption fragment to set up the AtlasFieldSvc +# JobOption fragment to set up the magnetic field services and algorithms # Valerio Ippolito - Harvard University # inspired by https://svnweb.cern.ch/trac/atlasoff/browser/MuonSpectrometer/MuonCnv/MuonCnvExample/trunk/python/MuonCalibConfig.py @@ -9,22 +9,10 @@ from AthenaCommon.Logging import logging logging.getLogger().info("Importing %s", __name__) from AthenaCommon.AthenaCommonFlags import athenaCommonFlags -from AthenaCommon.GlobalFlags import GlobalFlags from AthenaCommon import CfgMgr -MagField__AtlasFieldSvc=CfgMgr.MagField__AtlasFieldSvc #-------------------------------------------------------------- -def AtlasFieldSvc(name="AtlasFieldSvc",**kwargs): - if athenaCommonFlags.isOnline(): - kwargs.setdefault( "UseDCS", False ) - kwargs.setdefault( "UseSoleCurrent", 7730 ) - kwargs.setdefault( "UseToroCurrent", 20400 ) - else: - kwargs.setdefault( "UseDCS", True ) - - return CfgMgr.MagField__AtlasFieldSvc(name,**kwargs) - def AtlasFieldCacheCondAlg(name="AtlasFieldCacheCondAlg",**kwargs): if athenaCommonFlags.isOnline(): kwargs.setdefault( "UseDCS", False ) @@ -50,12 +38,6 @@ def AtlasFieldMapCondAlg(name="AtlasFieldMapCondAlg",**kwargs): def H8FieldSvc(name="H8FieldSvc",**kwargs): return CfgMgr.MagField__H8FieldSvc(name,**kwargs) -def GetFieldSvc(name="AtlasFieldSvc",**kwargs): - if GlobalFlags.DetGeo == 'ctbh8': - return H8FieldSvc(name, **kwargs) - else: - return AtlasFieldSvc(name, **kwargs) - def GetFieldCacheCondAlg(name="AtlasFieldCacheCondAlg",**kwargs): return AtlasFieldCacheCondAlg(name, **kwargs) diff --git a/MagneticField/MagFieldServices/python/SetupField.py b/MagneticField/MagFieldServices/python/SetupField.py index 0806fe6e2ed75ad59a13fa2ab4a755c7b958e973..0b8bcf4d0dc6c99627440c6e2c731c8f81504edc 100755 --- a/MagneticField/MagFieldServices/python/SetupField.py +++ b/MagneticField/MagFieldServices/python/SetupField.py @@ -15,11 +15,7 @@ conddb.addFolderSplitMC('GLOBAL','/GLOBAL/BField/Maps <noover/>','/GLOBAL/BField if not athenaCommonFlags.isOnline(): conddb.addFolder('DCS_OFL','/EXT/DCS/MAGNETS/SENSORDATA', className="CondAttrListCollection") -# import the field service and conditions algs (service is 'to be removed') -# (it is MagFieldServices.MagFieldServicesConfig which takes care of configuration) -from AthenaCommon.CfgGetter import getService,getAlgorithm -getService('AtlasFieldSvc') - +from AthenaCommon.CfgGetter import getAlgorithm from AthenaCommon.AlgSequence import AthSequencer condSequence = AthSequencer("AthCondSeq") condSequence += getAlgorithm( "AtlasFieldMapCondAlg" ) diff --git a/MagneticField/MagFieldServices/src/AtlasFieldSvc.cxx b/MagneticField/MagFieldServices/src/AtlasFieldSvc.cxx deleted file mode 100644 index 883c5901c234cc5e485e8e6521ac84b038e2bced..0000000000000000000000000000000000000000 --- a/MagneticField/MagFieldServices/src/AtlasFieldSvc.cxx +++ /dev/null @@ -1,1563 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/////////////////////////////////////////////////////////////////// -// AtlasFieldSvc.cxx, (c) ATLAS Detector software -/////////////////////////////////////////////////////////////////// - -#include <iostream> - -// ISF_Services include -#include "MagFieldServices/AtlasFieldSvc.h" - -// PathResolver -#include "PathResolver/PathResolver.h" - -// StoreGate -#include "StoreGate/StoreGateSvc.h" - -// Athena Pool -#include "AthenaPoolUtilities/AthenaAttributeList.h" -#include "AthenaPoolUtilities/CondAttrListCollection.h" - -// IncidentSvc -#include "GaudiKernel/IIncidentSvc.h" - -// CLHEP -#include "CLHEP/Units/SystemOfUnits.h" - -// ROOT -#include "TFile.h" -#include "TTree.h" - -/** Constructor **/ -MagField::AtlasFieldSvc::AtlasFieldSvc(const std::string& name,ISvcLocator* svc) : - base_class(name,svc), - m_fullMapFilename("MagneticFieldMaps/bfieldmap_7730_20400_14m.root"), - m_soleMapFilename("MagneticFieldMaps/bfieldmap_7730_0_14m.root"), - m_toroMapFilename("MagneticFieldMaps/bfieldmap_0_20400_14m.root"), - m_mapSoleCurrent(7730.), - m_mapToroCurrent(20400.), - m_soleMinCurrent(1.0), - m_toroMinCurrent(1.0), - m_useDCS(false), - m_coolCurrentsFolderName("/EXT/DCS/MAGNETS/SENSORDATA"), - m_useMapsFromCOOL(true), - m_coolMapsFolderName("/GLOBAL/BField/Maps"), - m_useSoleCurrent(7730.), - m_useToroCurrent(20400.), - m_lockMapCurrents(false), - m_mapHandle(), - m_currentHandle(), - m_zone(), - m_meshZR(nullptr), - m_edge(), - m_edgeLUT(), - m_invq(), - m_zoneLUT(), - m_zmin(0.), - m_zmax(0.), - m_nz(0), - m_rmax(0.), - m_nr(0), - m_nphi(0) - /* , - m_doManipulation(false), - m_manipulator("undefined") */ -{ - declareProperty("FullMapFile", m_fullMapFilename, "File storing the full magnetic field map"); - declareProperty("SoleMapFile", m_soleMapFilename, "File storing the solenoid-only magnetic field map"); - declareProperty("ToroMapFile", m_toroMapFilename, "File storing the toroid-only magnetic field map"); - declareProperty("MapSoleCurrent", m_mapSoleCurrent, "Nominal solenoid current (A)"); - declareProperty("MapToroCurrent", m_mapToroCurrent, "Nominal toroid current (A)"); - declareProperty("SoleMinCurrent", m_soleMinCurrent, "Minimum solenoid current (A) for which solenoid is considered ON"); - declareProperty("ToroMinCurrent", m_toroMinCurrent, "Minimum toroid current (A) for which toroid is considered ON"); - declareProperty("UseDCS", m_useDCS, "Get magnet currents from DCS through COOL"); - declareProperty("COOLCurrentsFolderName", m_coolCurrentsFolderName, "Name of the COOL folder containing magnet currents"); - declareProperty("UseMapsFromCOOL", m_useMapsFromCOOL, "Get magnetic field map filenames from COOL"); - declareProperty("COOLMapsFolderName", m_coolMapsFolderName, "Name of the COOL folder containing field maps"); - declareProperty("UseSoleCurrent", m_useSoleCurrent, "Set actual solenoid current (A)"); - declareProperty("UseToroCurrent", m_useToroCurrent, "Set actual toroid current (A)"); - declareProperty("LockMapCurrents", m_lockMapCurrents, "Do not rescale currents (use the map values)"); - /* declareProperty("DoManipulation", m_doManipulation, "Apply field manipulation"); - declareProperty("ManipulatorTool", m_manipulator, "Tool handle for field manipulation"); */ -} - -MagField::AtlasFieldSvc::~AtlasFieldSvc() -{ - delete m_meshZR; -} - -/** framework methods */ -StatusCode MagField::AtlasFieldSvc::initialize( ) -{ - ATH_MSG_INFO( "initialize() ..." ); - - // determine map location from COOL, if available - if ( m_useMapsFromCOOL ) { - // Register callback - StoreGateSvc* detStore; - if ( service( "DetectorStore", detStore ).isFailure() ) { - ATH_MSG_FATAL( "Could not get detector store" ); - return StatusCode::FAILURE; - } - std::string folder( m_coolMapsFolderName ); - ATH_MSG_INFO("maps will be chosen reading COOL folder " << folder); - if ( detStore->regFcn( &MagField::AtlasFieldSvc::updateMapFilenames, this, - m_mapHandle, folder ).isFailure() ) { - ATH_MSG_FATAL( "Could not book callback for " << folder ); - return StatusCode::FAILURE; - } - } - - // are we going to get the magnet currents from DCS? - if ( m_useDCS ) { - // Register callback - StoreGateSvc* detStore; - if ( service( "DetectorStore", detStore ).isFailure() ) { - ATH_MSG_FATAL( "Could not get detector store" ); - return StatusCode::FAILURE; - } - std::string folder( m_coolCurrentsFolderName ); - ATH_MSG_INFO("magnet currents will be read from COOL folder " << folder); - if ( detStore->regFcn( &MagField::AtlasFieldSvc::updateCurrent, this, - m_currentHandle, folder ).isFailure() ) { - ATH_MSG_FATAL( "Could not book callback for " << folder ); - return StatusCode::FAILURE; - } - ATH_MSG_INFO( "Booked callback for " << folder ); - // actual initalization has to wait for the fist callback - } else { - ATH_MSG_INFO( "Currents are set-up by jobOptions - delaying map initialization until BeginRun incident happens" ); - - ServiceHandle<IIncidentSvc> incidentSvc("IncidentSvc", name()); - if (incidentSvc.retrieve().isFailure()) { - ATH_MSG_FATAL( "Unable to retrieve the IncidentSvc" ); - return StatusCode::FAILURE; - } else { - incidentSvc->addListener( this, IncidentType::BeginRun ); - ATH_MSG_INFO( "Added listener to BeginRun incident" ); - } - } - - // retrieve thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - - // clear the map for zero field - clearMap(tls); - setSolenoidCurrent(0.0); - setToroidCurrent(0.0); - - /* // retrieve the manipulator tool - if (m_doManipulation) { - ATH_MSG_INFO( "field will be manipulated, retrieving tool" ); - if (m_manipulator.retrieve().isFailure()) { - ATH_MSG_FATAL( "unable to retrieve manipulation tool" ); - } else { - ATH_MSG_INFO( "manipulation tool retrieved" ); - getFieldActual = &MagField::AtlasFieldSvc::getFieldManipulated; - } - } else { - ATH_MSG_INFO( "no manipulation set up" ); - getFieldActual = &MagField::AtlasFieldSvc::getFieldStandard; - } */ - - ATH_MSG_INFO( "initialize() successful" ); - return StatusCode::SUCCESS; -} - -void MagField::AtlasFieldSvc::handle(const Incident& runIncident) -{ - ATH_MSG_INFO( "handling incidents ..." ); - if ( !m_useDCS && runIncident.type() == IncidentType::BeginRun) { - // get thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - - if ( importCurrents(tls).isFailure() ) { - ATH_MSG_FATAL( "Failure in manual setting of currents" ); - } else { - ATH_MSG_INFO( "BeginRun incident handled" ); - } - } - ATH_MSG_INFO( "incidents handled successfully" ); -} - -StatusCode MagField::AtlasFieldSvc::importCurrents(AtlasFieldSvcTLS &tls) -{ - ATH_MSG_INFO( "importCurrents() ..." ); - - // take the current values from JobOptions - double solcur(m_useSoleCurrent); - double torcur(m_useToroCurrent); - if ( solcur < m_soleMinCurrent ) { - solcur = 0.0; - ATH_MSG_INFO( "Solenoid is off" ); - } - if ( torcur < m_toroMinCurrent) { - torcur = 0.0; - ATH_MSG_INFO( "Toroids are off" ); - } - setSolenoidCurrent(solcur); - setToroidCurrent(torcur); - // read the map file - if ( initializeMap(tls).isFailure() ) { - ATH_MSG_FATAL( "Failed to initialize field map" ); - return StatusCode::FAILURE; - } - - ATH_MSG_INFO( "Currents imported and map initialized" ); - return StatusCode::SUCCESS; -} - -/** callback for possible magnet current update **/ -StatusCode MagField::AtlasFieldSvc::updateCurrent(IOVSVC_CALLBACK_ARGS) -{ - // get magnet currents from DCS - double solcur(0.); - double torcur(0.); - bool gotsol(false); - bool gottor(false); - - // due to inconsistencies between CONDBR2 and OFLP200/COMP200 (the former includes channel names - // in the /EXT/DCS/MAGNETS/SENSORDATA folder, the latter don't), we try to read currents in - // both ways - bool hasChanNames(false); - - ATH_MSG_INFO( "Attempt 1 at reading currents from DCS (using channel name)" ); - for ( CondAttrListCollection::const_iterator itr = m_currentHandle->begin(); - itr != m_currentHandle->end(); ++itr ) { - - std::string name = m_currentHandle->chanName(itr->first); - ATH_MSG_INFO( "Trying to read from DCS: [channel name, index, value] " << name << " , " << itr->first << " , " << itr->second["value"].data<float>() ); - - if (name.compare("") != 0) { - hasChanNames = true; - } - - if ( name.compare("CentralSol_Current") == 0 ) { - // channel 1 is solenoid current - solcur = itr->second["value"].data<float>(); - gotsol = true; - } else if ( name.compare("Toroids_Current") == 0 ) { - // channel 3 is toroid current - torcur = itr->second["value"].data<float>(); - gottor = true; - } - } - if ( !hasChanNames ) { - ATH_MSG_INFO( "Attempt 2 at reading currents from DCS (using channel index)" ); - // in no channel is named, try again using channel index instead - for ( CondAttrListCollection::const_iterator itr = m_currentHandle->begin(); - itr != m_currentHandle->end(); ++itr ) { - - if ( itr->first == 1 ) { - // channel 1 is solenoid current - solcur = itr->second["value"].data<float>(); - gotsol = true; - } else if ( itr->first == 3 ) { - // channel 3 is toroid current - torcur = itr->second["value"].data<float>(); - gottor = true; - } - } - } - - if ( !gotsol || !gottor ) { - if ( !gotsol ) ATH_MSG_ERROR( "Missing solenoid current in DCS information" ); - if ( !gottor ) ATH_MSG_ERROR( "Missing toroid current in DCS information" ); - return StatusCode::FAILURE; - } - ATH_MSG_INFO( "Currents read from DCS: solenoid " << solcur << " toroid " << torcur ); - // round to zero if close to zero - if ( solcur < m_soleMinCurrent) { - solcur = 0.0; - ATH_MSG_INFO( "Solenoid is off" ); - } - if ( torcur < m_toroMinCurrent) { - torcur = 0.0; - ATH_MSG_INFO( "Toroids are off" ); - } - // did solenoid/toroid change status between on and off? - bool solWasOn( solenoidOn() ); - bool torWasOn( toroidOn() ); - setSolenoidCurrent( solcur ); - setToroidCurrent( torcur ); - if ( solenoidOn() != solWasOn || toroidOn() != torWasOn ) { - // get thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - - // map has changed. re-initialize the map - if ( initializeMap(tls).isFailure() ) { - ATH_MSG_ERROR( "Failed to re-initialize field map" ); - return StatusCode::FAILURE; - } - } else { - // map is still valid. just scale the currents - if (!m_lockMapCurrents) - scaleField(); - else - ATH_MSG_INFO( "Currents are NOT scaled - using map values sole=" << m_mapSoleCurrent << " toro=" << m_mapToroCurrent ); - } - - return StatusCode::SUCCESS; -} - -/** callback for possible field map filenames update **/ -StatusCode MagField::AtlasFieldSvc::updateMapFilenames(IOVSVC_CALLBACK_ARGS) -{ - ATH_MSG_INFO( "reading magnetic field map filenames from COOL" ); - - ATH_MSG_DEBUG( "mapHandle isValid " << (int)m_mapHandle.isValid() ); - ATH_MSG_DEBUG( "mapHandle key " << m_mapHandle.key() ); - ATH_MSG_DEBUG( "mapHandle size " << m_mapHandle->size() ); - - - std::string fullMapFilename(""); - std::string soleMapFilename(""); - std::string toroMapFilename(""); - - for (CondAttrListCollection::const_iterator itr = m_mapHandle->begin(); itr != m_mapHandle->end(); ++itr) { - const coral::AttributeList &attr = itr->second; - const std::string &mapType = attr["FieldType"].data<std::string>(); - const std::string &mapFile = attr["MapFileName"].data<std::string>(); - const float soleCur = attr["SolenoidCurrent"].data<float>(); - const float toroCur = attr["ToroidCurrent"].data<float>(); - - ATH_MSG_INFO("found map of type " << mapType << " with soleCur=" << soleCur << " toroCur=" << toroCur << " (path " << mapFile << ")"); - - // first 5 letters are reserved (like "file:") - const std::string mapFile_decoded = mapFile.substr(5); - if (mapType == "GlobalMap") { - fullMapFilename = mapFile_decoded; - m_mapSoleCurrent = soleCur; - m_mapToroCurrent = toroCur; - } else if (mapType == "SolenoidMap") { - soleMapFilename = mapFile_decoded; - } else if (mapType == "ToroidMap") { - toroMapFilename = mapFile_decoded; - } - // note: the idea is that the folder contains exactly three maps - // (if it contains more than 3 maps, then this logic doesn't work perfectly) - // nominal currents are read from the global map - } - - if (fullMapFilename.empty() || soleMapFilename.empty() || toroMapFilename.empty()) { - ATH_MSG_ERROR("unexpected content in COOL field map folder"); - return StatusCode::FAILURE; - } - - // check if maps really changed - if (fullMapFilename != m_fullMapFilename || soleMapFilename != m_soleMapFilename || toroMapFilename != m_toroMapFilename) { - ATH_MSG_INFO( "map set is new! reinitializing map"); - m_fullMapFilename = fullMapFilename; - m_soleMapFilename = soleMapFilename; - m_toroMapFilename = toroMapFilename; - - // retrieve the thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - - // trigger map reinitialization - if ( initializeMap(tls).isFailure() ) { - ATH_MSG_ERROR( "failed to re-initialize field map" ); - return StatusCode::FAILURE; - } - } else { - ATH_MSG_INFO( "no need to update map set"); - } - - return StatusCode::SUCCESS; -} - -// -// read and initialize map -// -StatusCode MagField::AtlasFieldSvc::initializeMap(AtlasFieldSvcTLS &tls) -{ - ATH_MSG_INFO( "Initializing the field map (solenoidCurrent=" << solenoidCurrent() << " toroidCurrent=" << toroidCurrent() << ")" ); - // empty the current map first - clearMap(tls); - - // determine the map to load - std::string mapFile(""); - if ( solenoidOn() && toroidOn() ) { - mapFile = m_fullMapFilename; - } else if ( solenoidOn() ) { - mapFile = m_soleMapFilename; - } else if ( toroidOn() ) { - mapFile = m_toroMapFilename; - } else { - // all magnets OFF. no need to read map - return StatusCode::SUCCESS; - } - // find the path to the map file - std::string resolvedMapFile = PathResolver::find_file( mapFile.c_str(), "CALIBPATH" ); - if ( resolvedMapFile.empty() ) { - ATH_MSG_ERROR( "Field map file " << mapFile << " not found" ); - return StatusCode::FAILURE; - } - // read the map file - if ( readMap( resolvedMapFile.c_str() ).isFailure() ) { - ATH_MSG_ERROR( "Something went wrong while trying to read the field map " << resolvedMapFile ); - return StatusCode::FAILURE; - } - ATH_MSG_INFO( "Initialized the field map from " << resolvedMapFile ); - // scale magnet current as needed - if (!m_lockMapCurrents) - scaleField(); - else - ATH_MSG_INFO( "Currents are NOT scaled - using map values sole=" << m_mapSoleCurrent << " toro=" << m_mapToroCurrent ); - - return StatusCode::SUCCESS; -} - -void MagField::AtlasFieldSvc::scaleField() -{ - BFieldZone *solezone(nullptr); - // - if ( solenoidOn() ) { - solezone = findZoneSlow( 0.0, 0.0, 0.0 ); - if ( m_mapSoleCurrent > 0.0 && - std::abs( solenoidCurrent()/m_mapSoleCurrent - 1.0 ) > 0.001 ) { - // scale the field in the solenoid zone - double factor = solenoidCurrent()/m_mapSoleCurrent; - solezone->scaleField( factor ); - // remake the fast map - buildZR(); - ATH_MSG_INFO( "Scaled the solenoid field by a factor " << factor ); - } - ATH_MSG_INFO( "Solenoid zone id " << solezone->id() ); - } - // - if ( toroidOn() ) { - if ( m_mapToroCurrent > 0.0 && - std::abs( toroidCurrent()/m_mapToroCurrent - 1.0 ) > 0.001 ) { - // scale the field in all zones except for the solenoid zone - double factor = toroidCurrent()/m_mapToroCurrent; - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - if ( &(m_zone[i]) != solezone ) { - m_zone[i].scaleField( factor ); - } - } - ATH_MSG_INFO( "Scaled the toroid field by a factor " << factor ); - } - // for ( unsigned i = 0; i < m_zone.size(); i++ ) { - // ATH_MSG_INFO( "zone i,id " << i << ": " << m_zone[i].id() ); - // } - } -} - -/** framework methods */ -StatusCode MagField::AtlasFieldSvc::finalize() -{ - //ATH_MSG_INFO( "finalize() ..." ); - // - // finalization code would go here - // - ATH_MSG_INFO( "finalize() successful" ); - return StatusCode::SUCCESS; -} - -/* void MagField::AtlasFieldSvc::getFieldStandard(const double *xyz, double *bxyz, double *deriv) */ -void MagField::AtlasFieldSvc::getField(const double *xyz, double *bxyz, double *deriv) const -{ - const double &x(xyz[0]); - const double &y(xyz[1]); - const double &z(xyz[2]); - double r = std::sqrt(x * x + y * y); - double phi = std::atan2(y, x); - - // retrieve the thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - BFieldCache &cache = tls.cache; - - // test if the TLS was initialized and the cache is valid - if ( !tls.isInitialized || !cache.inside(z, r, phi) ) { - // cache is invalid -> refresh cache - if (!fillFieldCache(z, r, phi, tls)) { - // caching failed -> outside the valid map volume - // return default field (0.1 gauss) - const double defaultB(0.1*CLHEP::gauss); - bxyz[0] = bxyz[1] = bxyz[2] = defaultB; - // return zero gradient if requested - if ( deriv ) { - for ( int i = 0; i < 9; i++ ) { - deriv[i] = 0.; - } - } - return; - } - } - - // do interpolation - cache.getB(xyz, r, phi, bxyz, deriv); - - // add biot savart component - if (tls.cond) { - const size_t condSize = tls.cond->size(); - for (size_t i = 0; i < condSize; i++) { - (*tls.cond)[i].addBiotSavart(1, xyz, bxyz, deriv); // added scale factor of 1 for compatibility with multi-threaded model - } - } -} - -/* -void MagField::AtlasFieldSvc::getFieldManipulated(const double *xyz, double *bxyz, double *deriv) -{ - // this operation involves three steps: - // - first we move the point at which the field is evaluated - // ex1: solenoid translation by vector +a => xyz -= a - // ex2: solenoid rotation R by angle +phi => rotate xyz by -phi (inverse rotation R_inv) - // - then, we evaluate B in this new point - // ex1: B(-a) - // ex2: B(R_inv(xyz)) - // - then, we change the field - // ex1: identity transformation - // ex2: rotate the field properly - - // step 1 - double xyz_new[3]; - m_manipulator->modifyPosition(xyz, xyz_new); - - // step 2 - getFieldStandard(xyz_new, bxyz, deriv); - - // step 3 - m_manipulator->modifyField(bxyz, deriv); -} - -void MagField::AtlasFieldSvc::getField(const double *xyz, double *bxyz, double *deriv) { - (this->*this->getFieldActual)(xyz, bxyz, deriv); -} -*/ - -void MagField::AtlasFieldSvc::getFieldZR(const double *xyz, double *bxyz, double *deriv) const -{ - const double &x(xyz[0]); - const double &y(xyz[1]); - const double &z(xyz[2]); - double r = sqrt(x * x + y * y); - - // get thread-local storage - AtlasFieldSvcTLS &tls = getAtlasFieldSvcTLS(); - BFieldCacheZR &cacheZR = tls.cacheZR; - - // test if the TLS was initialized and the cache is valid - if ( !tls.isInitialized || !cacheZR.inside(z, r) ) { - // cache is invalid -> refresh cache - if (!fillFieldCacheZR(z, r, tls)) { - // caching failed -> outside the valid z-r map volume - // call the full version of getField() - getField(xyz, bxyz, deriv); - - return; - } - } - - // do interpolation - cacheZR.getB(xyz, r, bxyz, deriv); - -} - -// -// Clear the map. -// Subsequent call should return zero magnetic field. -// -void MagField::AtlasFieldSvc::clearMap(AtlasFieldSvcTLS &tls) -{ - tls.cache.invalidate(); - tls.cacheZR.invalidate(); - - tls.cond = nullptr; - // Next lines clear m_zone, m_edge[3], m_edgeLUT[3], and m_zoneLUT and deallocate their memory. - std::vector<BFieldZone>().swap(m_zone); - for ( int i = 0; i < 3; i++ ) { - std::vector<double>().swap(m_edge[i]); - std::vector<int>().swap(m_edgeLUT[i]); - } - std::vector<const BFieldZone*>().swap(m_zoneLUT); - // Next lines ensure findZone() will fail - m_zmin = 0.0; - m_zmax = -1.0; - m_rmax = -1.0; - m_nz = m_nr = m_nphi = 0; - delete m_meshZR; - m_meshZR = nullptr; -} - -// -// Read the solenoid map from file. -// The filename must end with ".root". -// -StatusCode MagField::AtlasFieldSvc::readMap( const char* filename ) -{ - if ( strstr(filename, ".root") == nullptr ) { - ATH_MSG_ERROR("input file name '" << filename << "' does not end with .root"); - return StatusCode::FAILURE; - } - TFile* rootfile = new TFile(filename, "OLD"); - if ( ! rootfile ) { - ATH_MSG_ERROR("failed to open " << filename); - return StatusCode::FAILURE; - } - ATH_MSG_INFO("reading the map from " << filename); - if ( readMap(rootfile).isFailure() ) { - ATH_MSG_ERROR("something went wrong while trying to read the ROOT field map file"); - return StatusCode::FAILURE; - } - - rootfile->Close(); - delete rootfile; - - return StatusCode::SUCCESS; -} - -// -// read an ASCII field map from istream -// convert units m -> mm, and T -> kT -// -StatusCode MagField::AtlasFieldSvc::readMap( std::istream& input ) -{ - const std::string myname("readMap()"); - // first line contains version, date, time - std::string word; - int version; - int date; - int time; - input >> word >> version; - if ( word != "FORMAT-VERSION" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'FORMAT-VERION'"); - return StatusCode::FAILURE; - } - if ( version < 5 || version > 6) { - ATH_MSG_ERROR( myname << ": version number is " << version << " instead of 5 or 6"); - return StatusCode::FAILURE; - } - input >> word >> date; - if ( word != "DATE" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'DATE'" ); - return StatusCode::FAILURE; - } - input >> word >> time; - if ( word != "TIME" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'TIME'" ); - return StatusCode::FAILURE; - } - - // read and skip header cards - int nheader; - input >> word >> nheader; - if ( word != "HEADERS" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'HEADERS'" ); - return StatusCode::FAILURE; - } - std::string restofline; - getline( input, restofline ); - for ( int i = 0; i < nheader; i++ ) { - std::string header; - getline( input, header ); - } - - // read zone definitions - int nzone; - input >> word >> nzone; - if ( word != "ZONES" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'ZONES'" ); - return StatusCode::FAILURE; - } - std::vector<int> jz(nzone); - - std::vector<int> nz(nzone); - std::vector<int> jr(nzone); - - std::vector<int> nr(nzone); - std::vector<int> jphi(nzone); - - std::vector<int> nphi(nzone); - std::vector<int> jbs(nzone); - - std::vector<int> nbs(nzone); - std::vector<int> jcoil(nzone); - - std::vector<int> ncoil(nzone); - std::vector<int> jfield(nzone); - - std::vector<int> nfield(nzone); - std::vector<int> jaux(nzone); - - std::vector<int> naux(nzone); - - for ( int i = 0; i < nzone; i++ ) - { - int id; - int nrep; - int map; // unused - double z1; - double z2; - double r1; - double r2; - double phi1; - double phi2; - int nzrphi0; // unused - double tol; // unused - int mzn; - int mxsym; - int mrefl; - int mback; // unused - double qz; - double qr; - double qphi; // unused - double bscale; - input >> id >> nrep; - if ( version == 6 ) input >> map; - input >> z1 >> z2 >> nz[i] - >> r1 >> r2 >> nr[i] - >> phi1 >> phi2 >> nphi[i] - >> nzrphi0 >> tol - >> jbs[i] >> nbs[i] - >> jcoil[i] >> ncoil[i] - >> jz[i] >> jr[i] >> jphi[i] - >> jfield[i] >> nfield[i] - >> mzn; - if ( version == 6 ) input >> mxsym; - input >> mrefl >> mback - >> jaux[i] >> naux[i] - >> qz >> qr >> qphi >> bscale; - if ( id >= 0 ) { // remove dummy zone - z1 *= CLHEP::meter; - z2 *= CLHEP::meter; - r1 *= CLHEP::meter; - r2 *= CLHEP::meter; - phi1 *= CLHEP::degree; - phi2 *= CLHEP::degree; - bscale *= CLHEP::tesla; - BFieldZone zone( id, z1, z2, r1, r2, phi1, phi2, bscale ); - m_zone.push_back(zone); - } - } - - // read Biot-Savart data - int nbiot; - input >> word >> nbiot; - if ( word != "BIOT" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'BIOT'" ); - return StatusCode::FAILURE; - } - std::vector<BFieldCond> bslist; - for ( int i = 0; i < nbiot; i++ ) { - char dummy; // unused - char cfinite; - double xyz1[3]; - - double xyz2[3]; - double phirot; // unused - double curr; - input >> dummy >> cfinite - >> xyz1[0] >> xyz1[1] >> xyz1[2] - >> xyz2[0] >> xyz2[1] >> xyz2[2] - >> phirot >> curr; - bool finite = ( cfinite == 'T' ); - for ( int j = 0; j < 3; j++ ) { - xyz1[j] *= CLHEP::meter; - if ( finite ) xyz2[j] *= CLHEP::meter; - } - BFieldCond bs( finite, xyz1, xyz2, curr ); - bslist.push_back(bs); - } - // attach them to the zones - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - // copy the range that belongs to this zone - for ( int j = 0; j < nbs[i]; j++ ) { - // Fortran -> C conversion requires "-1" - m_zone[i].appendCond( bslist[jbs[i]+j-1] ); - } - } - - // read and skip coil data - int nc; - input >> word >> nc; - if ( word != "COIL" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'COIL'" ); - return StatusCode::FAILURE; - } - getline( input, restofline ); - for ( int i = 0; i < nc; i++ ) { - std::string coildata; - getline( input, coildata ); - } - - // read and skip auxiliary array = list of subzones - int nauxarr; - input >> word >> nauxarr; - if ( word != "AUXARR" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'AUXARR'" ); - return StatusCode::FAILURE; - } - if ( version == 6 ) input >> word; // skip 'T' - for ( int i = 0; i < nauxarr; i++ ) { - int aux; - input >> aux; - } - - // read mesh definition - int nmesh; - input >> word >> nmesh; - if ( word != "MESH" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'MESH'" ); - return StatusCode::FAILURE; - } - std::vector<double> meshlist; - for ( int i = 0; i < nmesh; i++ ) { - double mesh; - input >> mesh; - meshlist.push_back(mesh); - } - // attach them to the zones - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - m_zone[i].reserve( nz[i], nr[i], nphi[i] ); - for ( int j = 0; j < nz[i]; j++ ) { - m_zone[i].appendMesh( 0, meshlist[jz[i]+j-1]*CLHEP::meter ); - } - for ( int j = 0; j < nr[i]; j++ ) { - m_zone[i].appendMesh( 1, meshlist[jr[i]+j-1]*CLHEP::meter ); - } - for ( int j = 0; j < nphi[i]; j++ ) { - m_zone[i].appendMesh( 2, meshlist[jphi[i]+j-1] ); - } - } - - // read field values - int nf; - - int nzlist; - std::string ftype; - - std::string bytype; - input >> word >> nf >> nzlist >> ftype >> bytype; - if ( word != "FIELD" ) { - ATH_MSG_ERROR( myname << ": found '" << word << "' instead of 'FIELD'" ); - return StatusCode::FAILURE; - } - if ( ftype != "I2PACK" ) { - ATH_MSG_ERROR( myname << ": found '" << ftype << "' instead of 'I2PACK'" ); - return StatusCode::FAILURE; - } - if ( bytype != "FBYTE" ) { - ATH_MSG_ERROR( myname << ": found '" << bytype << "' instead of 'FBYTE'" ); - return StatusCode::FAILURE; - } - // read zone by zone - for ( int i = 0; i < nzlist; i++ ) { - int izone; - - int idzone; - - int nfzone; - input >> izone >> idzone >> nfzone; - izone--; // fortran -> C++ - if ( idzone != m_zone[izone].id() ) { - ATH_MSG_ERROR( myname << ": zone id " << idzone << " != " << m_zone[izone].id() ); - return StatusCode(2); - } - - std::vector<int> data[3]; - - // for field data in 2 bytes - for ( int j = 0; j < 3; j++ ) { // repeat z, r, phi - int ierr = read_packed_data( input, data[j] ); - if ( ierr != 0 ) return StatusCode(ierr); - for ( int k = 0; k < nfzone; k++ ) { - // recover sign - data[j][k] = ( data[j][k]%2==0 ) ? data[j][k]/2 : -(data[j][k]+1)/2; - // second-order diff - if ( k >= 2 ) data[j][k] += 2*data[j][k-1] - data[j][k-2]; - } - } - // store - for ( int k = 0; k < nfzone; k++ ) { - BFieldVector<short> B( data[0][k], data[1][k], data[2][k] ); - m_zone[izone].appendField( B ); - } - - // skip fbyte - char c; - while ( input.good() ) { - input >> c; - if ( input.eof() || c == '}' ) break; - } - } - - // build the LUTs and ZR zone - buildLUT(); - buildZR(); - - return StatusCode::SUCCESS; -} - -// -// wrire the map to a ROOT file -// -void MagField::AtlasFieldSvc::writeMap( TFile* rootfile ) const -{ - if ( rootfile == nullptr ) return; // no file - if ( !rootfile->cd() ) return; // could not make it current directory - // define the tree - TTree* tree = new TTree( "BFieldMap", "BFieldMap version 5" ); - TTree* tmax = new TTree( "BFieldMapSize", "Buffer size information" ); - int id; - double zmin; - - double zmax; - - double rmin; - - double rmax; - - double phimin; - - double phimax; - double bscale; - int ncond; - bool *finite; - double *p1x; - - double *p1y; - - double *p1z; - - double *p2x; - - double *p2y; - - double *p2z; - double *curr; - int nmeshz; - - int nmeshr; - - int nmeshphi; - double *meshz; - - double *meshr; - - double *meshphi; - int nfield; - short *fieldz; - - short *fieldr; - - short *fieldphi; - - // prepare arrays - need to know the maximum sizes - unsigned maxcond(0); - - unsigned maxmeshz(0); - - unsigned maxmeshr(0); - - unsigned maxmeshphi(0); - - unsigned maxfield(0); - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - maxcond = std::max( maxcond, m_zone[i].ncond() ); - maxmeshz = std::max( maxmeshz, m_zone[i].nmesh(0) ); - maxmeshr = std::max( maxmeshr, m_zone[i].nmesh(1) ); - maxmeshphi = std::max( maxmeshphi, m_zone[i].nmesh(2) ); - maxfield = std::max( maxfield, m_zone[i].nfield() ); - } - // store the maximum sizes - tmax->Branch( "maxcond", &maxcond, "maxcond/i"); - tmax->Branch( "maxmeshz", &maxmeshz, "maxmeshz/i"); - tmax->Branch( "maxmeshr", &maxmeshr, "maxmeshr/i"); - tmax->Branch( "maxmeshphi", &maxmeshphi, "maxmeshphi/i"); - tmax->Branch( "maxfield", &maxfield, "maxfield/i"); - tmax->Fill(); - // prepare buffers - finite = new bool[maxcond]; - p1x = new double[maxcond]; - p1y = new double[maxcond]; - p1z = new double[maxcond]; - p2x = new double[maxcond]; - p2y = new double[maxcond]; - p2z = new double[maxcond]; - curr = new double[maxcond]; - meshz = new double[maxmeshz]; - meshr = new double[maxmeshr]; - meshphi = new double[maxmeshphi]; - fieldz = new short[maxfield]; - fieldr = new short[maxfield]; - fieldphi = new short[maxfield]; - // define the tree branches - tree->Branch( "id", &id, "id/I" ); - tree->Branch( "zmin", &zmin, "zmin/D" ); - tree->Branch( "zmax", &zmax, "zmax/D" ); - tree->Branch( "rmin", &rmin, "rmin/D" ); - tree->Branch( "rmax", &rmax, "rmax/D" ); - tree->Branch( "phimin", &phimin, "phimin/D" ); - tree->Branch( "phimax", &phimax, "phimax/D" ); - tree->Branch( "bscale", &bscale, "bscale/D" ); - tree->Branch( "ncond", &ncond, "ncond/I" ); - tree->Branch( "finite", finite, "finite[ncond]/O" ); - tree->Branch( "p1x", p1x, "p1x[ncond]/D" ); - tree->Branch( "p1y", p1y, "p1y[ncond]/D" ); - tree->Branch( "p1z", p1z, "p1z[ncond]/D" ); - tree->Branch( "p2x", p2x, "p2x[ncond]/D" ); - tree->Branch( "p2y", p2y, "p2y[ncond]/D" ); - tree->Branch( "p2z", p2z, "p2z[ncond]/D" ); - tree->Branch( "curr", curr, "curr[ncond]/D" ); - tree->Branch( "nmeshz", &nmeshz, "nmeshz/I" ); - tree->Branch( "meshz", meshz, "meshz[nmeshz]/D" ); - tree->Branch( "nmeshr", &nmeshr, "nmeshr/I" ); - tree->Branch( "meshr", meshr, "meshr[nmeshr]/D" ); - tree->Branch( "nmeshphi", &nmeshphi, "nmeshphi/I" ); - tree->Branch( "meshphi", meshphi, "meshphi[nmeshphi]/D" ); - tree->Branch( "nfield", &nfield, "nfield/I" ); - tree->Branch( "fieldz", fieldz, "fieldz[nfield]/S" ); - tree->Branch( "fieldr", fieldr, "fieldr[nfield]/S" ); - tree->Branch( "fieldphi", fieldphi, "fieldphi[nfield]/S" ); - // loop over zones to write - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - const BFieldZone z = m_zone[i]; - id = z.id(); - zmin = z.zmin(); zmax = z.zmax(); - rmin = z.rmin(); rmax = z.rmax(); - phimin = z.phimin(); phimax = z.phimax(); - bscale = z.bscale(); - ncond = z.ncond(); - for ( int j = 0; j < ncond; j++ ) { - const BFieldCond& c = z.cond(j); - finite[j] = c.finite(); - p1x[j] = c.p1(0); - p1y[j] = c.p1(1); - p1z[j] = c.p1(2); - p2x[j] = c.p2(0); - p2y[j] = c.p2(1); - p2z[j] = c.p2(2); - curr[j] = c.curr(); - } - nmeshz = z.nmesh(0); - for ( int j = 0; j < nmeshz; j++ ) { - meshz[j] = z.mesh(0,j); - } - nmeshr = z.nmesh(1); - for ( int j = 0; j < nmeshr; j++ ) { - meshr[j] = z.mesh(1,j); - } - nmeshphi = z.nmesh(2); - for ( int j = 0; j < nmeshphi; j++ ) { - meshphi[j] = z.mesh(2,j); - } - nfield = z.nfield(); - for ( int j = 0; j < nfield; j++ ) { - const BFieldVector<short> f = z.field(j); - fieldz[j] = f.z(); - fieldr[j] = f.r(); - fieldphi[j] = f.phi(); - } - tree->Fill(); - } - rootfile->Write(); - // clean up - delete[] finite; - delete[] p1x; - delete[] p1y; - delete[] p1z; - delete[] p2x; - delete[] p2y; - delete[] p2z; - delete[] curr; - delete[] meshz; - delete[] meshr; - delete[] meshphi; - delete[] fieldz; - delete[] fieldr; - delete[] fieldphi; -} - -// -// read the map from a ROOT file. -// returns 0 if successful. -// -StatusCode MagField::AtlasFieldSvc::readMap( TFile* rootfile ) -{ - if ( rootfile == nullptr ) { - // no file - ATH_MSG_ERROR("readMap(): unable to read field map, no TFile given"); - return StatusCode::FAILURE; - } - if ( !rootfile->cd() ) { - // could not make it current directory - ATH_MSG_ERROR("readMap(): unable to cd() into the ROOT field map TFile"); - return StatusCode::FAILURE; - } - // open the tree - TTree* tree = (TTree*)rootfile->Get("BFieldMap"); - if ( tree == nullptr ) { - // no tree - ATH_MSG_ERROR("readMap(): TTree 'BFieldMap' does not exist in ROOT field map"); - return StatusCode::FAILURE; - } - int id; - double zmin; - - double zmax; - - double rmin; - - double rmax; - - double phimin; - - double phimax; - double bscale; - int ncond; - bool *finite; - double *p1x; - - double *p1y; - - double *p1z; - - double *p2x; - - double *p2y; - - double *p2z; - double *curr; - int nmeshz; - - int nmeshr; - - int nmeshphi; - double *meshz; - - double *meshr; - - double *meshphi; - int nfield; - short *fieldz; - - short *fieldr; - - short *fieldphi; - // define the fixed-sized branches first - tree->SetBranchAddress( "id", &id ); - tree->SetBranchAddress( "zmin", &zmin ); - tree->SetBranchAddress( "zmax", &zmax ); - tree->SetBranchAddress( "rmin", &rmin ); - tree->SetBranchAddress( "rmax", &rmax ); - tree->SetBranchAddress( "phimin", &phimin ); - tree->SetBranchAddress( "phimax", &phimax ); - tree->SetBranchAddress( "bscale", &bscale ); - tree->SetBranchAddress( "ncond", &ncond ); - tree->SetBranchAddress( "nmeshz", &nmeshz ); - tree->SetBranchAddress( "nmeshr", &nmeshr ); - tree->SetBranchAddress( "nmeshphi", &nmeshphi ); - tree->SetBranchAddress( "nfield", &nfield ); - // prepare arrays - need to know the maximum sizes - // open the tree of buffer sizes (may not exist in old maps) - unsigned maxcond(0); - - unsigned maxmeshz(0); - - unsigned maxmeshr(0); - - unsigned maxmeshphi(0); - - unsigned maxfield(0); - TTree* tmax = (TTree*)rootfile->Get("BFieldMapSize"); - if ( tmax != nullptr ) { - tmax->SetBranchAddress( "maxcond", &maxcond ); - tmax->SetBranchAddress( "maxmeshz", &maxmeshz ); - tmax->SetBranchAddress( "maxmeshr", &maxmeshr ); - tmax->SetBranchAddress( "maxmeshphi", &maxmeshphi ); - tmax->SetBranchAddress( "maxfield", &maxfield ); - tmax->GetEntry(0); - } else { // "BFieldMapSize" tree does not exist - for ( int i = 0; i < tree->GetEntries(); i++ ) { - tree->GetEntry(i); - maxcond = std::max( maxcond, (unsigned)ncond ); - maxmeshz = std::max( maxmeshz, (unsigned)nmeshz ); - maxmeshr = std::max( maxmeshr, (unsigned)nmeshr ); - maxmeshphi = std::max( maxmeshphi, (unsigned)nmeshphi ); - maxfield = std::max( maxfield, (unsigned)nfield ); - } - } - finite = new bool[maxcond]; - p1x = new double[maxcond]; - p1y = new double[maxcond]; - p1z = new double[maxcond]; - p2x = new double[maxcond]; - p2y = new double[maxcond]; - p2z = new double[maxcond]; - curr = new double[maxcond]; - meshz = new double[maxmeshz]; - meshr = new double[maxmeshr]; - meshphi = new double[maxmeshphi]; - fieldz = new short[maxfield]; - fieldr = new short[maxfield]; - fieldphi = new short[maxfield]; - // define the variable length branches - tree->SetBranchAddress( "finite", finite ); - tree->SetBranchAddress( "p1x", p1x ); - tree->SetBranchAddress( "p1y", p1y ); - tree->SetBranchAddress( "p1z", p1z ); - tree->SetBranchAddress( "p2x", p2x ); - tree->SetBranchAddress( "p2y", p2y ); - tree->SetBranchAddress( "p2z", p2z ); - tree->SetBranchAddress( "curr", curr ); - tree->SetBranchAddress( "meshz", meshz ); - tree->SetBranchAddress( "meshr", meshr ); - tree->SetBranchAddress( "meshphi", meshphi ); - tree->SetBranchAddress( "fieldz", fieldz ); - tree->SetBranchAddress( "fieldr", fieldr ); - tree->SetBranchAddress( "fieldphi", fieldphi ); - - // reserve the space for m_zone so that it won't move as the vector grows - m_zone.reserve( tree->GetEntries() ); - // read all tree and store - for ( int i = 0; i < tree->GetEntries(); i++ ) { - tree->GetEntry(i); - BFieldZone z( id, zmin, zmax, rmin, rmax, phimin, phimax, bscale ); - m_zone.push_back(z); - m_zone.back().reserve( nmeshz, nmeshr, nmeshphi ); - for ( int j = 0; j < ncond; j++ ) { - double p1[3]; - - double p2[3]; - p1[0] = p1x[j]; - p1[1] = p1y[j]; - p1[2] = p1z[j]; - p2[0] = p2x[j]; - p2[1] = p2y[j]; - p2[2] = p2z[j]; - BFieldCond cond( finite[j], p1, p2, curr[j] ); - m_zone.back().appendCond(cond); - } - for ( int j = 0; j < nmeshz; j++ ) { - m_zone.back().appendMesh( 0, meshz[j] ); - } - for ( int j = 0; j < nmeshr; j++ ) { - m_zone.back().appendMesh( 1, meshr[j] ); - } - for ( int j = 0; j < nmeshphi; j++ ) { - m_zone.back().appendMesh( 2, meshphi[j] ); - } - for ( int j = 0; j < nfield; j++ ) { - BFieldVector<short> field( fieldz[j], fieldr[j], fieldphi[j] ); - m_zone.back().appendField( field ); - } - } - // clean up - tree->Delete(); - delete[] finite; - delete[] p1x; - delete[] p1y; - delete[] p1z; - delete[] p2x; - delete[] p2y; - delete[] p2z; - delete[] curr; - delete[] meshz; - delete[] meshr; - delete[] meshphi; - delete[] fieldz; - delete[] fieldr; - delete[] fieldphi; - // build the LUTs - buildLUT(); - buildZR(); - - return StatusCode::SUCCESS; -} - -// -// utility function used by readMap() -// -int MagField::AtlasFieldSvc::read_packed_data( std::istream& input, std::vector<int>& data ) const -{ - const std::string myname("BFieldMap::read_packed_data()"); - - data.resize(0); - char mode = 'u'; - char c; - while ( input.good() ) { - input >> c; - if ( input.eof() ) return 0; - else if (c == '}') { // end of record - return 0; - } - else if (c == 'z') { // series of zeros - int n; - int ierr = read_packed_int( input, n ); - if ( ierr != 0 ) return ierr; - for ( int i = 0; i < n; i++ ) { - data.push_back(0); - } - } - else if (c >= 'u' && c <= 'y') { // mode change - mode = c; - } - else if (c <= ' ' || c > 'z') { - ATH_MSG_ERROR( myname << ": unexpected letter '" << c << "' in input" ); - return 3; - } - else { // normal letter in the range '!' - 't' - switch (mode) { - case 'u': - { - input.putback( c ); - int n; - int ierr = read_packed_int( input, n ); - if ( ierr != 0 ) return ierr; - data.push_back(n); - } - break; - case 'v': - { - int n = c - '!'; - for ( int i = 0; i < 4; i++ ) { - input >> c; - data.push_back(c - '!' + 84*(n%3)); - n = n/3; - } - } - break; - case 'w': - data.push_back(c - '!'); - break; - case 'x': - { - int n = c - '!'; - data.push_back(n/9); - data.push_back(n%9); - } - break; - case 'y': - { - int n = c - '!'; - data.push_back(n/27); - data.push_back((n/9)%3); - data.push_back((n/3)%3); - data.push_back(n%3); - } - break; - } - } - } - return 0; -} - -// -// utility function used by read_packed_data() -// -int MagField::AtlasFieldSvc::read_packed_int( std::istream &input, int &n ) const -{ - const std::string myname("BFieldMap::read_packed_int()"); - n = 0; - char c; - input >> c; - while ( c >= '!' && c <= 'J') { - n = 42*n + c - '!'; - input >> c; - } - if ( c >= 'K' && c <= 't' ) { - n = 42*n + c - 'K'; - } else { - ATH_MSG_ERROR( myname << ": unexpected letter '" << c << "' in input" ); - return 4; - } - return 0; -} - -// -// Search for the zone that contains a point (z, r, phi) -// This is a linear-search version, used only to construct the LUT. -// -BFieldZone* MagField::AtlasFieldSvc::findZoneSlow( double z, double r, double phi ) -{ - for ( int j = m_zone.size()-1; j >= 0; --j ) { - if ( m_zone[j].inside( z, r, phi ) ) return &m_zone[j]; - } - return nullptr; -} - -// -// Build the look-up table used by FindZone(). -// Called by readMap() -// It also calls buildLUT() for all zones. -// -void MagField::AtlasFieldSvc::buildLUT() -{ - // make lists of (z,r,phi) edges of all zones - for ( int j = 0; j < 3; j++ ) { // z, r, phi - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - double e[2]; - e[0] = m_zone[i].min(j); - e[1] = m_zone[i].max(j); - for ( int k = 0; k < 2; k++ ) { - // for the phi edge, fit into [-pi,pi] - if ( j==2 && e[k] > M_PI ) e[k] -= 2.0*M_PI; - m_edge[j].push_back(e[k]); - } - } - // add -pi and +pi to phi, just in case - m_edge[2].push_back(-M_PI); - m_edge[2].push_back(M_PI); - // sort - sort( m_edge[j].begin(), m_edge[j].end() ); - // remove duplicates - // must do this by hand to allow small differences due to rounding in phi - int i = 0; - for ( unsigned k = 1; k < m_edge[j].size(); k++ ) { - if ( fabs(m_edge[j][i] - m_edge[j][k]) < 1.0e-6 ) continue; - m_edge[j][++i] = m_edge[j][k]; - } - m_edge[j].resize( i+1 ); - // because of the small differences allowed in the comparison above, - // m_edge[][] values do not exactly match the m_zone[] boundaries. - // we have to fix this up in order to avoid invalid field values - // very close to the zone boundaries. - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - for ( unsigned k = 0; k < m_edge[j].size(); k++ ) { - if ( fabs(m_zone[i].min(j) - m_edge[j][k]) < 1.0e-6 ) { - m_zone[i].adjustMin(j,m_edge[j][k]); - } - if ( fabs(m_zone[i].max(j) - m_edge[j][k]) < 1.0e-6 ) { - m_zone[i].adjustMax(j,m_edge[j][k]); - } - } - } - } - // build LUT for edge finding - for ( int j = 0; j < 3; j++ ) { // z, r, phi - // find the size of the smallest interval - double width = m_edge[j].back() - m_edge[j].front(); - double q(width); - for ( unsigned i = 0; i < m_edge[j].size()-1; i++ ) { - q = std::min( q, m_edge[j][i+1] - m_edge[j][i] ); - } - // find the number of cells in the LUT - int n = int(width/q) + 1; - q = width/(n+0.5); - m_invq[j] = 1.0/q; - n++; - // fill the LUT - int m = 0; - for ( int i = 0; i < n; i++ ) { // index of LUT - if ( q*i+m_edge[j].front() > m_edge[j][m+1] ) m++; - m_edgeLUT[j].push_back(m); - } - } - // store min/max for speedup - m_zmin=m_edge[0].front(); - m_zmax=m_edge[0].back(); - m_rmax=m_edge[1].back(); - // build LUT for zone finding - m_nz = m_edge[0].size() - 1; - m_nr = m_edge[1].size() - 1; - m_nphi = m_edge[2].size() - 1; - m_zoneLUT.reserve( m_nz*m_nr*m_nphi ); - for ( int iz = 0; iz < m_nz; iz++ ) { - double z = 0.5*(m_edge[0][iz]+m_edge[0][iz+1]); - for ( int ir = 0; ir < m_nr; ir++ ) { - double r = 0.5*(m_edge[1][ir]+m_edge[1][ir+1]); - for ( int iphi = 0; iphi < m_nphi; iphi++ ) { - double phi = 0.5*(m_edge[2][iphi]+m_edge[2][iphi+1]); - const BFieldZone* zone = findZoneSlow( z, r, phi ); - m_zoneLUT.push_back( zone ); - } - } - } - // build LUT in each zone - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - m_zone[i].buildLUT(); - } -} - -// -// Build the z-r 2d map for fast solenoid field -// -void MagField::AtlasFieldSvc::buildZR() -{ - // delete if previously allocated - delete m_meshZR; - - // find the solenoid zone - // solenoid zone always covers 100 < R < 1000, but not necessarily R < 100 - // so we search for the zone that contains a point at R = 200, Z = 0 - const BFieldZone *solezone = findZone( 0.0, 200.0, 0.0 ); - - // instantiate the new ZR map with the same external coverage as the solenoid zone - // make sure R = 0 is covered - m_meshZR = new BFieldMeshZR( solezone->zmin(), solezone->zmax(), 0.0, solezone->rmax() ); - - // reserve the right amount of memroy - unsigned nmeshz = solezone->nmesh(0); - unsigned nmeshr = solezone->nmesh(1); - if ( solezone->rmin() > 0.0 ) nmeshr++; - m_meshZR->reserve( nmeshz, nmeshr ); - - // copy the mesh structure in z/r - // take care of R = 0 first - if ( solezone->rmin() > 0.0 ) { - m_meshZR->appendMesh( 1, 0.0 ); - } - // copy the rest - for ( int i = 0; i < 2; i++ ) { // z, r - for ( unsigned j = 0; j < solezone->nmesh(i); j++ ) { // loop over mesh points - m_meshZR->appendMesh( i, solezone->mesh( i, j ) ); - } - } - - // loop through the mesh and compute the phi-averaged field - for ( unsigned iz = 0; iz < m_meshZR->nmesh(0); iz++ ) { // loop over z - double z = m_meshZR->mesh( 0, iz ); - for ( unsigned ir = 0; ir < m_meshZR->nmesh(1); ir++ ) { // loop over r - double r = m_meshZR->mesh( 1, ir ); - const int nphi(200); // number of phi slices to average - double Br = 0.0; - double Bz = 0.0; - for ( int iphi = 0; iphi < nphi; iphi++ ) { - double phi = double(iphi)/double(nphi)*2.*M_PI; - double xyz[3]; - xyz[0] = r*cos(phi); - xyz[1] = r*sin(phi); - xyz[2] = z; - double B[3]; - solezone->getB( xyz, B, nullptr ); - Br += B[0]*cos(phi) + B[1]*sin(phi); - Bz += B[2]; - } - Br *= 1.0/double(nphi); - Bz *= 1.0/double(nphi); - m_meshZR->appendField( BFieldVectorZR( Bz, Br ) ); - } - } - - // build the internal LUT - m_meshZR->buildLUT(); -} - -// -// Approximate memory footprint -// -int MagField::AtlasFieldSvc::memSize() const -{ - int size = 0; - size += sizeof(BFieldCache); - size += sizeof(BFieldCacheZR); - for ( unsigned i = 0; i < m_zone.size(); i++ ) { - size += m_zone[i].memSize(); - } - for ( int i = 0; i < 3; i++ ) { - size += sizeof(double)*m_edge[i].capacity(); - size += sizeof(int)*m_edgeLUT[i].capacity(); - } - size += sizeof(BFieldZone*)*m_zoneLUT.capacity(); - if ( m_meshZR ) { - size += m_meshZR->memSize(); - } - return size; -} - diff --git a/MagneticField/MagFieldServices/src/components/MagFieldServices_entries.cxx b/MagneticField/MagFieldServices/src/components/MagFieldServices_entries.cxx index 00ceb76cc36579c0a0b39c24f72b8932cd3557d1..db6ac48d80e716f4043148316a1144cf40854eab 100644 --- a/MagneticField/MagFieldServices/src/components/MagFieldServices_entries.cxx +++ b/MagneticField/MagFieldServices/src/components/MagFieldServices_entries.cxx @@ -1,9 +1,7 @@ -#include "MagFieldServices/AtlasFieldSvc.h" #include "MagFieldServices/AtlasFieldMapCondAlg.h" #include "MagFieldServices/AtlasFieldCacheCondAlg.h" #include "MagFieldServices/H8FieldSvc.h" -DECLARE_COMPONENT( MagField::AtlasFieldSvc ) DECLARE_COMPONENT( MagField::AtlasFieldMapCondAlg ) DECLARE_COMPONENT( MagField::AtlasFieldCacheCondAlg ) DECLARE_COMPONENT( MagField::H8FieldSvc ) diff --git a/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/ReadMdtPRD.cxx b/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/ReadMdtPRD.cxx index 6387f832313aacdc81ab6162457383eb0651c2f2..3aca8ceeec837a6cf327021a2ffcba56a4a97720 100644 --- a/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/ReadMdtPRD.cxx +++ b/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/ReadMdtPRD.cxx @@ -52,7 +52,7 @@ StatusCode ReadMdtPRD::initialize() // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -StatusCode ReadMdtPRD::execute ATLAS_NOT_THREAD_SAFE () +StatusCode ReadMdtPRD::execute() { ATH_MSG_DEBUG( "in execute()" ); @@ -62,8 +62,8 @@ StatusCode ReadMdtPRD::execute ATLAS_NOT_THREAD_SAFE () ATH_MSG_DEBUG("****** mdt->size() : " << mdt_container->size() ); - const DataHandle<Muon::MdtPrepDataCollection> mdtCollection; - const DataHandle<Muon::MdtPrepDataCollection> lastColl; + SG::ConstIterator<Muon::MdtPrepDataCollection> mdtCollection; + SG::ConstIterator<Muon::MdtPrepDataCollection> lastColl; if (!m_mdtNtuple) return StatusCode::SUCCESS; diff --git a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx index 202ef879ef87b62485829d4e8c2491c18bb92ed3..af3822f5fcbcb5a8bb42dcf0e540d3ef75dea652 100644 --- a/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx +++ b/MuonSpectrometer/MuonCnv/MuonRPC_CnvTools/src/RPC_RawDataProviderTool.cxx @@ -1,13 +1,13 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "RPC_RawDataProviderTool.h" #include "ByteStreamCnvSvcBase/IROBDataProviderSvc.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" #include "GaudiKernel/ServiceHandle.h" -#include "GaudiKernel/IJobOptionsSvc.h" #include "GaudiKernel/ThreadLocalContext.h" // #include "valgrind/callgrind.h" @@ -37,65 +37,13 @@ StatusCode Muon::RPC_RawDataProviderTool::initialize() { ATH_CHECK(RPC_RawDataProviderToolCore::initialize()); - // Check if EventSelector has the ByteStreamCnvSvc - bool has_bytestream = false; - IJobOptionsSvc* jobOptionsSvc; - StatusCode sc = service("JobOptionsSvc", jobOptionsSvc, false); - if (sc.isFailure()) { - ATH_MSG_DEBUG( "Could not find JobOptionsSvc"); - jobOptionsSvc = 0; - } else { - IService* svc = dynamic_cast<IService*>(jobOptionsSvc); - if(svc != 0 ) { - ATH_MSG_INFO( " Tool = " << name() - << " is connected to JobOptionsSvc Service = " - << svc->name() ); - } else return StatusCode::FAILURE; - } - - IJobOptionsSvc* TrigConfSvc; - sc = service("TrigConf::HLTJobOptionsSvc", TrigConfSvc, false); - if (sc.isFailure()) { - msg(MSG::DEBUG) << "Could not find TrigConf::HLTJobOptionsSvc" << endmsg; - TrigConfSvc = 0; - } else { - IService* svc = dynamic_cast<IService*>(TrigConfSvc); - if(svc != 0 ) { - ATH_MSG_INFO( " Tool = " << name() - << " is connected to JobOptionsSvc Service = " - << svc->name() ); - } else return StatusCode::FAILURE; - } - - if(jobOptionsSvc==0 && TrigConfSvc==0) - { - ATH_MSG_FATAL( "Bad job configuration" ); - return StatusCode::FAILURE; - } - - const std::vector<const Gaudi::Details::PropertyBase*>* dataFlowProps - = (jobOptionsSvc)? jobOptionsSvc->getProperties("DataFlowConfig") : 0; + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc", name()); + ATH_CHECK(joSvc.retrieve()); - const std::vector<const Gaudi::Details::PropertyBase*>* eventSelProps - = (jobOptionsSvc)? jobOptionsSvc->getProperties("EventSelector") : - TrigConfSvc->getProperties("EventSelector"); - - if ( dataFlowProps != 0 ) has_bytestream = true; - else if( eventSelProps != 0 ) - { - for (std::vector<const Gaudi::Details::PropertyBase*>::const_iterator - cur = eventSelProps->begin(); - cur != eventSelProps->end(); cur++) { - - if( (*cur)->name() == "ByteStreamInputSvc" ) has_bytestream = true; - } - } - else has_bytestream = true; - - // register the container only when the imput from ByteStream is set up - if( has_bytestream || m_containerKey.key() != "RPCPAD" ) + // register the container only when the input from ByteStream is set up + if (joSvc->has("EventSelector.ByteStreamInputSvc") || m_containerKey.key() != "RPCPAD") { - m_AllowCreation= true; + m_AllowCreation = true; } else { diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h index e6ab702e4a23f24538113c03174e7b86c3596b00..d0c465bc84f9d332e93c4a81df87422c6ba99e88 100644 --- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h +++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/MDT_Digitization/MdtDigitizationTool.h @@ -4,12 +4,14 @@ /** @class MdtDigitizationTool - In the initialize() method, the PileUpMerge and StoreGate services are - initialized, and a pointer to an instance of the class MuonDetectorManager - is retrieved from the detector store and used to obtain a MdtIdHelper.The MdtDigitContainer is initialized and the simulation - identifier helper retrieved, together with the pointer to the digitization - tool. Random numbers are obtained in the code from a dedicated stream via - AtRndmSvc, which is also initialized in the initialize() method. + In the initialize() method, the PileUpMerge and StoreGate services + are initialized, and a pointer to an instance of the class + MuonDetectorManager is retrieved from the detector store and used + to obtain a MdtIdHelper.The MdtDigitContainer is initialized and + the simulation identifier helper retrieved, together with the + pointer to the digitization tool. Random numbers are obtained in + the code from a dedicated stream via AtRndmSvc, which is also + initialized in the initialize() method. In the execute() method, the digits and the SDOs (Simulation Data Object, container for simulation data to be preserved after the digitization @@ -61,6 +63,7 @@ #include "MDT_Digitization/IMDT_DigitizationTool.h" #include "PileUpTools/PileUpMergeSvc.h" #include "MdtCalibSvc/MdtCalibrationDbTool.h" +#include "MuonIdHelpers/IMuonIdHelperSvc.h" //Outputs #include "MuonSimData/MuonSimDataCollection.h" @@ -72,7 +75,6 @@ namespace MuonGM{ class MdtReadoutElement; } -class MdtIdHelper; class MdtHitIdHelper; class MdtCondDbData; @@ -148,7 +150,7 @@ class MdtDigitizationTool : public PileUpToolBase { MDT_SortedHitVector m_hits; - const MdtIdHelper* m_idHelper{}; + ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; MdtHitIdHelper* m_muonHelper{}; MDTSimHit applyDeformations(const MDTSimHit&,const MuonGM::MdtReadoutElement*,const Identifier&); @@ -229,9 +231,6 @@ class MdtDigitizationTool : public PileUpToolBase { //pileup truth veto Gaudi::Property<bool> m_includePileUpTruth{this, "IncludePileUpTruth", true, "Include pile-up truth info"}; - bool m_BMGpresent{false}; - int m_BMGid{-1}; - /////////////////////////////////////////////////////////////////// // Access to the event methods: /////////////////////////////////////////////////////////////////// diff --git a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx index dec24ade6428a6284e259901cf1208815df7f33c..08c1781544f3ab94fa19963e8d658cb03e0adb2f 100644 --- a/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx +++ b/MuonSpectrometer/MuonDigitization/MDT_Digitization/src/MdtDigitizationTool.cxx @@ -41,7 +41,6 @@ //Geometry #include "MuonReadoutGeometry/MuonDetectorManager.h" #include "MuonReadoutGeometry/MdtReadoutElement.h" -#include "MuonIdHelpers/MdtIdHelper.h" #include "MuonSimEvent/MdtHitIdHelper.h" #include "TrkDetDescrUtils/GeometryStatics.h" #include "EventPrimitives/EventPrimitives.h" @@ -113,12 +112,11 @@ StatusCode MdtDigitizationTool::initialize() { if (detStore()->contains<MuonGM::MuonDetectorManager>( "Muon" )) { ATH_CHECK(detStore()->retrieve(m_MuonGeoMgr)); ATH_MSG_DEBUG ( "Retrieved MuonGeoModelDetectorManager from StoreGate" ); - //initialize the MdtIdHelper - m_idHelper = m_MuonGeoMgr->mdtIdHelper(); - if(!m_idHelper) return StatusCode::FAILURE; - ATH_MSG_DEBUG ( "Retrieved MdtIdHelper " << m_idHelper ); } + //initialize MuonIdHelperSvc + ATH_CHECK(m_idHelperSvc.retrieve()); + if (m_onlyUseContainerName) { ATH_CHECK(m_mergeSvc.retrieve()); } @@ -177,12 +175,6 @@ StatusCode MdtDigitizationTool::initialize() { ATH_MSG_DEBUG("Using JobOptions for masking dead/missing chambers"); } - m_BMGpresent = m_idHelper->stationNameIndex("BMG") != -1; - if (m_BMGpresent) { - ATH_MSG_INFO("Processing configuration for layouts with BMG chambers."); - m_BMGid = m_idHelper->stationNameIndex("BMG"); - } - return StatusCode::SUCCESS; } @@ -311,7 +303,7 @@ StatusCode MdtDigitizationTool::mergeEvent(const EventContext& ctx) { // create and record the Digit container in StoreGate SG::WriteHandle<MdtDigitContainer> digitContainer(m_outputObjectKey, ctx); - ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelper->module_hash_max()))); + ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelperSvc->mdtIdHelper().module_hash_max()))); ATH_MSG_DEBUG("Recorded MdtDigitContainer called " << digitContainer.name() << " in store " << digitContainer.store()); // create and record the SDO container in StoreGate @@ -343,7 +335,7 @@ StatusCode MdtDigitizationTool::processAllSubEvents(const EventContext& ctx) { // create and record the Digit container in StoreGate SG::WriteHandle<MdtDigitContainer> digitContainer(m_outputObjectKey, ctx); - ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelper->module_hash_max()))); + ATH_CHECK(digitContainer.record(std::make_unique<MdtDigitContainer>(m_idHelperSvc->mdtIdHelper().module_hash_max()))); ATH_MSG_DEBUG("Recorded MdtDigitContainer called " << digitContainer.name() << " in store " << digitContainer.store()); // create and record the SDO container in StoreGate @@ -384,7 +376,7 @@ StatusCode MdtDigitizationTool::doDigitization(const EventContext& ctx, MdtDigit for(int k=0;k<size_id;k++) { Identifier Id = readCdo->getDeadStationsId()[k]; m_IdentifiersToMask.push_back( readCdo->getDeadStationsId()[k] ); - ATH_MSG_VERBOSE ( "Dead/missing chambers id from CondDB: " << m_idHelper->show_to_string(Id) ); + ATH_MSG_VERBOSE ( "Dead/missing chambers id from CondDB: " << m_idHelperSvc->mdtIdHelper().show_to_string(Id) ); } } @@ -440,13 +432,13 @@ bool MdtDigitizationTool::handleMDTSimhit(const TimedHitPtr<MDTSimHit>& phit, CL std::string stationName = m_muonHelper->GetStationName(id); int stationEta = m_muonHelper->GetZSector(id); - int stationPhi = m_muonHelper->GetPhiSector(id); + int stationPhi = m_muonHelper->GetPhiSector(id); int multilayer = m_muonHelper->GetMultiLayer(id); int layer = m_muonHelper->GetLayer(id); - int tube = m_muonHelper->GetTube(id); + int tube = m_muonHelper->GetTube(id); //construct Atlas identifier from components - Identifier DigitId = m_idHelper-> channelID(stationName, stationEta,stationPhi, multilayer, layer, tube); + Identifier DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta,stationPhi, multilayer, layer, tube); // get distance to readout double distRO(0.); @@ -610,7 +602,7 @@ bool MdtDigitizationTool::handleMDTSimhit(const TimedHitPtr<MDTSimHit>& phit, CL driftTime += globalHitTime; ATH_MSG_VERBOSE("Time off Flight + bunch offset: " << globalHitTime << " new driftTime " << driftTime ); } - ATH_MSG_DEBUG( m_idHelper->show_to_string(DigitId) << " Drift time computation " << driftTime << " radius " << driftRadius << " adc " << adc ); + ATH_MSG_DEBUG( m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " Drift time computation " << driftTime << " radius " << driftRadius << " adc " << adc ); // add hit to hit collection m_hits.insert( mdt_hit_info(DigitId,driftTime,adc,driftRadius,&phit)); @@ -642,8 +634,8 @@ bool MdtDigitizationTool::handleMDTSimhit(const TimedHitPtr<MDTSimHit>& phit, CL if (tube % 4 == 1 || tube % 4 == 2) twin_tube = tube + 2; else if(tube % 4 == 0 || tube % 4 == 3) twin_tube = tube - 2; //construct Atlas identifier from components for the twin - twin_DigitId = m_idHelper-> channelID(stationName, stationEta, - stationPhi, multilayer, layer, twin_tube); + twin_DigitId = m_idHelperSvc->mdtIdHelper(). channelID(stationName, stationEta, + stationPhi, multilayer, layer, twin_tube); // get twin tube length for propagation delay twin_tubeLength = element->getTubeLength(layer,twin_tube); @@ -680,7 +672,7 @@ bool MdtDigitizationTool::handleMDTSimhit(const TimedHitPtr<MDTSimHit>& phit, CL // - TWIN TUBES (A. Koutsman) } else { - ATH_MSG_DEBUG( m_idHelper->show_to_string(DigitId) << " Tube not efficient " << " radius " << driftRadius ); + ATH_MSG_DEBUG( m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " Tube not efficient " << " radius " << driftRadius ); } return true; @@ -693,20 +685,20 @@ bool MdtDigitizationTool::checkMDTSimHit(const MDTSimHit& hit) const { const int id = hit.MDTid(); std::string stationName = m_muonHelper->GetStationName(id); int stationEta = m_muonHelper->GetZSector(id); - int stationPhi = m_muonHelper->GetPhiSector(id); + int stationPhi = m_muonHelper->GetPhiSector(id); int multilayer = m_muonHelper->GetMultiLayer(id); int layer = m_muonHelper->GetLayer(id); - int tube = m_muonHelper->GetTube(id); + int tube = m_muonHelper->GetTube(id); - Identifier DigitId = m_idHelper->channelID(stationName, stationEta,stationPhi, multilayer, layer, tube); - ATH_MSG_DEBUG("Working on hit: " << m_idHelper->show_to_string(DigitId) << " "<< m_idHelper->stationNameString(m_idHelper->stationName(DigitId))<< " "<< stationEta << " "<< stationPhi); + Identifier DigitId = m_idHelperSvc->mdtIdHelper().channelID(stationName, stationEta,stationPhi, multilayer, layer, tube); + ATH_MSG_DEBUG("Working on hit: " << m_idHelperSvc->mdtIdHelper().show_to_string(DigitId) << " "<< m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(DigitId))<< " "<< stationEta << " "<< stationPhi); //+MASKING OF DEAD/MISSING CHAMBERS if ( m_UseDeadChamberSvc ) { for (unsigned int i=0;i<m_IdentifiersToMask.size();i++) { Identifier Id = m_IdentifiersToMask[i]; - if ((stationName == m_idHelper->stationNameString(m_idHelper->stationName(Id))) && (stationEta == m_idHelper->stationEta(Id)) && (stationPhi == m_idHelper->stationPhi(Id)) ) { + if ((stationName == m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(Id))) && (stationEta == m_idHelperSvc->mdtIdHelper().stationEta(Id)) && (stationPhi == m_idHelperSvc->mdtIdHelper().stationPhi(Id)) ) { ATH_MSG_DEBUG("Hit is located in chamber that is dead/missing: Masking the hit!"); return false; } @@ -808,7 +800,7 @@ bool MdtDigitizationTool::createDigits(MdtDigitContainer* digitContainer, MuonSi for (; it != m_hits.end(); ++it) { Identifier idDigit = it->id; - Identifier elementId = m_idHelper->elementID(idDigit); + Identifier elementId = m_idHelperSvc->mdtIdHelper().elementID(idDigit); const MuonGM::MdtReadoutElement* geo = m_MuonGeoMgr->getMdtReadoutElement(idDigit); //Check if we are in a new chamber, if so get the DigitCollection @@ -875,9 +867,9 @@ bool MdtDigitizationTool::createDigits(MdtDigitContainer* digitContainer, MuonSi if ( m_t0_from_DB ) { MuonCalib::MdtFullCalibData data = m_calibrationDbTool->getCalibration( geo->collectionHash(), geo->detectorElementHash() ); if ( data.tubeCalib ) { - int ml = m_idHelper->multilayer(idDigit)-1; - int layer = m_idHelper->tubeLayer(idDigit)-1; - int tube = m_idHelper->tube(idDigit)-1; + int ml = m_idHelperSvc->mdtIdHelper().multilayer(idDigit)-1; + int layer = m_idHelperSvc->mdtIdHelper().tubeLayer(idDigit)-1; + int tube = m_idHelperSvc->mdtIdHelper().tube(idDigit)-1; if ( ml>=0 && layer>=0 && tube>=0 ) { // extract calibration constants for single tube const MuonCalib::MdtTubeCalibContainer::SingleTubeCalib* singleTubeData = data.tubeCalib->getCalib( ml, layer, tube ); @@ -887,10 +879,10 @@ bool MdtDigitizationTool::createDigits(MdtDigitContainer* digitContainer, MuonSi } } } - bool isHPTDC = ( m_idHelper->stationName(idDigit) == m_BMGid && m_BMGpresent) ? true : false; + bool isHPTDC = m_idHelperSvc->hasHPTDC(idDigit); int tdc = digitizeTime(driftTime + t0 + timeOffsetTotal, isHPTDC, rndmEngine); int adc = digitizeTime(it->adc, isHPTDC, rndmEngine); - ATH_MSG_DEBUG( " >> Digit Id = " << m_idHelper->show_to_string(idDigit) << " driftTime " << driftTime + ATH_MSG_DEBUG( " >> Digit Id = " << m_idHelperSvc->mdtIdHelper().show_to_string(idDigit) << " driftTime " << driftTime << " driftRadius " << driftRadius << " TDC " << tdc << " ADC " << adc << " mask bit " << insideMask ); MdtDigit* newDigit = new MdtDigit(idDigit, tdc, adc, insideMask); @@ -921,7 +913,7 @@ bool MdtDigitizationTool::createDigits(MdtDigitContainer* digitContainer, MuonSi sdoContainer->insert ( std::make_pair ( idDigit, tempSDO ) ); } else { - ATH_MSG_DEBUG( " >> OUTSIDE TIME WINDOWS << "<< " Digit Id = " << m_idHelper->show_to_string(idDigit) << " driftTime " << driftTime << " --> hit ignored"); + ATH_MSG_DEBUG( " >> OUTSIDE TIME WINDOWS << "<< " Digit Id = " << m_idHelperSvc->mdtIdHelper().show_to_string(idDigit) << " driftTime " << driftTime << " --> hit ignored"); } }//for (; it != hits.end(); ++it) @@ -932,9 +924,9 @@ bool MdtDigitizationTool::createDigits(MdtDigitContainer* digitContainer, MuonSi MdtDigitCollection* MdtDigitizationTool::getDigitCollection(Identifier elementId, MdtDigitContainer* digitContainer){ MdtDigitCollection* digitCollection; - IdContext mdtContext = m_idHelper->module_context(); + IdContext mdtContext = m_idHelperSvc->mdtIdHelper().module_context(); IdentifierHash coll_hash; - if (m_idHelper->get_hash(elementId, coll_hash, &mdtContext)) { + if (m_idHelperSvc->mdtIdHelper().get_hash(elementId, coll_hash, &mdtContext)) { ATH_MSG_ERROR ( "Unable to get MDT hash id from MDT Digit collection " << "context begin_index = " << mdtContext.begin_index() << " context end_index = " << mdtContext.end_index() diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/CscClusterization/ICscClusterBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/CscClusterization/ICscClusterBuilder.h index 6b018b7c47a25c427dd62ae5b79a7a7b43f5fb09..b7496e9ae775ae1127f746f12ee6e22494b0ad8e 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/CscClusterization/ICscClusterBuilder.h +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/CscClusterization/ICscClusterBuilder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // ICscClusterBuilder.h @@ -41,7 +41,7 @@ public: // Static methods public: // Interface methods - virtual StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect)=0; + virtual StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer *object)=0; }; #endif diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.cxx index 37d27d2bb9452e2d260fd3cd6e48af4917f8f33b..1564738d8225d54be30a3f45b1aa70af5ea7feb6 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.cxx @@ -73,7 +73,6 @@ CscPeakThresholdClusterBuilderTool::CscPeakThresholdClusterBuilderTool(const std const IInterface* parent) : AthAlgTool(type, aname, parent), m_digit_key("CSC_Measurements"), - m_cluster_handle("CSC_Clusters"), m_fullEventDone(false) { @@ -84,7 +83,6 @@ CscPeakThresholdClusterBuilderTool::CscPeakThresholdClusterBuilderTool(const std declareProperty("q3sum_threshold_eta", m_q3sum_threshold_eta = 38000.0); declareProperty("q3sum_threshold_phi", m_q3sum_threshold_phi = 33000.0); declareProperty("digit_key", m_digit_key); - declareProperty("cluster_key", m_cluster_handle); } //****************************************************************************** @@ -109,7 +107,6 @@ CscPeakThresholdClusterBuilderTool::initialize() ATH_MSG_DEBUG(" Precision cluster fitter is " << m_pfitter_prec.typeAndName()); ATH_MSG_DEBUG(" Split cluster fitter is " << m_pfitter_split.typeAndName()); ATH_MSG_DEBUG(" Input digit key is " << m_digit_key.key()); - ATH_MSG_DEBUG(" Output cluster key is " << m_cluster_handle.key()); // Retrieve the strip fitting tool. ATH_CHECK(m_pstrip_fitter.retrieve()); @@ -138,43 +135,24 @@ CscPeakThresholdClusterBuilderTool::initialize() StatusCode CscPeakThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& givenIDs, - std::vector<IdentifierHash>& decodedIds) + std::vector<IdentifierHash>& decodedIds, + Muon::CscPrepDataContainer *object) { // clear output vector of selected data collections containing data decodedIds.clear(); - if (!m_cluster_handle.isPresent()) { - /// clean up the PrepRawData container - auto object = std::make_unique<CscPrepDataContainer>(m_idHelperSvc->cscIdHelper().module_hash_max()); - - /// record the container in storeGate - if (m_cluster_handle.record(std::move(object)).isFailure()) { - ATH_MSG_ERROR("Could not record container of CSC Cluster PrepData at " << m_cluster_handle.key()); - return StatusCode::RECOVERABLE; - } - m_fullEventDone = false; - if (givenIDs.size() == 0) m_fullEventDone = true; - - } else { - ATH_MSG_DEBUG("CSC Cluster PrepData Container is already in StoreGate "); - if (m_fullEventDone) { - ATH_MSG_DEBUG("Whole event has already been processed; nothing to do"); - return StatusCode::SUCCESS; - } - if (givenIDs.size() == 0) m_fullEventDone = true; - } if (givenIDs.size() != 0) { for (unsigned int i = 0; i < givenIDs.size(); ++i) { - if (getClusters(givenIDs[i], decodedIds).isFailure()) { + if (getClusters(givenIDs[i], decodedIds, object).isFailure()) { ATH_MSG_ERROR("Unable to decode CSC RDO " << i << "th into CSC PrepRawData"); return StatusCode::RECOVERABLE; } } } else { // Clusterization is done for every area - if (getClusters(decodedIds).isFailure()) { + if (getClusters(decodedIds, object).isFailure()) { ATH_MSG_ERROR("Unable to decode CSC RDO into CSC PrepRawData"); return StatusCode::RECOVERABLE; } @@ -186,11 +164,11 @@ CscPeakThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& giv //****************************************************************************** StatusCode -CscPeakThresholdClusterBuilderTool::getClusters(IdentifierHash givenHashId, std::vector<IdentifierHash>& decodedIds) +CscPeakThresholdClusterBuilderTool::getClusters(IdentifierHash givenHashId, std::vector<IdentifierHash>& decodedIds, Muon::CscPrepDataContainer *pclusters) { // identifiers of collections already decoded and stored in the container will be skipped - if (m_cluster_handle->indexFindPtr(givenHashId) != nullptr) { + if (pclusters->indexFindPtr(givenHashId) != nullptr) { decodedIds.push_back(givenHashId); ATH_MSG_DEBUG("A collection already exists in the container for offline id hash. " << (int)givenHashId); return StatusCode::SUCCESS; @@ -272,7 +250,7 @@ CscPeakThresholdClusterBuilderTool::getClusters(IdentifierHash givenHashId, std: } } if (newCollection) { - if (m_cluster_handle->addCollection(newCollection, hash).isFailure()) { + if (pclusters->addCollection(newCollection, hash).isFailure()) { ATH_MSG_ERROR("Couldn't add CscPrepdataCollection to container!"); return StatusCode::FAILURE; } @@ -286,7 +264,7 @@ CscPeakThresholdClusterBuilderTool::getClusters(IdentifierHash givenHashId, std: //****************************************************************************** StatusCode -CscPeakThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& decodedIds) +CscPeakThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& decodedIds, Muon::CscPrepDataContainer *pclusters) { // Retrieve the CSC digits for this event. @@ -357,7 +335,7 @@ CscPeakThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& dec } } if (newCollection) { - if (m_cluster_handle->addCollection(newCollection, hash).isFailure()) { + if (pclusters->addCollection(newCollection, hash).isFailure()) { ATH_MSG_ERROR("Couldn't add CscPrepdataCollection to container!"); return StatusCode::FAILURE; } diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.h b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.h index 89a41d35aa6ad074b460e442b5a705e3c512b612..2b7326056c1e304fcb1a361d2f20c11ca2b8bd6e 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscPeakThresholdClusterBuilderTool.h @@ -89,7 +89,7 @@ class CscPeakThresholdClusterBuilderTool : virtual public ICscClusterBuilder, pu StatusCode initialize(); // Event processing. - StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect); + StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer *object); // Finalization. StatusCode finalize(); @@ -101,8 +101,8 @@ class CscPeakThresholdClusterBuilderTool : virtual public ICscClusterBuilder, pu // int make_clusters(bool dump, int maxstrip, double pitch, const std::vector<Muon::CscStripPrepData*>& strips); int make_clusters(bool measphi, const std::vector<const Muon::CscStripPrepData*>& strips, Muon::CscPrepDataCollection*& collection); - StatusCode getClusters(IdentifierHash idVect, std::vector<IdentifierHash>& selectedIdVect); - StatusCode getClusters(std::vector<IdentifierHash>& selectedIdVect); + StatusCode getClusters(IdentifierHash idVect, std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer *pclusters); + StatusCode getClusters(std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer *pclusters); private: // data // Properties. diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.cxx b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.cxx index 91834f31e07b19858338c7be252f3e9c8e9f8030..5f15c7efe06739ecbf355cec3be5ecc5f84ece03 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.cxx @@ -15,7 +15,7 @@ using std::vector; //****************************************************************************** CscThresholdClusterBuilder::CscThresholdClusterBuilder(const std::string& aname, ISvcLocator* pSvcLocator) - : AthAlgorithm(aname, pSvcLocator) + : AthAlgorithm(aname, pSvcLocator) { } @@ -35,8 +35,10 @@ CscThresholdClusterBuilder::initialize() // Retrieve the strip fitting tool. ATH_CHECK(m_cluster_builder.retrieve()); - ATH_MSG_DEBUG("Retrieved strip fitting tool " << m_cluster_builder); + // Initialise output cluster container + ATH_CHECK(m_pclusters.initialize()); + ATH_CHECK(m_idHelperSvc.retrieve()); return StatusCode::SUCCESS; } @@ -53,26 +55,29 @@ CscThresholdClusterBuilder::execute() std::vector<IdentifierHash> givenIDs; std::vector<IdentifierHash> decodedIDs; - if (m_cluster_builder->getClusters(givenIDs, decodedIDs).isFailure()) { - ATH_MSG_ERROR("Cannot record CSC Cluster Container "); - return StatusCode::FAILURE; + //prepare output + SG::WriteHandle<Muon::CscPrepDataContainer> wh_pclusters(m_pclusters); + Muon::CscPrepDataContainer* object = new Muon::CscPrepDataContainer(m_idHelperSvc->cscIdHelper().module_hash_max()); + if (!wh_pclusters.isPresent()) { + /// record the container in storeGate + if (wh_pclusters.record(std::unique_ptr<Muon::CscPrepDataContainer>(object)).isFailure()) { + ATH_MSG_ERROR("Could not record container of CSC Cluster PrepData at " << m_pclusters.key()); + return StatusCode::RECOVERABLE; + } + } else { + ATH_MSG_DEBUG("CSC Cluster PrepData Container is already in StoreGate; nothing to do "); + return StatusCode::SUCCESS; + } + + if (m_cluster_builder->getClusters(givenIDs, decodedIDs, object).isFailure()) { + ATH_MSG_ERROR("CSC cluster building failed"); + return StatusCode::FAILURE; } } else { - ATH_MSG_ERROR("Initialization failed"); + ATH_MSG_ERROR("No cluster builder tool initialised"); return StatusCode::FAILURE; } return StatusCode::SUCCESS; } -//****************************************************************************** - -StatusCode -CscThresholdClusterBuilder::finalize() -{ - ATH_MSG_VERBOSE("Finalizing " << name()); - // m_pclusters->release(); - return StatusCode::SUCCESS; -} - -//****************************************************************************** diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.h b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.h index e24e0c45ccb886553674c99acd64d42fd0610ea6..ecd175857adf565c3acf0479fd950f8ec140eb32 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.h +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilder.h @@ -60,6 +60,8 @@ #include "GaudiKernel/ToolHandle.h" #include "MuonPrepRawData/MuonPrepDataContainer.h" #include "CscClusterization/ICscClusterBuilder.h" +#include "MuonPrepRawData/CscPrepDataContainer.h" +#include "MuonIdHelpers/IMuonIdHelperSvc.h" namespace MuonGM { class MuonDetectorManager; @@ -87,8 +89,6 @@ class CscThresholdClusterBuilder : public AthAlgorithm { // Event processing. StatusCode execute(); - // Finalization. - StatusCode finalize(); private: // data // Strip fitter. @@ -97,6 +97,19 @@ class CscThresholdClusterBuilder : public AthAlgorithm { "cluster_builder", "CscThresholdClusterBuilderTool/CscThresholdClusterBuilderTool", }; + + ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{ + this, + "MuonIdHelperSvc", + "Muon::MuonIdHelperSvc/MuonIdHelperSvc", + }; + + SG::WriteHandleKey<Muon::CscPrepDataContainer> m_pclusters{ + this, + "cluster_key", + "CSC_Clusters", + "Ouput CSC Cluster container"}; + }; #endif diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.cxx b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.cxx index ffd848acb639690710a12df6ca90facc871492c0..aecb66d83f3b612032039aca9e06a591c339a33d 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.cxx @@ -16,7 +16,6 @@ #include "EventPrimitives/EventPrimitivesToStringConverter.h" #include "Gaudi/Property.h" #include "MuonPrepRawData/CscClusterStatus.h" -#include "MuonPrepRawData/CscPrepDataContainer.h" #include "MuonPrepRawData/CscStripPrepData.h" #include "MuonPrepRawData/CscStripPrepDataContainer.h" #include "MuonReadoutGeometry/CscReadoutElement.h" @@ -76,9 +75,7 @@ CscThresholdClusterBuilderTool::CscThresholdClusterBuilderTool(const std::string const IInterface* parent) : AthAlgTool(type, aname, parent), m_noiseOption(rms), - m_digit_key("CSC_Measurements"), - m_pclusters("CSC_Clusters"), - m_fullEventDone(false) + m_digit_key("CSC_Measurements") { declareInterface<ICscClusterBuilder>(this); @@ -86,7 +83,6 @@ CscThresholdClusterBuilderTool::CscThresholdClusterBuilderTool(const std::string declareProperty("kFactor", m_kFactor = 6.5); declareProperty("noiseOption", m_noiseOptionStr = "f001"); declareProperty("digit_key", m_digit_key); - declareProperty("cluster_key", m_pclusters); declareProperty("makeNarrowClusterThreeStrips", m_makeNarrowClusterThreeStrips = true); } @@ -105,9 +101,7 @@ CscThresholdClusterBuilderTool::initialize() ATH_MSG_DEBUG("Properties for " << name() << ":"); ATH_MSG_DEBUG(" Strip threshold is Max( " << m_threshold << ", " << m_kFactor << "*stripNoise ) where stripNoise is from " << m_noiseOptionStr); - ATH_CHECK(m_digit_key.initialize()); - ATH_CHECK(m_pclusters.initialize()); if (m_noiseOptionStr != "rms" && m_noiseOptionStr != "sigma" && m_noiseOptionStr != "f001") { ATH_MSG_DEBUG(" noiseOption is not among rms/sigma/f001. rms is used for default!!"); m_noiseOptionStr = "rms"; @@ -124,7 +118,6 @@ CscThresholdClusterBuilderTool::initialize() ATH_MSG_DEBUG(" Precision cluster fitter is " << m_pfitter_prec.typeAndName()); ATH_MSG_DEBUG(" Split cluster fitter is " << m_pfitter_split.typeAndName()); ATH_MSG_DEBUG(" Input digit key is " << m_digit_key.key()); - ATH_MSG_DEBUG(" Output cluster key is " << m_pclusters.key()); // CSC calibratin tool for the Condtiions Data base access // ATH_CHECK_RECOVERABLE(m_cscCalibTool.retrieve()); @@ -156,32 +149,12 @@ CscThresholdClusterBuilderTool::initialize() StatusCode CscThresholdClusterBuilderTool::getClusters(std::vector<IdentifierHash>& givenIDs, - std::vector<IdentifierHash>& decodedIds) + std::vector<IdentifierHash>& decodedIds, + CscPrepDataContainer* object) { // clear output vector of selected data collections containing data decodedIds.clear(); - SG::WriteHandle<Muon::CscPrepDataContainer> wh_pclusters(m_pclusters); - CscPrepDataContainer* object = new CscPrepDataContainer(m_idHelperSvc->cscIdHelper().module_hash_max()); - - if (!wh_pclusters.isPresent()) { - /// record the container in storeGate - if (wh_pclusters.record(std::unique_ptr<Muon::CscPrepDataContainer>(object)).isFailure()) { - ATH_MSG_ERROR("Could not record container of CSC Cluster PrepData at " << m_pclusters.key()); - return StatusCode::RECOVERABLE; - } - m_fullEventDone = false; - if (givenIDs.size() == 0) m_fullEventDone = true; - - } else { - ATH_MSG_DEBUG("CSC Cluster PrepData Container is already in StoreGate "); - if (m_fullEventDone) { - ATH_MSG_DEBUG("Whole event has already been processed; nothing to do"); - return StatusCode::SUCCESS; - } - if (givenIDs.size() == 0) m_fullEventDone = true; - } - if (givenIDs.size() != 0) { for (unsigned int i = 0; i < givenIDs.size(); ++i) { if (getClusters(givenIDs[i], decodedIds, object).isFailure()) { diff --git a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.h b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.h index 2e8ab9920ae397c66f7c60cd08564b754cb08e39..19f0b7b312d8411bbf26d24c6e0a81b196fae7b5 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.h +++ b/MuonSpectrometer/MuonReconstruction/MuonDataPrep/CscClusterization/src/CscThresholdClusterBuilderTool.h @@ -62,6 +62,7 @@ #include "MuonPrepRawData/MuonPrepDataContainer.h" #include "MuonReadoutGeometry/MuonDetectorManager.h" #include "CscClusterization/ICscClusterBuilder.h" +#include "MuonPrepRawData/CscPrepDataContainer.h" class ICscCalibTool; class ICscStripFitter; @@ -96,7 +97,7 @@ class CscThresholdClusterBuilderTool : virtual public ICscClusterBuilder, public StatusCode initialize(); // Event processing. - StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect); + StatusCode getClusters(std::vector<IdentifierHash>& idVect, std::vector<IdentifierHash>& selectedIdVect, Muon::CscPrepDataContainer *object); // Finalization. StatusCode finalize(); @@ -120,7 +121,6 @@ class CscThresholdClusterBuilderTool : virtual public ICscClusterBuilder, public std::string m_noiseOptionStr; NoiseOption m_noiseOption; SG::ReadHandleKey<Muon::CscStripPrepDataContainer> m_digit_key; // SG key for input digits - SG::WriteHandleKey<Muon::CscPrepDataContainer> m_pclusters; // SG key for output clusters // Calibration tool. ToolHandle<ICscCalibTool> m_cscCalibTool{ @@ -167,9 +167,6 @@ class CscThresholdClusterBuilderTool : virtual public ICscClusterBuilder, public "Key of input MuonDetectorManager condition data", }; - // keep track of full event being already processed - bool m_fullEventDone; - bool m_makeNarrowClusterThreeStrips; }; diff --git a/PhysicsAnalysis/AnalysisCommon/PATCore/CMakeLists.txt b/PhysicsAnalysis/AnalysisCommon/PATCore/CMakeLists.txt index ea12f75d089d608bdb37455c8fa4691ccd043a3d..6ee44014a08750a43dfaeeb24e2428ffd55c7abf 100644 --- a/PhysicsAnalysis/AnalysisCommon/PATCore/CMakeLists.txt +++ b/PhysicsAnalysis/AnalysisCommon/PATCore/CMakeLists.txt @@ -23,11 +23,17 @@ atlas_depends_on_subdirs( find_package( ROOT COMPONENTS Core ) # Component(s) in the package: +atlas_add_library( PATCoreAcceptLib + Root/accept/*.cxx + PUBLIC_HEADERS PATCore + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ) + atlas_add_library( PATCoreLib - PATCore/*.h Root/*.cxx + Root/*.cxx PUBLIC_HEADERS PATCore INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthContainers AsgTools ${extra_libs} ) + LINK_LIBRARIES ${ROOT_LIBRARIES} PATCoreAcceptLib AthContainers AsgTools ${extra_libs} ) atlas_add_dictionary( PATCoreDict PATCore/PATCoreDict.h diff --git a/PhysicsAnalysis/AnalysisCommon/PATCore/Root/AcceptData.cxx b/PhysicsAnalysis/AnalysisCommon/PATCore/Root/accept/AcceptData.cxx similarity index 100% rename from PhysicsAnalysis/AnalysisCommon/PATCore/Root/AcceptData.cxx rename to PhysicsAnalysis/AnalysisCommon/PATCore/Root/accept/AcceptData.cxx diff --git a/PhysicsAnalysis/AnalysisCommon/PATCore/Root/AcceptInfo.cxx b/PhysicsAnalysis/AnalysisCommon/PATCore/Root/accept/AcceptInfo.cxx similarity index 100% rename from PhysicsAnalysis/AnalysisCommon/PATCore/Root/AcceptInfo.cxx rename to PhysicsAnalysis/AnalysisCommon/PATCore/Root/accept/AcceptInfo.cxx diff --git a/PhysicsAnalysis/RingerSelectorTools/CMakeLists.txt b/PhysicsAnalysis/RingerSelectorTools/CMakeLists.txt index f7d8411db70d24f85f2dcfa0186afcc0026b9cc6..7800944552b150b75cd24c420a99cd6e04e7cbf4 100644 --- a/PhysicsAnalysis/RingerSelectorTools/CMakeLists.txt +++ b/PhysicsAnalysis/RingerSelectorTools/CMakeLists.txt @@ -17,23 +17,6 @@ else() set( extra_dep Control/AthContainers Tracking/TrkEvent/TrkTrackSummary GaudiKernel ) endif() -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthToolSupport/AsgTools - Control/CxxUtils - Event/xAOD/xAODCaloRings - Event/xAOD/xAODEgamma - Event/xAOD/xAODTracking - Event/xAOD/xAODEventInfo - PhysicsAnalysis/AnalysisCommon/PATCore - PhysicsAnalysis/ElectronPhotonID/ElectronPhotonSelectorTools - PhysicsAnalysis/Interfaces/EgammaAnalysisInterfaces - ${extra_pub_dep} - PRIVATE - Event/xAOD/xAODBase - Tools/PathResolver - ${extra_dep} ) - # External dependencies: find_package( Boost COMPONENTS filesystem thread system ) find_package( ROOT COMPONENTS Core Gpad Tree MathCore Hist RIO pthread ) @@ -42,7 +25,7 @@ atlas_add_library( RingerSelectorToolsEnumsLib Root/enums/*.cxx PUBLIC_HEADERS RingerSelectorTools INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} PATCoreLib ) + LINK_LIBRARIES ${ROOT_LIBRARIES} PATCoreAcceptLib ) atlas_add_library( RingerSelectorToolsLib Root/*.cxx diff --git a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCreatorTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCreatorTool.cxx index e341909ee5af9bc4c3541a3cd88a68c85a246705..814861321f452fcdd64db38b687fef5ad7216348 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCreatorTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedBaseTools/src/MuonCreatorTool.cxx @@ -1053,6 +1053,10 @@ namespace MuonCombined { const MuGirlTag* muGirlTag = static_cast<const MuGirlTag*>(tag); if(muGirlTag->combinedTrack()){ std::unique_ptr<xAOD::TrackParticle> combtp(m_particleCreator->createParticle(muGirlTag->combinedTrackLink(),nullptr,nullptr,xAOD::muon)); + if (!combtp.get()) { + ATH_MSG_WARNING("MuGirl combtp is nullptr, continue"); + continue; + } std::unique_ptr<Trk::CaloExtension> caloExtension = m_caloExtTool->caloExtension(*combtp); if(!caloExtension){ ATH_MSG_WARNING("failed to get a calo extension for this MuGirl muon, don't use it"); @@ -1071,6 +1075,10 @@ namespace MuonCombined { //since this isn't really a tunable parameter of the reconstruction, I'm not making it a property if(cfTag->combinedTrack() && cfTag->combinedTrack()->perigeeParameters()->pT()<3000){ std::unique_ptr<xAOD::TrackParticle> combtp(m_particleCreator->createParticle(cfTag->combinedTrackLink(),nullptr,nullptr,xAOD::muon)); + if (!combtp.get()) { + ATH_MSG_WARNING("MuidCo combtp is nullptr, continue"); + continue; + } std::unique_ptr<Trk::CaloExtension> caloExtension = m_caloExtTool->caloExtension(*combtp); if(!caloExtension){ ATH_MSG_WARNING("failed to get a calo extension for this combined muon, don't use it"); diff --git a/Reconstruction/RecAlgs/src/JobOptsDumperAlg.cxx b/Reconstruction/RecAlgs/src/JobOptsDumperAlg.cxx index 1aa63d94971f12bc9f5c24432a3f04b1135bbeaa..4229a18e4a97ed77566042499cedb16236d562d9 100755 --- a/Reconstruction/RecAlgs/src/JobOptsDumperAlg.cxx +++ b/Reconstruction/RecAlgs/src/JobOptsDumperAlg.cxx @@ -2,7 +2,8 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -#include "GaudiKernel/IJobOptionsSvc.h" +#include "Gaudi/Interfaces/IOptionsSvc.h" +#include "GaudiKernel/ServiceHandle.h" #include "JobOptsDumperAlg.h" #include <fstream> @@ -15,17 +16,14 @@ StatusCode JobOptsDumperAlg::initialize() { return StatusCode::FAILURE; } - - IJobOptionsSvc* p_jobOptionSvc; - ATH_CHECK(service("JobOptionsSvc", p_jobOptionSvc)); + ServiceHandle<Gaudi::Interfaces::IOptionsSvc> joSvc("JobOptionsSvc", name()); + ATH_CHECK(joSvc.retrieve()); std::vector<std::string> options; - for (const std::string& compName : p_jobOptionSvc->getClients()) { - for (const auto& props: *p_jobOptionSvc->getProperties(compName)) { - std::ostringstream os; - os << compName << "." << props->name() << " = " << props->toString() << std::endl; - options.emplace_back(os.str()); - } + for (const auto& [name, value] : joSvc->items()) { + std::ostringstream os; + os << name << " = " << value << std::endl; + options.emplace_back(os.str()); } std::sort(options.begin(), options.end()); diff --git a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py index 88ab3be2ad2f9d4061dd036472a6511a17080a7b..d095185b9c1c5c1437abf5ac6b3e4be59ac94e2c 100644 --- a/Reconstruction/tauRec/python/TauAlgorithmsHolder.py +++ b/Reconstruction/tauRec/python/TauAlgorithmsHolder.py @@ -913,7 +913,6 @@ def getTauIDVarCalculator(): _name = sPrefix + 'TauIDVarCalculator' from tauRecTools.tauRecToolsConf import TauIDVarCalculator myTauIDVarCalculator = TauIDVarCalculator(name=_name, - Key_vertexInputContainer=_DefaultVertexContainer, IncShowerSubtr = tauFlags.useShowerSubClusters() ) cached_instances[_name] = myTauIDVarCalculator return myTauIDVarCalculator diff --git a/Reconstruction/tauRec/python/TauRecBuilder.py b/Reconstruction/tauRec/python/TauRecBuilder.py index 85c50673c4dabbcdd4975bfa36c18f31ceb75817..d7ae84c0b8b9fbd1022f6fc8e4973351aa4fcbec 100644 --- a/Reconstruction/tauRec/python/TauRecBuilder.py +++ b/Reconstruction/tauRec/python/TauRecBuilder.py @@ -23,12 +23,11 @@ import traceback from RecExConfig.Configured import Configured from .TauRecConfigured import TauRecConfigured -# global tauRec config keys +# global tauRec config keys - to be replaced with tauRecFlags _outputType = "xAOD::TauJetContainer" _outputKey = "TauJets" _outputAuxType = "xAOD::TauJetAuxContainer" _outputAuxKey = "TauJetsAux." -_track_collection = "InDetTrackParticles" ################################################################################ ## @class TauRecCoreBuilder @@ -40,14 +39,19 @@ class TauRecCoreBuilder ( TauRecConfigured ) : Find clusters used for Pi0 identification and eflow variables. PhotonConversion will be run here too. """ - + _output = { _outputType:_outputKey , _outputAuxType:_outputAuxKey, 'xAOD::TauTrackContainer' : 'TauTracks', 'xAOD::CaloClusterContainer' : 'TauShotClusters', 'xAOD::PFOContainer' : 'TauShotParticleFlowObjects', 'CaloCellContainer' : 'TauCommonPi0Cells', } - + + # drop TauCommonPi0Cells container from nominal xAODs, too heavy + _outputAOD = _output.copy() + _outputAOD.pop('CaloCellContainer') + + def __init__(self, name = "TauCoreBuilder",doPi0Clus=False, doTJVA=False): self.name = name self.doPi0Clus = doPi0Clus @@ -65,7 +69,7 @@ class TauRecCoreBuilder ( TauRecConfigured ) : from RecExConfig.ObjKeyStore import objKeyStore objKeyStore.addManyTypesStreamESD(self._output) - objKeyStore.addManyTypesStreamAOD(self._output) + objKeyStore.addManyTypesStreamAOD(self._outputAOD) objKeyStore.addManyTypesTransient(self._output) import tauRec.TauAlgorithmsHolder as taualgs diff --git a/Reconstruction/tauRec/python/TauRecRunner.py b/Reconstruction/tauRec/python/TauRecRunner.py index a71d23365c7f3b1302c918dc81b40dc76e2202a9..176ebb9561f08f9116a24970feca815a80d452b7 100644 --- a/Reconstruction/tauRec/python/TauRecRunner.py +++ b/Reconstruction/tauRec/python/TauRecRunner.py @@ -28,7 +28,6 @@ _outputType = "xAOD::TauJetContainer" _outputKey = "TauJets" _outputAuxType = "xAOD::TauJetAuxContainer" _outputAuxKey = "TauJetsAux." -_track_collection = "InDetTrackParticles" ################################################################################ ## @class TauRecRunner @@ -46,7 +45,7 @@ class TauRecRunner ( TauRecRunConfigured ) : def __init__(self, name = "TauRecRunner",doPi0Clus=False, doTJVA=False): self.name = name self.doPi0Clus = doPi0Clus - self.do_TJVA = doTJVA + self.do_TJVA = doTJVA # not used in the TauRecRunner? TauRecRunConfigured.__init__(self, name) @@ -87,7 +86,6 @@ class TauRecRunner ( TauRecRunConfigured ) : if self.doPi0Clus: tools.append(taualgs.getPi0ClusterScaler()) tools.append(taualgs.getPi0ScoreCalculator()) - # SWITCHED OFF SELECTOR< SINCE NO CHARGED PFOS AVAILABLE ATM tools.append(taualgs.getPi0Selector()) tools.append(taualgs.getEnergyCalibrationLC(correctEnergy=False, correctAxis=True, postfix='_onlyAxis')) @@ -105,8 +103,8 @@ class TauRecRunner ( TauRecRunConfigured ) : if tauFlags.doRunTauDiscriminant(): tools.append(taualgs.getTauIDVarCalculator()) - tools.append(taualgs.getTauJetBDTEvaluator("TauJetBDT1P", weightsFile="vars2016_pt_gamma_1p_isofix.root", minNTracks=0, maxNTracks=1)) #update config? - tools.append(taualgs.getTauJetBDTEvaluator("TauJetBDT3P", weightsFile="vars2016_pt_gamma_3p_isofix.root", minNTracks=2, maxNTracks=1000)) #update config? + tools.append(taualgs.getTauJetBDTEvaluator("TauJetBDT1P", weightsFile="vars2016_pt_gamma_1p_isofix.root", minNTracks=0, maxNTracks=1)) + tools.append(taualgs.getTauJetBDTEvaluator("TauJetBDT3P", weightsFile="vars2016_pt_gamma_3p_isofix.root", minNTracks=2, maxNTracks=1000)) tools.append(taualgs.getTauWPDecoratorJetBDT()) tools.append(taualgs.getTauJetRNNEvaluator("TauJetRNN", NetworkFile1P="rnnid_mc16d_config_1p.json", @@ -116,13 +114,13 @@ class TauRecRunner ( TauRecRunConfigured ) : tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_def", weightsFile="", outputVarName="BDTEleScore"))#just inits values tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_bar", weightsFile="EleBDT1PBar.root", minNTracks=1, maxAbsTrackEta=1.37, - outputVarName="BDTEleScore")) #update config? + outputVarName="BDTEleScore")) tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_end1", weightsFile="EleBDT1PEnd1.root", minNTracks=1, minAbsTrackEta=1.37, - maxAbsTrackEta=2.0, outputVarName="BDTEleScore")) #update config? + maxAbsTrackEta=2.0, outputVarName="BDTEleScore")) tools.append(taualgs.getTauJetBDTEvaluator("TauEleBDT_end23", weightsFile="EleBDT1PEnd23.root", minNTracks=1, minAbsTrackEta=2.0, - maxAbsTrackEta=3.0, outputVarName="BDTEleScore")) #update config? + maxAbsTrackEta=3.0, outputVarName="BDTEleScore")) tools.append(taualgs.getTauWPDecoratorEleBDT()) tools.append(taualgs.getTauDecayModeNNClassifier()) tools.append(taualgs.getTauEleOLRDecorator()) diff --git a/Reconstruction/tauRecTools/Root/TauIDVarCalculator.cxx b/Reconstruction/tauRecTools/Root/TauIDVarCalculator.cxx index b5bd887590eb22bf2f9352da4d017b1fdb608d27..fcddc9dc877a27dd81e4097fb5ac1d7b7fe9bda9 100644 --- a/Reconstruction/tauRecTools/Root/TauIDVarCalculator.cxx +++ b/Reconstruction/tauRecTools/Root/TauIDVarCalculator.cxx @@ -13,7 +13,6 @@ #include "CaloGeoHelpers/CaloSampling.h" #include "FourMomUtils/xAODP4Helpers.h" -#include "AsgDataHandles/ReadHandle.h" #include "TLorentzVector.h" @@ -27,73 +26,36 @@ TauIDVarCalculator::TauIDVarCalculator(const std::string& name): declareProperty("IncShowerSubtr", m_incShowerSubtr); } -StatusCode TauIDVarCalculator::initialize() -{ - ATH_CHECK( m_vertexInputContainer.initialize(!m_vertexInputContainer.key().empty()) ); - return StatusCode::SUCCESS; -} - StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const -{ - int nVtx = 0; - if(!inTrigger()){ - - nVtx = int(LOW_NUMBER); - // Get the primary vertex container from StoreGate - const xAOD::VertexContainer* vertexContainer = nullptr; - SG::ReadHandle<xAOD::VertexContainer> vertexInHandle( m_vertexInputContainer ); - if (!vertexInHandle.isValid()) { - ATH_MSG_ERROR ("Could not retrieve HiveDataObj with key " << vertexInHandle.key()); - return StatusCode::FAILURE; - } - else{ - vertexContainer = vertexInHandle.cptr(); - nVtx=0; - for( auto vertex : *vertexContainer ){ - if(!vertex) continue; - // WARNING! the nVtx definition is different from the MVA TES equivalent, where we only count pileup vertices - int nTrackParticles = vertex->nTrackParticles(); - if( (nTrackParticles >= 4 && vertex->vertexType() == xAOD::VxType::PriVtx) || - (nTrackParticles >= 2 && vertex->vertexType() == xAOD::VxType::PileUp)){ - nVtx++; - } - } - } - } - - SG::AuxElement::Accessor<float> acc_absipSigLeadTrk("absipSigLeadTrk"); +{ + static const SG::AuxElement::Accessor<float> acc_absipSigLeadTrk("absipSigLeadTrk"); float ipSigLeadTrk=0.; if(!tau.detail(xAOD::TauJetParameters::ipSigLeadTrk, ipSigLeadTrk)) return StatusCode::FAILURE; acc_absipSigLeadTrk(tau) = std::abs(ipSigLeadTrk); - //don't calculate EleBDT variables if run from TrigTauDiscriminant: if(inTrigger()) return StatusCode::SUCCESS; //everything below is just for EleBDT! - SG::AuxElement::Accessor<float> acc_absEtaLead("ABS_ETA_LEAD_TRACK"); - SG::AuxElement::Accessor<float> acc_leadTrackProbHT("leadTrackProbHT"); - SG::AuxElement::Accessor<float> acc_leadTrackEta("leadTrackEta"); - SG::AuxElement::Accessor<float> acc_absDeltaEta("TAU_ABSDELTAETA"); - SG::AuxElement::Accessor<float> acc_absDeltaPhi("TAU_ABSDELTAPHI"); - const SG::AuxElement::ConstAccessor<float> acc_sumEMCellEtOverLeadTrkPt("sumEMCellEtOverLeadTrkPt"); - const SG::AuxElement::ConstAccessor<float> acc_etHadAtEMScale("etHadAtEMScale"); - const SG::AuxElement::ConstAccessor<float> acc_etEMAtEMScale("etEMAtEMScale"); - SG::AuxElement::Accessor<float> acc_EMFractionAtEMScaleMOVEE3("EMFRACTIONATEMSCALE_MOVEE3"); - SG::AuxElement::Accessor<float> acc_seedTrkSecMaxStripEtOverPt("TAU_SEEDTRK_SECMAXSTRIPETOVERPT"); - const SG::AuxElement::ConstAccessor<float> acc_secMaxStripEt("secMaxStripEt"); - const SG::AuxElement::ConstAccessor<float> acc_centFrac("centFrac"); - const SG::AuxElement::ConstAccessor<float> acc_etOverPtLeadTrk("etOverPtLeadTrk"); - SG::AuxElement::Accessor<float> acc_corrftrk("CORRFTRK"); - SG::AuxElement::Accessor<float> acc_centFracCorrected("CORRCENTFRAC"); + static const SG::AuxElement::Accessor<float> acc_absEtaLead("ABS_ETA_LEAD_TRACK"); + static const SG::AuxElement::Accessor<float> acc_leadTrackProbHT("leadTrackProbHT"); + static const SG::AuxElement::Accessor<float> acc_absDeltaEta("TAU_ABSDELTAETA"); + static const SG::AuxElement::Accessor<float> acc_absDeltaPhi("TAU_ABSDELTAPHI"); + static const SG::AuxElement::ConstAccessor<float> acc_sumEMCellEtOverLeadTrkPt("sumEMCellEtOverLeadTrkPt"); + static const SG::AuxElement::ConstAccessor<float> acc_etHadAtEMScale("etHadAtEMScale"); + static const SG::AuxElement::ConstAccessor<float> acc_etEMAtEMScale("etEMAtEMScale"); + static const SG::AuxElement::Accessor<float> acc_EMFractionAtEMScaleMOVEE3("EMFRACTIONATEMSCALE_MOVEE3"); + static const SG::AuxElement::Accessor<float> acc_seedTrkSecMaxStripEtOverPt("TAU_SEEDTRK_SECMAXSTRIPETOVERPT"); + static const SG::AuxElement::ConstAccessor<float> acc_secMaxStripEt("secMaxStripEt"); + static const SG::AuxElement::ConstAccessor<float> acc_centFrac("centFrac"); // Will: Fixed variables for R21 - SG::AuxElement::Accessor<float> acc_EMFracFixed("EMFracFixed"); - SG::AuxElement::Accessor<float> acc_hadLeakFracFixed("hadLeakFracFixed"); - SG::AuxElement::Accessor<float> acc_etHotShotDR1("etHotShotDR1"); // replace secMaxStripEt - SG::AuxElement::Accessor<float> acc_etHotShotWin("etHotShotWin"); // replace secMaxStripEt - SG::AuxElement::Accessor<float> acc_etHotShotDR1OverPtLeadTrk("etHotShotDR1OverPtLeadTrk"); // replace TAU_SEEDTRK_SECMAXSTRIPETOVERPT - SG::AuxElement::Accessor<float> acc_etHotShotWinOverPtLeadTrk("etHotShotWinOverPtLeadTrk"); // replace TAU_SEEDTRK_SECMAXSTRIPETOVERPT + static const SG::AuxElement::Accessor<float> acc_EMFracFixed("EMFracFixed"); + static const SG::AuxElement::Accessor<float> acc_hadLeakFracFixed("hadLeakFracFixed"); + static const SG::AuxElement::Accessor<float> acc_etHotShotDR1("etHotShotDR1"); // replace secMaxStripEt + static const SG::AuxElement::Accessor<float> acc_etHotShotWin("etHotShotWin"); // replace secMaxStripEt + static const SG::AuxElement::Accessor<float> acc_etHotShotDR1OverPtLeadTrk("etHotShotDR1OverPtLeadTrk"); // replace TAU_SEEDTRK_SECMAXSTRIPETOVERPT + static const SG::AuxElement::Accessor<float> acc_etHotShotWinOverPtLeadTrk("etHotShotWinOverPtLeadTrk"); // replace TAU_SEEDTRK_SECMAXSTRIPETOVERPT // EMFracFixed and eHad1AtEMScaleFixed (for acc_hadLeakFracFixed) @@ -121,9 +83,9 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const } const TLorentzVector& p4IntAxis = tau.p4(xAOD::TauJetParameters::IntermediateAxis); - float eEMAtEMScaleFixed = 0; - float eHadAtEMScaleFixed = 0; - float eHad1AtEMScaleFixed = 0; + float eEMAtEMScaleFixed = 0.; + float eHadAtEMScaleFixed = 0.; + float eHad1AtEMScaleFixed = 0.; // Loop through jets, get links to clusters std::vector<const xAOD::CaloCluster*> clusterList; @@ -141,13 +103,12 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const for( auto samp : Had1Samps ) eHad1AtEMScaleFixed += cl->eSample(samp); } - acc_EMFracFixed(tau) = ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) != 0 ? + acc_EMFracFixed(tau) = ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) != 0. ? eEMAtEMScaleFixed / ( eEMAtEMScaleFixed + eHadAtEMScaleFixed ) : LOW_NUMBER; if(tau.nTracks() > 0){ const xAOD::TrackParticle* track = tau.track(0)->track(); acc_absEtaLead(tau) = std::abs( track->eta() ); - acc_leadTrackEta(tau) = std::abs( track->eta() ); acc_absDeltaEta(tau) = std::abs( track->eta() - tau.eta() ); acc_absDeltaPhi(tau) = std::abs( track->p4().DeltaPhi(tau.p4()) ); //EMFRACTIONATEMSCALE_MOVEE3: @@ -159,14 +120,14 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const float tau_seedCalo_etEMAtEMScale_yesE3 = etEMScale1 + tau_E3; acc_EMFractionAtEMScaleMOVEE3(tau) = tau_seedCalo_etEMAtEMScale_yesE3 / (tau_seedCalo_etEMAtEMScale_yesE3 + tau_seedCalo_etHadAtEMScale_noE3); //TAU_SEEDTRK_SECMAXSTRIPETOVERPT: - acc_seedTrkSecMaxStripEtOverPt(tau) = (track->pt() != 0) ? acc_secMaxStripEt(tau) / track->pt() : LOW_NUMBER; + acc_seedTrkSecMaxStripEtOverPt(tau) = (track->pt() != 0.) ? acc_secMaxStripEt(tau) / track->pt() : LOW_NUMBER; float fTracksEProbabilityHT; track->summaryValue( fTracksEProbabilityHT, xAOD::eProbabilityHT); acc_leadTrackProbHT(tau) = fTracksEProbabilityHT; // hadLeakFracFixed - acc_hadLeakFracFixed(tau) = (track->p4().P() != 0) ? eHad1AtEMScaleFixed / track->p4().P() : LOW_NUMBER; + acc_hadLeakFracFixed(tau) = (track->p4().P() != 0.) ? eHad1AtEMScaleFixed / track->p4().P() : LOW_NUMBER; // HOT SHOTS!!!!! // -------------- @@ -181,15 +142,15 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const ATH_MSG_DEBUG("track EM " << ", eta: " << etaCalo << ", phi: " << phiCalo ); // Get hottest shot in dR<0.1 and in 0.05 x 0.1 window - float etHotShotDR1 = 0; - float etHotShotWin = 0; + float etHotShotDR1 = 0.; + float etHotShotWin = 0.; for( auto shotLink : tau.shotPFOLinks() ){ if( not shotLink.isValid() ){ ATH_MSG_WARNING("Invalid shotLink"); continue; } - const xAOD::PFO* shot = (*shotLink); - float etShot = 0; + const xAOD::PFO* shot = *shotLink; + float etShot = 0.; shot->attribute(xAOD::PFODetails::tauShots_pt3, etShot); // In dR < 0.1 @@ -203,10 +164,11 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const } acc_etHotShotDR1(tau) = etHotShotDR1; acc_etHotShotWin(tau) = etHotShotWin; - acc_etHotShotDR1OverPtLeadTrk(tau) = (track->pt() != 0) ? etHotShotDR1 / track->pt() : LOW_NUMBER; - acc_etHotShotWinOverPtLeadTrk(tau) = (track->pt() != 0) ? etHotShotWin / track->pt() : LOW_NUMBER; + acc_etHotShotDR1OverPtLeadTrk(tau) = (track->pt() != 0.) ? etHotShotDR1 / track->pt() : LOW_NUMBER; + acc_etHotShotWinOverPtLeadTrk(tau) = (track->pt() != 0.) ? etHotShotWin / track->pt() : LOW_NUMBER; - }else{ + } + else{ acc_absEtaLead(tau) = LOW_NUMBER; acc_absDeltaEta(tau) = LOW_NUMBER; acc_absDeltaPhi(tau) = LOW_NUMBER; @@ -218,13 +180,6 @@ StatusCode TauIDVarCalculator::execute(xAOD::TauJet& tau) const acc_etHotShotDR1OverPtLeadTrk(tau) = LOW_NUMBER; acc_etHotShotWinOverPtLeadTrk(tau) = LOW_NUMBER; } - //CORRFTRK - float correction = nVtx != int(LOW_NUMBER) ? 0.003 * nVtx : 0.; - float etOverpTLeadTrk = acc_etOverPtLeadTrk(tau); - float ptLeadTrkOverEt = etOverpTLeadTrk > 0 ? 1. / etOverpTLeadTrk : LOW_NUMBER; - acc_corrftrk(tau) = ptLeadTrkOverEt != -1111. ? ptLeadTrkOverEt + correction : ptLeadTrkOverEt; - - acc_centFracCorrected(tau) = tau.pt() < 80. * GeV ? acc_centFrac(tau) + correction : acc_centFrac(tau); return StatusCode::SUCCESS; } diff --git a/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx b/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx index 1ac57e452a9d24e52eaefa4034bbd3343c8127ad..71b34dc43e82131b42d9f4264c24e79f73ec576c 100644 --- a/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx +++ b/Reconstruction/tauRecTools/Root/TauTrackRNNClassifier.cxx @@ -123,17 +123,17 @@ StatusCode TrackRNN::classifyTracks(std::vector<xAOD::TauTrack*>& vTracks, xAOD: if(vTracks.size() == 0) return StatusCode::SUCCESS; - SG::AuxElement::Accessor<float> idScoreCharged("rnn_chargedScore"); - SG::AuxElement::Accessor<float> idScoreIso("rnn_isolationScore"); - SG::AuxElement::Accessor<float> idScoreConv("rnn_conversionScore"); - SG::AuxElement::Accessor<float> idScoreFake("rnn_fakeScore"); - SG::AuxElement::Accessor<float> idScoreUncl("rnn_unclassifiedScore"); - - SG::AuxElement::Accessor<int> nTrkCharged("nRnnChargedTracks"); - SG::AuxElement::Accessor<int> nTrkIso("nRnnIsolationTracks"); - SG::AuxElement::Accessor<int> nTrkConv("nRnnConvertionTracks"); - SG::AuxElement::Accessor<int> nTrkFake("nRnnFakeTracks"); - SG::AuxElement::Accessor<int> nTrkUncl("nRnnUnclassifiedTracks"); + static const SG::AuxElement::Accessor<float> idScoreCharged("rnn_chargedScore"); + static const SG::AuxElement::Accessor<float> idScoreIso("rnn_isolationScore"); + static const SG::AuxElement::Accessor<float> idScoreConv("rnn_conversionScore"); + static const SG::AuxElement::Accessor<float> idScoreFake("rnn_fakeScore"); + static const SG::AuxElement::Accessor<float> idScoreUncl("rnn_unclassifiedScore"); + + static const SG::AuxElement::Accessor<int> nTrkCharged("nRnnChargedTracks"); + static const SG::AuxElement::Accessor<int> nTrkIso("nRnnIsolationTracks"); + static const SG::AuxElement::Accessor<int> nTrkConv("nRnnConvertionTracks"); + static const SG::AuxElement::Accessor<int> nTrkFake("nRnnFakeTracks"); + static const SG::AuxElement::Accessor<int> nTrkUncl("nRnnUnclassifiedTracks"); VectorMap valueMap; ATH_CHECK(calulateVars(vTracks, xTau, valueMap)); @@ -261,13 +261,14 @@ StatusCode TrackRNN::calulateVars(const std::vector<xAOD::TauTrack*>& vTracks, c valueMap["nSiHits"] = std::vector<double>(n_timeSteps); valueMap["charge"] = std::vector<double>(n_timeSteps); + double fTauSeedPt = xTau.ptJetSeed(); + double log_TauSeedPt = std::log(fTauSeedPt); unsigned int i = 0; for(xAOD::TauTrack* xTrack : vTracks) { const xAOD::TrackParticle* xTrackParticle = xTrack->track(); - double fTauSeedPt = xTau.ptJetSeed(); double fTrackPt = xTrackParticle->pt(); double fTrackEta = xTrackParticle->eta(); double fTrackCharge = xTrackParticle->charge(); @@ -290,43 +291,30 @@ StatusCode TrackRNN::calulateVars(const std::vector<xAOD::TauTrack*>& vTracks, c uint8_t iNumberOfContribPixelLayers = 0; ATH_CHECK( xTrackParticle->summaryValue(iNumberOfContribPixelLayers, xAOD::numberOfContribPixelLayers) ); uint8_t iNumberOfPixelHoles = 0; ATH_CHECK( xTrackParticle->summaryValue(iNumberOfPixelHoles, xAOD::numberOfPixelHoles) ); uint8_t iNumberOfSCTHoles = 0; ATH_CHECK( xTrackParticle->summaryValue(iNumberOfSCTHoles, xAOD::numberOfSCTHoles) ); - - float fTracksNumberOfInnermostPixelLayerHits = (float)iTracksNumberOfInnermostPixelLayerHits; - float fTracksNPixelHits = (float)iTracksNPixelHits; - float fTracksNPixelDeadSensors = (float)iTracksNPixelDeadSensors; - float fTracksNPixelSharedHits = (float)iTracksNPixelSharedHits; - float fTracksNSCTHits = (float)iTracksNSCTHits; - float fTracksNSCTDeadSensors = (float)iTracksNSCTDeadSensors; - float fTracksNSCTSharedHits = (float)iTracksNSCTSharedHits; - //float fTracksNTRTHighThresholdHits = (float)iTracksNTRTHighThresholdHits; - float fTracksNTRTHits = (float)iTracksNTRTHits; - - float fTracksNPixHits = fTracksNPixelHits + fTracksNPixelDeadSensors; - float fTracksNSiHits = fTracksNPixelHits + fTracksNPixelDeadSensors + fTracksNSCTHits + fTracksNSCTDeadSensors; - + float fTracksEProbabilityHT; ATH_CHECK( xTrackParticle->summaryValue( fTracksEProbabilityHT, xAOD::eProbabilityHT) ); //float fNumberOfContribPixelLayers = float(iNumberOfContribPixelLayers); //float fNumberOfPixelHoles = float(iNumberOfPixelHoles); //float fNumberOfSCTHoles = float(iNumberOfSCTHoles); - valueMap["log(trackPt)"][i] = log(fTrackPt); - valueMap["log(jetSeedPt)"][i] = log(fTauSeedPt); + valueMap["log(trackPt)"][i] = std::log(fTrackPt); + valueMap["log(jetSeedPt)"][i] = log_TauSeedPt; valueMap["(trackPt/jetSeedPt[0])"][i] = (fTrackPt/fTauSeedPt); valueMap["trackEta"][i] = fTrackEta; valueMap["z0sinThetaTJVA"][i] = fZ0SinthetaTJVA; - valueMap["log(rConv)"][i] = log(fRConv); - valueMap["tanh(rConvII/500)"][i] = tanh(fRConvII/500.0); + valueMap["log(rConv)"][i] = std::log(fRConv); + valueMap["tanh(rConvII/500)"][i] = std::tanh(fRConvII/500.0); valueMap["dRJetSeedAxis"][i] = fDRJetSeedAxis; - valueMap["tanh(d0/10)"][i] = tanh(fD0/10); + valueMap["tanh(d0/10)"][i] = std::tanh(fD0/10); valueMap["qOverP*1000"][i] = fQoverP*1000.0; - valueMap["numberOfInnermostPixelLayerHits"][i] = fTracksNumberOfInnermostPixelLayerHits; - valueMap["numberOfPixelSharedHits"][i] = fTracksNPixelSharedHits; - valueMap["numberOfSCTSharedHits"][i] = fTracksNSCTSharedHits; - valueMap["numberOfTRTHits"][i] = fTracksNTRTHits; + valueMap["numberOfInnermostPixelLayerHits"][i] = (float) iTracksNumberOfInnermostPixelLayerHits; + valueMap["numberOfPixelSharedHits"][i] = (float) iTracksNPixelSharedHits; + valueMap["numberOfSCTSharedHits"][i] = (float) iTracksNSCTSharedHits; + valueMap["numberOfTRTHits"][i] = (float) iTracksNTRTHits; valueMap["eProbabilityHT"][i] = fTracksEProbabilityHT; - valueMap["nPixHits"][i] = fTracksNPixHits; - valueMap["nSiHits"][i] = fTracksNSiHits; + valueMap["nPixHits"][i] = (float) (iTracksNPixelHits + iTracksNPixelDeadSensors); + valueMap["nSiHits"][i] = (float) (iTracksNPixelHits + iTracksNPixelDeadSensors + iTracksNSCTHits + iTracksNSCTDeadSensors); valueMap["charge"][i] = fTrackCharge; ++i; diff --git a/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h b/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h index a4618e291a15d60c5f5e37ef865d5348a02efdc2..b474b597504e1ad0f1f4621e004516eafeab62b6 100644 --- a/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h +++ b/Reconstruction/tauRecTools/tauRecTools/TauIDVarCalculator.h @@ -13,7 +13,6 @@ #define TAUIDVARCALCULATOR_H #include "tauRecTools/TauRecToolBase.h" -#include "AsgDataHandles/ReadHandleKey.h" class TauIDVarCalculator: public TauRecToolBase { @@ -25,15 +24,12 @@ class TauIDVarCalculator: public TauRecToolBase virtual ~TauIDVarCalculator() {} - virtual StatusCode initialize() override; virtual StatusCode execute(xAOD::TauJet&) const override; static const float LOW_NUMBER; private: - SG::ReadHandleKey<xAOD::VertexContainer> m_vertexInputContainer{this,"Key_vertexInputContainer", "PrimaryVertices", "input vertex container key"}; - bool m_incShowerSubtr; }; diff --git a/Simulation/G4Atlas/G4AtlasInterfaces/G4AtlasInterfaces/ATLAS_CHECK_THREAD_SAFETY b/Simulation/G4Atlas/G4AtlasInterfaces/G4AtlasInterfaces/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..b12c61875728050417b70f22188a866561ea075c --- /dev/null +++ b/Simulation/G4Atlas/G4AtlasInterfaces/G4AtlasInterfaces/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Simulation/G4Atlas/G4AtlasInterfaces diff --git a/Simulation/G4Sim/SimHelpers/SimHelpers/ATLAS_CHECK_THREAD_SAFETY b/Simulation/G4Sim/SimHelpers/SimHelpers/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..8655f7f91ae6a8e369b13bf97b94cfe0e4b5ed46 --- /dev/null +++ b/Simulation/G4Sim/SimHelpers/SimHelpers/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Simulation/G4Sim/SimHelpers diff --git a/Simulation/G4Sim/SimHelpers/SimHelpers/ServiceAccessor.h b/Simulation/G4Sim/SimHelpers/SimHelpers/ServiceAccessor.h index 618c70a86ec158e5899df2ab7df6a554fc0a1aec..f15b446639822c2d2e9eded9f4557d477d379e46 100644 --- a/Simulation/G4Sim/SimHelpers/SimHelpers/ServiceAccessor.h +++ b/Simulation/G4Sim/SimHelpers/SimHelpers/ServiceAccessor.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef ServiceAccessor_H @@ -13,16 +13,16 @@ inline INTupleSvc* ntupleSvc() { - static INTupleSvc* nS=0; - - if (!nS) + auto findNtupleSvc = []() { - StatusCode status; + INTupleSvc* nS = nullptr; ISvcLocator* svcLocator = Gaudi::svcLocator(); - status = svcLocator->service("NTupleSvc",nS); + StatusCode status = svcLocator->service("NTupleSvc",nS); if (status.isFailure()) std::cout<<" ntupleSvc(); could not access NTupleSvc"<<std::endl; - } + return nS; + }; + static INTupleSvc* const nS = findNtupleSvc(); return nS; } diff --git a/Simulation/G4Sim/SimHelpers/SimHelpers/TrackVisualizationHelper.h b/Simulation/G4Sim/SimHelpers/SimHelpers/TrackVisualizationHelper.h index 06d47c60503705a24e2eb612ab4487d8a8f5f52e..087ae7f4177f76d6f2943eb8336a12225b6fc59d 100644 --- a/Simulation/G4Sim/SimHelpers/SimHelpers/TrackVisualizationHelper.h +++ b/Simulation/G4Sim/SimHelpers/SimHelpers/TrackVisualizationHelper.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef TrackVisualizationHelper_H @@ -10,8 +10,8 @@ public: TrackVisualizationHelper(): m_trackVisualizationScheme(0),m_visualizeTracks(false) {} virtual ~TrackVisualizationHelper() {;} // Null op - virtual bool visualizeTracks() {return m_visualizeTracks;} - virtual int trackVisualizationScheme() {return m_trackVisualizationScheme;} + virtual bool visualizeTracks() const {return m_visualizeTracks;} + virtual int trackVisualizationScheme() const {return m_trackVisualizationScheme;} virtual void setTrackVisualizationScheme(int i) { m_trackVisualizationScheme=i; diff --git a/Simulation/G4Utilities/Geo2G4/src/Geo2G4OpticalSurfaceFactory.cxx b/Simulation/G4Utilities/Geo2G4/src/Geo2G4OpticalSurfaceFactory.cxx index 3af74f855bbd89eeaabbb4cc48dad4e3e14d285d..eac93dbfc87d7c185c72bfa7c209533ea3acefca 100644 --- a/Simulation/G4Utilities/Geo2G4/src/Geo2G4OpticalSurfaceFactory.cxx +++ b/Simulation/G4Utilities/Geo2G4/src/Geo2G4OpticalSurfaceFactory.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "Geo2G4OpticalSurfaceFactory.h" @@ -115,7 +115,7 @@ G4OpticalSurface* Geo2G4OpticalSurfaceFactory::Build(const GeoOpticalSurface* ge // Create material properties table Geo2G4MatPropTableFactory* tFactory = Geo2G4MatPropTableFactory::instance(); - GeoMaterialPropertiesTable* geoPropTable = geoOpticalSurface->GetMaterialPropertiesTable(); + const GeoMaterialPropertiesTable* geoPropTable = geoOpticalSurface->GetMaterialPropertiesTable(); if(geoPropTable){ G4MaterialPropertiesTable* g4PropTable = tFactory->Build(geoPropTable); diff --git a/Simulation/G4Utilities/GeoMaterial2G4/src/Geo2G4MaterialFactory.cxx b/Simulation/G4Utilities/GeoMaterial2G4/src/Geo2G4MaterialFactory.cxx index 1857d60c60e39a32ae2c39c532a20305ef59683d..24ae3b3d4a4e32b890dbb7aa9b4be26b4964cfe9 100644 --- a/Simulation/G4Utilities/GeoMaterial2G4/src/Geo2G4MaterialFactory.cxx +++ b/Simulation/G4Utilities/GeoMaterial2G4/src/Geo2G4MaterialFactory.cxx @@ -75,7 +75,7 @@ G4Material* Geo2G4MaterialFactory::Build(const GeoMaterial* geoMaterial) pressure); // Build G4MaterialPropertiesTable if needed - GeoMaterialPropertiesTable* geoPropTable = extMat->GetMaterialPropertiesTable(); + const GeoMaterialPropertiesTable* geoPropTable = extMat->GetMaterialPropertiesTable(); if(geoPropTable) { G4MaterialPropertiesTable* g4PropTable = tFactory->Build(geoPropTable); diff --git a/Simulation/HitManagement/HitManagement/AthenaHitsVector.h b/Simulation/HitManagement/HitManagement/AthenaHitsVector.h index 867a7fcb3b37792540f716ef9e39b6c1e3a850c3..03a3f423ec4794bddd307f5052a8850d6ae4c0d0 100755 --- a/Simulation/HitManagement/HitManagement/AthenaHitsVector.h +++ b/Simulation/HitManagement/HitManagement/AthenaHitsVector.h @@ -51,7 +51,7 @@ public: // // methods not provided to rootcint #else - AthenaHitsVector<T>(std::string collectionName="DefaultCollectionName") + AthenaHitsVector<T>(const std::string& collectionName="DefaultCollectionName") { IMessageSvc* msgSvc(Athena::getMessageSvc()); MsgStream log(msgSvc, "AthenaHitsVector"); diff --git a/Simulation/HitManagement/src/HitIdHelper.cxx b/Simulation/HitManagement/src/HitIdHelper.cxx index 6009c4e7ff3eace600c0384703da014eef163e6d..642e6fdfde8b425ac6a63dd2704059c148ec5b69 100755 --- a/Simulation/HitManagement/src/HitIdHelper.cxx +++ b/Simulation/HitManagement/src/HitIdHelper.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #include "HitManagement/HitIdHelper.h" @@ -72,10 +72,9 @@ void HitIdHelper::PrintFields() void HitIdHelper::Print(int id) { - int l=1; for (unsigned int i=0;i<8*sizeof(int);i++) { - if ((id & (l<<i))) std::cout<<"1"; + if ((id & (1u<<i))) std::cout<<"1"; else std::cout<<"0"; } std::cout<<std::endl; diff --git a/Simulation/ISF/ISF_Example/python/ISF_Metadata.py b/Simulation/ISF/ISF_Example/python/ISF_Metadata.py index 1663944eb63f06f21302198b64f5c76c5cd8f25b..edf54bc2aa9b46a6f70fbf7ebd0ea773be9fd95b 100644 --- a/Simulation/ISF/ISF_Example/python/ISF_Metadata.py +++ b/Simulation/ISF/ISF_Example/python/ISF_Metadata.py @@ -179,6 +179,9 @@ def fillTestBeamMetadata(dbFiller): def fillISFMetadata(dbFiller): from ISF_Config.ISF_jobProperties import ISF_Flags dbFiller.addSimParam('Simulator', ISF_Flags.Simulator()) + if ISF_Flags.Simulator() in ['G4FastCalo', 'G4FastCaloTest', 'G4FastCaloDNN']: + from ISF_FastCaloSimServices.ISF_FastCaloSimJobProperties import ISF_FastCaloSimFlags + dbFiller.addSimParam('FCSParamFile', ISF_FastCaloSimFlags.ParamsInputFilename()) def createSimulationParametersMetadata(): from IOVDbMetaDataTools import ParameterDbFiller diff --git a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py index 9e29192d357f19844a38ef9ed0e0bbc2d9e4f604..2d8d83fa87ba7ee6392d60abebf3cab5efd78178 100644 --- a/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py +++ b/Simulation/ISF/ISF_SimulationSelectors/python/ISF_SimulationSelectorsConfig.py @@ -45,12 +45,14 @@ def getDefaultAFIIGeant4Selector(name="ISF_DefaultAFIIGeant4Selector", **kwargs) def getDefaultLongLivedGeant4Selector(name="ISF_DefaultLongLivedGeant4Selector", **kwargs): if usesSimKernelMT(): - kwargs.setdefault("Simulator" , 'ISF_LongLivedGeant4SimSvc') + kwargs.setdefault('Simulator', '') + kwargs.setdefault("Simulator" , 'ISF_LongLivedGeant4SimSvc') return getDefaultGeant4Selector(name, **kwargs ) def getDefaultAFII_QS_Geant4Selector(name="ISF_DefaultAFII_QS_Geant4Selector", **kwargs): if usesSimKernelMT(): - kwargs.setdefault("Simulator" , 'ISF_AFII_QS_Geant4SimSvc') + kwargs.setdefault('Simulator', '') + kwargs.setdefault("Simulator" , 'ISF_AFII_QS_Geant4SimSvc') return getDefaultGeant4Selector(name, **kwargs ) def getFullGeant4Selector(name="ISF_FullGeant4Selector", **kwargs): @@ -89,30 +91,42 @@ def getDefaultFastCaloSimV2Selector(name="ISF_DefaultFastCaloSimV2Selector", **k return getDefaultSimSelector(name, **kwargs ) def getDefaultDNNCaloSimSelector(name="ISF_DefaultDNNCaloSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_DNNCaloSimSvc') return getDefaultSimSelector(name, **kwargs ) def getFastHitConvAlgFastCaloSimSelector(name="ISF_FastHitConvAlgFastCaloSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_FastHitConvAlgFastCaloSimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.FastCaloSim) return getDefaultSimSelector(name, **kwargs ) def getFastHitConvAlgLegacyAFIIFastCaloSimSelector(name="ISF_FastHitConvAlgLegacyAFIIFastCaloSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_FastHitConvAlgLegacyAFIIFastCaloSimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.FastCaloSim) return getDefaultSimSelector(name, **kwargs ) def getDefaultFatrasSelector(name="ISF_DefaultFatrasSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_FatrasSimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Fatras) return getDefaultSimSelector(name, **kwargs ) def getDefaultFatrasNewExtrapolationSelector(name="ISF_DefaultFatrasNewExtrapolationSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_FatrasNewExtrapolationSimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Fatras) return getDefaultSimSelector(name, **kwargs ) def getDefaultParametricSimulationSelector(name="ISF_DefaultParametricSimulationSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault("Simulator" , 'ISF_ParametricSimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Parametric) return getDefaultSimSelector(name, **kwargs ) @@ -152,12 +166,16 @@ def getFastCaloSimPileupOTSelector(name="ISF_FastCaloSimPileupOTSelector", **kwa def getElectronGeant4Selector(name="ISF_ElectronGeant4Selector", **kwargs): kwargs.setdefault('ParticlePDG' , 11) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_Geant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getNeutralGeant4Selector(name="ISF_NeutralGeant4Selector", **kwargs): kwargs.setdefault('Charge' , 0) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_Geant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) @@ -165,17 +183,23 @@ def getNeutralGeant4Selector(name="ISF_NeutralGeant4Selector", **kwargs): def getProtonAFIIGeant4Selector(name="ISF_ProtonAFIIGeant4Selector", **kwargs): kwargs.setdefault('MaxMom' , 750) kwargs.setdefault('ParticlePDG' , 2212) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getProtonAFII_QS_Geant4Selector(name="ISF_ProtonAFII_QS_Geant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFII_QS_Geant4SimSvc') return getProtonAFIIGeant4Selector(name, **kwargs) def getPionAFIIGeant4Selector(name="ISF_PionAFIIGeant4Selector", **kwargs): kwargs.setdefault('MaxMom' , 200) kwargs.setdefault('ParticlePDG' , 211) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) @@ -183,6 +207,8 @@ def getPionAFIIGeant4Selector(name="ISF_PionAFIIGeant4Selector", **kwargs): def getPionG4FastCaloGeant4Selector(name="ISF_PionG4FastCaloGeant4Selector", **kwargs): kwargs.setdefault('MaxEkin' , 200) kwargs.setdefault('ParticlePDG' , 211) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) @@ -195,44 +221,60 @@ def getProtonG4FastCaloGeant4Selector(name="ISF_ProtonG4FastCaloGeant4Selector", def getNeutronG4FastCaloGeant4Selector(name="ISF_NeutronG4FastCaloGeant4Selector", **kwargs): kwargs.setdefault('MaxEkin' , 400) kwargs.setdefault('ParticlePDG' , 2112) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getChargedKaonG4FastCaloGeant4Selector(name="ISF_ChargedKaonG4FastCaloGeant4Selector", **kwargs): kwargs.setdefault('MaxEkin' , 400) kwargs.setdefault('ParticlePDG' , 321) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getKLongG4FastCaloGeant4Selector(name="ISF_KLongG4FastCaloGeant4Selector", **kwargs): kwargs.setdefault('MaxEkin' , 400) kwargs.setdefault('ParticlePDG' , 130) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getPionAFII_QS_Geant4Selector(name="ISF_PionAFII_QS_Geant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFII_QS_Geant4SimSvc') return getPionAFIIGeant4Selector(name, **kwargs) def getChargedKaonAFIIGeant4Selector(name="ISF_ChargedKaonAFIIGeant4Selector", **kwargs): kwargs.setdefault('MaxMom' , 750) kwargs.setdefault('ParticlePDG' , 321) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getChargedKaonAFII_QS_Geant4Selector(name="ISF_ChargedKaonAFII_QS_Geant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFII_QS_Geant4SimSvc') return getChargedKaonAFIIGeant4Selector(name, **kwargs) def getKLongAFIIGeant4Selector(name="ISF_KLongAFIIGeant4Selector", **kwargs): kwargs.setdefault('MaxMom' , 750) kwargs.setdefault('ParticlePDG' , 130) + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFIIGeant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getKLongAFII_QS_Geant4Selector(name="ISF_KLongAFII_QS_Geant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFII_QS_Geant4SimSvc') return getKLongAFIIGeant4Selector(name, **kwargs) @@ -241,6 +283,8 @@ def getMuonSelector(name="ISF_MuonSelector", **kwargs): return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getMuonGeant4Selector(name="ISF_MuonGeant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_Geant4SimSvc') kwargs.setdefault('SimulationFlavor', SimulationFlavor.Geant4) return getMuonSelector(name, **kwargs) @@ -251,6 +295,8 @@ def getMuonAFIIGeant4Selector(name="ISF_MuonAFIIGeant4Selector", **kwargs): return getMuonGeant4Selector(name, **kwargs) def getMuonAFII_QS_Geant4Selector(name="ISF_MuonAFII_QS_Geant4Selector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_AFII_QS_Geant4SimSvc') return getMuonGeant4Selector(name, **kwargs) @@ -260,6 +306,8 @@ def getMuonFatrasSelector(name="ISF_MuonFatrasSelector", **kwargs): return getMuonSelector(name, **kwargs) def getMuonFatrasPileupSelector(name="ISF_MuonFatrasPileupSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_FatrasPileupSimSvc') kwargs.setdefault("PileupBCID" , [1]) kwargs.setdefault('ParticlePDG' , 13) @@ -267,6 +315,8 @@ def getMuonFatrasPileupSelector(name="ISF_MuonFatrasPileupSelector", **kwargs): return getPileupSimSelector(name, **kwargs) def getWithinEta5FastCaloSimSelector(name="ISF_WithinEta5FastCaloSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_FastCaloSimSvc') kwargs.setdefault('MinPosEta' , -5.0 ) kwargs.setdefault('MaxPosEta' , 5.0 ) @@ -274,6 +324,8 @@ def getWithinEta5FastCaloSimSelector(name="ISF_WithinEta5FastCaloSimSelector", * return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getEtaGreater5ParticleKillerSimSelector(name="ISF_EtaGreater5ParticleKillerSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_ParticleKillerSvc') kwargs.setdefault('MinPosEta' , -5.0 ) kwargs.setdefault('MaxPosEta' , 5.0 ) @@ -282,6 +334,8 @@ def getEtaGreater5ParticleKillerSimSelector(name="ISF_EtaGreater5ParticleKillerS return CfgMgr.ISF__KinematicSimSelector(name, **kwargs) def getEtaGreater5PileupParticleKillerSimSelector(name="ISF_EtaGreater5PileupParticleKillerSimSelector", **kwargs): + if usesSimKernelMT(): + kwargs.setdefault('Simulator', '') kwargs.setdefault('Simulator' , 'ISF_ParticleKillerSvc') kwargs.setdefault('MinPosEta' , -5.0 ) kwargs.setdefault('MaxPosEta' , 5.0 ) diff --git a/Simulation/ISF/ISF_Validation/test/test_MC16_G4FastCalo_ttbar.sh b/Simulation/ISF/ISF_Validation/test/test_MC16_G4FastCalo_ttbar.sh index b4787ba82e94c9a81abf2b9f3c2c4f1bc8934d0a..56d7a3c6917a756025f2f0952f5ba64ca156277b 100755 --- a/Simulation/ISF/ISF_Validation/test/test_MC16_G4FastCalo_ttbar.sh +++ b/Simulation/ISF/ISF_Validation/test/test_MC16_G4FastCalo_ttbar.sh @@ -18,7 +18,7 @@ Sim_tf.py \ --simulator 'G4FastCalo' \ --postInclude 'default:PyJobTransforms/UseFrontier.py' \ --preInclude 'EVNTtoHITS:SimulationJobOptions/preInclude.BeamPipeKill.py,SimulationJobOptions/preInclude.FrozenShowersFCalOnly.py' \ ---preExec 'EVNTtoHITS:simFlags.TightMuonStepping=True' 'from ISF_FastCaloSimServices.ISF_FastCaloSimJobProperties import ISF_FastCaloSimFlags;ISF_FastCaloSimFlags.ParamsInputFilename="/cvmfs/atlas.cern.ch/repo/sw/database/GroupData/FastCaloSim/MC16/TFCSparam_v012.root"' \ +--preExec 'EVNTtoHITS:simFlags.TightMuonStepping=True' 'from ISF_FastCaloSimServices.ISF_FastCaloSimJobProperties import ISF_FastCaloSimFlags;ISF_FastCaloSimFlags.ParamsInputFilename="FastCaloSim/MC16/TFCSparam_v012.root"' \ --DataRunNumber '284500' \ --geometryVersion 'default:ATLAS-R2-2016-01-00-01' \ --inputEVNTFile "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/SimCoreTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.evgen.EVNT.e4993.EVNT.08166201._000012.pool.root.1" \ diff --git a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx index 825335a0022ae44daf67c105c72b1ddab4ded666..d28539d5b5075f3e3db0aba030859236fa15140a 100644 --- a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx +++ b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx @@ -30,7 +30,7 @@ // for residuals #include "TrkToolInterfaces/IResidualPullCalculator.h" -#include "TrkEventPrimitives/ResidualPull.h" +#include "TrkEventPrimitives/ResidualPull.h" // for detector id #include "AtlasDetDescr/AtlasDetectorID.h" @@ -47,8 +47,8 @@ namespace JiveXML { * out in the old format using @f$ \cot\theta @f$ and @f$ q/p_T @f$ * @return the perigee parameter object for further use */ - const Trk::Perigee* getPerigeeParameters( const Trk::Track* track, - DataVect& pt, DataVect& d0, DataVect& z0, DataVect& phi0, + const Trk::Perigee* getPerigeeParameters( const Trk::Track* track, + DataVect& pt, DataVect& d0, DataVect& z0, DataVect& phi0, DataVect& cotTheta, DataVect& covMatrix){ /** @@ -86,7 +86,7 @@ namespace JiveXML { double measuredQoverp = perigee->parameters()[Trk::qOverP]; const Trk::JacobianThetaPToCotThetaPt theJac( measuredTheta, measuredQoverp ); covVert = covariance->similarity(theJac); - }else{ + }else{ for ( int ii=0; ii<20; ii++){ // placeholder. Do this nicer. covVert(ii) = 0.; } @@ -97,7 +97,7 @@ namespace JiveXML { const long scale = 10000; const double thisScale(scale/100.); // Migration: Now only has diagonal elements from covariance matrix ? - covMatrix.push_back(DataType(covVert(0)*thisScale)); // 5 elements + covMatrix.push_back(DataType(covVert(0)*thisScale)); // 5 elements covMatrix.push_back(DataType(covVert(1)*thisScale)); covMatrix.push_back(DataType(covVert(2)*thisScale)); covMatrix.push_back(DataType(covVert(3)*thisScale)); @@ -114,7 +114,7 @@ namespace JiveXML { /** * Get a list of track-State on Surfaces for measurement and - * outlier hits, sorted using the perigee comparison functions + * outlier hits, sorted using the perigee comparison functions * @return a std::vector of Trk::TrackStateOnSurface* */ std::vector<const Trk::TrackStateOnSurface*> getTrackStateOnSurfaces( const Trk::Track* track, const Trk::Perigee* perigee, bool doHitsSorting){ @@ -170,8 +170,8 @@ namespace JiveXML { polylineY.push_back(DataType(pos.y()*onetenth)); polylineZ.push_back(DataType(pos.z()*onetenth)); ++numPoly; - } - } + } + } //Store counter as well numPolyline.push_back(DataType(numPoly)); } @@ -181,13 +181,13 @@ namespace JiveXML { * Retrieve all the basic hit information from the Trk::TrackStateOnSurface * @return the reconstruction input object (RIO) for further use */ - const Trk::RIO_OnTrack* getBaseInfoFromHit( const Trk::TrackStateOnSurface* tsos, const AtlasDetectorID* idHelper, + const Trk::RIO_OnTrack* getBaseInfoFromHit( const Trk::TrackStateOnSurface* tsos, const AtlasDetectorID* idHelper, DataVect& isOutlier, DataVect& hits, DataVect& driftSign, DataVect& tsosDetType){ //Get corresponding measurement const Trk::MeasurementBase *measurement = tsos->measurementOnTrack(); - //If measurement is invalid, return imediately + //If measurement is invalid, return imediately if ( ! measurement ) return nullptr ; // get RIO_OnTrack @@ -258,7 +258,7 @@ namespace JiveXML { double ResLoc1 = -99.; double ResLoc2 = -99.; double PullLoc1 = -99.; - double PullLoc2 = -99.; + double PullLoc2 = -99.; // get TrackParameters on the surface to calculate residual const Trk::TrackParameters* tsosParameters = tsos->trackParameters(); @@ -275,13 +275,13 @@ namespace JiveXML { const Trk::ResidualPull* residualPull = residualPullCalculator->residualPull(rot, tsosParameters,Trk::ResidualPull::Biased); if (residualPull) { - //Get the first residual + //Get the first residual ResLoc1 = residualPull->residual()[Trk::loc1]; //Get the second residual for more than 1 dimension if (residualPull->dimension() >= 2) ResLoc2 = residualPull->residual()[Trk::loc2]; if ((residualPull->isPullValid()) ) { - //Get the first residual + //Get the first residual PullLoc1 = residualPull->pull()[Trk::loc1]; //Get the second residual for more than 1 dimension if (residualPull->dimension() >= 2) PullLoc2 = residualPull->pull()[Trk::loc2]; @@ -289,11 +289,11 @@ namespace JiveXML { } // end if residualPull } // end if tsosParameters - //Finally store the values + //Finally store the values tsosResLoc1.push_back( ResLoc1 ); tsosResLoc2.push_back( ResLoc2 ); tsosPullLoc1.push_back( PullLoc1 ); - tsosPullLoc2.push_back( PullLoc2 ); + tsosPullLoc2.push_back( PullLoc2 ); } /** @@ -350,7 +350,7 @@ namespace JiveXML { declareProperty("TrackTruthColName" , m_TrackTruthCollection = "TrackTruthCollection", "Track collection from which to retrieve the truth associations for the priority track collection"); declareProperty("DoWriteHLT" , m_doWriteHLT = false, "Whether to write HLTAutoKey objects"); - declareProperty("DoWriteResiduals" , m_doWriteResiduals = true, "Whether to write TrackResiduals"); + declareProperty("DoWriteResiduals" , m_doWriteResiduals = true, "Whether to write TrackResiduals"); declareProperty("DoHitsSorting" , m_doHitsSorting = false, "Whether to sort hits (TrackStateOnSurfaces)"); declareProperty("DoHitsDetails" , m_doHitsDetails = true, "Whether to write hits details (TrackStateOnSurfaces)"); } @@ -397,7 +397,7 @@ namespace JiveXML { */ StatusCode TrackRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) { //be verbose - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() << endmsg; + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() << endmsg; //Generate a list of requested track collections typedef std::pair< TrackCollection , std::string > tracksNamePair; std::vector< tracksNamePair > requestedTrackColls; @@ -498,7 +498,7 @@ namespace JiveXML { evtStore()->retrieve(truthCollection, collectionName+"Truth").ignore(); ATH_MSG_DEBUG( "Found TrackTruthCollection with key " << collectionName << "Truth" ); // No matching track truth collection found at all - } else { + } else { ATH_MSG_DEBUG( "Could not find matching TrackTruthCollection for " << collectionName ); truthCollection = nullptr ; } @@ -563,8 +563,8 @@ namespace JiveXML { /** * Get number of Pix/SCT/TRT hits */ - const Trk::TrackSummary* summary = nullptr; - summary = m_trackSumTool->createSummary(**track); + std::unique_ptr<Trk::TrackSummary> summary = nullptr; + summary = m_trackSumTool->summary(**track); if(not summary){ ATH_MSG_DEBUG( "Track summary is NULL " ); @@ -606,7 +606,7 @@ namespace JiveXML { tsosResLoc1.reserve(tsosResLoc1.size()+TSoSVec.size()); tsosResLoc2.reserve(tsosResLoc2.size()+TSoSVec.size()); tsosPullLoc1.reserve(tsosPullLoc1.size()+TSoSVec.size()); - tsosPullLoc2.reserve(tsosPullLoc2.size()+TSoSVec.size()); + tsosPullLoc2.reserve(tsosPullLoc2.size()+TSoSVec.size()); tsosDetType.reserve(tsosDetType.size()+TSoSVec.size()); //Now loop over tracks and fill them @@ -623,7 +623,7 @@ namespace JiveXML { if (!rot){ ATH_MSG_VERBOSE( "Could not obtain RIO for TSoS of type " << (*TSoSItr)->dumpType() ); continue ; - } + } //count this as a hit ++nHits; diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfCombinedMaterialEffects.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfCombinedMaterialEffects.h index 61a620edca7001fe32d237a21f7847a7f31fb03b..c22f1c11c5ce7156c841a29a355c6a20d8090c56 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfCombinedMaterialEffects.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GsfCombinedMaterialEffects.h @@ -49,12 +49,22 @@ public: ParticleHypothesis = nonInteracting) const override final; private: - void scattering(IMultiStateMaterialEffects::Cache&, - const ComponentParameters&, - const MaterialProperties&, - double, - PropDirection direction = anyDirection, - ParticleHypothesis particleHypothesis = nonInteracting) const; + struct GSFScatteringCache + { + double deltaThetaCov = 0; + double deltaPhiCov = 0; + + void reset() + { + deltaThetaCov = 0; + deltaPhiCov = 0; + } + }; + + void scattering(GSFScatteringCache&, + const ComponentParameters& componentParameters, + const MaterialProperties& materialProperties, + double pathLength) const; void energyLoss(Trk::GSFEnergyLossCache&, const ComponentParameters&, diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBetheHeitlerEffects.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBetheHeitlerEffects.h index ae406646820341c5b0f9b1fddb149befb7e98a74..029d8860859bcb8f0b3ccc936315913c7a59cf31 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBetheHeitlerEffects.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/IBetheHeitlerEffects.h @@ -50,14 +50,6 @@ struct GSFEnergyLossCache deltaPs.clear(); deltaQOvePCov.clear(); } - - void resetAndAddDummyValues() - { - reset(); - weights.push_back(1); - deltaPs.push_back(0); - deltaQOvePCov.push_back(0); - } }; class MaterialProperties; diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx deleted file mode 100644 index 5815130e858614f5cadae7fbebfe7db09683a73b..0000000000000000000000000000000000000000 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/ForwardGsfFitter.cxx +++ /dev/null @@ -1,289 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @file ForwardGsfFitter.cxx - * @date Wednesday 9th March 2005 - * @author Tom Athkinson, Anthony Morley, Christos Anastopoulos - * @brief Implementation code for the Forward GsfFitter part - */ - -#include "TrkDetElementBase/TrkDetElementBase.h" -#include "TrkEventPrimitives/FitQuality.h" -#include "TrkGaussianSumFilter/GaussianSumFitter.h" -#include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" -#include "TrkGaussianSumFilter/MultiComponentStateCombiner.h" -#include "TrkMeasurementBase/MeasurementBase.h" -#include "TrkMultiComponentStateOnSurface/MultiComponentStateOnSurface.h" -#include "TrkPrepRawData/PrepRawData.h" -#include "TrkRIO_OnTrack/RIO_OnTrack.h" -#include "TrkSurfaces/Surface.h" -#include "TrkToolInterfaces/IRIO_OnTrackCreator.h" - -/* - * Forwards fit on a set of PrepRawData - */ -std::unique_ptr<Trk::ForwardTrajectory> -Trk::GaussianSumFitter::fitPRD( - const EventContext& ctx, - Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, - const Trk::PrepRawDataSet& inputPrepRawDataSet, - const Trk::TrackParameters& estimatedTrackParametersNearOrigin, - const Trk::ParticleHypothesis particleHypothesis) const -{ - - // Configure for forwards filtering material effects overide - Trk::ParticleHypothesis configuredParticleHypothesis; - - if (m_overideMaterialEffectsSwitch) { - configuredParticleHypothesis = m_overideParticleHypothesis; - } else { - configuredParticleHypothesis = particleHypothesis; - } - - // Extract PrepRawDataSet into new local object and check that the PrepRawData - // is associated with a detector element - Trk::PrepRawDataSet prepRawDataSet; - Trk::PrepRawDataSet::const_iterator prepRawData = inputPrepRawDataSet.begin(); - - for (; prepRawData != inputPrepRawDataSet.end(); ++prepRawData) { - - if (!(*prepRawData)->detectorElement()) { - ATH_MSG_WARNING("PrepRawData has no Element link... disregard it"); - } else { - prepRawDataSet.push_back(*prepRawData); - } - } - - // Create new trajectory - auto forwardTrajectory = std::make_unique<Trk::ForwardTrajectory>(); - - // Prepare the multi-component state. For starting guess this has single - // component, weight 1 - const AmgVector(5)& par = estimatedTrackParametersNearOrigin.parameters(); - - Trk::ComponentParameters componentParametersNearOrigin( - estimatedTrackParametersNearOrigin.associatedSurface() - .createTrackParameters(par[Trk::loc1], - par[Trk::loc2], - par[Trk::phi], - par[Trk::theta], - par[Trk::qOverP], - nullptr /*no errors*/), - 1.); - - Trk::MultiComponentState multiComponentStateNearOrigin{}; - multiComponentStateNearOrigin.push_back( - std::move(componentParametersNearOrigin)); - - // Loop over all PrepRawData measurements - prepRawData = prepRawDataSet.begin(); - - for (; prepRawData != prepRawDataSet.end(); ++prepRawData) { - - // Every valid step the ForwardTrajectory object passed to the - // stepForwardFit method is updated - bool stepIsValid = stepForwardFit( - ctx, - extrapolatorCache, - forwardTrajectory.get(), - *prepRawData, - nullptr, - (*prepRawData)->detectorElement()->surface((*prepRawData)->identify()), - multiComponentStateNearOrigin, - configuredParticleHypothesis); - - if (!stepIsValid) { - ATH_MSG_DEBUG("Fitter step is not valid... Exiting!"); - return nullptr; - } - } - return forwardTrajectory; -} - -/* - * Forwards fit on a set of Measurements - */ -std::unique_ptr<Trk::ForwardTrajectory> -Trk::GaussianSumFitter::fitMeasurements( - const EventContext& ctx, - Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, - const Trk::MeasurementSet& inputMeasurementSet, - const Trk::TrackParameters& estimatedTrackParametersNearOrigin, - const Trk::ParticleHypothesis particleHypothesis) const -{ - - if (!m_extrapolator) { - ATH_MSG_ERROR("The extrapolator is not configured... Exiting!"); - return nullptr; - } - - if (inputMeasurementSet.empty()) { - ATH_MSG_ERROR("Input MeasurementSet is empty... Exiting!"); - return nullptr; - } - - // Configure for forwards filtering material effects overide - Trk::ParticleHypothesis configuredParticleHypothesis; - - if (m_overideMaterialEffectsSwitch) { - configuredParticleHypothesis = m_overideParticleHypothesis; - } else { - configuredParticleHypothesis = particleHypothesis; - } - - // This memory should be freed by the fitter / smoother master method - auto forwardTrajectory = std::make_unique<Trk::ForwardTrajectory>(); - - // Prepare the multi-component state. For starting guess this has single - // component, weight 1 - const AmgVector(5)& par = estimatedTrackParametersNearOrigin.parameters(); - - AmgSymMatrix(5)* covariance = nullptr; - - Trk::ComponentParameters componentParametersNearOrigin( - estimatedTrackParametersNearOrigin.associatedSurface() - .createTrackParameters(par[Trk::loc1], - par[Trk::loc2], - par[Trk::phi], - par[Trk::theta], - par[Trk::qOverP], - covariance /*no errors*/), - 1.); - - Trk::MultiComponentState multiComponentStateNearOrigin{}; - multiComponentStateNearOrigin.push_back( - std::move(componentParametersNearOrigin)); - - // Loop over all MeasurementBase objects in set - Trk::MeasurementSet::const_iterator measurement = inputMeasurementSet.begin(); - - for (; measurement != inputMeasurementSet.end(); ++measurement) { - - bool stepIsValid = stepForwardFit(ctx, - extrapolatorCache, - forwardTrajectory.get(), - nullptr, - *measurement, - (*measurement)->associatedSurface(), - multiComponentStateNearOrigin, - configuredParticleHypothesis); - - if (!stepIsValid) { - return nullptr; - } - } - return forwardTrajectory; -} - -/* - * StepForwardFit() private method - */ -bool -Trk::GaussianSumFitter::stepForwardFit( - const EventContext& ctx, - Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, - ForwardTrajectory* forwardTrajectory, - const Trk::PrepRawData* originalPrepRawData, - const Trk::MeasurementBase* originalMeasurement, - const Trk::Surface& surface, - Trk::MultiComponentState& updatedState, - const Trk::ParticleHypothesis particleHypothesis) const -{ - // Protect against undefined Measurement or PrepRawData - if (!originalPrepRawData && !originalMeasurement) { - ATH_MSG_WARNING( - "No measurement information passed to StepForwardFit... Exiting!"); - return false; - } - - // Protect against ForwardTrajectory not defined - if (!forwardTrajectory) { - ATH_MSG_WARNING("ForwardTrajectory object is not defined... Exiting!"); - return false; - } - - // Extrapolate multi-component state to the next measurement surface - Trk::MultiComponentState extrapolatedState = - m_extrapolator->extrapolate(ctx, - extrapolatorCache, - updatedState, - surface, - Trk::alongMomentum, - false, - particleHypothesis); - if (extrapolatedState.empty()) { - ATH_MSG_DEBUG("Extrapolation failed... returning false"); - return false; - } else { - ATH_MSG_DEBUG( - "Extrapolation worked... state size: " << extrapolatedState.size()); - } - // ======================= - // Measurement Preparation - // ======================= - std::unique_ptr<Trk::TrackParameters> combinedState = nullptr; - std::unique_ptr<const Trk::MeasurementBase> measurement = nullptr; - if (originalMeasurement) { - // Clone original MeasurementBase object (refit with no new calibration) - measurement.reset(originalMeasurement->clone()); - } else { - combinedState = MultiComponentStateCombiner::combine(extrapolatedState); - if (!combinedState) { - ATH_MSG_WARNING("State combination failed... exiting"); - return false; - } - // Create a new MeasurementBase object from PrepRawData using new - // calibration - measurement.reset( - m_rioOnTrackCreator->correct(*originalPrepRawData, *combinedState)); - combinedState.reset(); - } - - // Perform measurement update - if (!measurement) { - ATH_MSG_WARNING("Cannot use MeasurementBase for measurement update, it is " - "not defined... Exiting!"); - return false; - } - - auto fitQuality = std::make_unique<Trk::FitQualityOnSurface>(); - updatedState = m_updator.update( - std::move(*(MultiComponentStateHelpers::clone(extrapolatedState))), - *measurement, - *fitQuality); - if (updatedState.empty()) { - ATH_MSG_DEBUG("Measurement update of the state failed... Exiting!"); - return false; - } - - // Reject hits with excessive Chi2 - if (fitQuality->chiSquared() > - m_cutChiSquaredPerNumberDOF * fitQuality->numberDoF()) { - ATH_MSG_DEBUG("Update with new measurement caused track to fail Chi " - "Squared test, removing the object"); - fitQuality = std::make_unique<FitQuality>(1, 1); - std::bitset<TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> type(0); - type.set(TrackStateOnSurface::Outlier); - const Trk::MultiComponentStateOnSurface* multiComponentStateOnSurface = - new MultiComponentStateOnSurface( - measurement.release(), - MultiComponentStateHelpers::clone(extrapolatedState).release(), - fitQuality.release(), - nullptr, - type); - - forwardTrajectory->push_back(multiComponentStateOnSurface); - // Clean up objects associated with removed measurement - updatedState = std::move(extrapolatedState); - } else { - const Trk::MultiComponentStateOnSurface* multiComponentStateOnSurface = - new MultiComponentStateOnSurface( - measurement.release(), - MultiComponentStateHelpers::clone(extrapolatedState).release(), - fitQuality.release()); - forwardTrajectory->push_back(multiComponentStateOnSurface); - } - return true; -} diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx index d5ddc2f05e3ebf280082f2b1042a689c123a83f6..6e5f1717536f4a69ca86bf80a9c2b4e6ab1a0e43 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx @@ -819,3 +819,270 @@ Trk::GaussianSumFitter::buildFitQuality( return fitQuality; } + +/* + * Forwards fit on a set of PrepRawData + */ +std::unique_ptr<Trk::ForwardTrajectory> +Trk::GaussianSumFitter::fitPRD( + const EventContext& ctx, + Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, + const Trk::PrepRawDataSet& inputPrepRawDataSet, + const Trk::TrackParameters& estimatedTrackParametersNearOrigin, + const Trk::ParticleHypothesis particleHypothesis) const +{ + + // Configure for forwards filtering material effects overide + Trk::ParticleHypothesis configuredParticleHypothesis; + + if (m_overideMaterialEffectsSwitch) { + configuredParticleHypothesis = m_overideParticleHypothesis; + } else { + configuredParticleHypothesis = particleHypothesis; + } + + // Extract PrepRawDataSet into new local object and check that the PrepRawData + // is associated with a detector element + Trk::PrepRawDataSet prepRawDataSet; + Trk::PrepRawDataSet::const_iterator prepRawData = inputPrepRawDataSet.begin(); + + for (; prepRawData != inputPrepRawDataSet.end(); ++prepRawData) { + + if (!(*prepRawData)->detectorElement()) { + ATH_MSG_WARNING("PrepRawData has no Element link... disregard it"); + } else { + prepRawDataSet.push_back(*prepRawData); + } + } + + // Create new trajectory + auto forwardTrajectory = std::make_unique<Trk::ForwardTrajectory>(); + + // Prepare the multi-component state. For starting guess this has single + // component, weight 1 + const AmgVector(5)& par = estimatedTrackParametersNearOrigin.parameters(); + + Trk::ComponentParameters componentParametersNearOrigin( + estimatedTrackParametersNearOrigin.associatedSurface() + .createTrackParameters(par[Trk::loc1], + par[Trk::loc2], + par[Trk::phi], + par[Trk::theta], + par[Trk::qOverP], + nullptr /*no errors*/), + 1.); + + Trk::MultiComponentState multiComponentStateNearOrigin{}; + multiComponentStateNearOrigin.push_back( + std::move(componentParametersNearOrigin)); + + // Loop over all PrepRawData measurements + prepRawData = prepRawDataSet.begin(); + + for (; prepRawData != prepRawDataSet.end(); ++prepRawData) { + + // Every valid step the ForwardTrajectory object passed to the + // stepForwardFit method is updated + bool stepIsValid = stepForwardFit( + ctx, + extrapolatorCache, + forwardTrajectory.get(), + *prepRawData, + nullptr, + (*prepRawData)->detectorElement()->surface((*prepRawData)->identify()), + multiComponentStateNearOrigin, + configuredParticleHypothesis); + + if (!stepIsValid) { + ATH_MSG_DEBUG("Fitter step is not valid... Exiting!"); + return nullptr; + } + } + return forwardTrajectory; +} + +/* + * Forwards fit on a set of Measurements + */ +std::unique_ptr<Trk::ForwardTrajectory> +Trk::GaussianSumFitter::fitMeasurements( + const EventContext& ctx, + Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, + const Trk::MeasurementSet& inputMeasurementSet, + const Trk::TrackParameters& estimatedTrackParametersNearOrigin, + const Trk::ParticleHypothesis particleHypothesis) const +{ + + if (!m_extrapolator) { + ATH_MSG_ERROR("The extrapolator is not configured... Exiting!"); + return nullptr; + } + + if (inputMeasurementSet.empty()) { + ATH_MSG_ERROR("Input MeasurementSet is empty... Exiting!"); + return nullptr; + } + + // Configure for forwards filtering material effects overide + Trk::ParticleHypothesis configuredParticleHypothesis; + + if (m_overideMaterialEffectsSwitch) { + configuredParticleHypothesis = m_overideParticleHypothesis; + } else { + configuredParticleHypothesis = particleHypothesis; + } + + // This memory should be freed by the fitter / smoother master method + auto forwardTrajectory = std::make_unique<Trk::ForwardTrajectory>(); + + // Prepare the multi-component state. For starting guess this has single + // component, weight 1 + const AmgVector(5)& par = estimatedTrackParametersNearOrigin.parameters(); + + AmgSymMatrix(5)* covariance = nullptr; + + Trk::ComponentParameters componentParametersNearOrigin( + estimatedTrackParametersNearOrigin.associatedSurface() + .createTrackParameters(par[Trk::loc1], + par[Trk::loc2], + par[Trk::phi], + par[Trk::theta], + par[Trk::qOverP], + covariance /*no errors*/), + 1.); + + Trk::MultiComponentState multiComponentStateNearOrigin{}; + multiComponentStateNearOrigin.push_back( + std::move(componentParametersNearOrigin)); + + // Loop over all MeasurementBase objects in set + Trk::MeasurementSet::const_iterator measurement = inputMeasurementSet.begin(); + + for (; measurement != inputMeasurementSet.end(); ++measurement) { + + bool stepIsValid = stepForwardFit(ctx, + extrapolatorCache, + forwardTrajectory.get(), + nullptr, + *measurement, + (*measurement)->associatedSurface(), + multiComponentStateNearOrigin, + configuredParticleHypothesis); + + if (!stepIsValid) { + return nullptr; + } + } + return forwardTrajectory; +} + +/* + * StepForwardFit() private method + */ +bool +Trk::GaussianSumFitter::stepForwardFit( + const EventContext& ctx, + Trk::IMultiStateExtrapolator::Cache& extrapolatorCache, + ForwardTrajectory* forwardTrajectory, + const Trk::PrepRawData* originalPrepRawData, + const Trk::MeasurementBase* originalMeasurement, + const Trk::Surface& surface, + Trk::MultiComponentState& updatedState, + const Trk::ParticleHypothesis particleHypothesis) const +{ + // Protect against undefined Measurement or PrepRawData + if (!originalPrepRawData && !originalMeasurement) { + ATH_MSG_WARNING( + "No measurement information passed to StepForwardFit... Exiting!"); + return false; + } + + // Protect against ForwardTrajectory not defined + if (!forwardTrajectory) { + ATH_MSG_WARNING("ForwardTrajectory object is not defined... Exiting!"); + return false; + } + + // Extrapolate multi-component state to the next measurement surface + Trk::MultiComponentState extrapolatedState = + m_extrapolator->extrapolate(ctx, + extrapolatorCache, + updatedState, + surface, + Trk::alongMomentum, + false, + particleHypothesis); + if (extrapolatedState.empty()) { + ATH_MSG_DEBUG("Extrapolation failed... returning false"); + return false; + } else { + ATH_MSG_DEBUG( + "Extrapolation worked... state size: " << extrapolatedState.size()); + } + // ======================= + // Measurement Preparation + // ======================= + std::unique_ptr<Trk::TrackParameters> combinedState = nullptr; + std::unique_ptr<const Trk::MeasurementBase> measurement = nullptr; + if (originalMeasurement) { + // Clone original MeasurementBase object (refit with no new calibration) + measurement.reset(originalMeasurement->clone()); + } else { + combinedState = MultiComponentStateCombiner::combine(extrapolatedState); + if (!combinedState) { + ATH_MSG_WARNING("State combination failed... exiting"); + return false; + } + // Create a new MeasurementBase object from PrepRawData using new + // calibration + measurement.reset( + m_rioOnTrackCreator->correct(*originalPrepRawData, *combinedState)); + combinedState.reset(); + } + + // Perform measurement update + if (!measurement) { + ATH_MSG_WARNING("Cannot use MeasurementBase for measurement update, it is " + "not defined... Exiting!"); + return false; + } + + auto fitQuality = std::make_unique<Trk::FitQualityOnSurface>(); + updatedState = m_updator.update( + std::move(*(MultiComponentStateHelpers::clone(extrapolatedState))), + *measurement, + *fitQuality); + if (updatedState.empty()) { + ATH_MSG_DEBUG("Measurement update of the state failed... Exiting!"); + return false; + } + + // Reject hits with excessive Chi2 + if (fitQuality->chiSquared() > + m_cutChiSquaredPerNumberDOF * fitQuality->numberDoF()) { + ATH_MSG_DEBUG("Update with new measurement caused track to fail Chi " + "Squared test, removing the object"); + fitQuality = std::make_unique<FitQuality>(1, 1); + std::bitset<TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> type(0); + type.set(TrackStateOnSurface::Outlier); + const Trk::MultiComponentStateOnSurface* multiComponentStateOnSurface = + new MultiComponentStateOnSurface( + measurement.release(), + MultiComponentStateHelpers::clone(extrapolatedState).release(), + fitQuality.release(), + nullptr, + type); + + forwardTrajectory->push_back(multiComponentStateOnSurface); + // Clean up objects associated with removed measurement + updatedState = std::move(extrapolatedState); + } else { + const Trk::MultiComponentStateOnSurface* multiComponentStateOnSurface = + new MultiComponentStateOnSurface( + measurement.release(), + MultiComponentStateHelpers::clone(extrapolatedState).release(), + fitQuality.release()); + forwardTrajectory->push_back(multiComponentStateOnSurface); + } + return true; +} diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfCombinedMaterialEffects.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfCombinedMaterialEffects.cxx index 41d29f7cf1ff7cc5de3fe3c1de180f25b8c8ed09..fdd34dbfe29a7e71db9d1c83c634bb1afeeaa9b9 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfCombinedMaterialEffects.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfCombinedMaterialEffects.cxx @@ -35,20 +35,9 @@ Trk::GsfCombinedMaterialEffects::~GsfCombinedMaterialEffects() = default; StatusCode Trk::GsfCombinedMaterialEffects::initialize() { - // Retrieve and configure multiple scattering effects for multi-state - // operation - ATH_MSG_INFO("Configuring for multiple scattering"); ATH_CHECK(m_msUpdator.retrieve()); - - // Retrieve and configure the std energy loss effects for multi-state - // operation - ATH_MSG_INFO("Configuring for normal energy loss"); ATH_CHECK(m_EnergyLossUpdator.retrieve()); - - // Retrieve and configure the Bethe-Heitler effects for energy loss - ATH_MSG_INFO("Configuring for Bethe-Heitler energy loss"); ATH_CHECK(m_betheHeitlerEffects.retrieve()); - ATH_MSG_INFO("Initialisation of " << name() << " was successful"); return StatusCode::SUCCESS; } @@ -78,23 +67,11 @@ Trk::GsfCombinedMaterialEffects::compute( /* * 1. Retrieve multiple scattering corrections */ - IMultiStateMaterialEffects::Cache cache_multipleScatter; + GSFScatteringCache cache_multipleScatter; this->scattering(cache_multipleScatter, componentParameters, materialProperties, - pathLength, - direction, - particleHypothesis); - - // Protect if there are no new components - if (cache_multipleScatter.weights.empty()) { - ATH_MSG_DEBUG("WARNING: Multiple scattering effects are not determined"); - cache_multipleScatter.weights.push_back(1.); - cache_multipleScatter.deltaPs.push_back(0.); - AmgSymMatrix(5) newCov; - newCov.setZero(); - cache_multipleScatter.deltaCovariances.push_back(std::move(newCov)); - } + pathLength); /* * 2. Retrieve energy loss corrections @@ -123,62 +100,48 @@ Trk::GsfCombinedMaterialEffects::compute( } /* - * 3. Combine the multiple scattering and energy loss components + * 3. Combine the multiple scattering with each of the energy loss components */ - - // Iterators over the multiple scattering components - auto multipleScatter_weightsIterator = cache_multipleScatter.weights.begin(); - auto multipleScatter_deltaPsIterator = cache_multipleScatter.deltaPs.begin(); - auto multipleScatter_deltaCovariancesIterator = - cache_multipleScatter.deltaCovariances.begin(); - - // Loop over multiple scattering components - for (; multipleScatter_weightsIterator != cache_multipleScatter.weights.end(); - ++multipleScatter_weightsIterator, - ++multipleScatter_deltaPsIterator, - ++multipleScatter_deltaCovariancesIterator) { - - // Iterators over the energy loss components - auto energyLoss_weightsIterator = cache_energyLoss.weights.begin(); - auto energyLoss_deltaPsIterator = cache_energyLoss.deltaPs.begin(); - auto energyLoss_deltaQOvePCovIterator = - cache_energyLoss.deltaQOvePCov.begin(); - - // Loop over energy loss components - - for (; energyLoss_weightsIterator != cache_energyLoss.weights.end(); - ++energyLoss_weightsIterator, - ++energyLoss_deltaPsIterator, - ++energyLoss_deltaQOvePCovIterator) { - - double combinedWeight = - (*multipleScatter_weightsIterator) * (*energyLoss_weightsIterator); - double combinedDeltaP = - (*multipleScatter_deltaPsIterator) + (*energyLoss_deltaPsIterator); - cache.weights.push_back(combinedWeight); - cache.deltaPs.push_back(combinedDeltaP); - - if (measuredCov) { - //Start from the multiple Scattering detla - AmgSymMatrix(5) summedCovariance = - (*multipleScatter_deltaCovariancesIterator); - //Add to it the QoverP cov from energy loss - summedCovariance(Trk::qOverP, Trk::qOverP) += - (*energyLoss_deltaQOvePCovIterator); - cache.deltaCovariances.push_back(std::move(summedCovariance)); - } - } // end for loop over energy loss components - } // end for loop over multiple scattering components + // Iterators over the energy loss components + auto energyLoss_weightsIterator = cache_energyLoss.weights.begin(); + auto energyLoss_deltaPsIterator = cache_energyLoss.deltaPs.begin(); + auto energyLoss_deltaQOvePCovIterator = + cache_energyLoss.deltaQOvePCov.begin(); + + // Loop over energy loss components + for (; energyLoss_weightsIterator != cache_energyLoss.weights.end(); + ++energyLoss_weightsIterator, + ++energyLoss_deltaPsIterator, + ++energyLoss_deltaQOvePCovIterator) { + + double combinedWeight = (*energyLoss_weightsIterator); + double combinedDeltaP = (*energyLoss_deltaPsIterator); + cache.weights.push_back(combinedWeight); + cache.deltaPs.push_back(combinedDeltaP); + + if (measuredCov) { + // Create a covariance to sum scattering and energy loss effects + AmgSymMatrix(5) summedCovariance; + summedCovariance.setZero(); + // Add the multiple Scattering + summedCovariance(Trk::theta, Trk::theta) += + cache_multipleScatter.deltaThetaCov; + summedCovariance(Trk::phi, Trk::phi) += cache_multipleScatter.deltaPhiCov; + // Add energy loss + summedCovariance(Trk::qOverP, Trk::qOverP) += + (*energyLoss_deltaQOvePCovIterator); + + cache.deltaCovariances.push_back(std::move(summedCovariance)); + } + } // end for loop over energy loss components } void Trk::GsfCombinedMaterialEffects::scattering( - IMultiStateMaterialEffects::Cache& cache, + GSFScatteringCache& cache, const ComponentParameters& componentParameters, const MaterialProperties& materialProperties, - double pathLength, - PropDirection /*direction*/, - ParticleHypothesis /*particleHypothesis*/) const + double pathLength) const { // Reset the cache cache.reset(); @@ -209,15 +172,9 @@ Trk::GsfCombinedMaterialEffects::scattering( const double angularVariation = m_msUpdator->sigmaSquare(mprop, p, pathcorrection, Trk::muon); - AmgSymMatrix(5) deltaCov; - deltaCov.setZero(); - // double sign = (direction == Trk::oppositeMomentum) ? 1. : 1.; const double sinTheta = std::sin(trackParameters->parameters()[Trk::theta]); - deltaCov(Trk::phi, Trk::phi) += angularVariation / (sinTheta * sinTheta); - deltaCov(Trk::theta, Trk::theta) += angularVariation; - cache.weights.push_back(1.); - cache.deltaPs.push_back(0.); - cache.deltaCovariances.push_back(std::move(deltaCov)); + cache.deltaThetaCov = angularVariation; + cache.deltaPhiCov = angularVariation / (sinTheta * sinTheta); } void diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/CMakeLists.txt b/Tracking/TrkTools/TrkAmbiguityProcessor/CMakeLists.txt index 5e9256a66bdfab56679670c2a0ef61362b46737e..796f2383c99c159cc9818f8e45f76997cbba35ee 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/CMakeLists.txt +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/CMakeLists.txt @@ -27,23 +27,20 @@ atlas_depends_on_subdirs( PRIVATE Tracking/TrkExtrapolation/TrkExInterfaces ) # External dependencies: -find_package( CLHEP ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) -find_package( HepPDT ) # Component(s) in the package: -atlas_add_library( TrkAmbiguityProcessorLib +atlas_add_component( TrkAmbiguityProcessor src/DenseEnvironmentsAmbiguityProcessorTool.cxx src/DenseEnvironmentsAmbiguityScoreProcessorTool.cxx src/AmbiguityProcessorUtility.cxx src/AmbiguityProcessorBase.cxx - PUBLIC_HEADERS TrkAmbiguityProcessor + src/SimpleAmbiguityProcessorTool.cxx + src/TrackScoringTool.cxx + src/TrackSelectionProcessorTool.cxx + src/ToolVisitor.cxx + src/RenounceToolInputsVisitor.cxx + src/components/*.cxx PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaKernel AthenaBaseComps AtlasDetDescr GaudiKernel InDetPrepRawData InDetRecToolInterfaces TrkDetElementBase TrkEventPrimitives TrkParameters TrkRIO_OnTrack TrkTrack TrkTrackSummary TrkTruthData TrkFitterInterfaces TrkToolInterfaces TrkValInterfaces TrkExInterfaces TrkCaloClusterROI) - -atlas_add_component( TrkAmbiguityProcessor - src/SimpleAmbiguityProcessorTool.cxx src/TrackScoringTool.cxx src/TrackSelectionProcessorTool.cxx src/AmbiguityProcessorUtility.cxx src/AmbiguityProcessorBase.cxx - src/components/*.cxx - INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${HEPPDT_INCLUDE_DIRS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} ${HEPPDT_LIBRARIES} TrkAmbiguityProcessorLib ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaKernel AthenaBaseComps AtlasDetDescr GaudiKernel InDetPrepRawData InDetRecToolInterfaces TrkDetElementBase TrkEventPrimitives TrkParameters TrkRIO_OnTrack TrkTrack TrkTrackSummary TrkTruthData TrkFitterInterfaces TrkToolInterfaces TrkValInterfaces TrkExInterfaces) diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h b/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h deleted file mode 100644 index 42a39dcd85937e31909099adcdc2989570af6ff2..0000000000000000000000000000000000000000 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/TrkAmbiguityProcessor/dRMap.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/*************************************************************************** - CLASS_DEF for InDet dR map - ------------------------------ - ATLAS Collaboration - ***************************************************************************/ - -#ifndef DRMAP_H -#define DRMAP_H 1 - -//<<<<<< INCLUDES >>>>>> -#include "AthenaKernel/CLASS_DEF.h" -#include <map> -#include "InDetPrepRawData/PixelCluster.h" - - -namespace InDet{ - - typedef std::map<const InDet::PixelCluster*, std::pair<float,float> > - DRMap; -} - -CLASS_DEF( InDet::DRMap , 193676466 , 1 ) - - - -#endif // DRMAP_H diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx index e6224bce632a627f675b38501de1df7c260f4bbd..c11b3fce63c1114d990ffe0246d28fadff045c4f 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.cxx @@ -8,16 +8,9 @@ #include "TrkTrack/TrackCollection.h" #include "TrkParameters/TrackParameters.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" -#include "AtlasDetDescr/AtlasDetectorID.h" #include "TrkTrack/TrackInfo.h" -#include "InDetRecToolInterfaces/IPixelClusterSplitProbTool.h" #include "TrkExInterfaces/IExtrapolator.h" #include "TrkTrackSummary/TrackSummary.h" -#include "TrkCaloClusterROI/CaloClusterROI_Collection.h" -#include "InDetPrepRawData/PixelCluster.h" -#include "InDetPrepRawData/SCT_Cluster.h" -#include "InDetIdentifier/PixelID.h" -#include "AmbiguityProcessorUtility.h" #include <cmath> #include <iterator> @@ -71,13 +64,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::DenseEnvironmentsAmbiguityProcesso declareProperty("pTminBrem" , m_pTminBrem = 1000.); declareProperty("etaBounds" , m_etaBounds,"eta intervals for internal monitoring"); - //To determine the ROI for high pt Bs - declareProperty("doHadCaloSeed" ,m_useHClusSeed = false ); - declareProperty("minPtBjetROI" ,m_minPtBjetROI = 15000.); //inMeV - declareProperty("phiWidth" ,m_phiWidth = 0.1 ); - declareProperty("etaWidth" ,m_etaWidth = 0.1 ); - declareProperty("InputHadClusterContainerName",m_inputHadClusterContainerName="InDetHadCaloClusterROIs"); - } //================================================================================================== @@ -101,8 +87,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::initialize(){ } ATH_CHECK( m_extrapolatorTool.retrieve()); - ATH_CHECK( detStore()->retrieve(m_pixelId, "PixelID")); - ATH_CHECK( detStore()->retrieve(m_idHelper, "AtlasID")); // Configuration of the material effects Trk::ParticleSwitcher particleSwitch; @@ -112,13 +96,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::initialize(){ if (m_tryBremFit) ATH_MSG_INFO( "Try brem fit and recovery for electron like tracks." ); - //Initialise the ROI tool - ATH_CHECK(m_inputHadClusterContainerName.initialize(m_useHClusSeed)); - - if(!m_dRMap.key().empty()){ - ATH_CHECK(m_dRMap.initialize() ); - } - if (m_etaBounds.size() != Counter::nRegions) { ATH_MSG_FATAL("There must be exactly " << (Counter::nRegions) << " eta bounds but " << m_etaBounds.size() << " are set." ); @@ -165,7 +142,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::process(const TracksScores *trackS } } std::vector<std::unique_ptr<const Trk::Track> > trackDustbin; - reloadHadROIs(); // going to do simple algorithm for now: // - take track with highest score // - remove shared hits from all other tracks @@ -219,37 +195,12 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::solveTracks(const TracksScores &tr if (m_tryBremFit && atrack.track()->info().trackProperties(Trk::TrackInfo::BremFit)) { stat.incrementCounterByRegion(CounterIndex::kNacceptedBrem,atrack.track()); } - //Compute the fitQuality - const float fitQual = AmbiguityProcessor::calculateFitQuality(*atrack); - if(fitQual > 1.3 && decideIfInHighPtBROI(atrack.track())){ - std::unique_ptr<Trk::Track> refittedTrack( refitTracksFromB(atrack.track(), fitQual)); //Q: Is there the case atrack == refittedTrack ? - if(refittedTrack){ - // add track to PRD_AssociationTool - if ( m_assoTool->addPRDs(prdToTrackMap, *refittedTrack).isFailure()){ - ATH_MSG_ERROR( "addPRDs() failed" ); - } - // add to output list - finalTracks.push_back( refittedTrack.release() ); - if (atrack.newTrack()) { - trackDustbin.emplace_back(atrack.release()); - } - } else { - // add track to PRD_AssociationTool - StatusCode sc = m_assoTool->addPRDs(prdToTrackMap, *atrack); - if (m_assoTool->addPRDs(prdToTrackMap, *atrack).isFailure()){ - ATH_MSG_ERROR( "addPRDs() failed" ); - } - // add to output list - finalTracks.push_back( atrack.release() ); - } - } else { - // add track to PRD_AssociationTool - if (m_assoTool->addPRDs(prdToTrackMap, *atrack).isFailure()){ - ATH_MSG_ERROR( "addPRDs() failed" ); - } - // add to output list - finalTracks.push_back( atrack.release() ); - } + + // add track to PRD_AssociationTool + StatusCode sc = m_assoTool->addPRDs(prdToTrackMap, *atrack); + if (sc.isFailure()) ATH_MSG_ERROR( "addPRDs() failed" ); + // add to output list + finalTracks.push_back( atrack.release() ); } else if ( keepOriginal){ // track can be kept as is, but is not yet fitted ATH_MSG_DEBUG ("Good track("<< atrack.track() << ") but need to fit this track first, score, add it into map again and retry ! "); @@ -334,255 +285,6 @@ Trk::DenseEnvironmentsAmbiguityProcessorTool::refitPrds( const Trk::Track* track } -//================================================================================================== - -void -Trk::DenseEnvironmentsAmbiguityProcessorTool::storeTrkDistanceMapdR( TrackCollection& tracks, - std::vector<Trk::Track*> &refittedTracks ){ - ATH_MSG_VERBOSE ("Creating track Distance dR map"); - SG::WriteHandle<InDet::DRMap> dRMapHandle (m_dRMap); - dRMapHandle = std::make_unique<InDet::DRMap>(); - if ( !dRMapHandle.isValid() ){ - ATH_MSG_WARNING("Could not record Distance dR map."); - } else { - ATH_MSG_VERBOSE("Distance dR map recorded as '" << m_dRMap.key() <<"'."); - } - constexpr double twoPi = 2.*M_PI; - for (const auto & track : tracks){ - bool refit = false; - const DataVector<const TrackStateOnSurface>* tsosVec = track->trackStateOnSurfaces(); - if(!tsosVec){ - ATH_MSG_WARNING("TSOS vector does not exist"); - continue; - } - ATH_MSG_VERBOSE("---> Looping over TSOS's to allow for cluster updates: "<< tsosVec->size() ); - for(const auto & tsos : *tsosVec){ - const MeasurementBase* measurement = tsos->measurementOnTrack(); - if(!measurement || ! tsos->trackParameters()){ - ATH_MSG_VERBOSE("---- TSOS has either no measurement or parameters: "<< measurement << " " << tsos->trackParameters() ); - continue; - } - if(!tsos->type(Trk::TrackStateOnSurface::Measurement)) {continue;} - auto globalPosition = measurement->globalPosition(); - const double radius = std::sqrt(globalPosition[0]*globalPosition[0]+globalPosition[1]*globalPosition[1]); - const double invRadius{1./radius}; - // get the associated prd - const Trk::RIO_OnTrack* rio = dynamic_cast<const Trk::RIO_OnTrack*> ( measurement ); - if(!rio){ - continue; - } - const InDet::PixelCluster* pixel = dynamic_cast<const InDet::PixelCluster*> ( rio->prepRawData() ); - // not pixel or not split - if (!pixel || !pixel->isSplit() ) {continue ;} - - CylinderSurface iblSurface(radius,3000.0); - - const TrackParameters * trackParams = m_extrapolatorTool->extrapolate(*track,iblSurface); - - double yOnPix = trackParams->position().y(); - double zOnPix = trackParams->position().z(); - - // now, find closest track - double mindR = 99999999.; - double mindX = 99999999.; - double mindZ = 99999999.; - // - const double eta1{track->perigeeParameters()->momentum().eta()}; - const double phi1{track->perigeeParameters()->momentum().phi()}; - for (const auto & track2 : tracks){ - if(track==track2) continue; - float dEta = eta1 - track2->perigeeParameters()->momentum().eta(); - float dPhi2 = phi1 - track2->perigeeParameters()->momentum().phi(); - double dr = std::sqrt(dEta*dEta + dPhi2*dPhi2); - if(dr>0.4) continue; - - //extrapolation to pixel hit radius - const TrackParameters * track2Params = m_extrapolatorTool->extrapolate(*track2,iblSurface); - - const double y2OnPix = track2Params->position().y(); - const double z2OnPix = track2Params->position().z(); - - float dPhi = std::asin(yOnPix*invRadius) - std::asin(y2OnPix*invRadius); - if (dPhi >= M_PI) dPhi -= twoPi; - if (dPhi < -M_PI) dPhi += twoPi; - - const double dx = std::abs(radius*dPhi); - const double dz = std::abs(zOnPix - z2OnPix); - if(dx>mindX && dz>mindZ) continue; - dr = std::sqrt(dx*dx + dz*dz); - - if(dr<mindR && dr > 1.e-4){ - mindR = dr; - mindX = dx; - mindZ = dz; - } - } - refit = true; - std::pair<InDet::DRMap::iterator,bool> ret; - std::pair<float,float> min (mindX, mindZ); - ret = dRMapHandle->insert ( std::pair<const InDet::PixelCluster*,std::pair<float,float> >(pixel,min)); - // if we already have a dR for this prd, we update it, if current value is smaller - if (!ret.second) { - InDet::DRMap::iterator it{dRMapHandle->find(pixel)}; - auto &[x, z] = it->second; - if(std::sqrt(x * x + z * z) > (float)mindR) { - x = (float) mindX; - z = (float) mindZ; - } - } - } - if(refit) refittedTracks.push_back(track); - } - } - -//============================================================================================================ -bool -Trk::DenseEnvironmentsAmbiguityProcessorTool::decideIfInHighPtBROI(const Trk::Track* ptrTrack) const{ - // Are we in a ROI? - bool inROIandPTok(true); - if( ptrTrack->trackParameters()->front() ){ - if( ptrTrack->trackParameters()->front()->pT() < m_minPtBjetROI ){ - inROIandPTok = false; - return false; - } - if(inROIandPTok){ - bool inROI = m_useHClusSeed && isHadCaloCompatible(*ptrTrack->trackParameters()->front()); - return inROI; - } - return false; - } - return false; -} - -//============================================================================================================ -bool -Trk::DenseEnvironmentsAmbiguityProcessorTool::isHadCaloCompatible(const Trk::TrackParameters& Tp) const{ - const double pi = M_PI; - const double pi2 = 2.*M_PI; - if(m_hadF.empty()) return false; - auto f = m_hadF.begin(); - auto fe = m_hadF.end(); - auto e = m_hadE.begin(); - auto r = m_hadR.begin(); - auto z = m_hadZ.begin(); - double F = Tp.momentum().phi(); - double E = Tp.eta(); - for(; f!=fe; ++f) { - double df = std::abs(F-(*f)); - if(df > pi ) df = std::abs(pi2-df); - if(df < m_phiWidth) { - //Correct eta of cluster to take into account the z postion of the track - double newZ = *z - Tp.position().z(); - double newEta = std::atanh( newZ / std::sqrt( (*r) * (*r) + newZ*newZ ) ); - double de = std::abs(E-newEta); - if(de < m_etaWidth) return true; - } - ++e; - ++r; - ++z; - } - return false; -} - -//============================================================================================================ -void -Trk::DenseEnvironmentsAmbiguityProcessorTool::reloadHadROIs() const{ - // turn into conditions algorithm - if(m_useHClusSeed) { - m_hadF.clear(); - m_hadE.clear(); - m_hadR.clear(); - m_hadZ.clear(); - - SG::ReadHandle<CaloClusterROI_Collection> calo(m_inputHadClusterContainerName); - for( const auto& ccROI : *calo) { - m_hadF.push_back( ccROI->globalPosition().phi() ); - m_hadE.push_back( ccROI->globalPosition().eta() ); - m_hadR.push_back( ccROI->globalPosition().perp() ); - m_hadZ.push_back( ccROI->globalPosition().z() ); - } - } -} - -//============================================================================================================ -void -Trk::DenseEnvironmentsAmbiguityProcessorTool::removeInnerHits(std::vector<const Trk::MeasurementBase*>& measurements) const{ - int count = 0; - for (size_t i=0; i < measurements.size(); ++i){ - const Trk::RIO_OnTrack* rio = dynamic_cast <const Trk::RIO_OnTrack*>(measurements.at(i)); - if (rio != nullptr) { - const Identifier& surfaceID = (rio->identify()) ; - if(m_idHelper->is_pixel(surfaceID) && count ==0){ - //Only do this if we want to remove the pixel hits - const Identifier& id = m_pixelId->wafer_id(surfaceID); - int layerDisk = m_pixelId -> layer_disk(id); - if (layerDisk < 3){ - measurements.erase(measurements.begin()+i); - break; - } - break; - } - break; - } - } -} - -//============================================================================================================ -Trk::Track* -Trk::DenseEnvironmentsAmbiguityProcessorTool::refitTracksFromB(const Trk::Track* track, double fitQualityOriginal) const{ - const Trk::TrackParameters* par = track->perigeeParameters(); - if (par==nullptr) { - par = track->trackParameters()->front(); - if (par==nullptr) { - ATH_MSG_DEBUG ("Track ("<<track<<") has no Track Parameters ! No refit !"); - return nullptr; - } - } - std::vector<const Trk::MeasurementBase*> measurementSet{}; - //store all silicon measurements into the measurementset - DataVector<const Trk::TrackStateOnSurface>::const_iterator TrackStateOnSurface = track->trackStateOnSurfaces()->begin(); - for ( ; TrackStateOnSurface != track->trackStateOnSurfaces()->end(); ++TrackStateOnSurface ) { - if ( !(*TrackStateOnSurface) ){ - ATH_MSG_WARNING( "This track contains an empty MeasurementBase object that won't be included in the fit" ); - continue; - } - if ( (*TrackStateOnSurface)->measurementOnTrack() ){ - if ( (*TrackStateOnSurface)->type( Trk::TrackStateOnSurface::Measurement) ){ - const Trk::RIO_OnTrack* rio = dynamic_cast <const Trk::RIO_OnTrack*>( (*TrackStateOnSurface)->measurementOnTrack() ); - if (rio != nullptr) { - const Identifier& surfaceID = (rio->identify()) ; - if(m_idHelper->is_pixel(surfaceID)|| m_idHelper->is_sct(surfaceID)) { - measurementSet.push_back( (*TrackStateOnSurface)->measurementOnTrack() ); - } - } - } - } - } - - size_t previousMeasSize = measurementSet.size(); - while (true){ - removeInnerHits(measurementSet); - if(measurementSet.size()>4){ - auto pRefittedTrack{fit(measurementSet,*par,true,Trk::pion)}; - double fitQualPostRefit = 10; - if (pRefittedTrack && pRefittedTrack->fitQuality() && pRefittedTrack->fitQuality()->numberDoF()!=0 ) - fitQualPostRefit = pRefittedTrack->fitQuality()->chiSquared()/pRefittedTrack->fitQuality()->numberDoF(); - if (fitQualityOriginal/fitQualPostRefit > 1){ - if ( fitQualityOriginal/fitQualPostRefit > 1.2){ - return pRefittedTrack.release(); - } - } - if (previousMeasSize == measurementSet.size()){ - return nullptr; - } - previousMeasSize = measurementSet.size(); - } else { - //cannot refit the track because we do not have enough measurements - return nullptr; - } - } -} - void Trk::DenseEnvironmentsAmbiguityProcessorTool::dumpStat(MsgStream &out) const{ auto parseFileName=[](const std::string & fullname){ diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h index 2acd36c3019b2f897fbd238bb1045c0165ef67c3..13a6111353978ceffa6fca2177742104f86d4f85 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/DenseEnvironmentsAmbiguityProcessorTool.h @@ -9,8 +9,6 @@ #include "TrkFitterInterfaces/ITrackFitter.h" #include "TrkToolInterfaces/IAmbiTrackSelectionTool.h" #include "InDetPrepRawData/PixelGangedClusterAmbiguities.h" -#include "TrkAmbiguityProcessor/dRMap.h" -#include "TrkCaloClusterROI/CaloClusterROI_Collection.h" #include "TrkToolInterfaces/IPRDtoTrackMapTool.h" #include "TrkEventUtils/PRDtoTrackMap.h" @@ -28,15 +26,6 @@ -class AtlasDetectorID; -class PixelID; - -namespace InDet{ - class IPixelClusterSplitProbTool; - class PixelCluster; - class SCT_Cluster; -} - namespace Trk { class ITruthToTrack; class IExtrapolator; @@ -82,32 +71,9 @@ namespace Trk { /**Track* refitRots( const Track* track, Counter &stat) const override final;**/ - /** stores the minimal dist(trk,trk) for covariance correction*/ - void - storeTrkDistanceMapdR(TrackCollection& tracks, std::vector<Trk::Track*> &refit_tracks_out ); - - /** refit Tracks that are in the region of interest and removes inner hits that are wrongly assigned*/ - void - removeInnerHits(std::vector<const Trk::MeasurementBase*>& measurements) const; - - Trk::Track* - refitTracksFromB(const Trk::Track* track,double fitQualityOriginal) const; - - /** see if we are in the region of interest for B tracks*/ - bool - decideIfInHighPtBROI(const Trk::Track*) const; - - /** Check if the cluster is compatible with a hadronic cluster*/ - bool - isHadCaloCompatible(const Trk::TrackParameters& Tp) const; - - /** Load the clusters to see if they are compatibles with ROI*/ - void - reloadHadROIs() const; - virtual std::unique_ptr<Trk::Track> doBremRefit(const Trk::Track & track) const override final; - + std::unique_ptr<Trk::Track> fit(const std::vector<const Trk::PrepRawData*> &raw, @@ -120,22 +86,9 @@ namespace Trk { std::unique_ptr<Trk::Track> fit(const Track &track, bool flag, Trk::ParticleHypothesis hypo) const override final; - bool checkTrack(const Trk::Track *) const; - /** variables to decide if we are in a ROI */ - bool m_useHClusSeed; - float m_minPtBjetROI; - float m_phiWidth; - float m_etaWidth; - SG::ReadHandleKey<CaloClusterROI_Collection> m_inputHadClusterContainerName; - - mutable std::vector<double> m_hadF; - mutable std::vector<double> m_hadE; - mutable std::vector<double> m_hadR; - mutable std::vector<double> m_hadZ; - /** refitting tool - used to refit tracks once shared hits are removed. Refitting tool used is configured via jobOptions.*/ ToolHandleArray<ITrackFitter> m_fitterTool; @@ -154,12 +107,6 @@ namespace Trk { which are removed are made */ ToolHandle<IAmbiTrackSelectionTool> m_selectionTool; - /**These allow us to retrieve the helpers*/ - const PixelID* m_pixelId; - const AtlasDetectorID* m_idHelper; - - SG::WriteHandleKey<InDet::DRMap> m_dRMap; //!< the actual dR map - bool m_rejectInvalidTracks; }; diff --git a/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx b/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx index 6c9a67ad3a2a48ac40a6c9cbad1ef351d593933c..49db0a8696391ffc15ab52caf4368237a343a0fd 100644 --- a/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx +++ b/Tracking/TrkTools/TrkAmbiguityProcessor/src/TrackScoringTool.cxx @@ -24,7 +24,7 @@ Trk::TrackScoringTool::TrackScoringTool(const std::string& t, { declareInterface<ITrackScoringTool>(this); declareProperty("SumHelpTool", m_trkSummaryTool); - + //set some test values m_summaryTypeScore[Trk::numberOfPixelHits] = 20; m_summaryTypeScore[Trk::numberOfPixelSharedHits] = -10; // a shared hit is only half the weight @@ -45,10 +45,10 @@ Trk::TrackScoringTool::TrackScoringTool(const std::string& t, m_summaryTypeScore[Trk::numberOfOutliersOnTrack] = -2; // an outlier might happen // scoring for Muons is missing - m_summaryTypeScore[Trk::numberOfMdtHits] = 20; - m_summaryTypeScore[Trk::numberOfTgcPhiHits] = 20; + m_summaryTypeScore[Trk::numberOfMdtHits] = 20; + m_summaryTypeScore[Trk::numberOfTgcPhiHits] = 20; m_summaryTypeScore[Trk::numberOfTgcEtaHits] = 10; - m_summaryTypeScore[Trk::numberOfCscPhiHits] = 20; + m_summaryTypeScore[Trk::numberOfCscPhiHits] = 20; m_summaryTypeScore[Trk::numberOfCscEtaHits] = 20; m_summaryTypeScore[Trk::numberOfRpcPhiHits] = 20; m_summaryTypeScore[Trk::numberOfRpcEtaHits] = 10; @@ -57,7 +57,7 @@ Trk::TrackScoringTool::TrackScoringTool(const std::string& t, Trk::TrackScoringTool::~TrackScoringTool(){ } -StatusCode +StatusCode Trk::TrackScoringTool::initialize(){ ATH_CHECK( AlgTool::initialize()); ATH_CHECK( m_trkSummaryTool.retrieve()); @@ -69,20 +69,26 @@ StatusCode Trk::TrackScoringTool::finalize(){ return AlgTool::finalize(); } -Trk::TrackScore +Trk::TrackScore Trk::TrackScoringTool::score( const Track& track, const bool suppressHoleSearch ) const{ - const TrackSummary* summary = nullptr; - if (suppressHoleSearch) - summary = m_trkSummaryTool->createSummaryNoHoleSearch(track); - else - summary = m_trkSummaryTool->createSummary(track); - - Trk::TrackScore score = TrackScore( simpleScore(track, *summary) ); - delete summary; - return score; + + // Used to call the now removed not MT safe + // summary = m_trkSummaryTool->createSummary(track); + // We keep the non-thread safe logic only here. + // Locally to where is actually used + // To decide for a better design + // + Trk::Track& nonConstTrack = const_cast<Trk::Track&>(track); + if (suppressHoleSearch) { + nonConstTrack.setTrackSummary(m_trkSummaryTool->summaryNoHoleSearch(track)); + } else { + nonConstTrack.setTrackSummary(m_trkSummaryTool->summary(track)); + } + Trk::TrackScore score = TrackScore(simpleScore(track, *(nonConstTrack.trackSummary()))); + return score; } -Trk::TrackScore +Trk::TrackScore Trk::TrackScoringTool::simpleScore( const Track& track, const TrackSummary& trackSummary ) const{ // --- reject bad tracks if (track.fitQuality() && track.fitQuality()->numberDoF() < 0) { @@ -101,8 +107,8 @@ Trk::TrackScoringTool::simpleScore( const Track& track, const TrackSummary& trac for (int i=0; i<Trk::numberOfTrackSummaryTypes; ++i) { int value = trackSummary.get(static_cast<Trk::SummaryType>(i)); //value is -1 if undefined. - if (value>0) { - score+=m_summaryTypeScore[i]*value; + if (value>0) { + score+=m_summaryTypeScore[i]*value; ATH_MSG_VERBOSE("\tType ["<<i<<"], value \t= "<<value<<"], score \t="<<score); } } diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryTool.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryTool.h index 9026eb03d5c7709a49df77913fa4abc0483b2854..a079f8ac11c6925df26521d42501b56858b46954 100644 --- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryTool.h +++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/IExtendedTrackSummaryTool.h @@ -2,21 +2,17 @@ Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ - - #ifndef TRKIEXTENDEDTRACKSUMMARYTOOL_H #define TRKIEXTENDEDTRACKSUMMARYTOOL_H -// @TODO remove once interface without PRDtoTrackMap argument is retired. -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Woverloaded-virtual" #include "ITrackSummaryTool.h" namespace Trk { class PRDtoTrackMap; -static const InterfaceID IID_IExtendedTrackSummaryTool("Trk::IExtendedTrackSummaryTool", 1, 0); +static const InterfaceID + IID_IExtendedTrackSummaryTool("Trk::IExtendedTrackSummaryTool", 1, 0); /** @class IExtendedTrackSummaryTool @brief Interface for condensing Trk::Track properties and associated @@ -24,65 +20,92 @@ static const InterfaceID IID_IExtendedTrackSummaryTool("Trk::IExtendedTrackSumma @author Edward Moyse, Martin Siebel <http://consult.cern.ch/xwho> */ -class IExtendedTrackSummaryTool : virtual public ITrackSummaryTool { - public: - static const InterfaceID& interfaceID( ) ; +class IExtendedTrackSummaryTool : virtual public ITrackSummaryTool +{ +public: + static const InterfaceID& interfaceID(); + using ITrackSummaryTool::summary; + using ITrackSummaryTool::summaryNoHoleSearch; + using ITrackSummaryTool::updateSharedHitCount; + using ITrackSummaryTool::updateAdditionalInfo; /** Compute track summary and replace the summary in given track. - * @param track the track whose track summary is replaced with a newly computed one - * @param prd_to_track_map a PRD to track association map to compute shared hits or a nullptr - * @param suppress_hole_search do not perform the hole search independent of the settings of the ID and muon hole search properties. - * Will recompute the track summary for the given track, delete the old track summary of - * the track if there is already one and set the new one. If a valid PRD to track map is - * given the number of shared hits is computed otherwise not. The hole search is performed - * according to the settings of the ID and muon hole search properties unless the - * suppress_hole_search argument is true. + * @param track the track whose track summary is replaced with a newly + * computed one + * @param prd_to_track_map a PRD to track association map to compute shared + * hits or a nullptr + * @param suppress_hole_search do not perform the hole search independent of + * the settings of the ID and muon hole search properties. Will recompute the + * track summary for the given track, delete the old track summary of the + * track if there is already one and set the new one. If a valid PRD to track + * map is given the number of shared hits is computed otherwise not. The hole + * search is performed according to the settings of the ID and muon hole + * search properties unless the suppress_hole_search argument is true. */ - virtual void computeAndReplaceTrackSummary(Track &track, - const Trk::PRDtoTrackMap *prd_to_track_map, - bool suppress_hole_search=false) const = 0; + virtual void computeAndReplaceTrackSummary( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map, + bool suppress_hole_search = false) const = 0; /** create a summary object from passed Track.*/ - virtual std::unique_ptr<Trk::TrackSummary> summary( const Track& track, - const Trk::PRDtoTrackMap *prd_to_track_map) const = 0; + virtual std::unique_ptr<Trk::TrackSummary> summary( + const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const = 0; - /** create a summary object of passed track without doing the tedious hole search. */ - virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch( const Track& track, - const Trk::PRDtoTrackMap *prd_to_track_map) const = 0; + /** create a summary object of passed track without doing the tedious hole + * search. */ + virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch( + const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const = 0; /** Update the shared hit count of the given track summary. - * @param track the track which corresponds to the given track summary and is used to compute the numbers of shared hits. - * @param prd_to_track_map an optional PRD-to-track map which is used to compute the shared hits otherwise the association tool will be used. - * @param summary the summary to be updated i.e. a copy of the track summary of the given track. - * The method will update the shared information in the given summary. The track will not be modified i.e. the shared hit count - * of the summary owned by the track will not be updated. + * @param track the track which corresponds to the given track summary and is + * used to compute the numbers of shared hits. + * @param prd_to_track_map an optional PRD-to-track map which is used to + * compute the shared hits otherwise the association tool will be used. + * @param summary the summary to be updated i.e. a copy of the track summary + * of the given track. The method will update the shared information in the + * given summary. The track will not be modified i.e. the shared hit count of + * the summary owned by the track will not be updated. */ - virtual void updateSharedHitCount(const Track& track, const Trk::PRDtoTrackMap *prd_to_track_map, TrackSummary &summary) const = 0; - - /** method to update the shared hit content only, this is optimised for track collection merging. */ - virtual void updateSharedHitCount(Track& track, const Trk::PRDtoTrackMap *prd_to_track_map) const = 0; - - /** Update the shared hit counts, expected hit, PID information and eventually the detailed track summaries. - * @param track the track corresponding to the summary which is updated, which is not actively changed. - * @param prd-to-track an optional PRD-to-track map to compute shared hits or nullptr. + virtual void updateSharedHitCount(const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map, + TrackSummary& summary) const = 0; + + /** method to update the shared hit content only, this is optimised for track + * collection merging. */ + virtual void updateSharedHitCount( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const = 0; + + /** Update the shared hit counts, expected hit, PID information and eventually + * the detailed track summaries. + * @param track the track corresponding to the summary which is updated, which + * is not actively changed. + * @param prd-to-track an optional PRD-to-track map to compute shared hits or + * nullptr. * @param summary the summary which is updated. - * Will update the shared hit, expected hit, PID information and eventually the detailed track summaries. If - * no PRD-to-track map is given the helper tools will rely on a PRD association tool to privide the shared - * hit information. The method will not update the track itself unless the given summary is owned by the track. + * Will update the shared hit, expected hit, PID information and eventually + * the detailed track summaries. If no PRD-to-track map is given the helper + * tools will rely on a PRD association tool to privide the shared hit + * information. The method will not update the track itself unless the given + * summary is owned by the track. */ - virtual void updateAdditionalInfo(const Track& track, const Trk::PRDtoTrackMap *prd_to_track_map, TrackSummary &summary) const = 0; - - virtual void updateAdditionalInfo(Track& track, const Trk::PRDtoTrackMap *prd_to_track_map) const = 0; + virtual void updateAdditionalInfo(const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map, + TrackSummary& summary) const = 0; + virtual void updateAdditionalInfo( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const = 0; }; -inline const InterfaceID& Trk::IExtendedTrackSummaryTool::interfaceID() +inline const InterfaceID& +Trk::IExtendedTrackSummaryTool::interfaceID() { - return IID_IExtendedTrackSummaryTool; + return IID_IExtendedTrackSummaryTool; } - } -#pragma GCC diagnostic pop #endif diff --git a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryTool.h b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryTool.h index 33aa95a172126e00a2ef1dd118a160ddef523749..75616e5fb9b6be2120b410b8077e9acf4c7f6f41 100755 --- a/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryTool.h +++ b/Tracking/TrkTools/TrkToolInterfaces/TrkToolInterfaces/ITrackSummaryTool.h @@ -5,8 +5,8 @@ #ifndef TRKITRACKSUMMARYTOOL_H #define TRKITRACKSUMMARYTOOL_H -#include "GaudiKernel/IAlgTool.h" #include "CxxUtils/checker_macros.h" +#include "GaudiKernel/IAlgTool.h" #include <memory> namespace Trk { @@ -27,33 +27,18 @@ class ITrackSummaryTool : virtual public IAlgTool public: static const InterfaceID& interfaceID(); - /** create a summary object from passed Track. The summary object belongs to - you, the user, and so you must take care of deletion of it. - If the track has a summary already a clone is returned back. - @param onlyUpdateTrack If false (default) then the summary is cloned and - added to the track, and a separate summary returned. If true, only update - track and return nullptr */ - virtual const Trk::TrackSummary* createSummary - ATLAS_NOT_THREAD_SAFE(const Track& track, - bool onlyUpdateTrack = false) const = 0; - - /** create a summary object of passed track without doing the tedious hole - search. Same comments as for createSummary apply here, of course, too. */ - virtual const Trk::TrackSummary* createSummaryNoHoleSearch - ATLAS_NOT_THREAD_SAFE(const Track& track) const = 0; - - /** create a summary object from a passed Track. - If the track has a summary already a clone is returned back. + /** Create a new summary object from a passed Track or clone + * the existing. */ virtual std::unique_ptr<Trk::TrackSummary> summary( const Track& track) const = 0; - /** create a summary object of passed track without doing the tedious hole - search. If the track has a summary already a clone is returned back.*/ + /** create a summary object from a passed track, without doing the tedious + hole search, or clone the existing.*/ virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch( const Track& track) const = 0; - /** method which can be used to update the track and add a summary to it. + /** Method which can be used to update the track and add a summary to it. This can be used to add a summary to a track and then retrieve it from it without the need to clone. */ virtual void updateTrack(Track& track) const = 0; @@ -72,11 +57,11 @@ public: virtual void updateAdditionalInfo(Track& track) const = 0; }; -inline const InterfaceID& Trk::ITrackSummaryTool::interfaceID() -{ - return IID_ITrackSummaryTool; +inline const InterfaceID& +Trk::ITrackSummaryTool::interfaceID() +{ + return IID_ITrackSummaryTool; } - } -#endif +#endif diff --git a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h index ca02495f95a222ff09d6fde28964e16663ccc5ce..c134eb940a35b34f6d488c16a22499b30d307d48 100755 --- a/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h +++ b/Tracking/TrkTools/TrkTrackSummaryTool/TrkTrackSummaryTool/TrackSummaryTool.h @@ -5,22 +5,20 @@ #ifndef TRKTRACKSUMMARYTOOL_H #define TRKTRACKSUMMARYTOOL_H -#include "CxxUtils/checker_macros.h" #include "AthenaBaseComps/AthAlgTool.h" +#include "CxxUtils/checker_macros.h" #include "GaudiKernel/ToolHandle.h" -#include "TrkTrack/Track.h" #include "TrkParameters/TrackParameters.h" +#include "TrkTrack/Track.h" #include "TrkTrackSummary/TrackSummary.h" - +#include "TRT_ElectronPidTools/ITRT_ToT_dEdx.h" #include "TrkToolInterfaces/IExtendedTrackSummaryHelperTool.h" -#include "TrkToolInterfaces/ITRT_ElectronPidTool.h" #include "TrkToolInterfaces/IPixelToTPIDTool.h" -#include "TRT_ElectronPidTools/ITRT_ToT_dEdx.h" - +#include "TrkToolInterfaces/ITRT_ElectronPidTool.h" -#include <vector> #include "TrkToolInterfaces/IExtendedTrackSummaryTool.h" +#include <vector> class AtlasDetectorID; class Identifier; @@ -56,71 +54,85 @@ public: virtual StatusCode initialize() override; virtual StatusCode finalize() override; - /** create a summary object from passed Track. The summary object belongs to - you, the user, and so you must take care of deletion of it. - @param onlyUpdateTrack If false (default) then the summary is cloned and added to the track, - and a separate summary returned. If true, only update track and return 0*/ - virtual const Trk::TrackSummary* createSummary ATLAS_NOT_THREAD_SAFE(const Track& track, - bool onlyUpdateTrack = false) const override; - - /** create a summary object of passed track without doing the tedious hole search. - Same comments as for createSummary apply here, of course, too. */ - virtual const Trk::TrackSummary* createSummaryNoHoleSearch ATLAS_NOT_THREAD_SAFE(const Track& track) const override; - /** Compute track summary and replace the summary in given track. - * @param track the track whose track summary is replaced with a newly computed one - * @param prd_to_track_map a PRD to track association map to compute shared hits or a nullptr - * @param suppress_hole_search do not perform the hole search independent of the settings of the ID and muon hole - * search properties. Will recompute the track summary for the given track, delete the old track summary of the track - * if there is already one and set the new one. If a valid PRD to track map is given the number of shared hits is - * computed otherwise not. The hole search is performed according to the settings of the ID and muon hole search - * properties unless the suppress_hole_search argument is true. + * @param track the track whose track summary is replaced with a newly + * computed one + * @param prd_to_track_map a PRD to track association map to compute shared + * hits or a nullptr + * @param suppress_hole_search do not perform the hole search independent of + * the settings of the ID and muon hole search properties. Will recompute the + * track summary for the given track, delete the old track summary of the + * track if there is already one and set the new one. If a valid PRD to track + * map is given the number of shared hits is computed otherwise not. The hole + * search is performed according to the settings of the ID and muon hole + * search properties unless the suppress_hole_search argument is true. */ - virtual void computeAndReplaceTrackSummary(Track& track, - const Trk::PRDtoTrackMap* prd_to_track_map, - bool suppress_hole_search = false) const override; + virtual void computeAndReplaceTrackSummary( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map, + bool suppress_hole_search = false) const override; - /** create a summary object from passed Track.*/ - virtual std::unique_ptr<Trk::TrackSummary> summary(const Track& track) const override; + /** create a summary object from passed Track or clone the existing*/ + virtual std::unique_ptr<Trk::TrackSummary> summary( + const Track& track) const override; - /** create a summary object of passed track without doing the tedious hole search. */ - virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch(const Track& track) const override; + /** create a summary object of passed track, without doing the tedious hole + * search, or clone the existing*/ + virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch( + const Track& track) const override; - /** create a summary object from passed Track.*/ - virtual std::unique_ptr<Trk::TrackSummary> summary(const Track& track, - const Trk::PRDtoTrackMap* prd_to_track_map) const override; + /** create a summary object from passed Track,*/ + virtual std::unique_ptr<Trk::TrackSummary> summary( + const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const override; - /** create a summary object of passed track without doing the tedious hole search. */ + /** create a summary object of passed track without doing the tedious hole + * search. */ virtual std::unique_ptr<Trk::TrackSummary> summaryNoHoleSearch( const Track& track, const Trk::PRDtoTrackMap* prd_to_track_map) const override; - /** method to update the shared hit content only, this is optimised for track collection merging. */ - virtual void updateSharedHitCount(Track& track, const Trk::PRDtoTrackMap* prd_to_track_map) const override + /** method to update the shared hit content only, this is optimised for track + * collection merging. */ + virtual void updateSharedHitCount( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const override { if (!track.trackSummary()) { - computeAndReplaceTrackSummary(track, prd_to_track_map, false /*DO NOT suppress hole search*/); + computeAndReplaceTrackSummary( + track, prd_to_track_map, false /*DO NOT suppress hole search*/); } else { updateSharedHitCount(track, prd_to_track_map, *track.trackSummary()); } } - /** method to update additional information (PID,shared hits, dEdX), this is optimised for track collection merging. + /** method to update additional information (PID,shared hits, dEdX), this is + * optimised for track collection merging. */ - virtual void updateAdditionalInfo(Track& track, const Trk::PRDtoTrackMap* prd_to_track_map) const override + virtual void updateAdditionalInfo( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const override { if (!track.trackSummary()) { - computeAndReplaceTrackSummary(track, prd_to_track_map, false /*DO NOT suppress hole search*/); + computeAndReplaceTrackSummary( + track, prd_to_track_map, false /*DO NOT suppress hole search*/); } else { updateAdditionalInfo( - track, prd_to_track_map, *track.trackSummary(), true); // @TODO set to false; true for backward compatibility + track, + prd_to_track_map, + *track.trackSummary(), + true); // @TODO set to false; true for backward compatibility } } - /** use this method to update a track. this means a tracksummary is created for - this track but not returned. the summary can then be obtained from the track. - Because it is taken from the track the ownership stays with the track */ - virtual void updateTrack(Track& track) const override { updateTrack(track, nullptr); } + /** use this method to update a track. this means a tracksummary is created + for this track but not returned. the summary can then be obtained from the + track. Because it is taken from the track the ownership stays with the track +*/ + virtual void updateTrack(Track& track) const override + { + updateTrack(track, nullptr); + } /** method which can be used to update a refitted track and add a summary to * it, without doing shard hit/ or hole search. Adds a summary to a track and @@ -131,34 +143,44 @@ public: } /** Update the shared hit count of the given track summary. - * @param summary the summary to be updated i.e. a copy of the track summary of the given track. - * @param track the track which corresponds to the given track summary and is used to compute the numbers of shared - * hits. - * @param prd_to_track_map an optional PRD-to-track map which is used to compute the shared hits otherwise the - * association tool will be used. The method will update the shared information in the given summary. The track will - * not be modified i.e. the shared hit count of the summary owned by the track will not be updated. + * @param summary the summary to be updated i.e. a copy of the track summary + * of the given track. + * @param track the track which corresponds to the given track summary and is + * used to compute the numbers of shared hits. + * @param prd_to_track_map an optional PRD-to-track map which is used to + * compute the shared hits otherwise the association tool will be used. The + * method will update the shared information in the given summary. The track + * will not be modified i.e. the shared hit count of the summary owned by the + * track will not be updated. */ virtual void updateSharedHitCount(const Track& track, const Trk::PRDtoTrackMap* prd_to_track_map, TrackSummary& summary) const override; - /** method to update the shared hit content only, this is optimised for track collection merging. */ + /** method to update the shared hit content only, this is optimised for track + * collection merging. */ virtual void updateSharedHitCount(Track& track) const override { if (!track.trackSummary()) { - computeAndReplaceTrackSummary(track, nullptr, false /*DO NOT suppress hole search*/); + computeAndReplaceTrackSummary( + track, nullptr, false /*DO NOT suppress hole search*/); } else { updateSharedHitCount(track, nullptr, *track.trackSummary()); } } - /** Update the shared hit counts, expected hit, PID information and eventually the detailed track summaries. - * @param track the track corresponding to the summary which is updated, which is not actively changed. - * @param prd-to-track an optional PRD-to-track map to compute shared hits or nullptr. + /** Update the shared hit counts, expected hit, PID information and eventually + * the detailed track summaries. + * @param track the track corresponding to the summary which is updated, which + * is not actively changed. + * @param prd-to-track an optional PRD-to-track map to compute shared hits or + * nullptr. * @param summary the summary which is updated. - * Will update the shared hit, expected hit, PID information and eventually the detailed track summaries. If - * no PRD-to-track map is given the helper tools will rely on a PRD association tool to privide the shared - * hit information. The method will not update the track itself unless the given summary is owned by the track. + * Will update the shared hit, expected hit, PID information and eventually + * the detailed track summaries. If no PRD-to-track map is given the helper + * tools will rely on a PRD association tool to privide the shared hit + * information. The method will not update the track itself unless the given + * summary is owned by the track. */ virtual void updateAdditionalInfo(const Track& track, const Trk::PRDtoTrackMap* prd_to_track_map, @@ -167,15 +189,20 @@ public: updateAdditionalInfo(track, prd_to_track_map, summary, false); } - /** method to update additional information (PID,shared hits, dEdX), this is optimised for track collection merging. + /** method to update additional information (PID,shared hits, dEdX), this is + * optimised for track collection merging. */ virtual void updateAdditionalInfo(Track& track) const override { if (!track.trackSummary()) { - computeAndReplaceTrackSummary(track, nullptr, false /*DO NOT suppress hole search*/); + computeAndReplaceTrackSummary( + track, nullptr, false /*DO NOT suppress hole search*/); } else { updateAdditionalInfo( - track, nullptr, *track.trackSummary(), true); // @TODO set to false; true for backward compatibility + track, + nullptr, + *track.trackSummary(), + true); // @TODO set to false; true for backward compatibility } } @@ -185,67 +212,79 @@ private: TrackSummary& summary, bool initialise_to_zero) const; - Trk::TrackSummary* createSummaryAndUpdateTrack ATLAS_NOT_THREAD_SAFE(const Track& track, - const Trk::PRDtoTrackMap* prd_to_track_map, - bool onlyUpdateTrack, - bool doHolesInDet, - bool doHolesMuon) const - { - Trk::Track& nonConstTrack = const_cast<Trk::Track&>(track); - nonConstTrack.setTrackSummary(createSummary(track, prd_to_track_map, doHolesInDet, doHolesMuon)); - return onlyUpdateTrack ? nullptr : new Trk::TrackSummary(*nonConstTrack.trackSummary()); - } - /** use this method to update a track. this means a tracksummary is created for - this track but not returned. the summary can then be obtained from the track. - Because it is taken from the track the ownership stays with the track */ - void updateTrack(Track& track, const Trk::PRDtoTrackMap* prd_to_track_map) const; + /** use this method to update a track. this means a tracksummary is created + for this track but not returned. the summary can then be obtained from the + track. Because it is taken from the track the ownership stays with the track + */ + void updateTrack(Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const; - void updateTrackNoHoleSearch(Track& track, const Trk::PRDtoTrackMap* prd_to_track_map) const; + void updateTrackNoHoleSearch( + Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map) const; - std::unique_ptr<Trk::TrackSummary> createSummary(const Track& track, - const Trk::PRDtoTrackMap* prd_to_track_map, - bool doHolesInDet, - bool doHolesMuon) const; + std::unique_ptr<Trk::TrackSummary> createSummary( + const Track& track, + const Trk::PRDtoTrackMap* prd_to_track_map, + bool doHolesInDet, + bool doHolesMuon) const; /** Return the correct tool, matching the passed Identifier*/ Trk::IExtendedTrackSummaryHelperTool* getTool(const Identifier& id); - const Trk::IExtendedTrackSummaryHelperTool* getTool(const Identifier& id) const; + const Trk::IExtendedTrackSummaryHelperTool* getTool( + const Identifier& id) const; /**tool to decipher ID RoTs*/ - ToolHandle<IExtendedTrackSummaryHelperTool> m_idTool{ this, "InDetSummaryHelperTool", "", "" }; + ToolHandle<IExtendedTrackSummaryHelperTool> + m_idTool{ this, "InDetSummaryHelperTool", "", "" }; /**tool to calculate electron probabilities*/ - ToolHandle<ITRT_ElectronPidTool> m_eProbabilityTool{ this, "TRT_ElectronPidTool", "", "" }; + ToolHandle<ITRT_ElectronPidTool> m_eProbabilityTool{ this, + "TRT_ElectronPidTool", + "", + "" }; /** tool to calculate the TRT_ToT_dEdx.*/ ToolHandle<ITRT_ToT_dEdx> m_trt_dEdxTool{ this, "TRT_ToT_dEdxTool", "", "" }; /**tool to calculate dE/dx using pixel clusters*/ ToolHandle<IPixelToTPIDTool> m_dedxtool{ this, "PixelToTPIDTool", "", "" }; /**tool to decipher muon RoTs*/ - ToolHandle<IExtendedTrackSummaryHelperTool> m_muonTool{ this, "MuonSummaryHelperTool","", "" }; - + ToolHandle<IExtendedTrackSummaryHelperTool> + m_muonTool{ this, "MuonSummaryHelperTool", "", "" }; + /** controls whether holes on track are produced Turning this on will (slightly) increase processing time.*/ Gaudi::Property<bool> m_doHolesMuon{ this, "doHolesMuon", false, "" }; - /** For the InDet it is switched on automatically as soon as the HoleSearchTool is given */ + /** For the InDet it is switched on automatically as soon as the + * HoleSearchTool is given */ Gaudi::Property<bool> m_doHolesInDet{ this, "doHolesInDet", false, "" }; /** controls whether shared hits in Pix+SCT are produced Turning this on will increase processing time.*/ Gaudi::Property<bool> m_doSharedHits{ this, "doSharedHits", false, "" }; - + /** controls whether the detailed summary is added for the indet */ - Gaudi::Property<bool> m_addInDetDetailedSummary{ this, "AddDetailedInDetSummary", true, "" }; + Gaudi::Property<bool> m_addInDetDetailedSummary{ this, + "AddDetailedInDetSummary", + true, + "" }; /** controls whether the detailed summary is added for the muons */ - Gaudi::Property<bool> m_addMuonDetailedSummary{ this, "AddDetailedMuonSummary", true, "" }; + Gaudi::Property<bool> m_addMuonDetailedSummary{ this, + "AddDetailedMuonSummary", + true, + "" }; /** switch to deactivate Pixel info init */ Gaudi::Property<bool> m_pixelExists{ this, "PixelExists", true, "" }; - - /** Only compute TRT dE/dx if there are at least this number of TRT hits or outliers.*/ - Gaudi::Property<int> m_minTRThitsForTRTdEdx{ this, "minTRThitsForTRTdEdx", 1, "" }; + + /** Only compute TRT dE/dx if there are at least this number of TRT hits or + * outliers.*/ + Gaudi::Property<int> m_minTRThitsForTRTdEdx{ this, + "minTRThitsForTRTdEdx", + 1, + "" }; /**atlas id helper*/ const AtlasDetectorID* m_detID; - /**loops over TrackStatesOnSurface and uses this to produce the summary information - Fills 'information', 'eProbability', and 'hitPattern'*/ + /**loops over TrackStatesOnSurface and uses this to produce the summary + information Fills 'information', 'eProbability', and 'hitPattern'*/ void processTrackStates(const Track& track, const Trk::PRDtoTrackMap* prd_to_track_map, const DataVector<const TrackStateOnSurface>* tsos, @@ -261,10 +300,10 @@ private: std::vector<int>& information, std::bitset<numberOfDetectorTypes>& hitPattern) const; - /** Extrapolation is performed from one hit to the next, it is checked if surfaces in between - the extrapolation are left out. The trackParameters of the destination hit (instead of the - trackParameters of the extrapolation step) are then used as starting point for the next - extrapolation step. */ + /** Extrapolation is performed from one hit to the next, it is checked if + surfaces in between the extrapolation are left out. The trackParameters of + the destination hit (instead of the trackParameters of the extrapolation + step) are then used as starting point for the next extrapolation step. */ void searchHolesStepWise(const Trk::Track& track, std::vector<int>& information, bool doHolesInDet, diff --git a/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx b/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx index f1c6b44cb460c0ed64df874c644a788a277462ee..b7fc117d42e1f91ac198dc5b6b2b7e166234c85a 100755 --- a/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx +++ b/Tracking/TrkTools/TrkTrackSummaryTool/src/TrackSummaryTool.cxx @@ -23,7 +23,6 @@ #include <vector> #include <algorithm> -//============================================================================================ Trk::TrackSummaryTool::TrackSummaryTool(const std::string& t, const std::string& n, @@ -35,15 +34,13 @@ Trk::TrackSummaryTool::TrackSummaryTool(const std::string& t, declareInterface<ITrackSummaryTool>(this); } -//============================================================================================ Trk::TrackSummaryTool::~TrackSummaryTool() { } -//============================================================================================ -StatusCode +StatusCode Trk::TrackSummaryTool::initialize() { // StatusCode sc=StatusCode::SUCCESS; @@ -61,49 +58,49 @@ StatusCode ATH_MSG_ERROR ("Failed to retrieve InDet helper tool "<< m_idTool); ATH_MSG_ERROR ("configure as 'None' to avoid its loading."); return StatusCode::FAILURE; - } + } if ( !m_idTool.empty()) msg(MSG::INFO) << "Retrieved tool " << m_idTool << endmsg; - + // Troels.Petersen@cern.ch: - if ( !m_eProbabilityTool.empty() && m_eProbabilityTool.retrieve().isFailure() ) + if ( !m_eProbabilityTool.empty() && m_eProbabilityTool.retrieve().isFailure() ) { ATH_MSG_ERROR ("Failed to retrieve electron probability tool " << m_eProbabilityTool); ATH_MSG_ERROR ("configure as 'None' to avoid its loading."); return StatusCode::FAILURE; - } + } if ( !m_eProbabilityTool.empty()) msg(MSG::INFO) << "Retrieved tool " << m_eProbabilityTool << endmsg; - + if (!m_trt_dEdxTool.empty()) { ATH_CHECK( m_trt_dEdxTool.retrieve() ); } - + if ( !m_dedxtool.empty() && m_dedxtool.retrieve().isFailure() ) { ATH_MSG_ERROR ("Failed to retrieve pixel dEdx tool " << m_dedxtool); ATH_MSG_ERROR ("configure as 'None' to avoid its loading."); return StatusCode::FAILURE; - } + } if ( !m_dedxtool.empty()) msg(MSG::INFO) << "Retrieved tool " << m_dedxtool << endmsg; - - if ( !m_muonTool.empty() && m_muonTool.retrieve().isFailure() ) + + if ( !m_muonTool.empty() && m_muonTool.retrieve().isFailure() ) { ATH_MSG_ERROR ("Failed to retrieve Muon helper tool "<< m_muonTool); ATH_MSG_ERROR ("configure as 'None' to avoid its loading."); - } + } else { if ( !m_muonTool.empty()) msg(MSG::INFO) << "Retrieved tool " << m_muonTool<<endmsg; } - if (m_doHolesInDet) + if (m_doHolesInDet) ATH_MSG_INFO ("Search for InDet holes using external tool turned ON"); else ATH_MSG_INFO ("Search for InDet holes using external tool turned OFF"); - if (m_doHolesMuon) + if (m_doHolesMuon) ATH_MSG_INFO ("Search for Muon holes using external tool turned ON"); else ATH_MSG_INFO ("Search for Muon holes using external tool turned OFF"); @@ -112,27 +109,16 @@ StatusCode return StatusCode::SUCCESS; } -//============================================================================================ -StatusCode +StatusCode Trk::TrackSummaryTool::finalize() { - //StatusCode sc = AlgTool::finalize(); return StatusCode::SUCCESS; } -const Trk::TrackSummary* Trk::TrackSummaryTool::createSummaryNoHoleSearch( const Track& track ) const -{ - return createSummaryAndUpdateTrack(track, nullptr, false, false, false); -} -//============================================================================================ - -const Trk::TrackSummary* Trk::TrackSummaryTool::createSummary( const Track& track, - bool onlyUpdateTrack ) const -{ - return createSummaryAndUpdateTrack(track, nullptr, onlyUpdateTrack, m_doHolesInDet, m_doHolesMuon); -} - +/* + * First the methods to create a new or clone the existing + */ void Trk::TrackSummaryTool::computeAndReplaceTrackSummary(Trk::Track &track, const Trk::PRDtoTrackMap *prd_to_track_map, bool suppress_hole_search) const { @@ -159,13 +145,13 @@ std::unique_ptr<Trk::TrackSummary> Trk::TrackSummaryTool::summary( const Track& std::unique_ptr<Trk::TrackSummary> Trk::TrackSummaryTool::summaryNoHoleSearch( const Track& track) const { - return createSummary(track, nullptr, false, false ); + return createSummary(track, nullptr, false, false ); } std::unique_ptr<Trk::TrackSummary> Trk::TrackSummaryTool::summaryNoHoleSearch( const Track& track, const Trk::PRDtoTrackMap *prd_to_track_map) const { - return createSummary(track, prd_to_track_map, false, false ); + return createSummary(track, prd_to_track_map, false, false ); } std::unique_ptr<Trk::TrackSummary> @@ -196,7 +182,7 @@ Trk::TrackSummaryTool::createSummary( const Track& track, if (!m_idTool.empty()) { if (m_pixelExists) { - information [numberOfContribPixelLayers] = 0; + information [numberOfContribPixelLayers] = 0; information [numberOfInnermostPixelLayerHits] = 0; information [numberOfInnermostPixelLayerOutliers] = 0; information [numberOfNextToInnermostPixelLayerHits] = 0; @@ -261,7 +247,7 @@ Trk::TrackSummaryTool::createSummary( const Track& track, // New Small Wheel information[Trk::numberOfStgcEtaHits] =0; information[Trk::numberOfStgcPhiHits] =0; - information[Trk::numberOfMmHits] =0; + information[Trk::numberOfMmHits] =0; information[Trk::numberOfStgcEtaHoles] =0; information[Trk::numberOfStgcPhiHoles] =0; information[Trk::numberOfMmHoles] =0; @@ -281,13 +267,13 @@ Trk::TrackSummaryTool::createSummary( const Track& track, <<track.info().dumpInfo()<<"). This should never happen! "); } - if (doHolesInDet || doHolesMuon) + if (doHolesInDet || doHolesMuon) { - if (m_pixelExists) + if (m_pixelExists) { - information [numberOfPixelHoles] = 0; + information [numberOfPixelHoles] = 0; } - information [numberOfSCTHoles] = 0; + information [numberOfSCTHoles] = 0; information [numberOfSCTDoubleHoles] = 0; searchHolesStepWise(track,information, doHolesInDet, doHolesMuon); } @@ -307,7 +293,7 @@ Trk::TrackSummaryTool::createSummary( const Track& track, else { eProbability.push_back(0.0); } - + std::unique_ptr<TrackSummary> ts=std::make_unique<TrackSummary>(information, eProbability, hitPattern, @@ -328,6 +314,10 @@ Trk::TrackSummaryTool::createSummary( const Track& track, return ts; } +/* + * The the update methods + */ + void Trk::TrackSummaryTool::updateTrack(Track& track,const Trk::PRDtoTrackMap *prd_to_track_map) const { // first check if track has summary already. @@ -352,7 +342,7 @@ void Trk::TrackSummaryTool::updateSharedHitCount(const Track& track, const Trk:: void Trk::TrackSummaryTool::updateAdditionalInfo(const Track& track, const Trk::PRDtoTrackMap *prd_to_track_map, TrackSummary &summary, bool initialise_to_zero) const { unsigned int numberOfeProbabilityTypes = Trk::numberOfeProbabilityTypes+1; - std::vector<float> eProbability(numberOfeProbabilityTypes,0.5); + std::vector<float> eProbability(numberOfeProbabilityTypes,0.5); if ( !m_eProbabilityTool.empty() ) eProbability = m_eProbabilityTool->electronProbability(track); if (!m_trt_dEdxTool.empty()) { @@ -393,6 +383,11 @@ void Trk::TrackSummaryTool::updateAdditionalInfo(const Track& track, const Trk:: if (m_addInDetDetailedSummary) m_idTool->addDetailedTrackSummary(track,summary); } + +/* + * Then the internal helpers + */ + void Trk::TrackSummaryTool::processTrackStates(const Track& track, const Trk::PRDtoTrackMap *prd_to_track_map, const DataVector<const TrackStateOnSurface>* tsos, @@ -506,15 +501,15 @@ Trk::TrackSummaryTool::getTool(const Identifier& id) if (m_detID->is_indet(id)){ if (!m_idTool.empty()){ return &*m_idTool; - } + } ATH_MSG_WARNING("getTool: Identifier is from ID but have no ID tool"); - + } else if(m_detID->is_muon(id)) { if (!m_muonTool.empty()) { return &*m_muonTool; - } + } ATH_MSG_WARNING("getTool: Identifier is from Muon but have no Muon tool"); - + } else { ATH_MSG_WARNING("getTool: Identifier is of unknown type! id: "<<id.getString()); } @@ -527,15 +522,15 @@ Trk::TrackSummaryTool::getTool(const Identifier& id) const if (m_detID->is_indet(id)){ if (!m_idTool.empty()){ return &*m_idTool; - } + } ATH_MSG_WARNING("getTool: Identifier is from ID but have no ID tool"); - + } else if(m_detID->is_muon(id)) { if (!m_muonTool.empty()) { return &*m_muonTool; - } + } ATH_MSG_WARNING("getTool: Identifier is from Muon but have no Muon tool"); - + } else { ATH_MSG_WARNING("getTool: Identifier is of unknown type! id: "<<id.getString()); } @@ -550,11 +545,11 @@ void Trk::TrackSummaryTool::searchHolesStepWise( const Trk::Track& track, ATH_MSG_VERBOSE ("Entering Trk::TrackSummaryTool::searchHolesStepWise"); // -------- obtain hits in Pixel and SCT only - if (track.trackStateOnSurfaces()==nullptr) + if (track.trackStateOnSurfaces()==nullptr) { ATH_MSG_DEBUG ("No trackStatesOnSurface!!!!"); information [numberOfPixelHoles] = -1; - information [numberOfPixelDeadSensors] = -1; + information [numberOfPixelDeadSensors] = -1; information [numberOfSCTHoles] = -1; information [numberOfSCTDoubleHoles] = -1; information [numberOfSCTDeadSensors] = -1; @@ -562,27 +557,27 @@ void Trk::TrackSummaryTool::searchHolesStepWise( const Trk::Track& track, information [numberOfTRTDeadStraws] = -1; // NOTE: Eta holes was used twice instead of Phi holes information [numberOfCscEtaHoles] = -1; - information [numberOfCscPhiHoles] = -1; + information [numberOfCscPhiHoles] = -1; information [numberOfRpcEtaHoles] = -1; - information [numberOfRpcPhiHoles] = -1; + information [numberOfRpcPhiHoles] = -1; information [numberOfTgcEtaHoles] = -1; information [numberOfTgcPhiHoles] = -1; // New Small Wheel information [numberOfStgcEtaHoles] = -1; - information [numberOfStgcPhiHoles] = -1; + information [numberOfStgcPhiHoles] = -1; information [numberOfMmHoles] = -1; return; } - - + + if (doHolesInDet) { // -------- perform the InDet hole search if (m_pixelExists) { information [numberOfPixelHoles] = 0; information [numberOfPixelDeadSensors] = 0; - } - information [numberOfSCTHoles] = 0; + } + information [numberOfSCTHoles] = 0; information [numberOfSCTDoubleHoles] = 0; information [numberOfSCTDeadSensors] = 0; // ME : revert to take the summary helper, this is a temporary thing for 16.0.X @@ -590,22 +585,22 @@ void Trk::TrackSummaryTool::searchHolesStepWise( const Trk::Track& track, } if (!m_muonTool.empty() && doHolesMuon) { - // now do Muon hole search. It works completely differently to the above, + // now do Muon hole search. It works completely differently to the above, // so we need to make this all a bit more general // and probably more efficient. But this hopefully works for now! EJWM information [numberOfMdtHoles] = 0; information [numberOfCscEtaHoles] = 0; - information [numberOfCscPhiHoles] = 0; + information [numberOfCscPhiHoles] = 0; information [numberOfRpcEtaHoles] = 0; - information [numberOfRpcPhiHoles] = 0; + information [numberOfRpcPhiHoles] = 0; information [numberOfTgcEtaHoles] = 0; information [numberOfTgcPhiHoles] = 0; // New Small Wheel information [numberOfStgcEtaHoles] = 0; - information [numberOfStgcPhiHoles] = 0; - information [numberOfMmHoles] = 0; + information [numberOfStgcPhiHoles] = 0; + information [numberOfMmHoles] = 0; m_muonTool->searchForHoles(track,information,Trk::muon) ; } - + } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx index 1e8bf168022be6c75961a61651535575b9cf233c..69a49b9b2abc5d63494913678a88b4e32d189081 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.cxx @@ -61,8 +61,9 @@ StatusCode TrigL2MuonSA::CscDataPreparator::initialize() ATH_CHECK( m_regionSelector.retrieve() ); - ATH_CHECK(m_cscPrepContainerKey.initialize(!m_cscPrepContainerKey.empty())); - + ATH_CHECK(m_cscPrepContainerKey.initialize(!m_cscPrepContainerKey.empty() && !m_doDecoding)); + //Write Handle for CSC clusters (only if we run decoding) + ATH_CHECK(m_cscClustersKey.initialize(m_doDecoding)); // return StatusCode::SUCCESS; } @@ -112,8 +113,22 @@ StatusCode TrigL2MuonSA::CscDataPreparator::prepareData(const TrigRoiDescriptor* cscHashIDs_cluster.clear(); if(to_full_decode) cscHashIDs_decode.clear(); if( !cscHashIDs_decode.empty() || to_full_decode ){ - if( m_cscClusterProvider->getClusters( cscHashIDs_decode, cscHashIDs_cluster ).isFailure() ){ - ATH_MSG_WARNING("Problems when preparing CSC Clusters"); + SG::WriteHandle<Muon::CscPrepDataContainer> wh_clusters(m_cscClustersKey); + if (!wh_clusters.isPresent()) { + Muon::CscPrepDataContainer* object = new Muon::CscPrepDataContainer(m_idHelperSvc->cscIdHelper().module_hash_max()); + /// record the container in storeGate + ATH_CHECK(wh_clusters.record(std::unique_ptr<Muon::CscPrepDataContainer>(object))); + if( m_cscClusterProvider->getClusters( cscHashIDs_decode, cscHashIDs_cluster, object ).isFailure() ){ + ATH_MSG_WARNING("Problems when preparing CSC Clusters"); + } + } else { + //need to retrieve from evt store for Run 2 trigger (only used in non MT processing) + const Muon::CscPrepDataContainer* outputCollection_c = nullptr; + ATH_CHECK(evtStore()->retrieve(outputCollection_c, m_cscClustersKey.key())); + Muon::CscPrepDataContainer* object ATLAS_THREAD_SAFE = const_cast<Muon::CscPrepDataContainer*> (outputCollection_c); + if( m_cscClusterProvider->getClusters( cscHashIDs_decode, cscHashIDs_cluster, object ).isFailure() ){ + ATH_MSG_WARNING("Problems when preparing CSC Clusters"); + } } cscHashIDs_decode.clear(); } diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h index 8b9edda98c73b2abaf1d31152efc02948dd2a289..bee5ac5d8abdb7a87db55947e3c7628c1ac190a0 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/CscDataPreparator.h @@ -72,7 +72,10 @@ namespace TrigL2MuonSA { ToolHandle<ICscClusterBuilder> m_cscClusterProvider{ this, "CscClusterProvider", "CscThresholdClusterBuilderTool"}; + //If we don't do the decoding in the algorithm, we need to read in the cluster container SG::ReadHandleKey<Muon::CscPrepDataContainer> m_cscPrepContainerKey{ this, "CSCPrepDataContainer", "CSC_Clusters", "Name of the CSCContainer to read in"}; + //If we do the decoding in the algorithm, we need to run the clustering and record the container + SG::WriteHandleKey<Muon::CscPrepDataContainer> m_cscClustersKey{ this, "CSClusterContainer", "CSC_Clusters", "Name of the CSCClusterContainer to write out"}; // Flag to decide if we need to run the actual decoding (in MT setup, we can use offline code for this) Gaudi::Property<bool> m_doDecoding{ this, "DoDecoding", true, "Flag to decide if we need to do decoding of the CSCs" }; diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py index 5a6ef4e3ae8860f0a55e378ee960714019572c03..e5701f82322b3dde68b7a544659a620ac1113a08 100755 --- a/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py +++ b/Trigger/TrigAlgorithms/TrigMuonEF/python/TrigMuonEFConfig.py @@ -551,8 +551,6 @@ class TrigMuonEFStandaloneTrackToolConfig (TrigMuonEFConf.TrigMuonEFStandaloneTr #CSC ToolSvc += CscRdoToCscPrepDataTool self.CscPrepDataProvider=CscRdoToCscPrepDataTool - #We use the clusters not the PRD hits directly for CSCs - self.CscPrepDataContainer="CSC_Clusters" #TGC ToolSvc += TgcRdoToTgcPrepDataTool self.TgcPrepDataProvider=TgcRdoToTgcPrepDataTool diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx index 82f62109e232a55bf6b264dece63183efec95f94..f8ce12efabcffa6389dccc566bdab6e296981df3 100644 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx +++ b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.cxx @@ -134,7 +134,6 @@ TrigMuonEFStandaloneTrackTool::TrigMuonEFStandaloneTrackTool(const std::string& m_rpcKey("RPC_Measurements"), m_tgcKey("TGC_Measurements"), m_tgcKeyNextBC("TGC_MeasurementsNextBC"), - m_cscKey("CSC_Clusters"), m_mdtKey("MDT_DriftCircles"), m_ignoreCSC(true), m_segmentOverlapRemovalTool("Muon::MuonSegmentOverlapRemovalTool/MuonSegmentOverlapRemovalTool") @@ -189,7 +188,6 @@ TrigMuonEFStandaloneTrackTool::TrigMuonEFStandaloneTrackTool(const std::string& declareProperty("TgcPrepDataContainer", m_tgcKey); declareProperty("TgcPrepDataContainerNextBC", m_tgcKeyNextBC); declareProperty("MdtPrepDataContainer", m_mdtKey); - declareProperty("CscPrepDataContainer", m_cscKey); declareProperty("IgnoreMisalginedCSCs", m_ignoreCSC); declareProperty("SegmentOverlapRemovalTool", m_segmentOverlapRemovalTool, "tool to removal overlaps in segment combinations" ); @@ -485,11 +483,7 @@ StatusCode TrigMuonEFStandaloneTrackTool::initialize() ATH_MSG_ERROR("Couldn't initalize MDT ReadHandleKey"); return StatusCode::FAILURE; } - if(!m_cscKey.initialize()){ - ATH_MSG_ERROR("Couldn't initalize CSC ReadHandleKey"); - return StatusCode::FAILURE; - } - + ATH_CHECK(m_cscClustersKey.initialize()); //segment overlap removal ATH_CHECK( m_segmentOverlapRemovalTool.retrieve() ); @@ -1022,8 +1016,28 @@ if (m_useMdtData>0) { } }// end of TGC decoding - + CscPrepDataContainer* cscPrds = nullptr; if (m_useCscData && !csc_hash_ids.empty()) {// CSC decoding + SG::WriteHandle<Muon::CscPrepDataContainer> wh_clusters(m_cscClustersKey); + cscPrds = new CscPrepDataContainer(m_idHelperSvc->cscIdHelper().module_hash_max()); + if (!wh_clusters.isPresent()) { + /// record the container in storeGate + if(wh_clusters.record(std::unique_ptr<Muon::CscPrepDataContainer>(cscPrds)).isFailure()){ + ATH_MSG_ERROR("Could not record CSC cluster container "<<m_cscClustersKey.key()); + return HLT::NAV_ERROR; + } + } else { + const Muon::CscPrepDataContainer* outputCollection_c = nullptr; + if(evtStore()->retrieve(outputCollection_c, m_cscClustersKey.key()).isFailure()){ + ATH_MSG_ERROR("Could not retrieve CSC cluster container "<<m_cscClustersKey.key()); + return HLT::NAV_ERROR; + } + else{ + cscPrds = const_cast<Muon::CscPrepDataContainer*> (outputCollection_c); + } + } + + if (m_useCscSeededDecoding) {// seeded decoding of CSC if (m_useCscRobDecoding) {// ROB-based seeded decoding of CSC is not available ATH_MSG_DEBUG("ROB-based seeded decoding of CSC requested, which is not available. Calling the PRD-based seeded decoding."); @@ -1049,7 +1063,7 @@ if (m_useMdtData>0) { } // get clusters out of PRD if(csc_hash_ids.size()!=0) { - if (m_cscClusterProvider->getClusters(csc_hash_ids, hash_ids_withData).isSuccess()) { + if (m_cscClusterProvider->getClusters(csc_hash_ids, hash_ids_withData, cscPrds).isSuccess()) { ATH_MSG_DEBUG("CSC clusters obtained successfully"); csc_hash_ids.clear(); csc_hash_ids = hash_ids_withData; @@ -1081,7 +1095,7 @@ if (m_useMdtData>0) { ATH_MSG_WARNING("PRD-based full decoding of CSC failed"); } //get clusters out of PRD - if(m_cscClusterProvider->getClusters(input_hash_ids, hash_ids_withData).isSuccess()) { + if(m_cscClusterProvider->getClusters(input_hash_ids, hash_ids_withData, cscPrds).isSuccess()) { ATH_MSG_DEBUG("CSC clusters obtained successfully"); } else { ATH_MSG_WARNING("Preparing CSC clusters failed"); @@ -1395,16 +1409,6 @@ if (m_useMdtData>0) { // Get CSC container if (m_useCscData && !csc_hash_ids.empty()) { - const CscPrepDataContainer* cscPrds = 0; - SG::ReadHandle<Muon::CscPrepDataContainer> CscCont(m_cscKey); - if( !CscCont.isValid() ) { - ATH_MSG_ERROR(" Cannot retrieve CSC PRD Container"); - return HLT::NAV_ERROR; - } - else{ - cscPrds=CscCont.cptr(); - ATH_MSG_DEBUG(" CSC PRD Container retrieved"); - } // Get CSC collections const Muon::CscPrepDataCollection* CSCcoll = nullptr; diff --git a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h index 622a2677c5a4a2d7715c43898f1d5bcc15ff9e6f..0e894020396983aedd82c1ff0631cdd66c21f0bd 100644 --- a/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h +++ b/Trigger/TrigAlgorithms/TrigMuonEF/src/TrigMuonEFStandaloneTrackTool.h @@ -376,9 +376,11 @@ class TrigMuonEFStandaloneTrackTool : public AthAlgTool, SG::ReadHandleKey <Muon::RpcPrepDataContainer> m_rpcKey; SG::ReadHandleKey <Muon::TgcPrepDataContainer> m_tgcKey; SG::ReadHandleKey <Muon::TgcPrepDataContainer> m_tgcKeyNextBC; - SG::ReadHandleKey <Muon::CscPrepDataContainer> m_cscKey; SG::ReadHandleKey <Muon::MdtPrepDataContainer> m_mdtKey; + //write handle for CSC cluster container + SG::WriteHandleKey <Muon::CscPrepDataContainer> m_cscClustersKey{this, "CscClusterContainer", "CSC_Clusters", "Output CSC Cluster container"}; + bool m_ignoreCSC; ToolHandle<Muon::IMuonSegmentOverlapRemovalTool> m_segmentOverlapRemovalTool; diff --git a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py index 63f5a321e68c36bffaf7c245eb4bc53a6e6326ad..0131a57dfe65978b8075a734c9dba4cb69ccb7ac 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py +++ b/Trigger/TrigAlgorithms/TrigTauRec/python/TrigTauAlgorithmsHolder.py @@ -746,7 +746,6 @@ def getTauIDVarCalculator(): from AthenaCommon.AppMgr import ToolSvc from tauRecTools.tauRecToolsConf import TauIDVarCalculator TauIDVarCalculator = TauIDVarCalculator(name=_name) - TauIDVarCalculator.Key_vertexInputContainer = "" ToolSvc += TauIDVarCalculator cached_instances[_name] = TauIDVarCalculator diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx index 930b1015d00ae7f82bb3ec6fb0f325e16759d736..8837948894cb10e24df0b95fef7e6e4c32b126e0 100644 --- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx +++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.cxx @@ -301,6 +301,9 @@ StatusCode TrigTauRecMergedMT::execute(const EventContext& ctx) const CHECK( outTauSeedHandle.record( std::move( theJetContainer ), std::move( theTrigJetAuxContainer ) ) ); } + //Check if jetLink is valid for all taus + CHECK(p_tau->jetLink().isValid()); + // get TrackContainer if(!m_tracksKey.key().empty()){ SG::ReadHandle< xAOD::TrackParticleContainer > TPContainerHandle = SG::makeHandle( m_tracksKey,ctx ); diff --git a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.h b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.h index 092265f285350d900421c399db142b6fb601330c..305ca60b1da925bc67d041344b0179315eeb3c6d 100755 --- a/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.h +++ b/Trigger/TrigAlgorithms/TrigTauRec/src/TrigTauRecMergedMT.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #ifndef TRIGTAURECMERGEDMT_H @@ -77,7 +77,7 @@ class TrigTauRecMergedMT: public AthReentrantAlgorithm { SG::ReadHandleKey< xAOD::TauJetContainer> m_trigTauJetKey { this, "Key_trigTauJetInputContainer", "HLT_taujet", "input taujet container" }; SG::ReadHandleKey< xAOD::TauTrackContainer> m_trigTauTrackInKey { this, "Key_trigTauTrackInputContainer", "HLT_tautrack_input", "input tautrack container" }; - SG::WriteHandleKey< xAOD::JetContainer > m_trigtauSeedOutKey { this,"TrigTauJetOutputKey","HLT_seed_tau_jet","Key for output jets which are seed for tau jets"}; + SG::WriteHandleKey< xAOD::JetContainer > m_trigtauSeedOutKey { this,"Key_trigJetSeedOutputKey","HLT_jet_seed","Key for output jets which are seed for tau jets"}; SG::WriteHandleKey< xAOD::TauJetContainer > m_trigtauRecOutKey {this,"Key_trigTauJetOutputContainer","HLT_taujet","Output taujet container"}; SG::WriteHandleKey< xAOD::TauTrackContainer > m_trigtauTrkOutKey {this,"Key_trigTauTrackOutputContainer","HLT_tautrack","Output tautrack container"}; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h index b08be272fa36c91c716dc1a3e5b2d6a5591ad85e..29b2a9d3622fe9d8356c6acf3838c733d472041f 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/DataStructure.h @@ -51,7 +51,9 @@ namespace TrigConf { * @param data Reference to the data container */ DataStructure(const ptree & data); + DataStructure(const std::string & name, const ptree & data); DataStructure(ptree && data); + DataStructure(const std::string & name, ptree && data); /** Destructor */ virtual ~DataStructure(); diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h index dab6cb7e63b5bebe497ef4b93e315a6b4840c449..d15e87769469909e1d57c45258caa8f39959b7c4 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTChain.h @@ -25,6 +25,7 @@ namespace TrigConf { * @param data The data containing the HLT chain configuration */ Chain(const boost::property_tree::ptree & data); + Chain(const std::string & name, const boost::property_tree::ptree & data); /** Destructor */ virtual ~Chain(); @@ -60,7 +61,7 @@ namespace TrigConf { private: void update() override; - + void load(); }; } diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTMenu.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTMenu.h index da6df560576191319825e5731793528750d41225..628e64a4e117a4cd611ed095b54fbd53162d82df 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTMenu.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTMenu.h @@ -34,6 +34,11 @@ namespace TrigConf { /** Destructor */ ~HLTMenu(); + // class name + virtual std::string className() const override { + return "HLTMenu"; + } + /** Accessor to the number of HLT chains */ std::size_t size() const; @@ -67,6 +72,7 @@ namespace TrigConf { private: void update() override; + void load(); /** the supermasterkey */ unsigned int m_smk {0}; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTPrescalesSet.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTPrescalesSet.h index dc9305ad00dcd5985c5451895ba58eca02183458..544bf8f9e99ac9bc2d5dae2dbdcb554f7053b6d3 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTPrescalesSet.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/HLTPrescalesSet.h @@ -37,6 +37,11 @@ namespace TrigConf { /** Destructor */ ~HLTPrescalesSet(); + // class name + virtual std::string className() const override { + return "HLTPrescaleSet"; + } + /** number of HLT prescales */ std::size_t size() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h index 41cdf90ea8384ad020e444d5d1207e1bffe66e69..719e4ed293f383dc90870483347b2fcf45c376fc 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Menu.h @@ -40,6 +40,11 @@ namespace TrigConf { /** Destructor */ virtual ~L1Menu(); + // class name + virtual std::string className() const override { + return "L1Menu"; + } + /** Accessor to the menu version */ unsigned int version() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1PrescalesSet.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1PrescalesSet.h index 0303b2494937554047239445db10950a60f68317..041ec9e03419d321efa446bad76b967e6b9d6209 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1PrescalesSet.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1PrescalesSet.h @@ -40,6 +40,11 @@ namespace TrigConf { /** Destructor */ virtual ~L1PrescalesSet(); + // class name + virtual std::string className() const override { + return "L1PrescaleSet"; + } + /** number of L1 prescales */ std::size_t size() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h index 11991abdcda6607993ec3d95b595135eb166603c..203fc5117367d20f1bed70ae54e5015018a8aee3 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThrExtraInfo.h @@ -78,6 +78,7 @@ namespace TrigConf { L1ThrExtraInfo_JETLegacy(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_JETLegacy() = default; + virtual std::string className() const { return "L1ThrExtraInfo_JETLegacy"; } unsigned int jetScale() const { return 1000 / resolutionMeV(); } float ptMinToTopoLargeWindow() const { return m_ptMinToTopoLargeWindowMeV / 1000.0f; } float ptMinToTopoSmallWindow() const { return m_ptMinToTopoSmallWindowMeV / 1000.0f; } @@ -99,6 +100,7 @@ namespace TrigConf { L1ThrExtraInfo_XSLegacy(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_XSLegacy() = default; + virtual std::string className() const { return "L1ThrExtraInfo_XSLegacy"; } unsigned int xeMin() const { return m_xeMin; }; unsigned int xeMax() const { return m_xeMax; }; unsigned int teSqrtMin() const { return m_teSqrtMin; }; @@ -126,6 +128,7 @@ namespace TrigConf { L1ThrExtraInfo_eEMTAU(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_eEMTAU() = default; + virtual std::string className() const { return "L1ThrExtraInfo_eEMTAU"; } float ptMinToTopo() const { return m_ptMinToTopoMeV/1000.0f; } unsigned int ptMinToTopoMeV() const { return m_ptMinToTopoMeV; } unsigned int ptMinToTopoCounts() const { return energyInCounts( m_ptMinToTopoMeV, resolutionMeV() ); } @@ -145,6 +148,7 @@ namespace TrigConf { L1ThrExtraInfo_jJ(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_jJ() = default; + virtual std::string className() const { return "L1ThrExtraInfo_jJ"; } float ptMinToTopoLarge(int eta = 0) const { return ptMinToTopoLargeMeV(eta) / 1000.0f; } float ptMinToTopoSmall(int eta = 0) const { return ptMinToTopoSmallMeV(eta) / 1000.0f; } unsigned int ptMinToTopoLargeMeV(int eta = 0) const { return m_ptMinToTopoLargeMeV.at(eta); } @@ -167,6 +171,7 @@ namespace TrigConf { L1ThrExtraInfo_jTAU(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_jTAU() = default; + virtual std::string className() const { return "L1ThrExtraInfo_jTAU"; } unsigned int ptMinToTopo() const { return m_ptMinToTopo; } private: /** Update the internal members */ @@ -181,6 +186,7 @@ namespace TrigConf { L1ThrExtraInfo_gXE(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_gXE() = default; + virtual std::string className() const { return "L1ThrExtraInfo_gXE"; } private: /** Update the internal members */ void load(); @@ -193,6 +199,7 @@ namespace TrigConf { L1ThrExtraInfo_MU(const std::string & thrTypeName, const ptree & data) : L1ThrExtraInfoBase(thrTypeName, data) { load(); } virtual ~L1ThrExtraInfo_MU() = default; + virtual std::string className() const { return "L1ThrExtraInfo_MU"; } unsigned int rpcIdxForPt(unsigned int pt) const; unsigned int tgcIdxForPt(unsigned int pt) const; std::vector<unsigned int> knownRpcPtValues() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h index d407b6f88245617728e8230ced987a61fb4ce4e9..41418eeb3d15c5fc55f2a4cf83d58240619b3575 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1Threshold.h @@ -19,6 +19,8 @@ namespace TrigConf { L1Threshold_EM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } virtual ~L1Threshold_EM() = default; + // class name + virtual std::string className() const override { return "L1Threshold_EM"; } uint16_t isolationMask(int eta) const { return m_isolationMask.at(eta); } void print(std::ostream & os = std::cout) const override; protected: @@ -37,6 +39,7 @@ namespace TrigConf { L1Threshold_TAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } virtual ~L1Threshold_TAU() = default; + virtual std::string className() const override { return "L1Threshold_TAU"; } // access functions uint16_t isolationMask() const { return m_isolationMask; } protected: @@ -54,6 +57,7 @@ namespace TrigConf { L1Threshold_JET( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_JET() = default; + virtual std::string className() const override { return "L1Threshold_JET"; } }; class L1Threshold_XE final : public L1Threshold_Calo { @@ -61,6 +65,7 @@ namespace TrigConf { L1Threshold_XE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_XE() = default; + virtual std::string className() const override { return "L1Threshold_XE"; } }; class L1Threshold_XS final : public L1Threshold_Calo { @@ -68,6 +73,7 @@ namespace TrigConf { L1Threshold_XS( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_XS() = default; + virtual std::string className() const override { return "L1Threshold_XS"; } }; class L1Threshold_TE final : public L1Threshold_Calo { @@ -75,6 +81,7 @@ namespace TrigConf { L1Threshold_TE( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_TE() = default; + virtual std::string className() const override { return "L1Threshold_TE"; } }; /************************************ @@ -88,6 +95,7 @@ namespace TrigConf { L1Threshold_NIM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_NIM() = default; + virtual std::string className() const override { return "L1Threshold_NIM"; } }; class L1Threshold_internal final : public L1Threshold { @@ -95,6 +103,7 @@ namespace TrigConf { L1Threshold_internal( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold(name, type, m_extraInfo, data) {}; virtual ~L1Threshold_internal() = default; + virtual std::string className() const override { return "L1Threshold_internal"; } }; /************************************ @@ -107,6 +116,7 @@ namespace TrigConf { L1Threshold_eEM( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } virtual ~L1Threshold_eEM() = default; + virtual std::string className() const override { return "L1Threshold_eEM"; } // access functions Isolation::WP reta() const { return m_reta; } Isolation::WP rhad() const { return m_rhad; } @@ -129,6 +139,7 @@ namespace TrigConf { L1Threshold_eTAU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold_Calo(name, type, m_extraInfo, data) { load(); } virtual ~L1Threshold_eTAU() = default; + virtual std::string className() const override { return "L1Threshold_eTAU"; } protected: virtual void update() override { L1Threshold_Calo::update(); @@ -153,6 +164,7 @@ namespace TrigConf { L1Threshold_MU( const std::string & name, const std::string & type, std::weak_ptr<L1ThrExtraInfoBase> m_extraInfo, const ptree & data) : L1Threshold(name, type, m_extraInfo, data) { load(); } virtual ~L1Threshold_MU() = default; + virtual std::string className() const override { return "L1Threshold_MU"; } float thrValue(int eta = 0) const override; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h index f943f2d31122372909c3555f6061739fe71042cf..0e9c5088b8099d82169236e02ea6207acc4a2577 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1ThresholdBase.h @@ -89,14 +89,14 @@ namespace TrigConf { const std::string & thresholdTypeName() const; - bool hasExtraInfo() const; + bool hasExtraInfo( const std::string & key = "") const; unsigned int resolutionMeV() const { return m_resolutionMeV; } protected: - virtual void upload() { + virtual void update() override { load(); } std::map<std::string, DataStructure> m_extraInfo{}; diff --git a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoOutput.h b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoOutput.h index 4ecde5a0d142758091944f6587c9e2616c61cd39..379b5e0f5da6affb23389cdb9a9ca5e0c8115804 100644 --- a/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoOutput.h +++ b/Trigger/TrigConfiguration/TrigConfData/TrigConfData/L1TopoOutput.h @@ -28,6 +28,11 @@ namespace TrigConf { /** Destructor */ ~L1TopoOutput(); + // class name + virtual std::string className() const override { + return "L1TopoOutput"; + } + /** Accessor to the algorithm name */ const std::string & algName() const; diff --git a/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx b/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx index 0aef851fa6014d3544f82e91202ea553b186a366..bdfbbd44fee04617743dff5b389c58574a7651ed 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/DataStructure.cxx @@ -12,8 +12,13 @@ TrigConf::DataStructure::DataStructure() TrigConf::DataStructure::DataStructure(const ptree & data) : + DataStructure("",data) +{} + +TrigConf::DataStructure::DataStructure(const std::string & name, const ptree & data) : m_initialized(true), - m_dataPtr(&data) + m_dataPtr(&data), + m_name(name) {} @@ -55,7 +60,8 @@ void TrigConf::DataStructure::clear() { m_initialized = false; - update(); + m_dataSPtr = nullptr; + m_dataPtr = nullptr; } diff --git a/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx b/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx index a78b2a391a066bc2c69b090f778dc8e3ce6926fb..d85d27eb34da9b7924f2f6f2e467f0a8a80e985e 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/HLTChain.cxx @@ -10,15 +10,28 @@ TrigConf::Chain::Chain() TrigConf::Chain::Chain(const boost::property_tree::ptree & data) : DataStructure(data) { - update(); + load(); +} + +TrigConf::Chain::Chain(const std::string & name, const boost::property_tree::ptree & data) + : DataStructure(name, data) +{ + load(); } void TrigConf::Chain::update() +{ + load(); +} + +void +TrigConf::Chain::load() { if(! isInitialized() || empty() ) { return; } + m_name = getAttribute("name", true, m_name); } TrigConf::Chain::~Chain() diff --git a/Trigger/TrigConfiguration/TrigConfData/src/HLTMenu.cxx b/Trigger/TrigConfiguration/TrigConfData/src/HLTMenu.cxx index 37017087237557655c42c30b05464623ecfe49b0..42ad6b500233e775bb3ea79035108ed81407e4f0 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/HLTMenu.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/HLTMenu.cxx @@ -13,15 +13,20 @@ TrigConf::HLTMenu::HLTMenu() TrigConf::HLTMenu::HLTMenu(const boost::property_tree::ptree & data) : DataStructure(data) { - update(); + load(); } TrigConf::HLTMenu::~HLTMenu() {} - void TrigConf::HLTMenu::update() +{ + load(); +} + +void +TrigConf::HLTMenu::load() { if(! isInitialized() || empty() ) { return; @@ -49,7 +54,7 @@ TrigConf::HLTMenu::setSMK(unsigned int smk) { TrigConf::HLTMenu::const_iterator TrigConf::HLTMenu::begin() const { - return {data().get_child("chains"), 0, [](auto & x){auto chain = Chain(x.second); chain.setName(x.first); return chain; }}; + return {data().get_child("chains"), 0, [](auto & x){auto chain = Chain(x.first, x.second); return chain; }}; } TrigConf::HLTMenu::const_iterator @@ -64,12 +69,13 @@ std::vector<TrigConf::DataStructure> TrigConf::HLTMenu::streams() const { std::vector<DataStructure> strlist; - const auto & streams = data().get_child("streams"); - strlist.reserve(streams.size()); - - for( auto & strData : streams ) - strlist.emplace_back( strData.second ); - + auto streams = data().get_child_optional("streams"); + if(streams) { + strlist.reserve(streams->size()); + for( auto & strData : *streams ) { + strlist.emplace_back( strData.second ); + } + } return strlist; } @@ -94,7 +100,7 @@ void TrigConf::HLTMenu::printMenu(bool full) const { cout << "HLT menu '" << name() << "'" << endl; - cout << "Streams: " << data().get_child("streams").size() << endl; + cout << "Streams: " << streams().size() << endl; cout << "Chains: " << size() << endl; if(full) { int c(0); diff --git a/Trigger/TrigConfiguration/TrigConfData/src/HLTPrescalesSet.cxx b/Trigger/TrigConfiguration/TrigConfData/src/HLTPrescalesSet.cxx index 3886d1f821d3885729ceb8be87a93cc238c90e14..a770afb8abc15ee349908d2eada49e31914ca7d0 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/HLTPrescalesSet.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/HLTPrescalesSet.cxx @@ -13,8 +13,7 @@ TrigConf::HLTPrescalesSet::HLTPrescalesSet(const boost::property_tree::ptree & d update(); } -TrigConf::HLTPrescalesSet::~HLTPrescalesSet() -{} +TrigConf::HLTPrescalesSet::~HLTPrescalesSet() = default; void TrigConf::HLTPrescalesSet::update() diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx index 52d4542057ad154596517f8b1916042ab9037dec..27660fb9a7e0694fdb6f3367148b655a9a3e7ea8 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1Menu.cxx @@ -25,87 +25,109 @@ TrigConf::L1Menu::update() if(! isInitialized() || empty() ) { return; } - m_name = getAttribute("name"); - // thresholds - for( const std::string & path : {"thresholds", "thresholds.legacyCalo" } ) { - for( auto & thrByType : data().get_child( path ) ) { - const std::string & thrType = thrByType.first; - if (thrType == "legacyCalo") - continue; - - // first create the extraInfo object for this type of thresholds - auto extraInfo = m_thrExtraInfo.addExtraInfo(thrByType.first,thrByType.second); - - auto & v = m_thresholdsByType[thrType] = std::vector<std::shared_ptr<TrigConf::L1Threshold>>(); - if(thrType == "internal") { - for( auto & thr : data().get_child( path + ".internal.names") ) { - const std::string thrName = thr.second.data(); - v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) ); + try { + m_name = getAttribute("name"); + // thresholds + for( const std::string & path : {"thresholds", "thresholds.legacyCalo" } ) { + for( auto & thrByType : data().get_child( path ) ) { + const std::string & thrType = thrByType.first; + if (thrType == "legacyCalo") + continue; + + // first create the extraInfo object for this type of thresholds + auto extraInfo = m_thrExtraInfo.addExtraInfo(thrByType.first,thrByType.second); + + auto & v = m_thresholdsByType[thrType] = std::vector<std::shared_ptr<TrigConf::L1Threshold>>(); + if(thrType == "internal") { + for( auto & thr : data().get_child( path + ".internal.names") ) { + const std::string thrName = thr.second.data(); + v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) ); + } + } else { + for( auto & thr : data().get_child( path + "." + thrType + ".thresholds") ) { + const std::string thrName = thr.first; + v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) ); + } } - } else { - for( auto & thr : data().get_child( path + "." + thrType + ".thresholds") ) { - const std::string thrName = thr.first; - v.push_back( L1Threshold::createThreshold( thrName, thrType, extraInfo, thr.second ) ); + for( auto & thr : v ) { + m_thresholdsByName[ thr->name() ] = thr; } } - for( auto & thr : v ) { - m_thresholdsByName[ thr->name() ] = thr; - } - } } - - // boards - for( auto & board : data().get_child( "boards" ) ) { - m_boards.emplace( std::piecewise_construct, - std::forward_as_tuple(board.first), - std::forward_as_tuple(board.first, board.second) ); + catch(std::exception & ex) { + std::cerr << "ERROR: problem when building L1 menu structure (thresholds). " << ex.what() << std::endl; + throw; } - // connectors - for( auto & conn : data().get_child( "connectors" ) ) { - auto res = m_connectors.emplace( std::piecewise_construct, - std::forward_as_tuple(conn.first), - std::forward_as_tuple(conn.first, conn.second) ); - - for( auto & tl : res.first->second.triggerLineNames() ) { - m_threshold2ConnectorName.emplace( std::piecewise_construct, - std::forward_as_tuple(tl), - std::forward_as_tuple(conn.first)); + try { + // boards + for( auto & board : data().get_child( "boards" ) ) { + m_boards.emplace( std::piecewise_construct, + std::forward_as_tuple(board.first), + std::forward_as_tuple(board.first, board.second) ); } } + catch(std::exception & ex) { + std::cerr << "ERROR: problem when building L1 menu structure (boards). " << ex.what() << std::endl; + throw; + } - // algorithms - for( const std::string & algoCategory : { "TOPO", "MULTTOPO", "MUTOPO", "R2TOPO" } ) { - auto & v = m_algorithmsByCategory[algoCategory] = std::vector<TrigConf::L1TopoAlgorithm>(); - if(algoCategory == "MULTTOPO") { - for( auto & alg : data().get_child( "topoAlgorithms." + algoCategory + ".multiplicityAlgorithms" ) ) { - v.emplace_back( alg.first, L1TopoAlgorithm::AlgorithmType::MULTIPLICITY, algoCategory, alg.second ); - } - } else { - for( L1TopoAlgorithm::AlgorithmType algoType : { L1TopoAlgorithm::AlgorithmType::DECISION, L1TopoAlgorithm::AlgorithmType::SORTING } ) { - std::string subpath = "topoAlgorithms." + algoCategory + (algoType==L1TopoAlgorithm::AlgorithmType::DECISION ? ".decisionAlgorithms" : ".sortingAlgorithms" ); - for( auto & algorithm : data().get_child( subpath ) ) { - v.emplace_back( algorithm.first, algoType, algoCategory, algorithm.second ); - } + try { + // connectors + for( auto & conn : data().get_child( "connectors" ) ) { + auto res = m_connectors.emplace( std::piecewise_construct, + std::forward_as_tuple(conn.first), + std::forward_as_tuple(conn.first, conn.second) ); + for( auto & tl : res.first->second.triggerLineNames() ) { + m_threshold2ConnectorName.emplace( std::piecewise_construct, + std::forward_as_tuple(tl), + std::forward_as_tuple(conn.first)); } } - for( auto & algo : v ) { - if( m_algorithmsByName[algoCategory].count(algo.name()) > 0 ) { - std::cerr << "ERROR : Topo algorithm with name " << algo.name() << " and of type " << algoCategory << " already exists" << std::endl; - throw std::runtime_error("Found duplicate topo algorithm name " + algo.name() + " of type " + algoCategory); + } + catch(std::exception & ex) { + std::cerr << "ERROR: problem when building L1 menu structure (connectors). " << ex.what() << std::endl; + throw; + } + + try { + // algorithms + for( const std::string & algoCategory : { "TOPO", "MULTTOPO", "MUTOPO", "R2TOPO" } ) { + auto & v = m_algorithmsByCategory[algoCategory] = std::vector<TrigConf::L1TopoAlgorithm>(); + if(algoCategory == "MULTTOPO") { + for( auto & alg : data().get_child( "topoAlgorithms." + algoCategory + ".multiplicityAlgorithms" ) ) { + v.emplace_back( alg.first, L1TopoAlgorithm::AlgorithmType::MULTIPLICITY, algoCategory, alg.second ); + } + } else { + for( L1TopoAlgorithm::AlgorithmType algoType : { L1TopoAlgorithm::AlgorithmType::DECISION, L1TopoAlgorithm::AlgorithmType::SORTING } ) { + std::string subpath = "topoAlgorithms." + algoCategory + (algoType==L1TopoAlgorithm::AlgorithmType::DECISION ? ".decisionAlgorithms" : ".sortingAlgorithms" ); + for( auto & algorithm : data().get_child( subpath ) ) { + v.emplace_back( algorithm.first, algoType, algoCategory, algorithm.second ); + } + } } - m_algorithmsByName[ algoCategory ][ algo.name() ] = & algo; - for( const std::string & output : algo.outputs() ) { - if( m_algorithmsByOutput[algoCategory].count(output) > 0 ) { - std::cerr << "ERROR : Topo algorithm output " << output << " already exists" << std::endl; - throw std::runtime_error("Found duplicate topo algorithm output " + output + " of type " + algoCategory); + for( auto & algo : v ) { + if( m_algorithmsByName[algoCategory].count(algo.name()) > 0 ) { + std::cerr << "ERROR : Topo algorithm with name " << algo.name() << " and of type " << algoCategory << " already exists" << std::endl; + throw std::runtime_error("Found duplicate topo algorithm name " + algo.name() + " of type " + algoCategory); + } + m_algorithmsByName[ algoCategory ][ algo.name() ] = & algo; + for( const std::string & output : algo.outputs() ) { + if( m_algorithmsByOutput[algoCategory].count(output) > 0 ) { + std::cerr << "ERROR : Topo algorithm output " << output << " already exists" << std::endl; + throw std::runtime_error("Found duplicate topo algorithm output " + output + " of type " + algoCategory); + } + m_algorithmsByOutput[algoCategory][output] = & algo; } - m_algorithmsByOutput[algoCategory][output] = & algo; } } } + catch(std::exception & ex) { + std::cerr << "ERROR: problem when building L1 menu structure (algorithms). " << ex.what() << std::endl; + throw; + } } unsigned int @@ -379,6 +401,12 @@ TrigConf::L1Menu::printMenu(bool full) const { cout << "L1 menu '" << name() << "'" << endl; cout << "Items: " << size() << endl; + if(full) { + int c(0); + for(const L1Item & item : *this ) { + cout << " " << c++ << ": " << item.name() << endl; + } + } cout << "Thresholds: " << thresholds().size() << "(of " << thresholdTypes().size() << " different types)" << endl; if(full) { int c(0); diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx index ef30d09c6cb2e140732e99e9a2c88584f0a8333c..03e03f08807aedb6837b2e0c6946cb8d5b530ff8 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1ThrExtraInfo.cxx @@ -40,10 +40,16 @@ TrigConf::L1ThrExtraInfo::createExtraInfo(const std::string & thrTypeName, const std::weak_ptr<TrigConf::L1ThrExtraInfoBase> TrigConf::L1ThrExtraInfo::addExtraInfo(const std::string & thrTypeName, const boost::property_tree::ptree & data) { - if( auto extraInfo = L1ThrExtraInfo::createExtraInfo( thrTypeName, data) ) { - auto success = m_thrExtraInfo.emplace(thrTypeName, std::shared_ptr<TrigConf::L1ThrExtraInfoBase>(std::move(extraInfo))); - return std::weak_ptr<TrigConf::L1ThrExtraInfoBase>( success.first->second ); - }; + try { + if( auto extraInfo = L1ThrExtraInfo::createExtraInfo( thrTypeName, data) ) { + auto success = m_thrExtraInfo.emplace(thrTypeName, std::shared_ptr<TrigConf::L1ThrExtraInfoBase>(std::move(extraInfo))); + return std::weak_ptr<TrigConf::L1ThrExtraInfoBase>( success.first->second ); + } + } + catch(std::exception & ex) { + std::cerr << "L1ThrExtraInfo::addExtraInfo: exception occured when building extra info for " << thrTypeName << std::endl; + throw; + } return std::weak_ptr<TrigConf::L1ThrExtraInfoBase>( m_emptyInfo ); } @@ -153,13 +159,15 @@ TrigConf::L1ThrExtraInfo_EMTAULegacy::load() void TrigConf::L1ThrExtraInfo_XSLegacy::load() { - auto sig = m_extraInfo["significance"]; - m_xeMin = sig.getAttribute<unsigned int>("xeMin"); - m_xeMax = sig.getAttribute<unsigned int>("xeMax"); - m_teSqrtMin = sig.getAttribute<unsigned int>("teSqrtMin"); - m_teSqrtMax = sig.getAttribute<unsigned int>("teSqrtMax"); - m_xsSigmaScale = sig.getAttribute<unsigned int>("xsSigmaScale"); - m_xsSigmaOffset = sig.getAttribute<unsigned int>("xsSigmaOffset"); + if( hasExtraInfo("significance") ) { + auto & sig = m_extraInfo["significance"]; + m_xeMin = sig.getAttribute<unsigned int>("xeMin"); + m_xeMax = sig.getAttribute<unsigned int>("xeMax"); + m_teSqrtMin = sig.getAttribute<unsigned int>("teSqrtMin"); + m_teSqrtMax = sig.getAttribute<unsigned int>("teSqrtMax"); + m_xsSigmaScale = sig.getAttribute<unsigned int>("xsSigmaScale"); + m_xsSigmaOffset = sig.getAttribute<unsigned int>("xsSigmaOffset"); + } } @@ -213,9 +221,9 @@ TrigConf::L1ThrExtraInfo_eEMTAU::load() auto wp = (y.first == "Loose") ? Isolation::WP::LOOSE : ( (y.first == "Medium") ? Isolation::WP::MEDIUM : Isolation::WP::TIGHT ); auto & iso = m_isolation.emplace(wp, string("eEM_WP_" + y.first)).first->second; for(auto & c : y.second ) { - auto etamin = c.second.get_child("etamin").get_value<unsigned int>(); - auto etamax = c.second.get_child("etamax").get_value<unsigned int>(); - auto priority = c.second.get_optional<unsigned int>("priority").get_value_or(0); + int etamin = c.second.get_optional<int>("etamin").get_value_or(-49); + int etamax = c.second.get_optional<int>("etamax").get_value_or(49); + unsigned int priority = c.second.get_optional<unsigned int>("priority").get_value_or(0); iso.addRangeValue(Isolation(c.second), etamin, etamax, priority, /*symmetric=*/ false); } } diff --git a/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx b/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx index 9afe50ca08dd85e521f5272c7dc8cd8c5431c77a..d279f1c7d894aac9d5a7167dab72036657770bff 100644 --- a/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx +++ b/Trigger/TrigConfiguration/TrigConfData/src/L1ThresholdBase.cxx @@ -149,9 +149,12 @@ TrigConf::L1ThrExtraInfoBase::thresholdTypeName() const } bool -TrigConf::L1ThrExtraInfoBase::hasExtraInfo() const +TrigConf::L1ThrExtraInfoBase::hasExtraInfo(const std::string & key) const { - return m_extraInfo.size()>0; + if( key.empty() ) { + return m_extraInfo.size()>0; + } + return m_extraInfo.count(key)>0; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h new file mode 100644 index 0000000000000000000000000000000000000000..51152743c418715da01b01f935fd84afd8445dee --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/Exceptions.h @@ -0,0 +1,59 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef TRIGCONFIO_TRIGCONFIOEXCEPTIONS_H +#define TRIGCONFIO_TRIGCONFIOEXCEPTIONS_H + +#include <exception> +#include <string> + +namespace TrigConf { + + class IOException : public std::exception { + public: + IOException(std::string msg); + virtual const char* what() const noexcept; + private: + const std::string m_msg; + }; + + class QueryException : public IOException { + public: + QueryException(std::string msg) : IOException(std::move(msg)) {} + }; + + class NoQueryException : public IOException { + public: + NoQueryException(std::string msg) : IOException(std::move(msg)) {} + }; + + class NoSMKException : public IOException { + public: + NoSMKException(std::string msg) : IOException(std::move(msg)) {} + }; + + class NoL1PSKException : public IOException { + public: + NoL1PSKException(std::string msg) : IOException(std::move(msg)) {} + }; + + class NoHLTPSKException : public IOException { + public: + NoHLTPSKException(std::string msg) : IOException(std::move(msg)) {} + }; + + class NoBGSKException : public IOException { + public: + NoBGSKException(std::string msg) : IOException(std::move(msg)) {} + }; + + class ParsingException : public IOException { + public: + ParsingException(std::string msg) : IOException(std::move(msg)) {} + }; + + +} + +#endif diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBHLTPrescalesSetLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBHLTPrescalesSetLoader.h index 5460a998daa2a03dd311ab098b3ff525ce40bad4..bcbc99e31845de37853a8e40b9e22d95bb3a859f 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBHLTPrescalesSetLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBHLTPrescalesSetLoader.h @@ -37,6 +37,8 @@ namespace TrigConf { bool loadHLTPrescales ( unsigned int hltpsk, HLTPrescalesSet & hltpss, const std::string & outFileName = "") const; + private: + std::map<size_t, QueryDefinition> m_queries; }; diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBJobOptionsLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBJobOptionsLoader.h index 29c7a1835279cb1d98bf509aa6a095bbdf91e418..0ffc638b96533419fbcd0290f314398c589c3b6f 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBJobOptionsLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBJobOptionsLoader.h @@ -18,6 +18,8 @@ #include "TrigConfIO/TrigDBLoader.h" +#include <map> + namespace TrigConf { /** @@ -49,6 +51,8 @@ namespace TrigConf { bool loadJobOptions ( unsigned int smk, DataStructure & jobOptions, const std::string & outFileName = "") const; + private: + std::map<size_t, QueryDefinition> m_queries; }; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1BunchGroupSetLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1BunchGroupSetLoader.h index 54266e5d2ce455495b40342c251eddbe9e61b869..de51b3049057a4580054bb9124fdafb2f79d05a9 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1BunchGroupSetLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1BunchGroupSetLoader.h @@ -39,7 +39,9 @@ namespace TrigConf { bool loadBunchGroupSet ( unsigned int bgsk, L1BunchGroupSet & bgs, const std::string & outFileName = "") const; - + + private: + std::map<size_t, QueryDefinition> m_queries; }; diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1PrescalesSetLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1PrescalesSetLoader.h index fe94ba8cacd280c18eaae9312e5ab2b61347cea8..b6c10a0608699263ffa804a52c400fb85a43e88d 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1PrescalesSetLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBL1PrescalesSetLoader.h @@ -40,6 +40,8 @@ namespace TrigConf { L1PrescalesSet & l1pss, const std::string & outFileName = "") const; + private: + std::map<size_t, QueryDefinition> m_queries; }; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBLoader.h index 4d675a88571e2ee7a8f114a70ceb46dcd7d8a9f1..3c4ad97b54ce2b77f76cbdac6f80638a21d6300d 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBLoader.h @@ -13,8 +13,10 @@ #define TRIGCONFIO_TRIGDBLOADER_H #include "TrigConfBase/TrigConfMessaging.h" +#include "TrigConfIO/Exceptions.h" #include <memory> +#include <map> namespace coral { class ISessionProxy; @@ -23,6 +25,8 @@ namespace coral { namespace TrigConf { + class QueryDefinition; + /** * @brief Loader of trigger configurations from Json files */ @@ -35,6 +39,12 @@ namespace TrigConf { /** Destructor */ virtual ~TrigDBLoader(); + /**@brief access to TriggerDB schema version + goes to the trigger db for the first call, every following call it returns the cached value + @return version of the DB schema (0 - not yet checked, >0 - schema version) + */ + size_t schemaVersion(coral::ISessionProxy* session) const; + /** write data blob into file This can be used to write the DB content to file without going through a ptree */ @@ -49,14 +59,16 @@ namespace TrigConf { /** @brief create (if needed) DB session and return the session proxy */ std::unique_ptr<coral::ISessionProxy> createDBSession() const; + QueryDefinition getQueryDefinition(coral::ISessionProxy* session, const std::map<size_t, QueryDefinition> & queries) const; + private: // private variables - std::string m_connection {"TRIGGERDB"}; - int m_retrialPeriod {0}; - int m_retrialTimeout {0}; - int m_connectionTimeout {0}; - + std::string m_connection {"TRIGGERDB"}; + int m_retrialPeriod {0}; + int m_retrialTimeout {0}; + int m_connectionTimeout {0}; + mutable size_t m_schemaVersion {0}; // version of the DB schema (0 - not yet checked, >0 - schema version) }; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBMenuLoader.h b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBMenuLoader.h index 2740ec5da98ef8b198135c3b420e14bbfa9aa7f7..91272895f40d018e5968524af0cf26b5a2b75045 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBMenuLoader.h +++ b/Trigger/TrigConfiguration/TrigConfIO/TrigConfIO/TrigDBMenuLoader.h @@ -22,6 +22,8 @@ namespace TrigConf { + class QueryDefinition; + /** * @brief Loader of trigger menu configurations from the database */ @@ -75,7 +77,9 @@ namespace TrigConf { bool loadHLTMenu ( unsigned int smk, HLTMenu & hltmenu, const std::string & outFileName = "") const; - + private: + std::map<size_t, QueryDefinition> m_l1queries; + std::map<size_t, QueryDefinition> m_hltqueries; }; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/Exceptions.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/Exceptions.cxx new file mode 100644 index 0000000000000000000000000000000000000000..cbe24b5cb93c994805d38855d389b053fdfee48b --- /dev/null +++ b/Trigger/TrigConfiguration/TrigConfIO/src/Exceptions.cxx @@ -0,0 +1,10 @@ +#include "TrigConfIO/Exceptions.h" + +TrigConf::IOException::IOException(std::string msg) : m_msg(std::move(msg)) +{} + +const char* +TrigConf::IOException::what() const noexcept +{ + return m_msg.c_str(); +} diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileLoader.cxx index 0682c7ffeb096b1dc94fdee46d45318d1f924c7b..9b1935752f6a9055b4eddc9e835aaca53ef26c75 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/JsonFileLoader.cxx @@ -53,7 +53,6 @@ TrigConf::JsonFileLoader::findFile(const std::string & filename) const { std::string fnCopy(filename); char *token = std::strtok( &*fnCopy.begin(), ":"); while ( token != nullptr ) { - std::cout << token << '\n'; std::filesystem::path fullname(token); fullname /= filename; if( std::filesystem::exists( fullname ) ) { diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBHLTPrescalesSetLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBHLTPrescalesSetLoader.cxx index f6cc338af02e60edb3a0b69a434d7209c0981df1..388646f0b913def4323b1f2dbf7f242e84a95e67 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBHLTPrescalesSetLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBHLTPrescalesSetLoader.cxx @@ -5,66 +5,59 @@ TrigConf::TrigDBHLTPrescalesSetLoader::TrigDBHLTPrescalesSetLoader(const std::string & connection) : TrigDBLoader("TrigDBHLTPrescalesSetLoader", connection) -{} - -TrigConf::TrigDBHLTPrescalesSetLoader::~TrigDBHLTPrescalesSetLoader() -{} - -namespace { - std::vector<TrigConf::QueryDefinition> - getQueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - { // query for table dev1 and dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "HLT_PRESCALE_SET" ); - // bind vars - q.extendBinding<int>("key"); - // conditions - q.extendCondition("HPS_ID = :key"); - // attributes - q.extendOutput<coral::Blob>( "HPS_DATA" ); - // the field with the data - q.setDataName("HPS_DATA"); - } - return queries; +{ + { // query for all schema versions + auto & q = m_queries[1]; + // tables + q.addToTableList ( "HLT_PRESCALE_SET" ); + // bind vars + q.extendBinding<int>("key"); + // conditions + q.extendCondition("HPS_ID = :key"); + // attributes + q.extendOutput<coral::Blob>( "HPS_DATA" ); + // the field with the data + q.setDataName("HPS_DATA"); } } +TrigConf::TrigDBHLTPrescalesSetLoader::~TrigDBHLTPrescalesSetLoader() = default; + bool TrigConf::TrigDBHLTPrescalesSetLoader::loadHLTPrescales ( unsigned int psk, TrigConf::HLTPrescalesSet & pss, const std::string & outFileName ) const { - auto session = createDBSession(); - session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getQueryDefinitions() ) { + boost::property_tree::ptree pt; + { + auto session = createDBSession(); + session->transaction().start( /*bool readonly=*/ true); + QueryDefinition qdef = getQueryDefinition(session.get(), m_queries); try { qdef.setBoundValue<int>("key", psk); auto q = qdef.createQuery( session.get() ); auto & cursor = q->execute(); - querySuccess = true; if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBHLTPrescalesSetLoader: HLT presale key " + std::to_string(psk) + " not available" ); + TRG_MSG_ERROR("Tried reading HLT prescales, but HLT prescale key " << psk << " is not available" ); + throw TrigConf::NoHLTPSKException("TrigDBHLTPrescalesSetLoader: HLT PSK " + std::to_string(psk) + " not available"); } const coral::AttributeList& row = cursor.currentRow(); const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); writeRawFile( dataBlob, outFileName ); - boost::property_tree::ptree pt; blobToPtree( dataBlob, pt ); - pss.setData(std::move(pt)); - pss.setPSK(psk); - break; } catch(coral::QueryException & ex) { - continue; + TRG_MSG_ERROR("When reading HLT prescales for HLT PSK " << psk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TrigDBHLTPrescalesSetLoader: " + std::string(ex.what())); } } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the HLT prescale set data from the database, all query attempts failed"); - return false; + try { + pss.setData(std::move(pt)); + pss.setPSK(psk); + } + catch(std::exception & ex) { + pss.clear(); + TRG_MSG_ERROR("When reading HLT prescales for HLT PSK " << psk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBHLTPrescalesSetLoader: parsing error " + std::string(ex.what())); } - return true; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBJobOptionsLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBJobOptionsLoader.cxx index d922546e23b4bc771e792a42e0c760b8338ed310..baab7381ff78aae4482b34e9aa6f68075c91e51b 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBJobOptionsLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBJobOptionsLoader.cxx @@ -7,58 +7,44 @@ TrigConf::TrigDBJobOptionsLoader::TrigDBJobOptionsLoader(const std::string & connection) : TrigDBLoader("TrigDBJobOptionsLoader", connection) -{} - -TrigConf::TrigDBJobOptionsLoader::~TrigDBJobOptionsLoader() -{} - - -namespace { - std::vector<TrigConf::QueryDefinition> - getQueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - - { // query for table dev1 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "HLT_JOBOPTIONS", "HJO" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition("AND HJO.HJO_ID=SMT.SMT_HLT_JOBOPTIONS_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_HLT_JOBOPTIONS_ID" ); - q.extendOutput<coral::Blob>( "HJO.HJO_DATA" ); - // the field with the data - q.setDataName("HJO.HJO_DATA"); - } - - { // query for table dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "JO_MASTER_TABLE", "JOMT" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition(" AND SMT.SMT_JO_MASTER_TABLE_ID = JOMT.JO_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_JO_MASTER_TABLE_ID" ); - q.extendOutput<coral::Blob>( "JOMT.JO_CONTENT" ); - // the field with the data - q.setDataName("JOMT.JO_CONTENT"); - } - return queries; +{ + { // query for schema version 1 + auto & q = m_queries[1]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "JO_MASTER_TABLE", "JOMT" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition(" AND SMT.SMT_JO_MASTER_TABLE_ID = JOMT.JO_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_JO_MASTER_TABLE_ID" ); + q.extendOutput<coral::Blob>( "JOMT.JO_CONTENT" ); + // the field with the data + q.setDataName("JOMT.JO_CONTENT"); + } + { // query for schema version 2 + auto & q = m_queries[2]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "HLT_JOBOPTIONS", "HJO" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition("AND HJO.HJO_ID=SMT.SMT_HLT_JOBOPTIONS_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_HLT_JOBOPTIONS_ID" ); + q.extendOutput<coral::Blob>( "HJO.HJO_DATA" ); + // the field with the data + q.setDataName("HJO.HJO_DATA"); } } +TrigConf::TrigDBJobOptionsLoader::~TrigDBJobOptionsLoader() = default; bool TrigConf::TrigDBJobOptionsLoader::loadJobOptions ( unsigned int smk, @@ -67,34 +53,23 @@ TrigConf::TrigDBJobOptionsLoader::loadJobOptions ( unsigned int smk, { auto session = createDBSession(); session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getQueryDefinitions() ) { - try { - qdef.setBoundValue<int>("smk", smk); - auto q = qdef.createQuery( session.get() ); - auto & cursor = q->execute(); - querySuccess = true; - if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBMenuLoader: SuperMasterKey not available" ); - } - const coral::AttributeList& row = cursor.currentRow(); - const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); - writeRawFile( dataBlob, outFileName ); - blobToPtree( dataBlob, jobOptions ); - break; - } - catch(coral::QueryException & ex) { - TRG_MSG_INFO("Trying next query after coral::QueryException caught ( " << ex.what() <<" )" ); - continue; - } - catch(std::exception & ex) { - TRG_MSG_INFO("Trying next query after std::exception caught ( " << ex.what() <<" )" ); - continue; + QueryDefinition qdef = getQueryDefinition(session.get(), m_queries); + try { + qdef.setBoundValue<int>("smk", smk); + auto q = qdef.createQuery( session.get() ); + auto & cursor = q->execute(); + if ( ! cursor.next() ) { + TRG_MSG_ERROR("Tried reading HLT job options, but SuperMasterKey " << smk << " is not available" ); + throw TrigConf::NoSMKException("TrigDBJobOptionsLoader: SMK " + std::to_string(smk) + " not available"); } + const coral::AttributeList& row = cursor.currentRow(); + const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); + writeRawFile( dataBlob, outFileName ); + blobToPtree( dataBlob, jobOptions ); } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the HLT JobOptions data from the database, all query attempts failed"); - return false; + catch(coral::QueryException & ex) { + TRG_MSG_ERROR("When reading HLT job options for SMK " << smk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TrigDBJobOptionsLoader: " + std::string(ex.what())); } return true; } @@ -107,15 +82,15 @@ TrigConf::TrigDBJobOptionsLoader::loadJobOptions ( unsigned int smk, { boost::property_tree::ptree ptJobOptions; - - bool success = loadJobOptions( smk, ptJobOptions, outFileName ); - - if(!success) - return false; - - if( ! ptJobOptions.empty() ) + loadJobOptions( smk, ptJobOptions, outFileName ); + try { jobOptions.setData(std::move(ptJobOptions)); - + } + catch(std::exception & ex) { + jobOptions.clear(); + TRG_MSG_ERROR("When reading HLT job options for SMK " << smk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBJobOptionsLoader: parsing error " + std::string(ex.what())); + } return true; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1BunchGroupSetLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1BunchGroupSetLoader.cxx index 5837ee23a8672dbd29c920676575f5dd43c7f639..f8a14afa4f37f16f102626ac5588908af718a27c 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1BunchGroupSetLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1BunchGroupSetLoader.cxx @@ -5,66 +5,60 @@ TrigConf::TrigDBL1BunchGroupSetLoader::TrigDBL1BunchGroupSetLoader(const std::string & connection) : TrigDBLoader("TrigDBL1BunchGroupSetLoader", connection) -{} - -TrigConf::TrigDBL1BunchGroupSetLoader::~TrigDBL1BunchGroupSetLoader() -{} - -namespace { - std::vector<TrigConf::QueryDefinition> - getQueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - { // query for table dev1 and dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "L1_BUNCH_GROUP_SET" ); - // bind vars - q.extendBinding<int>("key"); - // conditions - q.extendCondition("L1BGS_ID = :key"); - // attributes - q.extendOutput<coral::Blob>( "L1BGS_DATA" ); - // the field with the data - q.setDataName("L1BGS_DATA"); - } - return queries; +{ + { // query for all schema versions + auto & q = m_queries[1]; + // tables + q.addToTableList ( "L1_BUNCH_GROUP_SET" ); + // bind vars + q.extendBinding<int>("key"); + // conditions + q.extendCondition("L1BGS_ID = :key"); + // attributes + q.extendOutput<coral::Blob>( "L1BGS_DATA" ); + // the field with the data + q.setDataName("L1BGS_DATA"); } } +TrigConf::TrigDBL1BunchGroupSetLoader::~TrigDBL1BunchGroupSetLoader() = default; + bool TrigConf::TrigDBL1BunchGroupSetLoader::loadBunchGroupSet ( unsigned int bgsk, TrigConf::L1BunchGroupSet & bgs, const std::string & outFileName ) const { - auto session = createDBSession(); - session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getQueryDefinitions() ) { + boost::property_tree::ptree pt; + { + auto session = createDBSession(); + session->transaction().start( /*bool readonly=*/ true); + QueryDefinition qdef = getQueryDefinition(session.get(), m_queries); try { qdef.setBoundValue<int>("key", bgsk); auto q = qdef.createQuery( session.get() ); auto & cursor = q->execute(); - querySuccess = true; if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBL1BunchGroupSetLoader: L1 bunchgroup key " + std::to_string(bgsk) + " not available" ); + TRG_MSG_ERROR("Tried reading L1 bunchgroup set, but L1 bunchgroup key " << bgsk << " is not available" ); + throw TrigConf::NoBGSKException("TrigDBL1BunchGroupSetLoader: L1 bunchgroup key " + std::to_string(bgsk) + " not available"); } const coral::AttributeList& row = cursor.currentRow(); const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); writeRawFile( dataBlob, outFileName ); - boost::property_tree::ptree pt; blobToPtree( dataBlob, pt ); - bgs.setData(std::move(pt)); - bgs.setBGSK(bgsk); - break; } catch(coral::QueryException & ex) { - continue; + TRG_MSG_ERROR("When reading L1 bunchgroup set for L1 bunchgroup key " << bgsk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TrigDBL1BunchGroupSetLoader: " + std::string(ex.what())); } } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the L1 bunchgroup set data from the database, all query attempts failed"); - return false; + try { + bgs.setData(std::move(pt)); + bgs.setBGSK(bgsk); + } + catch(std::exception & ex) { + bgs.clear(); + TRG_MSG_ERROR("When reading L1 bunchgroup set for L1 BGSK " << bgsk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBL1BunchGroupSetLoader: parsing error " + std::string(ex.what())); } return true; diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1PrescalesSetLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1PrescalesSetLoader.cxx index b3c5d8616dac495388f0ed2857b8a0fb2ddac58b..f6cadaa254a2b92d0ec43c902415adb378289263 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1PrescalesSetLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBL1PrescalesSetLoader.cxx @@ -5,65 +5,59 @@ TrigConf::TrigDBL1PrescalesSetLoader::TrigDBL1PrescalesSetLoader(const std::string & connection) : TrigDBLoader("TrigDBL1PrescalesSetLoader", connection) -{} - -TrigConf::TrigDBL1PrescalesSetLoader::~TrigDBL1PrescalesSetLoader() -{} - -namespace { - std::vector<TrigConf::QueryDefinition> - getQueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - { // query for table dev1 and dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "L1_PRESCALE_SET" ); - // bind vars - q.extendBinding<int>("key"); - // conditions - q.extendCondition("L1PS_ID = :key"); - // attributes - q.extendOutput<coral::Blob>( "L1PS_DATA" ); - // the field with the data - q.setDataName("L1PS_DATA"); - } - return queries; +{ + { // query for all schema versions + auto & q = m_queries[1]; + // tables + q.addToTableList ( "L1_PRESCALE_SET" ); + // bind vars + q.extendBinding<int>("key"); + // conditions + q.extendCondition("L1PS_ID = :key"); + // attributes + q.extendOutput<coral::Blob>( "L1PS_DATA" ); + // the field with the data + q.setDataName("L1PS_DATA"); } } +TrigConf::TrigDBL1PrescalesSetLoader::~TrigDBL1PrescalesSetLoader() = default; + bool TrigConf::TrigDBL1PrescalesSetLoader::loadL1Prescales ( unsigned int psk, TrigConf::L1PrescalesSet & pss, const std::string & outFileName ) const { - auto session = createDBSession(); - session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getQueryDefinitions() ) { + boost::property_tree::ptree pt; + { + auto session = createDBSession(); + session->transaction().start( /*bool readonly=*/ true); + QueryDefinition qdef = getQueryDefinition(session.get(), m_queries); try { qdef.setBoundValue<int>("key", psk); auto q = qdef.createQuery( session.get() ); auto & cursor = q->execute(); - querySuccess = true; if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBL1PrescalesSetLoader: L1 presale key " + std::to_string(psk) + " not available" ); + TRG_MSG_ERROR("Tried reading L1 prescales, but L1 prescale key " << psk << " is not available" ); + throw TrigConf::NoL1PSKException("TrigDBL1PrescalesSetLoader: L1 PSK " + std::to_string(psk) + " not available"); } const coral::AttributeList& row = cursor.currentRow(); const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); writeRawFile( dataBlob, outFileName ); - boost::property_tree::ptree pt; blobToPtree( dataBlob, pt ); - pss.setData(std::move(pt)); - pss.setPSK(psk); - break; } catch(coral::QueryException & ex) { - continue; + TRG_MSG_ERROR("When reading L1 prescales for L1 PSK " << psk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TrigDBL1PrescalesSetLoader: " + std::string(ex.what())); } } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the L1 prescale set data data from the database, all query attempts failed"); - return false; + try { + pss.setData(std::move(pt)); + pss.setPSK(psk); + } + catch(std::exception & ex) { + pss.clear(); + TRG_MSG_ERROR("When reading L1 prescales for L1 PSK " << psk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBL1PrescalesSetLoader: parsing error " + std::string(ex.what())); } return true; diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBLoader.cxx index 9a77fc2e14df8c43950c510a7a6c4be74bcb669d..f3c1f8607d778bd343debdbf0e612e0e92a4cbb3 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBLoader.cxx @@ -2,6 +2,7 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ +#include "./TrigDBHelper.h" #include "TrigConfIO/TrigDBLoader.h" #include "CoralBase/Exception.h" @@ -10,9 +11,9 @@ #include "RelationalAccess/ConnectionService.h" #include "RelationalAccess/IConnectionServiceConfiguration.h" #include "RelationalAccess/ISessionProxy.h" +#include "RelationalAccess/ISchema.h" #include "boost/property_tree/ptree.hpp" - #include <fstream> using ptree = boost::property_tree::ptree; @@ -26,6 +27,60 @@ TrigConf::TrigDBLoader::TrigDBLoader(const std::string & loaderName, const std:: TrigConf::TrigDBLoader::~TrigDBLoader() {} +namespace { + bool startswith(const std::string& str, const std::string& sub) { + if(str.size()<sub.size()) + return false; + return (str.compare(0,sub.size(),sub) == 0); + } +} + +size_t +TrigConf::TrigDBLoader::schemaVersion(coral::ISessionProxy* session) const { + + static const std::string versionTagPrefix("Trigger-Run3-Schema-v"); + + // if schema version has been set, then return it + if(m_schemaVersion>0) { + TRG_MSG_INFO("TriggerDB schema version: " << m_schemaVersion); + return m_schemaVersion; + } + + // if database has no schema version, then we return 0 + if(! session->nominalSchema().existsTable("TRIGGER_SCHEMA") ) { + throw std::runtime_error( "Trigger schema has no schema version table" ); + } + + TrigConf::QueryDefinition qdef; + // tables + qdef.addToTableList ( "TRIGGER_SCHEMA" ); + // attributes + qdef.extendOutput<std::string>( "TS_TAG" ); + + auto query = qdef.createQuery( session ); + auto & cursor = query->execute(); + if ( ! cursor.next() ) { + throw std::runtime_error( "Trigger schema has schema version table but it is empty" ); + } + + const coral::AttributeList& row = cursor.currentRow(); + std::string versionTag = row["TS_TAG"].data<std::string>(); + if( ! startswith(versionTag, versionTagPrefix)) { + throw std::runtime_error( "Tag format error: Trigger schema version tag " + versionTag + "does not start with " + versionTagPrefix); + } + + std::string vstr = versionTag.substr(versionTagPrefix.size()); // the part of the string containing the version + try { + m_schemaVersion = std::stoi(vstr); + } + catch (const std::invalid_argument& ia) { + TRG_MSG_ERROR("Invalid argument when interpreting the version part " << vstr << " of schema tag " << versionTag << ". " << ia.what()); + throw; + } + + TRG_MSG_INFO("TriggerDB schema version: " << m_schemaVersion); + return m_schemaVersion; +} bool TrigConf::TrigDBLoader::writeRawFile(const coral::Blob & data, const std::string & outFileName) const @@ -37,11 +92,10 @@ TrigConf::TrigDBLoader::writeRawFile(const coral::Blob & data, const std::string outFile.open( outFileName, std::ofstream::binary ); outFile.write( static_cast<const char*> ( data.startingAddress()), data.size() ); outFile.close(); + TRG_MSG_INFO("Wrote file " << outFileName); return true; } - - std::unique_ptr<coral::ISessionProxy> TrigConf::TrigDBLoader::createDBSession() const { @@ -68,3 +122,24 @@ TrigConf::TrigDBLoader::createDBSession() const { return proxy; } + + +TrigConf::QueryDefinition +TrigConf::TrigDBLoader::getQueryDefinition(coral::ISessionProxy* session, const std::map<size_t, TrigConf::QueryDefinition> & queries) const +{ + size_t sv = schemaVersion( session ); + // find the largest version key in the map of defined queries that is <= the schemaVersion + size_t maxDefVersion = 0; + for(auto & entry : queries) { + size_t vkey = entry.first; + if(vkey>maxDefVersion and vkey<=sv) { + maxDefVersion = vkey; + } + } + // if nothing found, throw an error + if( maxDefVersion==0 ) { + TRG_MSG_ERROR("No query for schema version " << sv << " defined" ); + throw TrigConf::NoQueryException( "No query available for schema version" + std::to_string(sv) ); + } + return queries.at(maxDefVersion); +} diff --git a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBMenuLoader.cxx b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBMenuLoader.cxx index e73569ab3aaced2717fa12b20d61286660c9aa6d..108e29f6b388deaf963c7998aae4d8313cf8974e 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBMenuLoader.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/src/TrigDBMenuLoader.cxx @@ -5,149 +5,118 @@ TrigConf::TrigDBMenuLoader::TrigDBMenuLoader(const std::string & connection) : TrigDBLoader("TrigDBMenuLoader", connection) -{} - -TrigConf::TrigDBMenuLoader::~TrigDBMenuLoader() -{} - - -namespace { - std::vector<TrigConf::QueryDefinition> - getL1QueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - - { // query for table dev1 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "L1_MENU", "L1TM" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition(" AND SMT.SMT_L1_MENU_ID = L1TM.L1TM_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_VERSION" ); +{ + /* + L1 menu queries + */ + { // for schema version 1 + auto & q = m_l1queries[1]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "L1_MASTER_TABLE", "L1MT" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition(" AND SMT.SMT_L1_MASTER_TABLE_ID = L1MT.L1MT_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_L1_MASTER_TABLE_ID" ); + q.extendOutput<coral::Blob>( "L1MT.L1MT_MENU" ); + // the field with the data + q.setDataName("L1MT.L1MT_MENU"); + } + { // for schema version 2 + auto & q = m_l1queries[2]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "L1_MENU", "L1TM" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition(" AND SMT.SMT_L1_MENU_ID = L1TM.L1TM_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_VERSION" ); q.extendOutput<int> ( "SMT.SMT_L1_MENU_ID" ); q.extendOutput<coral::Blob>( "L1TM.L1TM_DATA" ); // the field with the data q.setDataName("L1TM.L1TM_DATA"); - } - - { // query for table dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "L1_MASTER_TABLE", "L1MT" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition(" AND SMT.SMT_L1_MASTER_TABLE_ID = L1MT.L1MT_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_L1_MASTER_TABLE_ID" ); - q.extendOutput<coral::Blob>( "L1MT.L1MT_MENU" ); - // the field with the data - q.setDataName("L1MT.L1MT_MENU"); - } - return queries; } - std::vector<TrigConf::QueryDefinition> - getHLTQueryDefinitions() { - std::vector<TrigConf::QueryDefinition> queries; - - { // query for table dev1 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "HLT_MENU", "HTM" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition(" AND SMT.SMT_HLT_MENU_ID = HTM.HTM_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_VERSION" ); - q.extendOutput<int> ( "SMT.SMT_HLT_MENU_ID" ); - q.extendOutput<coral::Blob>( "HTM.HTM_DATA" ); - // the field with the data - q.setDataName("HTM.HTM_DATA"); - } - - { // query for table dev2 - queries.emplace_back(); - auto & q = queries.back(); - // tables - q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); - q.addToTableList ( "HLT_MASTER_TABLE", "HMT" ); - // bind vars - q.extendBinding<int>("smk"); - // conditions - q.extendCondition("SMT.SMT_ID = :smk"); - q.extendCondition(" AND SMT.SMT_HLT_MASTER_TABLE_ID = HMT.HMT_ID"); - // attributes - q.extendOutput<std::string>( "SMT.SMT_NAME" ); - q.extendOutput<int> ( "SMT.SMT_HLT_MASTER_TABLE_ID" ); - q.extendOutput<coral::Blob>( "HMT.HMT_MENU" ); - // the field with the data - q.setDataName("HMT.HMT_MENU"); - } - return queries; + /* + HLT menu queries + */ + { // for schema version 1 + auto & q = m_hltqueries[1]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "HLT_MASTER_TABLE", "HMT" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition(" AND SMT.SMT_HLT_MASTER_TABLE_ID = HMT.HMT_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_HLT_MASTER_TABLE_ID" ); + q.extendOutput<coral::Blob>( "HMT.HMT_MENU" ); + // the field with the data + q.setDataName("HMT.HMT_MENU"); + } + { // for schema version 2 + auto & q = m_hltqueries[2]; + // tables + q.addToTableList ( "SUPER_MASTER_TABLE", "SMT" ); + q.addToTableList ( "HLT_MENU", "HTM" ); + // bind vars + q.extendBinding<int>("smk"); + // conditions + q.extendCondition("SMT.SMT_ID = :smk"); + q.extendCondition(" AND SMT.SMT_HLT_MENU_ID = HTM.HTM_ID"); + // attributes + q.extendOutput<std::string>( "SMT.SMT_NAME" ); + q.extendOutput<int> ( "SMT.SMT_VERSION" ); + q.extendOutput<int> ( "SMT.SMT_HLT_MENU_ID" ); + q.extendOutput<coral::Blob>( "HTM.HTM_DATA" ); + // the field with the data + q.setDataName("HTM.HTM_DATA"); } - } + +TrigConf::TrigDBMenuLoader::~TrigDBMenuLoader() = default; + bool TrigConf::TrigDBMenuLoader::loadL1Menu ( unsigned int smk, boost::property_tree::ptree & l1menu, const std::string & outFileName ) const { - auto session = createDBSession(); session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getL1QueryDefinitions() ) { - try { - qdef.setBoundValue<int>("smk", smk); - auto q = qdef.createQuery( session.get() ); - auto & cursor = q->execute(); - querySuccess = true; - if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBMenuLoader: SuperMasterKey not available" ); - } - - const coral::AttributeList& row = cursor.currentRow(); - const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); - writeRawFile( dataBlob, outFileName ); - blobToPtree( dataBlob, l1menu ); - break; - } - catch(coral::QueryException & ex) { - TRG_MSG_INFO("Trying next query after coral::QueryException caught ( " << ex.what() <<" )" ); - continue; - } - catch(std::exception & ex) { - TRG_MSG_INFO("Trying next query after std::exception caught ( " << ex.what() <<" )" ); - continue; + QueryDefinition qdef = getQueryDefinition(session.get(), m_l1queries); + try { + qdef.setBoundValue<int>("smk", smk); + auto q = qdef.createQuery( session.get() ); + auto & cursor = q->execute(); + if ( ! cursor.next() ) { + TRG_MSG_ERROR("Tried reading L1 menu, but SuperMasterKey " << smk << " is not available" ); + throw TrigConf::NoSMKException("TriggerDBMenuLoader (L1Menu): SMK " + std::to_string(smk) + " not available"); } + const coral::AttributeList& row = cursor.currentRow(); + const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); + writeRawFile( dataBlob, outFileName ); + blobToPtree( dataBlob, l1menu ); } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the L1Menu data from the database, all query attempts failed"); - return false; + catch(coral::QueryException & ex) { + TRG_MSG_ERROR("When reading L1 menu for SMK " << smk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TriggerDBMenuLoader (L1Menu): " + std::string(ex.what())); } - return true; } - bool TrigConf::TrigDBMenuLoader::loadHLTMenu ( unsigned int smk, boost::property_tree::ptree & hltmenu, @@ -155,67 +124,61 @@ TrigConf::TrigDBMenuLoader::loadHLTMenu ( unsigned int smk, { auto session = createDBSession(); session->transaction().start( /*bool readonly=*/ true); - bool querySuccess { false }; - for( auto & qdef : getHLTQueryDefinitions() ) { - try { - qdef.setBoundValue<int>("smk", smk); - auto q = qdef.createQuery( session.get() ); - auto & cursor = q->execute(); - querySuccess = true; - if ( ! cursor.next() ) { - throw std::runtime_error( "TrigDBMenuLoader: SuperMasterKey not available" ); - } - const coral::AttributeList& row = cursor.currentRow(); - const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); - writeRawFile( dataBlob, outFileName ); - blobToPtree( dataBlob, hltmenu ); - break; - } - catch(coral::QueryException & ex) { - TRG_MSG_INFO("Trying next query after coral::QueryException caught ( " << ex.what() <<" )" ); - continue; - } - catch(std::exception & ex) { - TRG_MSG_INFO("Trying next query after std::exception caught ( " << ex.what() <<" )" ); - continue; + QueryDefinition qdef = getQueryDefinition(session.get(), m_hltqueries); + try { + qdef.setBoundValue<int>("smk", smk); + auto q = qdef.createQuery( session.get() ); + auto & cursor = q->execute(); + if ( ! cursor.next() ) { + TRG_MSG_ERROR("Tried reading HLT menu, but SuperMasterKey " << smk << " is not available" ); + throw TrigConf::NoSMKException("TriggerDBMenuLoader (HLTMenu): SMK " + std::to_string(smk) + " not available"); } + const coral::AttributeList& row = cursor.currentRow(); + const coral::Blob& dataBlob = row[qdef.dataName()].data<coral::Blob>(); + writeRawFile( dataBlob, outFileName ); + blobToPtree( dataBlob, hltmenu ); } - if( ! querySuccess ) { - TRG_MSG_ERROR("Could not read the HLTMenu data from the database, all query attempts failed"); - return false; + catch(coral::QueryException & ex) { + TRG_MSG_ERROR("When reading HLT menu for SMK " << smk << " a coral::QueryException was caught ( " << ex.what() <<" )" ); + throw TrigConf::QueryException("TriggerDBMenuLoader (HLTMenu): " + std::string(ex.what())); } - return true; } - bool TrigConf::TrigDBMenuLoader::loadL1Menu( unsigned int smk, L1Menu & l1menu, const std::string & outFileName ) const { boost::property_tree::ptree ptl1; - bool success = loadL1Menu( smk, ptl1, outFileName ); - if(!success) - return false; - if( ! ptl1.empty() ) { + loadL1Menu( smk, ptl1, outFileName ); + try { l1menu.setData(std::move(ptl1)); l1menu.setSMK(smk); } + catch(std::exception & ex) { + l1menu.clear(); + TRG_MSG_ERROR("When reading L1 menu for SMK " << smk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBMenuLoader: parsing error " + std::string(ex.what())); + } return true; } + bool TrigConf::TrigDBMenuLoader::loadHLTMenu( unsigned int smk, HLTMenu & hltmenu, const std::string & outFileName ) const { boost::property_tree::ptree pthlt; - bool success = loadHLTMenu( smk, pthlt, outFileName ); - if(!success) - return false; - if( ! pthlt.empty() ) { + loadHLTMenu( smk, pthlt, outFileName ); + try { hltmenu.setData(std::move(pthlt)); hltmenu.setSMK(smk); } + catch(std::exception & ex) { + hltmenu.clear(); + TRG_MSG_ERROR("When reading HLT menu for SMK " << smk << " a parsing error occured ( " << ex.what() <<" )" ); + throw TrigConf::ParsingException("TrigDBMenuLoader: parsing error " + std::string(ex.what())); + } return true; } diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx index 1c6b5f943f6822539d1f3b9aa8fac5f6fec1520c..754fc90653503dc8e7b7d1d1e283f71e0239c3b6 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TestTriggerMenuAccess.cxx @@ -137,7 +137,6 @@ testL1Menu_Connectors(const TrigConf::L1Menu & l1menu) { << "] is produced by topo algorithm " << topoAlg.name() << endl; } } else if( conn.type() == TrigConf::L1Connector::ConnectorType::ELECTRICAL ) { - cout << "JOERG 3" << endl; for( size_t fpga : { 0, 1 } ) { for( size_t clock : { 0, 1 } ) { for( auto & tl : conn.triggerLines(fpga, clock) ) { diff --git a/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx b/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx index 20e8be13a51551f27a2f8b69d0b7b678f3d6a550..e8eca7e0ef0c2f7f22bc4366b69dd39e528527b7 100644 --- a/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx +++ b/Trigger/TrigConfiguration/TrigConfIO/utils/TriggerMenuRW.cxx @@ -202,15 +202,10 @@ int main(int argc, char** argv) { if( cfg.inputFiles.size()>0 ) { // load config from files - - // file loader TrigConf::JsonFileLoader fileLoader; - for (const std::string & fn : cfg.inputFiles) { - // check if the file is L1 or HLT std::string filetype = fileLoader.getFileType( fn ); - if(filetype == "l1menu") { TrigConf::L1Menu l1menu; fileLoader.loadFile( fn, l1menu); @@ -256,7 +251,6 @@ int main(int argc, char** argv) { } else { cerr << "File " << fn << " not recognized as being an L1 or HLT menu or prescale set or bunchgroup set" << endl; } - } } @@ -265,30 +259,48 @@ int main(int argc, char** argv) { // db menu loader TrigConf::TrigDBMenuLoader dbloader(cfg.dbalias); - - TrigConf::L1Menu l1menu; - TrigConf::HLTMenu hltmenu; - dbloader.loadL1Menu( cfg.smk, l1menu, outputFileName("L1Menu", cfg) ); - if (l1menu) { + // L1 menu + TrigConf::L1Menu l1menu; + try { + dbloader.loadL1Menu( cfg.smk, l1menu, outputFileName("L1Menu", cfg) ); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load L1 menu. An exception occurred: " << ex.what() << endl; + } + if(l1menu) { cout << "Loaded L1 menu with " << l1menu.size() << " items" << endl; - l1menu.printMenu(cfg.detail); - } else { - cout << "Did not load an L1 menu" << endl; + if( cfg.detail ) { + l1menu.printMenu(true); + } } + cout << endl; - dbloader.loadHLTMenu( cfg.smk, hltmenu, outputFileName("HLTMenu", cfg)); + // HLT menu + TrigConf::HLTMenu hltmenu; + try { + dbloader.loadHLTMenu( cfg.smk, hltmenu, outputFileName("HLTMenu", cfg)); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load HLT menu. An exception occurred: " << ex.what() << endl; + } if (hltmenu) { cout << "Loaded HLT menu with " << hltmenu.size() << " chains" << endl; - } else { - cout << "Did not load an HLT menu" << endl; + if( cfg.detail ) { + hltmenu.printMenu(true); + } } + cout << endl; - // db job options loader + // Job options TrigConf::TrigDBJobOptionsLoader jodbloader(cfg.dbalias); - TrigConf::DataStructure jo; - jodbloader.loadJobOptions( cfg.smk, jo, outputFileName("HLTJobOptions", cfg) ); + try { + jodbloader.loadJobOptions( cfg.smk, jo, outputFileName("HLTJobOptions", cfg) ); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load HLT job options. An exception occurred: " << ex.what() << endl; + } if (jo) { cout << "Loaded job options with " << jo.getObject("properties").getKeys().size() << " entries " << endl; if( cfg.detail ) { @@ -299,8 +311,6 @@ int main(int argc, char** argv) { } } } - } else { - cout << "Did not load job options" << endl; } } @@ -309,12 +319,14 @@ int main(int argc, char** argv) { // load L1 prescales set from DB TrigConf::TrigDBL1PrescalesSetLoader dbloader(cfg.dbalias); TrigConf::L1PrescalesSet l1pss; - - dbloader.loadL1Prescales( cfg.l1psk, l1pss, outputFileName("L1PrescalesSet", cfg) ); + try { + dbloader.loadL1Prescales( cfg.l1psk, l1pss, outputFileName("L1PrescalesSet", cfg) ); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load L1 prescales. An exception occurred: " << ex.what() << endl; + } if (l1pss) { cout << "Loaded L1 prescales set with " << l1pss.size() << " prescales" << endl; - } else { - cout << "Did not load an L1 prescales set" << endl; } } @@ -322,13 +334,15 @@ int main(int argc, char** argv) { if( cfg.hltpsk != 0 ) { // load L1 prescales set from DB TrigConf::TrigDBHLTPrescalesSetLoader dbloader(cfg.dbalias); - TrigConf::HLTPrescalesSet hltpss; - - dbloader.loadHLTPrescales( cfg.hltpsk, hltpss, outputFileName("HLTPrescalesSet", cfg) ); + TrigConf::HLTPrescalesSet hltpss; + try { + dbloader.loadHLTPrescales( cfg.hltpsk, hltpss, outputFileName("HLTPrescalesSet", cfg) ); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load HLT prescales. An exception occurred: " << ex.what() << endl; + } if (hltpss) { cout << "Loaded HLT prescales set with " << hltpss.size() << " prescales" << endl; - } else { - cout << "Did not load an HLT prescales set" << endl; } } @@ -337,13 +351,17 @@ int main(int argc, char** argv) { // load L1 prescales set from DB TrigConf::TrigDBL1BunchGroupSetLoader dbloader(cfg.dbalias); TrigConf::L1BunchGroupSet bgs; - - dbloader.loadBunchGroupSet( cfg.bgsk, bgs, outputFileName("BunchGroupSet", cfg) ); + try { + dbloader.loadBunchGroupSet( cfg.bgsk, bgs, outputFileName("BunchGroupSet", cfg) ); + } + catch(TrigConf::IOException & ex) { + cout << "Could not load bunchgroup set. An exception occurred: " << ex.what() << endl; + } if (bgs) { cout << "Loaded L1 bunchgroup set with " << bgs.size() << " bunchgroups" << endl; - bgs.printSummary(cfg.detail); - } else { - cout << "Did not load an L1 bunchgroups set" << endl; + if( cfg.detail ) { + bgs.printSummary(true); + } } } diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py index 21a01776c99454998c40e938e80516d8576c1bc1..a796878589de47571b9877dae0c8bf19f1461f04 100644 --- a/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py +++ b/Trigger/TrigConfiguration/TrigConfigSvc/python/TrigConfigSvcCfg.py @@ -116,11 +116,34 @@ def generateL1Menu( flags ): return outfile +# configuration of L1ConfigSvc +@memoize +def getL1TopoConfigSvc( flags ): + log = logging.getLogger('TrigConfigSvcCfg') + # configure config svc + TrigConf__L1TopoConfigSvc = CompFactory.getComp("TrigConf::L1TopoConfigSvc") + l1topoConfigSvc = TrigConf__L1TopoConfigSvc("L1TopoConfigSvc") + + l1topoConfigSvc.ConfigSource = "XML" + from TriggerJobOpts.TriggerFlags import TriggerFlags + l1topoXMLFile = TriggerFlags.inputL1TopoConfigFile() if flags is None else flags.Trigger.LVL1TopoConfigFile + # check if file exists in this directory otherwise add the package to aid path resolution + # also a '/' in the file name indicates that no package needs to be added + import os.path + if not ( "/" in l1topoXMLFile or os.path.isfile(l1topoXMLFile) ): + l1topoXMLFile = "TriggerMenuMT/" + l1topoXMLFile + l1topoConfigSvc.XMLMenuFile = l1topoXMLFile + log.info( "Configured L1TopoConfigSvc with input file : %s", l1topoXMLFile ) + + from AthenaCommon.AppMgr import theApp + theApp.CreateSvc += [ "TrigConf::L1TopoConfigSvc/L1TopoConfigSvc" ] + return l1topoConfigSvc + + # configuration of L1ConfigSvc @memoize def getL1ConfigSvc( flags ): log = logging.getLogger('TrigConfigSvcCfg') - from AthenaCommon.Logging import log # generate menu file generatedFile = generateL1Menu( flags ) diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/src/L1TopoConfigSvc.cxx b/Trigger/TrigConfiguration/TrigConfigSvc/src/L1TopoConfigSvc.cxx index 335d3ac97bdcab8d05fda3cdd391ca6fe7687357..d1c21a57c7d860fb770941c03ebee7757784a9b4 100644 --- a/Trigger/TrigConfiguration/TrigConfigSvc/src/L1TopoConfigSvc.cxx +++ b/Trigger/TrigConfiguration/TrigConfigSvc/src/L1TopoConfigSvc.cxx @@ -11,7 +11,7 @@ using namespace std; TrigConf::L1TopoConfigSvc::L1TopoConfigSvc(const string& name, ISvcLocator* pSvcLocator) : base_class(name, pSvcLocator), - m_menu(new TXC::L1TopoMenu) + m_menu( nullptr ) { base_class::declareCommonProperties(); } @@ -31,6 +31,8 @@ TrigConf::L1TopoConfigSvc::initialize() { return StatusCode::SUCCESS; } + m_menu = std::make_unique<TXC::L1TopoMenu>(); + CHECK(initStorageMgr()); m_menu->setSMK( m_dbSMKey ); @@ -40,8 +42,6 @@ TrigConf::L1TopoConfigSvc::initialize() { CHECK(freeStorageMgr()); - // m_menu->print(); - return loadSuccess ? StatusCode::SUCCESS : StatusCode::FAILURE; } diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetBtagHypoTool.py b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetBtagHypoTool.py index 5d0b75b00f226cd1c8667ea0f31c80e988fbdf42..524b869ab63e663e607054528818b11a58891c70 100644 --- a/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetBtagHypoTool.py +++ b/Trigger/TrigHypothesis/TrigBjetHypo/python/TrigBjetBtagHypoTool.py @@ -28,6 +28,12 @@ bTaggingWP = { 'hmv2c1070' : 0.588, 'hmv2c1077' : 0.192, 'hmv2c1085' : -0.402, + # DL1r (Place Holder while we wait for WPs to be defined) + # Values taken from https://twiki.cern.ch/twiki/bin/view/AtlasProtected/BTaggingBenchmarksRelease21#DL1rnn_tagger + 'dl1r60' : 4.31, + 'dl1r70' : 2.98, + 'dl1r77' : 2.23, + 'dl1r85' : 1.32, } #################################################################################################### @@ -64,11 +70,22 @@ def decodeThreshold( threshold_btag ): log.debug("TrigBjetBtagHypoToolFromName: decoding threshold b%s", threshold_btag) + import re + tagger = "offperf" if threshold_btag == "offperf" else re.findall("(.*)[0-9]{2}",threshold_btag)[0] + + allowedTaggers = ["offperf","hmv2c10","mv2c10","mv2c20","dl1r"] + if tagger not in allowedTaggers: + log.debug("tagger = %s not amidst allowed taggers ",threshold_btag) + assert False, "Can't recognize tagger during TrigBjetHypoTool configuration. Tagger = "+threshold_btag + return None + tagger = "MV2c10" - if "mv2c20" in threshold_btag : + if"mv2c20" in threshold_btag : tagger = "MV2c20" elif "hmv2c10" in threshold_btag : tagger = "MV2c00" + elif "dl1r" in threshold_btag : + tagger = "DL1r" cut = bTaggingWP.get( threshold_btag,-20 ) return [tagger,cut] @@ -88,6 +105,7 @@ def getBjetBtagHypoConfiguration( name,conf_dict ): tool.MethodTag = tagger tool.BTaggingCut = tb + tool.cFraction = 0.03 return tool diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.cxx b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.cxx index cbbe7bb7bd4912216c958ef08cdd9d673d665afa..219333f87b9593ae9fa6a45d7bda6e9a38548acc 100644 --- a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.cxx +++ b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.cxx @@ -31,6 +31,7 @@ StatusCode TrigBjetBtagHypoTool::initialize() { ATH_MSG_DEBUG( " " << m_acceptAll ); ATH_MSG_DEBUG( " " << m_methodTag ); ATH_MSG_DEBUG( " " << m_bTaggingCut ); + ATH_MSG_DEBUG( " " << m_cFrac ); ATH_MSG_DEBUG( "Tool configured for chain/id: " << m_decisionId ); return StatusCode::SUCCESS; @@ -80,6 +81,16 @@ StatusCode TrigBjetBtagHypoTool::decide( std::vector< TrigBjetBtagHypoToolInfo > m_methodTag == "MV2c10" or m_methodTag == "MV2c20" ) { btagging->MVx_discriminant( m_methodTag, btaggingWeight ); + } else if ( m_methodTag == "DL1r" ) { + double pu = -1; + double pb = -1; + double pc = -1; + + btagging->pu("DL1r",pu); + btagging->pb("DL1r",pb); + btagging->pc("DL1r",pc); + + btaggingWeight = log( pb/(pu*(1-m_cFrac) + m_cFrac*pc) ); } else { ATH_MSG_ERROR( "b-Tagging method has not been recognised: " << m_methodTag.value() ); return StatusCode::FAILURE; diff --git a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.h b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.h index cd133d1ade6e06db8280a40fc3e19051ed1f4186..007fbff36d0acbf2060152baccae3a9042e1b06a 100755 --- a/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.h +++ b/Trigger/TrigHypothesis/TrigBjetHypo/src/TrigBjetBtagHypoTool.h @@ -67,6 +67,8 @@ class TrigBjetBtagHypoTool : virtual public ::AthAlgTool { /** @brief DeclareProperty: lower bound of the discriminant variable to be selected (if flag acceptAll is set to false) for MV2 tagger. */ Gaudi::Property< double > m_bTaggingCut {this,"BTaggingCut",-20.,"lower bound of the discriminant variable to be selected for b-tagging"}; + Gaudi::Property< double > m_cFrac {this,"cFraction",0.08,"c-fraction for DL1r LLR computation"}; + /** @brief DeclareProperty: to monitor method used to perform the cut. */ // float m_monitorMethod; // ToolHandle< GenericMonitoringTool > m_monTool { this, "MonTool", "", "Monitoring tool" }; Temporary commenting this out diff --git a/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py b/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py index 771577e14d305b3ac2372bbb6abf5f7564025072..a220da0c8d691d0d35dc4de8dfaa7a1ea23f8cee 100644 --- a/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py +++ b/Trigger/TrigMonitoring/TrigJetMonitoring/python/TrigJetMonitorAlgorithm.py @@ -35,8 +35,9 @@ Chain2L1JetCollDict = { # set L1 jet collection name for L1 jet chains # HLT jet collections and chains to monitor ############################################ -Chain2JetCollDict = dict() # set HLT jet collection for AT and legacy master HLT jet chains -JetCollections = dict() # List of HLT jet collections for AT and legacy master +Chain2JetCollDict = dict() # set HLT jet collection for AT and legacy master HLT jet chains +JetCollections = dict() # List of HLT jet collections for AT and legacy master +TurnOnCurves = dict() # List reference chains and offline jet collections to be used for producing turn-on curves # AthenaMT JetCollections['MT'] = [ @@ -66,6 +67,15 @@ Chain2JetCollDict['MT'] = { 'HLT_j45_ftf_pf_nojcalib_L1J20' : 'HLT_AntiKt4EMPFlowJets_nojcalib_ftf', 'HLT_j45_ftf_csskpf_nojcalib_L1J20' : 'HLT_AntiKt4EMPFlowCSSKJets_nojcalib_ftf', } +TurnOnCurves['MT'] = { # ref chain, offline jet coll + 'HLT_j420_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_3j200_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_j460_a10r_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_j460_a10_lcw_subjes_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_j460_a10t_lcw_jes_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_2j330_a10t_lcw_jes_35smcINF_L1J100' : ['HLT_j80_L1J15','AntiKt4EMTopoJets'], + 'HLT_j85_ftf_pf_L1J20' : ['HLT_j45_ftf_pf_L1J20','AntiKt4EMPFlowJets'], +} # Legacy JetCollections['Legacy'] = [ @@ -84,6 +94,31 @@ Chain2JetCollDict['Legacy'] = { 'HLT_5j70_0eta240' : 'HLT_xAOD__JetContainer_a4tcemsubjesISFS', 'HLT_3j200' : 'HLT_xAOD__JetContainer_a4tcemsubjesISFS', } +TurnOnCurves['Legacy'] = { # ref chain, offline jet coll + 'HLT_j420' : ['HLT_j175','AntiKt4EMTopoJets'], + 'HLT_j260_320eta490' : ['HLT_j45_320eta490','AntiKt4EMTopoJets'], + 'HLT_j460_a10r_L1J100' : ['HLT_j175','AntiKt4EMTopoJets'], + 'HLT_j460_a10_lcw_subjes_L1J100' : ['HLT_j175','AntiKt4EMTopoJets'], + 'HLT_j460_a10t_lcw_jes_L1J100' : ['HLT_j175','AntiKt4EMTopoJets'], + 'HLT_2j330_a10t_lcw_jes_35smcINF_L1J100' : ['HLT_j175','AntiKt4EMTopoJets'], + 'HLT_3j200' : ['HLT_j175','AntiKt4EMTopoJets'], +} + +######################################################### +# Helpful functions +######################################################### + +def getEtaRange(chain): + if 'eta' in chain: + etaParts = chain.split('eta') + etaMinTemp = etaParts[0].split('_') + etaMin = etaMinTemp[len(etaMinTemp)-1] + etaMin = int(etaMin)/10 + etaMax = etaParts[1].split('_')[0] + etaMax = int(etaMax)/10 + return etaMin,etaMax + else: # by default central + return 0,2.5 ######################################################### # Schedule more histograms for dedicated jet collections @@ -168,8 +203,18 @@ def TrigJetMonConfig(inputFlags): # Loop over HLT jet chains for chain,jetcoll in Chain2JetCollDict[InputType].items(): + # kinematic plots chainMonitorConf = jetChainMonitoringConfig(inputFlags,jetcoll,chain,AthenaMT) chainMonitorConf.toAlg(helper) + # efficiency plots + refChain = 'NONE' + offlineJetColl = 'NONE' + if chain in TurnOnCurves[InputType]: + refChain = TurnOnCurves[InputType][chain][0] + offlineJetColl = TurnOnCurves[InputType][chain][1] + if offlineJetColl != 'NONE' and refChain != 'NONE': + effMonitorConf = jetEfficiencyMonitoringConfig(inputFlags,jetcoll,offlineJetColl,chain,refChain,AthenaMT) + effMonitorConf.toAlg(helper) # the AthMonitorCfgHelper returns an accumulator to be used by the general configuration system. return helper.result() @@ -302,6 +347,41 @@ def jetChainMonitoringConfig(inputFlags,jetcoll,chain,athenaMT): else: chainFolder = chain + trigConf = JetMonAlgSpec( # the usual JetMonAlgSpec + chain+"TrigMon", + JetContainerName = jetcoll, + TriggerChain = chain, + defaultPath = chainFolder, + topLevelDir="HLT/JetMon/Online/", + bottomLevelDir=jetcollFolder, + failureOnMissingContainer=True, + ) + trigConf.appendHistos( + "pt", + "m", + "eta", + "et", + "phi", + ) + + return trigConf + +def jetEfficiencyMonitoringConfig(inputFlags,onlinejetcoll,offlinejetcoll,chain,refChain,athenaMT): + '''Function to configures some algorithms in the monitoring system.''' + + # Remap online Run 2 jet collections + from TrigJetMonitoring import JetCollRemapping + jetcollFolder = onlinejetcoll + if onlinejetcoll in JetCollRemapping.JetCollRun2ToRun3 and not athenaMT: + jetcollFolder = JetCollRemapping.JetCollRun2ToRun3[onlinejetcoll] + + # Remap Run 2 jet chain name to Run 3 jet chain + from TrigJetMonitoring import JetChainRemapping + if chain in JetChainRemapping.JetChainRun2ToRun3: + chainFolder = JetChainRemapping.JetChainRun2ToRun3[chain] + else: + chainFolder = chain + # We schedule a new JetAlg which will be acting only when a TriggerChain fired (using the TriggerChain from the base classes). # We'll plot 1 histo build by a dedicated JetHistoTriggEfficiency tool. # So we'll have to explicitely give a specification via the generic dicionnary 'ToolSpec' @@ -313,22 +393,25 @@ def jetChainMonitoringConfig(inputFlags,jetcoll,chain,athenaMT): # define the histogram group.defineHistogram('trigPassed,jetVar',title='titletrig', type="TEfficiency", path=chainFolder, xbins=100 , xmin=0, xmax=500000. ,) + # Get jet index and eta selection for offline jets + parts = chain.split('j') + multiplicity = parts[0].split('_')[1] + if multiplicity != '': index = int(multiplicity) - 1 # single-threhold multijet chains + else: index = 0 # single-jet chain + etaMin,etaMax = getEtaRange(chain) + from JetMonitoring.JetMonitoringConfig import retrieveVarToolConf trigConf = JetMonAlgSpec( # the usual JetMonAlgSpec - chain+"TrigMon", - JetContainerName = jetcoll, - TriggerChain = chain, - defaultPath = chainFolder, - topLevelDir="HLT/JetMon/Online/", - bottomLevelDir=jetcollFolder, - failureOnMissingContainer=True, + chain+"TrigEffMon", + JetContainerName = offlinejetcoll, + TriggerChain = refChain, # reference chain + defaultPath = chainFolder, + topLevelDir = "HLT/JetMon/Online/", + bottomLevelDir = jetcollFolder, + failureOnMissingContainer = True, ) trigConf.appendHistos( - "pt", - "m", - "eta", - "et", - "phi", + SelectSpec( 'eff', '{}<|eta|<{}'.format(etaMin,etaMax), chainFolder, SelectedIndex=index, FillerTools = [ # we pass directly the ToolSpec ToolSpec('JetHistoTriggEfficiency', chain, # below we pass the Properties of this JetHistoTriggEfficiency tool : @@ -336,6 +419,7 @@ def jetChainMonitoringConfig(inputFlags,jetcoll,chain,athenaMT): Var=retrieveVarToolConf("pt"), # In this context we can not just pass a str alias to describe a histo variable # so we use retrieveVarToolConf("pt") which returns a full specification for the "pt" histo variable. ProbeTrigChain=chain,defineHistoFunc=defineHistoForJetTrigg), + ] ), ) if 'smc' in chain: @@ -358,6 +442,7 @@ def jetChainMonitoringConfig(inputFlags,jetcoll,chain,athenaMT): return trigConf + if __name__=='__main__': # Read arguments @@ -438,6 +523,17 @@ if __name__=='__main__': chainMonitorConf = jetChainMonitoringConfig(ConfigFlags,jetcoll,chain,AthenaMT) chainMonitorConf.toAlg(helper) + # Produce efficiency plots + for chain in Chain2JetCollDict[InputType]: + refChain = 'NONE' + offlineJetColl = 'NONE' + if chain in TurnOnCurves[InputType]: + refChain = TurnOnCurves[InputType][chain][0] + offlineJetColl = TurnOnCurves[InputType][chain][1] + if offlineJetColl != 'NONE' and refChain != 'NONE': + effMonitorConf = jetEfficiencyMonitoringConfig(ConfigFlags,jetcoll,offlineJetColl,chain,refChain,AthenaMT) + effMonitorConf.toAlg(helper) + cfg.merge(helper.result()) cfg.run() diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py b/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py index b2d5fc270f6130a0d02701bfee64a489a5ec1d22..42295b44a3a372387ba8db8377cd49dc580b0f76 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/python/TrigTauMonitoringConfigMT.py @@ -185,24 +185,64 @@ class TrigTauMonAlgBuilder: info = self.getTrigInfo(trigger) if info.isRNN() is True: - self.bookRNNInputVars( monAlg, trigger, online=True ) - self.bookRNNInputVars( monAlg, trigger, online=False ) - - + self.bookRNNInputVars( monAlg, trigger,nProng='1P', online=True ) + self.bookRNNInputVars( monAlg, trigger,nProng='MP', online=True ) + self.bookRNNInputVars( monAlg, trigger,nProng='1P', online=False ) + self.bookRNNInputVars( monAlg, trigger,nProng='MP', online=False ) + self.bookRNNTrack( monAlg, trigger, online=True ) + self.bookRNNTrack( monAlg, trigger, online=False ) + self.bookRNNCluster( monAlg, trigger, online=True ) + self.bookRNNCluster( monAlg, trigger, online=False ) # - # Book Shower shapes + # Book RNN Variables # - def bookRNNInputVars( self, monAlg, trigger, online=True ): - - monGroup = self.helper.addGroup( monAlg, trigger+'_RNNInputVars_' + ("HLT" if online else "Offline"), - self.basePath+'/'+trigger+'/RNNInputVars/' + ("HLT" if online else "Offline") ) - - monGroup.defineHistogram('centFrac', title='Centrality Fraction (1Prong); centFrac; Events',xbins=50,xmin=-0.05,xmax=1.2) - monGroup.defineHistogram('etOverPtLeadTrk', title='etOverPtLeadTrk log (1Prong); etOverPtLeadTrk_log; Events',xbins=60,xmin=-3.,xmax=3.) - monGroup.defineHistogram('dRmax', title='max dR of associated tracks (1Prong); dRmax; Events',xbins=50,xmin=-0.1,xmax=0.3) - monGroup.defineHistogram('absipSigLeadTrk', title='AbsIpSigLeadTrk (1Prong); absipSigLeadTrk; Events',xbins=25,xmin=0.0,xmax=20.0) - monGroup.defineHistogram('sumPtTrkFrac', title='SumPtTrkFrac (1Prong); SumPtTrkFrac; Events',xbins=50,xmin=-0.5,xmax=1.1) - monGroup.defineHistogram('emPOverTrkSysP', title='EMPOverTrkSysP log (1Prong); EMPOverTrkSysP_log; Events',xbins=50,xmin=-5.,xmax=3.) - monGroup.defineHistogram('ptRatioEflowApprox', title='ptRatioEflowApprox (1Prong); ptRatioEflowApprox; Events',xbins=50,xmin=0.0,xmax=2.0) - monGroup.defineHistogram('mEflowApprox', title='mEflowApprox log (1Prong); mEflowApprox_log; Events',xbins=50,xmin=0.,xmax=5.) - monGroup.defineHistogram('ptDetectorAxis', title='ptDetectorAxis log (1Prong); ptDetectorAxis_log; Events',xbins=50,xmin=0.,xmax=5.) + def bookRNNInputVars( self, monAlg, trigger,nProng, online ): + + monGroupName = trigger+'/RNN/'+('HLT' if online else 'Offline')+'/InputScalar_'+nProng + + monGroup = self.helper.addGroup( monAlg, monGroupName, + self.basePath+'/'+monGroupName ) + + monGroup.defineHistogram('centFrac', title='Centrality Fraction ('+nProng+'); centFrac; Events',xbins=50,xmin=-0.05,xmax=1.2) + monGroup.defineHistogram('etOverPtLeadTrk', title='etOverPtLeadTrk log ('+nProng+'); etOverPtLeadTrk_log; Events',xbins=60,xmin=-3.,xmax=3.) + monGroup.defineHistogram('dRmax', title='max dR of associated tracks ('+nProng+'); dRmax; Events',xbins=50,xmin=-0.1,xmax=0.3) + monGroup.defineHistogram('absipSigLeadTrk', title='AbsIpSigLeadTrk ('+nProng+'); absipSigLeadTrk; Events',xbins=25,xmin=0.0,xmax=20.0) + monGroup.defineHistogram('sumPtTrkFrac', title='SumPtTrkFrac ('+nProng+'); SumPtTrkFrac; Events',xbins=50,xmin=-0.5,xmax=1.1) + monGroup.defineHistogram('emPOverTrkSysP', title='EMPOverTrkSysP log ('+nProng+'); EMPOverTrkSysP_log; Events',xbins=50,xmin=-5.,xmax=3.) + monGroup.defineHistogram('ptRatioEflowApprox', title='ptRatioEflowApprox ('+nProng+'); ptRatioEflowApprox; Events',xbins=50,xmin=0.0,xmax=2.0) + monGroup.defineHistogram('mEflowApprox', title='mEflowApprox log ('+nProng+'); mEflowApprox_log; Events',xbins=50,xmin=0.,xmax=5.) + monGroup.defineHistogram('ptDetectorAxis', title='ptDetectorAxis log ('+nProng+'); ptDetectorAxis_log; Events',xbins=50,xmin=0.,xmax=5.) + if nProng=='MP': monGroup.defineHistogram('massTrkSys', title='massTrkSys log ('+nProng+'); massTrkSys_log; Events',xbins=50,xmin=0.,xmax=3.) + + def bookRNNTrack( self, monAlg, trigger, online ): + + monGroupName = trigger+'/RNN/'+('HLT' if online else 'Offline')+'/InputTrack' + + monGroup = self.helper.addGroup( monAlg, monGroupName, + self.basePath+'/'+monGroupName ) + + monGroup.defineHistogram('track_pt_log',title='track_pt_log;track_pt_log;Events',xbins=20,xmin=2,xmax=7) + monGroup.defineHistogram('track_pt_jetseed_log',title='track_pt_jetseed_log;track_pt_jetseed_log;Events',xbins=50,xmin=2,xmax=7) + monGroup.defineHistogram('track_dEta',title='track_dEta;track_dEta;Events',xbins=100,xmin=-0.5,xmax=0.5) + monGroup.defineHistogram('track_dPhi',title='track_dPhi;track_dPhi;Events',xbins=100,xmin=-0.5,xmax=0.5) + monGroup.defineHistogram('track_d0_abs_log',title='track_d0_abs_log;track_d0_abs_log;Events',xbins=50,xmin=-7,xmax=2) + monGroup.defineHistogram('track_z0sinThetaTJVA_abs_log',title='track_z0sinThetaTJVA_abs_log;track_z0sinThetaTJVA_abs_log;Events',xbins=50,xmin=-10,xmax=4) + monGroup.defineHistogram('track_nIBLHitsAndExp',title='track_nIBLHitsAndExp;Â track_nIBLHitsAndExp;Events',xbins=3,xmin=0,xmax=3) + monGroup.defineHistogram('track_nPixelHitsPlusDeadSensors',title='track_nPixelHitsPlusDeadSensors;track_nPixelHitsPlusDeadSensors;Events',xbins=11,xmin=0,xmax=11) + monGroup.defineHistogram('track_nSCTHitsPlusDeadSensors',title='track_nSCTHitsPlusDeadSensors;track_nSCTHitsPlusDeadSensors;Events',xbins=20,xmin=0,xmax=20) + + def bookRNNCluster( self, monAlg, trigger, online ): + + monGroupName = trigger+'/RNN/'+('HLT' if online else 'Offline')+'/InputCluster' + + monGroup = self.helper.addGroup( monAlg, monGroupName, + self.basePath+'/'+monGroupName ) + + monGroup.defineHistogram('cluster_et_log',title='cluster_et_log; cluster_et_log;Events',xbins=30,xmin=0,xmax=6) + monGroup.defineHistogram('cluster_pt_jetseed_log',title='cluster_pt_jetseed_log; cluster_pt_jetseed_log;Events',xbins=50,xmin=2,xmax=7) + monGroup.defineHistogram('cluster_dEta',title='cluster_dEta; cluster_dEta;Events',xbins=100,xmin=-0.5,xmax=0.5) + monGroup.defineHistogram('cluster_dPhi',title='cluster_dPhi; cluster_dPhi;Events',xbins=100,xmin=-0.5,xmax=0.5) + monGroup.defineHistogram('cluster_SECOND_R_log10',title='cluster_SECOND_R_log10; cluster_SECOND_R_log10;Events',xbins=50,xmin=-3,xmax=7) + monGroup.defineHistogram('cluster_SECOND_LAMBDA_log10',title='cluster_SECOND_LAMBDA_log10; cluster_SECOND_LAMBDA_log10;Events',xbins=50,xmin=-3,xmax=7) + monGroup.defineHistogram('cluster_CENTER_LAMBDA_log10',title='cluster_CENTER_LAMBDA_log10; cluster_CENTER_LAMBDA_log10;Events',xbins=50,xmin=-2,xmax=5) + diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx index 9cf05dde18bfa02d1d0484cab8797612cd1c76ec..d479100e0f7872a3552f2f39dc5fd346e5566def 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.cxx @@ -21,6 +21,7 @@ StatusCode TrigTauMonitorAlgorithm::initialize() { ATH_CHECK( m_hltTauJetPreselKey.initialize() ); ATH_CHECK( m_hltTauJetCaloOnlyMVAKey.initialize() ); ATH_CHECK( m_hltTauJetCaloOnlyKey.initialize() ); + ATH_CHECK( m_hltSeedJetKey.initialize()); ATH_CHECK( m_trigDecTool.retrieve() ); for(const auto& trigName:m_trigInputList) @@ -118,6 +119,10 @@ StatusCode TrigTauMonitorAlgorithm::executeNavigation( const EventContext& ctx, void TrigTauMonitorAlgorithm::fillDistributions(std::vector< std::pair< const xAOD::TauJet*, const TrigCompositeUtils::Decision * >> pairObjs, std::string trigger) const { + ATH_MSG_DEBUG ("TrigTauMonitorAlgorithm::fillDistributions"); + + std::vector<const xAOD::TauJet*> tau_vec_1p; + std::vector<const xAOD::TauJet*> tau_vec_np; const TrigInfo info = getTrigInfo(trigger); @@ -125,32 +130,58 @@ void TrigTauMonitorAlgorithm::fillDistributions(std::vector< std::pair< const xA std::vector<const xAOD::TauJet*> tau_vec; for( auto pairObj: pairObjs ) { - tau_vec.push_back(pairObj.first); + int nTracks=-1; + pairObj.first->detail(xAOD::TauJetParameters::nChargedTracks, nTracks); + if(nTracks==1){ + tau_vec_1p.push_back(pairObj.first); + }else if(nTracks>1){ + tau_vec_np.push_back(pairObj.first); + } } // Offline - if(info.isRNN) fillRNNInputVars( trigger, tau_vec, false ); + if(info.isRNN){ + fillRNNInputVars( trigger, tau_vec_1p,"1P", false ); + fillRNNInputVars( trigger, tau_vec_np,"MP", false ); + fillRNNTrack( trigger, tau_vec_1p, false ); + fillRNNTrack( trigger, tau_vec_np, false ); + fillRNNCluster( trigger, tau_vec_1p, false ); + fillRNNCluster( trigger, tau_vec_np, false ); + } - tau_vec.clear(); + tau_vec_1p.clear(); + tau_vec_np.clear(); auto vec = m_trigDecTool->features<xAOD::TauJetContainer>(trigger,TrigDefs::includeFailedDecisions ,"HLT_TrigTauRecMerged_MVA" ); for( auto &featLinkInfo : vec ){ const auto *feat = *(featLinkInfo.link); if(!feat) continue; // If not pass, continue - tau_vec.push_back(feat); + int nTracks=-1; + feat->detail(xAOD::TauJetParameters::nChargedTracks, nTracks); + if(nTracks==1){ + tau_vec_1p.push_back(feat); + }else if(nTracks>1){ + tau_vec_np.push_back(feat); + } + } + if(info.isRNN){ + fillRNNInputVars( trigger, tau_vec_1p,"1P", true ); + fillRNNInputVars( trigger, tau_vec_np,"MP", true ); + fillRNNTrack( trigger, tau_vec_1p, true ); + fillRNNTrack( trigger, tau_vec_np, true ); + fillRNNCluster( trigger, tau_vec_1p, true ); + fillRNNCluster( trigger, tau_vec_np, true ); } - if(info.isRNN) fillRNNInputVars( trigger, tau_vec, true ); - - + } -void TrigTauMonitorAlgorithm::fillRNNInputVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const +void TrigTauMonitorAlgorithm::fillRNNInputVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec,const std::string nProng, bool online) const { ATH_MSG_DEBUG("Fill RNN input variables: " << trigger); - auto monGroup = getGroup(trigger+( online ? "_RNNInputVars_HLT" : "_RNNInputVars_Offline")); + auto monGroup = getGroup(trigger+( online ? "/RNN/HLT/InputScalar_"+nProng : "/RNN/Offline/InputScalar_"+nProng)); auto centFrac = Monitored::Collection("centFrac", tau_vec, [] (const xAOD::TauJet* tau){ float detail = -999; @@ -192,11 +223,167 @@ void TrigTauMonitorAlgorithm::fillRNNInputVars(const std::string trigger, std::v }return detail;}); auto ptDetectorAxis = Monitored::Collection("ptDetectorAxis", tau_vec, [] (const xAOD::TauJet* tau){ return TMath::Log10(std::min(tau->ptDetectorAxis() / 1000.0, 100.0));}); + + auto massTrkSys = Monitored::Collection("massTrkSys", tau_vec, [] (const xAOD::TauJet* tau){ + float detail = -999; + if ((tau->detail(xAOD::TauJetParameters::massTrkSys, detail))&&(tau->nTracks()>1)){ + detail = TMath::Log10(std::max(detail, 140.0f)); + }return detail;}); + + + + + fill(monGroup, centFrac,etOverPtLeadTrk,dRmax,absipSigLeadTrk,sumPtTrkFrac,emPOverTrkSysP,ptRatioEflowApprox,mEflowApprox,ptDetectorAxis,massTrkSys); + +} + +void TrigTauMonitorAlgorithm::fillRNNTrack(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const +{ + ATH_MSG_DEBUG("Fill RNN input Track: " << trigger); + + + auto monGroup = getGroup(trigger+( online ? "/RNN/HLT/InputTrack" : "/RNN/Offline/InputTrack")); + + for(auto tau: tau_vec){ + auto tracks = tau->allTracks(); + + auto track_pt_jetseed_log = Monitored::Collection("track_pt_jetseed_log", tau_vec, [] (const xAOD::TauJet* tau){ return TMath::Log10( tau->ptJetSeed());}); + fill(monGroup,track_pt_jetseed_log); + + + auto cmp_pt = [](const xAOD::TauTrack *lhs, const xAOD::TauTrack *rhs) { + return lhs->pt() > rhs->pt(); + }; + std::sort(tracks.begin(), tracks.end(), cmp_pt); + + unsigned int max_tracks = 10; + if (tracks.size() > max_tracks) { + tracks.resize(max_tracks); + } + + + auto track_pt_log = Monitored::Collection("track_pt_log", tracks, [](const xAOD::TauTrack *track){return TMath::Log10( track->pt()); }); - fill(monGroup, centFrac,etOverPtLeadTrk,dRmax,absipSigLeadTrk,sumPtTrkFrac,emPOverTrkSysP,ptRatioEflowApprox,mEflowApprox,ptDetectorAxis); + auto track_dEta = Monitored::Collection("tracks_dEta", tracks, [&tau](const xAOD::TauTrack *track){auto ddeta=track->eta()- tau->eta();return ddeta; }); + + auto track_dPhi = Monitored::Collection("tracks_dPhi", tracks, [&tau](const xAOD::TauTrack *track){return track->p4().DeltaPhi(tau->p4()); }); + + auto track_z0sinThetaTJVA_abs_log = Monitored::Collection("tracks_z0sinThetaTJVA_abs_log", tracks, [&tau](const xAOD::TauTrack *track){return track->z0sinThetaTJVA(*tau); }); + + auto track_d0_abs_log = Monitored::Collection("tracks_d0_abs_log", tracks, [](const xAOD::TauTrack *track){return TMath::Log10( TMath::Abs(track->track()->d0()) + 1e-6); }); + + auto track_nIBLHitsAndExp = Monitored::Collection("tracks_nIBLHitsAndExp", tracks, [](const xAOD::TauTrack *track){ + uint8_t inner_pixel_hits, inner_pixel_exp; + const auto success1_innerPixel_hits = track->track()->summaryValue(inner_pixel_hits, xAOD::numberOfInnermostPixelLayerHits); + const auto success2_innerPixel_exp = track->track()->summaryValue(inner_pixel_exp, xAOD::expectInnermostPixelLayerHit); + float detail = -999; + if (success1_innerPixel_hits && success2_innerPixel_exp) {detail=inner_pixel_exp ? inner_pixel_hits : 1.;}; + return detail; }); + + auto track_nPixelHitsPlusDeadSensors = Monitored::Collection("tracks_nPixelHitsPlusDeadSensors", tracks, [](const xAOD::TauTrack *track){ + uint8_t pixel_hits, pixel_dead; + const auto success1_pixel_hits = track->track()->summaryValue(pixel_hits, xAOD::numberOfPixelHits); + const auto success2_pixel_dead = track->track()->summaryValue(pixel_dead, xAOD::numberOfPixelDeadSensors); + float detail = -999; + if (success1_pixel_hits && success2_pixel_dead) {detail=pixel_hits + pixel_dead;}; + return detail; }); + + auto track_nSCTHitsPlusDeadSensors = Monitored::Collection("tracks_nSCTHitsPlusDeadSensors", tracks, [](const xAOD::TauTrack *track){ + uint8_t sct_hits, sct_dead; + const auto success1_sct_hits = track->track()->summaryValue(sct_hits, xAOD::numberOfSCTHits); + const auto success2_sct_dead = track->track()->summaryValue(sct_dead, xAOD::numberOfSCTDeadSensors); + float detail = -999; + if (success1_sct_hits && success2_sct_dead) {detail=sct_hits + sct_dead;}; + return detail; }); + + + fill(monGroup,track_pt_log,track_dEta,track_dPhi,track_z0sinThetaTJVA_abs_log,track_d0_abs_log,track_nIBLHitsAndExp,track_nPixelHitsPlusDeadSensors,track_nSCTHitsPlusDeadSensors); + } } +void TrigTauMonitorAlgorithm::fillRNNCluster(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const +{ + ATH_MSG_DEBUG("Fill RNN input Cluster: " << trigger); + + auto monGroup = getGroup(trigger+( online ? "/RNN/HLT/InputCluster" : "/RNN/Offline/InputCluster")); + + for(auto tau: tau_vec){ + + auto cluster_pt_jetseed_log = Monitored::Collection("cluster_pt_jetseed_log", tau_vec, [] (const xAOD::TauJet* tau){ return TMath::Log10( tau->ptJetSeed());}); + + std::vector<const xAOD::CaloCluster *> clusters; + + float max_cluster_dr = 1.0; + + if(tau->jetLink().isValid()) { + continue; + } + + const xAOD::Jet *jetSeed = tau->jet(); + if (!jetSeed) { + ATH_MSG_ERROR("Tau jet link is invalid."); + } + + ATH_MSG_DEBUG("After trying to get the jet link " << jetSeed->pt()); + + if(!jetSeed->getConstituents().isValid()) { + continue; + } + + ATH_MSG_DEBUG("Link to constituents is valid"); + + for (const auto jc : jetSeed->getConstituents()) { + auto cl = dynamic_cast<const xAOD::CaloCluster *>(jc->rawConstituent()); + if (!cl) { + ATH_MSG_ERROR("Calorimeter cluster is invalid."); + } + + const auto lc_p4 = tau->p4(xAOD::TauJetParameters::DetectorAxis); + if (lc_p4.DeltaR(cl->p4()) < max_cluster_dr) { + clusters.push_back(cl); + } + } + + ATH_MSG_DEBUG("After loop on jet constituents"); + + auto et_cmp = [](const xAOD::CaloCluster *lhs, + const xAOD::CaloCluster *rhs) { + return lhs->et() > rhs->et(); + }; + std::sort(clusters.begin(), clusters.end(), et_cmp); + + unsigned int max_clusters = 6; + if (clusters.size() > max_clusters) { + clusters.resize(max_clusters); + } + + + auto cluster_et_log = Monitored::Collection("cluster_et_log",clusters, [](const xAOD::CaloCluster *cluster){return TMath::Log10( cluster->et()); }); + auto cluster_dEta = Monitored::Collection("cluster_dEta", clusters, [&tau](const xAOD::CaloCluster *cluster){auto ddeta=cluster->eta()- tau->eta();return ddeta; }); + auto cluster_dPhi = Monitored::Collection("cluster_dPhi", clusters, [&tau](const xAOD::CaloCluster *cluster){return cluster->p4().DeltaPhi(tau->p4()); }); + auto cluster_log_SECOND_R = Monitored::Collection("cluster_log_SECOND_R", clusters, [](const xAOD::CaloCluster *cluster){ + double detail = -999.; + const auto success_SECOND_R = cluster->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_R,detail); + if (success_SECOND_R) detail = TMath::Log10(detail + 0.1); + return detail;}); + + auto cluster_SECOND_LAMBDA = Monitored::Collection("cluster_SECOND_LAMBDA", clusters, [](const xAOD::CaloCluster *cluster){ + double detail = -999.; + const auto success_SECOND_LAMBDA = cluster->retrieveMoment(xAOD::CaloCluster::MomentType::SECOND_LAMBDA, detail); + if (success_SECOND_LAMBDA) detail = TMath::Log10(detail + 0.1); + return detail;}); + + auto cluster_CENTER_LAMBDA = Monitored::Collection("cluster_CENTER_LAMBDA", clusters, [](const xAOD::CaloCluster *cluster){ + double detail = -999.; + const auto success_CENTER_LAMBDA = cluster->retrieveMoment(xAOD::CaloCluster::MomentType::CENTER_LAMBDA, detail); + if (success_CENTER_LAMBDA) detail = TMath::Log10(detail + 1e-6); + return detail;}); + + fill(monGroup,cluster_pt_jetseed_log,cluster_et_log,cluster_dEta,cluster_dPhi,cluster_log_SECOND_R,cluster_SECOND_LAMBDA,cluster_CENTER_LAMBDA); + } + +} TrigInfo TrigTauMonitorAlgorithm::getTrigInfo(const std::string trigger) const{ return m_trigInfo.at(trigger); diff --git a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h index 7cb7e0f663f21bcb127ba4cc8045894e626c3940..bb51486e5c13d32e3f126f86706c6512d492d0b2 100644 --- a/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h +++ b/Trigger/TrigMonitoring/TrigTauMonitoring/src/TrigTauMonitorAlgorithm.h @@ -46,8 +46,9 @@ class TrigTauMonitorAlgorithm : public AthMonitorAlgorithm { StatusCode executeNavigation(const EventContext& ctx, const std::string trigItem,float, const std::string, std::vector<std::pair<const xAOD::TauJet*, const TrigCompositeUtils::Decision*>> &) const; - void fillRNNInputVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const; - + void fillRNNInputVars(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec,const std::string nProng, bool online) const; + void fillRNNTrack(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const; + void fillRNNCluster(const std::string trigger, std::vector<const xAOD::TauJet*> tau_vec, bool online) const; void fillDistributions(std::vector< std::pair< const xAOD::TauJet*, const TrigCompositeUtils::Decision * >> pairObjs, const std::string trigger) const; inline double dR(const double eta1, const double phi1, const double eta2, const double phi2) const @@ -65,6 +66,7 @@ class TrigTauMonitorAlgorithm : public AthMonitorAlgorithm { SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetPreselKey { this, "hltTauJetPreselKey", "HLT_TrigTauRecMerged_Presel", "HLT taujet container key" }; SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetCaloOnlyMVAKey { this, "hltTauJetCaloOnlyMVAKey", "HLT_TrigTauRecMerged_CaloOnlyMVA", "HLT taujet container key" }; SG::ReadHandleKey< xAOD::TauJetContainer> m_hltTauJetCaloOnlyKey { this, "hltTauJetCaloOnlyKey", "HLT_TrigTauRecMerged_CaloOnly", "HLT taujet container key" }; + SG::ReadHandleKey< xAOD::JetContainer> m_hltSeedJetKey { this, "hltSeedJetKey", "HLT_jet_seed", "HLT jet seed container key" }; }; #endif diff --git a/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx b/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx index e33ed7f576c3837e2c4bfa52ccf1002cf236c298..a5c5ed3e0fcf46d588575de8ea365e11e79d7e34 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx @@ -26,10 +26,14 @@ namespace HLTTest { } - StatusCode TestHypoAlg::execute( const EventContext& context ) const { + StatusCode TestHypoAlg::execute( const EventContext& context ) const { + // new output decisions + SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context ); + auto decisions = outputHandle.ptr(); + ATH_MSG_DEBUG( "Executing " << name() << "..." ); if ( m_recoInput.key().empty() ) { - ATH_MSG_DEBUG( "No input configured, not producing the output" ); + ATH_MSG_DEBUG( "No input configured, output decisions will be empty" ); return StatusCode::SUCCESS; } @@ -44,9 +48,6 @@ namespace HLTTest { auto recoInput = SG::makeHandle(m_recoInput, context); ATH_MSG_DEBUG( " and with "<< recoInput->size() <<" reco inputs"); - // new output decisions - SG::WriteHandle<DecisionContainer> outputHandle = createAndStore(decisionOutput(), context ); - auto decisions = outputHandle.ptr(); // find features: std::vector<const FeatureOBJ*> featureFromDecision; diff --git a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx index c901aaafaf3fedaca8ad71ecea6b7b5d5688ccf9..8169572ad7da3db9c8881fed69f313cdb344958e 100644 --- a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx +++ b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.cxx @@ -102,20 +102,21 @@ StatusCode CTPUnpackingTool::start() { StatusCode CTPUnpackingTool::decode( const ROIB::RoIBResult& roib, HLT::IDVec& enabledChains ) const { - auto nTAVItems = Monitored::Scalar( "TAVItems", 0 ); + auto nItems = Monitored::Scalar( "Items", 0 ); auto nChains = Monitored::Scalar( "Chains", 0 ); - auto monitorit = Monitored::Group( m_monTool, nTAVItems, nChains ); - auto tav = roib.cTPResult().TAV(); - const size_t tavSize = tav.size(); + auto monitorit = Monitored::Group( m_monTool, nItems, nChains ); - for ( size_t wordCounter = 0; wordCounter < tavSize; ++wordCounter ) { + auto ctpbits = m_useTBPBit ? roib.cTPResult().TBP() : roib.cTPResult().TAV(); + const size_t bitsSize = ctpbits.size(); + + for ( size_t wordCounter = 0; wordCounter < bitsSize; ++wordCounter ) { for ( size_t bitCounter = 0; bitCounter < 32; ++bitCounter ) { const size_t ctpIndex = 32*wordCounter + bitCounter; - const bool decision = ( tav[wordCounter].roIWord() & ((uint32_t)1 << bitCounter) ) > 0; + const bool decision = ( ctpbits[wordCounter].roIWord() & ((uint32_t)1 << bitCounter) ) > 0; if ( decision == true or m_forceEnable ) { if ( decision ) { - nTAVItems = nTAVItems + 1; + nItems = nItems + 1; ATH_MSG_DEBUG( "L1 item " << ctpIndex << " active, enabling chains " << (m_forceEnable ? " due to the forceEnable flag" : " due to the seed")); } @@ -136,7 +137,7 @@ StatusCode CTPUnpackingTool::decode( const ROIB::RoIBResult& roib, HLT::IDVec& for ( auto chain: enabledChains ) { ATH_MSG_DEBUG( "Enabling chain: " << chain ); } - if ( nTAVItems == 0 ) { + if ( nItems == 0 ) { ATH_MSG_ERROR( "All CTP bits were disabled, this event shoudl not have shown here" ); return StatusCode::FAILURE; } diff --git a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h index 0eab6c38c913bdcee716ab01f38d66befe31606a..90d5794ea44d44dbf80746cf9aae41c22aeff445 100644 --- a/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h +++ b/Trigger/TrigSteer/L1Decoder/src/CTPUnpackingTool.h @@ -38,6 +38,7 @@ private: SG::ReadHandleKey<TrigConf::L1Menu> m_L1MenuKey{ this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu", "L1 Menu" }; Gaudi::Property<bool> m_useNewConfig{ this, "UseNewConfig", false, "When true, read the menu from detector store, when false use the L1ConfigSvc" }; + Gaudi::Property<bool> m_useTBPBit{ this, "UseTBPBits", false, "When true, use Trigger Before Prescale bits instead of Trigger After Veto (for testing only)" }; }; diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_mt1_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_mt1_build.ref index c348c22762114f757c78825ca9d4e7e43d734eee..ef6d417dee71c48baf3921b5341dad6a6b30069b 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_mt1_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_mt1_build.ref @@ -752,14 +752,14 @@ TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tra TrigSignatureMoniMT INFO -- #2456480859 Events 14 14 11 10 4 - - - - - - - - - 4 TrigSignatureMoniMT INFO -- #2456480859 Features 20 14 4 - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau35_mediumRNN_tracktwoMVA_tau25_mediumRNN_tracktwoMVA_L1DR-TAU20ITAU12I-J25 #1794354861 -TrigSignatureMoniMT INFO -- #1794354861 Events 0 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1794354861 Features 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1794354861 Events 6 6 6 3 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1794354861 Features 15 6 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_medium1_tracktwo_L1TAU60 #598963338 TrigSignatureMoniMT INFO -- #598963338 Events 5 5 4 2 1 - - - - - - - - - 1 TrigSignatureMoniMT INFO -- #598963338 Features 5 2 1 - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau35_mediumRNN_tracktwoMVA_L1TAU60_DR-TAU20ITAU12I #1075975502 -TrigSignatureMoniMT INFO -- #1075975502 Events 0 0 0 0 0 - - - - - - - - - 0 -TrigSignatureMoniMT INFO -- #1075975502 Features 0 0 0 - - - - - - - - - +TrigSignatureMoniMT INFO -- #1075975502 Events 3 3 2 0 0 - - - - - - - - - 0 +TrigSignatureMoniMT INFO -- #1075975502 Features 6 0 0 - - - - - - - - - TrigSignatureMoniMT INFO HLT_tau80_mediumRNN_tracktwoMVA_tau60_mediumRNN_tracktwoMVA_L1TAU60_2TAU40 #400305971 TrigSignatureMoniMT INFO -- #400305971 Events 3 3 2 0 0 - - - - - - - - - 0 TrigSignatureMoniMT INFO -- #400305971 Features 5 0 0 - - - - - - - - - diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py b/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py index d6d8ab96927224028180e578c6fb159d0627f3c8..177075a59e2d68dc8adba17cce06427acf299717 100644 --- a/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py +++ b/Trigger/TriggerCommon/TrigEDMConfig/python/DataScoutingInfo.py @@ -27,7 +27,7 @@ DataScoutingIdentifiers = { # Truncation thresholds (in bytes) for each HLT result type TruncationThresholds = { 0: 5*(1024**2), # Main: 5 MB - 1: 1*(1024**2), # CostMonDS: 1 MB + 1: 2*(1024**2), # CostMonDS: 2 MB 5: 1*(1024**2), # JetDS: 1 MB } diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py index 788bfe7baec49da30b526fef949224dc54d53fce..fdfd2365cb52ae464c961729f290588665243991 100644 --- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py +++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py @@ -262,6 +262,9 @@ TriggerHLTListRun3 = [ ('TrigRoiDescriptorCollection#HLT_Roi_TauIso_TauID', 'BS ESD AODFULL AODSLIM', 'Steer'), ('TrigRoiDescriptorCollection#HLT_Roi_TauID', 'BS ESD AODFULL AODSLIM', 'Steer'), + ('xAOD::JetContainer#HLT_jet_seed', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUCaloViews,TAUCaloMVAViews'), + ('xAOD::JetAuxContainer#HLT_jet_seedAux.', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'), + # Jet ('xAOD::JetContainer#HLT_AntiKt4EMTopoJets_subjesIS', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Jet'), ('xAOD::JetAuxContainer#HLT_AntiKt4EMTopoJets_subjesISAux.'+JetVars, 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Jet'), @@ -378,7 +381,7 @@ TriggerHLTListRun3 = [ #('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_CaloOnlyMVAAux.', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'), ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_MVA', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUFTFIsoViews,TAUEFViews'), - ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_MVAAux.', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'), + ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_MVAAux.jetLink', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'), ('xAOD::TauJetContainer#HLT_TrigTauRecMerged_Precision', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau', 'inViews:TAUFTFIdViews,TAUFTFTrackViews,TAUFTFTrackTwoViews'), ('xAOD::TauJetAuxContainer#HLT_TrigTauRecMerged_PrecisionAux.', 'BS ESD AODFULL AODSLIM AODVERYSLIM', 'Tau'), diff --git a/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py index 5a4a05121083f370ec9b4e8b2dbbb64861890de5..87f82bf65fce54cf0ed4f094db13cac94bcaf468 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/Lvl1SimulationConfig.py @@ -26,8 +26,9 @@ def Lvl1SimulationSequence( flags = None ): TriggerFlags.readLVL1configFromXML = True TriggerFlags.outputLVL1configFile = None log.info("setting up LVL1ConfigSvc, including the menu generation") - from TrigConfigSvc.TrigConfigSvcCfg import getL1ConfigSvc + from TrigConfigSvc.TrigConfigSvcCfg import getL1ConfigSvc, getL1TopoConfigSvc svcMgr += conf2toConfigurable(getL1ConfigSvc(flags)) + svcMgr += conf2toConfigurable(getL1TopoConfigSvc(flags)) ################################################## # Calo diff --git a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py index e150d49dc75ae2b0db562f42bf05d6ed35cc4a07..09e71a0b531fbc4ba5d7aee9328ec263fd21115e 100644 --- a/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py @@ -38,7 +38,7 @@ flags.Exec.MaxEvents=50 flags.Input.isMC = False flags.Input.Files= ["/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data17_13TeV.00327265.physics_EnhancedBias.merge.RAW._lb0100._SFO-1._0001.1"] -flags.Trigger.L1Decoder.forceEnableAllChains = True + flags.Concurrency.NumThreads=1 flags.Concurrency.NumConcurrentEvents=1 @@ -75,6 +75,7 @@ from TrigInDetConfig.TrigInDetConfig import TrigInDetCondConfig acc.merge( TrigInDetCondConfig( flags ) ) acc.getEventAlgo( "TrigSignatureMoniMT" ).OutputLevel=DEBUG +acc.getEventAlgo( "L1Decoder" ).ctpUnpacker.UseTBPBits=True # test setup @@ -89,8 +90,6 @@ acc.foreach_component("*HLTTop/*Input*").OutputLevel = DEBUG # input makers acc.foreach_component("*HLTTop/*HLTEDMCreator*").OutputLevel = DEBUG # messaging from the EDM creators acc.foreach_component("*HLTTop/*GenericMonitoringTool*").OutputLevel = WARNING # silcence mon tools (addressing by type) acc.foreach_component("*/L1Decoder").OutputLevel = DEBUG -acc.foreach_component("*FastEMCaloAlgo*").OutputLevel = DEBUG -acc.foreach_component("VDVFastEgammaCalo").OutputLevel =DEBUG fname = "runHLT_standalone_newJO.pkl" print( "Storing config in the file {}".format( fname ) ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py index 3353d4bfd39ade54f90e2eb3a946739d2048366b..87091d47e19225ac12f87e61b4f7d1474045edf4 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/HLTCFConfig_newJO.py @@ -2,6 +2,7 @@ from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory +from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInDict from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponentsNaming import CFNaming from TriggerMenuMT.HLTMenuConfig.Menu.TriggerConfigHLT import TriggerConfigHLT from TriggerMenuMT.HLTMenuConfig.Menu.MenuComponents import isInputMakerBase, isHypoBase, isComboHypoAlg @@ -61,6 +62,7 @@ def generateDecisionTree(chains): """ name = "Menu{}{}".format(stepNumber, stepName) seq = seqAND( name ) + allRecoSeqName = getRecosStepSeq( stepNumber ).name acc.addSequence(seq, parentName = allRecoSeqName ) return seq @@ -95,7 +97,7 @@ def generateDecisionTree(chains): log.debug('Creted filter {}'.format(filterName)) return filterAlg - + @memoize def findInputMaker( stepCounter, stepName ): seq = getSingleMenuSeq( stepCounter, stepName ) @@ -118,6 +120,14 @@ def generateDecisionTree(chains): return result else: raise Exception("No input maker in seq "+seq.name) + @memoize + def findComboHypoAlg( stepCounter, stepName ): + seq = getSingleMenuSeq( stepCounter, stepName ) + algs = findAllAlgorithms( seq ) + for alg in algs: + if isComboHypoAlg(alg): + return alg + raise Exception("No combo hypo alg in seq "+seq.name) @memoize def findHypoAlg( stepCounter, stepName ): @@ -128,6 +138,7 @@ def generateDecisionTree(chains): return alg raise Exception("No hypo alg in seq "+seq.name) + @memoize def findAllHypoAlgs( stepCounter, stepName ): seq = getSingleMenuSeq( stepCounter, stepName ) @@ -142,22 +153,15 @@ def generateDecisionTree(chains): else: raise Exception("No hypo alg in seq "+seq.name) - @memoize - def findComboHypoAlg( stepCounter, stepName ): - seq = getSingleMenuSeq( stepCounter, stepName ) - algs = findAllAlgorithms( seq ) - for alg in algs: - if isComboHypoAlg(alg): - return alg - raise Exception("No combo hypo alg in seq "+seq.name) def addAndAssureUniqness( prop, toadd, context="" ): - if toadd not in prop: - log.info("{} value {} not there".format(context, toadd)) - return list( prop ) + [ toadd ] - else: - log.info("{} value {} already there".format(context, toadd)) - return list( prop ) + if isinstance(toadd, str): + toadd = [toadd] + missing = [] + for t in toadd: + if t not in prop: + missing.append( t ) + return list( prop ) + missing def assureUnsetOrTheSame(prop, toadd, context): """ @@ -168,7 +172,36 @@ def generateDecisionTree(chains): if prop != toadd: raise Exception("{}, when setting property found conflicting values, existing {} and new {}".format(context, prop, toadd)) + def clearUnderscores(s): + p = s + while True: + n = p.replace("__", "_") + if p == n: + return p.rstrip("_") + p = n + @memoize + def prevStepOutput( chain, stepCounter ): + """ + Returns list of decision collections that are outputs of previous step as well as the hypo alg name that outpus it + """ + prevHypoAlgName = "" + if stepCounter == 1: # L1 seed + out = chain.L1decisions + else: + prevCounter = stepCounter-1 + prevName = chain.steps[prevCounter-1].name # counting steps from 1, for indexing need one less + prevStep = chain.steps[prevCounter-1] + if prevStep.isCombo: + prevHypoAlg = findComboHypoAlg( prevCounter, prevName ) + else: + prevHypoAlg = findHypoAlg( prevCounter, prevName ) + out = prevHypoAlg.HypoOutputDecisions + prevHypoAlgName = prevHypoAlg.name + + return [out] if isinstance( out, str) else out, prevHypoAlgName # normalise to list + + # CF construction logic # create all sequences and filter algs, merge CAs from signatures (decision CF) for chain in chains: for stepCounter, step in enumerate( chain.steps, 1 ): @@ -177,7 +210,6 @@ def generateDecisionTree(chains): if step.isCombo: # add sequences that allows reconstructions to be run in parallel, followed (in sequence) by the combo hypo comboSeq, comboRecoSeq = getComboSequences( stepCounter, step.name ) - for sequence in step.sequences: acc.merge( sequence.ca, sequenceName=comboRecoSeq.name) @@ -212,84 +244,88 @@ def generateDecisionTree(chains): comboHypoAlg.HypoOutputDecisions = [] - # connect all outputs (decision DF) + # connect all outputs (decision DF) and add chains to filter on for chain in chains: + for stepCounter, step in enumerate( chain.steps, 1 ): - for seqCounter, sequence in enumerate( step.sequences ): - - # Filters linking - filterAlg = getFilterAlg( stepCounter, step.name ) - if step.isCombo: - chainDictLegs = ' '.join(map(str, [dic['chainName'] for dic in step.chainDicts])) - filterAlg.Chains = addAndAssureUniqness( filterAlg.Chains, chainDictLegs, "{} filter alg chains".format( filterAlg.name ) ) - else: - filterAlg.Chains = addAndAssureUniqness( filterAlg.Chains, chain.name, "{} filter alg chains".format( filterAlg.name ) ) - - if stepCounter == 1: - filterAlg.Input = addAndAssureUniqness( filterAlg.Input, chain.L1decisions[0], "{} L1 input".format( filterAlg.name ) ) - else: # look into the previous step - hypoOutput = findHypoAlg( stepCounter-1, chain.steps[chain.steps.index( step )-1].name ).HypoOutputDecisions - filterAlg.Input = addAndAssureUniqness( filterAlg.Input, hypoOutput, "{} input".format( filterAlg.name ) ) - - # Input Maker linking - im = findAllInputMakers( stepCounter, step.name )[seqCounter] - for i in filterAlg.Input: - filterOutputName = CFNaming.filterOutName( filterAlg.name, i ) - filterAlg.Output = addAndAssureUniqness( filterAlg.Output, filterOutputName, "{} output".format( filterAlg.name ) ) - im.InputMakerInputDecisions = addAndAssureUniqness( im.InputMakerInputDecisions, filterOutputName, "{} input".format( im.name ) ) - - imOutputName = CFNaming.inputMakerOutName( im.name ) - im.InputMakerOutputDecisions = assureUnsetOrTheSame( im.InputMakerOutputDecisions, imOutputName, "{} IM output".format( im.name ) ) - + # Filters linking + filterAlg = getFilterAlg( stepCounter, step.name ) + + def __setup(sequenceCounter, chainDict): + ''' + Local function to setup filter/input makers/hypo algs IO + ''' + # set chain to filter on + filterAlg.Chains = addAndAssureUniqness( filterAlg.Chains, chainDict["chainName"], "{} filter alg chains".format( filterAlg.name ) ) + + filterIn, prevHypoName = prevStepOutput( chain, stepCounter) + filterAlg.Input = addAndAssureUniqness( filterAlg.Input, filterIn, "{} input".format( filterAlg.name ) ) + filterOut = [ clearUnderscores(CFNaming.filterOutName( filterAlg.name, s ).replace(prevHypoName, "")) for s in filterIn ] + filterAlg.Output = addAndAssureUniqness( filterAlg.Output, filterOut, "{} output".format( filterAlg.name ) ) + + im = findAllInputMakers( stepCounter, step.name )[sequenceCounter] + im.InputMakerInputDecisions = addAndAssureUniqness( im.InputMakerInputDecisions, filterOut[sequenceCounter], "{} input".format( im.name ) ) + imOut = CFNaming.inputMakerOutName( im.name ) + im.InputMakerOutputDecisions = assureUnsetOrTheSame( im.InputMakerOutputDecisions, imOut, "{} IM output".format( im.name ) ) + # Hypo linking - hypoAlg = findAllHypoAlgs( stepCounter, step.name )[seqCounter] + hypoAlg = findAllHypoAlgs( stepCounter, step.name )[sequenceCounter] hypoAlg.HypoInputDecisions = assureUnsetOrTheSame( hypoAlg.HypoInputDecisions, im.InputMakerOutputDecisions, "{} hypo input".format( hypoAlg.name ) ) - hypoOutName = CFNaming.hypoAlgOutName( hypoAlg.name ) - hypoAlg.HypoOutputDecisions = assureUnsetOrTheSame( hypoAlg.HypoOutputDecisions, hypoOutName, + hypoOut = CFNaming.hypoAlgOutName( hypoAlg.name ) + hypoAlg.HypoOutputDecisions = assureUnsetOrTheSame( hypoAlg.HypoOutputDecisions, hypoOut, "{} hypo output".format( hypoAlg.name ) ) + hypoAlg.HypoTools.append( step.sequences[sequenceCounter]._hypoToolConf.confAndCreate( chainDict ) ) + pass - # Hypo Tools - if step.isCombo: - from TriggerMenuMT.HLTMenuConfig.Menu.ChainDictTools import splitChainInDict - chainDictLeg = splitChainInDict(chain.name)[seqCounter] - hypoAlg.HypoTools.append( sequence._hypoToolConf.confAndCreate( chainDictLeg ) ) + if step.isCombo: + for seqCounter in range( len( step.sequences ) ) : + chainLegDict = splitChainInDict( chain.name )[seqCounter] + __setup( seqCounter, chainLegDict ) - # to be deleted after ComboHypos will be properly configured and included in DF - hypoAlg.HypoTools.append( sequence._hypoToolConf.confAndCreate( TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) ) - else: - hypoAlg.HypoTools.append( sequence._hypoToolConf.confAndCreate( TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) ) + comboHypoAlg = findComboHypoAlg( stepCounter, step.name ) + comboHypoAlg.MultiplicitiesMap[chain.name] = step.multiplicity - # Combo Hypo linking - if step.isCombo: - comboHypoAlg = findComboHypoAlg( stepCounter, step.name ) - comboHypoAlg.MultiplicitiesMap[chain.name] = step.multiplicity + elementaryHypos = findAllHypoAlgs( stepCounter, step.name ) + for hypo in elementaryHypos: + if hypo == comboHypoAlg: + continue + comboHypoAlg.HypoInputDecisions = addAndAssureUniqness( comboHypoAlg.HypoInputDecisions, hypo.HypoOutputDecisions, + "{} comboHypo input".format( comboHypoAlg.name ) ) - comboInputList = findAllHypoAlgs( stepCounter, step.name ) - for comboInput in comboInputList: - comboHypoAlg.HypoInputDecisions = addAndAssureUniqness( comboHypoAlg.HypoInputDecisions, comboInput.name, - "{} comboHypo input".format( comboHypoAlg.name ) ) - - comboOutName = CFNaming.comboHypoOutputName( comboHypoAlg.name, comboInput.name ) - comboHypoAlg.HypoOutputDecisions = addAndAssureUniqness( comboHypoAlg.HypoOutputDecisions, comboOutName, - "{} comboHypo output".format( comboHypoAlg.name ) ) + comboOut = CFNaming.comboHypoOutputName( comboHypoAlg.name, hypo.name ) + comboHypoAlg.HypoOutputDecisions = addAndAssureUniqness( comboHypoAlg.HypoOutputDecisions, comboOut, + "{} comboHypo output".format( comboHypoAlg.name ) ) - # Combo Hypo Tools - for comboToolConf in step.comboToolConfs: - comboHypoAlg.ComboHypoTools.append( comboToolConf.confAndCreate( TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) ) + # Combo Hypo Tools + for comboToolConf in step.comboToolConfs: + comboHypoAlg.ComboHypoTools.append( comboToolConf.confAndCreate( TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) ) + + else: + assert len( step.sequences ) == 1, "chain {} step {} is not combo bye has number of sequences = {}".format( chain.name, stepCounter, len( step.sequences ) ) + __setup( 0, TriggerConfigHLT.getChainDictFromChainName( chain.name ) ) for chain in chains: + log.info( "CF algorithms for chain {}".format( chain.name ) ) for stepCounter, step in enumerate( chain.steps, 1 ): filterAlg = getFilterAlg( stepCounter, step.name ) - log.info("FilterAlg {} Inputs {} Outputs {}".format( filterAlg.name, filterAlg.Input, filterAlg.Output ) ) + log.info(" FilterAlg {} Inputs {} Outputs {} Chains {}".format( filterAlg.name, filterAlg.Input, filterAlg.Output, filterAlg.Chains ) ) imAlg = findInputMaker( stepCounter, step.name ) - log.info("InputMaker {} Inputs {} Outputs {}".format( imAlg.name, imAlg.InputMakerInputDecisions, imAlg.InputMakerOutputDecisions ) ) - - hypoAlg = findHypoAlg( stepCounter, step.name ) - log.info("HypoAlg {} Inputs {} Outputs {}".format( hypoAlg.name, hypoAlg.HypoInputDecisions, hypoAlg.HypoOutputDecisions ) ) + log.info(" InputMaker {} Inputs {} Outputs {}".format( imAlg.name, imAlg.InputMakerInputDecisions, imAlg.InputMakerOutputDecisions ) ) + if step.isCombo: + hypoAlgs = findAllHypoAlgs( stepCounter, step.name ) + for hypoAlg in hypoAlgs: + if isComboHypoAlg(hypoAlg): + continue + log.info(" HypoAlg {} Inputs {} Outputs {} Tools {}".format( hypoAlg.name, hypoAlg.HypoInputDecisions, hypoAlg.HypoOutputDecisions, [t.name for t in hypoAlg.HypoTools] ) ) + combo = findComboHypoAlg( stepCounter, step.name ) + log.info(" ComboHypoAlg {} Inputs {} Outputs {} Multiplicities {}".format( combo.name, combo.HypoInputDecisions, combo.HypoOutputDecisions, combo.MultiplicitiesMap ) ) + else: + hypoAlg = findHypoAlg( stepCounter, step.name ) + log.info(" HypoAlg {} Inputs {} Outputs {} Tools {}".format( hypoAlg.name, hypoAlg.HypoInputDecisions, hypoAlg.HypoOutputDecisions, [t.name for t in hypoAlg.HypoTools] ) ) return acc diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py index 2492fac32ea19e25d47b786fd4df3c959c8ce544..18d70193adc65048c2284629aba6486692fe995b 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1.py @@ -305,7 +305,6 @@ def setupMenu(): ] TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ - ChainProp(name='HLT_cscmon_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CSC'], groups=['RATE:Monitoring','BW:Other']), ] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py index c603452064655e8d1ab32eca5af459424f9efe50..4d7d83583376656992385c9e0bdd110d4013abd3 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/LS2_v1_newJO.py @@ -36,6 +36,7 @@ def setupMenu(flags): SingleElectronGroup = ['RATE:SingleElectron', 'BW:Electron'] SinglePhotonGroup = ['RATE:SinglePhoton', 'BW:Photon'] SingleJetGroup = ['RATE:SingleJet', 'BW:Jet'] + CombinedGroup = ['RATE:Combined', 'BW:Combined'] flags.Trigger.menu.muon = [ ChainProp(name='HLT_mu20_L1MU20', groups=SingleMuonGroup), @@ -61,8 +62,8 @@ def setupMenu(flags): ] flags.Trigger.menu.combined = [ - ChainProp(name='HLT_e7_mu10_L1EM7_MU10', groups=SingleElectronGroup), - ChainProp(name='HLT_e7_mu12_L1EM7_MU10', groups=SingleElectronGroup) + ChainProp(name='HLT_e7_etcut_mu10_L1EM7_MU10', groups=CombinedGroup), + ChainProp(name='HLT_e7_etcut_mu12_L1EM7_MU10', groups=CombinedGroup) ] if __name__ == "__main__": diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py index a6d8eb245a80eda092b786fef0559ca8b27dca63..e5c42f7c2991b5e829178f83b732b37f8b86cc57 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py @@ -138,6 +138,8 @@ def addP1Signatures(): TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ ChainProp(name='HLT_costmonitor_CostMonDS_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CostMonitoring'], groups=['RATE:Monitoring','BW:Other']), ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['Online','RATE:DISCARD','BW:DISCARD']), + ChainProp(name='HLT_cscmon_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CSC'], groups=['RATE:Monitoring','BW:Other']), + ] # Random Seeded EB chains which select at the HLT based on L1 TBP bits diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py index 84ef904afa5e8e5c08d947c5801a4b0d2b8e1a44..81ead00974c70f49b17c31ae9889189a59b22323 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/SignatureDicts.py @@ -116,7 +116,8 @@ JetChainParts = { 'bTag' : ['boffperf' , 'bmv2c2040' , 'bmv2c2050' , 'bmv2c2060' , 'bmv2c2070' , 'bmv2c2077' , 'bmv2c2085' , 'bmv2c1040' , 'bmv2c1050' , 'bmv2c1060' , 'bmv2c1070' , 'bmv2c1077' , 'bmv2c1085' , - 'bhmv2c1040', 'bhmv2c1050', 'bhmv2c1060', 'bhmv2c1070', 'bhmv2c1077', 'bhmv2c1085'], + 'bhmv2c1040', 'bhmv2c1050', 'bhmv2c1060', 'bhmv2c1070', 'bhmv2c1077', 'bhmv2c1085', + 'dl1r60','dl1r70','dl1r77','dl1r85'], 'bTracking' : [], 'bConfig' : ['split',], 'bMatching' : ['antimatchdr05mu'], diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py index 48997c2a26c8f293dfefeb32d47e88215af9c804..8ba5a2aee278c62eb0e47a33efc438b7f3da4771 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSequenceSetup.py @@ -208,13 +208,16 @@ def muEFSAAlgSequence(ConfigFlags): efsaViewsMaker.RequireParentView = True efsaViewsMaker.ViewFallThrough = True + from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import muEFSARecoSequence, makeMuonPrepDataAlgs + #Run decoding again since we are using updated RoIs + viewAlgs_MuonPRD = makeMuonPrepDataAlgs(RoIs=efsaViewsMaker.InViewRoIs) ### get EF reco sequence ### - from TriggerMenuMT.HLTMenuConfig.Muon.MuonSetup import muEFSARecoSequence muEFSARecoSequence, sequenceOut = muEFSARecoSequence( efsaViewsMaker.InViewRoIs, 'RoI' ) - efsaViewsMaker.ViewNodeName = muEFSARecoSequence.name() - - muonEFSAonlySequence = seqAND( "muonEFSAonlySequence", [efsaViewsMaker, muEFSARecoSequence ] ) + muefSASequence = parOR("muEFSARecoSequence", [viewAlgs_MuonPRD, muEFSARecoSequence]) + efsaViewsMaker.ViewNodeName = muefSASequence.name() + + muonEFSAonlySequence = seqAND( "muonEFSAonlySequence", [efsaViewsMaker, muefSASequence ] ) return (muonEFSAonlySequence, efsaViewsMaker, sequenceOut) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py index 6fcebe53a7efa7981972043531bc92d4940c1c42..bcab89ffc72d74b151cd88331a5f4e4f85963913 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Muon/MuonSetup.py @@ -564,7 +564,8 @@ def muEFSARecoSequence( RoIs, name ): EFMuonViewDataVerifier = CfgMgr.AthViews__ViewDataVerifier( "EFMuonViewDataVerifier_" + name ) EFMuonViewDataVerifier.DataObjects = [( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' ), ( 'CaloCellContainer' , 'StoreGateSvc+AllCalo' ), - ( 'TrackCollection' , 'StoreGateSvc+Tracks' )] + ( 'TrackCollection' , 'StoreGateSvc+Tracks' ), + ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+'+RoIs )] efAlgs.append( EFMuonViewDataVerifier ) # Only load these objects if they aren't available in conddb diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py index f5ba8e2f2579b14f75674a80f596a49fca120782..20526c17e549a1883a26d2b69955976c3009b545 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Tau/TauRecoSequences.py @@ -101,6 +101,7 @@ def _algoTauPrecisionMVA(inputRoIs, tracks, step): algo.Key_trigTauTrackInputContainer = "HLT_tautrack_dummy" algo.Key_trigTauJetOutputContainer = recordable("HLT_TrigTauRecMerged_MVA") algo.Key_trigTauTrackOutputContainer = recordable("HLT_tautrack_MVA") + algo.Key_trigJetSeedOutputKey = recordable("HLT_jet_seed") return algo def tauCaloRecoSequence(InViewRoIs, SeqName):