diff --git a/Calorimeter/CaloCalibHitRec/CaloCalibHitRec/ATLAS_CHECK_THREAD_SAFETY b/Calorimeter/CaloCalibHitRec/CaloCalibHitRec/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..75457a05b3685f4f121cc71de72623a307603fbf --- /dev/null +++ b/Calorimeter/CaloCalibHitRec/CaloCalibHitRec/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Calorimeter/CaloCalibHitRec diff --git a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx index bd66b91c6e292ded25a525aa0b91e98866cfdd8b..a3355b4cae8b448016cdc8a9032b1637528763b7 100644 --- a/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx +++ b/Calorimeter/CaloCalibHitRec/src/CaloCalibClusterMomentsMaker2.cxx @@ -820,7 +820,6 @@ Calculation of energy fraction caused by particles of different types void CaloCalibClusterMomentsMaker2::get_calib_frac(const std::map<unsigned int,int>& truthBarcodeToPdgCodeMap, const MyClusInfo& clusInfo, std::vector<double> &engFrac) const { - static unsigned int nWarnings = 0; engFrac.assign(kCalibFracMax, 0.0); if(clusInfo.engCalibIn.engTot <= 0.0) return; // each MyClusInfo has a map of particle's barcode and particle calibration deposits in given cluster @@ -829,10 +828,7 @@ void CaloCalibClusterMomentsMaker2::get_calib_frac(const std::map<unsigned int,i int pdg_id = 0; try { pdg_id = truthBarcodeToPdgCodeMap.at(barcode); } catch (const std::out_of_range& e){ - if (nWarnings < 10 ){ - ATH_MSG_WARNING("truthBarcodeToPdgCodeMap cannot find an entry with barcode " << barcode); - nWarnings++; - } + ATH_MSG_WARNING("truthBarcodeToPdgCodeMap cannot find an entry with barcode " << barcode); continue; } diff --git a/Calorimeter/CaloConditions/CaloConditions/CaloBadChannel.h b/Calorimeter/CaloConditions/CaloConditions/CaloBadChannel.h index 07d639d123946b4d00dd4f7fa6cb63ef834ddca9..130c0664afe1ae8dea9227d9c303b23d1a72b1b7 100644 --- a/Calorimeter/CaloConditions/CaloConditions/CaloBadChannel.h +++ b/Calorimeter/CaloConditions/CaloConditions/CaloBadChannel.h @@ -16,14 +16,9 @@ class CaloBadChannel { CaloBadChannel( BitWord rawStatus) : m_word(rawStatus) {} CaloBadChannel() : m_word(0) {} - CaloBadChannel(const CaloBadChannel& rBad) {m_word=rBad.m_word;} + CaloBadChannel(const CaloBadChannel& rBad) = default; CaloBadChannel(const CaloBadChannel* pBad) {m_word=pBad->m_word;} - CaloBadChannel& operator= (const CaloBadChannel& rBad) { - if (this != &rBad) { - m_word = rBad.m_word; - } - return *this; - } + CaloBadChannel& operator= (const CaloBadChannel& rBad) = default; bool statusOK( ProblemType pb) const { BitWord mask = 1 << (PosType) pb; diff --git a/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h b/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h index 9ebc8e53b6d8e10f18cf9335939500438fddc25a..4ee43eaa910ceae92b00f4a2752f01d73acf613b 100644 --- a/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h +++ b/Calorimeter/CaloConditions/CaloConditions/CaloLocalHadCoeff.h @@ -82,9 +82,13 @@ class CaloLocalHadCoeff { /** * @brief Copy constructor */ - LocalHadDimension(const LocalHadDimension &other); - LocalHadDimension& operator= (const LocalHadDimension &other); - + LocalHadDimension(const LocalHadDimension &other) = default; + LocalHadDimension& operator= (const LocalHadDimension &other) = default; + /** + * @brief Move constructor + */ + LocalHadDimension( LocalHadDimension &&) noexcept = default; + LocalHadDimension& operator= ( LocalHadDimension &&) noexcept = default; // access methods /// return dimension type @@ -157,8 +161,10 @@ class CaloLocalHadCoeff { /** * @brief Copy constructor */ - LocalHadArea(const LocalHadArea &other); - LocalHadArea& operator= (const LocalHadArea &other); + LocalHadArea(const LocalHadArea &other) = default; + LocalHadArea& operator= (const LocalHadArea &other) = default; + LocalHadArea( LocalHadArea &&other) noexcept = default; + LocalHadArea& operator= ( LocalHadArea &&other) noexcept = default; /// return area type inline unsigned int getType() const { return m_type; } @@ -220,8 +226,11 @@ class CaloLocalHadCoeff { /** * @brief Copy constructor. */ - CaloLocalHadCoeff(const CaloLocalHadCoeff &other); - CaloLocalHadCoeff& operator= (const CaloLocalHadCoeff &other); + CaloLocalHadCoeff(const CaloLocalHadCoeff &other) = default; + CaloLocalHadCoeff& operator= (const CaloLocalHadCoeff &other) = default; + //Move operators + CaloLocalHadCoeff(CaloLocalHadCoeff &&) noexcept = default; + CaloLocalHadCoeff& operator= (CaloLocalHadCoeff &&) noexcept = default; // // general access methods diff --git a/Calorimeter/CaloConditions/src/CaloLocalHadCoeff.cxx b/Calorimeter/CaloConditions/src/CaloLocalHadCoeff.cxx index 7b855389c18c768b69190214b58c17c1c5fc19cb..799829464168e3e1826f61e07bccce96f4fc7637 100644 --- a/Calorimeter/CaloConditions/src/CaloLocalHadCoeff.cxx +++ b/Calorimeter/CaloConditions/src/CaloLocalHadCoeff.cxx @@ -21,32 +21,6 @@ LocalHadDimension -> *************************************************************************** */ -// copy constructor -CaloLocalHadCoeff::LocalHadDimension::LocalHadDimension(const CaloLocalHadCoeff::LocalHadDimension &other) - : m_title (other.m_title), - m_type (other.m_type), - m_nbins (other.m_nbins), - m_xmin (other.m_xmin), - m_xmax (other.m_xmax), - m_dx (other.m_dx), - m_xbins (other.m_xbins) -{ -} - -CaloLocalHadCoeff::LocalHadDimension& -CaloLocalHadCoeff::LocalHadDimension::operator= (const CaloLocalHadCoeff::LocalHadDimension &other) -{ - if (this != &other) { - m_title = other.m_title; - m_type = other.m_type; - m_nbins = other.m_nbins; - m_xmin = other.m_xmin; - m_xmax = other.m_xmax; - m_dx = other.m_dx; - m_xbins = other.m_xbins; - } - return *this; -} // return bin number for cluster variable int CaloLocalHadCoeff::LocalHadDimension::getBin(float &x) const @@ -157,32 +131,6 @@ bool CaloLocalHadCoeff::isFilled(const int bin) const /* *************************************************************************** LocalHadArea -> *************************************************************************** */ -// copy constructor -CaloLocalHadCoeff::LocalHadArea::LocalHadArea(const CaloLocalHadCoeff::LocalHadArea &other) - : m_title (other.m_title), - m_type (other.m_type), - m_npars (other.m_npars), - m_offset (other.m_offset), - m_length (other.m_length), - m_dims (other.m_dims), - m_dims_loc (other.m_dims_loc) -{ -} - -CaloLocalHadCoeff::LocalHadArea& -CaloLocalHadCoeff::LocalHadArea::operator=(const CaloLocalHadCoeff::LocalHadArea &other) -{ - if (this != &other) { - m_title = other.m_title; - m_type = other.m_type; - m_npars = other.m_npars; - m_offset = other.m_offset; - m_length = other.m_length; - m_dims = other.m_dims; - m_dims_loc = other.m_dims_loc; - } - return *this; -} // add new dimension to the area void CaloLocalHadCoeff::LocalHadArea::addDimension(CaloLocalHadCoeff::LocalHadDimension &dim) @@ -214,27 +162,9 @@ CaloLocalHadCoeff // default constructor CaloLocalHadCoeff::CaloLocalHadCoeff() { - -} - -// copy constructor -CaloLocalHadCoeff::CaloLocalHadCoeff(const CaloLocalHadCoeff &other) - : m_title (other.m_title), - m_CoeffSet (other.m_CoeffSet), - m_AreaSet (other.m_AreaSet) -{ -} - - - -CaloLocalHadCoeff& CaloLocalHadCoeff::operator=(const CaloLocalHadCoeff &other) -{ - if (this != &other) { - m_AreaSet = other.m_AreaSet; - m_CoeffSet = other.m_CoeffSet; - m_title = other.m_title; - } - return *this; + static_assert(std::is_nothrow_move_constructible<CaloLocalHadCoeff>::value); + static_assert(std::is_nothrow_move_constructible<LocalHadArea>::value); + static_assert(std::is_nothrow_move_constructible<LocalHadDimension>::value); } diff --git a/Calorimeter/CaloRec/src/CaloTopoTmpHashCell.h b/Calorimeter/CaloRec/src/CaloTopoTmpHashCell.h index fab172c42a1b82fc84a477a9d64aece0dc3a172b..7bf262aa5dfcff5680cf96a4691db367ae84d69f 100644 --- a/Calorimeter/CaloRec/src/CaloTopoTmpHashCell.h +++ b/Calorimeter/CaloRec/src/CaloTopoTmpHashCell.h @@ -40,10 +40,7 @@ public: } - CaloTopoTmpHashCell(const CaloTopoTmpHashCell &other) - { - m_clusterCell = other.m_clusterCell; - } + CaloTopoTmpHashCell(const CaloTopoTmpHashCell &other) = default; CaloTopoTmpHashCell(T* clusterCell) @@ -58,13 +55,7 @@ public: return (m_clusterCell == other.m_clusterCell); } - CaloTopoTmpHashCell & operator=(const CaloTopoTmpHashCell & other) - { - if ( this != &other ) { - m_clusterCell = other.m_clusterCell; - } - return *this; - } + CaloTopoTmpHashCell & operator=(const CaloTopoTmpHashCell & other) = default; T * getCaloTopoTmpClusterCell() const { diff --git a/Control/AthLinks/AthLinks/ElementLinkVector.h b/Control/AthLinks/AthLinks/ElementLinkVector.h index a42364ea9683c553742fa6b09ae43db204ef3ad9..cf36100154b197ebce3ebb8fdb0adbfa53c0c262 100644 --- a/Control/AthLinks/AthLinks/ElementLinkVector.h +++ b/Control/AthLinks/AthLinks/ElementLinkVector.h @@ -187,7 +187,7 @@ public: /// \name vector constructors (no Allocators) //@{ - ElementLinkVector() : ElementLinkVectorBase() { } + ElementLinkVector(); ElementLinkVector(size_type n, const ElemLink& link) : ElementLinkVectorBase(), m_shortRefs(n, ElemLinkRef(link)) @@ -217,7 +217,7 @@ public: ElementLinkVectorBase( vec ), m_shortRefs(vec.m_shortRefs), m_hostDObjs(vec.m_hostDObjs) { } - ElementLinkVector(ElemLinkVec&& vec) : + ElementLinkVector(ElemLinkVec&& vec) noexcept : ElementLinkVectorBase( std::move(vec) ), m_shortRefs(std::move(vec.m_shortRefs)), m_hostDObjs(std::move(vec.m_hostDObjs)) { } @@ -233,7 +233,7 @@ public: return *this; } - ElementLinkVector& operator= (ElemLinkVec&& vec) + ElementLinkVector& operator= (ElemLinkVec&& vec) noexcept { if (this != &vec) { m_persKeys = std::move(vec.m_persKeys); @@ -416,6 +416,10 @@ private: }; // class ElementLinkVector +template <typename DOBJ> + ElementLinkVector<DOBJ>::ElementLinkVector() : ElementLinkVectorBase() { +} + /* * The following piece of code makes the Reflex dictionary think of * "ElementLinkVector< T, DataProxyStorage< T >, diff --git a/Control/AthLinks/test/ElementLink_test.cxx b/Control/AthLinks/test/ElementLink_test.cxx index 430cd90295d35b16149d71ed8795431b7d416444..1a603dbf050ccb209c9748b2104b39fbbd76abbf 100644 --- a/Control/AthLinks/test/ElementLink_test.cxx +++ b/Control/AthLinks/test/ElementLink_test.cxx @@ -672,6 +672,9 @@ void test3 (SGTest::TestStore& store) TestStore::sgkey_t sgkey = store.stringToKey ("foocont3", fooclid); + //Add check to see if Element link optimized for std::vector expansion + static_assert(std::is_nothrow_move_constructible<ElementLink<FooCont>>::value); + FooCont* foocont3 = new FooCont; for (int i=0; i < 4; i++) foocont3->push_back (new Foo(i+200)); diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/HandleKeyArray.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/HandleKeyArray.h new file mode 100644 index 0000000000000000000000000000000000000000..0908e71f27eacaf779284a2507df10b818643bd6 --- /dev/null +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/HandleKeyArray.h @@ -0,0 +1,139 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ASG_DATA_HANDLES_HANDLE_KEY_ARRAY_H +#define ASG_DATA_HANDLES_HANDLE_KEY_ARRAY_H + +#ifndef XAOD_STANDALONE +#include <StoreGate/HandleKeyArray.h> +#else + +#include "AsgDataHandles/VarHandleKeyArray.h" + +namespace SG { + + /** + * @class SG::HandleKeyArray<T> + * @brief class to hold an array of HandleKeys + * + * See StoreGate/HandleKeyArray for details. + * + * This currently (13 Aug 20) contains a number of commented out + * members that were part of the original handle implementation, but + * have not yet been implemented in the standalone version. The plan + * is to either implement or remove them, depending on what is needed + * in AnalysisBase as we add more packages. + */ + + template <class T_Handle, class T_HandleKey/*, Gaudi::DataHandle::Mode MODE*/> + class HandleKeyArray : public VarHandleKeyArrayCommon< T_HandleKey > { + public: + // /** + // * @brief default Constructor from a HandleKeyArray + // */ + // HandleKeyArray(){} + + // /** + // * @brief Constructor from a HandleKeyArray that takes a vector + // * of ReadHandleKeys + // * @param v vector of HandleKey + // */ + // HandleKeyArray( const std::vector<T_HandleKey>& v ) : + // VarHandleKeyArrayCommon<T_HandleKey> ( v ) {} + + // /** + // * @brief Constructor from a HandleKeyArray that takes an + // * initializer list of HandleKeys + // * @param l initializer list of HandleKey + // */ + // HandleKeyArray( std::initializer_list<T_HandleKey> l ): + // VarHandleKeyArrayCommon<T_HandleKey> {l} {} + + // /** + // * @brief Constructor from a HandleKeyArray that takes an + // * initializer list of std::strings. + // * @param l initializer list of std::strings used to create the + // * HandleKeys + // */ + // HandleKeyArray( std::initializer_list<std::string> key_names): + // VarHandleKeyArrayCommon<T_HandleKey> {key_names} {} + + /** + * @brief auto-declaring Property Constructor from a HandleKeyArray + * that takes an initializer list of std::strings, and associates the WHKA + * with the specified Property name + * @param name name of Property + * @param l initializer list of std::strings used to create the + * HandleKeys + * @param doc documentation string + */ + template <class OWNER> + inline HandleKeyArray( OWNER* owner, + std::string name, + std::initializer_list<std::string> l, + std::string doc="") : + VarHandleKeyArrayCommon<T_HandleKey> {l} { + owner->declareProperty(std::move(name), *this, std::move(doc)); + } + + + // /** + // * @brief return the type (Read/Write/Update) of handle + // */ + // Gaudi::DataHandle::Mode mode() const { return MODE; } + + /** + * @brief create a vector of Handles from the HandleKeys + * in the array + */ + std::vector< T_Handle > makeHandles() const { + std::vector< T_Handle > hndl; + typename std::vector<T_HandleKey>::const_iterator itr; + for (itr = this->begin(); itr != this->end(); ++itr) { + hndl.push_back ( T_Handle( *itr) ); + } + return hndl; + } + + // /** + // * @brief create a vector of Handles from the HandleKeys + // * in the array, with explicit EventContext. + // */ + // std::vector< T_Handle > makeHandles (const EventContext& ctx) const + // { + // std::vector< T_Handle > hndl; + // typename std::vector<T_HandleKey>::const_iterator itr; + // for (itr = this->begin(); itr != this->end(); ++itr) { + // hndl.push_back ( T_Handle( *itr, ctx) ); + // } + // return hndl; + // } + + }; + +} // namespace SG + +namespace asg +{ + namespace detail + { + template<typename T> struct GetStringHelper; + + template<typename T1,typename T2> struct GetStringHelper<SG::HandleKeyArray<T1,T2> > + : public GetStringHelper<std::vector<T2> > + { + }; + + template<typename T> struct SetStringHelper; + + template<typename T1,typename T2> struct SetStringHelper<SG::HandleKeyArray<T1,T2> > + : public SetStringHelper<std::vector<T2> > + { + }; + } +} + +#endif + +#endif diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.h index de53f22450117dcbb087af8722f5eaa462092699..8def1a1c230d8be24d36b14044e870e32579bacd 100644 --- a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.h +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.h @@ -50,12 +50,12 @@ public: // - // /** - // * @brief Default constructor. - // * - // * The handle will not be usable until a non-blank key is assigned. - // */ - // ReadHandle(); + /** + * @brief Default constructor. + * + * The handle will not be usable until a non-blank key is assigned. + */ + ReadHandle() = default; /** @@ -134,6 +134,14 @@ public: const_pointer_type get (const EventContext& ctx) const; + /** + * @brief Is the referenced object present in SG? + * + * Const method; the handle does not change as a result of this. + */ + bool isPresent() const; + + /** * @brief Is the referenced object present in SG? * @param key SG key to test. diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.icc b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.icc index f35c97693e2b7378288eeb824940d6f5870ff352..f351894667bb15a46fbb4b0d81fb28cbab6c4f1c 100644 --- a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.icc +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandle.icc @@ -174,6 +174,18 @@ ReadHandle<T>::get (const EventContext& /*ctx*/) const } +/** +* @brief Is the referenced object present in SG? +* +* Const method; the handle does not change as a result of this. +*/ +template <class T> +bool ReadHandle<T>::isPresent() const +{ +return isPresent_impl (key()); +} + + /** * @brief Is the referenced object present in SG? * @param key SG key to test. diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandleKeyArray.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandleKeyArray.h new file mode 100644 index 0000000000000000000000000000000000000000..217824acc2b183a2372b97f52610b5fb1b337626 --- /dev/null +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/ReadHandleKeyArray.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ASG_DATA_HANDLES_READ_HANDLE_KEY_ARRAY_H +#define ASG_DATA_HANDLES_READ_HANDLE_KEY_ARRAY_H + +#ifndef XAOD_STANDALONE +#include "StoreGate/ReadHandleKeyArray.h" +#else + +#include "AsgDataHandles/HandleKeyArray.h" + +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/ReadHandle.h" + +namespace SG { + + /** + * @class SG::ReadHandleKeyArray<T> + * @brief class to hold an array of ReadHandleKeys + * + * See StoreGate/ReadHandleKeyArray for details. + * + * This currently (13 Aug 20) contains a commented out template + * argument that was part of the original handle implementation, but + * has not yet been implemented in the standalone version. The plan + * is to either implement or remove them, depending on what is + * needed in AnalysisBase as we add more packages. + */ + template <class T> + using ReadHandleKeyArray = HandleKeyArray<ReadHandle<T>, ReadHandleKey<T>/*, Gaudi::DataHandle::Reader*/ >; + + +} // namespace SG + +#endif + +#endif diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleBase.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleBase.h index 4813b8d60e8de68f92912e247dc399b5294a6966..c833a27cfcb2fca0e732c5dbec03625ce7bcf8ca 100644 --- a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleBase.h +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleBase.h @@ -42,6 +42,13 @@ namespace SG { { public: + /** + * @brief Default constructor. + * + * The handle will not be usable until a non-blank key is assigned. + */ + VarHandleBase() = default; + /** * @brief Constructor from a VarHandleKey. * @param key The key object holding the clid/key/store. diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.h new file mode 100644 index 0000000000000000000000000000000000000000..868f200abd3cb2fb0a48b8c2d359ccdaa64cfa3e --- /dev/null +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.h @@ -0,0 +1,173 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ASG_DATA_HANDLES_VAR_HANDLE_KEY_ARRAY_H +#define ASG_DATA_HANDLES_VAR_HANDLE_KEY_ARRAY_H + +#ifndef XAOD_STANDALONE +#include <StoreGate/VarHandleKeyArray.h> +#else + +/** + * @file StoreGate/VarHandleKeyArray.h + * @author Nils Krumnack <Nils.Erik.Krumnack@cern.h> + * @author C. Leggett (for original version) + * @brief Base class for VarHandleKeyArray for reading from StoreGate. + */ + +#include <AsgMessaging/StatusCode.h> +#include <vector> +#include <string> + +namespace SG { + + /** + * @class SG::VarHandleKeyArray<T> + * @brief untemplated base class for VarHandleKeyArrays + * + * See StoreGate/VarHandleKeyArray for details. + * + * This currently (13 Aug 20) contains a number of commented out + * members that were part of the original handle implementation, but + * have not yet been implemented in the standalone version. The plan + * is to either implement or remove them, depending on what is needed + * in AnalysisBase as we add more packages. + */ + class VarHandleKeyArray { + public: + VarHandleKeyArray(){}; + virtual ~VarHandleKeyArray() = default; + // virtual StatusCode assign(const std::vector<std::string>& vs)=0; + virtual std::string toString() const = 0; + // virtual Gaudi::DataHandle::Mode mode() const = 0; + + // virtual std::vector<SG::VarHandleKey*> keys() const = 0; + + // virtual void renounce() = 0; + // virtual bool renounced() const = 0; + // virtual void declare(IDataHandleHolder*) = 0; + + // virtual void setOwner( IDataHandleHolder* o ) = 0; + // virtual const IDataHandleHolder* owner() const = 0; + // virtual IDataHandleHolder* owner() = 0; + + }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +// mixin class for common functionality +// + + /** + * @class SG::VarHandleKeyArrayCommon<T> + * @brief mixin base class for VarHandleKeyArrays, inheriting from + * std::vector as well as VarHandleKeyArray to provide vector-like + * access + * + * See StoreGate/VarHandleKeyArrayCommon for details. + * + * This currently (13 Aug 20) contains a number of commented out + * members that were part of the original handle implementation, but + * have not yet been implemented in the standalone version. The plan + * is to either implement or remove them, depending on what is needed + * in AnalysisBase as we add more packages. + * + */ + + template <class Base> + class VarHandleKeyArrayCommon : public VarHandleKeyArray, + public std::vector<Base> { + public: + /** + * @brief default base Constructor of mixin + * + */ + VarHandleKeyArrayCommon() : std::vector<Base>() {}; + + /** + * @brief base Constructor from a VarHandleKeyArray that takes a vector + * @param v vector of Read/Write/UpdateHandleKey + */ + VarHandleKeyArrayCommon( const std::vector<Base>& v ): + std::vector<Base>(v) {}; + + /** + * @brief base Constructor from a VarHandleKeyArray that takes an + * initializer list of VarHandleKeys + * @param l initializer list of Read/Write/UpdateHandleKey + */ + VarHandleKeyArrayCommon( std::initializer_list<Base> l ): + std::vector<Base>{l} {}; + + /** + * @brief base Constructor from a VarHandleKeyArray that takes an + * initializer list of std::strings. + * @param l initializer list of std::strings used to create the + * VarHandleKeys + */ + VarHandleKeyArrayCommon( std::initializer_list<std::string> l ) { + for (auto &e : l) { + this->push_back( Base{e} ); + } + } + + /** + * @brief forward the initialization to the member VarHandleKeys + * @param used If false, then this handle is not to be used. + * Instead of normal initialization, the key will be cleared. + */ + StatusCode initialize (bool used = true); + + // /** + // * @brief Set the contents of the VarHandleKeyArray from a + // * vector of std::strings + // * @param vs vector of initializer strings + // */ + // virtual StatusCode assign(const std::vector<std::string>& vs) override; + + /** + * @brief string representation of the VarHandleKeyArray + */ + virtual std::string toString() const override; + + // /** + // * @brief create array of all base VarHandleKeys in the Array + // */ + // virtual std::vector<SG::VarHandleKey*> keys() const override; + + + // /** + // * @brief if called, handles will not be declared in the algorithm I/O + // */ + // virtual void renounce() override { m_isRenounced = true; } + + // /** + // * @brief query renounced state + // **/ + // virtual bool renounced() const override { return m_isRenounced; } + + // virtual void declare( IDataHandleHolder* ) override; + + // virtual void setOwner( IDataHandleHolder* o ) override { m_owner = o; } + // virtual const IDataHandleHolder* owner() const override { return m_owner; } + // virtual IDataHandleHolder* owner() override { return m_owner; } + + private: + + // bool m_isRenounced{ false }; + // IDataHandleHolder* m_owner{ nullptr }; + + }; + +} // namespace SG + +namespace std { + ostream& operator<<(ostream& s, const SG::VarHandleKeyArray& m); +} + + +#include "AsgDataHandles/VarHandleKeyArray.icc" + +#endif + +#endif diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.icc b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.icc new file mode 100644 index 0000000000000000000000000000000000000000..d682c50ba5fa6fd1d42e1e730d23c257dd300a32 --- /dev/null +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/VarHandleKeyArray.icc @@ -0,0 +1,105 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + + +#include <sstream> + + +namespace SG { + /** + * @brief forward the initialization to the member VarHandleKeys + * @param used If false, then this handle is not to be used. + * Instead of normal initialization, the key will be cleared. + */ + template <class Base> + inline + StatusCode VarHandleKeyArrayCommon<Base>::initialize (bool used /*= true*/) { + StatusCode sc(StatusCode::SUCCESS); + if (used) { + // IDataHandleHolder* const owner = this->owner(); + for (Base& b : *this) { + // if (owner != nullptr) { + // b.setOwner(owner); + // } + if ( b.initialize().isFailure() ) { + sc = StatusCode::FAILURE; + } + } + } + else { + this->clear(); + } + return sc; + } + + // // + // // Set the VarHandleKey from a string + // // + // template <class Base> + // inline + // StatusCode VarHandleKeyArrayCommon<Base>::assign(const std::vector<std::string>& vs) { + // StatusCode sc(StatusCode::SUCCESS); + // this->clear(); + // for (auto & s : vs) { + // Base b; + // if (!b.assign(s)) { + // sc = StatusCode::FAILURE; + // } else { + // // Skip blank keys + // if (b.key() != "") { + // this->push_back(b); + // } + // } + // } + // return sc; + // } + + // + // string representation of VarHandleKeyArray + // + template <class Base> + inline + std::string VarHandleKeyArrayCommon<Base>::toString() const { + std::ostringstream ost; + typename std::vector<Base>::const_iterator itr; + itr = this->begin(); + size_t sz = this->size(); + for ( size_t i=0; i < sz; ++i, ++itr) { + // ost << "'" << itr->objKey() << "'"; + ost << "'" << itr->key() << "'"; + if (i != sz-1) { + ost << ","; + } + } + return ost.str(); + } + + // // + // // create array of all base VarHandleKeys in the Array + // // + // template <class Base> + // inline + // std::vector<SG::VarHandleKey*> VarHandleKeyArrayCommon<Base>::keys() const { + // std::vector<SG::VarHandleKey*> keys; + // for (const SG::VarHandleKey& k : *this) { + // // FIXME: This is a rule violation, but we can't really fix it without + // // changing the IDataHandleHolder base class from Gaudi. + // SG::VarHandleKey* k_nc ATLAS_THREAD_SAFE = const_cast<SG::VarHandleKey*>(&k); + // keys.push_back (k_nc); + // } + // return keys; + // } + + // template <class Base> + // inline + // void VarHandleKeyArrayCommon<Base>::declare(IDataHandleHolder* owner) { + // if ( renounced() ) { + // return; + // } + // for (auto k: keys() ) { + // owner->declare ( *k ); + // k->setOwner( owner ); + // } + // } +} diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.h b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.h index c9eca0dcfd6881c73cf1282f28be09290bbf74c8..09cdf8b738dc88b38f2fb8badfa9d2b20bf476cf 100644 --- a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.h +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.h @@ -141,11 +141,11 @@ public: // pointer_type operator->(); - // /** - // * @brief Dereference the pointer. - // * Returns the cached pointer. Throws ExcNullWriteHandle if null. - // */ - // reference_type operator*(); + /** + * @brief Dereference the pointer. + * Returns the cached pointer. Throws ExcNullWriteHandle if null. + */ + reference_type operator*(); // /** @@ -168,10 +168,10 @@ public: // pointer_type cachedPtr(); - // /** - // * @brief Can the handle be successfully dereferenced? - // */ - // virtual bool isValid() override final; + /** + * @brief Can the handle be successfully dereferenced? + */ + bool isValid(); //************************************************************************ @@ -179,11 +179,11 @@ public: // - // /** - // * @brief Record a const object to the store. - // * @param data The object to record. - // */ - // StatusCode record (std::unique_ptr<T> data); + /** + * @brief Record a const object to the store. + * @param data The object to record. + */ + StatusCode record (std::unique_ptr<T> data); // /** @@ -231,22 +231,22 @@ public: // StatusCode recordNonConst (SG::DataObjectSharedPtr<T> data); - // /** - // * @brief Record an object to the store. - // * @param data The object to record. - // * @param returnExisting Allow an existing object? - // * - // * Unlike record(), this does not change the handle object. - // * That means that one will not be able to get the object back - // * by dereferencing the handle. - // * Returns the object placed in the store, or nullptr if there - // * was an error. - // * If there was already an object in the store with the given key, - // * then return null, unless @c returnExisting is true, in which case - // * return success. In either case, @c data is destroyed. - // */ - // const_pointer_type put (std::unique_ptr<T> data, - // bool returnExisting = false) const; + /** + * @brief Record an object to the store. + * @param data The object to record. + * @param returnExisting Allow an existing object? + * + * Unlike record(), this does not change the handle object. + * That means that one will not be able to get the object back + * by dereferencing the handle. + * Returns the object placed in the store, or nullptr if there + * was an error. + * If there was already an object in the store with the given key, + * then return null, unless @c returnExisting is true, in which case + * return success. In either case, @c data is destroyed. + */ + const_pointer_type put (std::unique_ptr<T> data/*, + bool returnExisting = false*/) const; // /** @@ -630,6 +630,9 @@ private: // /// set it const on the record, but instead set this and do the // /// setConst in the destructor. // SG::DataProxy* m_lockAuxPending = nullptr; + + /// the cached pointer we recorded + T *m_ptr {nullptr}; }; diff --git a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.icc b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.icc index a4df5df2e34646e81522ffc8d1de6d0d4c139b74..16a98097c0a9efed69f5432334dd7c5aaceb5a5a 100644 --- a/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.icc +++ b/Control/AthToolSupport/AsgDataHandles/AsgDataHandles/WriteHandle.icc @@ -171,17 +171,19 @@ WriteHandle<T>::~WriteHandle() // } -// /** -// * @brief Dereference the pointer. -// * Returns the cached pointer. Throws ExcNullWriteHandle if null. -// */ -// template <class T> -// inline -// typename WriteHandle<T>::reference_type -// WriteHandle<T>::operator*() -// { -// return *WriteHandle<T>::checkedCachedPtr(); -// } +/** + * @brief Dereference the pointer. + * Returns the cached pointer. Throws ExcNullWriteHandle if null. + */ +template <class T> +inline +typename WriteHandle<T>::reference_type +WriteHandle<T>::operator*() +{ + if (m_ptr == nullptr) + throw std::runtime_error ("dereferenced handle is null: " + key()); + return *m_ptr; +} // /** @@ -222,32 +224,35 @@ WriteHandle<T>::~WriteHandle() // } -// /** -// * @brief Can the handle be successfully dereferenced? -// */ -// template <class T> -// inline -// bool WriteHandle<T>::isValid() -// { -// return this->m_ptr != nullptr; -// } +/** + * @brief Can the handle be successfully dereferenced? + */ +template <class T> +inline +bool WriteHandle<T>::isValid() +{ + return this->m_ptr != nullptr; +} //************************************************************************ // Record. -// /** -// * @brief Record a const object to the store. -// * @param data The object to record. -// */ -// template <class T> -// inline -// StatusCode -// WriteHandle<T>::WriteHandle::record (std::unique_ptr<T> data) -// { -// return this->doRecord (std::move(data), true, false); -// } +/** + * @brief Record a const object to the store. + * @param data The object to record. + */ +template <class T> +inline +StatusCode +WriteHandle<T>::WriteHandle::record (std::unique_ptr<T> data) +{ + m_ptr = data.get(); + if (xAOD::TActiveStore::store()->record (std::move (data), key()).isFailure()) + return StatusCode::FAILURE; + return StatusCode::SUCCESS; +} // /** @@ -276,6 +281,7 @@ StatusCode WriteHandle<T>::WriteHandle::record (std::unique_ptr<T> data, std::unique_ptr<AUXSTORE> auxstore) { + m_ptr = data.get(); if (xAOD::TActiveStore::store()->record (std::move (auxstore), key() + "Aux.").isFailure()) return StatusCode::FAILURE; if (xAOD::TActiveStore::store()->record (std::move (data), key()).isFailure()) @@ -330,29 +336,31 @@ WriteHandle<T>::WriteHandle::record (std::unique_ptr<T> data, // } -// /** -// * @brief Record an object to the store. -// * @param data The object to record. -// * @param returnExisting Allow an existing object? -// * -// * Unlike record(), this does not change the handle object. -// * That means that one will not be able to get the object back -// * by dereferencing the handle. -// * Returns the object placed in the store, or nullptr if there -// * was an error. -// * If there was already an object in the store with the given key, -// * then return null, unless @c returnExisting is true, in which case -// * return success. In either case, @c data is destroyed. -// */ -// template <class T> -// inline -// typename WriteHandle<T>::const_pointer_type -// WriteHandle<T>::put (std::unique_ptr<T> data, -// bool returnExisting /*= false*/) const -// { -// IProxyDict* store = nullptr; -// return doPut (nullptr, std::move(data), returnExisting, store); -// } +/** + * @brief Record an object to the store. + * @param data The object to record. + * @param returnExisting Allow an existing object? + * + * Unlike record(), this does not change the handle object. + * That means that one will not be able to get the object back + * by dereferencing the handle. + * Returns the object placed in the store, or nullptr if there + * was an error. + * If there was already an object in the store with the given key, + * then return null, unless @c returnExisting is true, in which case + * return success. In either case, @c data is destroyed. + */ +template <class T> +inline +typename WriteHandle<T>::const_pointer_type +WriteHandle<T>::put (std::unique_ptr<T> data/*, + bool returnExisting / *= false*/) const +{ + const_pointer_type result = data.get(); + if (xAOD::TActiveStore::store()->record (std::move (data), key()).isFailure()) + throw std::runtime_error ("failed to record object: " + key()); + return result; +} // /** diff --git a/Control/AthToolSupport/AsgDataHandles/Root/VarHandleKeyArray.cxx b/Control/AthToolSupport/AsgDataHandles/Root/VarHandleKeyArray.cxx new file mode 100644 index 0000000000000000000000000000000000000000..49fec6e74e0e9986c8280972e3356cf04143aff4 --- /dev/null +++ b/Control/AthToolSupport/AsgDataHandles/Root/VarHandleKeyArray.cxx @@ -0,0 +1,70 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifdef XAOD_STANDALONE + +#include "AsgDataHandles/VarHandleKeyArray.h" + +// namespace Gaudi { +// namespace Parsers { + + +// /** +// * @brief Gaudi function used to initialize a property from a string. +// * @param v The object to initialize. +// * @param s The string from which to initialize. +// * +// * Used during Gaudi property handling to set object @c v from the string @c s. +// * Note that @c s is a representation of the property setting; thus, in the +// * case of setting a property from a string, @c s will contain quote marks. +// */ +// StatusCode +// GAUDI_API +// parse(SG::VarHandleKeyArray& v, const std::string& s) +// { +// std::vector<std::string> vp; +// StatusCode sc = Gaudi::Parsers::parse(vp, s); + +// if (sc.isSuccess()) +// sc = v.assign( vp ); + +// return sc; +// } + +// } //> ns Parsers + +// namespace Utils { + + +// /** +// * @brief Gaudi function used to convert a property to a string. +// * @param v The object to convert. +// * @param o Stream to which to do the conversion. +// * +// * Used during Gaudi property handling to get a string representation of @c v. +// * Note that if the representation is a string, it should be surrounded +// * by quote marks. +// */ +// std::ostream& +// GAUDI_API +// toStream(const SG::VarHandleKeyArray& v, std::ostream& o) +// { +// o << "[" << v.toString() << "]"; +// return o; +// } + +// } //> ns Utils +// } //> ns Gaudi + + + + +namespace std { + ostream& operator<<(ostream& s, const SG::VarHandleKeyArray& m) { + s << "[" << m.toString() << "]"; + return s; + } +} + +#endif diff --git a/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/DataHandleTestTool.h b/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/DataHandleTestTool.h index 50ebcd680701cdac544cccac3a5c479b6e147e2d..6f8489f0ebfdd9ae7ea2295f1d6ba5c5f77004bb 100644 --- a/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/DataHandleTestTool.h +++ b/Control/AthToolSupport/AsgExampleTools/AsgExampleTools/DataHandleTestTool.h @@ -12,6 +12,7 @@ #include <AsgTools/AsgTool.h> #include <AsgExampleTools/IDataHandleTestTool.h> #include <AsgDataHandles/ReadHandleKey.h> +#include <AsgDataHandles/ReadHandleKeyArray.h> #include <AsgDataHandles/ReadDecorHandleKey.h> #include <AsgDataHandles/WriteHandleKey.h> @@ -52,9 +53,11 @@ namespace asg #ifndef SIMULATIONBASE SG::ReadHandleKey<xAOD::MuonContainer> m_readKey {this, "readKey", "Muons", "regular read key"}; SG::ReadDecorHandleKey<xAOD::MuonContainer> m_readDecorKey {this, "readDecorKey", "Muons.pt", "read decor key"}; + SG::ReadHandleKeyArray<xAOD::MuonContainer> m_readKeyArray {this, "readKeyArray", {}, "array read key"}; SG::WriteHandleKey<xAOD::MuonContainer> m_writeKey {this, "writeKey", "", "regular write key"}; #endif bool m_readFailure {false}; + bool m_readArray {false}; bool m_readDecorFailure {false}; std::string m_doWriteName; }; diff --git a/Control/AthToolSupport/AsgExampleTools/Root/DataHandleTestTool.cxx b/Control/AthToolSupport/AsgExampleTools/Root/DataHandleTestTool.cxx index 8193fd471e4d5dd844297b0619c4f394585b6579..d7fa05bab3a299203b38cc0ecc6d86aaef5a9ab2 100644 --- a/Control/AthToolSupport/AsgExampleTools/Root/DataHandleTestTool.cxx +++ b/Control/AthToolSupport/AsgExampleTools/Root/DataHandleTestTool.cxx @@ -35,6 +35,7 @@ namespace asg { declareProperty ("readFailure", m_readFailure, "whether to expect a read failure"); declareProperty ("readDecorFailure", m_readDecorFailure, "whether to expect a read decoration failure"); + declareProperty ("readArray", m_readArray, "whether to read from the array"); declareProperty ("doWriteName", m_doWriteName, "if we should write, the name we expect to write to"); } @@ -55,6 +56,7 @@ namespace asg ANA_CHECK (m_readDecorKey.initialize ()); if (!m_writeKey.empty()) ANA_CHECK (m_writeKey.initialize ()); + ANA_CHECK (m_readKeyArray.initialize()); #endif return StatusCode::SUCCESS; } @@ -73,10 +75,12 @@ namespace asg auto readHandle = makeHandle (m_readKey); if (m_readFailure == true) { + EXPECT_FALSE (readHandle.isPresent()); EXPECT_EQ (nullptr, readHandle.get()); EXPECT_FALSE (readHandle.isValid()); } else { + EXPECT_TRUE (readHandle.isPresent()); EXPECT_EQ (muonsStore, readHandle.get()); EXPECT_TRUE (readHandle.isValid()); } @@ -91,6 +95,16 @@ namespace asg EXPECT_EQ (acc (*testMuon), readDecorHandle (*testMuon)); } + if (m_readArray) + { + EXPECT_EQ (1u, m_readKeyArray.size()); + auto handles = m_readKeyArray.makeHandles(); + EXPECT_EQ (muonsStore, handles[0].get()); + } else + { + EXPECT_EQ (0u, m_readKeyArray.size()); + } + if (!m_doWriteName.empty()) { auto writeHandle = makeHandle (m_writeKey); diff --git a/Control/AthToolSupport/AsgExampleTools/test/gt_DataHandlesTest.cxx b/Control/AthToolSupport/AsgExampleTools/test/gt_DataHandlesTest.cxx index 74f2a8e1db31b4d8b5f4415dea2659f795745c11..2122e8f24fb7c46fbbb50fe3bf12170dc69712ff 100644 --- a/Control/AthToolSupport/AsgExampleTools/test/gt_DataHandlesTest.cxx +++ b/Control/AthToolSupport/AsgExampleTools/test/gt_DataHandlesTest.cxx @@ -117,6 +117,17 @@ namespace asg + // test that the read-key-array works + TEST_F (DataHandlesTest, read_array) + { + config.setPropertyFromString ("readKeyArray", "['Muons']"); + config.setPropertyFromString ("readArray", "1"); + ASSERT_SUCCESS (config.makeTool (tool, cleanup)); + tool->runTest (); + } + + + // do a write handle test TEST_F (DataHandlesTest, write_handle) { diff --git a/Control/AthToolSupport/AsgTools/AsgTools/PropertyWrapper.h b/Control/AthToolSupport/AsgTools/AsgTools/PropertyWrapper.h new file mode 100644 index 0000000000000000000000000000000000000000..9d69b11ff61cd5cab09791b0306dea977e9fa230 --- /dev/null +++ b/Control/AthToolSupport/AsgTools/AsgTools/PropertyWrapper.h @@ -0,0 +1,96 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +/// @author Nils Krumnack + + + +#ifndef ASG_TOOLS__PROPERTY_WRAPPER_H +#define ASG_TOOLS__PROPERTY_WRAPPER_H + + +#ifdef XAOD_STANDALONE + +#include <iosfwd> +#include <string> +#include <utility> + +namespace Gaudi +{ + /// \brief this is the standalone version of the \ref + /// Gaudi::Property wrapper + /// + /// This makes it simpler to declare properties by just wrapping the + /// property in this template and then using the inline constructor + /// for it in the class definition: + /// ``` + /// Gaudi::Property<int> m_property { + /// this, "propertyName", startingValue, "property description"}; + /// ``` + + template<typename T> class Property final + { + public: + template<typename T2> + Property (T2 *owner, const std::string& name, const T& value, + const std::string& title = ""); + + public: + template<typename T2> + Property (T2 *owner, const std::string& name, T&& value, + const std::string& title = ""); + + public: + operator const T& () const noexcept; + + private: + T m_value; + }; + + + + /// Template Methods + /// ================ + + template<typename T> template<typename T2> + Property<T> :: + Property (T2 *owner, const std::string& name, const T& value, + const std::string& title) + : m_value (value) + { + owner->declareProperty (name, m_value, title); + } + + + + template<typename T> template<typename T2> + Property<T> :: + Property (T2 *owner, const std::string& name, T&& value, + const std::string& title) + : m_value (std::move (value)) + { + owner->declareProperty (name, m_value, title); + } + + + + template<typename T> + Property<T> :: + operator const T& () const noexcept + { + return m_value; + } + + + + template<typename T> + std::ostream& operator << (std::ostream& str, const Property<T>& property) + { + return str << property.operator const T&(); + } +} + +#endif + +#endif diff --git a/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.h b/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.h index df8abf5522b8e03142fa3ac319462348bfba9cde..b9f73f58ec201cab1e1535eb5de0dd454f8107e9 100644 --- a/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.h +++ b/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.h @@ -86,6 +86,12 @@ public: /// Constructor from a tool name. ToolHandle( const std::string& toolname, INamedInterface* parent = 0 ); + /// Constructor declaring a property + template<typename T2> + ToolHandle (T2 *parent, const std::string& propertyName, + const std::string& toolName, + const std::string& propertyTitle = ""); + /// Dereferencing operator T& operator*(); /// Dereferencing operator @@ -100,6 +106,9 @@ public: /// Returns success if pointer is non-null and of the correct type. StatusCode retrieve() const; + /// Clear out the tool + void disable () noexcept; + /// Return true if tool has no pointer or name bool empty() const; @@ -108,7 +117,7 @@ public: private: /// Pointer to the tool - mutable T* m_ptool; + mutable T* m_ptool {nullptr}; }; // class ToolHandle diff --git a/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.icc b/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.icc index 7986a16352a97385bb7626cce1b901325a2490bc..bebde6798056c8d1211d9a97eb1856dd4d839be3 100644 --- a/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.icc +++ b/Control/AthToolSupport/AsgTools/AsgTools/ToolHandle.icc @@ -27,6 +27,16 @@ ToolHandle< T >::ToolHandle( const std::string& typeAndName, INamedInterface* pa } +template<typename T> template<typename T2> +ToolHandle<T> :: +ToolHandle (T2 *parent, const std::string& propertyName, + const std::string& toolName, + const std::string& propertyTitle) + : ToolHandle (toolName, parent) +{ + parent->declareProperty (propertyName, *this, propertyTitle); +} + template< class T > T& ToolHandle< T >::operator*() { @@ -114,6 +124,11 @@ StatusCode ToolHandle< T >::retrieve() const { } } +template< class T > +void ToolHandle< T >::disable () noexcept { + m_ptool = nullptr; +} + template< class T > bool ToolHandle< T >::empty() const { diff --git a/Control/AthenaCommon/share/bootstrap.pkl b/Control/AthenaCommon/share/bootstrap.pkl index f47ca3833841c2222ba5eff3774e56b02fa40232..044ddef8f837497bc320600ffa749dc69f6670cd 100644 Binary files a/Control/AthenaCommon/share/bootstrap.pkl and b/Control/AthenaCommon/share/bootstrap.pkl differ diff --git a/Control/AthenaCommon/share/bootstrap_threaded.pkl b/Control/AthenaCommon/share/bootstrap_threaded.pkl index d5cf4a78df80454ca1d06794a68f2994c2bcc026..b3064d2da12442802dbb8bdf73140b05893e90a5 100644 Binary files a/Control/AthenaCommon/share/bootstrap_threaded.pkl and b/Control/AthenaCommon/share/bootstrap_threaded.pkl differ diff --git a/Control/AthenaConfiguration/python/DetectorConfigFlags.py b/Control/AthenaConfiguration/python/DetectorConfigFlags.py index 7e8fa160fb2b1c99fc2f94393caefe2f35f3bb13..b66f9323971b6cb2a518a79a94452f60978a0c66 100644 --- a/Control/AthenaConfiguration/python/DetectorConfigFlags.py +++ b/Control/AthenaConfiguration/python/DetectorConfigFlags.py @@ -133,9 +133,15 @@ def createDetectorConfigFlags(): prevFlags.Detector.OverlaysTGC or prevFlags.Detector.OverlayMM)) dcf.addFlag('Detector.Overlay', lambda prevFlags : (prevFlags.Detector.OverlayID or prevFlags.Detector.OverlayCalo or prevFlags.Detector.OverlayMuon)) - # flag to generally turn off the Pixel detector - # TODO: can these replace other (more fine-grained) flags that only turned off subdetector systems for certain tasks (e.g. DCS)? - dcf.addFlag('Detector.PixelOn', True) - dcf.addFlag('Detector.SCTOn', True) - dcf.addFlag('Detector.TRTOn', True) + + dcf.addFlag('Detector.RecoBCM', False) + dcf.addFlag('Detector.RecoIBL', lambda prevFlags : (prevFlags.Detector.RecoPixel and prevFlags.GeoModel.Run in ["RUN2", "RUN3"])) # TODO Review if a separate RecoIBL flag is really required here + dcf.addFlag('Detector.RecoPixel', False) + dcf.addFlag('Detector.RecoSCT', False) + dcf.addFlag('Detector.RecoTRT', False) + dcf.addFlag('Detector.RecoID', lambda prevFlags : (prevFlags.Detector.RecoBCM or prevFlags.Detector.RecoIBL or + prevFlags.Detector.RecoPixel or prevFlags.Detector.RecoSCT or + prevFlags.Detector.RecoTRT)) +# dcf.addFlag('Detector.Reco', lambda prevFlags : (prevFlags.Detector.RecoID or prevFlags.Detector.RecoCalo or +# prevFlags.Detector.RecoMuon)) return dcf diff --git a/Control/AthenaKernel/AthenaKernel/DataBucket.icc b/Control/AthenaKernel/AthenaKernel/DataBucket.icc index 5c6b33972b86ce8b1068ec4f3144d64dd698a07a..8c67051d2897b7ea5c89af95b0603c4d04d0ac96 100755 --- a/Control/AthenaKernel/AthenaKernel/DataBucket.icc +++ b/Control/AthenaKernel/AthenaKernel/DataBucket.icc @@ -55,7 +55,7 @@ void db_free_ptr (T* ptr, std::true_type) /////////////////////////////////////////////////////////////////////////////// // CONSTRUCTORS /////////////////////////////////////////////////////////////////////////////// -template <typename T> +template <typename T> SG::DataBucket<T>::DataBucket(T* data) : m_ptr(data) { @@ -77,7 +77,7 @@ SG::DataBucket<T>::DataBucket(std::unique_ptr<U> data) { } -template <typename T> +template <typename T> SG::DataBucket<T>::DataBucket(SG::DataObjectSharedPtr<T> data) : m_ptr(data.detach()) { @@ -86,11 +86,11 @@ SG::DataBucket<T>::DataBucket(SG::DataObjectSharedPtr<T> data) /////////////////////////////////////////////////////////////////////////////// // DATAOBJECT /////////////////////////////////////////////////////////////////////////////// -template <typename T> -const CLID& SG::DataBucket<T>::clID() const {return classID();} +template <typename T> +const CLID& SG::DataBucket<T>::clID() const {return classID();} -template <typename T> -const CLID& SG::DataBucket<T>::classID() { +template <typename T> +const CLID& SG::DataBucket<T>::classID() { typedef typename std::remove_pointer<T>::type BareTp; typedef typename std::remove_const<BareTp>::type BareT; return ClassID_traits<BareT>::ID(); @@ -105,7 +105,7 @@ const CLID& SG::DataBucket<T>::classID() { * @param irt To be called if we make a new instance. * @param isConst True if the object being converted is regarded as const. */ -template <typename T> +template <typename T> void* SG::DataBucket<T>::cast (CLID clid, IRegisterTransient* irt /*= 0*/, @@ -150,7 +150,7 @@ SG::DataBucket<T>::cast (CLID clid, * @param irt To be called if we make a new instance. * @param isConst True if the object being converted is regarded as const. */ -template <typename T> +template <typename T> void* SG::DataBucket<T>::cast (const std::type_info& tinfo, IRegisterTransient* irt /*= 0*/, bool isConst /*= true*/) @@ -182,8 +182,13 @@ void* SG::DataBucket<T>::cast (const std::type_info& tinfo, return 0; } -template <typename T> -SG::DataBucket<T>::~DataBucket() +// The DataBucket descructor is put into an explicit namespace scope to get rid +// of a pesky warning from DPC++. Unfortunately Clang has an issue with the +// class name having a scope declaration on the destructor for some reason. +namespace SG { + +template <typename T> +DataBucket<T>::~DataBucket() { // Delete any copies. vec_t::iterator end = m_cnvcopies.end(); @@ -198,6 +203,8 @@ SG::DataBucket<T>::~DataBucket() SG::db_free_ptr(m_ptr, tag()); } +} // namespace SG + namespace { @@ -228,4 +235,3 @@ void SG::DataBucket<T>::lock() { call_lock (m_ptr, typename std::is_polymorphic<T>::type()); } - diff --git a/Control/SGTools/SGTools/safe_clid.h b/Control/AthenaKernel/AthenaKernel/tools/safe_clid.h similarity index 82% rename from Control/SGTools/SGTools/safe_clid.h rename to Control/AthenaKernel/AthenaKernel/tools/safe_clid.h index 5e2d36b25abc2030ba6e6059bfdad329bf9c7852..1e58a4d938558f96c24a98347dfb5f4f21e9f427 100755 --- a/Control/SGTools/SGTools/safe_clid.h +++ b/Control/AthenaKernel/AthenaKernel/tools/safe_clid.h @@ -1,13 +1,11 @@ // This file's extension implies that it's C, but it's really -*- C++ -*-. /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -// $Id: safe_clid.h,v 1.2 2005-11-08 22:01:30 ssnyder Exp $ - /** - * @file SGTools/safe_clid.h + * @file AthenaKernel/tools/safe_clid.h * @author scott snyder * @date Nov 2005 * @brief Find the class ID of a type, without triggering an error @@ -30,8 +28,8 @@ * to include @a has_classID_tag, or this function won't work. */ -#ifndef SGTOOLS_SAFECLID_H -#define SGTOOLS_SAFECLID_H +#ifndef ATHENAKERNEL_SAFECLID_H +#define ATHENAKERNEL_SAFECLID_H #include "GaudiKernel/ClassID.h" @@ -46,13 +44,13 @@ namespace SG { * is not defined. */ template <class T> -CLID safe_clid(); +constexpr CLID safe_clid(); } // namespace SG -#include "SGTools/safe_clid.icc" +#include "AthenaKernel/tools/safe_clid.icc" -#endif // not SGTOOLS_SAFECLID_H +#endif // not ATHENAKERNEL_SAFECLID_H diff --git a/Control/SGTools/SGTools/safe_clid.icc b/Control/AthenaKernel/AthenaKernel/tools/safe_clid.icc similarity index 85% rename from Control/SGTools/SGTools/safe_clid.icc rename to Control/AthenaKernel/AthenaKernel/tools/safe_clid.icc index b1e98dabdea3af706b4a74db82913045a8a48c93..ca6fdb9369b11ccc09fb04894b4c384e45650f0b 100755 --- a/Control/SGTools/SGTools/safe_clid.icc +++ b/Control/AthenaKernel/AthenaKernel/tools/safe_clid.icc @@ -1,10 +1,8 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ - -// $Id: safe_clid.icc,v 1.2 2007-12-14 03:12:34 binet Exp $ /** - * @file SGTools/safe_clid.icc + * @file AthenaeKernel/tools/safe_clid.icc * @author scott snyder * @date Nov 2005 * @brief Find the class ID of a type, without triggering an error @@ -13,8 +11,7 @@ */ #include "AthenaKernel/ClassID_traits.h" -#include "AthenaKernel/tools/type_tools.h" -#include "boost/type_traits/remove_pointer.hpp" +#include <type_traits> namespace SG { @@ -55,15 +52,15 @@ namespace SG { // Decl 1 template <class T> -CLID safe_clid_1 (T*, typename ClassID_traits<T>::has_classID_tag); +constexpr CLID safe_clid_1 (T*, typename ClassID_traits<T>::has_classID_tag); // Decl 2 template <class T, class U> -CLID safe_clid_1 (T, U); +constexpr CLID safe_clid_1 (T, U); // This is the public entry point. template <class T> -CLID safe_clid() +constexpr CLID safe_clid() { return safe_clid_1 ((T*)0, std::true_type()); } @@ -75,7 +72,7 @@ CLID safe_clid() // So we can go ahead and ask for the ID in this case. template <class T> -CLID safe_clid_1 (T*, typename ClassID_traits<T>::has_classID_tag) +constexpr CLID safe_clid_1 (T*, typename ClassID_traits<T>::has_classID_tag) { return ClassID_traits<T>::ID(); } @@ -93,7 +90,7 @@ CLID safe_clid_1 (T*, typename ClassID_traits<T>::has_classID_tag) template <class T, bool B> struct safe_clid_2 { - static CLID clid() { return CLID_NULL; } + constexpr static CLID clid() { return CLID_NULL; } }; // This specialization is used if @a T does derive from @a DataObject. @@ -101,7 +98,7 @@ struct safe_clid_2 template <class T> struct safe_clid_2<T, true> { - static CLID clid() { return ClassID_traits<T>::ID(); } + constexpr static CLID clid() { return ClassID_traits<T>::ID(); } }; // This is the definition corresponding to decl 2 above. @@ -109,9 +106,9 @@ struct safe_clid_2<T, true> // Note that here @a T will be a pointer to the class we're // actually interested in, so we need to strip a pointer. template <class T, class U> -CLID safe_clid_1 (T, U) +constexpr CLID safe_clid_1 (T, U) { - typedef typename boost::remove_pointer<T>::type typ; + using typ = std::remove_pointer_t<T>; return safe_clid_2<typ, ClassID_traits<typ>::s_isDataObject>::clid(); } diff --git a/Control/AthenaKernel/CMakeLists.txt b/Control/AthenaKernel/CMakeLists.txt index e170a93a179ecf848d0e2606a966d4be243d9155..73b43c7012098a82c6a61415e345516d2b989cdf 100644 --- a/Control/AthenaKernel/CMakeLists.txt +++ b/Control/AthenaKernel/CMakeLists.txt @@ -93,6 +93,10 @@ atlas_add_test( ClassName_test SOURCES test/ClassName_test.cxx LINK_LIBRARIES AthenaKernel ) +atlas_add_test( safe_clid_test + SOURCES test/safe_clid_test.cxx + LINK_LIBRARIES AthenaKernel ) + atlas_add_test( BaseInfo_test SOURCES test/BaseInfo_test.cxx LINK_LIBRARIES AthenaKernel ) diff --git a/Control/AthenaKernel/share/safe_clid_test.ref b/Control/AthenaKernel/share/safe_clid_test.ref new file mode 100644 index 0000000000000000000000000000000000000000..ea30df1c36dcaa19bd40889a10f36b307cc6a992 --- /dev/null +++ b/Control/AthenaKernel/share/safe_clid_test.ref @@ -0,0 +1 @@ +AthenaKernel/safe_clid_test diff --git a/Control/SGTools/test/safe_clid_test.cxx b/Control/AthenaKernel/test/safe_clid_test.cxx similarity index 76% rename from Control/SGTools/test/safe_clid_test.cxx rename to Control/AthenaKernel/test/safe_clid_test.cxx index f7ff6f251fbdd8949217f75095048b66d8b65b58..0bd9e160626e024a834cc7c286d099b886bdcbe6 100755 --- a/Control/SGTools/test/safe_clid_test.cxx +++ b/Control/AthenaKernel/test/safe_clid_test.cxx @@ -1,10 +1,10 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ #undef NDEBUG -#include "SGTools/safe_clid.h" +#include "AthenaKernel/tools/safe_clid.h" #include "AthenaKernel/CLASS_DEF.h" #include "GaudiKernel/DataObject.h" #include <cassert> @@ -22,6 +22,7 @@ struct C int main() { + std::cout << "AthenaKernel/safe_clid_test\n"; assert (SG::safe_clid<int> () == 0); assert (SG::safe_clid<A> () == 0); assert (SG::safe_clid<B> () == 98765); diff --git a/Control/AthenaPython/src/PyComponentMgr.cxx b/Control/AthenaPython/src/PyComponentMgr.cxx index 893e93d2c9b5b2dceb0f9f16c011d5f387e1a22f..e4694938ba650fb1bd2c24b5039b4b6fcdfdc425 100755 --- a/Control/AthenaPython/src/PyComponentMgr.cxx +++ b/Control/AthenaPython/src/PyComponentMgr.cxx @@ -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 */ // PyComponentMgr.cxx @@ -15,8 +15,6 @@ #include "AthenaKernel/CLASS_DEF.h" CLASS_DEF (PyObject, 72785480, 1) -#include "AthenaKernel/BaseInfo.h" -SG_BASES1(PyObject, SG::NoBase); // AthenaPython includes #include "PyComponentMgr.h" diff --git a/Control/CxxUtils/CxxUtils/CachedPointer.h b/Control/CxxUtils/CxxUtils/CachedPointer.h index 005acdaccfe0f9be6c87657212744654e001c23a..624d182912b3e3076c2cc400205e42f6f67df59e 100644 --- a/Control/CxxUtils/CxxUtils/CachedPointer.h +++ b/Control/CxxUtils/CxxUtils/CachedPointer.h @@ -70,8 +70,10 @@ public: /// Copy constructor. - CachedPointer (const CachedPointer& other); + CachedPointer (const CachedPointer& other) noexcept; + /// Move constructor. + CachedPointer ( CachedPointer&& other) noexcept; /// Assignment. CachedPointer& operator= (const CachedPointer& other); diff --git a/Control/CxxUtils/CxxUtils/CachedPointer.icc b/Control/CxxUtils/CxxUtils/CachedPointer.icc index 07648b869b581c2bc2594db8efcb004a11d29770..099f11284de2b5dfbbd885b2ebe044e3c10bd736 100644 --- a/Control/CxxUtils/CxxUtils/CachedPointer.icc +++ b/Control/CxxUtils/CxxUtils/CachedPointer.icc @@ -40,11 +40,23 @@ CachedPointer<T>::CachedPointer (pointer_t elt) */ template <class T> inline -CachedPointer<T>::CachedPointer (const CachedPointer& other) +CachedPointer<T>::CachedPointer (const CachedPointer& other) noexcept : m_a (other.get()) { } +/** + * @brief Move constructor. + */ +template <class T> +inline +CachedPointer<T>::CachedPointer ( CachedPointer&& other) noexcept + : m_a (other.get()) +{ + //Does not own pointer so don't need to null +} + + /** * @brief Assignment. diff --git a/Control/CxxUtils/CxxUtils/features.h b/Control/CxxUtils/CxxUtils/features.h index dcd5c1b86a22810e1ecec4a51084331c95c67e9f..25369243eb64753169385d366114b33592409142 100644 --- a/Control/CxxUtils/CxxUtils/features.h +++ b/Control/CxxUtils/CxxUtils/features.h @@ -17,7 +17,8 @@ /// Do we have function multiversioning? GCC and clang > 7 support /// the target attribute #if defined(__ELF__) && defined(__GNUC__) && !defined(__CLING__) && \ - !defined(__ICC) && !defined(__COVERITY__) && !defined(__CUDACC__) + !defined(__ICC) && !defined(__COVERITY__) && !defined(__CUDACC__) && \ + !defined(CL_SYCL_LANGUAGE_VERSION) # define HAVE_FUNCTION_MULTIVERSIONING 1 #else # define HAVE_FUNCTION_MULTIVERSIONING 0 diff --git a/Control/SGTools/CMakeLists.txt b/Control/SGTools/CMakeLists.txt index 70140c28792bd978cdecb47ba16c78cb82684dc1..e0b684dd9af58c71b5952da5a80f43a6d167bf5b 100644 --- a/Control/SGTools/CMakeLists.txt +++ b/Control/SGTools/CMakeLists.txt @@ -25,11 +25,6 @@ atlas_add_test( VersionedKey_test test/VersionedKey_test.cxx LINK_LIBRARIES SGTools ) -atlas_add_test( safe_clid_test - SOURCES - test/safe_clid_test.cxx - LINK_LIBRARIES SGTools ) - atlas_add_test( exceptions_test SOURCES test/exceptions_test.cxx diff --git a/Control/SGTools/share/safe_clid_test.ref b/Control/SGTools/share/safe_clid_test.ref deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/DataQuality/DataQualityTools/CMakeLists.txt b/DataQuality/DataQualityTools/CMakeLists.txt index 766347768658e94a41d2f9e5cab7867e4b2d345f..a488cbe17d9e65c6f1c8e70bd8a37836e645e0f5 100644 --- a/DataQuality/DataQualityTools/CMakeLists.txt +++ b/DataQuality/DataQualityTools/CMakeLists.txt @@ -5,52 +5,6 @@ # Declare the package name: atlas_subdir( DataQualityTools ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( - Calorimeter/CaloGeoHelpers - Control/AthenaBaseComps - Control/AthenaMonitoring - Control/StoreGate - Event/xAOD/xAODCaloEvent - Event/xAOD/xAODEventInfo - Event/xAOD/xAODJet - Event/xAOD/xAODMissingET - Event/xAOD/xAODMuon - Event/xAOD/xAODTracking - ForwardDetectors/LUCID/LUCID_RawEvent - ForwardDetectors/ZDC/ZdcEvent - ForwardDetectors/ZDC/ZdcIdentifier - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetRawEvent/InDetRawData - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - LArCalorimeter/LArRawEvent - LArCalorimeter/LArRecEvent - MagneticField/MagFieldInterfaces - MuonSpectrometer/MuonCalib/MuonCalibITools - MuonSpectrometer/MuonIdHelpers - MuonSpectrometer/MuonRDO - MuonSpectrometer/MuonReconstruction/MuonRecTools/MuonRecHelperTools - PhysicsAnalysis/AnalysisCommon/IsolationSelection - PhysicsAnalysis/EventTag/TagEvent - PhysicsAnalysis/MuonID/MuonSelectorTools - Reconstruction/RecBackground/RecBackgroundEvent - Reconstruction/RecoTools/RecoToolInterfaces - TileCalorimeter/TileEvent - Tools/LWHists - Tracking/TrkEvent/TrkParameters - Tracking/TrkExtrapolation/TrkExInterfaces - Trigger/TrigAnalysis/TrigDecisionTool - Trigger/TrigEvent/TrigCaloEvent - Trigger/TrigEvent/TrigMuonEvent - Trigger/TrigEvent/TrigParticle - Trigger/TrigT1/TrigT1Result - PhysicsAnalysis/MuonID/MuonSelectorTools - MagneticField/MagFieldElements - MagneticField/MagFieldConditions -) - # External dependencies: find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) @@ -62,7 +16,7 @@ atlas_add_component( DataQualityTools src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} CaloGeoHelpers AthenaBaseComps AthenaMonitoringLib StoreGateLib SGtests xAODCaloEvent xAODEventInfo xAODJet xAODMissingET xAODMuon xAODTracking LUCID_RawEvent ZdcEvent ZdcIdentifier GaudiKernel InDetIdentifier InDetRawData InDetReadoutGeometry InDetPrepRawData LArRawEvent LArRecEvent MagFieldInterfaces MuonCalibITools MuonIdHelpersLib MuonRDO MuonRecHelperToolsLib TagEvent RecBackgroundEvent RecoToolInterfaces TileEvent LWHists TrkParameters TrkExInterfaces TrkVertexAnalysisUtilsLib TrigDecisionToolLib TrigCaloEvent TrigMuonEvent TrigParticle TrigT1Result MuonSelectorToolsLib MagFieldElements MagFieldConditions) + LINK_LIBRARIES ${ROOT_LIBRARIES} CaloGeoHelpers AthenaBaseComps AthenaMonitoringLib StoreGateLib SGtests xAODCaloEvent xAODEventInfo xAODJet xAODMissingET xAODMuon xAODTracking LUCID_RawEvent ZdcEvent ZdcIdentifier GaudiKernel InDetIdentifier InDetRawData InDetReadoutGeometry InDetPrepRawData LArRawEvent LArRecEvent MagFieldInterfaces MuonCalibITools MuonIdHelpersLib MuonRDO MuonRecHelperToolsLib TagEvent RecBackgroundEvent RecoToolInterfaces TileEvent LWHists TrkParameters TrkExInterfaces TrkVertexAnalysisUtilsLib TrigDecisionToolLib TrigCaloEvent TrigMuonEvent TrigParticle TrigT1Result MuonSelectorToolsLib MagFieldElements MagFieldConditions IsolationSelectionLib ) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/DataQuality/DataQualityUtils/DataQualityUtils/HanOutputFile.h b/DataQuality/DataQualityUtils/DataQualityUtils/HanOutputFile.h index b952560ce644fd082dbc442882b9d2aebc0d0088..9a497a51d5c816cce827e2ecb0a429cd90bc1e47 100644 --- a/DataQuality/DataQualityUtils/DataQualityUtils/HanOutputFile.h +++ b/DataQuality/DataQualityUtils/DataQualityUtils/HanOutputFile.h @@ -73,6 +73,8 @@ public: /** * cnvsType: 1=pngOnly;2=jsonOnly;3=pngAndJson */ + const static int GENERATE_PNG = 1; // Make PNG with TImage + const static int GENERATE_JSON = 2; // Make JSON virtual int saveAllHistograms( std::string location, bool drawRefs, std::string run_min_LB,int cnvsType = 1); static bool containsDir(std::string dirname, std::string maindir); diff --git a/DataQuality/DataQualityUtils/src/HanOutputFile.cxx b/DataQuality/DataQualityUtils/src/HanOutputFile.cxx index 75777b0477f4145249cf20a2db42c7d04cef6e73..cc6c4bbbe024296fadcf29241e6068f485870d16 100644 --- a/DataQuality/DataQualityUtils/src/HanOutputFile.cxx +++ b/DataQuality/DataQualityUtils/src/HanOutputFile.cxx @@ -1535,7 +1535,8 @@ std::pair<std::string,std::string> HanOutputFile:: getHistogram( std::string nam } - std::string rv(x, y); + std::string rv; + if (cnvsType & GENERATE_PNG) { rv.assign(x, y); }; std::pair<std::string,std::string>rvPair{rv,json}; delete img; @@ -2784,8 +2785,6 @@ writeToFile(std::string fname ,std::string content) void HanOutputFile:: convertToGraphics(int cnvsType, TCanvas* myC,std::string &json, TImage *img,char **x, int *y) { - int GENERATE_PNG = 1; // Make PNG with TImage - int GENERATE_JSON = 2; // Make JSON if (cnvsType & GENERATE_PNG) { if(img) getImageBuffer(img,myC,x,y); @@ -2799,8 +2798,6 @@ convertToGraphics(int cnvsType, TCanvas* myC,std::string &json, TImage *img,char void HanOutputFile:: convertToGraphics(int cnvsType, TCanvas* myC,std::string namePNG,std::string nameJSON) { - int GENERATE_PNG = 1; // Make PNG with TImage - int GENERATE_JSON = 2; // Make JSON if (cnvsType & GENERATE_PNG) { myC->SaveAs(namePNG.c_str()); @@ -2815,9 +2812,6 @@ convertToGraphics(int cnvsType, TCanvas* myC,std::string namePNG,std::string nam bool HanOutputFile:: saveFile(int cnvsType, std::string pngfName,std::string pngContent, std::string jsonfName, std::string jsonfContent) { - int GENERATE_PNG = 1; // Make PNG with TImage - int GENERATE_JSON = 2; // Make JSON - bool png =false; bool json=false; if (cnvsType & GENERATE_PNG) diff --git a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h index dc690b6f0e4bb7718db0e43fa924136f017ebaf6..412fb1d7a1418234297f60a5f924e097a4f7922c 100755 --- a/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h +++ b/DetectorDescription/DetDescrCond/DetDescrConditions/DetDescrConditions/DetStatus.h @@ -9,14 +9,14 @@ #include<string> -class DetStatus { +class DetStatus final { public: DetStatus(); // constructor with parameters DetStatus(const int fullcode, const float deadfrac, const float deadthrust); - virtual ~DetStatus(); + ~DetStatus() = default; // access functions int code() const; @@ -31,8 +31,6 @@ class DetStatus { float m_deadthrust; }; -inline DetStatus::~DetStatus() {} - inline int DetStatus::code() const { return m_code<0 ? m_code : m_code & 3; } inline int DetStatus::fullCode() const { return m_code; } inline float DetStatus::deadFrac() const { return m_deadfrac;} diff --git a/DetectorDescription/Identifier/Identifier/Identifier32.h b/DetectorDescription/Identifier/Identifier/Identifier32.h index a35b9b8f3c7bd6b176b1a6b0769cd2120809908a..6b2882856ce16dbee07de035c08ca7ba92fbb7ff 100644 --- a/DetectorDescription/Identifier/Identifier/Identifier32.h +++ b/DetectorDescription/Identifier/Identifier/Identifier32.h @@ -44,10 +44,10 @@ public: explicit Identifier32 (value_type value); /// Copy constructor - Identifier32 (const Identifier32& other); + Identifier32 (const Identifier32& other) = default; /// Assignment. - Identifier32& operator= (const Identifier32& other); + Identifier32& operator= (const Identifier32& other) = default; ///---------------------------------------------------------------- /// Modifications @@ -130,18 +130,6 @@ inline Identifier32::Identifier32 () : m_id(max_value) {} -//----------------------------------------------- -inline Identifier32::Identifier32 (const Identifier32& other) - : m_id(other.m_id) -{} - -//----------------------------------------------- -inline Identifier32& Identifier32::operator= (const Identifier32& other) -{ - if (this != &other) - m_id = other.m_id; - return *this; -} //----------------------------------------------- inline Identifier32::Identifier32 (value_type value) diff --git a/DetectorDescription/RegSelLUT/RegSelLUT/RegSelRoI.h b/DetectorDescription/RegSelLUT/RegSelLUT/RegSelRoI.h index de67d3f6772a293636d35a5b71a4b059fc0d85bf..b454784d6ebe96e6329fa94ebffc1695afc9353a 100644 --- a/DetectorDescription/RegSelLUT/RegSelLUT/RegSelRoI.h +++ b/DetectorDescription/RegSelLUT/RegSelLUT/RegSelRoI.h @@ -39,7 +39,7 @@ public: double phiMin, double phiMax, double etaMin, double etaMax); - ~RegSelRoI() { } + ~RegSelRoI() = default; double getzMin() const { return m_zMin; } double getzMax() const { return m_zMax; } diff --git a/Event/EventBookkeeperTools/CMakeLists.txt b/Event/EventBookkeeperTools/CMakeLists.txt index 4f364c640fdd205cceab125b3867c42398f43081..0f7d1f44b870a5f51829f6b0da422c1e8eed5ceb 100644 --- a/Event/EventBookkeeperTools/CMakeLists.txt +++ b/Event/EventBookkeeperTools/CMakeLists.txt @@ -6,44 +6,22 @@ atlas_subdir( EventBookkeeperTools ) if( XAOD_STANDALONE ) - set( xaod_access_deps Control/xAODRootAccess ) set( xaod_access_lib xAODRootAccess ) # ... for AthAnalysisBase (Athena calls this POOLRootAccess) else() - set( xaod_access_deps PhysicsAnalysis/POOLRootAccess ) set( xaod_access_lib POOLRootAccessLib ) endif() -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthToolSupport/AsgTools - Control/AthenaBaseComps - Control/AthenaKernel - Event/xAOD/xAODCutFlow - GaudiKernel - PRIVATE - ${xaod_access_deps} - Control/SGTools - Control/StoreGate - Event/EventBookkeeperMetaData - Event/EventInfo - Event/xAOD/xAODEventInfo ) - -# External dependencies: -find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) - # Component(s) in the package: atlas_add_component( EventBookkeeperTools src/*.cxx src/components/*.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools AthenaBaseComps AthenaKernel xAODCutFlow - GaudiKernel SGTools StoreGateLib SGtests EventBookkeeperMetaData EventInfo xAODEventInfo ) + LINK_LIBRARIES AsgTools AthenaBaseComps AthenaKernel GaudiKernel + SGTools StoreGateLib EventBookkeeperMetaData EventInfo xAODCutFlow xAODEventInfo ) atlas_add_executable( dump-cbk util/dump-cbk.cxx - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${xaod_access_lib} AsgTools ) + LINK_LIBRARIES ${xaod_access_lib} AsgTools ) # Install files from the package: atlas_install_python_modules( python/*.py ) diff --git a/Event/EventBookkeeperTools/src/BookkeeperTool.cxx b/Event/EventBookkeeperTools/src/BookkeeperTool.cxx index ac8ce9e8f80cb1bab716d3a820832908ee91bb8f..a198cbd6687aa92e4d68e6acf5847f6df76137fc 100644 --- a/Event/EventBookkeeperTools/src/BookkeeperTool.cxx +++ b/Event/EventBookkeeperTools/src/BookkeeperTool.cxx @@ -1,52 +1,28 @@ -///////////////////////// -*- C++ -*- ///////////////////////////// - /* Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // Implementation file for class BookkeeperTool -// Authors: Jack Cranshaw <Jack.Cranshaw@cern.ch> -/////////////////////////////////////////////////////////////////// +// Authors: Tadej Novak <tadej@cern.ch> +// Jack Cranshaw <Jack.Cranshaw@cern.ch> #include "BookkeeperTool.h" - -// STL include -#include <algorithm> - -// #include "FillEBCFromFlat.h" - -#include "AthenaKernel/errorcheck.h" -#include "AthenaBaseComps/AthCheckMacros.h" - +#include "CutBookkeeperUtils.h" #include "CutFlowSvc.h" BookkeeperTool::BookkeeperTool(const std::string& name) - : asg::AsgMetadataTool(name), - m_cutflowTaken(false) + : asg::AsgMetadataTool(name) { - declareProperty("OutputCollName", m_outputCollName="CutBookkeepers", - "The default name of the xAOD::CutBookkeeperContainer for output files"); - declareProperty("InputCollName", m_inputCollName = "CutBookkeepers", - "The default name of the xAOD::CutBookkeeperContainer for input files"); - #ifndef XAOD_STANDALONE declareInterface< ::IMetaDataTool >( this ); #endif // XAOD_STANDALONE } - -BookkeeperTool::~BookkeeperTool() +StatusCode BookkeeperTool::initialize() { -} - - - -StatusCode -BookkeeperTool::initialize() -{ - ATH_MSG_DEBUG( "Initializing " << name() << " - package version " << PACKAGE_VERSION ); + ATH_MSG_DEBUG("Initializing " << name()); ATH_MSG_DEBUG("InputCollName = " << m_inputCollName); ATH_MSG_DEBUG("OutputCollName = " << m_outputCollName); @@ -59,178 +35,138 @@ BookkeeperTool::initialize() } -//__________________________________________________________________________ -StatusCode BookkeeperTool::beginInputFile(const SG::SourceID&) +StatusCode BookkeeperTool::beginInputFile(const SG::SourceID &source) { - //OPENING NEW INPUT FILE - //Things to do: - // 1) note that a file is currently opened - // 2) Load CutBookkeepers from input file - // 2a) if incomplete from input, directly propagate to output - // 2b) if complete from input, wait for EndInputFile to decide what to do in output - - // reset cutflow taken marker - m_cutflowTaken = false; + // OPENING NEW INPUT FILE + // Things to do: + // 1) Load CutBookkeepers from input file + // a) if incomplete from input, directly propagate to output + // b) if complete from input, wait for EndInputFile to decide what to do in output + + // Prepare local cache + ATH_CHECK(prepareContainers(m_completeContainers)); + ATH_CHECK(prepareContainers(m_incompleteContainers)); + + // Check if a local container is there. IT SHOULD NOT BE + auto sit = m_inputContainers.find(source); + if (sit != m_inputContainers.end()) { + ATH_MSG_ERROR("Undefined behaviour: this file has already been processed"); + return StatusCode::FAILURE; + } // Get the incomplete bookkeeper collection of the input metadata store - const xAOD::CutBookkeeperContainer* input_inc = 0; + const xAOD::CutBookkeeperContainer *inIncomplete{}; // Construct input and output incomplete names - std::string inCollName = "Incomplete" + m_inputCollName; - std::string outCollName = "Incomplete" + m_outputCollName; - if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(inCollName) ) { - StatusCode ssc = inputMetaStore()->retrieve( input_inc, inCollName ); - if (ssc.isSuccess()) { - // First make sure there is an incomplete container in the output store - if( !(outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(outCollName)) ) { - xAOD::CutBookkeeperContainer* inc = new xAOD::CutBookkeeperContainer(); - xAOD::CutBookkeeperAuxContainer* auxinc = new xAOD::CutBookkeeperAuxContainer(); - inc->setStore(auxinc); - ATH_CHECK(outputMetaStore()->record(inc,outCollName)); - ATH_CHECK(outputMetaStore()->record(auxinc,outCollName+"Aux.")); - } - // retrieve the incomplete output container - xAOD::CutBookkeeperContainer* incompleteBook(NULL); - ATH_CHECK(outputMetaStore()->retrieve( incompleteBook, outCollName)); + std::string incompleteCollName = "Incomplete" + m_inputCollName; + if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(incompleteCollName)) { + if (inputMetaStore()->retrieve(inIncomplete, incompleteCollName).isSuccess()) { // update incomplete output with any incomplete input - ATH_CHECK(this->updateContainer(incompleteBook,input_inc)); + ATH_CHECK(xAOD::CutBookkeeperUtils::updateContainer(m_incompleteContainers.at(0), inIncomplete)); ATH_MSG_DEBUG("Successfully merged input incomplete bookkeepers with output"); } - } - else { - ATH_MSG_INFO("No incomplete bookkeepers in this file " << inCollName); + } else { + ATH_MSG_INFO("No incomplete bookkeepers in this file with name " << incompleteCollName); } // Get the complete bookkeeper collection of the input metadata store - const xAOD::CutBookkeeperContainer* input_com = 0; - inCollName = m_inputCollName; - outCollName = m_outputCollName; - if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(inCollName) ) { - if ( (inputMetaStore()->retrieve( input_com, inCollName )).isSuccess() ) { - // Check if a tmp is there. IT SHOULD NOT BE - //xAOD::CutBookkeeperContainer* incompleteBook(NULL); - if( !(outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(outCollName+"tmp")) ) { - // Now create the tmp container - xAOD::CutBookkeeperContainer* tmp = new xAOD::CutBookkeeperContainer(); - xAOD::CutBookkeeperAuxContainer* auxtmp = new xAOD::CutBookkeeperAuxContainer(); - tmp->setStore(auxtmp); - if (updateContainer(tmp,input_com).isSuccess()) { - ATH_CHECK(outputMetaStore()->record(tmp,outCollName+"tmp")); - ATH_CHECK(outputMetaStore()->record(auxtmp,outCollName+"tmpAux.")); - } - else { - ATH_MSG_WARNING("Could not update tmp container from input complete conatiner"); - } - } + const xAOD::CutBookkeeperContainer *inComplete{}; + if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>(m_inputCollName)) { + if (inputMetaStore()->retrieve(inComplete, m_inputCollName).isSuccess()) { + // Create the temporary container + auto [it, status] = m_inputContainers.emplace(source, LocalContainers()); + ATH_CHECK(prepareContainers(it->second)); + + ATH_CHECK(xAOD::CutBookkeeperUtils::updateContainer(it->second.at(0), inComplete)); + ATH_MSG_DEBUG("Successfully copied complete bookkeepers to temp container"); + } else { + ATH_MSG_INFO("No complete bookkeepers in this file with name " << m_inputCollName); } - else { - ATH_MSG_WARNING("tmp collection already exists"); - return StatusCode::SUCCESS; - } - ATH_MSG_DEBUG("Successfully copied complete bookkeepers to temp container"); } - // Now make sure the output containers are in the output store - // - // Make sure complete container exists in output - if( !(outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(m_outputCollName)) ) { - // Now create the complete container - xAOD::CutBookkeeperContainer* inc = new xAOD::CutBookkeeperContainer(); - xAOD::CutBookkeeperAuxContainer* auxinc = new xAOD::CutBookkeeperAuxContainer(); - inc->setStore(auxinc); - ATH_CHECK(outputMetaStore()->record(inc,m_outputCollName)); - ATH_CHECK(outputMetaStore()->record(auxinc,m_outputCollName+"Aux.")); - } - else { - ATH_MSG_WARNING("complete collection already exists"); - //return StatusCode::SUCCESS; - } - // Make sure incomplete container exists in output - std::string inc_name = "Incomplete"+m_outputCollName; - if( !(outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(inc_name)) ) { - // Now create the complete container - xAOD::CutBookkeeperContainer* coll = new xAOD::CutBookkeeperContainer(); - xAOD::CutBookkeeperAuxContainer* auxcoll = new xAOD::CutBookkeeperAuxContainer(); - coll->setStore(auxcoll); - ATH_CHECK(outputMetaStore()->record(coll,inc_name)); - ATH_CHECK(outputMetaStore()->record(auxcoll,inc_name+"Aux.")); - } - else { - ATH_MSG_WARNING("incomplete collection already exists"); - } - return StatusCode::SUCCESS; } -StatusCode BookkeeperTool::endInputFile(const SG::SourceID&) +StatusCode BookkeeperTool::endInputFile(const SG::SourceID &source) { + ATH_CHECK(copyInputContainersToOutput(m_completeContainers, source)); - if (copyContainerToOutput(m_outputCollName).isFailure()) return StatusCode::FAILURE; - - if (!m_cutflowTaken) { - if (addCutFlow().isFailure()) { - ATH_MSG_ERROR("Could not add CutFlow information"); - } - m_cutflowTaken = true; - } - else { - ATH_MSG_DEBUG("Cutflow information written into container before endInputFile"); - } - return StatusCode::SUCCESS; } StatusCode BookkeeperTool::metaDataStop() { - //TERMINATING THE JOB (EndRun) - //Things to do: + // TERMINATING THE JOB (EndRun) + // Things to do: // 1) Create new incomplete CutBookkeepers if relevant - // 2) Print cut flow summary - // 3) Write root file if requested - // Make sure incomplete container exists in output - std::string inc_name = "Incomplete"+m_outputCollName; - if (copyContainerToOutput(inc_name).isFailure()) return StatusCode::FAILURE; + // 2) Copy cutflow from the service + // 3) Copy containers to output + + // All files that have not been fully processed are incomplete + ATH_CHECK(copyInputContainersToOutput(m_incompleteContainers)); + // Copy cutflow from the service + ATH_CHECK(copyCutflowFromService()); - if (!m_cutflowTaken) { - if (addCutFlow().isFailure()) { - ATH_MSG_ERROR("Could not add CutFlow information"); + // Write out the containers + for (std::size_t i = 0; i < m_completeContainers.cont.size(); ++i) { + std::string name = m_outputCollName; + if (i != 0) { + name.append("_weight_"); + name.append(std::to_string(i)); } - } - else { - ATH_MSG_DEBUG("Cutflow information written into container before metaDataStop"); + + ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.cont[i]), name)); + ATH_CHECK(outputMetaStore()->record(std::move(m_completeContainers.aux[i]), name + "Aux.")); + ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.cont[i]), "Incomplete" + name)); + ATH_CHECK(outputMetaStore()->record(std::move(m_incompleteContainers.aux[i]), "Incomplete" + name + "Aux.")); } - // Reset after metadata stop - m_cutflowTaken = false; - + m_incompleteContainers.clear(); + m_completeContainers.clear(); + return StatusCode::SUCCESS; } -StatusCode -BookkeeperTool::finalize() +StatusCode BookkeeperTool::copyInputContainersToOutput(LocalContainers &target, + const SG::SourceID &source) { - ATH_MSG_DEBUG( "Finalizing " << name() << " - package version " << PACKAGE_VERSION ); + ATH_CHECK(prepareContainers(target)); + + if (!source.empty()) { + auto it = m_inputContainers.find(source); + if (it == m_inputContainers.end()) { + ATH_MSG_DEBUG("No input containers for this file"); + return StatusCode::SUCCESS; + } + + for (std::size_t i = 0; i < it->second.size(); ++i) { + ATH_CHECK(xAOD::CutBookkeeperUtils::updateContainer(target.at(i), it->second.at(i))); + } + m_inputContainers.erase(it); + + return StatusCode::SUCCESS; + } + + for (auto &[s, list] : m_inputContainers) { + for (std::size_t i = 0; i < list.size(); ++i) { + ATH_CHECK(xAOD::CutBookkeeperUtils::updateContainer(target.at(i), list.at(i))); + } + } + m_inputContainers.clear(); + return StatusCode::SUCCESS; } - -StatusCode BookkeeperTool::addCutFlow() +StatusCode BookkeeperTool::copyCutflowFromService() { - // Add the information from the current processing to the complete output - // --> same paradigm as original CutFlowSvc - // Get the complete bookkeeper collection of the output meta-data store - xAOD::CutBookkeeperContainer* completeBook(NULL); - if( !(outputMetaStore()->retrieve( completeBook, m_outputCollName) ).isSuccess() ) { - ATH_MSG_ERROR( "Could not get complete CutBookkeepers from output MetaDataStore" ); - return StatusCode::FAILURE; - } + ATH_CHECK(prepareContainers(m_completeContainers)); // Get the bookkeeper from the current processing const xAOD::CutBookkeeperContainer* cbkCont = m_cutFlowSvcPrivate->getCutBookkeepers(); if (cbkCont != nullptr) { - ATH_CHECK(this->updateContainer(completeBook, cbkCont)); + ATH_CHECK(xAOD::CutBookkeeperUtils::updateContainer(m_completeContainers.at(0), cbkCont)); } else { ATH_MSG_ERROR("No cutflow container in the CutFlowSvc"); return StatusCode::FAILURE; @@ -240,170 +176,20 @@ StatusCode BookkeeperTool::addCutFlow() } -namespace { - - -xAOD::CutBookkeeper* -resolveLink (const xAOD::CutBookkeeper* old, - xAOD::CutBookkeeperContainer& contToUpdate, - const xAOD::CutBookkeeperContainer& otherCont, - const std::vector<size_t>& otherIndices) +StatusCode BookkeeperTool::prepareContainers(LocalContainers &target) { - { - xAOD::CutBookkeeperContainer::iterator matchIter = - std::find( contToUpdate.begin(), - contToUpdate.end(), - old ); - if (matchIter != contToUpdate.end()) - return *matchIter; + if (!target.empty()) { + return StatusCode::SUCCESS; } - { - xAOD::CutBookkeeperContainer::const_iterator matchIter = - std::find( otherCont.begin(), - otherCont.end(), - old ); - if (matchIter != contToUpdate.end()) { - size_t pos = matchIter - otherCont.begin(); - return contToUpdate[otherIndices[pos]]; - } - } - - // If we didn't find it, we need to add it - xAOD::CutBookkeeper* newEBK = new xAOD::CutBookkeeper(); - if ( newEBK->usingPrivateStore() ) { newEBK->releasePrivateStore(); } - newEBK->makePrivateStore(old); - contToUpdate.push_back( newEBK ); - return newEBK; -} - - -} // anonymous namespace - -StatusCode -BookkeeperTool::updateContainer( xAOD::CutBookkeeperContainer* contToUpdate, - const xAOD::CutBookkeeperContainer* otherCont ) -{ - ATH_MSG_DEBUG("calling updateContainer(...)" ); - ATH_MSG_VERBOSE("Have container to update with size=" << contToUpdate->size() - << ", and other container with size=" << otherCont->size() ); - - size_t origSize = contToUpdate->size(); - - // Vector of indices in contToUpdate of elements in otherCont. - std::vector< std::size_t > otherIndices (otherCont->size()); - // Loop through otherCont. - // If element already in contToUpdate, update event counts, otherwise create new element - for ( std::size_t i=0; i<otherCont->size(); ++i ) { - const xAOD::CutBookkeeper* otherEBK = otherCont->at(i); - ATH_MSG_VERBOSE("Looping through otherCont at index " << i); - ATH_MSG_VERBOSE("Have otherEBK with: name=" << otherEBK->name() - << ", cycle=" << otherEBK->cycle() - << ", nAcceptedEvents=" << otherEBK->nAcceptedEvents() - << ", inputStream=" << otherEBK->inputStream() ); - - - // Loop through the container to be updated (contToUpdate) and see if we find a match - bool foundEBKToUpdate(false); - for ( std::size_t j=0; j<contToUpdate->size(); ++j ) { - xAOD::CutBookkeeper* ebkToUpdate = contToUpdate->at(j); - // Check if they are identical, if so, update; else add otherEBK - if ( otherEBK->isEqualTo(ebkToUpdate) ) { - ebkToUpdate->setPayload( ebkToUpdate->payload() + otherEBK->payload() ); - otherIndices[i] = j; - foundEBKToUpdate = true; - break; - } - } // End: Inner loop over contToUpdate - if (!foundEBKToUpdate) { - xAOD::CutBookkeeper* newEBK = new xAOD::CutBookkeeper(); - if ( newEBK->usingPrivateStore() ) { newEBK->releasePrivateStore(); } - newEBK->makePrivateStore(otherEBK); - contToUpdate->push_back( newEBK ); - std::size_t ebIdx = newEBK->index(); - otherIndices[i] = ebIdx; - } - } // End: Outer loop over contToUpdate - - // Now, we still need to fix the cross-referencing of the newly added CutBookkkeepers - for ( std::size_t i=origSize; i<contToUpdate->size(); ++i ) { - xAOD::CutBookkeeper* ebkToModify = contToUpdate->at(i); - - // Parent check - if ( ebkToModify->hasParent() ) { - const xAOD::CutBookkeeper* oldParent = ebkToModify->parent(); - const xAOD::CutBookkeeper* newParent = resolveLink (oldParent, - *contToUpdate, - *otherCont, - otherIndices); - ebkToModify->setParent (newParent); - } // Done fixing parent - - // Children check - std::vector< xAOD::CutBookkeeper* > newChildren; - for ( std::size_t oldIdx=0; oldIdx<ebkToModify->nChildren(); ++oldIdx ) { - const xAOD::CutBookkeeper* oldEBK = ebkToModify->child(oldIdx); - newChildren.push_back (resolveLink (oldEBK, - *contToUpdate, - *otherCont, - otherIndices)); - } // Done fixing children - ebkToModify->setChildren (newChildren); - - // Used others check - std::vector< xAOD::CutBookkeeper* > newOthers; - for ( std::size_t oldIdx=0; oldIdx<ebkToModify->nUsedOthers(); ++oldIdx ) { - const xAOD::CutBookkeeper* oldEBK = ebkToModify->usedOther(oldIdx); - newOthers.push_back (resolveLink (oldEBK, - *contToUpdate, - *otherCont, - otherIndices)); - } // Done fixing used others - ebkToModify->setUsedOthers (newOthers); - - // Siblings check - std::vector< xAOD::CutBookkeeper* > newSiblings; - for ( std::size_t oldIdx=0; oldIdx<ebkToModify->nSiblings(); ++oldIdx ) { - const xAOD::CutBookkeeper* oldEBK = ebkToModify->sibling(oldIdx); - newSiblings.push_back (resolveLink (oldEBK, - *contToUpdate, - *otherCont, - otherIndices)); - } // Done fixing siblings - ebkToModify->setSiblings (newSiblings); - } // Done fixing all cross references - return StatusCode::SUCCESS; -} - - -StatusCode BookkeeperTool::copyContainerToOutput(const std::string& outname) -{ - - // Get the complete bookkeeper collection of the output meta-data store - xAOD::CutBookkeeperContainer* contBook(nullptr); - if( !(outputMetaStore()->retrieve( contBook, outname) ).isSuccess() ) { - ATH_MSG_ERROR( "Could not get " << outname << " CutBookkeepers from output MetaDataStore" ); - return StatusCode::FAILURE; + std::size_t size{1}; // TODO: determine actual size + for (std::size_t i = 0; i < size; ++i) { + auto container = std::make_unique<xAOD::CutBookkeeperContainer>(); + auto auxContainer = std::make_unique<xAOD::CutBookkeeperAuxContainer>(); + container->setStore(auxContainer.get()); + target.cont.push_back(std::move(container)); + target.aux.push_back(std::move(auxContainer)); } - // Get the tmp bookkeeper from the input - const xAOD::CutBookkeeperContainer* tmpBook(NULL); - if ( outputMetaStore()->contains<xAOD::CutBookkeeperContainer>(m_outputCollName+"tmp") ) { - ATH_MSG_DEBUG("Copying data to the output container " << outname); - if( !(outputMetaStore()->retrieve( tmpBook, m_outputCollName+"tmp") ).isSuccess() ) { - ATH_MSG_WARNING( "Could not get tmp CutBookkeepers from output MetaDataStore" ); - } - else { - // update the complete output with the complete input - ATH_CHECK(this->updateContainer(contBook,tmpBook)); - // remove the tmp container - const SG::IConstAuxStore* tmpBookAux = tmpBook->getConstStore(); - ATH_CHECK(outputMetaStore()->removeDataAndProxy(tmpBook)); - ATH_CHECK(outputMetaStore()->removeDataAndProxy(tmpBookAux)); - } - } - return StatusCode::SUCCESS; } - - diff --git a/Event/EventBookkeeperTools/src/BookkeeperTool.h b/Event/EventBookkeeperTools/src/BookkeeperTool.h index a60223fd2122c871fd3455141b1cb9f154c62062..3562be7cdd64286edeabe99d45c1ef26bdf20366 100644 --- a/Event/EventBookkeeperTools/src/BookkeeperTool.h +++ b/Event/EventBookkeeperTools/src/BookkeeperTool.h @@ -8,20 +8,22 @@ /** @file BookkeeperTool.h * @brief This class is an implementation of the AsgMetadataTool * for the xAOD::CutBookkeeperContainer. + * @author Tadej Novak <tadej@cern.ch> * @author Jack Cranshaw <cranshaw@anl.gov> - * $Id: $ **/ -//#include "GaudiKernel/AlgTool.h" -#include "AthenaBaseComps/AthAlgTool.h" -#include "AsgTools/AsgMetadataTool.h" -#include "AthenaKernel/ICutFlowSvc.h" +#include <memory> + +#include <AsgTools/AsgMetadataTool.h> +#include <AthenaBaseComps/AthAlgTool.h> +#include <AthenaKernel/ICutFlowSvc.h> #ifndef XAOD_STANDALONE -#include "AthenaKernel/IMetaDataTool.h" +#include <AthenaKernel/IMetaDataTool.h> #endif // XAOD_STANDALONE -#include "GaudiKernel/ServiceHandle.h" +#include <GaudiKernel/ServiceHandle.h> #include <xAODCutFlow/CutBookkeeperContainer.h> +#include <xAODCutFlow/CutBookkeeperAuxContainer.h> class CutFlowSvc; @@ -30,48 +32,63 @@ class BookkeeperTool : public asg::AsgMetadataTool , public virtual ::IMetaDataTool #endif // XAOD_STANDALONE { - ASG_TOOL_CLASS0(BookkeeperTool) + ASG_TOOL_CLASS0(BookkeeperTool) public: // Constructor and Destructor - /// Standard Service Constructor - BookkeeperTool(const std::string& name = "BookkeeperTool"); - /// Destructor - virtual ~BookkeeperTool(); + /// Standard Service Constructor + BookkeeperTool(const std::string& name = "BookkeeperTool"); + /// Destructor + virtual ~BookkeeperTool() = default; + /// Standard reimplemented functions public: - virtual StatusCode metaDataStop() override; - virtual StatusCode beginInputFile() override {return StatusCode::SUCCESS;} - virtual StatusCode endInputFile() override {return StatusCode::SUCCESS;} - virtual StatusCode beginInputFile(const SG::SourceID&) override; - virtual StatusCode endInputFile(const SG::SourceID&) override; - virtual StatusCode initialize() override; - virtual StatusCode finalize() override; + virtual StatusCode initialize() override; + virtual StatusCode metaDataStop() override; + virtual StatusCode beginInputFile() override {return StatusCode::SUCCESS;} + virtual StatusCode endInputFile() override {return StatusCode::SUCCESS;} + virtual StatusCode beginInputFile(const SG::SourceID &source) override; + virtual StatusCode endInputFile(const SG::SourceID &source) override; private: - - /// Helper class to update a container with information from another one - StatusCode updateContainer( xAOD::CutBookkeeperContainer* contToUpdate, - const xAOD::CutBookkeeperContainer* otherCont ); + /// Helper in-memory structure + struct LocalContainers { + std::vector<std::unique_ptr<xAOD::CutBookkeeperContainer>> cont; + std::vector<std::unique_ptr<xAOD::CutBookkeeperAuxContainer>> aux; + + bool empty() { return cont.empty(); } + std::size_t size() { return cont.size(); } + xAOD::CutBookkeeperContainer *at(std::size_t n) { return cont.at(n).get(); } + void clear() { cont.clear(); aux.clear(); } + }; + + /// Copy input containers to the output + StatusCode copyInputContainersToOutput(LocalContainers &target, + const SG::SourceID &source = ""); - StatusCode copyContainerToOutput(const std::string& outname); + /// Fill Cutflow information from the service + StatusCode copyCutflowFromService(); + + /// Prepare containers + StatusCode prepareContainers(LocalContainers &target); - /// Fill Cutflow information - StatusCode addCutFlow(); - /// Pointer to the public CutFlowSvc interface ServiceHandle<ICutFlowSvc> m_cutFlowSvc{ this, "CutFlowSvc", "CutFlowSvc/CutFlowSvc", "Pointer to the CutFlowSvc"}; /// Direct pointer to the CutFlowSvc for "private" methods access const CutFlowSvc *m_cutFlowSvcPrivate; - /// The name of the output CutBookkeeperContainer - std::string m_outputCollName; - /// The name of the input CutBookkeeperContainer - std::string m_inputCollName; + Gaudi::Property<std::string> m_inputCollName{this, "InputCollName", "CutBookkeepers", + "The default name of the xAOD::CutBookkeeperContainer for input files"}; - bool m_cutflowTaken; - -}; + /// The name of the output CutBookkeeperContainer + Gaudi::Property<std::string> m_outputCollName{this, "OutputCollName", "CutBookkeepers", + "The default name of the xAOD::CutBookkeeperContainer for output files"}; -#endif + /// Input CutBookkeeperContainers + std::unordered_map<SG::SourceID, LocalContainers> m_inputContainers; + /// Local CutBookkeeperContainers + LocalContainers m_completeContainers; + LocalContainers m_incompleteContainers; +}; +#endif // BOOKKEEPERTOOL_H diff --git a/Event/EventBookkeeperTools/src/CutBookkeeperUtils.cxx b/Event/EventBookkeeperTools/src/CutBookkeeperUtils.cxx new file mode 100644 index 0000000000000000000000000000000000000000..b1ef7692ef35e95bd56da8f534139bd2b93521ad --- /dev/null +++ b/Event/EventBookkeeperTools/src/CutBookkeeperUtils.cxx @@ -0,0 +1,124 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include "CutBookkeeperUtils.h" + +namespace xAOD::CutBookkeeperUtils +{ + +xAOD::CutBookkeeper *resolveLink(const xAOD::CutBookkeeper *old, + xAOD::CutBookkeeperContainer &contToUpdate, + const xAOD::CutBookkeeperContainer &otherCont, + const std::vector<size_t> &otherIndexMap) +{ + { + xAOD::CutBookkeeperContainer::iterator matchIter = + std::find(contToUpdate.begin(), contToUpdate.end(), old); + if (matchIter != contToUpdate.end()) { + return *matchIter; + } + } + + { + xAOD::CutBookkeeperContainer::const_iterator matchIter = + std::find(otherCont.begin(), otherCont.end(), old); + if (matchIter != contToUpdate.end()) { + std::size_t pos = matchIter - otherCont.begin(); + return contToUpdate[otherIndexMap[pos]]; + } + } + + // If we didn't find it, we need to add it + xAOD::CutBookkeeper *newEBK = new xAOD::CutBookkeeper(); // will be owned by the container + if (newEBK->usingPrivateStore()) { newEBK->releasePrivateStore(); } + newEBK->makePrivateStore(old); + contToUpdate.push_back(newEBK); + return newEBK; +} + +StatusCode updateContainer(xAOD::CutBookkeeperContainer *contToUpdate, + const xAOD::CutBookkeeperContainer *otherCont) +{ + size_t origSize = contToUpdate->size(); + + // Vector of indices in contToUpdate of elements in otherCont. + std::vector<std::size_t> otherIndexMap(otherCont->size()); + // Loop through otherCont. + // If element already in contToUpdate, update event counts, otherwise create new element + for (std::size_t i = 0; i < otherCont->size(); ++i) { + const xAOD::CutBookkeeper *otherEBK = otherCont->at(i); + + // Loop through the container to be updated (contToUpdate) and see if we find a match + bool foundEBKToUpdate{false}; + for (std::size_t j = 0; j < contToUpdate->size(); ++j) { + xAOD::CutBookkeeper *ebkToUpdate = contToUpdate->at(j); + // Check if they are identical, if so, update; else add otherEBK + if (otherEBK->isEqualTo(ebkToUpdate)) { + ebkToUpdate->setPayload(ebkToUpdate->payload() + otherEBK->payload()); + otherIndexMap[i] = j; + foundEBKToUpdate = true; + break; + } + } // End: Inner loop over contToUpdate + if (!foundEBKToUpdate) { + xAOD::CutBookkeeper *newEBK = new xAOD::CutBookkeeper(); // will be owned by the container + if (newEBK->usingPrivateStore()) { newEBK->releasePrivateStore(); } + newEBK->makePrivateStore(otherEBK); + contToUpdate->push_back(newEBK); + std::size_t ebIdx = newEBK->index(); + otherIndexMap[i] = ebIdx; + } + } // End: Outer loop over contToUpdate + + // Now, we still need to fix the cross-referencing of the newly added CutBookkkeepers + for (std::size_t i = origSize; i < contToUpdate->size(); ++i) { + xAOD::CutBookkeeper *ebkToModify = contToUpdate->at(i); + + // Parent check + if (ebkToModify->hasParent()) { + const xAOD::CutBookkeeper *oldParent = ebkToModify->parent(); + const xAOD::CutBookkeeper *newParent = resolveLink (oldParent, + *contToUpdate, + *otherCont, + otherIndexMap); + ebkToModify->setParent (newParent); + } // Done fixing parent + + // Children check + std::vector<xAOD::CutBookkeeper *> newChildren; + for ( std::size_t oldIdx = 0; oldIdx < ebkToModify->nChildren(); ++oldIdx) { + const xAOD::CutBookkeeper *oldEBK = ebkToModify->child(oldIdx); + newChildren.push_back(resolveLink(oldEBK, + *contToUpdate, + *otherCont, + otherIndexMap)); + } // Done fixing children + ebkToModify->setChildren(newChildren); + + // Used others check + std::vector<xAOD::CutBookkeeper *> newOthers; + for (std::size_t oldIdx = 0; oldIdx < ebkToModify->nUsedOthers(); ++oldIdx) { + const xAOD::CutBookkeeper *oldEBK = ebkToModify->usedOther(oldIdx); + newOthers.push_back(resolveLink(oldEBK, + *contToUpdate, + *otherCont, + otherIndexMap)); + } // Done fixing used others + ebkToModify->setUsedOthers(newOthers); + + // Siblings check + std::vector<xAOD::CutBookkeeper*> newSiblings; + for (std::size_t oldIdx = 0; oldIdx < ebkToModify->nSiblings(); ++oldIdx) { + const xAOD::CutBookkeeper *oldEBK = ebkToModify->sibling(oldIdx); + newSiblings.push_back(resolveLink(oldEBK, + *contToUpdate, + *otherCont, + otherIndexMap)); + } // Done fixing siblings + ebkToModify->setSiblings(newSiblings); + } // Done fixing all cross references + return StatusCode::SUCCESS; +} + +} // xAOD::CutBookkeeperUtils diff --git a/Event/EventBookkeeperTools/src/CutBookkeeperUtils.h b/Event/EventBookkeeperTools/src/CutBookkeeperUtils.h new file mode 100644 index 0000000000000000000000000000000000000000..beaaef324bf0fd0d7a8ae9b58bce350bc093a2ac --- /dev/null +++ b/Event/EventBookkeeperTools/src/CutBookkeeperUtils.h @@ -0,0 +1,19 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef CUTBOOKKEEPERUTILS_H +#define CUTBOOKKEEPERUTILS_H + +#include <xAODCutFlow/CutBookkeeperContainer.h> + +namespace xAOD::CutBookkeeperUtils +{ + + /// @brief Helper function to update a container with information from another one + StatusCode updateContainer(xAOD::CutBookkeeperContainer *contToUpdate, + const xAOD::CutBookkeeperContainer *otherCont); + +} // xAOD::CutBookkeepersUtils + +#endif // CUTBOOKKEEPERUTILS_H diff --git a/Event/EventContainers/EventContainers/I_InternalIDC.h b/Event/EventContainers/EventContainers/I_InternalIDC.h index c336d4b964b0e4e5b47e9862b9aff113f065b705..71d7a0f2550d103ec661fa52e21ebe7174ca1398 100644 --- a/Event/EventContainers/EventContainers/I_InternalIDC.h +++ b/Event/EventContainers/EventContainers/I_InternalIDC.h @@ -8,7 +8,6 @@ #include "Identifier/IdentifierHash.h" #include "GaudiKernel/StatusCode.h" #include <vector> -#include <utility> namespace EventContainers{ class IDC_WriteHandleBase; @@ -22,9 +21,19 @@ virtualised. A standard iterator is provided for fast iteration in a sequential order. */ +template<typename T> +struct hashPair{ + IdentifierHash::value_type first; + const T* second; + constexpr hashPair(IdentifierHash::value_type f, const T* s) : first(f), second(s) { } + bool operator <(const hashPair &b) const noexcept{ + return first < b.first; + } +}; + class I_InternalIDC{ public: - typedef std::pair < IdentifierHash::value_type, const void* > hashPair; + typedef EventContainers::hashPair<void> hashPair; typedef std::vector < hashPair >::const_iterator InternalConstItr; #include "EventContainers/deleter.h" virtual InternalConstItr cbegin() const=0; diff --git a/Event/EventContainers/EventContainers/IdentifiableContainerMT.h b/Event/EventContainers/EventContainers/IdentifiableContainerMT.h index b2fbf7afa34b74fb226159338f4f9fe8a6cbc0e3..35174e751c92bd268998a66c3cc52a03b3bb99a1 100644 --- a/Event/EventContainers/EventContainers/IdentifiableContainerMT.h +++ b/Event/EventContainers/EventContainers/IdentifiableContainerMT.h @@ -215,9 +215,10 @@ public: return IdentifiableContainerBase::numberOfCollections(); } - const std::vector < std::pair<IdentifierHash::value_type, const T*> >& GetAllHashPtrPair() const{ + const std::vector < EventContainers::hashPair<T> >& GetAllHashPtrPair() const{ static_assert(sizeof(const T*) == sizeof(const void*) && std::is_pointer<const T*>::value); - return reinterpret_cast<const std::vector < std::pair<IdentifierHash::value_type, const T*> >&> + static_assert(sizeof(EventContainers::hashPair<T>) == sizeof(EventContainers::hashPair<void>)); + return reinterpret_cast<const std::vector < EventContainers::hashPair<T> >&> (m_link->getAllHashPtrPair()); } diff --git a/Event/EventContainers/EventContainers/InternalOffline.h b/Event/EventContainers/EventContainers/InternalOffline.h index ed8e2d9d28c3dae0a9d0a7adebce2333a4d4e3a5..e9ee8e106d8ab71512f7f901b83ed67e5d8c31a1 100644 --- a/Event/EventContainers/EventContainers/InternalOffline.h +++ b/Event/EventContainers/EventContainers/InternalOffline.h @@ -38,7 +38,7 @@ public: virtual void* removeCollection( IdentifierHash hashId ) override; virtual void destructor(deleter_f*) noexcept override; private: - std::vector<std::pair<IdentifierHash::value_type, const void*>> m_map; + std::vector<I_InternalIDC::hashPair> m_map; size_t m_maximumSize; }; diff --git a/Event/EventContainers/EventContainers/InternalOfflineFast.h b/Event/EventContainers/EventContainers/InternalOfflineFast.h index a78aae631afce51190e2c474bf67bbc1ff7db85c..16cf509c7300bc9e1ddb5b9425b9f7666b74796e 100644 --- a/Event/EventContainers/EventContainers/InternalOfflineFast.h +++ b/Event/EventContainers/EventContainers/InternalOfflineFast.h @@ -39,7 +39,7 @@ public: virtual void* removeCollection( IdentifierHash hashId ) override; virtual void destructor(deleter_f*) noexcept override; private: - mutable std::vector<std::pair<IdentifierHash::value_type, const void*>> m_map; + mutable std::vector<I_InternalIDC::hashPair> m_map; std::vector<const void*> m_fullMap; mutable std::mutex m_waitMutex ATLAS_THREAD_SAFE; mutable std::atomic<bool> m_needsupdate ATLAS_THREAD_SAFE; //These mutables are carefully thought out, do not change diff --git a/Event/EventContainers/EventContainers/InternalOfflineMap.h b/Event/EventContainers/EventContainers/InternalOfflineMap.h index d101cef3f561931d93290193bd5472553472e249..dbd9b57180f08f80783eb6b7a168cd1fb6bb7edc 100644 --- a/Event/EventContainers/EventContainers/InternalOfflineMap.h +++ b/Event/EventContainers/EventContainers/InternalOfflineMap.h @@ -40,7 +40,7 @@ public: virtual void* removeCollection( IdentifierHash hashId ) override; virtual void destructor(deleter_f*) noexcept override; private: - mutable std::vector<std::pair<IdentifierHash::value_type, const void*>> m_map; + mutable std::vector<I_InternalIDC::hashPair> m_map; std::unordered_map<IdentifierHash::value_type, const void*> m_fullMap; mutable std::mutex m_waitMutex ATLAS_THREAD_SAFE; mutable std::atomic<bool> m_needsupdate ATLAS_THREAD_SAFE; //These mutables are carefully thought out, do not change diff --git a/Event/EventContainers/EventContainers/InternalOnline.h b/Event/EventContainers/EventContainers/InternalOnline.h index aa90b41816b3bac1d250e42651792e9f91043731..219b902295291b3a52de58d023f5450c2016a3fe 100644 --- a/Event/EventContainers/EventContainers/InternalOnline.h +++ b/Event/EventContainers/EventContainers/InternalOnline.h @@ -49,7 +49,7 @@ public: private: EventContainers::IdentifiableCacheBase *m_cacheLink; mutable std::vector< IdentifierHash > m_waitlist ATLAS_THREAD_SAFE; - mutable std::vector<std::pair<IdentifierHash::value_type, const void*>> m_map ATLAS_THREAD_SAFE; + mutable std::vector<I_InternalIDC::hashPair> m_map ATLAS_THREAD_SAFE; mutable std::mutex m_waitMutex ATLAS_THREAD_SAFE; mutable std::vector<bool> m_mask ATLAS_THREAD_SAFE; mutable std::atomic<bool> m_waitNeeded ATLAS_THREAD_SAFE; //These mutables are carefully thought out, do not change diff --git a/Event/EventContainers/src/InternalOffline.cxx b/Event/EventContainers/src/InternalOffline.cxx index 85165e6ff305e3ad6bb196244d85335970d82b25..c3acec4f8764dccf82729716d3069a502347e925 100644 --- a/Event/EventContainers/src/InternalOffline.cxx +++ b/Event/EventContainers/src/InternalOffline.cxx @@ -9,7 +9,13 @@ using namespace EventContainers; typedef I_InternalIDC::InternalConstItr InternalConstItr; -InternalOffline::InternalOffline(size_t max) : m_maximumSize(max) {} +InternalOffline::InternalOffline(size_t max) : m_maximumSize(max) { + //Check optimization assumptions + static_assert(std::is_trivially_copyable<hashPair>::value); + static_assert(std::is_trivially_destructible<hashPair>::value); + static_assert(std::is_trivially_copyable<IdentifierHash>::value); + static_assert(std::is_trivially_destructible<IdentifierHash>::value); +} bool InternalOffline::tryAddFromCache(IdentifierHash hash, EventContainers::IDC_WriteHandleBase&) { diff --git a/Event/EventInfoMgt/src/TagInfoMgr.cxx b/Event/EventInfoMgt/src/TagInfoMgr.cxx index 78fcae24d6cedc1b4f90ee557b76052f13b6c176..6c45e39c9f2aa1aeb91ac48d0d5e81c93c2305c7 100755 --- a/Event/EventInfoMgt/src/TagInfoMgr.cxx +++ b/Event/EventInfoMgt/src/TagInfoMgr.cxx @@ -366,6 +366,7 @@ TagInfoMgr::fillTagInfo(const CondAttrListCollection* tagInfoCond, TagInfo* tagI } + StatusCode TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection* tagInfoCond) { @@ -393,11 +394,17 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection runNumber = m_currentRun; } else if( m_conditionsRun != EventIDBase::UNDEFNUM ) { - // For HLT use the conditionsRun retrieved from the first BeginRun incident + // Not completely sure of the use-case for the setting of the conditions run number, but + // this will be used if the current run number has not been set. RDS 2020/08 runNumber = m_conditionsRun; + ATH_MSG_INFO( "fillMetaData: Using conditions run number: " << m_conditionsRun << " rather then current run number: " << m_currentRun); } else { - ATH_MSG_ERROR( "fillMetaData: Could not get event info neither via retrieve nor from the EventSelector"); - return (StatusCode::FAILURE); + // For simulation, we may be in the initialization phase and + // must get the run number from the event selector + if (StatusCode::SUCCESS != getRunNumber (runNumber)) { + ATH_MSG_ERROR( "fillMetaData: Could not get event info neither via retrieve nor from the EventSelectror"); + return (StatusCode::FAILURE); + } } // Copy tags to AttributeList @@ -470,6 +477,67 @@ TagInfoMgr::fillMetaData (const TagInfo* tagInfo, const CondAttrListCollection } +StatusCode +TagInfoMgr::getRunNumber (unsigned int& runNumber) +{ + // check if EventSelector is being used to override run numbers if + // so, we return the runNumber from the properties of the + // EventSelector + + // Get run number parameter from the EventSelector + ATH_MSG_DEBUG( "getRunNumber: check if tag is set in jobOpts"); + // Get name of event selector from the application manager to + // make sure we get the one for MC signal events + IProperty* propertyServer(0); + StatusCode sc = serviceLocator()->service("ApplicationMgr", propertyServer); + if (sc != StatusCode::SUCCESS ) { + ATH_MSG_ERROR( "getRunNumber: Cannot get ApplicationMgr "); + return StatusCode::FAILURE; + } + StringProperty property("EvtSel", ""); + sc = propertyServer->getProperty(&property); + if (!sc.isSuccess()) { + ATH_MSG_ERROR( "getRunNumber: unable to get EvtSel: found " << property.value()); + return StatusCode::FAILURE; + } + // Get EventSelector for ApplicationMgr + std::string eventSelector = property.value(); + sc = serviceLocator()->service(eventSelector, propertyServer); + if (sc != StatusCode::SUCCESS ) { + ATH_MSG_ERROR( "getRunNumber: Cannot get EventSelector " << eventSelector); + return StatusCode::FAILURE; + } + BooleanProperty overrideRunNumber = BooleanProperty("OverrideRunNumber", false); + sc = propertyServer->getProperty(&overrideRunNumber); + if (!sc.isSuccess()) { + // Not all EventSelectors have this property, but we should + // not get here if the ES is not one for simulation => return failure + ATH_MSG_WARNING( "getRunNumber: unable to get OverrideRunNumber property from EventSelector "); + return StatusCode::FAILURE; + } + if (overrideRunNumber.value()) { + IntegerProperty runNumberProp = IntegerProperty("RunNumber", 0); + sc = propertyServer->getProperty(&runNumberProp); + if (!sc.isSuccess()) { + ATH_MSG_ERROR( "getRunNumber: unable to get RunNumber from EventSelector: found " + << runNumberProp.value()); + return StatusCode::FAILURE; + } + else { + runNumber = runNumberProp.value(); + ATH_MSG_DEBUG( "getRunNumber: Run number: " + << runNumber << " obtained from " + << eventSelector); + } + } + else { + ATH_MSG_ERROR( "getRunNumber: OverrideRunNumber from EventSelector is false "); + return StatusCode::FAILURE; + } + return StatusCode::SUCCESS; +} + + void TagInfoMgr::handle(const Incident& inc) { diff --git a/Event/EventInfoMgt/src/TagInfoMgr.h b/Event/EventInfoMgt/src/TagInfoMgr.h index 17e14a62ebcc45ae2d3fee442a15b0ab92565381..1813e63fc6fb52b3ee7aa55c801c19863e85f363 100755 --- a/Event/EventInfoMgt/src/TagInfoMgr.h +++ b/Event/EventInfoMgt/src/TagInfoMgr.h @@ -175,6 +175,7 @@ private: TagInfoMgr(); TagInfoMgr(const TagInfoMgr&); TagInfoMgr &operator=(const TagInfoMgr&); + StatusCode getRunNumber (unsigned int& runNumber); /////////////////////////////////////////////////////////////////// // Private data: diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/cleanup.sh b/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/cleanup.sh deleted file mode 100755 index a85b4571ffe8090ba695bdce69c62d38140a6925..0000000000000000000000000000000000000000 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/cleanup.sh +++ /dev/null @@ -1,7 +0,0 @@ - rm -rf output_stream* - rm lbn_anal_map_stream* - rm lbnevents_* - rm runs_lbn_files.txt - rm log_lbn_anal* - rm lbn_anal_map.txt - diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_anal_map_splitter.py b/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_anal_map_splitter.py deleted file mode 100644 index 4aa40c66b1720bbcc657f11bbfa7242993a88555..0000000000000000000000000000000000000000 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_anal_map_splitter.py +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -import sys - -#get the list of special run,lbn with more than 1 file -special_run_lbn = {} -with open("runs_lbn_files.txt") as f: - for line in f: - #print line - if not line.startswith("root"): - print "WARNING: line doesn't start with 'root'" - print line - continue - filenm=line.rstrip() - print filenm - finfo=filenm.split(".") - run=finfo[3] - lbi=4 #index of the lbn info - while "_lb" not in finfo[lbi] and lbi<20: - lbi=lbi+1 - if lbi>=20: - print finfo[lbi], "doesnt contain _lb" - exit(1) - lbn=finfo[lbi].replace("_lb","") - print run+"_"+lbn - if run+"_"+lbn in special_run_lbn: - if filenm in special_run_lbn[run+"_"+lbn]: - print filenm, "already in map for ",run,lbn - else: - special_run_lbn[run+"_"+lbn].append(filenm) - else: - special_run_lbn[run+"_"+lbn]=[filenm] - for key in special_run_lbn.keys(): - #if len(special_run_lbn[key])>1: print special_run_lbn[key] - pass - print "done with special_run_lbn" - -#do the work -maxstream = int(sys.argv[1]) -print "maxstream=",maxstream -for s in range(0,maxstream+1): #50 - with open("lbn_anal_map_stream"+str(s)+".txt") as f: - tot=0 - nfile=1 - of=open("output_stream"+str(s)+"/lbn_anal_map_"+str(nfile)+".txt","w") - of2=open("output_stream"+str(s)+"/filelist_"+str(nfile)+".txt","w") - for line in f: - linfo=line.split(" ") - #print line - #print linfo[16] - tot+=int(linfo[16]) - run=linfo[3].replace(",","").zfill(8) - lbn=linfo[5].replace(",","").zfill(4) - if tot>100: - #replace last bit of line and also write it to the new file - extra=tot-100 - forthisone=int(linfo[16])-extra - rline=line.replace(linfo[16]+" wanted",str(forthisone)+" wanted") - of.write(rline) - if run+"_"+lbn in special_run_lbn: - for f in special_run_lbn[run+"_"+lbn]: - #print of2.tell() - if of2.tell()>0: of2.write(",") - of2.write(f) - else: - print run,lbn," not in files map!" - #print line, rline - #print run, lbn - - of.close(); of2.close(); nfile+=1 - of=open("output_stream"+str(s)+"/lbn_anal_map_"+str(nfile)+".txt","w") - of2=open("output_stream"+str(s)+"/filelist_"+str(nfile)+".txt","w") - tot=extra #the number left over from the last set - - rline=line.replace(linfo[16]+" wanted",str(extra)+" wanted") - of.write(rline) - if run+"_"+lbn in special_run_lbn: - for f in special_run_lbn[run+"_"+lbn]: - if of2.tell()>0: of2.write(",") - of2.write(f) - else: - print run,lbn," not in files map!" - - elif tot==100: - of.write(line) - if run+"_"+lbn in special_run_lbn: - for f in special_run_lbn[run+"_"+lbn]: - if of2.tell()>0: of2.write(",") - of2.write(f) - else: - print run,lbn," not in files map!" - - of.close(); of2.close(); nfile+=1 - of=open("output_stream"+str(s)+"/lbn_anal_map_"+str(nfile)+".txt","w") - of2=open("output_stream"+str(s)+"/filelist_"+str(nfile)+".txt","w") - tot=0 - else: - of.write(line) - if run+"_"+lbn in special_run_lbn: - for f in special_run_lbn[run+"_"+lbn]: - #print of2.tell() - if of2.tell()>0: of2.write(",") - of2.write(f) - else: - print run,lbn," not in files map!" - - print "done ",s - of.close(); of2.close() - diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_analyze.C b/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_analyze.C deleted file mode 100644 index 6a16bff3c6c8febf0172b3f007fa995a74d9d9eb..0000000000000000000000000000000000000000 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/lbn_analyze.C +++ /dev/null @@ -1,194 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include <map> -#include "TRandom3.h" - -class lbn_info{ -public: - lbn_info(){nevt=0; intlumi=0; nevtwanted=0;} - int nevt; - float intlumi; - int nevtwanted; -}; - -class run_info{ -public: - run_info(){nevt=0; intlumi=0; nevtwanted=0;} - int nevt; - float intlumi; - std::map<int,lbn_info> lbnmap; - int nevtwanted; -}; - -FILE *outfile=fopen("lbn_anal_map.txt","w"); -int debug=1; - -std::map< int, int > eventcounts; -void readeventcounts(int run){ - eventcounts.clear(); - char buf[50]; - sprintf(buf,"lbnevents_%d.txt",run); - if (debug) printf("Opening %s, eventcounts size is %lu\n",buf,eventcounts.size()); - FILE *fp = fopen(buf,"r"); - if (!fp) printf("Failed to open %s!!!\n",buf); - char *line=new char[500]; - while (fgets(line,480,fp)) { - int lbn,ne,nf,runn; - float mb; - int s=sscanf(&line[0]," ... Run %d, LB %d has %d events, %d RAW files and %f MB",&runn,&lbn,&ne,&nf,&mb); - if (s>4){ - assert(run==runn); - if (debug) printf("run %d lbn %d has %d events\n",run,lbn,ne); - eventcounts[lbn]=ne; - } - else { - printf("s=%d, bad read?\n",s); - assert(false); - } - } - if (debug) printf("Closing %s, eventcounts size is %lu\n",buf,eventcounts.size()); - fclose(fp); -} - -void lbn_analyze(int stream, int nwanted) -{ - FILE *fp = fopen("lbn","r"); - if (!fp) printf("Failed to open lbn input file!!!\n"); - char *line=new char[500]; - int run,lbn,L1Acc,beforeps,afterps,valid; //L1p,L2p,L3p - int liveL1,livebp,liveap; - float instlumi,dt,avevtperbx,live,L1p,HLTp,LARp; - //float intlumi,intlumitrig; - int grun=0; - float gtotaltotallumi=0,gtotaltotallumiprescaled=0; - float gtotallumi=0, gtotallumiprescaled=0; - - TRandom myrand; - myrand.SetSeed(0); - printf("- myrand seed is %u\n",myrand.GetSeed()); - myrand.SetSeed(myrand.Integer(10000000)+stream); - printf("- myrand seed is now %u\n",myrand.GetSeed()); - - std::map<int,run_info> runmap; - - while (fgets(line,480,fp)) { - if (line[0]!='-') continue; - -// int s=sscanf(&line[0],"--- LumiCalculator : %d[%d]: L1Acc: %d, Livetime trigger L1Acc: %d, InstLumi: %f, deltaT: %f, AvEvtsPerBX: %f, BeforePrescale: %d, AfterPrescale: %d, Livetime trigger BeforePrescale: %d Livetime trigger AfterPrescale: %d, Livefrac: %f, L1Presc: %d, L2Presc: %d, L3Presc: %d, Valid: %d", &run,&lbn,&L1Acc,&liveL1,&instlumi,&dt,&avevtperbx,&beforeps,&afterps,&livebp,&liveap,&live,&L1p,&L2p,&L3p,&valid); - int s=sscanf(&line[0],"--- LumiCalculator : %d[%d]: L1Acc: %d, Livetime trigger L1Acc: %d, InstLumi: %f, deltaT: %f, AvEvtsPerBX: %f, BeforePrescale: %d, AfterPrescale: %d, Livetime trigger BeforePrescale: %d Livetime trigger AfterPrescale: %d, Livefrac: %f, L1Presc: %f, HLTPresc: %f, Valid: %d, LAr ready fraction: %f", &run,&lbn,&L1Acc,&liveL1,&instlumi,&dt,&avevtperbx,&beforeps,&afterps,&livebp,&liveap,&live,&L1p,&HLTp,&valid,&LARp); - - if (s>8){ - if (debug) printf("Got %d values : run=%d, lbn=%d, L1Acc=%d, instlumi=%f, L1p=%f, dt=%f, live=%f, afterps=%d \n",s,run,lbn,L1Acc,instlumi,L1p,dt,live,afterps); - - if (run!=grun){ - if (grun>0){//change of run - runmap[grun].intlumi=gtotallumi; printf("Setting lumi for run %d to %f\n",grun,gtotallumi); - if (debug) printf("Adding to totaltotal lumis\n"); - gtotaltotallumi+=gtotallumi; gtotaltotallumiprescaled+=gtotallumiprescaled; - gtotallumi=0;gtotallumiprescaled=0;//reset the int lumi calculation for this run - //runmap[grun].nevt=0; - } - grun=run;//save the run number - printf("Setting grun to %d\n",run); - - //read in event counts from runquery file for run - readeventcounts(run); - - }//new run - - if (L1p<0) { - runmap[run].lbnmap[lbn].nevt=0; - if (eventcounts[lbn]!=0) printf("For lbn %d, L1p<0 but eventcounts is %d\n",lbn,eventcounts[lbn]); - } - else{ - int ne = L1Acc;//afterps - if (ne!=eventcounts[lbn]){ - if (0==stream) printf("For lbn %d, ne from lumicalc is %d but we will trust runquery value of %d\n",lbn,ne,eventcounts[lbn]); - ne=eventcounts[lbn]; - } - if (0==ne){dt=0; printf("For lbn %d, setting lumi to 0 since 0 events were recorded\n",lbn);} - runmap[run].lbnmap[lbn].nevt=ne; - runmap[run].lbnmap[lbn].intlumi=instlumi*dt*live; - runmap[run].nevt+=ne; - gtotallumiprescaled+= instlumi*dt*live/L1p; - gtotallumi+= instlumi*dt*live; - } - if (debug) printf("grun=%d, gtotallumi=%f, gtotallumiprescaled=%f\n",grun,gtotallumi,gtotallumiprescaled); - }//good line - }//loop over lines in file - - //after last run - runmap[grun].intlumi=gtotallumi; printf("Setting lumi for run %d to %f\n",grun,gtotallumi); - if (debug) printf("Adding to totaltotal lumis for last run\n"); - gtotaltotallumi+=gtotallumi; gtotaltotallumiprescaled+=gtotallumiprescaled; - - fclose(fp); - printf("- %lu runs, gtotaltotallumi=%f, gtotaltotallumiprescaled=%f\n",runmap.size(),gtotaltotallumi,gtotaltotallumiprescaled); - - if (runmap.size()<1) {printf("- runmap size is %lu, quitting!\n",runmap.size()); return;} - //return; - - //check the total lumi... - double tempr=0; - for (std::map<int,run_info>::const_iterator r=runmap.begin(); r!=runmap.end(); ++r){ - tempr += r->second.intlumi; - } - if (fabs(tempr-gtotaltotallumi)/tempr>0.001){ - printf("tempr=%f and gtotaltotallumi=%f\n",tempr,gtotaltotallumi); - assert(false); - } - - for (int e=0;e<nwanted;++e){ - - //pick a random run, proportional to intlumi - double rnd = myrand.Uniform(tempr); - run=-1; - for (std::map<int,run_info>::const_iterator r=runmap.begin(); r!=runmap.end(); ++r){ - if (rnd<r->second.intlumi) {run=r->first; break;} - rnd -= r->second.intlumi; - } - assert(run>=0); - - //check the total run lumi... - double tempt=0; - for (std::map<int,lbn_info>::const_iterator l=runmap[run].lbnmap.begin(); l!=runmap[run].lbnmap.end(); ++l){ - tempt += l->second.intlumi; - } - if (fabs(tempt-runmap[run].intlumi)/tempt>0.001){ - printf("tempt=%f and runmap[%d].intlumi=%f\n",tempt,run,runmap[run].intlumi); - assert(false); - } - - //pick a random lbn, proportional to intlumi - rnd = myrand.Uniform(tempt); - lbn=-1; - for (std::map<int,lbn_info>::const_iterator l=runmap[run].lbnmap.begin(); l!=runmap[run].lbnmap.end(); ++l){ - if (rnd<l->second.intlumi) {lbn=l->first; break;} - rnd -= l->second.intlumi; - } - assert(lbn>=0); - - runmap[run].nevtwanted++; runmap[run].lbnmap[lbn].nevtwanted++; - if (debug) printf("- stream %d, run %d, lbn %d, choose %d of out %d\n",stream,run,lbn,runmap[run].lbnmap[lbn].nevtwanted,runmap[run].lbnmap[lbn].nevt); - - }//loop over nwanted - - for (std::map<int,run_info>::const_iterator r=runmap.begin(); r!=runmap.end(); ++r){ - int totnevt=0; float totintlumi=0; - printf("stream %d, run %d, has %d events and %f/ub, %f intlumi of total, and %d wanted\n", stream, - r->first,r->second.nevt,r->second.intlumi,r->second.intlumi/gtotaltotallumi,r->second.nevtwanted); - for (std::map<int,lbn_info>::const_iterator l=r->second.lbnmap.begin(); l!=r->second.lbnmap.end(); ++l){ - fprintf(outfile,"stream %d, run %d, lbn %d, has %d events and %f/ub, %f intlumi of run, and %d wanted", stream, r->first, - l->first,l->second.nevt,l->second.intlumi,l->second.intlumi/r->second.intlumi,l->second.nevtwanted); - if (l->second.nevtwanted>l->second.nevt) fprintf(outfile," : WARNING, more than available, will be duplicates!\n"); else fprintf(outfile,"\n"); - totnevt+=l->second.nevt; totintlumi+=l->second.intlumi; - } - if (totnevt!=r->second.nevt) printf(" XXX events do not agree !!! \n"); - if (totintlumi>0.0 && fabs(totintlumi - r->second.intlumi)/totintlumi>.001) printf(" XXX intlumi does not agree !!! %f %f \n",totintlumi,r->second.intlumi); - - } - printf("--\n\n"); -} - diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/query.sh b/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/query.sh deleted file mode 100755 index f59b17565f64db0b838eeb77955eb036f3df72d0..0000000000000000000000000000000000000000 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/query.sh +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/bash - -#setupATLAS -#lsetup rucio -#voms-proxy-init -voms atlas - -#use GRL, from: http://atlasdqm.web.cern.ch/atlasdqm/grlgen/All_Good/?C=M;O=D -#consult: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/GoodRunListsForAnalysisRun2 -#and: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/DataMCForAnalysis - -#dq="data15_13TeV.periodAllYear_DetStatus-v73-pro19-08_DQDefects-00-01-02_PHYS_StandardGRL_All_Good.xml" -#wget -nc http://atlasdqm.web.cern.ch/atlasdqm/grlgen/All_Good/$dq - -#Can just go here: https://atlas-lumicalc.cern.ch/ ... note use --online lumi tag for HI, unless a better one is available -#and request --verbose output and use physics trigger HLT_noalg_zb_L1ZB, -#then wget "Raw iLimuiCalc.exe output", and "mv output.txt lbn_2015; ln -s lbn_2015 lbn" -#rm -f lbn # if you want to redo this -if [ ! -f "lbn" ]; then -iLumiCalc.exe -t L1_ZB -V -x $dq --livetrigger=L1_EM12 > lbn -fi -grep ": Total" lbn ; echo - -#get info on number of events and files per lumi block in each run -#rm -f lbnevents* # if you want to redo this -#rm -f runs_lbn_files.txt # if you want to redo this -#sstream="physics_ZeroBias" #pp or UPC -sstream="physics_MinBiasOverlay" #HI -#suf="merge" -suf="daq" -rm -f runs_temp.txt -for runn in `grep "subchild node value" lbn|cut -f 3 -d : |sed 's/[\x01-\x1F\x7F]//g'|sed 's%\[0m%%g'|sed 's%\[34m%%g'|sed ':a;N;$!ba;s/\n/ /g' `; do - if [ ! -f lbnevents_${runn}.txt ]; then - echo "Getting Nevent info for run $runn "; - python GetNEventsLB.py -r $runn -s $sstream |grep "... Run" > lbnevents_${runn}.txt;# Only works on lxplus now! - fi - if [ ! -f runs_lbn_files.txt ]; then - echo "Getting file info for run $runn " - rucio list-file-replicas data16_hip8TeV.00${runn}.${sstream}.${suf}.RAW | grep "CERN-PROD_TZDISK" | cut -d '|' -f 6|sed "s% CERN-PROD_TZDISK: gsiftp://eosatlassftp.cern.ch:2811/%root://eosatlas.cern.ch//%" | sed -r 's/\s+//g' | grep "_lb" > runs_temp_temp.txt - cat runs_temp_temp.txt >> runs_temp.txt - echo -n "Replicated? : "; rucio list-dataset-replicas data16_hip8TeV.00${runn}.${sstream}.${suf}.RAW|grep CERN-PROD_TZDISK - nfound=`grep -c data runs_temp_temp.txt` - echo "Found $nfound files on TZDISK" - if [ $nfound -eq 0 ]; then #look also on DATADISK if not found on TZDISK - echo "Getting file info for run $runn " - rucio list-file-replicas data16_hip8TeV.00${runn}.${sstream}.${suf}.RAW | grep "CERN-PROD_DATADISK" | cut -d '|' -f 6|sed "s% CERN-PROD_DATADISK: gsiftp://eosatlassftp.cern.ch:2811/%root://eosatlas.cern.ch//%" | sed -r 's/\s+//g' | grep "_lb" > runs_temp_temp.txt - cat runs_temp_temp.txt >> runs_temp.txt - echo -n "Replicated? : "; rucio list-dataset-replicas data16_hip8TeV.00${runn}.${sstream}.${suf}.RAW|grep CERN-PROD_DATADISK - nfound=`grep -c data runs_temp_temp.txt` - echo "Found $nfound files on DATADISK" - fi - fi -done #loop over all runs -rm runs_temp_temp.txt -if [ ! -f runs_lbn_files.txt ]; then mv runs_temp.txt runs_lbn_files.txt ; fi - -#rm -f lbn_anal_map.txt # if you want to redo this -if [ ! -f lbn_anal_map.txt ]; then root -l -b -q run_lbn_analyze.C > log_lbn_analyze.txt ; fi - -echo -n "Total events in dataset before GRL: " -cat lbnevents_*.txt |tr -s ' ' | cut -d ' ' -f 8 |awk '{total = total + $1}END{print total}' -echo -n "Total events in dataset from log_lbn_analyze.txt: " -grep "stream 0" log_lbn_analyze.txt|cut -d ' ' -f 6 |awk '{total = total + $1}END{print total}' -echo -n "Total events in dataset from lbn_anal_map: " -grep "stream 1," lbn_anal_map.txt |cut -d ' ' -f 8 |awk '{total = total + $1}END{print total}' -echo -n "Selected events per stream: " -grep "stream 8," lbn_anal_map.txt |cut -d ' ' -f 17 |awk '{total = total + $1}END{print total}' - -maxstream=19 #0 up to 49 - 19 does 1M events -#split into all the desired streams -for s in $(seq 0 $maxstream); do - grep "stream ${s}," lbn_anal_map.txt | grep -v "and 0 wanted" > lbn_anal_map_stream${s}.txt - mkdir -p output_stream${s} -done - -#split into jobs for each stream and make filelist and lbn_anal_map files -rm -f output_stream*/filelist_*.txt output_stream*/lbn_anal_map_*.txt -python lbn_anal_map_splitter.py $maxstream > log_lbn_anal_map_splitter.txt -rm output_stream*/*501.txt -grep "doesnt contain" log_lbn_anal_map_splitter.txt -if [ $? == 0 ]; then exit; fi -grep -c "not in files map" log_lbn_anal_map_splitter.txt -#if [ $? == 0 ]; then exit; fi -echo "$? files not found in map..." - -for s in $(seq 1 $maxstream); do - echo "renaming stream $s to 0" - for f in {1..500}; do sed -i -e "s%stream $s,%stream 0,%g" output_stream${s}/lbn_anal_map_${f}.txt; done -done - -it=2016_hip8TeV_1 #just a name to tag this set of files -for s in $(seq 0 $maxstream); do cd output_stream${s}; tar cfz stream${s}_${it}.tar.gz *.txt; cd ..; done -mv -v output_stream*/stream*_${it}.tar.gz ~/public/overlay/lists/ - -#to check the events in each map: -for s in $(seq 0 $maxstream); do - echo -n "files with 100 events in stream $s :" - for f in {1..500}; do cat output_stream${s}/lbn_anal_map_$f.txt | cut -d ' ' -f 17 |awk '{total = total + $1}END{print total}'; done |grep -c 100 -done - -#to show number of files in each filelist: -echo ; echo "files in each filelist (in stream 0)..." ; for f in output_stream0/filelist_*.txt; do echo -n `grep -o $sstream $f | wc -l`; echo " : $f"; done |sort -n - diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/run_lbn_analyze.C b/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/run_lbn_analyze.C deleted file mode 100644 index 608315cc64c89f9c3602d1a666b4c06affb3bd77..0000000000000000000000000000000000000000 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/run_lbn_analyze.C +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -{ - gROOT->ProcessLine(".L lbn_analyze.C+"); - - for (int i=0; i<50; ++i){//number of zerobias streams to make - //gSystem->Sleep(2000);//to get new random number seed - lbn_analyze(i,50000);//number of events per zerobias stream - } - -} - diff --git a/Event/xAOD/xAODEventInfoAthenaPool/share/AOD-20.0.0.3-full.pool.root.ref b/Event/xAOD/xAODEventInfoAthenaPool/share/AOD-20.0.0.3-full.pool.root.ref new file mode 100644 index 0000000000000000000000000000000000000000..dacd4675bbdad4f8decacea4f56789c6865463da --- /dev/null +++ b/Event/xAOD/xAODEventInfoAthenaPool/share/AOD-20.0.0.3-full.pool.root.ref @@ -0,0 +1,500 @@ +Event index 0 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16554 + bcid: 43 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35002 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 0 + mcChannelNumber: 105200 + mcEventNumber: 35002 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 1 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 168 + bcid: 219 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35003 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 0 + mcChannelNumber: 105200 + mcEventNumber: 35003 + mcEventWeights: [-1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 2 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16549 + bcid: 33 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35004 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35004 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 3 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16552 + bcid: 217 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35005 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35005 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 4 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16554 + bcid: 304 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35006 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35006 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 5 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16552 + bcid: 246 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35007 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35007 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 6 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 147625 + bcid: 15 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35008 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35008 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 7 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 147625 + bcid: 217 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35009 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 0 + mcChannelNumber: 105200 + mcEventNumber: 35009 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 8 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16553 + bcid: 167 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35010 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35010 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + +Event index 9 +--> EventInfo +xAOD::EventInfo_v1 + actualInteractionsPerCrossing: 30.0 + averageInteractionsPerCrossing: 30.0 + backgroundFlags: 16554 + bcid: 150 + beamPosSigmaX: 0.0 + beamPosSigmaXY: -0.0 + beamPosSigmaY: 0.0 + beamPosSigmaZ: 56.4 + beamPosX: -0.0 + beamPosY: 1.1 + beamPosZ: -6.1 + beamStatus: 0 + beamTiltXZ: -0.0 + beamTiltYZ: -0.0 + coreFlags: 0 + detDescrTags: [] + detectorMask0: 0 + detectorMask1: 0 + detectorMask2: 0 + detectorMask3: 0 + eventNumber: 35011 + eventTypeBitmask: 1 + extendedLevel1ID: 0 + forwardDetFlags: 0 + larFlags: 0 + level1TriggerType: 0 + lumiBlock: 116 + lumiFlags: 32767 + mcChannelNumber: 105200 + mcEventNumber: 35011 + mcEventWeights: [1.0] + muonFlags: 0 + pixelFlags: 0 + runNumber: 189751 + sctFlags: 0 + statusElement: 0 + streamTagDets: [] + streamTagNames: [] + streamTagObeysLumiblock: [] + streamTagRobs: [] + streamTagTypes: [] + tileFlags: 65551 + timeStamp: 1316868299 + timeStampNSOffset: 0 + trtFlags: 0 + + diff --git a/Event/xAOD/xAODEventInfoAthenaPool/share/xAODEventInfoAthenaPool_20.0.0.3.ref b/Event/xAOD/xAODEventInfoAthenaPool/share/xAODEventInfoAthenaPool_20.0.0.3.ref index cdc9f7ebdaf745c9ac76f01155c64a8eaa03d9ac..697ff3d25a2bd1eed381c4c380d4b6cab43710fb 100644 --- a/Event/xAOD/xAODEventInfoAthenaPool/share/xAODEventInfoAthenaPool_20.0.0.3.ref +++ b/Event/xAOD/xAODEventInfoAthenaPool/share/xAODEventInfoAthenaPool_20.0.0.3.ref @@ -1,84 +1,87 @@ -Thu Jan 30 12:26:06 CET 2020 -Preloading tcmalloc_minimal.so +Fri Aug 14 17:09:27 EDT 2020 Py:Athena INFO including file "AthenaCommon/Preparation.py" -Py:Athena INFO using release [WorkDir-22.0.9] [x86_64-centos7-gcc8-opt] [xAODEventInfoEvolution-master-20200128/240ecd7] -- built on [2020-01-30T1225] +Py:Athena INFO using release [?-22.0.0] [?] [?/?] -- built on [?] Py:Athena INFO including file "AthenaCommon/Atlas.UnixStandardJob.py" Py:Athena INFO executing ROOT6Setup Py:Athena INFO including file "AthenaCommon/Execution.py" Py:Athena INFO including file "xAODEventInfoAthenaPool/xAODEventInfoAthenaPool_20.0.0.3_test.py" Py:Athena INFO including file "AthenaPoolUtilities/TPCnvTest.py" -Py:ConfigurableDb INFO Read module info for 5610 configurables from 4 genConfDb files +Py:ConfigurableDb INFO Read module info for 907 configurables from 2 genConfDb files Py:ConfigurableDb INFO No duplicates have been found: that's good ! -Warning in <TInterpreter::ReadRootmapFile>: class CP::IMuonCalibrationAndSmearingTool found in libMuonMomentumCorrectionsDict.so is already in libMuonAnalysisInterfacesDict.so -Warning in <TInterpreter::ReadRootmapFile>: class CP::IMuonSelectionTool found in libMuonSelectorToolsDict.so is already in libMuonAnalysisInterfacesDict.so Py:Athena INFO Importing MuonRecExample.MuonRecUtils Py:Athena INFO Importing MuonCnvExample.MuonCnvUtils -EventInfoMgtInit: Got release version Athena-22.0.9 +EventInfoMgtInit: Got release version sss-22.0.0 Py:IOVDbSvc.CondDB INFO Setting up conditions DB access to instance OFLP200 Py:MuonAlign INFO Running a reconstruction job on geant4 or a digitization job: UseAlines='none' UseBlines='none' UseIlines=False UseAsBuilt=False Py:MuonAlign INFO Running a reconstruction job on geant4 or a digitization job: UseAlines='none' UseBlines='none' UseIlines=False UseAsBuilt=False Py:MuonRec INFO Reading alignment constants from DB Py:Athena INFO including file "IdDictDetDescrCnv/IdDictDetDescrCnv_joboptions.py" -Py:ConfiguredFactory INFO imported 136 confDb modules in 0.53 seconds +Py:ConfiguredFactory INFO imported 15 confDb modules in 0.01 seconds Py:Athena INFO SetGeometryVersion.py obtained major release version 22 Py:Athena INFO including file "AthenaCommon/runbatch.py" -ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0 -ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0 +# setting LC_ALL to "C" ApplicationMgr SUCCESS ==================================================================================================================================== - Welcome to ApplicationMgr (GaudiCoreSvc v33r0) - running on eec2226d49c4 on Thu Jan 30 12:26:44 2020 + Welcome to ApplicationMgr (GaudiCoreSvc v27r1p99) + running on karma on Fri Aug 14 17:10:02 2020 ==================================================================================================================================== ApplicationMgr INFO Application Manager Configured successfully -ApplicationMgr INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0 -StatusCodeSvc INFO initialize JobIDSvc INFO Initializing JobIDSvc - package version AthenaServices-00-00-00 AthDictLoaderSvc INFO in initialize... AthDictLoaderSvc INFO acquired Dso-registry -ClassIDSvc INFO getRegistryEntries: read 7486 CLIDRegistry entries for module ALL -CoreDumpSvc INFO install f-a-t-a-l handler... (flag = -1) +ClassIDSvc INFO getRegistryEntries: read 9574 CLIDRegistry entries for module ALL CoreDumpSvc INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) MetaDataSvc INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00 AthenaPoolCnvSvc INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00 PoolSvc INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok] PoolSvc INFO Set connectionsvc retry/timeout/IDLE timeout to 'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled PoolSvc INFO Frontier compression level set to 5 -DBReplicaSvc INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://frontier-atlas.lcg.triumf.ca:3128/ATLAS_frontier)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://atlasbpfrontier.cern.ch:3127)(proxyurl=http://atlasbpfrontier.fnal.gov:3127) will be considered for COOL data -DBReplicaSvc INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2020-01-27T2131/Athena/22.0.9/InstallArea/x86_64-centos7-gcc8-opt/share/dbreplica.config +DBReplicaSvc INFO Read replica configuration from /home/sss/atlas/dvtest/build/share/dbreplica.config DBReplicaSvc INFO No specific match for domain found - use default fallback -DBReplicaSvc INFO Total of 2 servers found for host eec2226d49c4 [ATLF atlas_dd ] +DBReplicaSvc INFO Total of 1 servers found for host karma [atlas_dd ] PoolSvc INFO Successfully setup replica sorting algorithm PoolSvc INFO Setting up APR FileCatalog and Streams -PoolSvc WARNING Unable to locate catalog for prfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables -PoolSvc WARNING Unable to locate catalog for apcfile:poolcond/PoolCat_oflcond.xml check your ATLAS_POOLCOND_PATH and DATAPATH variables -PoolSvc INFO Resolved path (via ATLAS_POOLCOND_PATH) is /cvmfs/atlas-condb.cern.ch/repo/conditions/poolcond/PoolFileCatalog.xml +PoolSvc INFO Resolved path (via DATAPATH) is /home/sss/atlas/DBRelease/current/poolcond/PoolCat_oflcond.xml +PoolSvc INFO Resolved path (via DATAPATH) is /home/sss/atlas/DBRelease/current/poolcond/PoolCat_oflcond.xml +PoolSvc INFO Resolved path (via ATLAS_POOLCOND_PATH) is /home/sss/atlas/DBRelease/poolcond/PoolFileCatalog.xml PoolSvc INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml DbSession INFO Open DbSession Domain[ROOT_All] INFO > Access DbDomain READ [ROOT_All] MetaDataSvc INFO Found MetaDataTools = PublicToolHandleArray(['IOVDbMetaDataTool']) EventSelector INFO EventSelection with query PoolSvc INFO File is not in Catalog! Attempt to open it anyway. +Warning in <TClass::Init>: no dictionary for class TileMuContainer_p1 is available +Warning in <TClass::Init>: no dictionary for class egammaContainer_p5 is available +Warning in <TClass::Init>: no dictionary for class TauJetContainer_p5 is available +Warning in <TClass::Init>: no dictionary for class LArNoisyROSummary_p3 is available +Warning in <TClass::Init>: no dictionary for class RawInfoSummaryForTag_p1 is available +Warning in <TClass::Init>: no dictionary for class TauDetailsContainer_tlp4 is available +Warning in <TClass::Init>: no dictionary for class JetCollection_tlp6 is available Warning in <TClass::Init>: no dictionary for class CosmicMuonCollection_tlp1 is available Warning in <TClass::Init>: no dictionary for class MdtTrackSegmentCollection_p2 is available +Warning in <TClass::Init>: no dictionary for class MuonCaloEnergyContainer_p1 is available +Warning in <TClass::Init>: no dictionary for class TileMu_p1 is available +Warning in <TClass::Init>: no dictionary for class TauDetailsContainer_p1 is available +Warning in <TClass::Init>: no dictionary for class JetCollection_p6 is available Warning in <TClass::Init>: no dictionary for class CosmicMuonCollection_p1 is available DbSession INFO Open DbSession -Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 2E8B319A-926C-EAC6-1E34-21E75E56342A -Domain[ROOT_All] INFO /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root -RootDatabase.open INFO /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 -/cvmfs/atlas-ni... INFO Database being retired... -Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 2E8B319A-926C-EAC6-1E34-21E75E56342A +Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 0648B630-D9C5-F049-B4F8-EC2538BD8678 +Domain[ROOT_All] INFO /home/sss/nobackup/referencefiles/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root +RootDatabase.open INFO /home/sss/nobackup/referencefiles/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 +/home/sss/nobac... INFO Database being retired... +Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 0648B630-D9C5-F049-B4F8-EC2538BD8678 Domain[ROOT_All] INFO > Deaccess DbDomain READ [ROOT_All] DbSession INFO Open DbSession Domain[ROOT_All] INFO > Access DbDomain READ [ROOT_All] Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 76376094-4CF4-084F-B321-C5E2CEE3F29D -Domain[ROOT_All] INFO /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root -RootDatabase.open INFO /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 -ClassIDSvc INFO getRegistryEntries: read 21465 CLIDRegistry entries for module ALL +Domain[ROOT_All] INFO /home/sss/nobackup/referencefiles/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root +RootDatabase.open INFO /home/sss/nobackup/referencefiles/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 +ClassIDSvc INFO getRegistryEntries: read 17412 CLIDRegistry entries for module ALL EventPersistenc... INFO Added successfully Conversion service:AthenaPoolCnvSvc -ClassIDSvc INFO getRegistryEntries: read 7 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 21 CLIDRegistry entries for module ALL +OutputStreamSeq... INFO Initializing OutputStreamSequencerSvc - package version AthenaServices-00-00-00 IOVDbSvc INFO Opened read transaction for POOL PersistencySvc IOVDbSvc INFO Only 5 POOL conditions files will be open at once -IOVDbSvc INFO Cache alignment will be done in 3 slices IOVDbFolder INFO Read from meta data only for folder /TagInfo IOVDbSvc INFO Initialised with 4 connections and 15 folders IOVDbSvc INFO Service IOVDbSvc initialised successfully @@ -94,9 +97,9 @@ IOVDbSvc INFO Opening COOL connection for COOLOFL_INDET/OFLP200 IOVDbSvc INFO Disconnecting from COOLOFL_TRT/OFLP200 IOVDbSvc INFO Disconnecting from COOLOFL_INDET/OFLP200 IOVDbSvc INFO Added taginfo remove for /TagInfo -ClassIDSvc INFO getRegistryEntries: read 53 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 268 CLIDRegistry entries for module ALL ClassIDSvc INFO getRegistryEntries: read 13 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 38 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 22 CLIDRegistry entries for module ALL DetDescrCnvSvc INFO initializing DetDescrCnvSvc INFO Found DetectorStore service DetDescrCnvSvc INFO filling proxies for detector managers @@ -165,7 +168,6 @@ MuGM:MuonFactory INFO BOG cutouts are activated 1 , all o MuGM:MuonFactory INFO Manager created for geometry version R.06.04 from DB MuonVersion <MuonSpectrometer-R.06.04> MuonGeoModel.MYSQL INFO GeometryVersion set to <R.06.04> MuGM:MuonFactory INFO Mysql helper class created here for geometry version R.06.04 from DB MuonVersion <MuonSpectrometer-R.06.04> -MuGM:MuonFactory INFO MDTIDHELPER retrieved from DetStore EventPersistenc... INFO Added successfully Conversion service:TagInfoMgr EventPersistenc... INFO Added successfully Conversion service:DetDescrCnvSvc MDT_IDDetDescrCnv INFO in createObj: creating a MdtIdHelper object in the detector store @@ -201,7 +203,7 @@ MdtIdHelper INFO Initializing MDT hash indices ... MdtIdHelper INFO The element hash max is 1172 MdtIdHelper INFO The detector element hash max is 2296 MdtIdHelper INFO Initializing MDT hash indices for finding neighbors ... -MuGM:MuonFactory INFO RPCIDHELPER retrieved from DetStore +MuGM:MuonFactory INFO MDTIDHELPER retrieved from DetStore RPC_IDDetDescrCnv INFO in createObj: creating a RpcIdHelper object in the detector store AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0 AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0 @@ -215,7 +217,7 @@ RpcIdHelper INFO Initializing RPC hash indices ... RpcIdHelper INFO The element hash max is 594 RpcIdHelper INFO The detector element hash max is 1116 RpcIdHelper INFO Initializing RPC hash indices for finding neighbors ... -MuGM:MuonFactory INFO TGCIDHELPER retrieved from DetStore +MuGM:MuonFactory INFO RPCIDHELPER retrieved from DetStore TGC_IDDetDescrCnv INFO in createObj: creating a TgcIdHelper object in the detector store AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0 AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0 @@ -229,7 +231,7 @@ TgcIdHelper INFO Initializing TGC hash indices ... TgcIdHelper INFO The element hash max is 1578 TgcIdHelper INFO The detector element hash max is 1578 TgcIdHelper INFO Initializing TGC hash indices for finding neighbors ... -MuGM:MuonFactory INFO CSCIDHELPER retrieved from DetStore +MuGM:MuonFactory INFO TGCIDHELPER retrieved from DetStore CSC_IDDetDescrCnv INFO in createObj: creating a CcscIdHelper object in the detector store AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find mm region index: group, region size 0 0 AtlasDetectorIDHelper::initialize_from_dictionary - Warning: unable to find stgc region index: group, region size 0 0 @@ -244,6 +246,7 @@ CscIdHelper INFO The element hash max is 32 CscIdHelper INFO The detector element hash max is 64 CscIdHelper INFO The channel hash max is 61440 CscIdHelper INFO Initializing CSC hash indices for finding neighbors ... +MuGM:MuonFactory INFO CSCIDHELPER retrieved from DetStore MuGM:MuonFactory INFO **************** MuonDetectorFactory001 ************************ MuGM:MuonFactory INFO *** Start building the Muon Geometry Tree ********************** MuGM:RDBReadAtlas INFO Start retriving dbObjects with tag = <ATLAS-R1-2012-03-01-00> node <ATLAS> @@ -252,7 +255,6 @@ MuGM:RDBReadAtlas INFO After getQuery XtomoData In DblQ00Xtomo(data) No XtomoData table in the MuonDD Database MuGM:RDBReadAtlas INFO After new DblQ00Xtomo -MuGM:RDBReadAtlas INFO After m_dhxtomo.data() MuGM:RDBReadAtlas INFO No Ascii aszt input found: looking for A-lines in ORACLE MuGM:RDBReadAtlas INFO ASZT table found in Oracle MuGM:RDBReadAtlas INFO ASZT size is 32 @@ -273,7 +275,6 @@ MuGM:ProcPosition INFO *** : 1740 physical stations in space - according to MuGM:ProcCutouts INFO Processing Cutouts for geometry layout R.06 MuGM:ProcCutouts INFO Processing Cutouts DONE MuGM:RDBReadAtlas INFO ProcessTGCreadout - version 7 wirespacing 1.8 -MGM::MuonDetect... INFO Creating now the CscInternalAlignmentMapContainer MuGM:RDBReadAtlas INFO Intermediate Objects built from primary numbers MuGM:MuonFactory INFO theMaterialManager retrieven successfully from the DetStore MuGM:MuonFactory INFO MuonSystem description from OracleTag=<ATLAS-R1-2012-03-01-00> and node=<ATLAS> @@ -302,7 +303,7 @@ MGM::MuonDetect... INFO Init A/B Line Containers - done - size is respectively MGM::MuonDetect... INFO I-Line for CSC wire layers loaded (Csc Internal Alignment) MGM::MuonDetect... INFO According to configuration parameters they WILL BE UPDATED FROM CONDDB MGM::MuonDetect... INFO Filling cache -GeoModelSvc INFO GeoModelSvc.MuonDetectorTool SZ= 171360Kb Time = 2.33S +GeoModelSvc INFO GeoModelSvc.MuonDetectorTool SZ= 210072Kb Time = 51.11S GeoModelSvc.Pix... INFO Building Pixel Detector with Version Tag: ATLAS-R1-2012-03-01-00 at Node: ATLAS GeoModelSvc.Pix... INFO Pixel Version: Pixel-GEO-13 Package Version: PixelGeoModel-00-00-00 PixelIDDetDescrCnv INFO in createObj: creating a PixelID helper object in the detector store @@ -340,9 +341,9 @@ PixelGeoModel INFO ... Record Sets retrieved. PixelGeoModel INFO DBM switch = SetDBMFlag: 0 PixelGeoModel INFO Building Pixel Detector PixelGeoModel INFO Version: Pixel-GEO-13, Name: DC3, Layout: Final, Code Version: 5.01.00, Description: DC3 Geometry -GEOPIXELSERVICES pixel : 40.0000 245.0000 // 3460.0000 -GEOPIXELSERVICES barrel : 42.0000 143.0000 // -460.0000 460.0000 -GEOPIXELSERVICES endcap : 82.0000 175.0000 // 484.0000 670.0000 +GEOPIXELSERVICES pixel : 40 245 // 3460 +GEOPIXELSERVICES barrel : 42 143 // -460 460 +GEOPIXELSERVICES endcap : 82 175 // 484 670 PixelGeoModel INFO *** LAYER 0 planar/3D modules : 0 0 PixelGeoModel INFO Layer 0 in/out radius 46.2723 64.1329 PixelGeoModel INFO *** LAYER 1 planar/3D modules : 0 0 @@ -365,21 +366,12 @@ PixelDetectorMa... INFO Registering alignment channel with key /Indet/Align/PI PixelDetectorMa... INFO Registering alignment channel with key /Indet/Align/PIXEC1, level 0, with frame local. PixelDetectorMa... INFO Registering alignment channel with key /Indet/Align/PIXEC2, level 0, with frame local. PixelDetectorMa... INFO Registering alignment channel with key /Indet/Align/PIXEC3, level 0, with frame local. -GeoModelSvc INFO GeoModelSvc.PixelDetectorTool SZ= 7824Kb Time = 0.2S +GeoModelSvc INFO GeoModelSvc.PixelDetectorTool SZ= 11288Kb Time = 0.73S GeoModelSvc.SCT... INFO Building SCT with Version Tag: ATLAS-R1-2012-03-01-00 at Node: ATLAS GeoModelSvc.SCT... INFO SCT Version: SCT-GEO-01 Package Version: SCT_GeoModel-00-00-00 SCT_IDDetDescrCnv INFO in createObj: creating a SCT_ID helper object in the detector store -SCT_ID INFO Initialize from dictionary +SCT_ID INFO AtlasDetectorID INFO initialize_from_dictionary - OK -indet 1 2,4,5,7,10,11,12,13 7 1fffffffffffffff 61 3 0 -sct1 1:3 3 e7ffffffffffffff 59 2 3 -bec1 -2,0,2 3 f9ffffffffffffff 57 2 5 -lay_disk0 0:8 f fe1fffffffffffff 53 4 7 -phi_mod0 0:55 3f ffe07fffffffffff 47 6 11 -eta_mod1 -6:6 f ffff87ffffffffff 43 4 17 -side0 0:1 1 fffffbffffffffff 42 1 21 -strip0 0:767 3ff fffffc00ffffffff 32 10 22 -SCT_ID INFO SCT_ID::initialize_from_dict SCT_GeoModel INFO Retrieving Record Sets from database ... SCT_GeoModel INFO Building SCT Detector. SCT_GeoModel INFO Version: SCT-GEO-01, Name: GEO, Layout: Final, Code Version: 3.06.00, Description: Atlas Geometry 2008 @@ -407,7 +399,13 @@ SCTDetectorManager INFO Registering alignment channel with key /Indet/Align/SC SCTDetectorManager INFO Registering alignment channel with key /Indet/Align/SCTEC7, level 1, with frame local. SCTDetectorManager INFO Registering alignment channel with key /Indet/Align/SCTEC8, level 1, with frame local. SCTDetectorManager INFO Registering alignment channel with key /Indet/Align/SCTEC9, level 1, with frame local. -GeoModelSvc INFO GeoModelSvc.SCT_DetectorTool SZ= 16384Kb Time = 0.15S +GeoModelSvc INFO GeoModelSvc.SCT_DetectorTool SZ= 17000Kb Time = 1.21S +ClassIDSvc INFO getRegistryEntries: read 6452 CLIDRegistry entries for module ALL +GeoModelSvc.TRT... INFO TRT_StrawStatusSummaryTool initialize method called +TRT_IDDetDescrCnv INFO in createObj: creating a TRT_ID helper object in the detector store +TRT_ID INFO Initialize from dictionary msgSvc 0x5567d1081848 +AtlasDetectorID INFO initialize_from_dictionary - OK +GeoModelSvc.TRT... INFO TRT_StrawStatusSummaryTool initialized successfully GeoModelSvc.TRT... INFO Building TRT with Version Tag: ATLAS-R1-2012-03-01-00 at Node: ATLAS GeoModelSvc.TRT... INFO TRT Version: TRT-GEO-00 Package Version: TRT_GeoModel-00-00-00 GeoModelSvc.TRT... INFO Creating the TRT @@ -420,12 +418,6 @@ GeoModelSvc.TRT... INFO InitialLayout = true GeoModelSvc.TRT... INFO Alignable = true GeoModelSvc.TRT... INFO VersioName = DC3 GeoModelSvc.TRT... INFO Building TRT geometry from GeoModel factory TRTDetectorFactory_Full -TRT_GeoModel WARNING The folder of /TRT/Cond/StatusHT is NOT available, WHOLE TRT RUNNING XENON -TRT_GeoModel WARNING Tool setup will force to NOT to use ARGON. Ignore this warning if you are running RECONSTRUCTION or DIGI, but cross-check if you are running SIMULATION -TRT_GeoModel WARNING Tool setup will force to NOT to use KRYPTON. Ignore this warning if you are running RECONSTRUCTION or DIGI, but cross-check if you are running SIMULATION -TRT_IDDetDescrCnv INFO in createObj: creating a TRT_ID helper object in the detector store -TRT_ID INFO Initialize from dictionary msgSvc 0x2cc9c698 -AtlasDetectorID INFO initialize_from_dictionary - OK TRT_GeoModel INFO In TRT Detector Factory (For DC2 and later geometries) TRT_GeoModel INFO Version: TRT-GEO-00, Name: DC3, Layout: Initial, Code Version: 4.01.01, Description: DC3 Geometry TRTDetectorManager INFO Registering alignment channel with key /TRT/Align/TRT, level 3, with frame global. @@ -434,22 +426,21 @@ TRTDetectorManager INFO Registering alignment channel with key /TRT/Align/B1, TRTDetectorManager INFO Registering alignment channel with key /TRT/Align/B2, level 2, with frame global. TRTDetectorManager INFO Registering alignment channel with key /TRT/Align/L2A, level 1, with frame global. TRTDetectorManager INFO Registering alignment channel with key /TRT/Align/L2C, level 1, with frame global. -GeoModelSvc INFO GeoModelSvc.TRT_DetectorTool SZ= 23224Kb Time = 0.13S +GeoModelSvc INFO GeoModelSvc.TRT_DetectorTool SZ= 20860Kb Time = 0.71S GeoModelSvc.InD... INFO InDetServMat Package Version: InDetServMatGeoModel-00-00-00 GeoModelSvc.InD... INFO Building Inner Detector Service Material. Version: CSC -GeoModelSvc INFO GeoModelSvc.InDetServMatTool SZ= 0Kb Time = 0.04S +GeoModelSvc INFO GeoModelSvc.InDetServMatTool SZ= 0Kb Time = 0.18S GeoModelSvc.Bea... INFO Building Beam Pipe -GeoModelSvc INFO GeoModelSvc.BeamPipeDetectorTool SZ= 0Kb Time = 0S -ClassIDSvc INFO getRegistryEntries: read 4177 CLIDRegistry entries for module ALL +GeoModelSvc INFO GeoModelSvc.BeamPipeDetectorTool SZ= 0Kb Time = 0.02S AthenaEventLoopMgr INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00 -ClassIDSvc INFO getRegistryEntries: read 1948 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 740 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 2572 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 1169 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 2190 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 743 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 4158 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 1197 CLIDRegistry entries for module ALL CondInputLoader INFO Initializing CondInputLoader... CondInputLoader INFO Adding base classes: - + ( 'AlignableTransformContainer' , 'ConditionStore+/Indet/Align' ) -> no bases - + ( 'AlignableTransformContainer' , 'ConditionStore+/TRT/Align' ) -> no bases + + ( 'AlignableTransformContainer' , 'ConditionStore+/Indet/Align' ) -> + + ( 'AlignableTransformContainer' , 'ConditionStore+/TRT/Align' ) -> + ( 'CondAttrListCollection' , 'ConditionStore+/Indet/IBLDist' ) -> + ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/ERRS' ) -> + ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/MDT/BARREL' ) -> @@ -458,9 +449,9 @@ CondInputLoader INFO Adding base classes: + ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/TGC/SIDEA' ) -> + ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/TGC/SIDEC' ) -> + ( 'DetCondCFloat' , 'ConditionStore+/Indet/PixelDist' ) -> no bases - + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/Status' ) -> no bases - + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/StatusHT' ) -> no bases - + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/StatusPermanent' ) -> no bases + + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/Status' ) -> + + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/StatusHT' ) -> + + ( 'TRTCond::StrawStatusMultChanContainer' , 'ConditionStore+/TRT/Cond/StatusPermanent' ) -> CondInputLoader INFO Will create WriteCondHandle dependencies for the following DataObjects: + ( 'AlignableTransformContainer' , 'ConditionStore+/Indet/Align' ) + ( 'AlignableTransformContainer' , 'ConditionStore+/TRT/Align' ) @@ -483,7 +474,7 @@ PyComponentMgr INFO Initializing PyComponentMgr... dumper INFO Initializing dumper... AthenaEventLoopMgr INFO Setup EventSelector service EventSelector ApplicationMgr INFO Application Manager Initialized successfully -ClassIDSvc INFO getRegistryEntries: read 687 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 636 CLIDRegistry entries for module ALL CondInputLoader INFO created CondCont<AlignableTransformContainer> with key 'ConditionStore+/Indet/Align' CondInputLoader INFO created CondCont<AlignableTransformContainer> with key 'ConditionStore+/TRT/Align' CondInputLoader INFO created CondCont<CondAttrListCollection> with key 'ConditionStore+/Indet/IBLDist' @@ -501,8 +492,7 @@ ApplicationMgr INFO Application Manager Started successfully AlgResourcePool INFO TopAlg list empty. Recovering the one of Application Manager ClassIDSvc INFO getRegistryEntries: read 21 CLIDRegistry entries for module ALL ClassIDSvc INFO getRegistryEntries: read 41 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 53 CLIDRegistry entries for module ALL -ClassIDSvc INFO getRegistryEntries: read 1 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 110 CLIDRegistry entries for module ALL AthenaEventLoopMgr INFO ===>>> start of run 189751 <<<=== IOVDbSvc INFO Global tag: OFLCOND-SDR-BS7T-05-24 set from input file IOVDbSvc INFO Opening COOL connection for COOLOFL_INDET/OFLP200 @@ -518,18 +508,18 @@ IOVDbFolder INFO HVS tag OFLCOND-SDR-BS7T-05-24 resolved to TrtStrawSta IOVDbFolder INFO HVS tag OFLCOND-SDR-BS7T-05-24 resolved to TrtStrawStatusPermCol-02 for folder /TRT/Cond/StatusPermanent IOVDbSvc INFO Disconnecting from COOLOFL_TRT/OFLP200 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] D0709FD7-6A55-E011-925D-002481043EC0 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000029.gen.COND/cond09_mc.000029.gen.COND._0001.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000029.gen.COND/cond09_mc.000029.gen.COND._0001.pool.root File version:52600 +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000029.gen.COND/cond09_mc.000029.gen.COND._0001.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000029.gen.COND/cond09_mc.000029.gen.COND._0001.pool.root File version:52600 PixelDetectorMa... INFO Processing IBLDist alignment container with key (/Indet/IBLDist) and alignment folder pointing to /Indet/Align Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 0E3CF1E5-143D-DB11-92C7-000CF1DA62DD -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cmccond/cmccond.000001.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0029.pool.root__DQ2-1250194490 +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/oflcond.000002.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0029.pool.root Warning in <TClass::Init>: no dictionary for class DataHeader_p1 is available Warning in <TClass::Init>: no dictionary for class DataHeaderElement_p1 is available -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cmccond/cmccond.000001.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0029.pool.root__DQ2-1250194490 File version:51000 +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/oflcond.000002.conditions.simul.pool.v0000/oflcond.000002.conditions.simul.pool.v0000._0029.pool.root File version:51000 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] D67CA215-C5CB-DF11-954C-000423DC2158 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0010.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0010.pool.root File version:52200 -/cvmfs/atlas-ni... INFO Database being retired... +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0010.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0010.pool.root File version:52200 +/home/sss/nobac... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 76376094-4CF4-084F-B321-C5E2CEE3F29D GeoModelSvc WARNING *** *** Geometry configured through jobOptions does not match TagInfo tags! *** *** GeoModelSvc INFO ** Job Option configuration: @@ -556,52 +546,60 @@ IOVDbFolder INFO HVS tag OFLCOND-SDR-BS7T-05-24 resolved to MuonAlignMD IOVDbFolder INFO HVS tag OFLCOND-SDR-BS7T-05-24 resolved to MuonAlignTGCEndCapAAlign-0001-DEFAULT for folder /MUONALIGN/TGC/SIDEA IOVDbFolder INFO HVS tag OFLCOND-SDR-BS7T-05-24 resolved to MuonAlignTGCEndCapCAlign-0001-DEFAULT for folder /MUONALIGN/TGC/SIDEC IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Opening COOL connection for COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Opening COOL connection for COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Opening COOL connection for COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Opening COOL connection for COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Opening COOL connection for COOLOFL_MUONALIGN/OFLP200 +IOVDbSvc INFO Disconnecting from COOLOFL_MUONALIGN/OFLP200 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] A01A6C89-05C8-DF11-B56E-002481043EC0 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0009.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0009.pool.root File version:52600 +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0009.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000019.gen.COND/cond09_mc.000019.gen.COND._0009.pool.root File version:52600 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] AC64B64A-71FE-E011-83C1-001E4F3E59B1 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000037.gen.COND/cond09_mc.000037.gen.COND._0001.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000037.gen.COND/cond09_mc.000037.gen.COND._0001.pool.root File version:52800 +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000037.gen.COND/cond09_mc.000037.gen.COND._0001.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000037.gen.COND/cond09_mc.000037.gen.COND._0001.pool.root File version:52800 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 564393DD-6BBF-E111-9C06-003048D3C892 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000045.gen.COND/cond09_mc.000045.gen.COND._0001.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000045.gen.COND/cond09_mc.000045.gen.COND._0001.pool.root File version:53005 -/cvmfs/atlas-co... INFO Database being retired... +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000045.gen.COND/cond09_mc.000045.gen.COND._0001.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000045.gen.COND/cond09_mc.000045.gen.COND._0001.pool.root File version:53005 +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 0E3CF1E5-143D-DB11-92C7-000CF1DA62DD -/cvmfs/atlas-co... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] D0709FD7-6A55-E011-925D-002481043EC0 -/cvmfs/atlas-co... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] D67CA215-C5CB-DF11-954C-000423DC2158 Domain[ROOT_All] INFO -> Access DbDatabase READ [ROOT_All] 26AD0F0C-EC4D-DF11-99D0-001EC959A004 -Domain[ROOT_All] INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000010.gen.COND/cond09_mc.000010.gen.COND._0002.pool.root -RootDatabase.open INFO /cvmfs/atlas-condb.cern.ch/repo/conditions/cond09/cond09_mc.000010.gen.COND/cond09_mc.000010.gen.COND._0002.pool.root File version:52200 -/cvmfs/atlas-co... INFO Database being retired... +Domain[ROOT_All] INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000010.gen.COND/cond09_mc.000010.gen.COND._0002.pool.root +RootDatabase.open INFO /home/sss/atlas/DBRelease/current/poolcond/cond09_mc.000010.gen.COND/cond09_mc.000010.gen.COND._0002.pool.root File version:52200 +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] A01A6C89-05C8-DF11-B56E-002481043EC0 MuonAlignmentCo... INFO Load alignment parameters from DB folder </MUONALIGN/MDT/BARREL> MuonAlignmentCo... INFO Size of /MUONALIGN/MDT/BARREL CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/MDT/BARREL' ) readCdo->size()= 1 -MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/BARREL input is, ALines: {[0,0,t:0] - [t:4294967294.854775807]} BLines: {[0,0,t:0] - [t:4294967294.854775807]} +MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/BARREL input is, ALines: {[0,0,t:1316868299] - [t:1316868899]} BLines: {[0,0,t:1316868299] - [t:1316868899]} MuonAlignmentCo... INFO A- and B-Lines parameters from DB folder </MUONALIGN/MDT/BARREL> loaded MuonAlignmentCo... INFO Load alignment parameters from DB folder </MUONALIGN/MDT/ENDCAP/SIDEA> MuonAlignmentCo... INFO Size of /MUONALIGN/MDT/ENDCAP/SIDEA CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/MDT/ENDCAP/SIDEA' ) readCdo->size()= 1 -MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/ENDCAP/SIDEA input is, ALines: {[0,0,t:0] - [t:4294967294.854775807]} BLines: {[0,0,t:0] - [t:4294967294.854775807]} +MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/ENDCAP/SIDEA input is, ALines: {[0,0,t:1316868299] - [t:1316868899]} BLines: {[0,0,t:1316868299] - [t:1316868899]} MuonAlignmentCo... INFO A- and B-Lines parameters from DB folder </MUONALIGN/MDT/ENDCAP/SIDEA> loaded MuonAlignmentCo... INFO Load alignment parameters from DB folder </MUONALIGN/MDT/ENDCAP/SIDEC> MuonAlignmentCo... INFO Size of /MUONALIGN/MDT/ENDCAP/SIDEC CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/MDT/ENDCAP/SIDEC' ) readCdo->size()= 1 -MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/ENDCAP/SIDEC input is, ALines: {[0,0,t:0] - [t:4294967294.854775807]} BLines: {[0,0,t:0] - [t:4294967294.854775807]} +MuonAlignmentCo... INFO Range of /MUONALIGN/MDT/ENDCAP/SIDEC input is, ALines: {[0,0,t:1316868299] - [t:1316868899]} BLines: {[0,0,t:1316868299] - [t:1316868899]} MuonAlignmentCo... INFO A- and B-Lines parameters from DB folder </MUONALIGN/MDT/ENDCAP/SIDEC> loaded MuonAlignmentCo... INFO Load alignment parameters from DB folder </MUONALIGN/TGC/SIDEA> MuonAlignmentCo... INFO No BLines decoding will be attempted for folder named /MUONALIGN/TGC/SIDEA MuonAlignmentCo... INFO Size of /MUONALIGN/TGC/SIDEA CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/TGC/SIDEA' ) readCdo->size()= 1 -MuonAlignmentCo... INFO Range of /MUONALIGN/TGC/SIDEA input is, ALines: {[0,0,t:0] - [t:4294967294.854775807]} +MuonAlignmentCo... INFO Range of /MUONALIGN/TGC/SIDEA input is, ALines: {[0,0,t:1316868299] - [t:1316868899]} MuonAlignmentCo... INFO A- and B-Lines parameters from DB folder </MUONALIGN/TGC/SIDEA> loaded MuonAlignmentCo... INFO Load alignment parameters from DB folder </MUONALIGN/TGC/SIDEC> MuonAlignmentCo... INFO No BLines decoding will be attempted for folder named /MUONALIGN/TGC/SIDEC MuonAlignmentCo... INFO Size of /MUONALIGN/TGC/SIDEC CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/TGC/SIDEC' ) readCdo->size()= 1 -MuonAlignmentCo... INFO Range of /MUONALIGN/TGC/SIDEC input is, ALines: {[0,0,t:0] - [t:4294967294.854775807]} +MuonAlignmentCo... INFO Range of /MUONALIGN/TGC/SIDEC input is, ALines: {[0,0,t:1316868299] - [t:1316868899]} MuonAlignmentCo... INFO A- and B-Lines parameters from DB folder </MUONALIGN/TGC/SIDEC> loaded -MGM::MuonDetect...WARNING Empty temporary A-line container - nothing to do here -MuonAlignmentCo... INFO recorded new ALineMapContainer with range {[0,0,t:0,l:0] - [t:4294967294.854775807]} into Conditions Store -MGM::MuonDetect... INFO Mdt deformations are not enabled - nothing to do here -MuonAlignmentCo... INFO recorded new BLineMapContainer with range {[0,0,t:0,l:0] - [t:4294967294.854775807]} into Conditions Store +MuonAlignmentCo... INFO recorded new ALineMapContainer with range {[0,0,t:1316868299,l:0] - [t:1316868899]} into Conditions Store +MuonAlignmentCo... INFO recorded new BLineMapContainer with range {[0,0,t:1316868299,l:0] - [t:1316868899]} into Conditions Store MuonAlignmentEr... INFO Size of CondAttrListCollection ( 'CondAttrListCollection' , 'ConditionStore+/MUONALIGN/ERRS' ) readCdo->size()= 1 MuonAlignmentEr... INFO Range of input is {[0,0,t:0] - [t:4294967294.854775807]} MuonAlignmentEr... INFO ***************************************** @@ -642,7 +640,6 @@ MuGM:RDBReadAtlas INFO After getQuery XtomoData In DblQ00Xtomo(data) No XtomoData table in the MuonDD Database MuGM:RDBReadAtlas INFO After new DblQ00Xtomo -MuGM:RDBReadAtlas INFO After m_dhxtomo.data() MuGM:RDBReadAtlas INFO No Ascii aszt input found: looking for A-lines in ORACLE MuGM:RDBReadAtlas INFO ASZT table found in Oracle MuGM:RDBReadAtlas INFO ASZT size is 32 @@ -663,7 +660,6 @@ MuGM:ProcPosition INFO *** : 1740 physical stations in space - according to MuGM:ProcCutouts INFO Processing Cutouts for geometry layout R.06 MuGM:ProcCutouts INFO Processing Cutouts DONE MuGM:RDBReadAtlas INFO ProcessTGCreadout - version 7 wirespacing 1.8 -MGM::MuonDetect... INFO Creating now the CscInternalAlignmentMapContainer MuGM:RDBReadAtlas INFO Intermediate Objects built from primary numbers MuGM:MuonFactory INFO theMaterialManager retrieven successfully from the DetStore MuGM:MuonFactory INFO MuonSystem description from OracleTag=<ATLAS-R1-2012-03-01-00> and node=<ATLAS> @@ -693,22 +689,23 @@ MGM::MuonDetect... INFO I-Line for CSC wire layers loaded (Csc Internal Alignm MGM::MuonDetect... INFO According to configuration parameters they WILL BE UPDATED FROM CONDDB MGM::MuonDetect... INFO Filling cache MGM::MuonDetect...WARNING Empty temporary A-line container - nothing to do here +MGM::MuonDetect... INFO In updateDeformations() MGM::MuonDetect... INFO Mdt deformations are not enabled - nothing to do here -MuonDetectorCon... INFO recorded new MuonDetectorManager with range {[0,0,t:0,l:0] - [t:4294967294.854775807]} into Conditions Store +MuonDetectorCon... INFO recorded new MuonDetectorManager with range {[0,0,t:1316868299,l:0] - [t:1316868899]} into Conditions Store TRTAlignCondAlg INFO recorded new CDO GeoAlignmentStore with range {[0,l:0] - [9999999,l:9999999]} into Conditions Store TRTAlignCondAlg INFO recorded new CDO TRT_DetElementContainer with range {[0,l:0] - [9999999,l:9999999]} with size of 14912 into Conditions Store -SCT_AlignCondAlg INFO recorded new CDO SCTAlignmentStore with range {[189750,l:4294777545] - [189751,l:4294777544]} into Conditions Store -SCT_DetectorEle... INFO recorded new CDO SCT_DetectorElementCollection with range {[189750,l:4294777545] - [189751,l:4294777544]} with size of 8176 into Conditions Store +SCT_AlignCondAlg INFO recorded new CDO SCTAlignmentStore with range {[189751,l:0] - [189752,l:115]} into Conditions Store +SCT_DetectorEle... INFO recorded new CDO SCT_DetectorElementCollection with range {[189751,l:0] - [189752,l:115]} with size of 8176 into Conditions Store PixelDetectorMa... INFO Processing IBLDist alignment container with key /Indet/IBLDist -PixelAlignCondAlg INFO recorded new CDO PixelAlignmentStore with range {[189750,t:0,l:4294777545] - [189751,l:4294777544]} into Conditions Store -PixelDetectorEl... INFO recorded new CDO PixelDetectorElementCollection with range {[189750,t:0,l:4294777545] - [189751,l:4294777544]} with size of 1744 into Conditions Store -ClassIDSvc INFO getRegistryEntries: read 58 CLIDRegistry entries for module ALL -RootDatabase.open INFO /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 -/cvmfs/atlas-co... INFO Database being retired... +PixelAlignCondAlg INFO recorded new CDO PixelAlignmentStore with range {[189751,t:0,l:0] - [189752,l:115]} into Conditions Store +PixelDetectorEl... INFO recorded new CDO PixelDetectorElementCollection with range {[189751,t:0,l:0] - [189752,l:115]} with size of 1744 into Conditions Store +ClassIDSvc INFO getRegistryEntries: read 54 CLIDRegistry entries for module ALL +RootDatabase.open INFO /home/sss/nobackup/referencefiles/aod/AOD-20.0.0.3/AOD-20.0.0.3-full.pool.root File version:53424 +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] AC64B64A-71FE-E011-83C1-001E4F3E59B1 -ClassIDSvc INFO getRegistryEntries: read 22 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 26 CLIDRegistry entries for module ALL AthenaEventLoopMgr INFO ===>>> done processing event #35002, run #189751 1 events processed so far <<<=== -ClassIDSvc INFO getRegistryEntries: read 8 CLIDRegistry entries for module ALL +ClassIDSvc INFO getRegistryEntries: read 9 CLIDRegistry entries for module ALL AthenaEventLoopMgr INFO ===>>> start processing event #35003, run #189751 1 events processed so far <<<=== AthenaEventLoopMgr INFO ===>>> done processing event #35003, run #189751 2 events processed so far <<<=== AthenaEventLoopMgr INFO ===>>> start processing event #35004, run #189751 2 events processed so far <<<=== @@ -728,57 +725,56 @@ AthenaEventLoopMgr INFO ===>>> done processing event #35010, run #189751 9 AthenaEventLoopMgr INFO ===>>> start processing event #35011, run #189751 9 events processed so far <<<=== AthenaEventLoopMgr INFO ===>>> done processing event #35011, run #189751 10 events processed so far <<<=== EventSelector INFO Disconnecting input sourceID: 76376094-4CF4-084F-B321-C5E2CEE3F29D -/cvmfs/atlas-ni... INFO Database being retired... +/home/sss/nobac... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 76376094-4CF4-084F-B321-C5E2CEE3F29D AthenaEventLoopMgr INFO No more events in event selection -/cvmfs/atlas-co... INFO Database being retired... -/cvmfs/atlas-co... INFO Database being retired... -/cvmfs/atlas-co... INFO Database being retired... -/cvmfs/atlas-co... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 26AD0F0C-EC4D-DF11-99D0-001EC959A004 -/cvmfs/atlas-co... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO -> Deaccess DbDatabase READ [ROOT_All] 564393DD-6BBF-E111-9C06-003048D3C892 -/cvmfs/atlas-co... INFO Database being retired... -/cvmfs/atlas-co... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... +/home/sss/atlas... INFO Database being retired... Domain[ROOT_All] INFO > Deaccess DbDomain READ [ROOT_All] ApplicationMgr INFO Application Manager Stopped successfully IncidentProcAlg1 INFO Finalize CondInputLoader INFO Finalizing CondInputLoader... dumper INFO Finalizing dumper... -ERROR running diff with reference -diff: ../../share/AOD-20.0.0.3-full.pool.root.ref: No such file or directory IncidentProcAlg2 INFO Finalize PyComponentMgr INFO Finalizing PyComponentMgr... IdDictDetDescrCnv INFO in finalize -IOVDbFolder INFO Folder /Indet/Align (PoolRefColl) db-read 1/2 objs/chan/bytes 34/43/5440 (( 0.03 ))s -IOVDbFolder INFO Folder /Indet/IBLDist (AttrListColl) db-read 1/2 objs/chan/bytes 14/14/280 (( 0.01 ))s -IOVDbFolder INFO Folder /Indet/PixelDist (PoolRef) db-read 1/1 objs/chan/bytes 1/1/174 (( 0.02 ))s -IOVDbFolder INFO Folder /MUONALIGN/ERRS (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3489 (( 0.03 ))s -IOVDbFolder INFO Folder /MUONALIGN/MDT/BARREL (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/84 (( 0.02 ))s -IOVDbFolder INFO Folder /MUONALIGN/MDT/ENDCAP/SIDEA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/84 (( 0.02 ))s -IOVDbFolder INFO Folder /MUONALIGN/MDT/ENDCAP/SIDEC (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/84 (( 0.02 ))s -IOVDbFolder INFO Folder /MUONALIGN/TGC/SIDEA (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/1106 (( 0.02 ))s -IOVDbFolder INFO Folder /MUONALIGN/TGC/SIDEC (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/1106 (( 0.03 ))s -IOVDbFolder INFO Folder /TRT/Align (PoolRefColl) db-read 1/2 objs/chan/bytes 32/32/5120 (( 0.03 ))s -IOVDbFolder INFO Folder /TRT/Calib/DX (PoolRef) db-read 1/1 objs/chan/bytes 1/1/183 (( 0.02 ))s -IOVDbFolder INFO Folder /TRT/Cond/Status (PoolRefColl) db-read 1/1 objs/chan/bytes 36/36/6552 (( 0.02 ))s -IOVDbFolder INFO Folder /TRT/Cond/StatusHT (PoolRefColl) db-read 1/1 objs/chan/bytes 35/35/6370 (( 0.02 ))s -IOVDbFolder INFO Folder /TRT/Cond/StatusPermanent (PoolRefColl) db-read 1/1 objs/chan/bytes 35/36/6370 (( 0.02 ))s +IOVDbFolder INFO Folder /Indet/Align (PoolRefColl) db-read 1/2 objs/chan/bytes 34/43/5440 (( 0.08 ))s +IOVDbFolder INFO Folder /Indet/IBLDist (AttrListColl) db-read 1/2 objs/chan/bytes 14/14/280 (( 0.00 ))s +IOVDbFolder INFO Folder /Indet/PixelDist (PoolRef) db-read 1/1 objs/chan/bytes 1/1/174 (( 0.00 ))s +IOVDbFolder INFO Folder /MUONALIGN/ERRS (AttrListColl) db-read 1/1 objs/chan/bytes 1/1/3489 (( 0.07 ))s +IOVDbFolder INFO Folder /MUONALIGN/MDT/BARREL (AttrListColl) db-read 6/1 objs/chan/bytes 6/3/504 (( 0.35 ))s +IOVDbFolder INFO Folder /MUONALIGN/MDT/ENDCAP/SIDEA (AttrListColl) db-read 6/1 objs/chan/bytes 6/3/504 (( 0.01 ))s +IOVDbFolder INFO Folder /MUONALIGN/MDT/ENDCAP/SIDEC (AttrListColl) db-read 6/1 objs/chan/bytes 6/3/504 (( 0.01 ))s +IOVDbFolder INFO Folder /MUONALIGN/TGC/SIDEA (AttrListColl) db-read 6/1 objs/chan/bytes 6/3/6636 (( 0.01 ))s +IOVDbFolder INFO Folder /MUONALIGN/TGC/SIDEC (AttrListColl) db-read 6/1 objs/chan/bytes 6/3/6636 (( 0.01 ))s +IOVDbFolder INFO Folder /TRT/Align (PoolRefColl) db-read 1/2 objs/chan/bytes 32/32/5120 (( 0.07 ))s +IOVDbFolder INFO Folder /TRT/Calib/DX (PoolRef) db-read 1/1 objs/chan/bytes 1/1/183 (( 0.00 ))s +IOVDbFolder INFO Folder /TRT/Cond/Status (PoolRefColl) db-read 1/1 objs/chan/bytes 36/36/6552 (( 0.00 ))s +IOVDbFolder INFO Folder /TRT/Cond/StatusHT (PoolRefColl) db-read 1/1 objs/chan/bytes 35/35/6370 (( 0.00 ))s +IOVDbFolder INFO Folder /TRT/Cond/StatusPermanent (PoolRefColl) db-read 1/1 objs/chan/bytes 35/36/6370 (( 0.00 ))s IOVDbFolder INFO Folder /TagInfo (AttrListColl) db-read 0/2 objs/chan/bytes 2/0/0 (( 0.00 ))s -IOVDbSvc INFO bytes in (( 0.32 ))s +IOVDbSvc INFO bytes in (( 0.61 ))s IOVDbSvc INFO Connection sqlite://;schema=mycool.db;dbname=OFLP200 : nConnect: 0 nFolders: 0 ReadTime: (( 0.00 ))s -IOVDbSvc INFO Connection COOLOFL_MUONALIGN/OFLP200 : nConnect: 2 nFolders: 6 ReadTime: (( 0.16 ))s -IOVDbSvc INFO Connection COOLOFL_TRT/OFLP200 : nConnect: 2 nFolders: 5 ReadTime: (( 0.11 ))s -IOVDbSvc INFO Connection COOLOFL_INDET/OFLP200 : nConnect: 2 nFolders: 3 ReadTime: (( 0.06 ))s +IOVDbSvc INFO Connection COOLOFL_MUONALIGN/OFLP200 : nConnect: 7 nFolders: 6 ReadTime: (( 0.45 ))s +IOVDbSvc INFO Connection COOLOFL_TRT/OFLP200 : nConnect: 2 nFolders: 5 ReadTime: (( 0.08 ))s +IOVDbSvc INFO Connection COOLOFL_INDET/OFLP200 : nConnect: 2 nFolders: 3 ReadTime: (( 0.08 ))s XMLCatalog INFO File 'PoolFileCatalog.xml' does not exist. New file created. AthDictLoaderSvc INFO in finalize... ToolSvc INFO Removing all tools created by ToolSvc +GeoModelSvc.TRT... INFO in finalize() *****Chrono***** INFO **************************************************************************************************** *****Chrono***** INFO The Final CPU consumption ( Chrono ) Table (ordered) *****Chrono***** INFO **************************************************************************************************** -cObjR_ALL INFO Time User : Tot= 200 [ms] Ave/Min/Max=0.694(+- 7.28)/ 0/ 120 [ms] #=288 -cObj_ALL INFO Time User : Tot= 260 [ms] Ave/Min/Max= 4.81(+- 19.4)/ 0/ 140 [ms] #= 54 -ChronoStatSvc INFO Time User : Tot= 11.3 [s] #= 1 +cObjR_ALL INFO Time User : Tot= 220 [ms] Ave/Min/Max= 0.764(+- 8.46)/ 0/ 140 [ms] #=288 +cObj_ALL INFO Time User : Tot= 370 [ms] Ave/Min/Max= 6.85(+- 25.2)/ 0/ 180 [ms] #= 54 +ChronoStatSvc INFO Time User : Tot= 156 [s] #= 1 *****Chrono***** INFO **************************************************************************************************** ChronoStatSvc.f... INFO Service finalized successfully ApplicationMgr INFO Application Manager Finalized successfully diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/CMakeLists.txt b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/CMakeLists.txt deleted file mode 100644 index dad6c4d4a5c7760b3750e2852945691768f1f827..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -################################################################################ -# Package: TrigConf2COOLOnline -################################################################################ - -# Declare the package name: -atlas_subdir( TrigConf2COOLOnline ) - -# External dependencies: -find_package( Boost COMPONENTS program_options ) -find_package( COOL COMPONENTS CoolKernel CoolApplication ) -find_package( tdaq COMPONENTS daq-core-dal daq-hlt-dal - rc_CmdLine rc_ItemCtrl rc_OnlSvc rc_RCCommands omniORB4 omnithread owl is ipc config TTCInfo) -find_package( tdaq-common COMPONENTS ers ) -find_package( TBB ) - -# Component(s) in the package: -atlas_add_library( TrigConf2COOLOnline - src/*.cxx - PUBLIC_HEADERS TrigConf2COOLOnline - INCLUDE_DIRS ${TDAQ-COMMON_INCLUDE_DIRS} ${TDAQ_INCLUDE_DIRS} - PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${COOL_INCLUDE_DIRS} - ${TBB_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} - LINK_LIBRARIES ${TDAQ-COMMON_LIBRARIES} ${TDAQ_LIBRARIES} - PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} ${COOL_LIBRARIES} ${TBB_LIBRARIES} - TrigConfHLTData TrigConfL1Data TrigConfStorage ) - -atlas_add_executable( TrigConf2CoolOnline - src/TrigConf2CoolOnline.cxx - INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${TDAQ-COMMON_INCLUDE_DIRS} - ${TDAQ_INCLUDE_DIRS} - LINK_LIBRARIES ${Boost_LIBRARIES} ${TDAQ-COMMON_LIBRARIES} ${TDAQ_LIBRARIES} - TrigConf2COOLOnline ) - diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/OnlTrigC2CWriter.h b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/OnlTrigC2CWriter.h deleted file mode 100644 index 1a0a9a735dbb963f5f7226d813c63d2f9a33168f..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/OnlTrigC2CWriter.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ - -/* - * @file OnlTrigC2CWriter.h - * @author Joerg Stelzer - * $Author: stelzer $ - * $Revision: 1.1 $ - * $Date: 2008-07-28 13:58:08 $ - * - * @brief the online controlable class for writing configuration - * information from the TriggerDB to COOL - */ - -#ifndef TRIGCONF_ONLTRIGC2CWRITER_H -#define TRIGCONF_ONLTRIGC2CWRITER_H - -#include <string> -#include <iostream> -#include "TrigConf2COOLOnline/TC2CConfig.h" -#include "RunControl/Common/Controllable.h" -#include "ipc/partition.h" -#include "is/infodictionary.h" - -namespace TrigConf { - class OnlTrigC2CWriter; - class TrigConfCoolWriter; - class HLTFrame; - class CTPConfig; -} - -class ISInfoReceiver; -class ISCallbackInfo; -class ISInfoDictionary; -class IPCPartition; - -class TrigConf::OnlTrigC2CWriter : public daq::rc::Controllable { -public: - - /**@brief:constructor. - * @param name: this is the named published in IPC (required) - */ - OnlTrigC2CWriter(const std::string & partitionName, const std::string & cooldb, const std::string& triggerdb, bool l1is, bool l1cool, bool mckcool = false ); - OnlTrigC2CWriter(const OnlTrigC2CWriter&) = delete; - OnlTrigC2CWriter& operator=(OnlTrigC2CWriter const&) = delete; - - virtual ~OnlTrigC2CWriter() noexcept; - virtual void configure (const daq::rc::TransitionCmd&) override; - virtual void connect (const daq::rc::TransitionCmd&) override; //< connect to COOL and to TriggerDB - virtual void prepareForRun(const daq::rc::TransitionCmd&) override; - virtual void unconfigure (const daq::rc::TransitionCmd&) override; - virtual void user (const daq::rc::UserCmd& usrCmd) override; - virtual void stopArchiving(const daq::rc::TransitionCmd& cmd) override; - - TC2CConfig& conf() { return m_jobConfig; } - -private: - - bool readOKS(); // reading the configuration from OKS - - bool subscribeToIS(); // subscribe to IS - - void publishToIS(); // publish to IS - - void readTriggerDb(); // read HLT menu from TriggerDB - - void runNumberCallback(ISCallbackInfo *isc); - - void readRunNumberFromIS(); - - void writeHLTPrescaleSetToCool(unsigned int lb, unsigned int pskey, std::string& name); - - TC2CConfig m_jobConfig; // object to hold different configuration parameters - TrigConf::TrigConfCoolWriter* m_conf2Cool; // the class that does all the work - std::string m_triggerDB; - ISInfoReceiver* m_infoRec; - IPCPartition* m_IPCPartition; // the ipc partition object - - TrigConf::HLTFrame* m_HLTFrame; // pointer to the HLTFrame (could be skipped at the moment since it is still a singleton) - TrigConf::CTPConfig* m_CTPConfig; // the pointer to the lvl1 ctpc; - bool m_forceTriggerDBReadAtPrepareForRun { false }; - -}; - -#endif diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/TC2CConfig.h b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/TC2CConfig.h deleted file mode 100644 index 4b323b40abcedb389d52b23316c980ec906fbda0..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/TrigConf2COOLOnline/TC2CConfig.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#ifndef TRIGCONF_TC2CCONFIG -#define TRIGCONF_TC2CCONFIG - -#include <string> -#include <iosfwd> - -class TC2CConfig; - -std::ostream& operator<<( std::ostream& os, const TC2CConfig& event ); - -class TC2CConfig { - - friend std::ostream& operator<<( std::ostream& os, const TC2CConfig& event ); - -public: - TC2CConfig(); - ~TC2CConfig(); - - std::string& PartitionName() { return fPartitionName; } - std::string& CoolDb() { return fCoolDb; } - std::string& DBType() { return fDBType; } - std::string& DBServer() { return fDBServer; } - std::string& DBConnection() { return fDBConnection; } - std::string& DBUser() { return fDBUser; } - std::string& DBPasswd() { return fDBPasswd; } - std::string& DBName() { return fDBName; } - unsigned long& DBSMK() { return fDBSMK; } - unsigned long& DBL1PSK() { return fDBL1PSK; } - unsigned long& DBHLTPSK() { return fDBHLTPSK; } - std::string& DBSMcomment() { return fDBSMcomment; } - std::string& DBL1PScomment() { return fDBL1PScomment; } - std::string& DBHLTPScomment() { return fDBHLTPScomment; } - bool& UseTriggerDB() { return fUseTriggerDB; } - uint32_t& CurrentRunNumber() { return fCurrentRunNumber; } - uint32_t& LastWrittenRunNumber() { return fLastWrittenRunNumber; } - bool& COOLconnStat() { return fCOOLconnStat; } - bool& TriggerDBconnStat() { return fTriggerDBconnStat; } - bool& L1toIS() { return fL1toIS; } - bool& L1toCOOL() { return fL1toCOOL; } - - void TriggerDbConnectionParams(std::string& conn, std::string& user, std::string& pw); - - bool& MCKtoCOOL() { return fMCKtoCOOL; } - - unsigned long& DBMCK() { return fDBMCK; } - std::string& DBMCKrelease() { return fDBMCKrelease; } - std::string& DBMCKinfo() { return fDBMCKinfo; } - - -private: - std::string fPartitionName {""}; - std::string fCoolDb {""}; - std::string fDBType {""}; - std::string fDBServer {""}; - std::string fDBConnection {""}; - std::string fDBUser {""}; - std::string fDBPasswd {""}; - std::string fDBName {""}; - unsigned long fDBSMK {0}; - unsigned long fDBL1PSK {0}; - unsigned long fDBHLTPSK {0}; - std::string fDBSMcomment {""}; - std::string fDBL1PScomment {""}; - std::string fDBHLTPScomment {""}; - bool fUseTriggerDB {false}; - uint32_t fCurrentRunNumber {0}; - uint32_t fLastWrittenRunNumber {0}; - bool fCOOLconnStat {false}; - bool fTriggerDBconnStat {false}; - bool fL1toIS {false}; - bool fL1toCOOL {false}; - - bool fMCKtoCOOL {false}; - - unsigned long fDBMCK {0}; - std::string fDBMCKrelease {""}; - std::string fDBMCKinfo {""}; - -}; -#endif diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/OnlTrigC2CWriter.cxx b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/OnlTrigC2CWriter.cxx deleted file mode 100644 index 0054daf58941193c2ef10be1169b7eae4b519524..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/OnlTrigC2CWriter.cxx +++ /dev/null @@ -1,685 +0,0 @@ -/* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration -*/ - - -#undef PACKAGE_VERSION - -#include "TrigConfStorage/TrigConfCoolWriter.h" -#include "TrigConfStorage/StorageMgr.h" -#include "TrigConfStorage/MCKLoader.h" - -#include "CoolKernel/Exception.h" - -#include "TrigConfL1Data/CTPConfig.h" -#include "TrigConfHLTData/HLTFrame.h" -#include "TrigConfHLTData/HLTPrescaleSet.h" - -#include "TrigConf2COOLOnline/OnlTrigC2CWriter.h" - -#include "TTCInfo/TrigConfSmKeyNamed.h" -#include "TTCInfo/TrigConfL1PsKeyNamed.h" -#include "TTCInfo/TrigConfHltPsKeyNamed.h" -#include "TTCInfo/TrigConfReleaseNamed.h" - -#include "config/Configuration.h" - -#include "dal/Partition.h" -#include "dal/TriggerConfiguration.h" -#include "dal/TriggerDBConnection.h" -#include "dal/L1TriggerConfiguration.h" -#include "HLTPUDal/HLTImplementationDB.h" - -#include "RunControl/Common/Exceptions.h" -#include "RunControl/Common/RunControlCommands.h" -#include "RunControl/Common/OnlineServices.h" - -#include "ipc/partition.h" -#include "is/inforeceiver.h" -#include "is/infoany.h" -#include "is/info.h" -#include "is/infodictionary.h" - -#include "ers/ers.h" - -#include "rc/RunParams.h" -#include "rc/RunParamsNamed.h" - -#include "boost/lexical_cast.hpp" -#include "boost/algorithm/string.hpp" - -#include <algorithm> -#include <iostream> - -ERS_DECLARE_ISSUE( TrigConf, - BadCoolDB, - "Archiving to COOL failed because " << explanation, - ((const char*) explanation) - ) - -ERS_DECLARE_ISSUE( TrigConf, - CoolWriting, - "Archiving to COOL failed because " << explanation, - ((const char*) explanation) - ) - -ERS_DECLARE_ISSUE( TrigConf, - InvalidConfiguration, - "Configuration error - " << explanation, - ((const char*) explanation) - ) - -ERS_DECLARE_ISSUE( TrigConf, - TriggerDBReadError, - "Error when reading TriggerDB: " << explanation, - ((const char*) explanation) - ) - -ERS_DECLARE_ISSUE( TrigConf, - ISPublishing, - "IS publishing error: " << explanation, - ((const char*) explanation) - ) - -ERS_DECLARE_ISSUE( TrigConf, - InvalidUserCommand, - "Invalid user command: " << explanation, - ((const char*) explanation) - ) - -using namespace std; -using namespace TrigConf; - -OnlTrigC2CWriter::OnlTrigC2CWriter(const std::string & partitionName, const std::string& cooldb, const std::string& triggerdb, bool l1is, bool l1cool, bool mckcool ) : - Controllable() - , m_conf2Cool( new TrigConfCoolWriter(cooldb) ) - , m_triggerDB(triggerdb) - , m_infoRec(0) - , m_IPCPartition(0) - , m_HLTFrame(0) - , m_CTPConfig(0) -{ - conf().CoolDb() = cooldb; - conf().L1toIS() = l1is; - conf().L1toCOOL() = l1cool; - conf().PartitionName() = partitionName; - conf().MCKtoCOOL() = mckcool; - - m_IPCPartition = new IPCPartition( conf().PartitionName() ); -} - -TrigConf::OnlTrigC2CWriter::~OnlTrigC2CWriter() noexcept { - delete m_IPCPartition; - delete m_HLTFrame; - delete m_CTPConfig; - delete m_conf2Cool; - delete m_infoRec; -} - - -bool -OnlTrigC2CWriter::readOKS() { - - ERS_INFO("Reading configuration for partition " << conf().PartitionName()); - - try { - Configuration& oks = daq::rc::OnlineServices::instance().getConfiguration(); - - // get partition - const daq::core::Partition& partition = daq::rc::OnlineServices::instance().getPartition(); - - // get trigger configuration - const daq::core::TriggerConfiguration* triggerConfig = partition.get_TriggerConfiguration(); - if( triggerConfig == 0) - throw daq::rc::ConfigurationIssue(ERS_HERE, "No trigger configuration object in partition!"); - - - // LVL1 configuration object (to get L1 PSK) - const daq::core::L1TriggerConfiguration * l1Config = triggerConfig->get_l1(); - if(l1Config!=0) { - conf().DBL1PSK() = l1Config->get_Lvl1PrescaleKey(); - ERS_INFO("Read L1 PSK " << conf().DBL1PSK() ); - } else { - conf().DBL1PSK() = 0; - ERS_INFO("No LVL1 configuration."); - } - - - // get the HLT configuration - const daq::core::HLTImplementation * hlt = triggerConfig->get_hlt(); - if(hlt==0) { - ERS_INFO("No HLTImplementation configured"); - return false; - } else { - ERS_INFO("Found HLT Implementation" << *hlt << " ... " << hlt->UID()); - } - - const daq::hlt::HLTImplementationDB* hltDB = oks.get<daq::hlt::HLTImplementationDB>( hlt->UID() ); - if(hltDB==0) - ERS_INFO("HLT implementation '" << hlt->UID() << "' is not for running from TriggerDB."); - - // setting the HLT prescale key - conf().DBHLTPSK() = hltDB!=0 ? boost::lexical_cast<unsigned long,std::string>( hltDB->get_hltPrescaleKey() ) : 0; - - // get the DB connection - const daq::core::TriggerDBConnection * trigDb = triggerConfig->get_TriggerDBConnection(); - conf().UseTriggerDB() = (trigDb!=0); - if( conf().UseTriggerDB() ) { - conf().DBSMK() = trigDb->get_SuperMasterKey(); - if (trigDb->get_Alias()!="") { - conf().DBType() = "dblookup"; - conf().DBServer() = trigDb->get_Alias(); - } - else { - conf().DBType() = trigDb->get_Type(); - conf().DBServer() = trigDb->get_Server(); - conf().DBUser() = trigDb->get_User(); - conf().DBPasswd() = trigDb->get_Password(); - conf().DBName() = trigDb->get_Name(); - } - } else { - ERS_INFO("TriggerDBConnection not set in '" << triggerConfig->full_name() << "'"); - } - } - catch (const daq::rc::ConfigurationIssue & e) { - InvalidConfiguration issue(ERS_HERE, e.what()); - ers::fatal(issue); - return false; - } - catch (const daq::config::Generic & e) { - InvalidConfiguration issue(ERS_HERE, e.what()); - ers::fatal(issue); - return false; - } - - //ERS_LOG("" << "\nRead configuration needed for " << getName() << " from oks\n"); // this is like cout but with time and line info - - return true; -} - -bool -TrigConf::OnlTrigC2CWriter::subscribeToIS() { - - ERS_INFO("subscribing to IS (RunParams)."); - - if(!m_infoRec) m_infoRec = new ISInfoReceiver(*m_IPCPartition); - - try { - m_infoRec->subscribe("RunParams.SOR_RunParams", &OnlTrigC2CWriter::runNumberCallback, this); - } - catch (const daq::is::Exception & ex ) { - ers::fatal(ex); - return false; - } - return true; -} - - -void -TrigConf::OnlTrigC2CWriter::readRunNumberFromIS() { - - ERS_INFO("readRunNumberFromIS entered"); - - RunParamsNamed rp(*m_IPCPartition,"RunParams.SOR_RunParams"); - - rp.checkout(); - - conf().CurrentRunNumber() = rp.run_number; - - ERS_INFO("Read new run number: " << conf().CurrentRunNumber()); - -} - -void -TrigConf::OnlTrigC2CWriter::runNumberCallback(ISCallbackInfo *isc) { - if (isc->reason() == is::Deleted) - return; - - RunParams sor; - isc->value(sor); - - conf().CurrentRunNumber() = sor.run_number; - - ERS_INFO("Received new run number: " << conf().CurrentRunNumber()); - - return; -} - -void -TrigConf::OnlTrigC2CWriter::publishToIS() { - ERS_INFO("Publish to IS"); - - TrigConfSmKeyNamed sm(*m_IPCPartition,"RunParams.TrigConfSmKey"); - sm.SuperMasterKey = conf().DBSMK(); - sm.SuperMasterComment = conf().DBSMcomment(); - - TrigConfL1PsKeyNamed l1ps(*m_IPCPartition,"RunParams.TrigConfL1PsKey"); - l1ps.L1PrescaleKey = conf().DBL1PSK(); - l1ps.L1PrescaleComment = conf().DBL1PScomment(); - - TrigConfHltPsKeyNamed hltps(*m_IPCPartition,"RunParams.TrigConfHltPsKey"); - hltps.HltPrescaleKey = conf().DBHLTPSK(); - hltps.HltPrescaleComment = conf().DBHLTPScomment(); - - TrigConfReleaseNamed rel(*m_IPCPartition,"RunParams.TrigConfRelease"); - rel.HLTReleaseVersion = getenv("AtlasVersion")?getenv("AtlasVersion"):"Unknown Version"; - - if(getenv("AtlasProject")) { - rel.HLTPatchProject = getenv("AtlasProject"); - } else { - rel.HLTPatchProject = "Unknown Project"; - } - rel.HLTExtraPatch = ""; - - sm.print(std::cout); - l1ps.print(std::cout); - hltps.print(std::cout); - rel.print(std::cout); - - try { - sm.checkin(); - if(conf().L1toIS()) l1ps.checkin(); - hltps.checkin(); - rel.checkin(); - } - catch (daq::is::Exception& ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex.what()); - ers::fatal(issue); - } - catch (std::exception & ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex.what()); - ers::fatal(issue); - } - catch (CORBA::SystemException& ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex._name()); - ers::fatal(issue); - } - catch (...) { - TrigConf::ISPublishing issue(ERS_HERE,"unknown exception"); - ers::fatal(issue); - //throw; - } - -} - -void -TrigConf::OnlTrigC2CWriter::readTriggerDb() { - - if(!conf().UseTriggerDB()) return; - - m_forceTriggerDBReadAtPrepareForRun = false; - - // clear the menu - delete m_HLTFrame; m_HLTFrame = 0; - - - // get the TriggerDB connection - std::string conn, user, pw; - conf().TriggerDbConnectionParams(conn,user,pw); - if(m_triggerDB!="") { - conn = m_triggerDB; - } - cout << "Using triggerdb connection : " << conn << endl; - // cout << "user : " << user << endl; - // cout << "pw : " << pw << endl; - - std::unique_ptr< StorageMgr > sm( new StorageMgr(conn,user,pw, cout) ); - - sm->sessionMgr(); - - conf().DBConnection() = sm->sessionMgr().connection(); - - if(conf().DBSMK()!=0 && conf().DBHLTPSK()!=0) { - - m_HLTFrame = new HLTFrame(); - - ERS_INFO("Reading HLT menu from the TriggerDB with SMK " << conf().DBSMK() << " and HLT PSK " << conf().DBHLTPSK() << "."); - - m_HLTFrame->setSMK(conf().DBSMK()); - m_HLTFrame->thePrescaleSetCollection().set_prescale_key_to_load( conf().DBHLTPSK() ); - try { - sm->hltFrameLoader().load( *m_HLTFrame ); - } - catch(const std::exception & e) { - TrigConf::TriggerDBReadError issue(ERS_HERE, e.what()); - ers::fatal(issue); - } - //fHLTPrescaleSet->fillFromFrame(m_HLTFrame); - conf().DBSMcomment() = m_HLTFrame->name(); - conf().DBHLTPScomment() = m_HLTFrame->getPrescaleSetCollection().prescaleSet()->name(); - - ERS_INFO("Done reading HLT menu"); - - } else { - ERS_INFO("Will not read SMK since one of these keys is 0: SMK = " << conf().DBSMK() << ", HLT PSK = " << conf().DBHLTPSK() << "."); - conf().DBHLTPScomment() = "No HLT Prescale key specified"; - conf().DBSMcomment() = "Not read since HLT prescale key was not specified"; - conf().DBHLTPSK()=0; - } - - if ( conf().MCKtoCOOL() ) { - if ( conf().DBSMK()!=0 ) { - ERS_INFO("Reading Menu-aware Monitoring MCK from the TriggerDB with SMK " << conf().DBSMK() << "."); - - try { - // get the mck - uint mck {0}; - std::string release {""}; - auto fMCKLoader = new MCKLoader(*sm); - fMCKLoader->loadMCKlinkedToSMK(conf().DBSMK(), mck); - conf().DBMCK() = mck; - if ( conf().DBMCK() !=0 ) { - fMCKLoader->loadReleaseLinkedToMCK(conf().DBMCK(), release); - conf().DBMCKrelease() = release; - } - } - catch(const std::exception & e) { - TrigConf::TriggerDBReadError issue(ERS_HERE, e.what()); - ers::error(issue); - } - - ERS_INFO("Done reading MCK " << conf().DBMCK() << " for release " << conf().DBMCKrelease() << "."); - } else { - ERS_INFO("Will not read MCK since SMK is 0: SMK = " << conf().DBSMK() << "."); - conf().DBMCKinfo() = "Not read since SMK not specified"; - } - } else { - ERS_INFO("Writing of MCK in HLT archiver is disabled"); - } - - if( conf().L1toCOOL() ) { - if( conf().DBSMK()!=0 ) { - ERS_INFO("Reading LVL1 menu from the TriggerDB"); - - // write also the L1 stuff to COOL (key+menu+prescales) - // should only happen in rare circumstances - delete m_CTPConfig; - m_CTPConfig = new CTPConfig(); - - m_CTPConfig->setSuperMasterTableId(conf().DBSMK()); - try { - sm->masterTableLoader().load(*m_CTPConfig); - } - catch(const std::exception& e) { - TrigConf::TriggerDBReadError issue(ERS_HERE, e.what()); - ers::fatal(issue); - } - ERS_INFO("LVL1 menu read"); - - // prescales - PrescaleSet l1pss; - l1pss.setId(conf().DBL1PSK()); - try { - sm->prescaleSetLoader().load(l1pss); - } - catch(const std::exception& e) { - TrigConf::TriggerDBReadError issue(ERS_HERE, e.what()); - ers::fatal(issue); - } - ERS_INFO("LVL1 prescales read"); - - m_CTPConfig->setPrescaleSet( l1pss ); - - } - } else { - ERS_INFO("Writing of LVL1 menu in HLT archiver is disabled"); - } -} - -void -TrigConf::OnlTrigC2CWriter::configure(const daq::rc::TransitionCmd& cmd) { - ERS_INFO("CONFIGURE(" << cmd.toString() << ") -> read OKS, subscribe to IS for run number, read hlt config from TriggerDB."); - readOKS(); - ERS_INFO(conf()); - subscribeToIS(); - readTriggerDb(); -} - - -void -TrigConf::OnlTrigC2CWriter::connect(const daq::rc::TransitionCmd& cmd) { - if(conf().UseTriggerDB()) { - ERS_INFO("CONNECT(" << cmd.toString() << ") -> check COOL connection, publish to IS"); - } else { - ERS_INFO("CONNECT(" << cmd.toString() << ") -> nothing to do since we are not running from the TriggerDB"); - return; - } - // first thing to do is to check the connection to COOL. We quickly open and close. - ERS_INFO("Checking COOL DB connection."); - try { - m_conf2Cool->checkDbConnection(false); - } - catch(cool::Exception& e) { - TrigConf::BadCoolDB issue(ERS_HERE, e.what()); - ers::fatal(issue); - return; - } - - publishToIS(); -} - - -void -TrigConf::OnlTrigC2CWriter::prepareForRun(const daq::rc::TransitionCmd& cmd) { - - ERS_INFO("Entered prepareForRun"); - - if(m_forceTriggerDBReadAtPrepareForRun) { - ERS_INFO("m_forceTriggerDBReadAtPrepareForRun is true, rereading from triggerDB with this configuration."); - ERS_INFO(conf()); - readTriggerDb(); - } - - - - readRunNumberFromIS(); - - if(conf().UseTriggerDB()) { - ERS_INFO("PREPAREFORRUN(" << cmd.toString() << ") -> write hlt config to COOL. Current run number " << conf().CurrentRunNumber()); - } else { - ERS_INFO("PREPAREFORRUN(" << cmd.toString() << ") -> nothing to do since we are not running from the TriggerDB"); - return; - } - - TrigConf::ThresholdConfig thrcfg; - TrigConf::CaloInfo ci; - - std::string configurationSource = conf().DBConnection() + ","; - if(getenv("AtlasVersion")) { - configurationSource += std::string(getenv("AtlasVersion")) + std::string(","); - } else { - configurationSource += std::string("Unknown Version,"); - } - if(getenv("AtlasProject")) { - configurationSource += std::string(getenv("AtlasProject")); - } else { - configurationSource += std::string("Unknown Project"); - } - - // write the payload - std::cout << "Configuration source: " << configurationSource << std::endl; - std::cout << "=====================================================" << std::endl; - std::cout << m_CTPConfig << std::endl; - if(m_CTPConfig) - std::cout << *m_CTPConfig << std::endl; - std::cout << "=====================================================" << std::endl; - std::cout << m_HLTFrame << std::endl; - if(m_HLTFrame) - std::cout << *m_HLTFrame << std::endl; - std::cout << "=====================================================" << std::endl; - - - if(m_HLTFrame) { - if(0!=m_HLTFrame && 0!=m_CTPConfig) { - m_conf2Cool->writeRunPayload(conf().CurrentRunNumber(), - (unsigned int) conf().DBSMK(), - (unsigned int) conf().DBHLTPSK(), // if 0 then no menu will be saved - thrcfg, // ignored - *m_CTPConfig, - ci, // ignored - *m_HLTFrame, - configurationSource); - } else if (0!=m_HLTFrame && 0==m_CTPConfig) { - m_conf2Cool->writeHLTPayload( ValidityRange( conf().CurrentRunNumber() ), *m_HLTFrame, configurationSource); - ERS_INFO("Prescale Set ptr = " << (void*)m_HLTFrame->getPrescaleSetCollection().prescaleSet()); - m_conf2Cool->writeHltPrescalePayload( conf().CurrentRunNumber(), 1, *m_HLTFrame->getPrescaleSetCollection().prescaleSet()); - } - } else { - ERS_INFO("Menu will not be written to COOL, since it was not read from the TriggerDB"); - } - - if(conf().MCKtoCOOL()) { - if (conf().DBMCK() != 0){ - m_conf2Cool->writeMCKPayload( conf().CurrentRunNumber(), conf().DBMCK(), conf().DBMCKrelease(), conf().DBMCKinfo()); - ERS_INFO("Done writing MCK " << conf().DBMCK() << " for release " << conf().DBMCKrelease() << " to COOL."); - } else { - ERS_INFO("MCK not written to COOL since it is 0"); - } - } -} - - -void -TrigConf::OnlTrigC2CWriter::unconfigure(const daq::rc::TransitionCmd& cmd) { - ERS_INFO("UNCONFIGURE(" << cmd.toString() << ") -> unsubscribe from IS"); - - // unsubscribe from IS - try { - m_infoRec->unsubscribe(".*"); - } - catch(ers::Issue & e) { - } - delete m_infoRec; m_infoRec = 0; -} - - - -void -TrigConf::OnlTrigC2CWriter::writeHLTPrescaleSetToCool(unsigned int lb, unsigned int pskey, std::string& name) { - - ERS_INFO("Entered writeHLTPrescaleSetToCool with LB = " << lb << " and HLT psk " << pskey); - - if(!conf().UseTriggerDB()) return; - - if(!m_HLTFrame) { - ERS_INFO("Running without the HLT, can not write HLT prescales to COOL"); - return; - } - - readRunNumberFromIS(); - - std::string conn(""), user(""), pw(""); - conf().TriggerDbConnectionParams(conn,user,pw); - std::unique_ptr< TrigConf::StorageMgr > sm(new TrigConf::StorageMgr(conn,user,pw)); - - HLTPrescaleSet* hltPrescaleSet = new HLTPrescaleSet(); - - hltPrescaleSet->setId(pskey); - sm->hltPrescaleSetLoader().load( *hltPrescaleSet ); - name = hltPrescaleSet->name(); - - ERS_INFO("writeHLTPrescaleSetToCool: HLT psk " << pskey << ", name " << name << " for Run " << conf().CurrentRunNumber() << " and LB " << lb); - - m_HLTFrame->thePrescaleSetCollection().addPrescaleSet( lb, hltPrescaleSet ); - - m_conf2Cool->writeHltPrescalePayload( conf().CurrentRunNumber(), lb, *hltPrescaleSet ); -} - - -void -TrigConf::OnlTrigC2CWriter::user(const daq::rc::UserCmd& usrCmd) { - - string commandName = usrCmd.commandName(); - vector<string> arguments = usrCmd.commandParameters(); - - ERS_INFO("Received '" << commandName << "' [" << usrCmd.toString() << "]"); - - // this is a hack until the CTP controller sends the correct user command - - ERS_INFO("Received command " << commandName << " (" << usrCmd.toString() << ")"); - if(commandName == "USER") { - ERS_INFO("User command " << usrCmd.toString() << " not formed correctly, need to apply parser hack."); - - vector<string> splitarg; - boost::split(splitarg, arguments[0], boost::is_any_of(" ")); - - arguments.clear(); - bool first(true); - for(const string& s : splitarg) { - if(first) { - commandName = s; - first = false; - } else { - arguments.push_back(s); - } - } - } - - ERS_INFO("Command " << commandName); - unsigned int i(0); - for(const string& s :arguments) { - ERS_INFO(" arg " << i++ << " " << s); - } - - - if( commandName == "HLTPRESCALE2COOL" ) { - - if( arguments.size() != 2) { - TrigConf::InvalidUserCommand issue(ERS_HERE,"'HLTPRESCALE2COOL' needs exactly 2 arguments: LB and HLT PS key"); - ers::warning(issue); - return; - } - - unsigned int lb = boost::lexical_cast<unsigned int, std::string>(arguments[0]); - unsigned int pskey = boost::lexical_cast<unsigned int, std::string>(arguments[1]); - - std::string pssname(""); - try { - writeHLTPrescaleSetToCool(lb, pskey, pssname); - } - catch(std::exception & ex) { - TrigConf::CoolWriting issue(ERS_HERE, ex.what()); - ers::error(issue); - } - - // updating the internally held key - conf().DBHLTPSK() = pskey; - - - // publish to IS RunParams - TrigConfHltPsKeyNamed hltps(*m_IPCPartition,"RunParams.TrigConfHltPsKey"); - hltps.HltPrescaleKey = pskey; - hltps.HltPrescaleComment = pssname; - - try { - hltps.checkin(); - ERS_INFO("Published current hlt pskey " << pskey << " to RunParams.TrigConfHltPsKey"); - - } - catch (daq::is::Exception& ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex.what()); - ers::error(issue); - } - catch (std::exception & ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex.what()); - ers::error(issue); - } - catch (CORBA::SystemException& ex) { - TrigConf::ISPublishing issue(ERS_HERE, ex._name()); - ers::error(issue); - } - catch (...) { - TrigConf::ISPublishing issue(ERS_HERE,"unknown exception"); - ers::error(issue); - } - } -} - - -void -TrigConf::OnlTrigC2CWriter::stopArchiving(const daq::rc::TransitionCmd&) { - ERS_INFO("stopArchiving"); - ERS_INFO("setting m_forceTriggerDBReadAtPrepareForRun to true"); - m_forceTriggerDBReadAtPrepareForRun = true; - -} diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TC2CConfig.cxx b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TC2CConfig.cxx deleted file mode 100644 index 78054157b7e68474ee8ab0b44a0f19ec2d38d84e..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TC2CConfig.cxx +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -#include <iostream> -#include <algorithm> - -#include "TrigConf2COOLOnline/TC2CConfig.h" - -using std::endl; - -TC2CConfig::TC2CConfig() -{} - -TC2CConfig::~TC2CConfig() -{} - -void -TC2CConfig::TriggerDbConnectionParams(std::string& conn, std::string& user, std::string& pw) { - user = DBUser(); - pw = DBPasswd(); - - std::string dbtype = DBType(); - std::transform(dbtype.begin(),dbtype.end(),dbtype.begin(),tolower); - if (dbtype == "oracle") { - conn = "oracle://" + DBServer() + "/" + DBName(); - } else if (dbtype == "mysql") { - conn = "mysql://" + DBServer() + "/" + DBName(); - } else if (dbtype == "sqlite") { - conn = "sqlite://" + DBServer() + "/" + DBName(); - } else if (dbtype == "dblookup") { - conn = DBServer(); - user = pw = ""; - } -} - - -std::ostream& operator<<(std::ostream& os, const TC2CConfig& c) { - os << "Job configuration:" << endl - << " COOL connection : " << c.fCoolDb << endl - << " Use TriggerDB : " << (c.fUseTriggerDB?"true":"false") << endl; - if(c.fUseTriggerDB) - os << " Trigger DB connection parameter" << endl - << " Type : " << c.fDBType << endl - << " Server : " << c.fDBServer << endl - << " User : " << c.fDBUser << endl - << " Passwd : " << c.fDBPasswd << endl - << " Name : " << c.fDBName << endl - << " SMK : " << c.fDBSMK << endl - << " L1 PSK : " << c.fDBL1PSK << endl - << " HLT PSK : " << c.fDBHLTPSK << endl; - os << " Current run number: " << c.fCurrentRunNumber << endl; - os << " Last run number written to COOL: " << c.fLastWrittenRunNumber << endl; - os << " COOL connection status: " << (c.fCOOLconnStat?"connected":"disconnected") << endl; - os << " TriggerDB connection status: " << (c.fTriggerDBconnStat?"connected":"disconnected") << endl; - - return os; -} diff --git a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TrigConf2CoolOnline.cxx b/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TrigConf2CoolOnline.cxx deleted file mode 100644 index b371a66d6d3f9142b6a6555ca8ed6af11b3125a4..0000000000000000000000000000000000000000 --- a/HLT/Trigger/TrigConfiguration/TrigConf2COOLOnline/src/TrigConf2CoolOnline.cxx +++ /dev/null @@ -1,126 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/** - * @file TrigConf2CoolOnline.cxx - * @author Joerg Stelzer - * $Author: stelzer $ - * $Revision: 1.1 $ - * $Date: 2008-07-28 13:58:08 $ - * - * @brief Application to write trigger configuration from TriggerDB to COOL - * - */ - -#undef PACKAGE_VERSION - -#include "TrigConf2COOLOnline/OnlTrigC2CWriter.h" - -#include "ipc/core.h" -#include "ers/ers.h" -#include "cmdl/cmdargs.h" - -#include <string> -#include "RunControl/Common/CmdLineParser.h" -#include "RunControl/Common/Exceptions.h" -#include "RunControl/ItemCtrl/ItemCtrl.h" - -#include <boost/program_options.hpp> - -namespace po = boost::program_options; - -using namespace std; -using namespace daq; -using namespace TrigConf; - -ERS_DECLARE_ISSUE (TrigConf, ExitNow, "FATAL ERROR: ", ) - - - - -ERS_DECLARE_ISSUE(TrigConf, Exception, ERS_EMPTY, ERS_EMPTY) - -ERS_DECLARE_ISSUE_BASE ( TrigConf, - CmdLineError, - TrigConf::Exception, - "Error parsing the command line options: " << reason, - ERS_EMPTY, - ((std::string) reason) - ) - - - -int main (int argc, char **argv) { - - for(int i=0; i<argc; ++i) - cout << argv[i] << " "; - cout << endl; - - try { - IPCCore::init(argc,argv); - } - catch(daq::ipc::CannotInitialize& e) { - ers::fatal(e); - abort(); - } - catch(daq::ipc::AlreadyInitialized& e) { - ers::warning(e); - } - - // parse commandline parameters - po::options_description desc("This program writes the trigger configuration for the current run to COOL"); - desc.add_options() - ("help,h", "print usage and exit") - ("cooldb", po::value<string>(), "COOL db connection tech://schema=;dbname=\nsqlite://;schema=trigconf.db;dbname=TRIGCONF") - ("triggerdb", po::value<string>(), "TriggerDB connection alias") - ("l1is", "if set L1 key is written to IS") - ("l1cool", "if set L1 information is written to COOL") - ("name,n", po::value<string>(), "application name") - ("mckcool", "if set MCK is written to COOL") - ; - - // Get commandline parameters - po::variables_map vm; - po::store( po::command_line_parser(argc, argv).options(desc).allow_unregistered().run(), vm); - po::notify(vm); - - string cooldb("sqlite://;schema=trigconf.db;dbname=TRIGCONF"); - - if(vm.count("cooldb")) { - cooldb = vm["cooldb"].as<string>(); - cout << "Application parameter cooldb=" << cooldb << endl; - } else if(!vm.count("help")) { - ers::fatal( TrigConf::CmdLineError(ERS_HERE, "No cool connection parameter has been defined") ); - return EXIT_FAILURE; - } - bool l1is = vm.count("l1is")>0; - bool l1cool = vm.count("l1cool")>0; - bool mckcool = vm.count("mckcool")>0; - string triggerdb( vm.count("triggerdb") ? vm["triggerdb"].as<string>() : string("") ); - - rc::CmdLineParser cmdParser(argc, argv, true); - - try { - rc::ItemCtrl itemCtrl(cmdParser, - shared_ptr<rc::Controllable>(new OnlTrigC2CWriter(cmdParser.partitionName(), cooldb, triggerdb, l1is, l1cool, mckcool))); - itemCtrl.init(); - itemCtrl.run(); - } - catch(daq::rc::CmdLineHelp& ex) { - cout << desc << endl; - cout << ex.message() << endl; - } - catch(ers::Issue& ex) { - TrigConf::ExitNow issue(ERS_HERE, ex); - ers::fatal(ex); - return EXIT_FAILURE; - } - catch(po::error& ex) { - ers::fatal(rc::CmdLineError(ERS_HERE, ex.what(), ex)); - return EXIT_FAILURE; - } - - return EXIT_SUCCESS; - -} diff --git a/InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/HitInfo.h b/InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/HitInfo.h index a79b6589accf1525eb39e4239c177f7d0e1369e5..79bdf5404bce73b65ea6007dbb9ffb059f1f6ba3 100755 --- a/InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/HitInfo.h +++ b/InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/HitInfo.h @@ -101,17 +101,13 @@ namespace TRT{ public: // Constructors HitInfo() : m_Ints(Hit::TNOIV),m_Floats(Hit::TNOFV) {} - HitInfo(const HitInfo& orig): m_Ints(orig.m_Ints),m_Floats(orig.m_Floats) {} + HitInfo(const HitInfo& orig)= default; + HitInfo(HitInfo&& orig) noexcept = default; //assignment - HitInfo & operator=(const HitInfo & other){ - if (this!=&other){ - m_Ints = other.m_Ints; - m_Floats = other.m_Floats; - } - return *this; - } + HitInfo & operator=(const HitInfo & other)=default; + HitInfo & operator=(HitInfo && other) noexcept =default; // Destructor - ~HitInfo(){} + ~HitInfo()=default; // Access const int& operator[](const Hit::IntVariables& theIndex) const {return m_Ints[theIndex];} const float& operator[](const Hit::FloatVariables& theIndex) const {return m_Floats[theIndex];} diff --git a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixelCalibData.hh b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixelCalibData.hh index 4d356a3bd65ea30feb3cfb9290dab0c056069060..7a5fad1ad345f2e464db2bc90587dbf76857e3dc 100644 --- a/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixelCalibData.hh +++ b/InnerDetector/InDetConditions/PixelCoralClientUtils/PixelCoralClientUtils/PixelCalibData.hh @@ -37,7 +37,7 @@ class PixelCalibData{ PixelCalibData(unsigned int ident,int nmax); /** default destructor */ - ~PixelCalibData (); + ~PixelCalibData () = default; const static int nPixelChipSummaryDataMax = 16; /** maximum number of chips per module */ /** embedded class PixelChipSummaryData holds all the calibration data for a chip */ @@ -46,7 +46,7 @@ class PixelCalibData{ public: PixelChipSummaryData(); - ~PixelChipSummaryData(){}; + ~PixelChipSummaryData() = default; /** Methods to access the calibration data */ int getChipID() const { return (int)m_chip; } //<! get the chip id inside a module from 0 to 15 @@ -349,7 +349,6 @@ inline PixelCalibData::PixelChipSummaryData::PixelChipSummaryData(){ } } -inline PixelCalibData::~PixelCalibData(){} inline int PixelCalibData::size() const { return (int)m_vec.size();} diff --git a/InnerDetector/InDetConfig/python/InDetConfigFlags.py b/InnerDetector/InDetConfig/python/InDetConfigFlags.py index 1c3c920e8dcb8aa08b1627584a8d714563f7cf2e..fc36ba07c72bbe939b19c3c05f2b6e5682150bb0 100644 --- a/InnerDetector/InDetConfig/python/InDetConfigFlags.py +++ b/InnerDetector/InDetConfig/python/InDetConfigFlags.py @@ -181,6 +181,6 @@ def createInDetConfigFlags(): icf.addFlag("InDet.doHIP300", False) # Switch for running MinBias settings with a 300 MeV pT cut (for Heavy Ion Proton) icf.addFlag("InDet.checkDeadElementsOnTrack", True) # Enable check for dead modules and FEs 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.PixelOn)) - icf.addFlag("InDet.useSctDCS", lambda prevFlags : (prevFlags.InDet.useDCS and prevFlags.Detector.SCTOn)) + 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)) return icf diff --git a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py index d14bcad6591e00433935ae495335dd24516ab261..08ed16b2ed400dabc28adbf6ea26e0495e48e6ad 100644 --- a/InnerDetector/InDetConfig/python/InDetRecToolConfig.py +++ b/InnerDetector/InDetConfig/python/InDetRecToolConfig.py @@ -27,7 +27,7 @@ def InDetBoundaryCheckToolCfg(flags, name='InDetBoundaryCheckTool', **kwargs): result = ComponentAccumulator() if 'SctSummaryTool' not in kwargs: - if flags.Detector.SCTOn: + if flags.Detector.RecoSCT: tmpAcc = InDetSCT_ConditionsSummaryToolCfg(flags) kwargs.setdefault("SctSummaryTool", tmpAcc.popPrivateTools()) result.merge(tmpAcc) @@ -39,8 +39,8 @@ def InDetBoundaryCheckToolCfg(flags, name='InDetBoundaryCheckTool', **kwargs): kwargs.setdefault("PixelLayerTool", tmpAcc.getPrimary()) result.merge(tmpAcc) - kwargs.setdefault("UsePixel", flags.Detector.PixelOn) - kwargs.setdefault("UseSCT", flags.Detector.SCTOn) + kwargs.setdefault("UsePixel", flags.Detector.RecoPixel) + kwargs.setdefault("UseSCT", flags.Detector.RecoSCT) indet_boundary_check_tool = CompFactory.InDet.InDetBoundaryCheckTool(name, **kwargs) result.setPrivateTools(indet_boundary_check_tool) diff --git a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiLocalPosition.h b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiLocalPosition.h index 9a0e48741596158075830cb3b34c1c8572f6972b..11befcef68a3f5fabfe050a1c5d6753355b3b160 100755 --- a/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiLocalPosition.h +++ b/InnerDetector/InDetDetDescr/InDetReadoutGeometry/InDetReadoutGeometry/SiLocalPosition.h @@ -53,7 +53,7 @@ namespace InDetDD { const double xDepth=0); /** Destructor: */ - ~SiLocalPosition(); + ~SiLocalPosition()=default; /** Assignment operator: */ SiLocalPosition &operator=(const SiLocalPosition &) = default; @@ -121,8 +121,6 @@ namespace InDetDD { /////////////////////////////////////////////////////////////////// // Inline methods: /////////////////////////////////////////////////////////////////// -inline SiLocalPosition::~SiLocalPosition() -{} inline double SiLocalPosition::xEta() const { diff --git a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigit.h b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigit.h index 3c5d95a70f259e02c9dc22168939f95b998d3581..bf1714bf62e3c5bba7f227fe4be5d12da4d1ec37 100644 --- a/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigit.h +++ b/InnerDetector/InDetDigitization/TRT_Digitization/src/TRTDigit.h @@ -18,7 +18,7 @@ public: /** Empty, useless digit */ TRTDigit() : m_strawID(0), m_digit(0) {} - ~TRTDigit() {} + ~TRTDigit() = default; /** Get straw ID */ int GetStrawID() const { return m_strawID; } diff --git a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py index bf91fd9e6f8a176b45fdfb32aaeab8da7153b19e..a4289a2f4d3d8fe32565fd55634ca37775f6e43a 100644 --- a/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py +++ b/InnerDetector/InDetExample/InDetRecExample/share/ConfiguredInDetPreProcessingTRT.py @@ -114,35 +114,45 @@ class ConfiguredInDetPreProcessingTRT: MaxDriftTime = 60.0*ns LowGate = 14.0625*ns # 4.5*3.125 ns HighGate = 42.1875*ns # LowGate + 9*3.125 ns + LowGateArgon = LowGate + HighGateArgon = HighGate + if InDetFlags.doCosmics(): LowGate = 19.0*ns HighGate = 44.0*ns + LowGateArgon = 19.0*ns + HighGateArgon = 44.0*ns + if globalflags.DataSource == 'data': MinTrailingEdge = 11.0*ns MaxDriftTime = 60.0*ns - LowGate = 14.0625*ns # 4.5*3.125 ns - HighGate = 42.1875*ns # LowGate + 9*3.125 ns + LowGate = 17.1875*ns + HighGate = 45.3125*ns + LowGateArgon = 18.75*ns + HighGateArgon = 43.75*ns if InDetFlags.doCosmics(): LowGate = 19.0*ns HighGate = 44.0*ns + LowGateArgon = 19.0*ns + HighGateArgon = 44.0*ns InDetTRT_DriftCircleTool = InDet__TRT_DriftCircleTool(name = prefix+"DriftCircleTool", TRTDriftFunctionTool = InDetTRT_DriftFunctionTool, ConditionsSummaryTool = InDetTRTStrawStatusSummaryTool, UseConditionsStatus = True, UseConditionsHTStatus = True, - SimpleOutOfTimePileupSupression = InDetFlags.doCosmics(), + SimpleOutOfTimePileupSupression = False, RejectIfFirstBit = False, # fixes 50 nsec issue MinTrailingEdge = MinTrailingEdge, MaxDriftTime = MaxDriftTime, - ValidityGateSuppression = not InDetFlags.doCosmics(), + ValidityGateSuppression = InDetFlags.InDet25nsec(), LowGate = LowGate, HighGate = HighGate, - SimpleOutOfTimePileupSupressionArgon = InDetFlags.doCosmics(), + SimpleOutOfTimePileupSupressionArgon = False, RejectIfFirstBitArgon = False, # fixes 50 nsec issue MinTrailingEdgeArgon = MinTrailingEdge, MaxDriftTimeArgon = MaxDriftTime, - ValidityGateSuppressionArgon = not InDetFlags.doCosmics(), + ValidityGateSuppressionArgon = InDetFlags.InDet25nsec(), LowGateArgon = LowGate, HighGateArgon = HighGate, useDriftTimeHTCorrection = True, @@ -151,14 +161,6 @@ class ConfiguredInDetPreProcessingTRT: from InDetRecExample import TrackingCommon InDetTRT_DriftCircleTool.LumiDataKey = TrackingCommon.getLumiCondDataKeyForTRTMuScaling() - from AthenaCommon.BeamFlags import jobproperties - if InDetFlags.InDet25nsec() and jobproperties.Beam.beamType()=="collisions": - InDetTRT_DriftCircleTool.ValidityGateSuppression=True - InDetTRT_DriftCircleTool.SimpleOutOfTimePileupSupression=False - if jobproperties.Beam.beamType()=="cosmics": - InDetTRT_DriftCircleTool.SimpleOutOfTimePileupSupression=False - - ToolSvc += InDetTRT_DriftCircleTool if (InDetFlags.doPrintConfigurables()): printfunc (InDetTRT_DriftCircleTool) diff --git a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py index fec9295de25df6771e132d5f3d0d7af894ff0fa3..d0d684c84850d5e656ec4c88a64e2551bdfdba3a 100644 --- a/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py +++ b/InnerDetector/InDetExample/InDetTrigRecExample/python/InDetTrigCommonTools.py @@ -83,14 +83,22 @@ from TRT_DriftCircleTool.TRT_DriftCircleToolConf import InDet__TRT_DriftCircleTo import AthenaCommon.SystemOfUnits as Units MinTrailingEdge = 11.0*Units.ns MaxDriftTime = 60.0*Units.ns -LowGate = 18.0*Units.ns -HighGate = 38.0*Units.ns +LowGate = 14.0625*Units.ns # 4.5*3.125 ns +HighGate = 42.1875*Units.ns # LowGate + 9*3.125 ns +LowGateArgon = LowGate +HighGateArgon = HighGate + from AthenaCommon.GlobalFlags import globalflags -if globalflags.DataSource != 'data': - MinTrailingEdge = 16.0*Units.ns - MaxDriftTime = 65.0*Units.ns - LowGate = 23.0*Units.ns - HighGate = 43.0*Units.ns +from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags + +if globalflags.DataSource == 'data': + MinTrailingEdge = 11.0*Units.ns + MaxDriftTime = 60.0*Units.ns + LowGate = 17.1875*Units.ns + HighGate = 45.3125*Units.ns + LowGateArgon = 18.75*Units.ns + HighGateArgon = 43.75*Units.ns + InDetTrigTRT_DriftCircleTool = InDet__TRT_DriftCircleTool( name = "InDetTrigTRT_DriftCircleTool", @@ -98,32 +106,24 @@ InDetTrigTRT_DriftCircleTool = InDet__TRT_DriftCircleTool( name = "InDetTrigTRT_ ConditionsSummaryTool = InDetTrigTRTStrawStatusSummaryTool, UseConditionsStatus = True, UseConditionsHTStatus = True, - SimpleOutOfTimePileupSupression = True, + SimpleOutOfTimePileupSupression = False, RejectIfFirstBit = False, # fixes 50 nsec issue MinTrailingEdge = MinTrailingEdge, MaxDriftTime = MaxDriftTime, - ValidityGateSuppression = False, + ValidityGateSuppression = InDetTrigFlags.InDet25nsec(), LowGate = LowGate, HighGate = HighGate, SimpleOutOfTimePileupSupressionArgon = False,# no OOT rejection for argon RejectIfFirstBitArgon = False, # no OOT rejection for argon - MinTrailingEdgeArgon = 0, # no OOT rejection for argon - MaxDriftTimeArgon = 99*Units.ns,# no OOT rejection for argon - ValidityGateSuppressionArgon = False,# no OOT rejection for argon - LowGateArgon = 0,# no OOT rejection for argon - HighGateArgon = 75*Units.ns,# no OOT rejection for argon + MinTrailingEdgeArgon = MinTrailingEdge, + MaxDriftTimeArgon = MaxDriftTime, + ValidityGateSuppressionArgon = InDetTrigFlags.InDet25nsec(), + LowGateArgon = LowGateArgon, + HighGateArgon = HighGateArgon, useDriftTimeHTCorrection = True, - useDriftTimeToTCorrection = True, # reenable ToT ) -from InDetTrigRecExample.InDetTrigFlags import InDetTrigFlags -if InDetTrigFlags.InDet25nsec(): - InDetTrigTRT_DriftCircleTool.ValidityGateSuppression=True - InDetTrigTRT_DriftCircleTool.SimpleOutOfTimePileupSupression=False -#if jobproperties.Beam.beamType()=="cosmics": -# InDetTRT_DriftCircleTool.SimpleOutOfTimePileupSupression=False - ToolSvc += InDetTrigTRT_DriftCircleTool log.debug(InDetTrigTRT_DriftCircleTool) diff --git a/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDConfig.py b/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDConfig.py index ca581ae91a121233df2eab41367f5bbd8e47472d..c4e84b014481f7aedeccd591dbdbe90500efa5cf 100644 --- a/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDConfig.py +++ b/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr from G4AtlasApps.SimFlags import simFlags @@ -10,9 +10,11 @@ def getBCMSensorSD(name="BCMSensorSD", **kwargs): bare_collection_name = "BCMHits" mergeable_collection_suffix = "_G4" merger_input_property = "BCMHits" + region = "ID" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::bcmDiamondLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.BCMSensorSDTool(name, **kwargs) diff --git a/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDToolConfig.py b/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDToolConfig.py index 5bcf6ddf9b1ff36d94bd59c5ee1a49050b0eb613..4da290d67b23d83d80c134239b2624ae61339fd4 100644 --- a/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDToolConfig.py +++ b/InnerDetector/InDetG4/BCM_G4_SD/python/BCM_G4_SDToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -12,9 +12,12 @@ def BCMSensorSDCfg(ConfigFlags, name="BCMSensorSD", **kwargs): bare_collection_name = "BCMHits" mergeable_collection_suffix = "_G4" merger_input_property = "BCMHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "ID" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::bcmDiamondLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) diff --git a/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDConfig.py b/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDConfig.py index f4f5488b2ab4da173e8a0f0b3955037d9e426e49..79b99735924da032f1ae26151555c343cda4b824 100644 --- a/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDConfig.py +++ b/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr from G4AtlasApps.SimFlags import simFlags @@ -10,9 +10,11 @@ def getBLMSensorSD(name="BLMSensorSD", **kwargs): bare_collection_name = "BLMHits" mergeable_collection_suffix = "_G4" merger_input_property = "BLMHits" + region = "ID" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::blmDiamondLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.BLMSensorSDTool(name, **kwargs) diff --git a/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDToolConfig.py b/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDToolConfig.py index f816bda346ce349c4496a5332adcba7a0914fc32..f9aa423cde5342a88f890d73ceddcd44a4cd6c36 100644 --- a/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDToolConfig.py +++ b/InnerDetector/InDetG4/BLM_G4_SD/python/BLM_G4_SDToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -8,14 +8,17 @@ BLMSensorSDTool=CompFactory.BLMSensorSDTool def BLMSensorSDCfg(ConfigFlags, name="BLMSensorSD", **kwargs): - + result = ComponentAccumulator() bare_collection_name = "BLMHits" mergeable_collection_suffix = "_G4" merger_input_property = "BLMHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "ID" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::blmDiamondLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) diff --git a/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDConfig.py b/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDConfig.py index 2348cf5c91cba77749d92c44b581be9b0489f7f7..161d2683335e946429427c6dda5edc3b0fb1ea0f 100644 --- a/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDConfig.py +++ b/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr from G4AtlasApps.SimFlags import simFlags @@ -10,9 +10,11 @@ def getPixelSensorSD(name="PixelSensorSD", **kwargs): bare_collection_name = "PixelHits" mergeable_collection_suffix = "_G4" merger_input_property = "PixelHits" + region = "ID" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::siBLayLog","Pixel::siLog","Pixel::dbmDiamondLog"]) #kwargs.setdefault("LogicalVolumeNames", ["Pixel::siBLayLog","Pixel::siLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) diff --git a/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDToolConfig.py b/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDToolConfig.py index bfe0d3c14a5f7f4d8081a9e00f578d2ced8eb05e..6f7b6b7896155dd96b9ae7f54def567970fc177e 100644 --- a/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDToolConfig.py +++ b/InnerDetector/InDetG4/PixelG4_SD/python/PixelG4_SDToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -13,11 +13,13 @@ def PixelSensorSDCfg(ConfigFlags, name="PixelSensorSD", **kwargs): bare_collection_name = "PixelHits" mergeable_collection_suffix = "_G4" merger_input_property = "PixelHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "ID" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Pixel::siBLayLog","Pixel::siLog","Pixel::dbmDiamondLog"]) - #kwargs.setdefault("LogicalVolumeNames", ["Pixel::siBLayLog","Pixel::siLog"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) result.merge(acc) diff --git a/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDConfig.py b/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDConfig.py index 12e86c04d138a5e61e172bda4fc6591d6125f65b..1055b364626458fd88e2fc7bbc50c05841895b39 100644 --- a/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDConfig.py +++ b/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr from G4AtlasApps.SimFlags import simFlags @@ -10,9 +10,11 @@ def getSctSensorSD(name="SctSensorSD", **kwargs): bare_collection_name = "SCT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "SCTHits" + region = "ID" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["SCT::BRLSensor","SCT::ECSensor0","SCT::ECSensor1", "SCT::ECSensor2","SCT::ECSensor3"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) diff --git a/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDToolConfig.py b/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDToolConfig.py index d3af78ebff43ee7e34f083a19bcb6b1932e6b67e..e222d82afde4fd0924955e3cf47f126ccfafb624 100644 --- a/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDToolConfig.py +++ b/InnerDetector/InDetG4/SCT_G4_SD/python/SCT_G4_SDToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory @@ -14,8 +14,12 @@ def SctSensorSDCfg(ConfigFlags, name="SctSensorSD", **kwargs): bare_collection_name = "SCT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "SCTHits" - - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, mergeable_collection_suffix, merger_input_property) + region = "ID" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["SCT::BRLSensor","SCT::ECSensor0","SCT::ECSensor1", "SCT::ECSensor2","SCT::ECSensor3"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -41,4 +45,3 @@ def SctSensor_CTBCfg(name="SctSensor_CTB", **kwargs): kwargs.setdefault("LogicalVolumeNames", ["SCT::ECSensor0"]) kwargs.setdefault("OutputCollectionNames", ["SCT_Hits"]) return SctSensor_CTBTool(name, **kwargs) - diff --git a/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDConfig.py b/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDConfig.py index d8c4d674ba650585e29eef3982ac1217bae95255..d14cdc5417644177ca2a4002c59c2a0895ce4400 100644 --- a/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDConfig.py +++ b/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr from G4AtlasApps.SimFlags import simFlags @@ -10,9 +10,11 @@ def getTRTSensitiveDetector(name="TRTSensitiveDetector", **kwargs): bare_collection_name = "TRTUncompressedHits" mergeable_collection_suffix = "_G4" merger_input_property = "TRTUncompressedHits" + region = "ID" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) logicalVolumeNames = ["TRT::Gas","TRT::GasMA"] from AtlasGeoModel.CommonGMJobProperties import CommonGeometryFlags as geoFlags if ( geoFlags.Run() in ["RUN2", "RUN3"] ) : diff --git a/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDToolConfig.py b/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDToolConfig.py index 365eada3388cd23f4ed1802ade79154cf7e03020..f641e92c5225e657dca183166af9591768c23551 100644 --- a/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDToolConfig.py +++ b/InnerDetector/InDetG4/TRT_G4_SD/python/TRT_G4_SDToolConfig.py @@ -1,11 +1,11 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory from ISF_Algorithms.collection_merger_helpersNew import CollectionMergerCfg -TRTSensitiveDetectorTool =CompFactory.TRTSensitiveDetectorTool +TRTSensitiveDetectorTool =CompFactory.TRTSensitiveDetectorTool def TRTSensitiveDetectorCfg(ConfigFlags, name="TRTSensitiveDetector", **kwargs): @@ -13,9 +13,12 @@ def TRTSensitiveDetectorCfg(ConfigFlags, name="TRTSensitiveDetector", **kwargs): bare_collection_name = "TRTUncompressedHits" mergeable_collection_suffix = "_G4" merger_input_property = "TRTUncompressedHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "ID" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) result.merge(acc) logicalVolumeNames = ["TRT::Gas","TRT::GasMA"] diff --git a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelClusterParts.h b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelClusterParts.h index 8230d67211aa47d3de4e4f73af0dedc7318323a2..4d0d7dcb9777933e5490a13f178a48c2b56a6376 100644 --- a/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelClusterParts.h +++ b/InnerDetector/InDetRecEvent/InDetPrepRawData/InDetPrepRawData/PixelClusterParts.h @@ -73,6 +73,19 @@ namespace InDet { m_errorMatrix(pcp.m_errorMatrix ? new Amg::MatrixX(*pcp.m_errorMatrix) : 0) {} + /** move constructor */ + PixelClusterParts(PixelClusterParts&& pcp) noexcept : + m_idgroup(std::move(pcp.m_idgroup)), + m_totgroup(std::move(pcp.m_totgroup)), + m_lvl1group(std::move(pcp.m_lvl1group)), + m_localPosition( pcp.m_localPosition ), + m_errorMatrix(pcp.m_errorMatrix) + { + pcp.m_localPosition= nullptr; + pcp.m_errorMatrix = nullptr; + } + + /** assignment operator*/ PixelClusterParts& operator=(const PixelClusterParts& pcp){ if (this != &pcp){ diff --git a/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/PixelSpacePoint.h b/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/PixelSpacePoint.h index 733c0a9ddf206b6b96833891f525df79feadfd3a..c917ab40d945c6a6fb535fc03093cfaa26c5c31d 100755 --- a/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/PixelSpacePoint.h +++ b/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/PixelSpacePoint.h @@ -56,7 +56,7 @@ namespace InDet PixelSpacePoint( const PixelSpacePoint & PSP); /** Destructor */ - ~PixelSpacePoint(); + ~PixelSpacePoint() = default; /** Overloading assignment operator */ PixelSpacePoint &operator=(const PixelSpacePoint &); diff --git a/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/SCT_SpacePoint.h b/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/SCT_SpacePoint.h index 3528e9716c35c3feb7c7bbd1f0dd0f3c03b44d95..1744a8bba3d22e12fb5e71cf5e7f7b4638977e15 100755 --- a/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/SCT_SpacePoint.h +++ b/InnerDetector/InDetRecEvent/SiSpacePoint/SiSpacePoint/SCT_SpacePoint.h @@ -52,11 +52,11 @@ namespace InDet //@{ SCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) ; + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList) ; //@} /** Copy Constructor */ - SCT_SpacePoint(const SCT_SpacePoint &) ; + SCT_SpacePoint(const SCT_SpacePoint &); /** Destructor */ virtual ~SCT_SpacePoint() = default; @@ -81,7 +81,7 @@ namespace InDet /** common method used in constructors. */ void setup(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList); + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList); }; /////////////////////////////////////////////////////////////////// diff --git a/InnerDetector/InDetRecEvent/SiSpacePoint/src/PixelSpacePoint.cxx b/InnerDetector/InDetRecEvent/SiSpacePoint/src/PixelSpacePoint.cxx index 8b03b009acad859ef30d071098117d60fbbc4b3c..0c329904fce6e0362be5ef941b75469d0dff796a 100755 --- a/InnerDetector/InDetRecEvent/SiSpacePoint/src/PixelSpacePoint.cxx +++ b/InnerDetector/InDetRecEvent/SiSpacePoint/src/PixelSpacePoint.cxx @@ -36,7 +36,7 @@ namespace InDet assert (tmpPos) ; m_position = *tmpPos; - m_clusList = new std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>(clus,nullptr); + m_clusList = {clus,nullptr}; m_elemIdList.first = elementId ; m_elemIdList.second = 0 ; setupGlobalFromLocalCovariance(); @@ -55,7 +55,7 @@ namespace InDet assert (clus!=nullptr); m_position = globpos; m_globalCovariance = globcov; - m_clusList = new std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>(clus,nullptr); + m_clusList = {clus,nullptr}; m_elemIdList.first = elementId ; m_elemIdList.second = 0 ; } @@ -68,11 +68,6 @@ namespace InDet SpacePoint(PSP) {} - //------------------------------------------------------------- - - /** Destructor */ - PixelSpacePoint::~PixelSpacePoint() - {} //------------------------------------------------------------- diff --git a/InnerDetector/InDetRecEvent/SiSpacePoint/src/SCT_SpacePoint.cxx b/InnerDetector/InDetRecEvent/SiSpacePoint/src/SCT_SpacePoint.cxx index cabc8efbafe9920690272edf2be56dd804d0a946..71ed2ed5873fe0b1baf8fccd1df92e986e452402 100755 --- a/InnerDetector/InDetRecEvent/SiSpacePoint/src/SCT_SpacePoint.cxx +++ b/InnerDetector/InDetRecEvent/SiSpacePoint/src/SCT_SpacePoint.cxx @@ -18,13 +18,14 @@ namespace InDet SCT_SpacePoint::SCT_SpacePoint() : Trk::SpacePoint() - {} + { + } //------------------------------------------------------------- SCT_SpacePoint::SCT_SpacePoint(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*> &clusList) : Trk::SpacePoint() { @@ -37,15 +38,15 @@ namespace InDet void SCT_SpacePoint::setup(const std::pair<IdentifierHash, IdentifierHash>& elementIdList, const Amg::Vector3D& position, - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* clusList) + const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>& clusList) { m_clusList = clusList ; m_position = position ; m_elemIdList.first = elementIdList.first ; m_elemIdList.second = elementIdList.second ; - assert( (clusList->first!=0) && (clusList->second!=0) ); - assert(clusList->first->detectorElement()) ; - std::unique_ptr<const Amg::Vector2D> locpos{clusList->first->detectorElement()->surface().globalToLocal(position)}; + assert( (clusList.first!=0) && (clusList.second!=0) ); + assert(clusList.first->detectorElement()) ; + std::unique_ptr<const Amg::Vector2D> locpos{clusList.first->detectorElement()->surface().globalToLocal(position)}; assert(locpos); Trk::MeasurementBase::m_localParams = Trk::LocalParameters(*locpos ) ; diff --git a/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/TrackStateOnBLayerInfo.h b/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/TrackStateOnBLayerInfo.h index ae8234c33cfe9e9dc6f6537de17b31d9017e0fa6..85bec0b5034f5dcc131025c60921060c4b00e54d 100644 --- a/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/TrackStateOnBLayerInfo.h +++ b/InnerDetector/InDetRecTools/InDetTestBLayer/InDetTestBLayer/TrackStateOnBLayerInfo.h @@ -24,7 +24,7 @@ namespace InDet { public: TrackStateOnBLayerInfo(); - ~TrackStateOnBLayerInfo(); + ~TrackStateOnBLayerInfo() = default; inline TrackStateOnBLayerType type() const { return m_type; } inline Identifier moduleId() const { return m_moduleId; } diff --git a/InnerDetector/InDetRecTools/InDetTestBLayer/src/TrackStateOnBLayerInfo.cxx b/InnerDetector/InDetRecTools/InDetTestBLayer/src/TrackStateOnBLayerInfo.cxx index 2946b90878a5a521c7232201a2a73b2b7d8513e4..85baefc7ad3930e750c13c8a2cacb1f7fb015af3 100644 --- a/InnerDetector/InDetRecTools/InDetTestBLayer/src/TrackStateOnBLayerInfo.cxx +++ b/InnerDetector/InDetRecTools/InDetTestBLayer/src/TrackStateOnBLayerInfo.cxx @@ -26,12 +26,6 @@ namespace InDet { m_goodFrac = -99999; } - InDet::TrackStateOnBLayerInfo::~TrackStateOnBLayerInfo(){ - ////.... - } - - - } //end namespace diff --git a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx index 36439c690ba128d542491d020b4c3ee34432db4a..e249385f36afb22ccdcc01be16cc4278ac83f86e 100644 --- a/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx +++ b/InnerDetector/InDetRecTools/SiSpacePointTool/src/SiSpacePointMakerTool.cxx @@ -167,9 +167,7 @@ namespace InDet { if (ok) { ATH_MSG_VERBOSE( "SpacePoint generated at: ( " << point.x() << " , " << point.y() << " , " << point.z() << " ) " ); const std::pair<IdentifierHash,IdentifierHash> elementIdList( element1->identifyHash() , element2->identifyHash() ); - const std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>* - clusList = new std::pair<const Trk::PrepRawData*, const Trk::PrepRawData*>(&cluster1, &cluster2); - return new InDet::SCT_SpacePoint(elementIdList, point, clusList); + return new InDet::SCT_SpacePoint(elementIdList, point, {&cluster1, &cluster2}); } return nullptr; @@ -287,7 +285,6 @@ namespace InDet { } } - //-------------------------------------------------------------------------- void SiSpacePointMakerTool::fillSCT_SpacePointEtaOverlapCollection(const InDet::SCT_ClusterCollection* clusters1, const InDet::SCT_ClusterCollection* clusters2, @@ -732,9 +729,7 @@ namespace InDet { Amg::Vector3D point(In0.position(m)); const std::pair<IdentifierHash,IdentifierHash> elementIdList(ID0,ID1); - const std::pair<const Trk::PrepRawData*,const Trk::PrepRawData*>* - clusList = new std::pair<const Trk::PrepRawData*,const Trk::PrepRawData*>(In0.cluster(),In1.cluster()); - return new InDet::SCT_SpacePoint(elementIdList, point, clusList); + return new InDet::SCT_SpacePoint(elementIdList, point, {In0.cluster(),In1.cluster()}); } } diff --git a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDConfig.py b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDConfig.py index 3a8e8aa94076239b65a4241a3690c3c6ccc35eb4..428ad2f7398ee187a15209feb4d6c9b2c9fd2a33 100644 --- a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDConfig.py +++ b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr @@ -127,9 +127,11 @@ def getLArEMBSensitiveDetector(name="LArEMBSensitiveDetector", **kwargs): bare_collection_name = "LArHitEMB" mergeable_collection_suffix = "_G4" merger_input_property = "LArEMBHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) ## Main configuration kwargs.setdefault("StacVolumes",["LArMgr::LAr::EMB::STAC"]) kwargs.setdefault("PresamplerVolumes",["LArMgr::LAr::Barrel::Presampler::Module"]) @@ -144,9 +146,11 @@ def getLArEMECSensitiveDetector(name="LArEMECSensitiveDetector", **kwargs): bare_collection_name = "LArHitEMEC" mergeable_collection_suffix = "_G4" merger_input_property = "LArEMECHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) from G4AtlasApps.SimFlags import simFlags if simFlags.SimLayout.get_Value() not in ["tb_LArH6_2002","tb_LArH6EC_2002"]: kwargs.setdefault("NegIWVolumes",["LArMgr::LAr::EMEC::Neg::InnerWheel"]) @@ -167,9 +171,11 @@ def getLArFCALSensitiveDetector(name="LArFCALSensitiveDetector", **kwargs): bare_collection_name = "LArHitFCAL" mergeable_collection_suffix = "_G4" merger_input_property = "LArFCALHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("FCAL1Volumes",["LArMgr::LAr::FCAL::Module1::Gap"]) kwargs.setdefault("FCAL2Volumes",["LArMgr::LAr::FCAL::Module2::Gap"]) kwargs.setdefault("FCAL3Volumes",["LArMgr::LAr::FCAL::Module3::Gap"]) @@ -184,9 +190,11 @@ def getLArHECSensitiveDetector(name="LArHECSensitiveDetector", **kwargs): bare_collection_name = "LArHitHEC" mergeable_collection_suffix = "_G4" merger_input_property = "LArHECHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) #kwargs.setdefault("SliceVolumes",["LAr::HEC::Module::Depth::Slice"]) #kwargs.setdefault("LocalVolumes",["LAr::HEC::Module::Depth::Slice::Local"]) kwargs.setdefault("WheelVolumes",["LArMgr::LAr::HEC::Module::Depth::Slice"]) diff --git a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py index 9a32083059e755c63f25388a296284dbd84f1931..9aa1dbdd5fc0035fc1740d03d81906e14f27e6cd 100644 --- a/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py +++ b/LArCalorimeter/LArG4/LArG4SD/python/LArG4SDToolConfig.py @@ -176,9 +176,12 @@ def LArEMBSensitiveDetectorCfg(ConfigFlags,name="LArEMBSensitiveDetector", **kwa bare_collection_name = "LArHitEMB" mergeable_collection_suffix = "_G4" merger_input_property = "LArEMBHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "CALO" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) result.merge(acc) ## Main configuration @@ -195,7 +198,7 @@ def LArEMBSensitiveDetectorCfg(ConfigFlags,name="LArEMBSensitiveDetector", **kwa result.merge(EMBCalculatorCfg(ConfigFlags)) kwargs.setdefault("EMBCalculator", result.getService("EMBCalculator")) - + result.setPrivateTools( LArG4__EMBSDTool(name, **kwargs) ) return result @@ -204,9 +207,12 @@ def LArEMECSensitiveDetectorCfg(ConfigFlags, name="LArEMECSensitiveDetector", ** bare_collection_name = "LArHitEMEC" mergeable_collection_suffix = "_G4" merger_input_property = "LArEMECHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "CALO" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) result.merge(acc) if ConfigFlags.GeoModel.AtlasVersion not in ["tb_LArH6_2002","tb_LArH6EC_2002"]: @@ -254,9 +260,12 @@ def LArFCALSensitiveDetectorCfg(ConfigFlags, name="LArFCALSensitiveDetector", ** bare_collection_name = "LArHitFCAL" mergeable_collection_suffix = "_G4" merger_input_property = "LArFCALHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "CALO" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) result.merge(acc) kwargs.setdefault("FCAL1Volumes",["LArMgr::LAr::FCAL::Module1::Gap"]) @@ -287,9 +296,12 @@ def LArHECSensitiveDetectorCfg(ConfigFlags, name="LArHECSensitiveDetector", **kw bare_collection_name = "LArHitHEC" mergeable_collection_suffix = "_G4" merger_input_property = "LArHECHits" - acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "CALO" + acc, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) result.merge(acc) kwargs.setdefault("WheelVolumes",["LArMgr::LAr::HEC::Module::Depth::Slice"]) diff --git a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h index ee3ffa2f76348c37f6baf3adb028a2ff17d5ee93..51004fa0c054561502570d993bd19b4c3dd7d99d 100644 --- a/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h +++ b/MagneticField/MagFieldServices/MagFieldServices/AtlasFieldMapCondAlg.h @@ -56,8 +56,15 @@ namespace MagField { EventIDRange m_mapCondObjOutputRange {EventIDRange()}; // default range covers everything (run/event and timestamp) }; + // get the field map StatusCode updateFieldMap(const EventContext& ctx, Cache& cache) const; + // get DCS currents to decide which field map file to read + StatusCode checkCurrentFromConditions(const EventContext& ctx, + double& soleCurrent, + double& toroCurrent, + EventIDRange& rangeDCS) const; + /// map file names - if not read from cool Gaudi::Property<std::string> m_fullMapFilename {this, "FullMapFile", "MagneticFieldMaps/bfieldmap_7730_20400_14m.root", @@ -74,6 +81,12 @@ namespace MagField { Gaudi::Property<double> m_mapToroCurrent {this, "MapToroCurrent", 20400., "Nominal toroid current (A)"}; + // threshold below which currents are considered zero + Gaudi::Property<double> m_soleMinCurrent {this, + "SoleMinCurrent", 1.0, "Minimum solenoid current (A) for which solenoid is considered ON"}; + Gaudi::Property<double> m_toroMinCurrent {this, + "ToroMinCurrent", 1.0, "Minimum toroid current (A) for which toroid is considered ON"}; + // flag to load map on start Gaudi::Property<bool> m_loadMapOnStart {this, @@ -94,6 +107,12 @@ namespace MagField { {this, "AtlasFieldMapCondObj", "fieldMapCondObj", "Name of key for the Magnetic Field conditions object with the map file names"}; + // COOL folder name containing current information + // current input key + SG::ReadCondHandleKey<CondAttrListCollection> m_currInputKey + {this, + "COOLCurrentsFolderName", "/EXT/DCS/MAGNETS/SENSORDATA", "Name of the COOL folder containing magnet currents"}; + ServiceHandle<ICondSvc> m_condSvc { this, "CondSvc", "CondSvc", "conditions service" }; diff --git a/MagneticField/MagFieldServices/share/test_magFieldCondAlg.py b/MagneticField/MagFieldServices/share/test_magFieldCondAlg.py index 58bc3ca1d068c6c906187833bc3d43246ee0ccfd..4c82f0335aab36bac3e8845ec00722d817379d06 100644 --- a/MagneticField/MagFieldServices/share/test_magFieldCondAlg.py +++ b/MagneticField/MagFieldServices/share/test_magFieldCondAlg.py @@ -4,10 +4,23 @@ # # Testing IOVs and currents: (since LB, solenoid, toroids) +# Default test - should read both mag field files, and turn off fields for events 5 to 9, and back on for 10 to 14 currents = [(0, 7730, 20400), (5, 0, 0), (10, 7730, 20400)] +# Optional test: only toroid is on for whole run. Scale factor for solenoid will become 1 at event 5, +# but solenoid field will still be off +# currents = [(0, 0, 20400), +# (5, 7730, 20400), +# (10, 7730, 20400)] + +# Optional test: only solenoid is on for whole run. Scale factor for toroid will become 1 at event 5, +# but toroid field will still be off +# currents = [(0, 7730, 0), +# (5, 7730, 20400), +# (10, 7730, 20400)] + # Folder name folder = '/EXT/DCS/MAGNETS/SENSORDATA' diff --git a/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx b/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx index 74cff53bab650ed8ad98a57d60a8dc53b518a68b..5c9facd9f16c9f47aeebc50cd5602e02f00a6ef6 100644 --- a/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx +++ b/MagneticField/MagFieldServices/src/AtlasFieldCacheCondAlg.cxx @@ -86,14 +86,13 @@ MagField::AtlasFieldCacheCondAlg::execute(const EventContext& ctx) const { //This will need to be filled before we construct the condition object Cache cache{}; - // set current scale factor from either conditions or from jobOption parameters if (m_useDCS) { ATH_CHECK( updateCurrentFromConditions(ctx, cache) ); } else { ATH_CHECK( updateCurrentFromParameters(ctx, cache) ); } - + // Must read map cond object to get previously created map SG::ReadCondHandle<AtlasFieldMapCondObj> mapReadHandle{m_mapCondObjInputKey, ctx}; const AtlasFieldMapCondObj* mapCondObj{*mapReadHandle}; @@ -109,7 +108,6 @@ MagField::AtlasFieldCacheCondAlg::execute(const EventContext& ctx) const { if (!m_lockMapCurrents) { scaleField(cache, fieldMap); } - // save current scale factor in conditions object auto fieldCondObj = std::make_unique<AtlasFieldCacheCondObj>(); @@ -225,6 +223,7 @@ MagField::AtlasFieldCacheCondAlg::updateCurrentFromConditions(const EventContext torcur = 0.0; ATH_MSG_INFO( "UpdateCurrentFromConditions: Toroids are off" ); } + cache.m_solenoidCurrent = solcur; cache.m_toroidCurrent = torcur; @@ -275,13 +274,13 @@ MagField::AtlasFieldCacheCondAlg::scaleField(Cache& cache, const MagField::Atlas std::abs( cache.m_solenoidCurrent/fieldMap->solenoidCurrent() - 1.0 ) > 0.001 ){ cache.m_solScaleFactor = cache.m_solenoidCurrent/fieldMap->solenoidCurrent(); } - ATH_MSG_INFO( "scaleField: Solenoid field scale factor " << cache.m_solScaleFactor << ". Solenoid and map currents: " + ATH_MSG_INFO( "scaleField: Solenoid field scale factor " << cache.m_solScaleFactor << ". Desired current and map current: " << cache.m_solenoidCurrent << "," << fieldMap->solenoidCurrent()); } else { // No SF set, set it to 0 - current was set to zero either here or for the map, or the map was not read in cache.m_solScaleFactor = 0; - ATH_MSG_INFO( "scaleField: Solenoid field scale factor " << cache.m_solScaleFactor << ". Solenoid and map currents: " + ATH_MSG_INFO( "scaleField: Solenoid field scale factor " << cache.m_solScaleFactor << ". Desired current and map current: " << cache.m_solenoidCurrent << "," << ((fieldMap) ? fieldMap->solenoidCurrent() : 0)); } @@ -292,12 +291,12 @@ MagField::AtlasFieldCacheCondAlg::scaleField(Cache& cache, const MagField::Atlas // scale the field in all zones except for the solenoid zone cache.m_torScaleFactor = cache.m_toroidCurrent/fieldMap->toroidCurrent(); } - ATH_MSG_INFO( "scaleField: Toroid field scale factor " << cache.m_torScaleFactor << ". Toroid and map currents: " + ATH_MSG_INFO( "scaleField: Toroid field scale factor " << cache.m_torScaleFactor << ". Desired current and map current: " << cache.m_toroidCurrent << "," << fieldMap->toroidCurrent()); } else { cache.m_torScaleFactor = 0; - ATH_MSG_INFO( "scaleField: Toroid field scale factor " << cache.m_torScaleFactor << ". Toroid and map currents: " + ATH_MSG_INFO( "scaleField: Toroid field scale factor " << cache.m_torScaleFactor << ". Desired current and map current: " << cache.m_toroidCurrent << "," << ((fieldMap) ? fieldMap->toroidCurrent() : 0)); } } diff --git a/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx b/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx index 460fb0b2cdd52edc89a4680b4e0151e15f572e21..261c22ecf732cf30c83f1890b3ef72838a77afb2 100644 --- a/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx +++ b/MagneticField/MagFieldServices/src/AtlasFieldMapCondAlg.cxx @@ -42,7 +42,10 @@ MagField::AtlasFieldMapCondAlg::initialize() { ATH_CHECK( m_condSvc.retrieve() ); // Read Handle for the map - ATH_CHECK( m_mapsInputKey.initialize() ); + ATH_CHECK( m_mapsInputKey.initialize(m_useMapsFromCOOL) ); + + // Read Handle for the current + ATH_CHECK( m_currInputKey.initialize (!m_loadMapOnStart && m_useMapsFromCOOL) ); // Read Handle for tagInfo ATH_CHECK( m_tagInfoKey.initialize() ); @@ -187,6 +190,69 @@ MagField::AtlasFieldMapCondAlg::updateFieldMap(const EventContext& ctx, Cache& c // (if it contains more than 3 maps, then this logic doesn't work perfectly) // nominal currents are read from the global map } + + if (m_loadMapOnStart) { + + // For loading map on start - online scenario - take the currents from job options + // And set IOV range to current run number to run number + 1 + + cache.m_mapSoleCurrent = m_mapSoleCurrent; + cache.m_mapToroCurrent = m_mapToroCurrent; + + // Create a range for the current run + EventIDBase start, stop; + start.set_run_number(ctx.eventID().run_number()); + start.set_lumi_block(0); + stop.set_run_number(ctx.eventID().run_number() + 1); + stop.set_lumi_block(0); + cache.m_mapCondObjOutputRange = EventIDRange(start,stop); + + ATH_MSG_INFO("updateFieldMap: loadMapOnStart is set, overriding currents from job options - solCur " + << cache.m_mapSoleCurrent << ", torCur " << cache.m_mapToroCurrent + << " and setting IOV range: " << cache.m_mapCondObjOutputRange); + } + else { + // For normal athena jobs, check the currents in DCS to check if one of the two magnets + // is OFF so that the correct map can be used. + // If a field is off, set an IOV validity range to be the current run only. + // (Note DCS currents have a timestamp-based IOV, so this is not used.) + + // Note: for the nominal maps from COOL, three maps are available: + // - Global with both solenoid and toroid + // - Solenoid - just the currents for the solenoid + // - Toroid - just the currents for the toroid + + double soleCurrent; + double toroCurrent; + EventIDRange rangeDCS; + ATH_CHECK( checkCurrentFromConditions(ctx, soleCurrent, toroCurrent, rangeDCS) ); + + bool mustCreateIOVRange = false; + if (soleCurrent < m_soleMinCurrent) { + cache.m_mapSoleCurrent = 0; + mustCreateIOVRange = true; + ATH_MSG_INFO("updateFieldMap: set solenoid current to 0 from DCS"); + } + if (toroCurrent < m_toroMinCurrent) { + cache.m_mapToroCurrent = 0; + mustCreateIOVRange = true; + ATH_MSG_INFO("updateFieldMap: set toroid current to 0 from DCS"); + } + if (mustCreateIOVRange) { + // The currents from DCS are zero for either solenoid or toroid, construct an IOV range for one run + EventIDBase start, stop; + // use ctx run number + start.set_run_number(ctx.eventID().run_number()); + start.set_lumi_block(0); + stop.set_run_number(ctx.eventID().run_number() + 1); + stop.set_lumi_block(0); + cache.m_mapCondObjOutputRange = EventIDRange(start,stop); + ATH_MSG_INFO("updateFieldMap: map IOV range " << cache.m_mapCondObjOutputRange); + } + else { + ATH_MSG_INFO("updateFieldMap: currents are OK, will use nominal maps"); + } + } } else { @@ -201,7 +267,7 @@ MagField::AtlasFieldMapCondAlg::updateFieldMap(const EventContext& ctx, Cache& c EventIDBase start, stop; start.set_run_number(ctx.eventID().run_number()); start.set_lumi_block(0); - stop.set_run_number(ctx.eventID().run_number()+1); + stop.set_run_number(ctx.eventID().run_number() + 1); stop.set_lumi_block(0); cache.m_mapCondObjOutputRange = EventIDRange(start,stop); @@ -225,13 +291,15 @@ MagField::AtlasFieldMapCondAlg::updateFieldMap(const EventContext& ctx, Cache& c if (tag.first == "MapSoleCurrent") { cache.m_mapSoleCurrent = std::stof(tag.second); resetCurrentsFromTagInfo = true; - ATH_MSG_INFO("updateFieldMap: found MapSoleCurrent in TagInfo, setting the solenoid current " << cache.m_mapSoleCurrent); + ATH_MSG_INFO("updateFieldMap: found MapSoleCurrent in TagInfo, setting the solenoid current " + << cache.m_mapSoleCurrent); } else if (tag.first == "MapToroCurrent") { cache.m_mapToroCurrent = std::stof(tag.second); resetCurrentsFromTagInfo = true; - ATH_MSG_INFO("updateFieldMap: found MapToroCurrent in TagInfo, setting the toroid current " << cache.m_mapToroCurrent); + ATH_MSG_INFO("updateFieldMap: found MapToroCurrent in TagInfo, setting the toroid current " + << cache.m_mapToroCurrent); } } if (resetCurrentsFromTagInfo) ATH_MSG_INFO("updateFieldMap: reset currents from TagInfo"); @@ -312,3 +380,98 @@ MagField::AtlasFieldMapCondAlg::updateFieldMap(const EventContext& ctx, Cache& c return StatusCode::SUCCESS; } + + +StatusCode +MagField::AtlasFieldMapCondAlg::checkCurrentFromConditions(const EventContext& ctx, + double& soleCurrent, + double& toroCurrent, + EventIDRange& rangeDCS) const +{ + + // readin current value + SG::ReadCondHandle<CondAttrListCollection> readHandle {m_currInputKey, ctx}; + const CondAttrListCollection* attrListColl{*readHandle}; + if (attrListColl == nullptr) { + ATH_MSG_ERROR("checkCurrentFromConditions: Failed to retrieve CondAttributeListCollection with key " << m_currInputKey.key()); + return StatusCode::FAILURE; + } + + + // Get the validitiy range + if (!readHandle.range(rangeDCS)) { + ATH_MSG_FATAL("checkCurrentFromConditions: Failed to retrieve validity range for " << readHandle.key()); + return StatusCode::FAILURE; + } + ATH_MSG_INFO("checkCurrentFromConditions: Range of input currents is " << rangeDCS); + + // 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( "checkCurrentFromConditions: Attempt 1 at reading currents from DCS (using channel name)" ); + for ( CondAttrListCollection::const_iterator itr = attrListColl->begin(); itr != attrListColl->end(); ++itr ) { + const std::string& name = attrListColl->chanName(itr->first); + ATH_MSG_INFO( "checkCurrentFromConditions: 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( "checkCurrentFromConditions: 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 = attrListColl->begin(); itr != attrListColl->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( "checkCurrentFromConditions: Missing solenoid current in DCS information" ); + if ( !gottor ) ATH_MSG_ERROR( "checkCurrentFromConditions: Missing toroid current in DCS information" ); + return StatusCode::FAILURE; + } + + ATH_MSG_INFO( "checkCurrentFromConditions: 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( "checkCurrentFromConditions: Solenoid is off" ); + } + if ( torcur < m_toroMinCurrent) { + torcur = 0.0; + ATH_MSG_INFO( "checkCurrentFromConditions: Toroids are off" ); + } + + soleCurrent = solcur; + toroCurrent = torcur; + + return StatusCode::SUCCESS; +} + diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDConfig.py b/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDConfig.py index 8951047a9e4644f24c55ef8df7570c4f9b34183e..5bbb723dc026b7770be259892cf9f47c05add321 100644 --- a/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDConfig.py +++ b/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr @@ -9,9 +9,11 @@ def getCSCSensitiveDetectorCosmics(name="CSCSensitiveDetectorCosmics", **kwargs) bare_collection_name = "CSC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "CSCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::CscArCO2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.CSCSensitiveDetectorCosmicsTool(name, **kwargs) @@ -21,9 +23,11 @@ def getCSCSensitiveDetector(name="CSCSensitiveDetector", **kwargs): bare_collection_name = "CSC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "CSCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::CscArCO2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.CSCSensitiveDetectorTool(name, **kwargs) @@ -39,9 +43,11 @@ def getMDTSensitiveDetectorCosmics(name="MDTSensitiveDetectorCosmics", **kwargs) bare_collection_name = "MDT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "MDTHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::SensitiveGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.MDTSensitiveDetectorCosmicsTool(name, **kwargs) @@ -51,9 +57,11 @@ def getMDTSensitiveDetector(name="MDTSensitiveDetector", **kwargs): bare_collection_name = "MDT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "MDTHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::SensitiveGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.MDTSensitiveDetectorTool(name, **kwargs) @@ -69,9 +77,11 @@ def getRPCSensitiveDetectorCosmics(name="RPCSensitiveDetectorCosmics", **kwargs) bare_collection_name = "RPC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "RPCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::gazGap"]) kwargs.setdefault("OutputCollectionNames", [bare_collection_name]) return CfgMgr.RPCSensitiveDetectorCosmicsTool(name, **kwargs) @@ -81,9 +91,11 @@ def getRPCSensitiveDetector(name="RPCSensitiveDetector", **kwargs): bare_collection_name = "RPC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "RPCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::gazGap"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.RPCSensitiveDetectorTool(name, **kwargs) @@ -93,9 +105,11 @@ def getTGCSensitiveDetectorCosmics(name="TGCSensitiveDetectorCosmics", **kwargs) bare_collection_name = "TGC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "TGCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::muo::TGCGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.TGCSensitiveDetectorCosmicsTool(name, **kwargs) @@ -105,9 +119,11 @@ def getTGCSensitiveDetector(name="TGCSensitiveDetector", **kwargs): bare_collection_name = "TGC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "TGCHits" + region = "MUON" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::muo::TGCGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.TGCSensitiveDetectorTool(name, **kwargs) diff --git a/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDToolConfig.py b/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDToolConfig.py index 2141f9f5f5c2293ee242798d1c49384991a21911..e89eaea0c28c6266829398100f6db6619608e5db 100644 --- a/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDToolConfig.py +++ b/MuonSpectrometer/MuonG4/MuonG4SD/python/MuonG4SDToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from ISF_Algorithms.collection_merger_helpersNew import CollectionMergerCfg from AthenaConfiguration.ComponentFactory import CompFactory from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator @@ -9,9 +9,12 @@ def CSCSensitiveDetectorCosmicsCfg(ConfigFlags, name="CSCSensitiveDetectorCosmic bare_collection_name = "CSC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "CSCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::CscArCO2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -21,9 +24,12 @@ def CSCSensitiveDetectorCfg(ConfigFlags, name="CSCSensitiveDetector", **kwargs): bare_collection_name = "CSC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "CSCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::CscArCO2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -43,9 +49,12 @@ def MDTSensitiveDetectorCosmicsCfg(ConfigFlags, name="MDTSensitiveDetectorCosmic bare_collection_name = "MDT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "MDTHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::SensitiveGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -57,9 +66,12 @@ def MDTSensitiveDetectorCfg(ConfigFlags, name="MDTSensitiveDetector", **kwargs): bare_collection_name = "MDT_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "MDTHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::SensitiveGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -69,7 +81,8 @@ def MDTSensitiveDetectorCfg(ConfigFlags, name="MDTSensitiveDetector", **kwargs): def MicromegasSensitiveDetectorCfg(ConfigFlags, name="MicromegasSensitiveDetector", **kwargs): kwargs.setdefault("LogicalVolumeNames", ["Muon::MM_Sensitive"]) - kwargs.setdefault("OutputCollectionNames", ["MicromegasSensitiveDetector"]) # need ISF_Collection merger in acc? + kwargs.setdefault("OutputCollectionNames", ["MicromegasSensitiveDetector"]) + # TODO add support for Micromegas to ISF_CollectionMerger result=ComponentAccumulator() result.setPrivateTools( MicromegasSensitiveDetectorTool(name, **kwargs) ) return result @@ -79,9 +92,12 @@ def RPCSensitiveDetectorCosmicsCfg(ConfigFlags, name="RPCSensitiveDetectorCosmic bare_collection_name = "RPC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "RPCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::gazGap"]) kwargs.setdefault("OutputCollectionNames", [bare_collection_name]) #is this correct? @@ -93,9 +109,12 @@ def RPCSensitiveDetectorCfg(ConfigFlags, name="RPCSensitiveDetector", **kwargs): bare_collection_name = "RPC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "RPCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::gazGap"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -107,9 +126,12 @@ def TGCSensitiveDetectorCosmicsCfg(ConfigFlags, name="TGCSensitiveDetectorCosmic bare_collection_name = "TGC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "TGCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::muo::TGCGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -121,9 +143,12 @@ def TGCSensitiveDetectorCfg(ConfigFlags, name="TGCSensitiveDetector", **kwargs): bare_collection_name = "TGC_Hits" mergeable_collection_suffix = "_G4" merger_input_property = "TGCHits" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + region = "MUON" + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Muon::muo::TGCGas"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -134,7 +159,7 @@ def TGCSensitiveDetectorCfg(ConfigFlags, name="TGCSensitiveDetector", **kwargs): def sTGCSensitiveDetectorCfg(ConfigFlags, name="sTGCSensitiveDetector", **kwargs): kwargs.setdefault("LogicalVolumeNames", ["Muon::sTGC_Sensitive"]) kwargs.setdefault("OutputCollectionNames", ["sTGCSensitiveDetector"]) - + # TODO add support for Micromegas to ISF_CollectionMerger result=ComponentAccumulator() result.setPrivateTools( sTGCSensitiveDetectorTool(name, **kwargs) ) return result diff --git a/MuonSpectrometer/MuonG4/MuonPassiveMaterials/CMakeLists.txt b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..be3a067dee5205f9bd9a4cfde8c0b9d12d929cd0 --- /dev/null +++ b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# Declare the package name: +atlas_subdir( MuonPassiveMaterials ) + +# Install files from the package: +atlas_install_xmls( data/*.xml ) + diff --git a/MuonSpectrometer/MuonG4/MuonPassiveMaterials/README.md b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e75acf7b2671e5e5319098eb116453af7b6599eb --- /dev/null +++ b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/README.md @@ -0,0 +1,12 @@ +MuonPassiveMaterials +--- + +This package hosts the AGDD primary number xml files for the description of the passive materials present in the muon spectrometer and its close surrounding. Those passive materials are important for the simulation of muon tracks but also for cavern background and radiation studies. + +Previously the AGDD primary numbers were contained in an xml block inside the [amdb files](https://twiki.cern.ch/twiki/bin/view/Atlas/AmdbSimrecFiles). However, there was no version control system. Now, they are contained in this package which also allows to study the passive materials in a standalone GeoModel environment outside of athena (such as the [agdd standalone package](https://gitlab.cern.ch/GeoModelATLAS/agdd)) without needing the full amdb files. + +Content +--- + +`passiveMat_r.08.02.xml`: Run 2 detector geometry, based on AGDD xml block of `amdb_simrec.r.08.01`, fixes of JFSH and JTSH, fixed floor position + diff --git a/MuonSpectrometer/MuonG4/MuonPassiveMaterials/data/passiveMat_r.08.02.xml b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/data/passiveMat_r.08.02.xml new file mode 100644 index 0000000000000000000000000000000000000000..aae41c7ce4c6f4353d2e444902b76adab2535e2f --- /dev/null +++ b/MuonSpectrometer/MuonG4/MuonPassiveMaterials/data/passiveMat_r.08.02.xml @@ -0,0 +1,10188 @@ +<?xml version="1.0"?> + +<AGDD> + +<section name = "General Variables" + version = "7.0" + date = "17 January 2005" + author = "Serguei Baranov, Daniel Pomarede" + top_volume = "useless"> + +<!-- name = Constants of general use section name = "Constante" --> + +<var name="GENV_Pi" value="2. * asin(1)" /> +<var name="GENV_Eps" value="0.1" /> +<var name="GENV_PiS180" value="GENV_Pi/180." /> + +<var name="GENV_Si5" value="sin( 5.0*GENV_PiS180)"/> +<var name="GENV_Co5" value="cos( 5.0*GENV_PiS180)"/> + +<var name="GENV_Ta15" value="tan(15.0*GENV_PiS180)"/> + +<var name="GENV_Ta20" value="tan(20.0*GENV_PiS180)"/> + +<var name="GENV_Si225" value="sin(22.5*GENV_PiS180)"/> +<var name="GENV_Co225" value="cos(22.5*GENV_PiS180)"/> +<var name="GENV_Ta225" value="tan(22.5*GENV_PiS180)"/> + +<var name="GENV_Ta375" value="tan(37.5*GENV_PiS180)"/> + +<var name="GENV_Si45" value="sin(45.0*GENV_PiS180)"/> +<var name="GENV_Co45" value="cos(45.0*GENV_PiS180)"/> +<var name="GENV_Ta45" value="tan(45.0*GENV_PiS180)"/> + +<var name="GENV_Si525" value="sin(52.5*GENV_PiS180)"/> +<var name="GENV_Co525" value="cos(52.5*GENV_PiS180)"/> + +<var name="GENV_Ta55" value="tan(55.0*GENV_PiS180)"/> + +<var name="GENV_Si675" value="sin(67.5*GENV_PiS180)"/> +<var name="GENV_Co675" value="cos(67.5*GENV_PiS180)"/> +<var name="GENV_Ta675" value="tan(67.5*GENV_PiS180)"/> + +<var name="GENV_Ta77" value="tan(77.0*GENV_PiS180)"/> +<var name="Zero" value=" 0"/> + +<var name="PiOver2" value="90." /> +<var name="PiOver4" value="45." /> + +</section> +<section name = "Atlas ECT Toroidal Magnets" + version = "8.0" + date = "01-01-10, 28 November 2002 -> Summer 2011" + author = "Laurent Chevalier, Marc Virchaux, Daniel Pomarede -> review Jochen Meyer" + top_volume = "ECT_Toroids"> + +<!-- name = Atlas ECT Toroidal Magnets section name = "Magnets" --> + +<!-- ************************************************************** + ************************************************************** + *** **** + *** Atlas End-Cap Toroids (ECT) **** + *** **** + ************************************************************** + ************************************************************** --> + +<var name="AECT_Toroid_ZPosition" value=" 10406. "/> <!-- confirmed atczte__0002-vAB --> + + +<!-- cold mass parameters --> + +<!-- conductor surrounding mass from atltecc_0012-v0 and atltecc_0013-v0 --> + +<var name="AECT_CMZwid_ColdMassZwidth" value=" 4490.7 "/> <!-- warm: 4510. --> +<var name="AECT_CMRwid_ColdMassRadwidth" value=" 3942.0 "/> <!-- warm: 3959. --> +<var name="AECT_CMPwid_ColdMassPhiwidth" value=" 270.8 "/> <!-- warm: 272. --> +<var name="AECT_CMHrad_ColdMassHolerad" value=" 250. "/> <!-- warm value kept, may be increased due to shrinking of surrounding material --> +<var name="AECT_CMEOff_ColdMassEdgeOff" value=" 612.4 "/> <!-- warm: 615. cold: 612.4 --> +<var name="AECT_CMHRp1_ColdMassHoleRpo1" value=" 1702.7 "/> <!-- warm: 1710. --> +<var name="AECT_CMHRp2_ColdMassHoleRpo2" value=" 995.7 "/> <!-- warm: 1000. --> + +<var name="AECT_CMIWba_ColdMassInWebbase" value=" 402.3 "/> <!-- from atltecc_0011-v0, warm: 202. for the half of it--> +<var name="AECT_CMIWed_ColdMassInWebedge" value=" 199.1 "/> <!-- from atltecc_0011-v0, warm: 200. --> +<!-- following value does not agree to atltecc_0011-v0, it's from consistency calculation, seems smaller in blueprints --> +<!-- if one wants to decrease the outer radius of the coil this value has to be reduced in the same way! --> +<var name="AECT_CMIWhi_ColdMassInWebhigh" value=" 90.1 "/> +<var name="AECT_CMgodi_ColdMassgloboutdi" value=" 10164.1 "/> <!-- from 10014054-07, warm: 10238. --> +<var name="AECT_CMgira_ColdMassglobinrad" value=" 1045. "/> <!-- from atltec__0001-v0, warm 1050. --> + +<!-- keystone box from atltecc_0008-v0 --> + +<var name="AECT_KSthic_KeyStonethickness" value=" 39.8 "/> <!-- warm: 40. --> +<var name="AECT_KSlthi_KeyStonelowthick" value=" 59.7 "/> <!-- warm: 60. --> +<var name="AECT_KSHrad_KeyStoneHolerad" value=" 570. "/> <!-- warm value kept, may be increased due to shrinking of surrounding material --> +<var name="AECT_KSHRpo_KeyStoneHoleRpos" value=" 2041.2 "/> <!-- warm: 2050. --> +<var name="AECT_KSZwid_KeyStoneZwidth" value=" 3265.9 "/> <!-- warm: 3280. --> +<var name="AECT_KStRwi_KeyStonetotRwidth" value=" 2837.8 "/> <!-- warm: 2850. --> +<var name="AECT_KSmRwi_KeyStonemidRwidth" value=" 507.8 "/> <!-- warm: 510. --> +<var name="AECT_KSlRwi_KeyStonelowRwidth" value=" 199.1 "/> <!-- warm: 200. --> +<var name="AECT_KStPwi_KeyStonetopPhiwid" value=" 2816.4 "/> <!-- warm: 2828.5 --> +<var name="AECT_KSlPwi_KeyStonelowPhiwid" value=" 428.1 "/> <!-- warm: 430. --> +<var name="AECT_KSlPof_KeyStonelowPhioff" value=" 214.1 "/> <!-- warm: 215. --> +<var name="AECT_KSBRwi_KeyStoneBoxRwidth" value=" 492.9 "/> <!-- warm: 495. --> +<var name="AECT_KSFPRo_KeyStoneFootPROff" value=" 291.7 "/> <!-- warm: 293. --> + +<box name="ECT_CM_ConductorFrame_basic" material="Aluminium" X_Y_Z="AECT_CMZwid_ColdMassZwidth ; AECT_CMRwid_ColdMassRadwidth; AECT_CMPwid_ColdMassPhiwidth" /> +<box name="ECT_CM_ConductorFrame_edge" material="Aluminium" X_Y_Z="AECT_CMEOff_ColdMassEdgeOff; AECT_CMEOff_ColdMassEdgeOff; 2.*AECT_CMPwid_ColdMassPhiwidth" /> +<tubs name="ECT_CM_ConductorFrame_Hole" material="Aluminium" Rio_Z="0.; AECT_CMHrad_ColdMassHolerad; 2.*AECT_CMPwid_ColdMassPhiwidth" nbPhi="20" /> + +<subtraction name="ECT_CM_ConductorFrame" > + <posXYZ volume="ECT_CM_ConductorFrame_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_CM_ConductorFrame_edge" X_Y_Z=" AECT_CMZwid_ColdMassZwidth/2.; AECT_CMRwid_ColdMassRadwidth/2.; 0." rot=" 0.; 0.; 45. "/> + <posXYZ volume="ECT_CM_ConductorFrame_edge" X_Y_Z=" -AECT_CMZwid_ColdMassZwidth/2.; AECT_CMRwid_ColdMassRadwidth/2.; 0." rot=" 0.; 0.; 45. "/> + <posXYZ volume="ECT_CM_ConductorFrame_edge" X_Y_Z=" AECT_CMZwid_ColdMassZwidth/2.; -AECT_CMRwid_ColdMassRadwidth/2.; 0." rot=" 0.; 0.; 45. "/> + <posXYZ volume="ECT_CM_ConductorFrame_edge" X_Y_Z=" -AECT_CMZwid_ColdMassZwidth/2.; -AECT_CMRwid_ColdMassRadwidth/2.; 0." rot=" 0.; 0.; 45. "/> + <posXYZ volume="ECT_CM_ConductorFrame_Hole" X_Y_Z=" 0.; AECT_CMRwid_ColdMassRadwidth/2. - AECT_CMHRp1_ColdMassHoleRpo1 ; 0." /> + <posXYZ volume="ECT_CM_ConductorFrame_Hole" X_Y_Z=" 0.; AECT_CMRwid_ColdMassRadwidth/2. - AECT_CMHRp1_ColdMassHoleRpo1 - AECT_CMHRp2_ColdMassHoleRpo2 ; 0." /> +</subtraction> + +<gvxysx name="ECT_CM_ConductorInnerWeb" material="Aluminium" dZ="AECT_KSZwid_KeyStoneZwidth"> + <gvxy_point X_Y="AECT_CMIWba_ColdMassInWebbase/2. - GENV_Eps; 0."/> + <gvxy_point X_Y="GENV_Si225*AECT_CMIWed_ColdMassInWebedge + AECT_CMIWba_ColdMassInWebbase/2.-GENV_Eps; GENV_Co225*AECT_CMIWed_ColdMassInWebedge"/> + <gvxy_point X_Y="AECT_CMPwid_ColdMassPhiwidth/2. + 2.*GENV_Eps; GENV_Co225*AECT_CMIWed_ColdMassInWebedge"/> + <gvxy_point X_Y="AECT_CMPwid_ColdMassPhiwidth/2. + 2.*GENV_Eps ; AECT_CMIWhi_ColdMassInWebhigh - GENV_Eps"/> +</gvxysx> + +<trd name="ECT_CM_KeyStoneTop" material="Aluminium" Xmp_Ymp_Z=" AECT_KStPwi_KeyStonetopPhiwid; AECT_KStPwi_KeyStonetopPhiwid - 2.*GENV_Ta225*AECT_KSthic_KeyStonethickness; AECT_KSZwid_KeyStoneZwidth; AECT_KSZwid_KeyStoneZwidth; AECT_KSthic_KeyStonethickness" /> + +<box name="ECT_CM_KeyStoneMid_basic" material="Aluminium" X_Y_Z="AECT_KStPwi_KeyStonetopPhiwid - GENV_Ta225 * AECT_KSthic_KeyStonethickness * 2. ; AECT_KStRwi_KeyStonetotRwidth - AECT_KSthic_KeyStonethickness - AECT_KSmRwi_KeyStonemidRwidth ; AECT_KSthic_KeyStonethickness" /> +<box name="ECT_CM_KeyStoneMid_CutBox" material="Aluminium" X_Y_Z="AECT_KStPwi_KeyStonetopPhiwid; AECT_KSZwid_KeyStoneZwidth ; 2.*AECT_KSthic_KeyStonethickness" /> +<tubs name="ECT_CM_KeyStoneMid_Hole" material="Aluminium" Rio_Z="0.; AECT_KSHrad_KeyStoneHolerad; 2.*AECT_KSthic_KeyStonethickness" nbPhi="20" /> + +<subtraction name="ECT_CM_KeyStoneMid" > + <posXYZ volume="ECT_CM_KeyStoneMid_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_CM_KeyStoneMid_Hole" X_Y_Z=" 0.; AECT_KSHRpo_KeyStoneHoleRpos - AECT_KSmRwi_KeyStonemidRwidth/2. - AECT_KStRwi_KeyStonetotRwidth/2.; 0." /> + <posXYZ volume="ECT_CM_KeyStoneMid_CutBox" X_Y_Z=" (AECT_KStPwi_KeyStonetopPhiwid * (1.+GENV_Co225) - AECT_KSZwid_KeyStoneZwidth*GENV_Si225 - GENV_Ta225 * AECT_KSthic_KeyStonethickness*2.)/2. + GENV_Eps; (-AECT_KSZwid_KeyStoneZwidth*GENV_Co225 - AECT_KStPwi_KeyStonetopPhiwid * GENV_Si225)/2. + (AECT_KStRwi_KeyStonetotRwidth - AECT_KSthic_KeyStonethickness - AECT_KSmRwi_KeyStonemidRwidth)/2. + GENV_Eps * GENV_Ta225 ; 0." rot=" 0.; 0.; -22.5 "/> + <posXYZ volume="ECT_CM_KeyStoneMid_CutBox" X_Y_Z="-(AECT_KStPwi_KeyStonetopPhiwid * (1.+GENV_Co225) - AECT_KSZwid_KeyStoneZwidth*GENV_Si225 - GENV_Ta225 * AECT_KSthic_KeyStonethickness*2.)/2. - GENV_Eps; (-AECT_KSZwid_KeyStoneZwidth*GENV_Co225 - AECT_KStPwi_KeyStonetopPhiwid * GENV_Si225)/2. + (AECT_KStRwi_KeyStonetotRwidth - AECT_KSthic_KeyStonethickness - AECT_KSmRwi_KeyStonemidRwidth)/2. + GENV_Eps * GENV_Ta225 ; 0." rot=" 0.; 0.; 22.5 "/> +</subtraction> + +<gvxysx name="ECT_CM_KeyStoneLow" material="Aluminium" dZ="AECT_KSthic_KeyStonethickness"> + <gvxy_point X_Y=" AECT_KStPwi_KeyStonetopPhiwid/2. - (AECT_KStRwi_KeyStonetotRwidth - AECT_KSmRwi_KeyStonemidRwidth) * GENV_Ta225 ; AECT_KSmRwi_KeyStonemidRwidth"/> + <gvxy_point X_Y=" AECT_KSlPof_KeyStonelowPhioff ; AECT_KSlRwi_KeyStonelowRwidth"/> + <gvxy_point X_Y=" AECT_KSlPof_KeyStonelowPhioff - AECT_KSlthi_KeyStonelowthick; AECT_KSlRwi_KeyStonelowRwidth"/> + <gvxy_point X_Y=" AECT_KSlPof_KeyStonelowPhioff - AECT_KSlthi_KeyStonelowthick; AECT_KSlthi_KeyStonelowthick"/> +</gvxysx> + +<box name="ECT_CM_KeyStoneInnerWeb_Box1" material="Aluminium" X_Y_Z=" AECT_KSlthi_KeyStonelowthick - GENV_Eps/2.; AECT_KSlRwi_KeyStonelowRwidth - AECT_KSlthi_KeyStonelowthick; AECT_KSZwid_KeyStoneZwidth" /> +<box name="ECT_CM_KeyStoneInnerWeb_Box2" material="Aluminium" X_Y_Z=" AECT_KSlPwi_KeyStonelowPhiwid - GENV_Eps/2.; AECT_KSlthi_KeyStonelowthick - GENV_Eps; AECT_KSZwid_KeyStoneZwidth" /> +<box name="ECT_CM_KeyStoneFootPlate" material="Aluminium" X_Y_Z=" AECT_KSthic_KeyStonethickness; AECT_KSBRwi_KeyStoneBoxRwidth; AECT_KSZwid_KeyStoneZwidth" /> + +<composition name="ECT_CM_KeyStone" > + <posXYZ volume="ECT_CM_KeyStoneTop" X_Y_Z=" 0.; AECT_KStRwi_KeyStonetotRwidth - AECT_KSthic_KeyStonethickness/2. + 1.5*GENV_Eps*GENV_Co225; -1.5*GENV_Eps*GENV_Si225" rot=" 90.; 0.; 0. "/> + <posXYZ volume="ECT_CM_KeyStoneMid" X_Y_Z=" 0.; AECT_KStRwi_KeyStonetotRwidth - (AECT_KStRwi_KeyStonetotRwidth + AECT_KSthic_KeyStonethickness - AECT_KSmRwi_KeyStonemidRwidth)/2. + GENV_Eps*GENV_Co225; AECT_KSZwid_KeyStoneZwidth/2. - AECT_KSthic_KeyStonethickness/2.-GENV_Eps*GENV_Si225" /> + <posXYZ volume="ECT_CM_KeyStoneMid" X_Y_Z=" 0.; AECT_KStRwi_KeyStonetotRwidth - (AECT_KStRwi_KeyStonetotRwidth + AECT_KSthic_KeyStonethickness - AECT_KSmRwi_KeyStonemidRwidth)/2. + GENV_Eps*GENV_Co225; -AECT_KSZwid_KeyStoneZwidth/2. + AECT_KSthic_KeyStonethickness/2.-GENV_Eps*GENV_Si225" /> + <posXYZ volume="ECT_CM_KeyStoneLow" X_Y_Z=" 0.; 0.5*GENV_Eps*GENV_Co225; AECT_KSZwid_KeyStoneZwidth/2. - AECT_KSthic_KeyStonethickness/2.-0.5*GENV_Eps*GENV_Si225" /> + <posXYZ volume="ECT_CM_KeyStoneLow" X_Y_Z=" 0.; 0.5*GENV_Eps*GENV_Co225; -AECT_KSZwid_KeyStoneZwidth/2. + AECT_KSthic_KeyStonethickness/2.-0.5*GENV_Eps*GENV_Si225" /> + <posXYZ volume="ECT_CM_KeyStoneInnerWeb_Box1" X_Y_Z=" (AECT_KSlPwi_KeyStonelowPhiwid - AECT_KSlthi_KeyStonelowthick)/2.; (AECT_KSlthi_KeyStonelowthick + AECT_KSlRwi_KeyStonelowRwidth)/2.; 0." /> + <posXYZ volume="ECT_CM_KeyStoneInnerWeb_Box1" X_Y_Z="-(AECT_KSlPwi_KeyStonelowPhiwid - AECT_KSlthi_KeyStonelowthick)/2.; (AECT_KSlthi_KeyStonelowthick + AECT_KSlRwi_KeyStonelowRwidth)/2.; 0." /> + <posXYZ volume="ECT_CM_KeyStoneInnerWeb_Box2" X_Y_Z=" 0.; AECT_KSlthi_KeyStonelowthick/2.; 0" /> + <posXYZ volume="ECT_CM_KeyStoneFootPlate" X_Y_Z=" (AECT_KSthic_KeyStonethickness*(GENV_Co225 - 2.*GENV_Si225) + AECT_KSBRwi_KeyStoneBoxRwidth*GENV_Si225 + AECT_KStPwi_KeyStonetopPhiwid)/2. - GENV_Si225*AECT_KSFPRo_KeyStoneFootPROff; (AECT_KSthic_KeyStonethickness*(-GENV_Si225 - 2) + AECT_KSBRwi_KeyStoneBoxRwidth*GENV_Co225)/2. + AECT_KStRwi_KeyStonetotRwidth - GENV_Co225*AECT_KSFPRo_KeyStoneFootPROff; 0" rot=" 0.; 0.; -22.5 "/> + <posXYZ volume="ECT_CM_KeyStoneFootPlate" X_Y_Z="-(AECT_KSthic_KeyStonethickness*(GENV_Co225 - 2.*GENV_Si225) + AECT_KSBRwi_KeyStoneBoxRwidth*GENV_Si225 + AECT_KStPwi_KeyStonetopPhiwid)/2. + GENV_Si225*AECT_KSFPRo_KeyStoneFootPROff; (AECT_KSthic_KeyStonethickness*(-GENV_Si225 - 2) + AECT_KSBRwi_KeyStoneBoxRwidth*GENV_Co225)/2. + AECT_KStRwi_KeyStonetotRwidth - GENV_Co225*AECT_KSFPRo_KeyStoneFootPROff; 0" rot=" 0.; 0.; 22.5 "/> +</composition> + +<var name="AECT_KSRahi_KeyStoneradihight" value="2.*GENV_Si225*(AECT_KSBRwi_KeyStoneBoxRwidth-AECT_KSFPRo_KeyStoneFootPROff-AECT_KSthic_KeyStonethickness)+2.*GENV_Co225*AECT_KSthic_KeyStonethickness+AECT_KStPwi_KeyStonetopPhiwid" /> +<var name="AECT_KSRpwi_KeyStonephiwidth" value="AECT_KStRwi_KeyStonetotRwidth + GENV_Co225*(AECT_KSBRwi_KeyStoneBoxRwidth - AECT_KSFPRo_KeyStoneFootPROff) - AECT_KSthic_KeyStonethickness "/> + +<composition name="ECT_ColdMass" > + <posXYZ volume="ECT_CM_ConductorFrame" X_Y_Z=" 0.; AECT_CMgodi_ColdMassgloboutdi/2. - AECT_CMRwid_ColdMassRadwidth/2.; 0." rot=" 0.; 90.; 0."/> + <posXYZ volume="ECT_CM_ConductorInnerWeb" X_Y_Z=" 0.; AECT_CMgira_ColdMassglobinrad; 0." rot=" 0.; 0.; 0."/> + <posXYZ volume="ECT_CM_KeyStone" X_Y_Z=" -AECT_CMgira_ColdMassglobinrad*GENV_Si225; AECT_CMgira_ColdMassglobinrad*GENV_Co225; 0." rot=" 0.; 0.; 22.5"/> +</composition> + +<!-- thermal radiation shielding - Coil Cover - atlteyr_0288-v0 and atlteyr_0289-v0 --> +<var name="AECT_CCZwid_CoilCoverZwidth" value=" 348. "/> +<var name="AECT_CCPwid_CoilCoverPhiwidth" value=" 700. "/> +<var name="AECT_CCfRwi_CoilCoverfullRwid" value=" 3601. "/> +<var name="AECT_CCthic_CoilCoverthicknes" value=" 10. "/> +<var name="AECT_CCRaof_CoilCoverRadoff" value=" 52. "/> + +<trd name="ECT_CC_CoilCoverSide" material="Aluminium" Xmp_Ymp_Z="AECT_CCfRwi_CoilCoverfullRwid-AECT_CCRaof_CoilCoverRadoff+2.*(AECT_CCthic_CoilCoverthicknes/GENV_Si45 + AECT_CCthic_CoilCoverthicknes); AECT_CCfRwi_CoilCoverfullRwid-AECT_CCRaof_CoilCoverRadoff - 2.*(AECT_CCZwid_CoilCoverZwidth-AECT_CCthic_CoilCoverthicknes/GENV_Si45); AECT_CCthic_CoilCoverthicknes; AECT_CCthic_CoilCoverthicknes; AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes"/> + +<gvxysx name="ECT_CC_CoilCoverTop" material="Aluminium" dZ="AECT_CCPwid_CoilCoverPhiwidth"> + <gvxy_point X_Y=" (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes/GENV_Si45 ; AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes "/> + <gvxy_point X_Y=" (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. + AECT_CCthic_CoilCoverthicknes/GENV_Si45 + AECT_CCthic_CoilCoverthicknes; 0"/> + <gvxy_point X_Y=" (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. + AECT_CCthic_CoilCoverthicknes ; 0"/> + <gvxy_point X_Y=" (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCZwid_CoilCoverZwidth - AECT_CCthic_CoilCoverthicknes*GENV_Ta225 + AECT_CCthic_CoilCoverthicknes/GENV_Si45; AECT_CCZwid_CoilCoverZwidth - AECT_CCthic_CoilCoverthicknes + AECT_CCthic_CoilCoverthicknes"/> +</gvxysx> + +<!-- thermal radiation shielding - EndPlate - atlteyr_0068-v0, atlteyr_0077-v0, atlteyr_0078-v0 and atlteyr_0110-v0 --> +<var name="AECT_EPthic_EndPlatethickness" value=" 20. "/> +<var name="AECT_EPHoPo_EndPlateHolepos" value=" 1720. "/> +<var name="AECT_EPHoDi_EndPlateHolediame" value=" 830. "/> +<var name="AECT_EPfuhi_EndPlatefullhight" value=" 3467. "/> +<var name="AECT_EPmihi_EndPlateminihight" value=" 2740. "/> +<var name="AECT_EPfuwi_EndPlatefullwidth" value=" 1959. "/> +<var name="AECT_EPmiwi_EndPlatemidwidth" value=" 1200.5 "/> +<var name="AECT_EPhiwi_EndPlatehighwidth" value=" 775. "/> +<var name="AECT_EPlowi_EndPlatelowwidth" value=" 182. "/> +<var name="AECT_EPEfuw_EndPlateExtfullwi" value=" 530. "/> +<var name="AECT_EPEmiw_EndPlateExtminiwi" value=" 275. "/> +<var name="AECT_EPEhig_EndPlateExthight" value=" 240. "/> +<var name="AECT_EPBBhi_EndPlateBackBoxwi" value=" 1230. "/> +<var name="AECT_EPBBwi_EndPlateBackBoxhi" value=" 145. "/> +<var name="AECT_EPFBhi_EndPlateFrontBoxw" value=" 410. "/> +<var name="AECT_EPFBwi_EndPlateFrontBoxh" value=" 125. "/> + +<!-- derived variable to get second last point via cot(22.5)*(x-a)= -tan(22.5)*(x-b) + c --> +<var name="AECT_EPAuVX_EndPlateAuxVarX" value="GENV_Co225*GENV_Si225*(AECT_EPfuhi_EndPlatefullhight-GENV_Si225*AECT_EPEmiw_EndPlateExtminiwi-(AECT_EPEhig_EndPlateExthight)*GENV_Co225)+GENV_Co225*GENV_Co225* AECT_EPlowi_EndPlatelowwidth+GENV_Si225*GENV_Si225*(AECT_EPfuwi_EndPlatefullwidth-(AECT_EPEhig_EndPlateExthight)*GENV_Si225) "/> + +<gvxysx name="ECT_EP_EndPlate_basic" material="Aluminium" dZ="AECT_EPthic_EndPlatethickness"> + <gvxy_point X_Y=" AECT_EPhiwi_EndPlatehighwidth; AECT_EPmihi_EndPlateminihight "/> + <gvxy_point X_Y=" AECT_EPmiwi_EndPlatemidwidth; AECT_EPmihi_EndPlateminihight + (AECT_EPmiwi_EndPlatemidwidth - AECT_EPhiwi_EndPlatehighwidth)*GENV_Ta225 "/> + <gvxy_point X_Y=" AECT_EPfuwi_EndPlatefullwidth - AECT_EPEfuw_EndPlateExtfullwi/GENV_Co225; AECT_EPmihi_EndPlateminihight + (AECT_EPmiwi_EndPlatemidwidth - AECT_EPhiwi_EndPlatehighwidth)*GENV_Ta225 + (AECT_EPfuwi_EndPlatefullwidth - AECT_EPmiwi_EndPlatemidwidth - AECT_EPEfuw_EndPlateExtfullwi/GENV_Co225)/GENV_Ta225 "/> + <gvxy_point X_Y=" AECT_EPfuwi_EndPlatefullwidth - AECT_EPEmiw_EndPlateExtminiwi*GENV_Co225; AECT_EPfuhi_EndPlatefullhight "/> + <gvxy_point X_Y=" AECT_EPfuwi_EndPlatefullwidth; AECT_EPfuhi_EndPlatefullhight - AECT_EPEmiw_EndPlateExtminiwi*GENV_Si225"/> + <gvxy_point X_Y=" AECT_EPfuwi_EndPlatefullwidth - (AECT_EPEhig_EndPlateExthight )*GENV_Si225; AECT_EPfuhi_EndPlatefullhight - AECT_EPEmiw_EndPlateExtminiwi*GENV_Si225 - (AECT_EPEhig_EndPlateExthight )*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EPAuVX_EndPlateAuxVarX; (AECT_EPAuVX_EndPlateAuxVarX-AECT_EPlowi_EndPlatelowwidth)/GENV_Ta225 "/> + <gvxy_point X_Y=" AECT_EPlowi_EndPlatelowwidth; 0. "/> +</gvxysx> + +<box name="ECT_EP_EndPlate_BackBox" material="Aluminium" X_Y_Z="AECT_EPBBhi_EndPlateBackBoxwi; 2.*AECT_EPBBwi_EndPlateBackBoxhi; 2.*AECT_EPthic_EndPlatethickness" /> +<box name="ECT_EP_EndPlate_FrontBox" material="Aluminium" X_Y_Z="AECT_EPFBhi_EndPlateFrontBoxw; 2.*AECT_EPFBwi_EndPlateFrontBoxh; 2.*AECT_EPthic_EndPlatethickness" /> +<tubs name="ECT_EP_EndPlate_Hole" material="Aluminium" Rio_Z="0.; AECT_EPHoDi_EndPlateHolediame/2.; 2.*AECT_EPthic_EndPlatethickness" nbPhi="20" /> + +<subtraction name="ECT_EP_EndPlate_front" > + <posXYZ volume="ECT_EP_EndPlate_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EP_EndPlate_Hole" X_Y_Z=" 0.; AECT_EPHoPo_EndPlateHolepos; 0." /> +</subtraction> + +<subtraction name="ECT_EP_EndPlate_back" > + <posXYZ volume="ECT_EP_EndPlate_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EP_EndPlate_Hole" X_Y_Z=" 0.; AECT_EPHoPo_EndPlateHolepos; 0." /> + <posXYZ volume="ECT_EP_EndPlate_BackBox" X_Y_Z=" 0.; AECT_EPmihi_EndPlateminihight; 0." /> +</subtraction> + +<subtraction name="ECT_EP_EndPlate_special" > + <posXYZ volume="ECT_EP_EndPlate_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EP_EndPlate_Hole" X_Y_Z=" 0.; AECT_EPHoPo_EndPlateHolepos; 0." /> + <posXYZ volume="ECT_EP_EndPlate_FrontBox" X_Y_Z=" 0.; AECT_EPmihi_EndPlateminihight; 0." /> +</subtraction> + +<!-- thermal radiation shielding - Shell - atlteyr_0280-v0 and atlteyr_0070-v0 --> +<var name="AECT_OSCCZd_ShellCCZdimension" value=" 3940. "/> +<var name="AECT_OSCCRw_ShellCCRadwidth" value=" 400. "/> +<var name="AECT_OSCCmw_ShellCCminiwidth" value=" 372. "/> +<var name="AECT_OSCCmw_ShellCCedgelength" value=" 451. "/> +<var name="AECT_OSCCth_ShellCCthickness" value=" 10. "/> + +<var name="AECT_OSCCmw_ShellCClongwidth" value=" 423. "/> +<var name="AECT_OSCCmw_ShellCCshortwidth" value=" 107. "/> +<var name="AECT_OSCCtc_ShellCCthickconn" value=" 20. "/> + +<var name="AECT_OSCCOv_ShellCCoverlap" value=" 60. "/> + +<var name="AECT_OSJPiw_ShellJPinnerwidth" value=" 1912. "/> +<var name="AECT_OSJPew_ShellJPedgewidth" value=" 238. "/> +<var name="AECT_OSJPtc_ShellJPZlength" value=" 2815. "/> +<var name="AECT_OSAFBt_ShellAFBthickness" value=" 15. "/> +<var name="AECT_OSAFBh_ShellAFBhight" value=" 215. "/> +<var name="AECT_OSFSBh_ShellFSBhight" value=" 190. "/> + +<var name="AECT_STaidi_StayTubeAlignindi" value=" 910. "/> +<var name="AECT_STaodi_StayTubeAlignoutd" value=" 930. "/> +<var name="AECT_STaflt_StayTubeAlignFlth" value=" 20. "/> + +<gvxysx name="ECT_TS_ShellCoilCover" material="Aluminium" dZ="AECT_OSCCZd_ShellCCZdimension"> + <gvxy_point X_Y=" - AECT_OSCCmw_ShellCCminiwidth/2. ; AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth + AECT_OSCCRw_ShellCCRadwidth - AECT_OSCCOv_ShellCCoverlap - AECT_OSCCth_ShellCCthickness"/> + <gvxy_point X_Y=" - (AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth + AECT_OSCCRw_ShellCCRadwidth - AECT_OSCCOv_ShellCCoverlap - AECT_OSCCmw_ShellCCedgelength*GENV_Si45"/> + <gvxy_point X_Y=" - (AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth - AECT_OSCCOv_ShellCCoverlap"/> + <gvxy_point X_Y=" - (AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth - AECT_OSCCOv_ShellCCoverlap"/> + <gvxy_point X_Y=" - (AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 - AECT_OSCCtc_ShellCCthickconn*GENV_Ta225 "/> + <gvxy_point X_Y=" AECT_OSCCtc_ShellCCthickconn*(GENV_Si45-1.) - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.) ; 0 "/> + <gvxy_point X_Y=" - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.) ; AECT_OSCCtc_ShellCCthickconn*GENV_Si45 "/> + <gvxy_point X_Y=" - (AECT_OSCCtc_ShellCCthickconn + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45"/> + <gvxy_point X_Y=" - (AECT_OSCCtc_ShellCCthickconn + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth"/> + <gvxy_point X_Y=" - (AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth"/> + <gvxy_point X_Y=" - (AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.); AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth + AECT_OSCCRw_ShellCCRadwidth - AECT_OSCCth_ShellCCthickness*(GENV_Ta225-1)- AECT_OSCCmw_ShellCCedgelength*GENV_Si45 - AECT_OSCCOv_ShellCCoverlap"/> + <gvxy_point X_Y=" - AECT_OSCCth_ShellCCthickness*GENV_Ta225 - AECT_OSCCmw_ShellCCminiwidth/2.; AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCtc_ShellCCthickconn*GENV_Si45 + AECT_OSCCmw_ShellCClongwidth + AECT_OSCCRw_ShellCCRadwidth - AECT_OSCCOv_ShellCCoverlap"/> +</gvxysx> + +<gvxysx name="ECT_TS_JointPlate" material="Aluminium" dZ="AECT_OSJPtc_ShellJPZlength"> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSCCtc_ShellCCthickconn*tan(11.25*GENV_PiS180) ; -(AECT_OSCCtc_ShellCCthickconn+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225+AECT_OSCCtc_ShellCCthickconn*GENV_Si225 ; AECT_OSCCtc_ShellCCthickconn*(1-GENV_Co225)+AECT_OSJPew_ShellJPedgewidth*GENV_Si225-(AECT_OSCCtc_ShellCCthickconn+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2. "/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225 ; AECT_OSCCtc_ShellCCthickconn+AECT_OSJPew_ShellJPedgewidth*GENV_Si225-(AECT_OSCCtc_ShellCCthickconn+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2. "/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.; AECT_OSCCtc_ShellCCthickconn-(AECT_OSCCtc_ShellCCthickconn+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> +</gvxysx> + +<gvxysx name="ECT_TS_AxialForceBox" material="Aluminium" dZ="AECT_OSCCZd_ShellCCZdimension-AECT_OSJPtc_ShellJPZlength"> + <gvxy_point X_Y=" AECT_EPBBhi_EndPlateBackBoxwi/2.+AECT_OSAFBt_ShellAFBthickness ; -(AECT_OSAFBh_ShellAFBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2. "/> + <gvxy_point X_Y=" AECT_EPBBhi_EndPlateBackBoxwi/2.+AECT_OSAFBt_ShellAFBthickness ; AECT_OSAFBh_ShellAFBhight/2.-AECT_OSAFBt_ShellAFBthickness-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSAFBt_ShellAFBthickness*tan(11.25*GENV_PiS180) ; AECT_OSAFBh_ShellAFBhight/2.-AECT_OSAFBt_ShellAFBthickness-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225+AECT_OSAFBt_ShellAFBthickness*GENV_Si225 ; AECT_OSAFBh_ShellAFBhight/2.-AECT_OSAFBt_ShellAFBthickness*GENV_Co225+AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225 ; (AECT_OSAFBh_ShellAFBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.; AECT_OSAFBh_ShellAFBhight/2.-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_EPBBhi_EndPlateBackBoxwi/2.; AECT_OSAFBh_ShellAFBhight/2.-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_EPBBhi_EndPlateBackBoxwi/2.; AECT_OSAFBt_ShellAFBthickness-(AECT_OSAFBh_ShellAFBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> +</gvxysx> + +<gvxysx name="ECT_TS_FrontSpecialBox" material="Aluminium" dZ="AECT_OSJPtc_ShellJPZlength"> + <gvxy_point X_Y=" AECT_EPFBhi_EndPlateFrontBoxw/2.+AECT_OSCCtc_ShellCCthickconn ; -(AECT_OSFSBh_ShellFSBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2. "/> + <gvxy_point X_Y=" AECT_EPFBhi_EndPlateFrontBoxw/2.+AECT_OSCCtc_ShellCCthickconn ; AECT_OSFSBh_ShellFSBhight/2.-AECT_OSCCtc_ShellCCthickconn-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSCCtc_ShellCCthickconn*tan(11.25*GENV_PiS180) ; AECT_OSFSBh_ShellFSBhight/2.-AECT_OSCCtc_ShellCCthickconn-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225+AECT_OSCCtc_ShellCCthickconn*GENV_Si225 ; AECT_OSFSBh_ShellFSBhight/2.-AECT_OSCCtc_ShellCCthickconn*GENV_Co225+AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.+AECT_OSJPew_ShellJPedgewidth*GENV_Co225 ; (AECT_OSFSBh_ShellFSBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> + <gvxy_point X_Y=" AECT_OSJPiw_ShellJPinnerwidth/2.; AECT_OSFSBh_ShellFSBhight/2.-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_EPFBhi_EndPlateFrontBoxw/2.; AECT_OSFSBh_ShellFSBhight/2.-AECT_OSJPew_ShellJPedgewidth*GENV_Si225/2."/> + <gvxy_point X_Y=" AECT_EPFBhi_EndPlateFrontBoxw/2.; AECT_OSCCtc_ShellCCthickconn-(AECT_OSFSBh_ShellFSBhight+AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2."/> +</gvxysx> + +<tubs name="ECT_ST_StayTube_Tube" material="Aluminium" Rio_Z="AECT_STaidi_StayTubeAlignindi/2.; AECT_STaodi_StayTubeAlignoutd/2.; AECT_OSCCZd_ShellCCZdimension" nbPhi="20" /> +<tubs name="ECT_ST_StayTube_Flange" material="Aluminium" Rio_Z="AECT_EPHoDi_EndPlateHolediame/2.; AECT_STaodi_StayTubeAlignoutd/2.; AECT_STaflt_StayTubeAlignFlth" nbPhi="20" /> + +<var name="AECT_SCCXwi_ShellCCfullXwidth" value="(AECT_OSJPiw_ShellJPinnerwidth/2. + AECT_OSJPew_ShellJPedgewidth*GENV_Co225 + AECT_OSCCtc_ShellCCthickconn*GENV_Si225)" /> +<var name="AECT_SCCYwi_ShellCCfullYwidth" value="(AECT_OSCCtc_ShellCCthickconn + AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2." /> +<var name="AECT_SAFBXw_ShellAFBfullXwidt" value="(AECT_OSJPiw_ShellJPinnerwidth/2. + AECT_OSJPew_ShellJPedgewidth*GENV_Co225 + AECT_OSAFBt_ShellAFBthickness*GENV_Si225)" /> +<var name="AECT_SAFBYw_ShellAFBfullYwidt" value="(AECT_OSAFBh_ShellAFBhight + AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2." /> +<var name="AECT_SFSBYw_ShellFSBfullYwidt" value="(AECT_OSFSBh_ShellFSBhight + AECT_OSJPew_ShellJPedgewidth*GENV_Si225)/2." /> + +<!-- Radius for ThermalRadiationShield Endplate (TRSEPr) and Shell (TRSShr), last term is responsible for the gap in between -> needed safety factor -> see also the photos --> +<var name="AECT_TRSEPr_EndplateRadPos" value="AECT_EPfuwi_EndPlatefullwidth/GENV_Si225 - (AECT_EPfuhi_EndPlatefullhight - AECT_EPEmiw_EndPlateExtminiwi*GENV_Si225)/GENV_Co225 - AECT_EPlowi_EndPlatelowwidth*GENV_Si225 - (AECT_EPfuwi_EndPlatefullwidth - AECT_EPAuVX_EndPlateAuxVarX - (AECT_EPEhig_EndPlateExthight)*GENV_Si225)*GENV_Ta225/GENV_Co225 + AECT_EPthic_EndPlatethickness*1.5" /> +<var name="AECT_CCSPYp_CoilCoverSideYpos" value="AECT_EPfuwi_EndPlatefullwidth/GENV_Si225+AECT_EPthic_EndPlatethickness*1.5-AECT_EPEhig_EndPlateExthight-(AECT_CCfRwi_CoilCoverfullRwid-AECT_CCRaof_CoilCoverRadoff)/2.-AECT_CCthic_CoilCoverthicknes/GENV_Si45-AECT_CCthic_CoilCoverthicknes" /> +<var name="AECT_TRSShr_ShellRadPos" value="(-(AECT_OSCCtc_ShellCCthickconn*(GENV_Si45-1.) - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.)))/GENV_Ta225 + (AECT_OSJPiw_ShellJPinnerwidth/2.) * (GENV_Si225+GENV_Co225/GENV_Ta225) + ((AECT_OSJPew_ShellJPedgewidth-AECT_OSCCOv_ShellCCoverlap)*GENV_Co45 )*(1+1/GENV_Ta225)" /> +<var name="AECT_SCCXpo_ShellCCXpos" value=" - AECT_SCCXwi_ShellCCfullXwidth*GENV_Co225 + AECT_SCCYwi_ShellCCfullYwidth*GENV_Si225 + AECT_OSCCtc_ShellCCthickconn*GENV_Si225*GENV_Co225 + (AECT_OSCCtc_ShellCCthickconn*(GENV_Si45-1.) - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.))+AECT_OSCCOv_ShellCCoverlap*GENV_Si45" /> +<var name="AECT_SFSBXp_ShellFSBXpos" value=" - AECT_SCCXwi_ShellCCfullXwidth*GENV_Co225 + AECT_SFSBYw_ShellFSBfullYwidt*GENV_Si225 + AECT_OSCCtc_ShellCCthickconn*GENV_Si225*GENV_Co225 + (AECT_OSCCtc_ShellCCthickconn*(GENV_Si45-1.) - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.))+AECT_OSCCOv_ShellCCoverlap*GENV_Si45" /> +<var name="AECT_SAFBXp_ShellAFBXpos" value=" - AECT_SAFBXw_ShellAFBfullXwidt*GENV_Co225 + AECT_SAFBYw_ShellAFBfullYwidt*GENV_Si225 + AECT_OSAFBt_ShellAFBthickness*GENV_Si225*GENV_Co225 + (AECT_OSCCtc_ShellCCthickconn*(GENV_Si45-1.) - (AECT_OSCCmw_ShellCCshortwidth*GENV_Si45 + AECT_OSCCth_ShellCCthickness + AECT_OSCCmw_ShellCCedgelength*GENV_Si45 + AECT_OSCCmw_ShellCCminiwidth/2.))+AECT_OSCCOv_ShellCCoverlap*GENV_Si45" /> + +<composition name="ECT_TS_ThermalShield_default_tmp" > + <posXYZ volume="ECT_EP_EndPlate_front" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 ; AECT_TRSEPr_EndplateRadPos; AECT_OSCCZd_ShellCCZdimension/2. + 1.75*AECT_EPthic_EndPlatethickness" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_EP_EndPlate_back" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 ; AECT_TRSEPr_EndplateRadPos; -AECT_OSCCZd_ShellCCZdimension/2. - 1.75*AECT_EPthic_EndPlatethickness" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_CC_CoilCoverTop" X_Y_Z=" 0. ; AECT_EPfuwi_EndPlatefullwidth/GENV_Si225 + AECT_EPthic_EndPlatethickness*1.5 - AECT_EPEhig_EndPlateExthight - (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCthic_CoilCoverthicknes/GENV_Si45 - AECT_CCthic_CoilCoverthicknes ; AECT_OSCCZd_ShellCCZdimension/2. + 2.25*AECT_EPthic_EndPlatethickness + GENV_Eps" rot=" 90.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverTop" X_Y_Z=" 0. ; AECT_EPfuwi_EndPlatefullwidth/GENV_Si225 + AECT_EPthic_EndPlatethickness*1.5 - AECT_EPEhig_EndPlateExthight - (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCthic_CoilCoverthicknes/GENV_Si45 - AECT_CCthic_CoilCoverthicknes ; -AECT_OSCCZd_ShellCCZdimension/2. - 2.25*AECT_EPthic_EndPlatethickness - GENV_Eps" rot=" -90.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z=" (AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. + GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; AECT_OSCCZd_ShellCCZdimension/2.+2.25*AECT_EPthic_EndPlatethickness + GENV_Eps + (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot=" 0.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z=" (AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. + GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; -AECT_OSCCZd_ShellCCZdimension/2.-2.25*AECT_EPthic_EndPlatethickness - GENV_Eps - (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot="180.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z="-(AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. - GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; AECT_OSCCZd_ShellCCZdimension/2.+2.25*AECT_EPthic_EndPlatethickness + GENV_Eps + (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot=" 0.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z="-(AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. - GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; -AECT_OSCCZd_ShellCCZdimension/2.-2.25*AECT_EPthic_EndPlatethickness - GENV_Eps - (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot="180.; 0.; 90." /> + <posXYZ volume="ECT_TS_ShellCoilCover" X_Y_Z=" 0.; AECT_TRSShr_ShellRadPos + GENV_Eps; 0." rot=" 0.; 0.; 0." /> + <posXYZ volume="ECT_TS_JointPlate" X_Y_Z=" AECT_SCCXpo_ShellCCXpos; -AECT_SCCXwi_ShellCCfullXwidth*GENV_Si225 - AECT_SCCYwi_ShellCCfullYwidth*GENV_Co225 + AECT_OSCCtc_ShellCCthickconn*GENV_Si225*GENV_Si225+ AECT_TRSShr_ShellRadPos+AECT_OSCCOv_ShellCCoverlap*GENV_Si45 ; (AECT_OSCCZd_ShellCCZdimension-AECT_OSJPtc_ShellJPZlength)/2." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_TS_AxialForceBox" X_Y_Z=" AECT_SAFBXp_ShellAFBXpos + GENV_Eps; -AECT_SAFBXw_ShellAFBfullXwidt*GENV_Si225 - AECT_SAFBYw_ShellAFBfullYwidt*GENV_Co225 + AECT_OSAFBt_ShellAFBthickness*GENV_Si225*GENV_Si225+ AECT_TRSShr_ShellRadPos+AECT_OSCCOv_ShellCCoverlap*GENV_Si45 ; -(AECT_OSCCZd_ShellCCZdimension-(AECT_OSCCZd_ShellCCZdimension-AECT_OSJPtc_ShellJPZlength))/2." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Tube" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225; 0." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Flange" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225; AECT_OSCCZd_ShellCCZdimension/2.+AECT_STaflt_StayTubeAlignFlth/2. + GENV_Eps" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Flange" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225;-AECT_OSCCZd_ShellCCZdimension/2.-AECT_STaflt_StayTubeAlignFlth/2. - GENV_Eps" rot=" 0.; 0.; 22.5" /> +</composition> + +<composition name="ECT_TS_ThermalShield_default" > + <posXYZ volume="ECT_TS_ThermalShield_default_tmp" rot=" 0.; 0.; -90." /> +</composition> + +<composition name="ECT_TS_ThermalShield_special" > + <posXYZ volume="ECT_EP_EndPlate_special" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 ; AECT_TRSEPr_EndplateRadPos; AECT_OSCCZd_ShellCCZdimension/2. + 1.75*AECT_EPthic_EndPlatethickness" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_EP_EndPlate_back" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 ; AECT_TRSEPr_EndplateRadPos; -AECT_OSCCZd_ShellCCZdimension/2. - 1.75*AECT_EPthic_EndPlatethickness" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_CC_CoilCoverTop" X_Y_Z=" 0. ; AECT_EPfuwi_EndPlatefullwidth/GENV_Si225 + AECT_EPthic_EndPlatethickness*1.5 - AECT_EPEhig_EndPlateExthight - (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCthic_CoilCoverthicknes/GENV_Si45 - AECT_CCthic_CoilCoverthicknes ; AECT_OSCCZd_ShellCCZdimension/2. + 2.25*AECT_EPthic_EndPlatethickness + GENV_Eps" rot=" 90.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverTop" X_Y_Z=" 0. ; AECT_EPfuwi_EndPlatefullwidth/GENV_Si225 + AECT_EPthic_EndPlatethickness*1.5 - AECT_EPEhig_EndPlateExthight - (AECT_CCfRwi_CoilCoverfullRwid - AECT_CCRaof_CoilCoverRadoff)/2. - AECT_CCthic_CoilCoverthicknes/GENV_Si45 - AECT_CCthic_CoilCoverthicknes ; -AECT_OSCCZd_ShellCCZdimension/2. - 2.25*AECT_EPthic_EndPlatethickness - GENV_Eps" rot=" -90.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z=" (AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. + GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; AECT_OSCCZd_ShellCCZdimension/2.+2.25*AECT_EPthic_EndPlatethickness + GENV_Eps + (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot=" 0.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z=" (AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. + GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; -AECT_OSCCZd_ShellCCZdimension/2.-2.25*AECT_EPthic_EndPlatethickness - GENV_Eps - (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot="180.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z="-(AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. - GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; AECT_OSCCZd_ShellCCZdimension/2.+2.25*AECT_EPthic_EndPlatethickness + GENV_Eps + (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot=" 0.; 0.; 90." /> + <posXYZ volume="ECT_CC_CoilCoverSide" X_Y_Z="-(AECT_CCPwid_CoilCoverPhiwidth + AECT_CCthic_CoilCoverthicknes)/2. - GENV_Eps; AECT_CCSPYp_CoilCoverSideYpos; -AECT_OSCCZd_ShellCCZdimension/2.-2.25*AECT_EPthic_EndPlatethickness - GENV_Eps - (AECT_CCZwid_CoilCoverZwidth + AECT_CCthic_CoilCoverthicknes)/2." rot="180.; 0.; 90." /> + <posXYZ volume="ECT_TS_ShellCoilCover" X_Y_Z=" 0.; AECT_TRSShr_ShellRadPos + GENV_Eps; 0." rot=" 0.; 0.; 0." /> + <posXYZ volume="ECT_TS_FrontSpecialBox" X_Y_Z=" AECT_SFSBXp_ShellFSBXpos; -AECT_SCCXwi_ShellCCfullXwidth*GENV_Si225 - AECT_SFSBYw_ShellFSBfullYwidt*GENV_Co225 + AECT_OSCCtc_ShellCCthickconn*GENV_Si225*GENV_Si225+ AECT_TRSShr_ShellRadPos+AECT_OSCCOv_ShellCCoverlap*GENV_Si45; (AECT_OSCCZd_ShellCCZdimension-AECT_OSJPtc_ShellJPZlength)/2." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_TS_AxialForceBox" X_Y_Z=" AECT_SAFBXp_ShellAFBXpos + GENV_Eps; -AECT_SAFBXw_ShellAFBfullXwidt*GENV_Si225 - AECT_SAFBYw_ShellAFBfullYwidt*GENV_Co225 + AECT_OSAFBt_ShellAFBthickness*GENV_Si225*GENV_Si225+ AECT_TRSShr_ShellRadPos+AECT_OSCCOv_ShellCCoverlap*GENV_Si45 ; -(AECT_OSCCZd_ShellCCZdimension-(AECT_OSCCZd_ShellCCZdimension-AECT_OSJPtc_ShellJPZlength))/2." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Tube" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225; 0." rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Flange" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225; AECT_OSCCZd_ShellCCZdimension/2.+AECT_STaflt_StayTubeAlignFlth/2. + GENV_Eps" rot=" 0.; 0.; 22.5" /> + <posXYZ volume="ECT_ST_StayTube_Flange" X_Y_Z=" -AECT_TRSEPr_EndplateRadPos*GENV_Ta225 - AECT_EPHoPo_EndPlateHolepos*GENV_Si225; AECT_TRSEPr_EndplateRadPos + AECT_EPHoPo_EndPlateHolepos*GENV_Co225;-AECT_OSCCZd_ShellCCZdimension/2.-AECT_STaflt_StayTubeAlignFlth/2. - GENV_Eps" rot=" 0.; 0.; 22.5" /> +</composition> + +<!-- main envelope surrounding coldmass and thermal shield - atlteyv_0012, atlteyv_0014, atlteyv_0015, atlteyv_0025, atlteyv_0027 and atlteyv_0076 --> +<var name="AECT_EVEPRI_EVEndPlateRadiInne" value=" 670. "/> +<var name="AECT_EVEPRT_EVEndPlateRadiTurr" value=" 930. "/> +<var name="AECT_EVEPth_EVEndPlatethicknes" value=" 75. "/> +<var name="AECT_EVEPid_EVEndPlateindist" value=" 4320. "/> +<var name="AECT_EVEPod_EVEndPlateoutdist" value=" 5345. "/> +<var name="AECT_EVEPli_EVEndPlatelowinter" value=" 1212. "/> +<var name="AECT_EVEPui_EVEndPlateupinter" value=" 1238. "/> +<var name="AECT_EVEPHd_EVEndPlateHolediam" value=" 160. "/> +<var name="AECT_EVEPHr_EVEndPlateHolerad" value=" 3100. "/> +<var name="AECT_EVEPHa_EVEndPlateHoleang" value=" 3.6 "/> +<var name="AECT_EVEPSl_EVEndPlatespeclen" value=" 303. "/> +<var name="AECT_EVEPSa_EVEndPlatespecang" value=" 127.5 "/> +<var name="AECT_EVEPSr_EVEndPlatespecrad" value=" 3985. "/> + +<var name="AECT_EVAFod_EVAlignFlangeoutdi" value=" 450. "/> +<var name="AECT_EVAFzw_EVAlignFlangezwidt" value=" 70. "/> +<var name="AECT_EVATid_EVAlignTubeinndiam" value=" 262. "/> +<var name="AECT_EVATww_EVAlignTuberwallwi" value=" 20. "/> + +<var name="AECT_EVOShZ_EVOutShellholeZwid" value=" 4800. "/> + +<var name="AECT_EVOSio_EVOutShellinneroff" value=" 15. "/> +<var name="AECT_EVOSso_EVOutShellspecioff" value=" 50. "/> +<var name="AECT_EVOSit_EVOutShellinnthick" value=" 40. "/> +<var name="AECT_EVOSCZ_EVOutShellConnZwid" value=" 120. "/> + +<var name="AECT_EVOSCR_EVOutShellConnlowR" value=" 140. "/> +<var name="AECT_EVOSCR_EVOutShellConnbigR" value=" 220. "/> +<var name="AECT_EVOSCR_EVOutShellConnspeR" value=" 360. "/> + +<var name="AECT_EVSSAh_EVSideSupporthight" value=" 225. "/> +<var name="AECT_EVSSAw_EVSideSupportwidth" value=" 250. "/> +<var name="AECT_EVTSAh_EVTopSupporthight" value=" 150. "/> +<var name="AECT_EVTSRa_EVTopSupportRadius" value=" 1230. "/> +<var name="AECT_EVTSAl_EVTopSupportlength" value=" 2913. "/> +<var name="AECT_EVTSCo_EVTopSupportCutoff" value=" 95. "/> +<var name="AECT_EVTSCw_EVTopSupportCutwid" value=" 103. "/> + +<var name="AECT_EVSSan_EVSideSupportangle" value="atan((AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225 - AECT_EVEPid_EVEndPlateindist)/(AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVEPli_EVEndPlatelowinter/2. - AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225 ))"/> +<var name="AECT_EVEPSt_EVEndPlatespectana" value="tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180)"/> + +<tubs name="ECT_EV_InnerTube" material="Aluminium" Rio_Z="0.; AECT_EVEPRI_EVEndPlateRadiInne; 2.*AECT_EVEPth_EVEndPlatethicknes" nbPhi="20" /> +<tubs name="ECT_EV_TurretTube" material="Aluminium" Rio_Z="0.; AECT_EVEPRT_EVEndPlateRadiTurr; 2.*AECT_EVEPth_EVEndPlatethicknes" nbPhi="20" /> +<tubs name="ECT_EV_AlignHole" material="Aluminium" Rio_Z="0.; AECT_EVEPHd_EVEndPlateHolediam/2.; 2.*AECT_EVEPth_EVEndPlatethicknes" nbPhi="20" /> + +<gvxy name="ECT_EV_EndPlate_basic" material="Aluminium" dZ="AECT_EVEPth_EVEndPlatethicknes"> + <gvxy_point X_Y=" 0. ; 0. "/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 "/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y="-AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225"/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 "/> +</gvxy> + +<var name="AECT_EVEPpx_EVEndPlateS_Point6_X" value="(AECT_EVEPid_EVEndPlateindist+(1./AECT_EVEPSt_EVEndPlatespectana)*(-AECT_EVEPli_EVEndPlatelowinter/2.)-(AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225)-GENV_Ta225*(-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225))/(1./AECT_EVEPSt_EVEndPlatespectana-GENV_Ta225)"/> +<var name="AECT_EVEPpy_EVEndPlateS_Point6_Y" value="(-AECT_EVEPpx_EVEndPlateS_Point6_X+(-AECT_EVEPli_EVEndPlatelowinter/2.))/AECT_EVEPSt_EVEndPlatespectana+AECT_EVEPid_EVEndPlateindist"/> + +<gvxy name="ECT_EV_EndPlate_special" material="Aluminium" dZ="AECT_EVEPth_EVEndPlatethicknes"> + <gvxy_point X_Y=" 0. ; 0. "/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 "/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y="-AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y=" AECT_EVEPpx_EVEndPlateS_Point6_X; AECT_EVEPpy_EVEndPlateS_Point6_Y"/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225 "/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 "/> +</gvxy> + +<subtraction name="ECT_EV_EndPlate_Inner_default" > + <posXYZ volume="ECT_EV_EndPlate_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_InnerTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_EndPlate_Turret_default" > + <posXYZ volume="ECT_EV_EndPlate_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_TurretTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_EndPlate_Inner_special_Sector6" > + <posXYZ volume="ECT_EV_EndPlate_special" X_Y_Z=" 0.; 0.; 0." rot=" 0.; 180.; 0."/> + <posXYZ volume="ECT_EV_InnerTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_EndPlate_Turret_special_Sector6" > + <posXYZ volume="ECT_EV_EndPlate_special" X_Y_Z=" 0.; 0.; 0." rot=" 0.; 180.; 0."/> + <posXYZ volume="ECT_EV_TurretTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_EndPlate_Inner_special_Sector7" > + <posXYZ volume="ECT_EV_EndPlate_special" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_InnerTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_EndPlate_Turret_special_Sector7" > + <posXYZ volume="ECT_EV_EndPlate_special" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_TurretTube" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_AlignHole" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<var name="AECT_EVOSfo_EVOutShellfulloff" value="AECT_EVOSio_EVOutShellinneroff + AECT_EVOSit_EVOutShellinnthick"/> +<var name="AECT_EVOSpx_OutShell_Point2_X" value="((AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)/GENV_Co225 + tan(AECT_EVSSan_EVSideSupportangle)*(AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSfo_EVOutShellfulloff*tan(AECT_EVSSan_EVSideSupportangle/2.))- (AECT_EVEPid_EVEndPlateindist - AECT_EVOSfo_EVOutShellfulloff))/(tan(AECT_EVSSan_EVSideSupportangle) + GENV_Ta225)"/> +<var name="AECT_EVOSpx_OutShell_Point5_X" value="((AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)/GENV_Co225 + tan(AECT_EVSSan_EVSideSupportangle)*(AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSio_EVOutShellinneroff*tan(AECT_EVSSan_EVSideSupportangle/2.))- (AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff))/(tan(AECT_EVSSan_EVSideSupportangle) + GENV_Ta225)"/> + +<gvxysx name="ECT_EV_OutShell_default" material="Aluminium" dZ="AECT_EVOShZ_EVOutShellholeZwid - 2.*AECT_EVOSCZ_EVOutShellConnZwid"> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSfo_EVOutShellfulloff*tan(AECT_EVSSan_EVSideSupportangle/2.); AECT_EVEPid_EVEndPlateindist - AECT_EVOSfo_EVOutShellfulloff"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShell_Point2_X; (AECT_EVOSpx_OutShell_Point2_X - (AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSfo_EVOutShellfulloff*tan(AECT_EVSSan_EVSideSupportangle/2.)))*tan(AECT_EVSSan_EVSideSupportangle) + AECT_EVEPid_EVEndPlateindist - AECT_EVOSfo_EVOutShellfulloff"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Co225"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShell_Point5_X; (AECT_EVOSpx_OutShell_Point5_X - (AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSio_EVOutShellinneroff*tan(AECT_EVSSan_EVSideSupportangle/2.)))*tan(AECT_EVSSan_EVSideSupportangle) + AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSio_EVOutShellinneroff*tan(AECT_EVSSan_EVSideSupportangle/2.); AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff"/> +</gvxysx> + +<var name="AECT_EVOSpx_OutShellS_Point7_X" value="-AECT_EVEPli_EVEndPlatelowinter/2. - AECT_EVOSio_EVOutShellinneroff*(1./cos((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180) - tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180))"/> +<var name="AECT_EVOSpy_OutShellS_Point7_Y" value="AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff"/> +<var name="AECT_EVOSpx_OutShellS_Point9_X" value="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225 - (AECT_EVOSso_EVOutShellspecioff-AECT_EVOSio_EVOutShellinneroff)/(2.*GENV_Si225)"/> +<var name="AECT_EVOSpy_OutShellS_Point9_Y" value="AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225 - (AECT_EVOSso_EVOutShellspecioff+AECT_EVOSio_EVOutShellinneroff)/(2.*GENV_Co225)"/> + +<var name="AECT_EVOSpx_OutShellS_Point8_X" value="(AECT_EVOSpy_OutShellS_Point7_Y + (1./tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180))*AECT_EVOSpx_OutShellS_Point7_X - GENV_Ta225*AECT_EVOSpx_OutShellS_Point9_X - AECT_EVOSpy_OutShellS_Point9_Y )/((1./tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180)) - GENV_Ta225)"/> + +<var name="AECT_EVOSpx_OutShellS_Point12_X" value="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225 - (AECT_EVOSso_EVOutShellspecioff-AECT_EVOSio_EVOutShellinneroff)/(2.*GENV_Si225)"/> +<var name="AECT_EVOSpy_OutShellS_Point12_Y" value="AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225 - (AECT_EVOSso_EVOutShellspecioff+AECT_EVOSio_EVOutShellinneroff)/(2.*GENV_Co225) - AECT_EVOSit_EVOutShellinnthick/GENV_Co225"/> +<var name="AECT_EVOSpx_OutShellS_Point14_X" value="-AECT_EVEPli_EVEndPlatelowinter/2. - (AECT_EVOSio_EVOutShellinneroff + AECT_EVOSit_EVOutShellinnthick)*(1./cos((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180) - tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180))"/> +<var name="AECT_EVOSpy_OutShellS_Point14_Y" value="AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff - AECT_EVOSit_EVOutShellinnthick"/> + +<var name="AECT_EVOSpx_OutShellS_Point13_X" value="(AECT_EVOSpy_OutShellS_Point14_Y + (1./tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180))*AECT_EVOSpx_OutShellS_Point14_X - GENV_Ta225*AECT_EVOSpx_OutShellS_Point12_X - AECT_EVOSpy_OutShellS_Point12_Y )/((1./tan((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180)) - GENV_Ta225)"/> + +<gvxy name="ECT_EV_OutShell_special" material="Aluminium" dZ="AECT_EVOShZ_EVOutShellholeZwid - 2.*AECT_EVOSCZ_EVOutShellConnZwid"> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSfo_EVOutShellfulloff*tan(AECT_EVSSan_EVSideSupportangle/2.); AECT_EVEPid_EVEndPlateindist - AECT_EVOSfo_EVOutShellfulloff"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShell_Point2_X; (AECT_EVOSpx_OutShell_Point2_X - (AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSfo_EVOutShellfulloff*tan(AECT_EVSSan_EVSideSupportangle/2.)))*tan(AECT_EVSSan_EVSideSupportangle) + AECT_EVEPid_EVEndPlateindist - AECT_EVOSfo_EVOutShellfulloff"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Co225"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShell_Point5_X; (AECT_EVOSpx_OutShell_Point5_X - (AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSio_EVOutShellinneroff*tan(AECT_EVSSan_EVSideSupportangle/2.)))*tan(AECT_EVSSan_EVSideSupportangle) + AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSio_EVOutShellinneroff*tan(AECT_EVSSan_EVSideSupportangle/2.); AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point7_X ; AECT_EVOSpy_OutShellS_Point7_Y"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point8_X ; AECT_EVOSpy_OutShellS_Point7_Y - tan((180.-AECT_EVEPSa_EVEndPlatespecang)*GENV_PiS180)*(AECT_EVOSpx_OutShellS_Point8_X - AECT_EVOSpx_OutShellS_Point7_X)"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point9_X ; AECT_EVOSpy_OutShellS_Point9_Y"/> + <gvxy_point X_Y=" -(AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff)*GENV_Co225"/> + <gvxy_point X_Y=" -(AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Si225; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSfo_EVOutShellfulloff)*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point12_X ; AECT_EVOSpy_OutShellS_Point12_Y"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point13_X; AECT_EVOSpy_OutShellS_Point14_Y - tan((180-AECT_EVEPSa_EVEndPlatespecang)*GENV_PiS180)*(AECT_EVOSpx_OutShellS_Point13_X - AECT_EVOSpx_OutShellS_Point14_X)"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutShellS_Point14_X ; AECT_EVOSpy_OutShellS_Point14_Y"/> +</gvxy> + +<!-- introduced becaused used for calculation--> +<var name="AECT_EVOSpx_OutConnector_Point6_X" value="AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSCR_EVOutShellConnbigR*sin(AECT_EVSSan_EVSideSupportangle) - (AECT_EVOSCR_EVOutShellConnlowR - AECT_EVOSCR_EVOutShellConnbigR*cos(AECT_EVSSan_EVSideSupportangle))/tan(AECT_EVSSan_EVSideSupportangle)"/> +<!-- derived variable for fifth point via the formula tan(suppangle)*(x-point6_x)+point6_y = -tan(22.5)*(x-point4_x)+point4_y for x coordinate, y simple trigonometry --> +<var name="AECT_EVOSpx_OutConnector_Point5_X" value="((AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVOSCR_EVOutShellConnlowR*GENV_Si225)*GENV_Ta225+tan(AECT_EVSSan_EVSideSupportangle)*AECT_EVOSpx_OutConnector_Point6_X+(AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 - AECT_EVOSCR_EVOutShellConnlowR*GENV_Co225) - (AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR))/(GENV_Ta225+tan(AECT_EVSSan_EVSideSupportangle))"/> + +<gvxysx name="ECT_EV_OutShellConnector_default" material="Aluminium" dZ="AECT_EVOSCZ_EVOutShellConnZwid"> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225"/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSCR_EVOutShellConnlowR)*GENV_Si225 ; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSCR_EVOutShellConnlowR)*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutConnector_Point5_X ; (AECT_EVOSpx_OutConnector_Point5_X-AECT_EVOSpx_OutConnector_Point6_X)*tan(AECT_EVSSan_EVSideSupportangle)+AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSCR_EVOutShellConnbigR*sin(AECT_EVSSan_EVSideSupportangle) - (AECT_EVOSCR_EVOutShellConnlowR - AECT_EVOSCR_EVOutShellConnbigR*cos(AECT_EVSSan_EVSideSupportangle))/tan(AECT_EVSSan_EVSideSupportangle); AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR"/> +</gvxysx> + +<var name="AECT_EVOSpx_OutConnectorS_Point14_X" value="-AECT_EVEPli_EVEndPlatelowinter/2. - AECT_EVOSCR_EVOutShellConnspeR*(1./cos((AECT_EVEPSa_EVEndPlatespecang-90)*GENV_PiS180)) + AECT_EVOSCR_EVOutShellConnlowR*AECT_EVEPSt_EVEndPlatespectana"/> +<var name="AECT_EVOSpx_OutConnectorS_Point13_X" value="(AECT_EVEPid_EVEndPlateindist-AECT_EVOSCR_EVOutShellConnlowR+(1./AECT_EVEPSt_EVEndPlatespectana)*AECT_EVOSpx_OutConnectorS_Point14_X+GENV_Ta225*(AECT_EVEPod_EVEndPlateoutdist*GENV_Si225-AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225)-AECT_EVEPod_EVEndPlateoutdist*GENV_Co225-AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225+AECT_EVOSCR_EVOutShellConnlowR/GENV_Co225)/(1./AECT_EVEPSt_EVEndPlatespectana-GENV_Ta225)"/> + +<gvxy name="ECT_EV_OutShellConnector_special" material="Aluminium" dZ="AECT_EVOSCZ_EVOutShellConnZwid"> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2. + AECT_EVOSCR_EVOutShellConnbigR*sin(AECT_EVSSan_EVSideSupportangle) - (AECT_EVOSCR_EVOutShellConnlowR - AECT_EVOSCR_EVOutShellConnbigR*cos(AECT_EVSSan_EVSideSupportangle))/tan(AECT_EVSSan_EVSideSupportangle); AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutConnector_Point5_X ; (AECT_EVOSpx_OutConnector_Point5_X-AECT_EVOSpx_OutConnector_Point6_X)*tan(AECT_EVSSan_EVSideSupportangle)+AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR"/> + <gvxy_point X_Y=" (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSCR_EVOutShellConnlowR)*GENV_Si225 ; (AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSCR_EVOutShellConnlowR)*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225"/> + <gvxy_point X_Y=" AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 - AECT_EVEPui_EVEndPlateupinter/2. *GENV_Co225; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 + AECT_EVEPui_EVEndPlateupinter/2. *GENV_Si225"/> + <gvxy_point X_Y=" AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y="-AECT_EVEPli_EVEndPlatelowinter/2.; AECT_EVEPid_EVEndPlateindist"/> + <gvxy_point X_Y=" AECT_EVEPpx_EVEndPlateS_Point6_X; AECT_EVEPpy_EVEndPlateS_Point6_Y"/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225 "/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225 "/> + <gvxy_point X_Y="(-AECT_EVEPod_EVEndPlateoutdist+AECT_EVOSCR_EVOutShellConnlowR)*GENV_Si225 ; (AECT_EVEPod_EVEndPlateoutdist-AECT_EVOSCR_EVOutShellConnlowR)*GENV_Co225 "/> + <gvxy_point X_Y="-AECT_EVEPod_EVEndPlateoutdist*GENV_Si225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Co225 ; AECT_EVEPod_EVEndPlateoutdist*GENV_Co225+AECT_EVEPSl_EVEndPlatespeclen*GENV_Si225 - AECT_EVOSCR_EVOutShellConnlowR/GENV_Co225 "/> + <gvxy_point X_Y=" AECT_EVOSpx_OutConnectorS_Point13_X; AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR - tan((180.-AECT_EVEPSa_EVEndPlatespecang)*GENV_PiS180)*(AECT_EVOSpx_OutConnectorS_Point13_X - AECT_EVOSpx_OutConnectorS_Point14_X)"/> + <gvxy_point X_Y=" AECT_EVOSpx_OutConnectorS_Point14_X; AECT_EVEPid_EVEndPlateindist - AECT_EVOSCR_EVOutShellConnlowR"/> +</gvxy> + +<composition name="ECT_EV_Envelop_default" > + <posXYZ volume="ECT_EV_EndPlate_Inner_default" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVEPth_EVEndPlatethicknes/2. + GENV_Eps" rot=" 0.; 0.; -67.5"/> + <posXYZ volume="ECT_EV_EndPlate_Turret_default" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVEPth_EVEndPlatethicknes/2. - GENV_Eps" rot=" 0.; 0.; -67.5"/> + <posXYZ volume="ECT_EV_OutShell_default" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; 0." rot=" 0.; 0.; -67.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_default" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVOSCZ_EVOutShellConnZwid/2. + GENV_Eps/2." rot=" 0.; 0.; -67.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_default" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid/2. - GENV_Eps/2." rot=" 0.; 0.; -67.5"/> +</composition> + +<composition name="ECT_EV_Envelop_special_Sector6" > + <posXYZ volume="ECT_EV_EndPlate_Inner_special_Sector6" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVEPth_EVEndPlatethicknes/2. + GENV_Eps" rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_EndPlate_Turret_special_Sector6" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVEPth_EVEndPlatethicknes/2. - GENV_Eps" rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_OutShell_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; 0." rot=" 0.; 180.; 22.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVOSCZ_EVOutShellConnZwid/2. + GENV_Eps/2." rot=" 0.; 180.; 22.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid/2. - GENV_Eps/2." rot=" 0.; 180.; 22.5"/> +</composition> + +<composition name="ECT_EV_Envelop_special_Sector7" > + <posXYZ volume="ECT_EV_EndPlate_Inner_special_Sector7" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVEPth_EVEndPlatethicknes/2. + GENV_Eps" rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_EndPlate_Turret_special_Sector7" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVEPth_EVEndPlatethicknes/2. - GENV_Eps" rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_OutShell_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; 0." rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_EVOSCZ_EVOutShellConnZwid/2. + GENV_Eps/2." rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_EV_OutShellConnector_special" X_Y_Z=" GENV_Eps*GENV_Si225; GENV_Eps*GENV_Co225; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid/2. - GENV_Eps/2." rot=" 0.; 0.; 22.5"/> +</composition> + +<box name="ECT_EV_SideAttachment" material="Aluminium" X_Y_Z="AECT_EVSSAh_EVSideSupporthight - AECT_EVOSit_EVOutShellinnthick - AECT_EVOSio_EVOutShellinneroff; AECT_EVSSAw_EVSideSupportwidth; AECT_EVOShZ_EVOutShellholeZwid - 2.*AECT_EVOSCZ_EVOutShellConnZwid" /> +<box name="ECT_EV_Attachment_basic" material="Aluminium" X_Y_Z="AECT_EVTSAl_EVTopSupportlength; 2.*AECT_EVTSAh_EVTopSupporthight; AECT_EVTSAh_EVTopSupporthight" /> +<box name="ECT_EV_Attachment_CutBox" material="Aluminium" X_Y_Z="2.*AECT_EVTSCw_EVTopSupportCutwid; 4.*AECT_EVTSAh_EVTopSupporthight; AECT_EVTSAh_EVTopSupporthight" /> +<tubs name="ECT_EV_Attachment_CutTube" material="Aluminium" Rio_Z="0.; AECT_EVEPHd_EVEndPlateHolediam/2.; 2.*AECT_EVTSAh_EVTopSupporthight" nbPhi="20" /> + +<tubs name="ECT_EV_AlignFlange_default_pre" material="Aluminium" Rio_Z="AECT_EVEPHd_EVEndPlateHolediam/2.; AECT_EVAFod_EVAlignFlangeoutdi/2.; AECT_EVAFzw_EVAlignFlangezwidt" nbPhi="20" /> +<tubs name="ECT_EV_AlignFlange_special_base" material="Aluminium" Rio_Z="0.; AECT_EVAFod_EVAlignFlangeoutdi/2.; AECT_EVTSAh_EVTopSupporthight" nbPhi="20" /> +<box name="ECT_EV_AlignFlange_special_cut" material="Aluminium" X_Y_Z="2.*AECT_EVAFod_EVAlignFlangeoutdi; 2.*AECT_EVTSAh_EVTopSupporthight; 2.*AECT_EVTSAh_EVTopSupporthight" /> +<tubs name="ECT_EV_AlignTube_default_pre" material="Aluminium" Rio_Z="AECT_EVATid_EVAlignTubeinndiam/2.; AECT_EVATid_EVAlignTubeinndiam/2.+AECT_EVATww_EVAlignTuberwallwi; AECT_EVOShZ_EVOutShellholeZwid-2.*AECT_EVAFzw_EVAlignFlangezwidt - GENV_Eps" nbPhi="20" /> +<tubs name="ECT_EV_AlignTube_special_pre" material="Aluminium" Rio_Z="AECT_EVATid_EVAlignTubeinndiam/2.; AECT_EVATid_EVAlignTubeinndiam/2.+AECT_EVATww_EVAlignTuberwallwi; AECT_EVOShZ_EVOutShellholeZwid-2.*AECT_EVTSAh_EVTopSupporthight - GENV_Eps" nbPhi="20" /> + +<subtraction name="ECT_EV_FrontAttachment" > + <posXYZ volume="ECT_EV_Attachment_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_Attachment_CutBox" X_Y_Z=" AECT_EVTSAl_EVTopSupportlength/2.; 0.; -AECT_EVTSCo_EVTopSupportCutoff" /> + <posXYZ volume="ECT_EV_Attachment_CutTube" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180) - AECT_EVTSRa_EVTopSupportRadius - AECT_EVTSAl_EVTopSupportlength/2.; -AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<subtraction name="ECT_EV_BackAttachment" > + <posXYZ volume="ECT_EV_Attachment_basic" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_Attachment_CutBox" X_Y_Z=" AECT_EVTSAl_EVTopSupportlength/2.; 0.; AECT_EVTSCo_EVTopSupportCutoff" /> + <posXYZ volume="ECT_EV_Attachment_CutTube" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180) - AECT_EVTSRa_EVTopSupportRadius - AECT_EVTSAl_EVTopSupportlength/2.; -AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<composition name="ECT_EV_AlignTube_default"> + <posRPhiZ volume="ECT_EV_AlignTube_default_pre" R_Phi_Z=" AECT_EVEPHr_EVEndPlateHolerad ; 22.5 - AECT_EVEPHa_EVEndPlateHoleang; 0. " /> + <posRPhiZ volume="ECT_EV_AlignFlange_default_pre" R_Phi_Z=" AECT_EVEPHr_EVEndPlateHolerad ; 22.5 - AECT_EVEPHa_EVEndPlateHoleang; AECT_EVOShZ_EVOutShellholeZwid/2.-AECT_EVAFzw_EVAlignFlangezwidt/2. " /> + <posRPhiZ volume="ECT_EV_AlignFlange_default_pre" R_Phi_Z=" AECT_EVEPHr_EVEndPlateHolerad ; 22.5 - AECT_EVEPHa_EVEndPlateHoleang;-AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_EVAFzw_EVAlignFlangezwidt/2. " /> +</composition> + +<subtraction name="ECT_EV_AlignFlange_special_pre" > + <posXYZ volume="ECT_EV_AlignFlange_special_base" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180);-AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> + <posXYZ volume="ECT_EV_AlignFlange_special_cut" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180);-GENV_Eps; 0." rot=" 0.; 0.; 0." /> + <posXYZ volume="ECT_EV_Attachment_CutTube" X_Y_Z=" AECT_EVEPHr_EVEndPlateHolerad*cos(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180);-AECT_EVEPHr_EVEndPlateHolerad*sin(AECT_EVEPHa_EVEndPlateHoleang*GENV_PiS180); 0." /> +</subtraction> + +<composition name="ECT_EV_AlignTube_special"> + <posRPhiZ volume="ECT_EV_AlignTube_special_pre" R_Phi_Z=" AECT_EVEPHr_EVEndPlateHolerad ; -AECT_EVEPHa_EVEndPlateHoleang; 0. " /> + <posRPhiZ volume="ECT_EV_AlignFlange_special_pre" R_Phi_Z=" 0. ; 0.; AECT_EVOShZ_EVOutShellholeZwid/2.-AECT_EVTSAh_EVTopSupporthight/2. " /> + <posRPhiZ volume="ECT_EV_AlignFlange_special_pre" R_Phi_Z=" 0. ; 0.;-AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_EVTSAh_EVTopSupporthight/2. " /> +</composition> + +<!-- radiation shielding mounted inside main envelope towards IP - atljt___0023, atljt___0026, atljt___0029 and atljt___0031 --> +<var name="AECT_JTVSth_JTVShieldthicknes" value=" 80. "/> +<var name="AECT_JTVSlw_JTVShieldlowwidth" value=" 321. "/> +<var name="AECT_JTVSuw_JTVShieldupwidth" value=" 1854. "/> +<var name="AECT_JTVSth_JTVShieldtothight" value=" 1975. "/> +<var name="AECT_JTVSmh_JTVShieldmidhight" value=" 1850. "/> +<var name="AECT_JTVShd_JTVShieldholediam" value=" 650. "/> +<var name="AECT_JTVSpx_JTVShieldholeposX" value=" 195. "/> +<var name="AECT_JTVSpy_JTVShieldholeposY" value=" 1569. "/> +<var name="AECT_JTVSpr_JTVShieldposR" value=" 1470. "/> +<var name="AECT_JTVSpp_JTVShieldpophioff" value=" 435. "/> + +<var name="AECT_JTVSth_JTVSpecial2tothig" value=" 1713. "/> +<var name="AECT_JTVSth_JTVSpecial1tothig" value=" 1690. "/> +<var name="AECT_JTVSlh_JTVSpecial1lowhig" value=" 931. "/> +<var name="AECT_JTVSmh_JTVSpecial1midhig" value=" 691. "/> +<var name="AECT_JTVSlh_JTVSpecial1phioff" value=" 170. "/> + +<var name="AECT_JTVSpr_JTVSpecial2posR" value=" 1522. "/> +<var name="AECT_JTVSpr_JTVSpecial1posR" value=" 1717. "/> + +<gvxy name="ECT_JTV_Shielding_basic" material="PolyBoronB4C" dZ="AECT_JTVSth_JTVShieldthicknes"> + <gvxy_point X_Y=" AECT_JTVSlw_JTVShieldlowwidth/2.; 0."/> + <gvxy_point X_Y=" AECT_JTVSuw_JTVShieldupwidth/2.; AECT_JTVSmh_JTVShieldmidhight"/> + <gvxy_point X_Y=" 0.; AECT_JTVSth_JTVShieldtothight"/> + <gvxy_point X_Y="-AECT_JTVSuw_JTVShieldupwidth/2.; AECT_JTVSmh_JTVShieldmidhight"/> + <gvxy_point X_Y="-AECT_JTVSlw_JTVShieldlowwidth/2.; 0."/> +</gvxy> + +<tubs name="ECT_JTV_AlignHole" material="PolyBoronB4C" Rio_Z="0.; AECT_JTVShd_JTVShieldholediam/2.; 2.*AECT_JTVSth_JTVShieldthicknes" nbPhi="20" /> + +<subtraction name="ECT_JTV_Shielding_default_tmp" > + <posXYZ volume="ECT_JTV_Shielding_basic" X_Y_Z=" AECT_JTVSlw_JTVShieldlowwidth/2.*GENV_Co225+AECT_JTVSpp_JTVShieldpophioff; AECT_JTVSpr_JTVShieldposR-AECT_JTVSlw_JTVShieldlowwidth/2.*GENV_Si225; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_JTVSth_JTVShieldthicknes/2." rot=" 0.; 0.; -22.5"/> + <posXYZ volume="ECT_JTV_AlignHole" X_Y_Z=" AECT_JTVSpp_JTVShieldpophioff+(AECT_JTVSlw_JTVShieldlowwidth/2.+AECT_JTVSpx_JTVShieldholeposX)*GENV_Co225+AECT_JTVSpy_JTVShieldholeposY*GENV_Si225; AECT_JTVSpr_JTVShieldposR-(AECT_JTVSlw_JTVShieldlowwidth/2.+AECT_JTVSpx_JTVShieldholeposX)*GENV_Si225+AECT_JTVSpy_JTVShieldholeposY*GENV_Co225; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_JTVSth_JTVShieldthicknes/2."/> +</subtraction> + +<composition name="ECT_JTV_Shielding_default" > + <posXYZ volume="ECT_JTV_Shielding_default_tmp" rot=" 0.; 0.; -45."/> +</composition> + +<gvxy name="ECT_JTV_Shielding_special1" material="PolyBoronB4C" dZ="AECT_JTVSth_JTVShieldthicknes"> + <gvxy_point X_Y=" 0.; 0."/> + <gvxy_point X_Y=" 0.; AECT_JTVSlh_JTVSpecial1lowhig"/> + <gvxy_point X_Y=" AECT_JTVSlh_JTVSpecial1phioff; AECT_JTVSlh_JTVSpecial1lowhig"/> + <gvxy_point X_Y=" AECT_JTVSlh_JTVSpecial1phioff; AECT_JTVSth_JTVSpecial1tothig"/> + <gvxy_point X_Y=" (AECT_JTVSlh_JTVSpecial1lowhig+AECT_JTVSmh_JTVSpecial1midhig)*GENV_Ta225; AECT_JTVSlh_JTVSpecial1lowhig+AECT_JTVSmh_JTVSpecial1midhig"/> +</gvxy> + +<gvxy name="ECT_JTV_Shielding_special2" material="PolyBoronB4C" dZ="AECT_JTVSth_JTVShieldthicknes"> + <gvxy_point X_Y=" 0.; 0."/> + <gvxy_point X_Y=" 0.; AECT_JTVSth_JTVSpecial1tothig"/> + <gvxy_point X_Y=" -AECT_JTVSth_JTVSpecial2tothig*GENV_Si225; AECT_JTVSth_JTVSpecial2tothig*GENV_Co225"/> +</gvxy> + +<composition name="ECT_JTV_Shielding_special" > + <posXYZ volume="ECT_JTV_Shielding_special1" X_Y_Z=" -AECT_JTVSpp_JTVShieldpophioff; AECT_JTVSpr_JTVSpecial1posR; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_JTVSth_JTVShieldthicknes/2." rot=" 0.; 0.; 22.5"/> + <posXYZ volume="ECT_JTV_Shielding_special2" X_Y_Z=" -AECT_JTVSpp_JTVShieldpophioff - (AECT_JTVSpr_JTVSpecial1posR-AECT_JTVSpr_JTVSpecial2posR)/GENV_Ta225; AECT_JTVSpr_JTVSpecial2posR; AECT_EVOShZ_EVOutShellholeZwid/2. - AECT_JTVSth_JTVShieldthicknes/2." rot=" 0.; 0.; 22.5" /> +</composition> + +<!-- central tube surrounding beampipe - atlteyv_0017 --> +<var name="AECT_CTIcle_CentTubeIncomplen" value=" 4953. - 14. "/> +<var name="AECT_CTIpo1_CentTubeInposoff1" value=" 70. "/> +<var name="AECT_CTIpo2_CentTubeInposoff2" value=" 565. "/> +<var name="AECT_CTIpo3_CentTubeInposoff3" value=" 500. "/> +<var name="AECT_CTIdi1_CentTubeInDiainn1" value=" 1220. "/> +<var name="AECT_CTIdi3_CentTubeInDiainn3" value=" 1650. "/> +<var name="AECT_CTIdi4_CentTubeInDiainn4" value=" 1730. "/> +<var name="AECT_CTIdo1_CentTubeInDiaout1" value=" 1339. "/> +<var name="AECT_CTIdo2_CentTubeInDiaout2" value=" 1859. "/> +<var name="AECT_CTIdo3_CentTubeInDiaout3" value=" 2400. "/> +<var name="AECT_CTIno2_CentTubeInnegoff2" value=" 185. "/> +<var name="AECT_CTIdit_CentTubeInDiaintu" value=" 1740. "/> +<var name="AECT_CTIdot_CentTubeInDiaoutu" value=" 1780. "/> +<var name="AECT_CTIpfo_CentTubeInpofuoff" value=" 750. "/> + +<pcon name="ECT_EV_CentralTube" material="ShieldSteel" nbPhi="20" > + <polyplane Rio_Z=" AECT_CTIdi1_CentTubeInDiainn1/2.; AECT_CTIdo1_CentTubeInDiaout1/2.; AECT_CTIcle_CentTubeIncomplen/2." /> + <polyplane Rio_Z=" AECT_CTIdi1_CentTubeInDiainn1/2.; AECT_CTIdo1_CentTubeInDiaout1/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpo1_CentTubeInposoff1" /> + <polyplane Rio_Z=" AECT_CTIdi1_CentTubeInDiainn1/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpo1_CentTubeInposoff1" /> + <polyplane Rio_Z=" AECT_CTIdi1_CentTubeInDiainn1/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpfo_CentTubeInpofuoff + AECT_CTIpo2_CentTubeInposoff2" /> + <polyplane Rio_Z=" AECT_CTIdi3_CentTubeInDiainn3/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpfo_CentTubeInpofuoff + AECT_CTIpo2_CentTubeInposoff2" /> + <polyplane Rio_Z=" AECT_CTIdi3_CentTubeInDiainn3/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpfo_CentTubeInpofuoff + AECT_CTIpo3_CentTubeInposoff3" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpfo_CentTubeInpofuoff + AECT_CTIpo3_CentTubeInposoff3" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2.-AECT_CTIpfo_CentTubeInpofuoff + AECT_CTIpo3_CentTubeInposoff3" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; AECT_CTIcle_CentTubeIncomplen/2.-AECT_CTIpfo_CentTubeInpofuoff" /> + <polyplane Rio_Z=" AECT_CTIdit_CentTubeInDiaintu/2.; AECT_CTIdot_CentTubeInDiaoutu/2.; AECT_CTIcle_CentTubeIncomplen/2.-AECT_CTIpfo_CentTubeInpofuoff" /> + <polyplane Rio_Z=" AECT_CTIdit_CentTubeInDiaintu/2.; AECT_CTIdot_CentTubeInDiaoutu/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIpfo_CentTubeInpofuoff" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIpfo_CentTubeInpofuoff" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo3_CentTubeInDiaout3/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo3_CentTubeInDiaout3/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIpo1_CentTubeInposoff1" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIpo1_CentTubeInposoff1" /> + <polyplane Rio_Z=" AECT_CTIdi4_CentTubeInDiainn4/2.; AECT_CTIdo2_CentTubeInDiaout2/2.; -AECT_CTIcle_CentTubeIncomplen/2." /> +</pcon> + +<!-- JTV surrounding central tube IP - atljt___0037-vAD --> +<var name="AECT_JTVFRi_FrontRingInnerRad" value=" 1305. "/> +<var name="AECT_JTVFDo_FrontRingOuterDia" value=" 2840. "/> +<var name="AECT_JTVFMr_FrontRingMostInRa" value=" 930. "/> +<var name="AECT_JTVFZw_FrontRingZwidth" value=" 160. "/> +<var name="AECT_JTVFZp_FrontRingZposition" value=" 220. "/> <!-- relative pos - from drilling hole position + combination with atlteyv_0076 --> +<!-- JTV surrounding central tube non IP - atljt___0039-vAC --> +<var name="AECT_JTVBRi_BackRingInnerRad" value=" 1245. "/> +<var name="AECT_JTVBDm_BackRingMediumDia" value=" 2400. "/> +<var name="AECT_JTVBDo_BackRingOuterDia" value=" 2690. "/> +<var name="AECT_JTVBMr_BackRingMostInRa" value=" 965. "/> +<var name="AECT_JTVBZw_BackRingZwidth" value=" 140. "/> +<var name="AECT_JTVBZo_BackRingZoffset" value=" 80. "/> + +<pcon name="ECT_JTV_FrontRing" material="PolyBoronB4C" nbPhi="20" > + <polyplane Rio_Z=" AECT_JTVFMr_FrontRingMostInRa; AECT_JTVFRi_FrontRingInnerRad; AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpo1_CentTubeInposoff1 - AECT_JTVFZp_FrontRingZposition" /> + <polyplane Rio_Z=" AECT_JTVFMr_FrontRingMostInRa; AECT_JTVFDo_FrontRingOuterDia/2.; AECT_JTVFDo_FrontRingOuterDia/2. - AECT_JTVFRi_FrontRingInnerRad + AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpo1_CentTubeInposoff1 - AECT_JTVFZp_FrontRingZposition" /> + <polyplane Rio_Z=" AECT_JTVFMr_FrontRingMostInRa; AECT_JTVFDo_FrontRingOuterDia/2.; AECT_JTVFZw_FrontRingZwidth + AECT_CTIcle_CentTubeIncomplen/2. - AECT_CTIpo1_CentTubeInposoff1 - AECT_JTVFZp_FrontRingZposition" /> +</pcon> + +<pcon name="ECT_JTV_BackRing" material="PolyBoronB4C" nbPhi="20" > + <polyplane Rio_Z=" AECT_JTVBDm_BackRingMediumDia/2. + GENV_Eps; AECT_JTVBDo_BackRingOuterDia/2.; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2 - AECT_JTVBZw_BackRingZwidth + AECT_JTVBZo_BackRingZoffset" /> + <polyplane Rio_Z=" AECT_JTVBDm_BackRingMediumDia/2. + GENV_Eps; AECT_JTVBDo_BackRingOuterDia/2.; - AECT_JTVBDo_BackRingOuterDia/2. + AECT_JTVBRi_BackRingInnerRad -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2 + AECT_JTVBZo_BackRingZoffset" /> + <polyplane Rio_Z=" AECT_JTVBDm_BackRingMediumDia/2. + GENV_Eps; AECT_JTVBRi_BackRingInnerRad + AECT_JTVBZo_BackRingZoffset; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2 " /> + <polyplane Rio_Z=" AECT_JTVBMr_BackRingMostInRa; AECT_JTVBRi_BackRingInnerRad + AECT_JTVBZo_BackRingZoffset; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2 " /> + <polyplane Rio_Z=" AECT_JTVBMr_BackRingMostInRa; AECT_JTVBRi_BackRingInnerRad; -AECT_CTIcle_CentTubeIncomplen/2.+AECT_CTIno2_CentTubeInnegoff2 + AECT_JTVBZo_BackRingZoffset " /> +</pcon> + +<!-- yoke positioned at the ends of central tube - atlteyv_0076, atlteys_0007 and atlteys_0013 --> +<var name="AECT_CTYpoZ_CentTubeYokeposZ" value=" 1932 "/> +<var name="AECT_CTYthi_CentTubeYokethick" value=" 60. "/> +<var name="AECT_CTYwid_CentTubeYokewidth" value=" 125. "/> +<var name="AECT_CTYlen_CentTubeYokelengt" value=" 1500. "/> +<var name="AECT_CTYidi_CentTubeYokeindia" value=" 130. "/> +<var name="AECT_CTYodi_CentTubeYokeoudia" value=" 300. "/> +<var name="AECT_CTYpdi_CentTubeYokeposdi" value=" 1860. "/> +<var name="AECT_CTYst1_CentTubeYokesupt1" value=" 30. "/> +<var name="AECT_CTYst2_CentTubeYokesupt2" value=" 40. "/> +<var name="AECT_CTYSan_CentTubeYokesupa" value="atan(AECT_CTYodi_CentTubeYokeoudia/AECT_CTYpdi_CentTubeYokeposdi)/GENV_PiS180"/> + +<tubs name="ECT_EV_Yoke_Connector" material="Iron" Rio_Z="0.; AECT_CTYodi_CentTubeYokeoudia/2.; AECT_CTYthi_CentTubeYokethick + AECT_CTYst1_CentTubeYokesupt1 + AECT_CTYst2_CentTubeYokesupt2" nbPhi="20" /> +<tubs name="ECT_EV_Yoke_End" material="Iron" Rio_Z="AECT_CTYidi_CentTubeYokeindia/2.; AECT_CTYodi_CentTubeYokeoudia/2.; AECT_CTYthi_CentTubeYokethick + GENV_Eps" nbPhi="20" /> +<box name="ECT_EV_Yoke_Box" material="Iron" X_Y_Z="AECT_CTYlen_CentTubeYokelengt+AECT_CTYodi_CentTubeYokeoudia/2.; AECT_CTYthi_CentTubeYokethick; AECT_CTYwid_CentTubeYokewidth" /> + +<union name="ECT_EV_Yoke_basic"> + <posXYZ volume="ECT_EV_Yoke_Box" X_Y_Z=" AECT_CTYthi_CentTubeYokethick/2.+AECT_CTYst2_CentTubeYokesupt2; -(AECT_CTYlen_CentTubeYokelengt+AECT_CTYodi_CentTubeYokeoudia)/2.; 0." rot=" 0.; 0.; 90. "/> + <posXYZ volume="ECT_EV_Yoke_Connector" X_Y_Z=" (AECT_CTYthi_CentTubeYokethick + AECT_CTYst1_CentTubeYokesupt1 + AECT_CTYst2_CentTubeYokesupt2)/2.; 0.; 0." rot=" 0.; 90.; 0. " /> + <posXYZ volume="ECT_EV_Yoke_End" X_Y_Z=" AECT_CTYthi_CentTubeYokethick/2.+AECT_CTYst2_CentTubeYokesupt2; -(AECT_CTYlen_CentTubeYokelengt+AECT_CTYodi_CentTubeYokeoudia); 0." rot=" 0.; 90.; 0. "/> +</union> + +<tubs name="ECT_EV_Yoke_InnerSupport" material="Iron" Rio_Z="AECT_CTYpdi_CentTubeYokeposdi/2.; AECT_CTYpdi_CentTubeYokeposdi/2.+AECT_CTYst2_CentTubeYokesupt2; AECT_CTYodi_CentTubeYokeoudia + AECT_CTYst2_CentTubeYokesupt2" profile="22.5+AECT_CTYSan_CentTubeYokesupa;135.-2.*AECT_CTYSan_CentTubeYokesupa" nbPhi="20" /> +<tubs name="ECT_EV_Yoke_OuterSupport" material="Iron" Rio_Z="AECT_CTYpdi_CentTubeYokeposdi/2. + AECT_CTYst2_CentTubeYokesupt2 + AECT_CTYthi_CentTubeYokethick ; AECT_CTYpdi_CentTubeYokeposdi/2. + AECT_CTYst2_CentTubeYokesupt2 + AECT_CTYthi_CentTubeYokethick + AECT_CTYst1_CentTubeYokesupt1; AECT_CTYodi_CentTubeYokeoudia/2." profile="22.5+AECT_CTYSan_CentTubeYokesupa;135.-2.*AECT_CTYSan_CentTubeYokesupa" nbPhi="20" /> + +<composition name="ECT_EV_Yoke"> + <posRPhiZ volume="ECT_EV_Yoke_InnerSupport" R_Phi_Z=" GENV_Eps/2. ; 0.; 0. "/> + <posRPhiZ volume="ECT_EV_Yoke_OuterSupport" R_Phi_Z=" GENV_Eps/2 ; 0.; 0. "/> + <posRPhiZ volume="ECT_EV_Yoke_basic" R_Phi_Z=" AECT_CTYpdi_CentTubeYokeposdi/2.+GENV_Eps/2 ; 22.5; 0. " /> + <posRPhiZ volume="ECT_EV_Yoke_basic" R_Phi_Z="-AECT_CTYpdi_CentTubeYokeposdi/2.-GENV_Eps/2 ; -22.5; 0. " rot=" 0.; 180.; 0. "/> +</composition> + +<!-- thermal shielding surrounding central tube - atlteyr_0349 and atlteyr_0310 --> +<var name="AECT_CTTSid_CentTubeTSInnDia" value=" 1965. "/> +<var name="AECT_CTTSil_CentTubeTSinnlen" value=" 3400. "/> +<var name="AECT_CTTSFi_CentTubeTSFIDia1" value=" 2100. "/> +<var name="AECT_CTTSFi_CentTubeTSFIDia2" value=" 2610. "/> +<var name="AECT_CTTSFl_CentTubeTSFlength" value=" 260. "/> +<var name="AECT_CTTSth_CentTubeTSthickne" value=" 10. "/> + +<tubs name="ECT_TS_CentralTube_inner" material="Aluminium" Rio_Z="AECT_CTTSid_CentTubeTSInnDia/2.; AECT_CTTSid_CentTubeTSInnDia/2. + AECT_CTTSth_CentTubeTSthickne; AECT_CTTSil_CentTubeTSinnlen " nbPhi="20" /> +<tubs name="ECT_TS_CentralTube_middle" material="Aluminium" Rio_Z="AECT_CTTSid_CentTubeTSInnDia/2.; AECT_CTTSFi_CentTubeTSFIDia1/2. + AECT_CTTSth_CentTubeTSthickne; 3.*AECT_CTTSth_CentTubeTSthickne" nbPhi="20" /> +<pcon name="ECT_TS_CentralTube_top" material="Aluminium" nbPhi="20" profile=" -7.; 194."> + <polyplane Rio_Z=" AECT_CTTSFi_CentTubeTSFIDia2/2.; AECT_CTTSFi_CentTubeTSFIDia2/2. + AECT_CTTSth_CentTubeTSthickne; AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne + AECT_CTTSFl_CentTubeTSFlength" /> + <polyplane Rio_Z=" AECT_CTTSFi_CentTubeTSFIDia1/2.; AECT_CTTSFi_CentTubeTSFIDia1/2. + AECT_CTTSth_CentTubeTSthickne; AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne " /> +</pcon> +<pcon name="ECT_TS_CentralTube_low" material="Aluminium" nbPhi="20" profile=" 200.; 140."> + <polyplane Rio_Z=" AECT_CTTSFi_CentTubeTSFIDia2/2.; AECT_CTTSFi_CentTubeTSFIDia2/2. + AECT_CTTSth_CentTubeTSthickne; AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne + AECT_CTTSFl_CentTubeTSFlength" /> + <polyplane Rio_Z=" AECT_CTTSFi_CentTubeTSFIDia1/2.; AECT_CTTSFi_CentTubeTSFIDia1/2. + AECT_CTTSth_CentTubeTSthickne; AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne " /> +</pcon> + +<composition name="ECT_TS_CentralTube"> + <posXYZ volume="ECT_TS_CentralTube_inner"/> + <posXYZ volume="ECT_TS_CentralTube_middle" X_Y_Z="0. ; 0.; AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne/2. + GENV_Eps/2."/> + <posXYZ volume="ECT_TS_CentralTube_middle" X_Y_Z="0. ; 0.;-(AECT_CTTSil_CentTubeTSinnlen/2. + 3.*AECT_CTTSth_CentTubeTSthickne/2. + GENV_Eps/2.)"/> + <posXYZ volume="ECT_TS_CentralTube_top" X_Y_Z=" 0. ; 0.; GENV_Eps"/> + <posXYZ volume="ECT_TS_CentralTube_top" X_Y_Z=" 0. ; 0.;-GENV_Eps" rot=" 0.; 180.; 0. "/> + <posXYZ volume="ECT_TS_CentralTube_low" X_Y_Z=" 0. ; 0.; GENV_Eps"/> + <posXYZ volume="ECT_TS_CentralTube_low" X_Y_Z=" 0. ; 0.;-GENV_Eps" rot=" 0.; 180.; 0. "/> +</composition> + +<!-- tie rod and corresponding mounting points attached to main envelope - atlteyv_0026, atlteyv_0027, atlte___0009, atlteys_0001 and derived calculations--> +<var name="AECT_CryStOL0_CryStoutLength0" value=" 545." /> +<var name="AECT_CryStOL1_CryStoutLength1" value=" 400." /> +<var name="AECT_CryStOW0_CryStoutpWidth0" value=" 1080." /> +<var name="AECT_CryStOW1_CryStoutpWidth1" value=" 770." /> +<var name="AECT_CryStOH1_CryStoutRadius" value=" 4530." /> +<var name="AECT_CryStOPZ_CryStoutPosiZ" value=" 50." /> +<var name="AECT_CryStIwi_CryStinnZwidth" value=" 400." /> +<var name="AECT_CryStIhi_CryStinnhight" value=" 250." /> +<var name="AECT_CryStIos_CryStinnoffset" value=" 50." /> +<var name="AECT_CryoStTh_CryoStopThickness" value=" 40." /> +<var name="AECT_TieRodZl_TieRodZlength" value=" 3660." /> +<var name="AECT_TieRodDi_TieRodDiameter" value=" 56." /> +<var name="AECT_TieRodPo_TieRodPhioffset" value=" 71." /> +<var name="AECT_TieRodZo_TieRodZoffset" value=" 135." /> +<var name="AECT_TieRodRo_TieRodRoffset" value=" 75." /> + +<box name="ECT_CryoStop1" material="Aluminium" X_Y_Z=" AECT_CryStOW0_CryStoutpWidth0; AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff); AECT_CryStOL0_CryStoutLength0" /> +<box name="ECT_CryoStop2" material="Aluminium" X_Y_Z=" AECT_CryStOW0_CryStoutpWidth0-2.*AECT_CryoStTh_CryoStopThickness ; AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff) ; AECT_CryStOL0_CryStoutLength0+GENV_Eps " /> +<trd name="ECT_CryoStop3" material="Aluminium" + Xmp_Ymp_Z=" AECT_CryStOW0_CryStoutpWidth0+GENV_Eps ; AECT_CryStOW0_CryStoutpWidth0+GENV_Eps ; + 2.*AECT_CryoStTh_CryoStopThickness ; 2.*(AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff)); AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff) - AECT_CryoStTh_CryoStopThickness" /> +<box name="ECT_CryoStop4" material="Aluminium" X_Y_Z=" AECT_CryStOW1_CryStoutpWidth1; AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff)+GENV_Eps ; AECT_CryStOL0_CryStoutLength0+GENV_Eps " /> +<subtraction name="ECT_EV_CryoStop_outside_basic" > + <posXYZ volume="ECT_CryoStop1" /> + <posXYZ volume="ECT_CryoStop2" X_Y_Z=" 0. ; -AECT_CryoStTh_CryoStopThickness ; 0. " /> + <posXYZ volume="ECT_CryoStop3" X_Y_Z=" 0. ; (AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff))/2. ; -AECT_CryStOL0_CryStoutLength0/2. + AECT_CryStOL1_CryStoutLength1 +(AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff) - AECT_CryoStTh_CryoStopThickness)/2. " /> + <posXYZ volume="ECT_CryoStop4" /> +</subtraction> + +<composition name="ECT_EV_CryoStop_outside_tmp" > + <posXYZ volume="ECT_EV_CryoStop_outside_basic" rot=" 0.; 0.; -90. "/> +</composition> + +<var name="AFT_ECTBrkt_Thickness" value=" 20. " /> +<var name="AFT_ECTBrkt_LowPlateThickness" value=" 30. " /> +<var name="AFT_ECTBrkt_CtrSpacerGap" value=" 360. " /> +<var name="AFT_ECTBrkt_MidSpacerGap" value=" 720. " /> +<var name="AFT_ECTBrkt_SmallXWidth" value="1080. " /> +<var name="AFT_ECTBrkt_TotalXWidth" value="1120. " /> +<var name="AFT_ECTBrkt_TotalYWidth" value=" 230. " /> + +<var name="AFT_ECTBrkt_TopPlate_ZWidth" value=" 115. " /> +<var name="AFT_ECTBrkt_DownPlate_ZWidth" value=" 200. " /> +<var name="AFT_ECTBrkt_SidePlate_ZWidth" value=" 510. " /> +<var name="AFT_ECTBrkt_ZOffset" value=" 165. " /> +<var name="AFT_ECTBrkt_PlateZOffset" value=" 25. " /> +<var name="AFT_ECTBrkt_PlateSmallYOffset" value=" 55. " /> +<var name="AFT_ECTBrkt_PlateBigYOffset" value=" 119.5" /> +<var name="AFT_ECTBrkt_SpacerYOffset" value=" 110. " /> + +<box name="AFT_ECTBrkt_CtrSpacer" material="Iron" X_Y_Z=" AFT_ECTBrkt_CtrSpacerGap; AFT_ECTBrkt_Thickness; AFT_ECTBrkt_TopPlate_ZWidth" /> +<box name="AFT_ECTBrkt_MidSpacer" material="Iron" X_Y_Z=" (AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap)/2.-AFT_ECTBrkt_Thickness; AFT_ECTBrkt_Thickness; AFT_ECTBrkt_TopPlate_ZWidth" /> +<box name="AFT_ECTBrkt_LowCtrPlate" material="Iron" X_Y_Z=" AFT_ECTBrkt_SmallXWidth; AFT_ECTBrkt_Thickness; AFT_ECTBrkt_DownPlate_ZWidth-AFT_ECTBrkt_Thickness" /> +<box name="AFT_ECTBrkt_LowSidePlate" material="Iron" X_Y_Z=" (AFT_ECTBrkt_TotalXWidth-AFT_ECTBrkt_MidSpacerGap)/2.+AFT_ECTBrkt_Thickness; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth" /> +<box name="AFT_ECTBrkt_CrossPlate" material="Iron" X_Y_Z=" AFT_ECTBrkt_SmallXWidth; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_Thickness" /> + +<gvxy name="AFT_ECTBrkt_FrontPlate" material="Iron" dZ="AFT_ECTBrkt_Thickness" > + <gvxy_point X_Y=" 0.; 0. " /> + <gvxy_point X_Y=" 0.; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-AFT_ECTBrkt_Thickness" /> + <gvxy_point X_Y=" AFT_ECTBrkt_PlateZOffset; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-AFT_ECTBrkt_Thickness" /> + <gvxy_point X_Y=" AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_PlateZOffset; AFT_ECTBrkt_PlateZOffset" /> + <gvxy_point X_Y=" AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_PlateZOffset; 0. " /> +</gvxy> + +<gvxy name="AFT_ECTBrkt_SidePlate" material="Iron" dZ="AFT_ECTBrkt_Thickness" > + <gvxy_point X_Y=" 0.; AFT_ECTBrkt_Thickness " /> + <gvxy_point X_Y=" AFT_ECTBrkt_DownPlate_ZWidth-AFT_ECTBrkt_Thickness; AFT_ECTBrkt_Thickness " /> + <gvxy_point X_Y=" AFT_ECTBrkt_DownPlate_ZWidth-AFT_ECTBrkt_Thickness; 0. " /> + <gvxy_point X_Y=" AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset; 0. " /> + <gvxy_point X_Y=" AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset; AFT_ECTBrkt_PlateSmallYOffset " /> + <gvxy_point X_Y=" AFT_ECTBrkt_PlateZOffset; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-AFT_ECTBrkt_Thickness" /> + <gvxy_point X_Y=" 0.; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-AFT_ECTBrkt_Thickness" /> +</gvxy> + +<gvxy name="AFT_ECTBrkt_MiddlePlate" material="Iron" dZ="AFT_ECTBrkt_Thickness" > + <gvxy_point X_Y=" 0.; 0. " /> + <gvxy_point X_Y=" AFT_ECTBrkt_DownPlate_ZWidth-2.*AFT_ECTBrkt_Thickness; 0. " /> + <gvxy_point X_Y=" AFT_ECTBrkt_DownPlate_ZWidth-2.*AFT_ECTBrkt_Thickness; AFT_ECTBrkt_PlateBigYOffset-AFT_ECTBrkt_Thickness " /> + <gvxy_point X_Y=" AFT_ECTBrkt_PlateZOffset; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-2.*AFT_ECTBrkt_Thickness " /> + <gvxy_point X_Y=" 0.; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness-2.*AFT_ECTBrkt_Thickness " /> +</gvxy> + +<box name="AFT_ECTBrkt_GapCloser" material="Iron" X_Y_Z="(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.; AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.; 122." /> <!-- z dimension adjusted from construction --> +<box name="AFT_ECTBrkt_GapCloserRub" material="Carbon" X_Y_Z="(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/1.5; (AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.)/2.; 70." /> + +<composition name="AFT_ECTBrkt_tmp" > + <posXYZ volume="AFT_ECTBrkt_LowSidePlate" X_Y_Z=" ((AFT_ECTBrkt_TotalXWidth-AFT_ECTBrkt_MidSpacerGap)/2.+AFT_ECTBrkt_Thickness)/2.+AFT_ECTBrkt_MidSpacerGap/2.-AFT_ECTBrkt_Thickness; AFT_ECTBrkt_LowPlateThickness/2.; AFT_ECTBrkt_SidePlate_ZWidth/2. " /> + <posXYZ volume="AFT_ECTBrkt_LowSidePlate" X_Y_Z="-((AFT_ECTBrkt_TotalXWidth-AFT_ECTBrkt_MidSpacerGap)/2.+AFT_ECTBrkt_Thickness)/2.-AFT_ECTBrkt_MidSpacerGap/2.+AFT_ECTBrkt_Thickness; AFT_ECTBrkt_LowPlateThickness/2.; AFT_ECTBrkt_SidePlate_ZWidth/2. " /> + <posXYZ volume="AFT_ECTBrkt_LowCtrPlate" X_Y_Z=" 0.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-(AFT_ECTBrkt_DownPlate_ZWidth+AFT_ECTBrkt_Thickness)/2." /> + <posXYZ volume="AFT_ECTBrkt_CrossPlate" X_Y_Z=" 0.; AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness)/2.; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness/2. " /> + <posXYZ volume="AFT_ECTBrkt_FrontPlate" X_Y_Z=" AFT_ECTBrkt_TotalXWidth/2.-AFT_ECTBrkt_Thickness; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset " rot="0.; -90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_FrontPlate" X_Y_Z="-AFT_ECTBrkt_TotalXWidth/2.+AFT_ECTBrkt_Thickness; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset " rot="0.; -90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_SidePlate" X_Y_Z=" AFT_ECTBrkt_SmallXWidth/2.-AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset+AFT_ECTBrkt_Thickness " rot="0.; 90.; 0." /> + <posXYZ volume="AFT_ECTBrkt_SidePlate" X_Y_Z=" AFT_ECTBrkt_Thickness/2.+AFT_ECTBrkt_MidSpacerGap/2.; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset+AFT_ECTBrkt_Thickness " rot="0.; 90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_SidePlate" X_Y_Z="-AFT_ECTBrkt_SmallXWidth/2.+AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset+AFT_ECTBrkt_Thickness " rot="0.; 90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_SidePlate" X_Y_Z="-AFT_ECTBrkt_Thickness/2.-AFT_ECTBrkt_MidSpacerGap/2.; AFT_ECTBrkt_LowPlateThickness; AFT_ECTBrkt_SidePlate_ZWidth-2.*AFT_ECTBrkt_Thickness-AFT_ECTBrkt_ZOffset+AFT_ECTBrkt_Thickness " rot="0.; 90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_MiddlePlate" X_Y_Z=" AFT_ECTBrkt_CtrSpacerGap/2.+AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness " rot="0.; 90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_MiddlePlate" X_Y_Z="-AFT_ECTBrkt_CtrSpacerGap/2.-AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness " rot="0.; 90.; 0."/> + <posXYZ volume="AFT_ECTBrkt_CtrSpacer" X_Y_Z=" 0.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness/2.+AFT_ECTBrkt_SpacerYOffset; -AFT_ECTBrkt_TopPlate_ZWidth/2.+AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness" /> + <posXYZ volume="AFT_ECTBrkt_MidSpacer" X_Y_Z=" (AFT_ECTBrkt_MidSpacerGap+AFT_ECTBrkt_CtrSpacerGap)/4.+AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness/2.+AFT_ECTBrkt_SpacerYOffset; -AFT_ECTBrkt_TopPlate_ZWidth/2.+AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness" /> + <posXYZ volume="AFT_ECTBrkt_MidSpacer" X_Y_Z="-(AFT_ECTBrkt_MidSpacerGap+AFT_ECTBrkt_CtrSpacerGap)/4.-AFT_ECTBrkt_Thickness/2.; AFT_ECTBrkt_LowPlateThickness+AFT_ECTBrkt_Thickness/2.+AFT_ECTBrkt_SpacerYOffset; -AFT_ECTBrkt_TopPlate_ZWidth/2.+AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset-AFT_ECTBrkt_Thickness" /> + <posXYZ volume="AFT_ECTBrkt_GapCloser" X_Y_Z="(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap)/4.+AFT_ECTBrkt_CtrSpacerGap/2.+AFT_ECTBrkt_Thickness/2.; (AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.)/2. + AFT_ECTBrkt_LowPlateThickness+GENV_Eps; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset+123./2."/> + <posXYZ volume="AFT_ECTBrkt_GapCloser" X_Y_Z="-((AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap)/4.+AFT_ECTBrkt_CtrSpacerGap/2.+AFT_ECTBrkt_Thickness/2.); (AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.)/2. + AFT_ECTBrkt_LowPlateThickness+GENV_Eps; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset+123./2."/> + <posXYZ volume="AFT_ECTBrkt_GapCloserRub" X_Y_Z="(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap)/4.+AFT_ECTBrkt_CtrSpacerGap/2.+AFT_ECTBrkt_Thickness/2.; (AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.)/2. + AFT_ECTBrkt_LowPlateThickness+GENV_Eps; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset+124.+70./2."/> + <posXYZ volume="AFT_ECTBrkt_GapCloserRub" X_Y_Z="-((AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap)/4.+AFT_ECTBrkt_CtrSpacerGap/2.+AFT_ECTBrkt_Thickness/2.); (AFT_ECTBrkt_TotalYWidth-AFT_ECTBrkt_LowPlateThickness+(AFT_ECTBrkt_MidSpacerGap-AFT_ECTBrkt_CtrSpacerGap-2.*AFT_ECTBrkt_Thickness)/2.)/2. + AFT_ECTBrkt_LowPlateThickness+GENV_Eps; AFT_ECTBrkt_SidePlate_ZWidth-AFT_ECTBrkt_ZOffset+124.+70./2."/> +</composition> + +<composition name="AFT_ECTBrkt" > + <posXYZ volume="AFT_ECTBrkt_tmp" X_Y_Z=" (AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff))/2.; 0.; -AECT_CryStOL0_CryStoutLength0/2." rot=" 0.; 0.; -90. "/> +</composition> + +<composition name="ECT_EV_CryoStop_outside" > + <posRPhiZ volume="ECT_EV_CryoStop_outside_tmp" R_Phi_Z=" AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff + (AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff))/2.; 22.5; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid +AECT_CryStOL0_CryStoutLength0/2.+AECT_CryStOPZ_CryStoutPosiZ "/> + <posRPhiZ volume="AFT_ECTBrkt" R_Phi_Z=" AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff + (AECT_CryStOH1_CryStoutRadius-(AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff))/2.; 22.5; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid +AECT_CryStOL0_CryStoutLength0/2.+AECT_CryStOPZ_CryStoutPosiZ " /> +</composition> + +<gvxy name="ECT_CryoStop_inside_basic" material="Aluminium" dZ="AECT_CryoStTh_CryoStopThickness"> + <gvxy_point X_Y=" -AECT_CryStIos_CryStinnoffset; 0."/> + <gvxy_point X_Y=" -AECT_CryStIwi_CryStinnZwidth; 0."/> + <gvxy_point X_Y=" -AECT_CryStIwi_CryStinnZwidth; -AECT_CryStIos_CryStinnoffset"/> + <gvxy_point X_Y=" -(AECT_CryStIhi_CryStinnhight-AECT_CryStIos_CryStinnoffset)*GENV_Si45; -AECT_CryStIhi_CryStinnhight"/> + <gvxy_point X_Y=" 0.; -AECT_CryStIhi_CryStinnhight"/> + <gvxy_point X_Y=" 0.; -AECT_CryStIos_CryStinnoffset"/> +</gvxy> + +<tubs name="ECT_TieRod" material="Iron" Rio_Z="0.; AECT_TieRodDi_TieRodDiameter/2.; AECT_TieRodZl_TieRodZlength" nbPhi="20" /> + +<composition name="ECT_EV_CryoStop_inside_basic"> + <posXYZ volume="ECT_CryoStop_inside_basic" X_Y_Z=" (AECT_CryStOW0_CryStoutpWidth0 - AECT_CryoStTh_CryoStopThickness)/2. ; 0.; 0." rot=" 0.; 90.; 0."/> + <posXYZ volume="ECT_CryoStop_inside_basic" X_Y_Z="-(AECT_CryStOW0_CryStoutpWidth0 - AECT_CryoStTh_CryoStopThickness)/2. ; 0.; 0." rot=" 0.; 90.; 0."/> + <posXYZ volume="ECT_TieRod" X_Y_Z=" (AECT_CryStOW0_CryStoutpWidth0)/2. - AECT_CryoStTh_CryoStopThickness - AECT_TieRodPo_TieRodPhioffset; -AECT_CryStIhi_CryStinnhight + AECT_TieRodRo_TieRodRoffset; AECT_TieRodZo_TieRodZoffset + AECT_TieRodZl_TieRodZlength/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="ECT_TieRod" X_Y_Z="-(AECT_CryStOW0_CryStoutpWidth0)/2. + AECT_CryoStTh_CryoStopThickness + AECT_TieRodPo_TieRodPhioffset; -AECT_CryStIhi_CryStinnhight + AECT_TieRodRo_TieRodRoffset; AECT_TieRodZo_TieRodZoffset + AECT_TieRodZl_TieRodZlength/2." rot=" 0.; 0.; 0."/> +</composition> + +<composition name="ECT_EV_CryoStop_inside_tmp" > + <posXYZ volume="ECT_EV_CryoStop_inside_basic" rot=" 0.; 0.; -90. "/> +</composition> + +<composition name="ECT_EV_CryoStop_inside" > + <posRPhiZ volume="ECT_EV_CryoStop_inside_tmp" R_Phi_Z=" AECT_EVEPid_EVEndPlateindist - AECT_EVOSio_EVOutShellinneroff - AECT_EVOSit_EVOutShellinnthick; 22.5; -AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_EVOSCZ_EVOutShellConnZwid "/> +</composition> + +<!-- Atlas End-Cap toroid Service Turret - whole construction approximated --> +<var name="AECT_SrvTu1Dz_ServTur1Dz" value=" 830." /> +<var name="AECT_SrvTu1He_ServTur1Height" value=" 2350." /> <!-- original value 2000, modified due to overlap with new ECT-ServiceTower --> +<var name="AECT_SrvTu1oW_ServTur1OutWidth" value=" 1100." /> +<var name="AECT_SrvTu1iW_ServTur1InnWidth" value=" 1000." /> +<var name="AECT_SrvTu1Ed_ServTur1Edge" value=" 120." /> +<var name="AECT_SrvTu2Dz_ServTur2Dz" value=" 900." /> +<var name="AECT_SrvTu2He_ServTur2Height" value=" 1000." /> +<var name="AECT_SrvTu2oR_ServTur2OutRad" value=" 150." /> +<var name="AECT_SrvTu2iR_ServTur2InnRad" value=" 140." /> +<var name="AECT_SrvTu3Dz_ServTur3Dz" value=" 260." /> +<var name="AECT_SrvTu3He_ServTur3Height" value=" 3650." /> <!-- original value 4000, modified due to overlap with new ECT-ServiceTower --> +<var name="AECT_ServTuZoff_ServTurZoffset" value=" 834." /> + + +<!-- Description of the Atlas End-cap Toroid Service Turret --> + +<gvxysxy name="ECT_ServTur1" material="Aluminium" dZ="AECT_SrvTu1He_ServTur1Height" > + <gvxy_point X_Y=" AECT_SrvTu1oW_ServTur1OutWidth/2. ; AECT_SrvTu1oW_ServTur1OutWidth/2.-AECT_SrvTu1Ed_ServTur1Edge " /> + <gvxy_point X_Y=" AECT_SrvTu1oW_ServTur1OutWidth/2.-AECT_SrvTu1Ed_ServTur1Edge ; AECT_SrvTu1oW_ServTur1OutWidth/2. " /> +</gvxysxy> +<gvxysxy name="ECT_ServTur0" material="Aluminium" dZ="AECT_SrvTu1He_ServTur1Height" > + <gvxy_point X_Y=" AECT_SrvTu1iW_ServTur1InnWidth/2. ; AECT_SrvTu1iW_ServTur1InnWidth/2.-AECT_SrvTu1Ed_ServTur1Edge*AECT_SrvTu1iW_ServTur1InnWidth/AECT_SrvTu1oW_ServTur1OutWidth " /> + <gvxy_point X_Y=" AECT_SrvTu1iW_ServTur1InnWidth/2.-AECT_SrvTu1Ed_ServTur1Edge*AECT_SrvTu1iW_ServTur1InnWidth/AECT_SrvTu1oW_ServTur1OutWidth ; AECT_SrvTu1iW_ServTur1InnWidth/2. " /> +</gvxysxy> +<subtraction name="ECT_ServTurA" > + <posXYZ volume="ECT_ServTur1" rot=" 90.; 0.; 0. "/> + <posXYZ volume="ECT_ServTur0" X_Y_Z=" 0. ; -AECT_SrvTu1oW_ServTur1OutWidth+AECT_SrvTu1iW_ServTur1InnWidth ; 0. " rot=" 90.; 0.; 0. "/> +</subtraction> +<tubs name="ECT_ServTurB1_base" material="Aluminium" Rio_Z="AECT_SrvTu2iR_ServTur2InnRad; AECT_SrvTu2oR_ServTur2OutRad; AECT_SrvTu2He_ServTur2Height + AECT_SrvTu2oR_ServTur2OutRad - GENV_Eps" nbPhi="20" /> +<tubs name="ECT_ServTurB2_base" material="Aluminium" Rio_Z="AECT_SrvTu2iR_ServTur2InnRad; AECT_SrvTu2oR_ServTur2OutRad; AECT_SrvTu2Dz_ServTur2Dz - AECT_SrvTu3Dz_ServTur3Dz + 2.*AECT_SrvTu2oR_ServTur2OutRad" nbPhi="20" /> +<tubs name="ECT_ServTurB3_base" material="Aluminium" Rio_Z="AECT_SrvTu2iR_ServTur2InnRad; AECT_SrvTu2oR_ServTur2OutRad; AECT_SrvTu3He_ServTur3Height + AECT_SrvTu2oR_ServTur2OutRad" nbPhi="20" /> +<box name="ECT_ServTurB_CutBox" material="Aluminium" X_Y_Z="4.*AECT_SrvTu2oR_ServTur2OutRad/GENV_Co45; 4.*AECT_SrvTu2oR_ServTur2OutRad/GENV_Co45; 4.*AECT_SrvTu2oR_ServTur2OutRad/GENV_Co45" /> +<subtraction name="ECT_ServTurB1" > + <posXYZ volume="ECT_ServTurB1_base" X_Y_Z=" 0. ; (AECT_SrvTu2He_ServTur2Height + AECT_SrvTu2oR_ServTur2OutRad + GENV_Eps)/2. + AECT_SrvTu1He_ServTur1Height/2. ; AECT_SrvTu2Dz_ServTur2Dz-AECT_SrvTu1Dz_ServTur1Dz " rot=" 90.; 0.; 0. "/> + <posXYZ volume="ECT_ServTurB_CutBox" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height + 2.*AECT_SrvTu2oR_ServTur2OutRad + AECT_SrvTu1He_ServTur1Height/2.; AECT_SrvTu2Dz_ServTur2Dz-AECT_SrvTu1Dz_ServTur1Dz - 2.*AECT_SrvTu2oR_ServTur2OutRad " rot=" 45.; 0.; 0. "/> +</subtraction> +<subtraction name="ECT_ServTurB2" > + <posXYZ volume="ECT_ServTurB2_base" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height+AECT_SrvTu1He_ServTur1Height/2. ; AECT_SrvTu2Dz_ServTur2Dz-AECT_SrvTu1Dz_ServTur1Dz- (AECT_SrvTu2Dz_ServTur2Dz - AECT_SrvTu3Dz_ServTur3Dz)/2." rot=" 0.; 0.; 0. "/> + <posXYZ volume="ECT_ServTurB_CutBox" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height+AECT_SrvTu1He_ServTur1Height/2. - 2.*AECT_SrvTu2oR_ServTur2OutRad ; AECT_SrvTu2Dz_ServTur2Dz-AECT_SrvTu1Dz_ServTur1Dz + 2.*AECT_SrvTu2oR_ServTur2OutRad - GENV_Eps/2." rot=" 45.; 0.; 0. "/> + <posXYZ volume="ECT_ServTurB_CutBox" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height+AECT_SrvTu1He_ServTur1Height/2. + 2.*AECT_SrvTu2oR_ServTur2OutRad ; AECT_SrvTu2Dz_ServTur2Dz-AECT_SrvTu1Dz_ServTur1Dz - (AECT_SrvTu2Dz_ServTur2Dz - AECT_SrvTu3Dz_ServTur3Dz + 2.*AECT_SrvTu2oR_ServTur2OutRad) + GENV_Eps/2." rot=" 45.; 0.; 0. "/> +</subtraction> +<subtraction name="ECT_ServTurB3" > + <posXYZ volume="ECT_ServTurB3_base" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height+AECT_SrvTu1He_ServTur1Height/2. + (AECT_SrvTu3He_ServTur3Height - AECT_SrvTu2oR_ServTur2OutRad)/2. ; AECT_SrvTu3Dz_ServTur3Dz-AECT_SrvTu1Dz_ServTur1Dz " rot=" 90.; 0.; 0. "/> + <posXYZ volume="ECT_ServTurB_CutBox" X_Y_Z=" 0. ; AECT_SrvTu2He_ServTur2Height+AECT_SrvTu1He_ServTur1Height/2. - 2.*AECT_SrvTu2oR_ServTur2OutRad ; AECT_SrvTu3Dz_ServTur3Dz-AECT_SrvTu1Dz_ServTur1Dz + 2.*AECT_SrvTu2oR_ServTur2OutRad " rot=" 45.; 0.; 0. "/> +</subtraction> +<composition name="ECT_ServTur" > + <posXYZ volume="ECT_ServTurA" /> + <posXYZ volume="ECT_ServTurB1" /> + <posXYZ volume="ECT_ServTurB2" /> + <posXYZ volume="ECT_ServTurB3" /> +</composition> + +<!-- new Description of the Atlas End-cap Toroid Service Tower --> +<!-- Right and Left Leg variables --> +<var name="ECST_zwid" value=" 100.0" /> <!-- atltept_0009-v0.pdf --> <!-- atltept_0018-v0.pdf --> +<var name="ECST_ywid" value=" 6000.0" /> <!-- atltept_0009-v0.pdf --> <!-- atltept_0018-v0.pdf --> +<var name="ECST_RL_xwid" value=" 200. " /> <!-- atltept_0009-v0.pdf --> +<var name="ECST_LL_xwid" value=" 100. " /> <!-- atltept_0018-v0.pdf --> +<var name="ECST_RL_inner_distanceZ" value=" 270. " /> <!-- atltept_0009-v0.pdf --> +<var name="ECST_LL_inner_distanceX" value=" 240. " /> <!-- atltept_0018-v0.pdf --> +<var name="ECST_LL_inner_distanceZ" value=" 270. " /> <!-- atltept_0018-v0.pdf --> +<var name="ECST_RL_ywid" value="ECST_ywid" /> +<var name="ECST_RL_zwid" value="ECST_zwid" /> +<var name="ECST_LL_ywid" value="ECST_ywid" /> +<var name="ECST_LL_zwid" value="ECST_zwid" /> +<var name="ECST_RightLeftLeg_InnerDistanceX" value="1665.+40." /> <!-- atltept_0014-vAA.pdf (added 40 to match) --> + +<!-- Front Arm variables --> +<var name="ECST_Front_Bracket23_topwidth" value=" 77.5" /> <!-- approximate 77.5=(440-130)/4 see altept_0014vAA.pdf --> +<var name="ECST_Front_Hand_width" value=" 10.0"/> +<var name="ECST_Front_Hand_pointAX" value=" 0. "/> <!-- atltept_0033-v0.pdf lower right point--> +<var name="ECST_Front_Hand_pointAY" value=" 0. "/> <!-- atltept_0033-v0.pdf lower right point--> +<var name="ECST_Front_Hand_Gap" value=" 10. "/> <!-- atltept_0033-v0.pdf lower right point--> +<var name="ECST_Front_Bracket_Distance_From_Bottom_Leg" value="2342.5+155+20"/> <!-- atltept_0018-v0.pdf --> +<var name="ECST_Front_Bracket_Distance_From_Leg" value="100"/> <!-- approximate, not calculated --> +<var name="ECST_Front_Bracket_width" value="10.0"/> +<var name="ECST_Front_Bracket_Connector_to_LLRod_ywid" value="195"/> <!-- atlept_0018-v0.pdf--> +<var name="ECST_Front_Hand_pointBX" value="ECST_Front_Hand_pointAX-120.0"/> +<var name="ECST_Front_Hand_pointBY" value="ECST_Front_Hand_pointAY"/> +<var name="ECST_Front_Hand_pointCX" value="ECST_Front_Hand_pointAX-195.0"/> +<var name="ECST_Front_Hand_pointCY" value="ECST_Front_Hand_pointAY+287.0"/> +<var name="ECST_Front_Hand_pointDX" value="ECST_Front_Hand_pointAX-76.1"/> +<var name="ECST_Front_Hand_pointDY" value="ECST_Front_Hand_pointAY+394.1"/> +<var name="ECST_Front_Hand_pointEX" value="ECST_Front_Hand_pointAX"/> +<var name="ECST_Front_Hand_pointEY" value="ECST_Front_Hand_pointAY+220.0"/> + +<!-- Front bar variables --> +<var name="ECST_Front_Bar1_xwid" value=" 200." /> +<var name="ECST_Front_Bar2_xwid" value="1840." /> +<var name="ECST_Front_Bar3_xwid" value=" 130." /> +<var name="ECST_Front_Bar_ywid" value=" 200." /> +<var name="ECST_Front_Bar_zwid" value=" 100." /> +<var name="ECST_Front_Bar_starty" value="1107.5" /><!-- atltept_0014-vAA.pdf 1107.5=6977.5-(5807.5+62.5) with respect to the bottom of the right (or) left leg bar--> +<var name="ECST_Front_Bar_startz" value="1192.5" /><!-- atltept_0014-vAA.pdf 1192.5=12373.5-11181 with respect to the right (or)left leg bar (outer surface--> +<var name="ECST_Front_Bar_xwid" value="ECST_Front_Bar1_xwid+ECST_Front_Bar2_xwid+ECST_Front_Bar3_xwid+2*ECST_Front_Hand_width"/> + +<var name="ECST_vecx_CD" value="ECST_Front_Hand_pointDX-ECST_Front_Hand_pointCX"/> +<var name="ECST_vecy_CD" value="ECST_Front_Hand_pointDY-ECST_Front_Hand_pointCY"/> +<var name="ECST_unit_perp_CDx" value="(-ECST_vecy_CD/ECST_vecx_CD)/sqrt((-ECST_vecy_CD/ECST_vecx_CD)**2+1)"/> +<var name="ECST_unit_perp_CDy" value="(1.)/sqrt((-ECST_vecy_CD/ECST_vecx_CD)**2+1)"/> + +<var name="ECST_Front_Bracket_pointCX" value="ECST_Front_Hand_pointCX+GENV_Eps*ECST_unit_perp_CDx"/> +<var name="ECST_Front_Bracket_pointCY" value="ECST_Front_Hand_pointCY+GENV_Eps*ECST_unit_perp_CDy"/> +<var name="ECST_Front_Bracket_pointDX" value="ECST_Front_Hand_pointDX+GENV_Eps*ECST_unit_perp_CDx"/> +<var name="ECST_Front_Bracket_pointDY" value="ECST_Front_Hand_pointDY+GENV_Eps*ECST_unit_perp_CDy"/> + +<var name="ECST_Front_Bracket_pointFX" value="ECST_Front_Hand_pointAX-(ECST_Front_Bar_startz+ECST_Front_Hand_Gap)+ECST_Front_Bracket_Distance_From_Leg"/> +<var name="ECST_Front_Bracket_pointFY" value="ECST_Front_Hand_pointAY+ECST_Front_Bracket_Distance_From_Bottom_Leg-(ECST_Front_Bar_starty-ECST_Front_Hand_Gap)"/> <!-- atltept_0018-v0.pdf --> +<var name="ECST_Front_Bracket_pointGX" value="ECST_Front_Bracket_pointFX"/> +<var name="ECST_Front_Bracket_pointGY" value="ECST_Front_Bracket_pointFY+ECST_Front_Bracket_Connector_to_LLRod_ywid"/> + +<var name="ECST_Front_Bracket_pointD1X" value="ECST_Front_Bracket_pointDX+ECST_Front_Bracket_width*((ECST_Front_Bracket_pointCX-ECST_Front_Bracket_pointDX)/sqrt((ECST_Front_Bracket_pointDX-ECST_Front_Bracket_pointCX)**2+(ECST_Front_Bracket_pointDY-ECST_Front_Bracket_pointCY)**2))"/> +<var name="ECST_Front_Bracket_pointD1Y" value="ECST_Front_Bracket_pointDY+ECST_Front_Bracket_width*((ECST_Front_Bracket_pointCY-ECST_Front_Bracket_pointDY)/sqrt((ECST_Front_Bracket_pointDX-ECST_Front_Bracket_pointCX)**2+(ECST_Front_Bracket_pointDY-ECST_Front_Bracket_pointCY)**2))"/> +<var name="ECST_Front_Bracket_pointC1X" value="ECST_Front_Bracket_pointCX+ECST_Front_Bracket_width*((ECST_Front_Bracket_pointDX-ECST_Front_Bracket_pointCX)/sqrt((ECST_Front_Bracket_pointDX-ECST_Front_Bracket_pointCX)**2+(ECST_Front_Bracket_pointDY-ECST_Front_Bracket_pointCY)**2))"/> +<var name="ECST_Front_Bracket_pointC1Y" value="ECST_Front_Bracket_pointCY+ECST_Front_Bracket_width*((ECST_Front_Bracket_pointDY-ECST_Front_Bracket_pointCY)/sqrt((ECST_Front_Bracket_pointDX-ECST_Front_Bracket_pointCX)**2+(ECST_Front_Bracket_pointDY-ECST_Front_Bracket_pointCY)**2))"/> + +<var name="ECST_Front_Bracket_pointF1X" value="ECST_Front_Bracket_pointFX"/> +<var name="ECST_Front_Bracket_pointF1Y" value="ECST_Front_Bracket_pointFY+ECST_Front_Bracket_width"/> +<var name="ECST_Front_Bracket_pointG1X" value="ECST_Front_Bracket_pointGX"/> +<var name="ECST_Front_Bracket_pointG1Y" value="ECST_Front_Bracket_pointGY-ECST_Front_Bracket_width"/> +<var name="ECST_vecx_GD" value="ECST_Front_Bracket_pointGX-ECST_Front_Bracket_pointDX"/> +<var name="ECST_vecy_GD" value="ECST_Front_Bracket_pointGY-ECST_Front_Bracket_pointCY"/> +<var name="ECST_unit_perp_GDx" value="(-ECST_vecy_GD/ECST_vecx_GD)/sqrt((-ECST_vecy_GD/ECST_vecx_GD)**2+1)"/> +<var name="ECST_unit_perp_GDy" value="(1.)/sqrt((-ECST_vecy_GD/ECST_vecx_GD)**2+1)"/> + +<var name="ECST_Front_Arm1_widthx" value="ECST_Front_Hand_pointAX-ECST_Front_Bracket_pointGX"/> +<var name="ECST_Front_Arm1_widthy" value="-ECST_Front_Hand_pointAY+ECST_Front_Bracket_pointGY"/> +<var name="ECST_Front_Arm1_widthz" value="ECST_Front_Bracket23_topwidth"/> +<var name="ECST_Front_Arm2_widthx" value="ECST_Front_Hand_pointAX-ECST_Front_Bracket_pointGX"/> +<var name="ECST_Front_Arm2_widthy" value="-ECST_Front_Hand_pointAY+ECST_Front_Bracket_pointGY"/> +<var name="ECST_Front_Arm2_widthz" value="ECST_Front_Bracket23_topwidth"/> + +<var name="ECST_Bar_Length" value="sqrt((ECST_Front_Bracket_pointG1X-ECST_Front_Bracket_pointD1X)**2+(ECST_Front_Bracket_pointG1Y-ECST_Front_Bracket_pointD1Y)**2)"/> + +<!-- Left Leg cover variables --> +<var name="ECST_cover_thickness" value="20."/> +<var name="ECST_cover_dist_rod" value="30."/> +<var name="ECST_Left_Leg_HoleBracket_ypos" value="ECST_Front_Bracket_pointF1Y-ECST_ywid/2+ECST_Front_Bar_starty-ECST_Front_Hand_Gap+80"/> + +<!-- Left Leg Support Frames variables --> +<var name="ECST_SupportFrame_dist_rod" value="30."/> +<var name="ECST_SupportFrame_Thickness" value="20."/> + +<!-- Right Leg Variables --> +<var name="ECST_SupportFrameA_Height" value="370."/> <!-- altept_0009, altept_0012, altept_0018 --> +<var name="ECST_SupportFrameB_Height" value="360."/> +<var name="ECST_SupportFrameC_Height" value="360."/> +<var name="ECST_SupportFrameD_Height" value="150."/> + +<var name="ECST_SupportFrameA_Ypos" value="ECST_ywid/2-ECST_SupportFrameA_Height/2"/> +<var name="ECST_SupportFrameA_Ypos_abs" value="ECST_ywid-ECST_SupportFrameA_Height"/> <!-- starting y --> +<var name="ECST_SupportFrameB_Ypos_abs" value="4060."/> <!-- starting y --> +<var name="ECST_SupportFrameB_Ypos" value="ECST_SupportFrameB_Ypos_abs-ECST_ywid/2+ECST_SupportFrameB_Height/2"/> +<var name="ECST_SupportFrameC_Ypos_abs" value="2343."/> <!-- starting y 2343--> +<var name="ECST_SupportFrameC_Ypos" value="ECST_SupportFrameC_Ypos_abs-ECST_ywid/2+ECST_SupportFrameC_Height/2"/> +<var name="ECST_SupportFrameD_Ypos_abs" value="1108."/> <!-- starting y --> +<var name="ECST_SupportFrameD_Ypos" value="ECST_SupportFrameD_Ypos_abs-ECST_ywid/2+ECST_SupportFrameD_Height/2"/> + +<!-- Middle Pieces Variables --> +<var name="ECST_MiddleBarA_ywid" value=" 160."/> <!-- altept_0022, altept_0023, altept_0024 --> +<var name="ECST_MiddleBarA_width" value=" 20."/> +<var name="ECST_MiddleBarA1_ywid" value="ECST_MiddleBarA_ywid-2*ECST_MiddleBarA_width"/> +<var name="ECST_MiddleBarA1_zwid" value="ECST_MiddleBarA_width"/> +<var name="ECST_MiddleBarA2_xwid" value="1400."/> +<var name="ECST_MiddleBarA2_ywid" value="ECST_MiddleBarA_width"/> +<var name="ECST_MiddleBarA2_zwid" value=" 50."/> +<var name="ECST_MiddleBarA1Back_xpos" value=" 0."/> +<var name="ECST_MiddleBarA1Back_ypos" value=" 0."/> +<var name="ECST_MiddleBarA1Back_zpos" value="ECST_MiddleBarA1_zwid/2."/> +<var name="ECST_MiddleBarA2Back_xpos" value=" 0."/> +<var name="ECST_MiddleBarA2Back_ypos" value="(ECST_MiddleBarA1_ywid+ECST_MiddleBarA2_ywid)/2.+GENV_Eps"/> +<var name="ECST_MiddleBarA2Back_zpos" value="(ECST_MiddleBarA2_zwid)/2."/> +<var name="ECST_MiddleBarA1Front_xpos" value=" 0."/> +<var name="ECST_MiddleBarA1Front_ypos" value=" 0."/> +<var name="ECST_MiddleBarA1Front_zpos" value="ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2-ECST_MiddleBarA1_zwid/2."/> +<var name="ECST_MiddleBarA2Front_xpos" value=" 0."/> +<var name="ECST_MiddleBarA2Front_ypos" value="(ECST_MiddleBarA1_ywid+ECST_MiddleBarA2_ywid)/2+GENV_Eps"/> +<var name="ECST_MiddleBarA2Front_zpos" value="ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2-ECST_MiddleBarA2_zwid/2"/> +<var name="ECST_MiddleBarAFront_ypos" value="ECST_SupportFrameA_Ypos_abs+ECST_SupportFrameA_Height-ECST_MiddleBarA_ywid/2.-GENV_Eps"/> +<var name="ECST_MiddleBarABack_ypos" value="ECST_SupportFrameA_Ypos_abs+ECST_SupportFrameA_Height-ECST_MiddleBarA_ywid/2.-GENV_Eps"/> +<var name="ECST_MiddleBarALow_ypos" value="ECST_SupportFrameA_Ypos_abs+ECST_MiddleBarA_ywid/2.+GENV_Eps"/> +<var name="ECST_MiddleBarB2_xwid" value="1424."/> +<var name="ECST_MiddleBarB_ypos" value="ECST_SupportFrameB_Ypos_abs+ECST_SupportFrameB_Height-ECST_MiddleBarA_ywid/2.-GENV_Eps" /> +<var name="ECST_MiddleBarC2_xwid" value="1420."/> +<var name="ECST_MiddleBarC_ypos" value="ECST_SupportFrameC_Ypos_abs+ECST_SupportFrameC_Height-ECST_MiddleBarA_ywid/2.-GENV_Eps" /> +<var name="ECST_MiddleBarD2_xwid" value="1420."/> +<var name="ECST_MiddleBarD_ypos" value="ECST_SupportFrameD_Ypos_abs+ECST_SupportFrameD_Height-ECST_MiddleBarA_ywid/2.-GENV_Eps" /> + +<var name="ECST_InclinedBar_width" value="20."/> +<var name="ECST_InclinedBar_zwid" value="50."/> +<var name="ECST_InclinedBar_ywid" value="210."/> +<var name="ECST_InclinedBar_ystart" value="ECST_SupportFrameC_Ypos_abs+ECST_SupportFrameC_Height"/> +<var name="ECST_InclinedBar_xstart" value="-(ECST_RightLeftLeg_InnerDistanceX-ECST_SupportFrame_Thickness-ECST_SupportFrame_dist_rod-ECST_cover_dist_rod-ECST_cover_thickness)/2.+GENV_Eps"/> +<var name="ECST_InclinedBar1_p1x" value="ECST_InclinedBar_xstart"/> +<var name="ECST_InclinedBar1_p1y" value="ECST_InclinedBar_ystart+ECST_InclinedBar_width+GENV_Eps"/> +<var name="ECST_InclinedBar1_p2x" value="ECST_InclinedBar1_p1x"/> +<var name="ECST_InclinedBar1_p2y" value="ECST_InclinedBar_ystart+ECST_InclinedBar_ywid-ECST_InclinedBar_width-GENV_Eps"/> +<var name="ECST_InclinedBar1_p3x" value="ECST_InclinedBar_xstart+ECST_RightLeftLeg_InnerDistanceX-(ECST_SupportFrame_dist_rod+ECST_SupportFrame_Thickness)-ECST_cover_thickness-ECST_cover_dist_rod-2.*GENV_Eps"/> +<var name="ECST_InclinedBar1_p3y" value="ECST_SupportFrameB_Ypos_abs+ECST_InclinedBar_ywid-ECST_InclinedBar_width-GENV_Eps"/> +<var name="ECST_InclinedBar1_p4x" value="ECST_InclinedBar_xstart+ECST_RightLeftLeg_InnerDistanceX-(ECST_SupportFrame_dist_rod+ECST_SupportFrame_Thickness)-ECST_cover_thickness-ECST_cover_dist_rod-2.*GENV_Eps"/> +<var name="ECST_InclinedBar1_p4y" value="ECST_SupportFrameB_Ypos_abs+ECST_InclinedBar_width+GENV_Eps"/> + +<var name="ECST_InclinedBar2_p1x" value="ECST_InclinedBar1_p1x"/> +<var name="ECST_InclinedBar2_p1y" value="ECST_InclinedBar_ystart+ECST_InclinedBar_ywid-ECST_InclinedBar_width"/> +<var name="ECST_InclinedBar2_p2x" value="ECST_InclinedBar1_p2x"/> +<var name="ECST_InclinedBar2_p2y" value="ECST_InclinedBar_ystart+ECST_InclinedBar_ywid"/> +<var name="ECST_InclinedBar2_p3x" value="ECST_InclinedBar1_p3x"/> +<var name="ECST_InclinedBar2_p3y" value="ECST_SupportFrameB_Ypos_abs+ECST_InclinedBar_ywid"/> +<var name="ECST_InclinedBar2_p4x" value="ECST_InclinedBar1_p4x"/> +<var name="ECST_InclinedBar2_p4y" value="ECST_SupportFrameB_Ypos_abs+ECST_InclinedBar_ywid-ECST_InclinedBar_width"/> + +<var name="ECST_InclinedBar3_p1x" value="ECST_InclinedBar1_p1x"/> +<var name="ECST_InclinedBar3_p1y" value="ECST_InclinedBar_ystart"/> +<var name="ECST_InclinedBar3_p2x" value="ECST_InclinedBar1_p2x"/> +<var name="ECST_InclinedBar3_p2y" value="ECST_InclinedBar_ystart+ECST_InclinedBar_width"/> +<var name="ECST_InclinedBar3_p3x" value="ECST_InclinedBar1_p3x"/> +<var name="ECST_InclinedBar3_p3y" value="ECST_SupportFrameB_Ypos_abs+ECST_InclinedBar_width"/> +<var name="ECST_InclinedBar3_p4x" value="ECST_InclinedBar1_p4x"/> +<var name="ECST_InclinedBar3_p4y" value="ECST_SupportFrameB_Ypos_abs"/> + +<!-- Front Structure Variables --> <!-- values approximated from photos --> +<var name="ECST_Front_Frame_ywid" value="ECST_Bar_Length*0.92"/> +<var name="ECST_Front_Frame_zwid" value="ECST_Bar_Length*0.624"/> +<var name="ECST_Front_Frame_width" value="26."/> +<var name="ECST_Front_Frame_xwid" value="0.5*ECST_LL_inner_distanceX+ECST_LL_xwid+ECST_RightLeftLeg_InnerDistanceX+ECST_RL_xwid*0.5+2*ECST_Front_Frame_width"/> +<var name="ECST_Front_Frame_xpos" value="0.5*(-0.5*ECST_LL_inner_distanceX-ECST_LL_xwid+ECST_RL_xwid*0.5)"/> +<var name="ECST_Front_Frame_ypos" value="ECST_Front_Bar_starty+ECST_Front_Bar_ywid/2+0.504*ECST_Bar_Length+ECST_Front_Frame_zwid*0.5"/> +<var name="ECST_Front_Frame_zpos" value="ECST_LL_inner_distanceZ+2*ECST_LL_zwid+2*ECST_cover_dist_rod+2*ECST_cover_thickness+ECST_Front_Frame_zwid*0.5+GENV_Eps"/> +<var name="ECST_Front_Glass_xwid" value="ECST_Front_Frame_xwid-200."/> +<var name="ECST_Front_Glass_ywid" value="ECST_Front_Frame_ywid-200."/> +<var name="ECST_Front_Glass_zwid" value="20."/> +<var name="ECST_Front_Frame_UpperPart_ywid" value="5."/> + +<var name="ECST_movez" value="ECST_RL_inner_distanceZ/2+ECST_zwid+ECST_cover_thickness+ECST_cover_dist_rod"/> +<var name="ECST_movey" value="ECST_ywid/2"/> + + +<!-- Right Leg Construction --> +<box name="ECST_Right_Leg_SupportFrameAOuter" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2; ECST_SupportFrameA_Height; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2" /> +<box name="ECST_Right_Leg_SupportFrameAInner" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2; ECST_SupportFrameA_Height+20.0 ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2 " /> +<box name="ECST_Right_Leg_SupportFrameBOuter" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2; ECST_SupportFrameB_Height ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2" /> +<box name="ECST_Right_Leg_SupportFrameBInner" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2; ECST_SupportFrameB_Height+20.0 ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2 " /> +<box name="ECST_Right_Leg_HoleBracket" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2; 300.; 200." /> +<box name="ECST_Right_Leg_SupportFrameCOuter" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2; ECST_SupportFrameC_Height ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2" /> +<box name="ECST_Right_Leg_SupportFrameCInner" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2; ECST_SupportFrameC_Height+20. ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2 " /> +<box name="ECST_Right_Leg_SupportFrameDOuter" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2; ECST_SupportFrameD_Height; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2+ECST_SupportFrame_Thickness*2" /> +<box name="ECST_Right_Leg_SupportFrameDInner" material="Aluminium" X_Y_Z="ECST_RL_xwid+ECST_SupportFrame_dist_rod*2; ECST_SupportFrameD_Height+20.0 ; ECST_RL_inner_distanceZ+2*ECST_RL_zwid+ECST_SupportFrame_dist_rod*2 " /> + +<subtraction name="ECST_Right_Leg_SupportFrameA" > + <posXYZ volume="ECST_Right_Leg_SupportFrameAOuter" /> + <posXYZ volume="ECST_Right_Leg_SupportFrameAInner" /> +</subtraction> +<subtraction name="ECST_Right_Leg_SupportFrameB" > + <posXYZ volume="ECST_Right_Leg_SupportFrameBOuter" /> + <posXYZ volume="ECST_Right_Leg_SupportFrameBInner" /> +</subtraction> +<subtraction name="ECST_Right_Leg_SupportFrameC" > + <posXYZ volume="ECST_Right_Leg_SupportFrameCOuter" /> + <posXYZ volume="ECST_Right_Leg_SupportFrameCInner" /> + <posXYZ volume="ECST_Right_Leg_HoleBracket" X_Y_Z=" 0.; 50.;(ECST_LL_inner_distanceZ/2+ECST_LL_zwid+ECST_cover_dist_rod+ECST_cover_thickness/2) " /> +</subtraction> +<subtraction name="ECST_Right_Leg_SupportFrameD" > + <posXYZ volume="ECST_Right_Leg_SupportFrameDOuter" /> + <posXYZ volume="ECST_Right_Leg_SupportFrameDInner" /> +</subtraction> + +<box name="ECST_Right_Leg_Rod" material="Aluminium" X_Y_Z="ECST_RL_xwid; ECST_RL_ywid ; ECST_RL_zwid" /> +<composition name="ECST_Right_Leg" > + <posXYZ volume="ECST_Right_Leg_Rod" X_Y_Z="0. ; 0. ; ECST_RL_zwid/2+ECST_RL_inner_distanceZ/2" /> + <posXYZ volume="ECST_Right_Leg_Rod" X_Y_Z="0. ; 0. ; -ECST_RL_zwid/2-ECST_RL_inner_distanceZ/2" /> + <posXYZ volume="ECST_Right_Leg_SupportFrameA" X_Y_Z="0.;ECST_SupportFrameA_Ypos; 0." /> + <posXYZ volume="ECST_Right_Leg_SupportFrameB" X_Y_Z="0.;ECST_SupportFrameB_Ypos; 0." /> + <posXYZ volume="ECST_Right_Leg_SupportFrameC" X_Y_Z="0.;ECST_SupportFrameC_Ypos; 0." /> + <posXYZ volume="ECST_Right_Leg_SupportFrameD" X_Y_Z="0.;ECST_SupportFrameD_Ypos; 0." /> +</composition> + +<!-- Left Leg Construction --> +<box name="ECST_Left_Leg_Rod" material="Aluminium" X_Y_Z="ECST_LL_xwid; ECST_LL_ywid ; ECST_LL_zwid" /> +<box name="ECST_Left_Leg_coverouter" material="Aluminium" X_Y_Z="ECST_LL_inner_distanceX+2*ECST_LL_xwid+ECST_cover_dist_rod*2+ECST_cover_thickness*2; ECST_ywid ; ECST_LL_inner_distanceZ+2*ECST_LL_zwid+ECST_cover_dist_rod*2+ECST_cover_thickness*2" /> +<box name="ECST_Left_Leg_coverinner" material="Aluminium" X_Y_Z="ECST_LL_inner_distanceX+2*ECST_LL_xwid+ECST_cover_dist_rod*2; ECST_ywid + 2.*GENV_Eps; ECST_LL_inner_distanceZ+2*ECST_LL_zwid+ECST_cover_dist_rod*2" /> +<box name="ECST_Left_Leg_HoleBracket" material="Aluminium" X_Y_Z="300.; 300.; 200." /> + +<subtraction name="ECST_Left_Leg_cover" > + <posXYZ volume="ECST_Left_Leg_coverouter" /> + <posXYZ volume="ECST_Left_Leg_coverinner" /> + <posXYZ volume="ECST_Left_Leg_HoleBracket" X_Y_Z=" 0.; ECST_Left_Leg_HoleBracket_ypos;(ECST_LL_inner_distanceZ/2+ECST_LL_zwid+ECST_cover_dist_rod+ECST_cover_thickness/2) " /> +</subtraction> +<composition name="ECST_Left_Leg" > + <posXYZ volume="ECST_Left_Leg_cover" /> + <posXYZ volume="ECST_Left_Leg_Rod" X_Y_Z="-ECST_LL_xwid/2.-ECST_LL_inner_distanceX/2.; 0.; ECST_LL_zwid/2.+ECST_LL_inner_distanceZ/2." /> + <posXYZ volume="ECST_Left_Leg_Rod" X_Y_Z="-ECST_LL_xwid/2.-ECST_LL_inner_distanceX/2.; 0.; -ECST_LL_zwid/2.-ECST_LL_inner_distanceZ/2." /> + <posXYZ volume="ECST_Left_Leg_Rod" X_Y_Z="ECST_LL_xwid/2.+ECST_LL_inner_distanceX/2.; 0.; -ECST_LL_zwid/2.-ECST_LL_inner_distanceZ/2." /> + <posXYZ volume="ECST_Left_Leg_Rod" X_Y_Z="ECST_LL_xwid/2.+ECST_LL_inner_distanceX/2.; 0.; ECST_LL_zwid/2.+ECST_LL_inner_distanceZ/2." /> +</composition> + +<!-- Middle Pieces Construction --> +<box name="ECST_MiddleBarA1" material="Aluminium" X_Y_Z="ECST_RightLeftLeg_InnerDistanceX-(ECST_SupportFrame_dist_rod+ECST_SupportFrame_Thickness)-ECST_cover_thickness-ECST_cover_dist_rod-2*GENV_Eps;ECST_MiddleBarA1_ywid-2.*GENV_Eps ; ECST_MiddleBarA1_zwid" /> +<box name="ECST_MiddleBarA2" material="Aluminium" X_Y_Z="ECST_MiddleBarA2_xwid;ECST_MiddleBarA2_ywid;ECST_MiddleBarA2_zwid" /> +<box name="ECST_MiddleBarB2" material="Aluminium" X_Y_Z="ECST_MiddleBarB2_xwid;ECST_MiddleBarA2_ywid;ECST_MiddleBarA2_zwid" /> +<box name="ECST_MiddleBarC2" material="Aluminium" X_Y_Z="ECST_MiddleBarC2_xwid;ECST_MiddleBarA2_ywid;ECST_MiddleBarA2_zwid" /> +<box name="ECST_MiddleBarD2" material="Aluminium" X_Y_Z="ECST_MiddleBarD2_xwid;ECST_MiddleBarA2_ywid;ECST_MiddleBarA2_zwid" /> + +<composition name="ECST_MiddleBars" > + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Front_xpos;ECST_MiddleBarAFront_ypos+ECST_MiddleBarA1Front_ypos;ECST_MiddleBarA1Front_zpos" /> + <posXYZ volume="ECST_MiddleBarA2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarAFront_ypos+ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarA2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarAFront_ypos-ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Back_xpos;ECST_MiddleBarAFront_ypos+ECST_MiddleBarA1Back_ypos;ECST_MiddleBarA1Back_zpos" /> + <posXYZ volume="ECST_MiddleBarA2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarAFront_ypos+ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarA2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarAFront_ypos-1.*ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Front_xpos;ECST_MiddleBarB_ypos+ECST_MiddleBarA1Front_ypos;ECST_MiddleBarA1Front_zpos" /> + <posXYZ volume="ECST_MiddleBarB2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarB_ypos+ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarB2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarB_ypos-ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Back_xpos;ECST_MiddleBarB_ypos+ECST_MiddleBarA1Back_ypos;ECST_MiddleBarA1Back_zpos" /> + <posXYZ volume="ECST_MiddleBarB2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarB_ypos+ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarB2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarB_ypos-1.*ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Front_xpos;ECST_MiddleBarC_ypos+ECST_MiddleBarA1Front_ypos;ECST_MiddleBarA1Front_zpos" /> + <posXYZ volume="ECST_MiddleBarC2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarC_ypos+ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarC2" X_Y_Z="ECST_MiddleBarA2Front_xpos;ECST_MiddleBarC_ypos-ECST_MiddleBarA2Front_ypos; ECST_MiddleBarA2Front_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Back_xpos;ECST_MiddleBarC_ypos+ECST_MiddleBarA1Back_ypos;ECST_MiddleBarA1Back_zpos" /> + <posXYZ volume="ECST_MiddleBarC2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarC_ypos+ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarC2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarC_ypos-1.*ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarA1" X_Y_Z="ECST_MiddleBarA1Back_xpos;ECST_MiddleBarD_ypos+ECST_MiddleBarA1Back_ypos;ECST_MiddleBarA1Back_zpos" /> + <posXYZ volume="ECST_MiddleBarD2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarD_ypos+ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> + <posXYZ volume="ECST_MiddleBarD2" X_Y_Z="ECST_MiddleBarA2Back_xpos;ECST_MiddleBarD_ypos-1.*ECST_MiddleBarA2Back_ypos; ECST_MiddleBarA2Back_zpos" /> +</composition> + +<gvxy name="ECST_InclinedBar1" material="Aluminium" dZ="ECST_InclinedBar_width" > + <gvxy_point X_Y="ECST_InclinedBar1_p1x;ECST_InclinedBar1_p1y" /> + <gvxy_point X_Y="ECST_InclinedBar1_p2x;ECST_InclinedBar1_p2y" /> + <gvxy_point X_Y="ECST_InclinedBar1_p3x;ECST_InclinedBar1_p3y" /> + <gvxy_point X_Y="ECST_InclinedBar1_p4x;ECST_InclinedBar1_p4y" /> +</gvxy> +<gvxy name="ECST_InclinedBar2" material="Aluminium" dZ="ECST_InclinedBar_zwid" > + <gvxy_point X_Y="ECST_InclinedBar2_p1x;ECST_InclinedBar2_p1y" /> + <gvxy_point X_Y="ECST_InclinedBar2_p2x;ECST_InclinedBar2_p2y" /> + <gvxy_point X_Y="ECST_InclinedBar2_p3x;ECST_InclinedBar2_p3y" /> + <gvxy_point X_Y="ECST_InclinedBar2_p4x;ECST_InclinedBar2_p4y" /> +</gvxy> +<gvxy name="ECST_InclinedBar3" material="Aluminium" dZ="ECST_InclinedBar_zwid" > + <gvxy_point X_Y="ECST_InclinedBar3_p1x;ECST_InclinedBar3_p1y" /> + <gvxy_point X_Y="ECST_InclinedBar3_p2x;ECST_InclinedBar3_p2y" /> + <gvxy_point X_Y="ECST_InclinedBar3_p3x;ECST_InclinedBar3_p3y" /> + <gvxy_point X_Y="ECST_InclinedBar3_p4x;ECST_InclinedBar3_p4y" /> +</gvxy> +<composition name="ECST_InclinedBar" > + <posXYZ volume="ECST_InclinedBar1" X_Y_Z="0. ; 0. ; ECST_InclinedBar_width/2." /> + <posXYZ volume="ECST_InclinedBar2" X_Y_Z="0. ; 0. ; ECST_InclinedBar_zwid/2." /> + <posXYZ volume="ECST_InclinedBar3" X_Y_Z="0. ; 0. ; ECST_InclinedBar_zwid/2." /> + <posXYZ volume="ECST_InclinedBar1" X_Y_Z="0. ; 0. ; 2*ECST_movez-ECST_InclinedBar_width/2." /> + <posXYZ volume="ECST_InclinedBar2" X_Y_Z="0. ; 0. ; 2*ECST_movez-ECST_InclinedBar_zwid/2." /> + <posXYZ volume="ECST_InclinedBar3" X_Y_Z="0. ; 0. ; 2*ECST_movez-ECST_InclinedBar_zwid/2." /> +</composition> + +<!-- Front frame Construction (from photos) --> +<box name="ECST_Front_Frame_Outer" material="Aluminium" X_Y_Z="ECST_Front_Frame_xwid; ECST_Front_Frame_ywid ; ECST_Front_Frame_zwid" /> +<box name="ECST_Front_Frame_Inner4" material="Aluminium" X_Y_Z="ECST_Front_Frame_xwid-2*ECST_Front_Frame_width; ECST_Front_Frame_ywid/2. ; ECST_Front_Frame_zwid/2." /> +<box name="ECST_Front_Frame_Inner1" material="Aluminium" X_Y_Z="ECST_Front_Frame_xwid-2*ECST_Front_Frame_width; ECST_Front_Frame_ywid-2*ECST_Front_Frame_width ; ECST_Front_Frame_zwid+200" /> +<box name="ECST_Front_Frame_Inner2" material="Aluminium" X_Y_Z="ECST_Front_Frame_xwid+200; ECST_Front_Frame_ywid-2*ECST_Front_Frame_width ; ECST_Front_Frame_zwid-2*ECST_Front_Frame_width" /> +<box name="ECST_Front_Frame_Inner3" material="Aluminium" X_Y_Z="ECST_Front_Frame_xwid-2*ECST_Front_Frame_width; ECST_Front_Frame_ywid; ECST_Front_Frame_zwid-2*ECST_Front_Frame_width" /> +<subtraction name="ECST_Front_Structure" > + <posXYZ volume="ECST_Front_Frame_Outer" /> + <posXYZ volume="ECST_Front_Frame_Inner1" /> + <posXYZ volume="ECST_Front_Frame_Inner2" /> + <posXYZ volume="ECST_Front_Frame_Inner3" X_Y_Z="0.;-ECST_Front_Frame_UpperPart_ywid;0." /> + <posXYZ volume="ECST_Front_Frame_Inner4" X_Y_Z="0.;- ECST_Front_Frame_ywid/2.;- ECST_Front_Frame_zwid/2." /> +</subtraction> + +<box name="ECST_Front_Glass_Outer" material="std::Polyethylene" X_Y_Z="ECST_Front_Glass_xwid; ECST_Front_Glass_ywid ; ECST_Front_Glass_zwid" /> +<composition name="ECST_Front_Glass" > + <posXYZ volume="ECST_Front_Structure" X_Y_Z="0.; 0.; -2.*GENV_Eps " /> + <posXYZ volume="ECST_Front_Glass_Outer" X_Y_Z="0.;0.;0.5*ECST_Front_Frame_zwid+20." /> +</composition> + + +<!-- Front Bar Construction from atltept_0033-v0.pdf --> +<box name="ECST_Front_Bar1" material="Aluminium" X_Y_Z="ECST_Front_Bar1_xwid-GENV_Eps; ECST_Front_Bar_ywid ; ECST_Front_Bar_zwid" /> +<box name="ECST_Front_Bar2" material="Aluminium" X_Y_Z="ECST_Front_Bar2_xwid-GENV_Eps; ECST_Front_Bar_ywid ; ECST_Front_Bar_zwid" /> +<box name="ECST_Front_Bar3" material="Aluminium" X_Y_Z="ECST_Front_Bar3_xwid-GENV_Eps; ECST_Front_Bar_ywid ; ECST_Front_Bar_zwid" /> +<composition name="ECST_Front_Bar" > + <posXYZ volume="ECST_Front_Bar1" X_Y_Z="ECST_Front_Bar_xwid/2-ECST_Front_Bar1_xwid/2;0.;0." /> + <posXYZ volume="ECST_Front_Bar2" X_Y_Z="ECST_Front_Bar_xwid/2-ECST_Front_Bar1_xwid-ECST_Front_Hand_width-ECST_Front_Bar2_xwid/2;0.;0." /> + <posXYZ volume="ECST_Front_Bar3" X_Y_Z="ECST_Front_Bar_xwid/2-ECST_Front_Bar1_xwid-2*ECST_Front_Hand_width-ECST_Front_Bar2_xwid-ECST_Front_Bar3_xwid/2;0.;0." /> +</composition> +<!-- Arm Construction --> +<!-- ECST_Front_Hand --> +<gvxy name="ECST_Front_Hand" material="Aluminium" dZ="ECST_Front_Hand_width" > + <gvxy_point X_Y="ECST_Front_Hand_pointAX ; ECST_Front_Hand_pointAY " /> + <gvxy_point X_Y="ECST_Front_Hand_pointBX ; ECST_Front_Hand_pointBY " /> + <gvxy_point X_Y="ECST_Front_Hand_pointCX ; ECST_Front_Hand_pointCY " /> + <gvxy_point X_Y="ECST_Front_Hand_pointDX ; ECST_Front_Hand_pointDY " /> + <gvxy_point X_Y="ECST_Front_Hand_pointEX ; ECST_Front_Hand_pointEY " /> +</gvxy> +<!-- ECST_Front_Bracket --> +<gvxy name="ECST_Front_Bracket1" material="Aluminium" dZ="ECST_Front_Bracket_width" > + <gvxy_point X_Y="ECST_Front_Bracket_pointD1X ; ECST_Front_Bracket_pointD1Y " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointC1X ; ECST_Front_Bracket_pointC1Y " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointF1X ; ECST_Front_Bracket_pointF1Y " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointF1X-ECST_Front_Bracket_Distance_From_Leg+GENV_Eps ; ECST_Front_Bracket_pointF1Y " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointG1X-ECST_Front_Bracket_Distance_From_Leg+GENV_Eps ; ECST_Front_Bracket_pointG1Y " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointG1X ; ECST_Front_Bracket_pointG1Y " /> +</gvxy> +<gvxy name="ECST_Front_Bracket2" material="Aluminium" dZ="ECST_Front_Bracket23_topwidth" > + <gvxy_point X_Y="ECST_Front_Bracket_pointDX+GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointDY+GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointD1X+GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointD1Y+GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointG1X+GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointG1Y+GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointGX+GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointGY+GENV_Eps*ECST_unit_perp_GDy " /> +</gvxy> +<gvxy name="ECST_Front_Bracket3" material="Aluminium" dZ="ECST_Front_Bracket23_topwidth" > + <gvxy_point X_Y="ECST_Front_Bracket_pointC1X-GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointC1Y-GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointCX-GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointCY-GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointFX-GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointFY-GENV_Eps*ECST_unit_perp_GDy " /> + <gvxy_point X_Y="ECST_Front_Bracket_pointF1X-GENV_Eps*ECST_unit_perp_GDx ; ECST_Front_Bracket_pointF1Y-GENV_Eps*ECST_unit_perp_GDy " /> +</gvxy> +<!-- ECST_Front_Arm --> +<composition name="ECST_Front_Arm1"> + <posXYZ volume="ECST_Front_Hand" /> + <posXYZ volume="ECST_Front_Bracket1" /> + <posXYZ volume="ECST_Front_Bracket2" X_Y_Z="0.;0.;ECST_Front_Bracket23_topwidth/2" /> + <posXYZ volume="ECST_Front_Bracket3" X_Y_Z="0.;0.;ECST_Front_Bracket23_topwidth/2" /> +</composition> +<composition name="ECST_Front_Arm2"> + <posXYZ volume="ECST_Front_Hand" /> + <posXYZ volume="ECST_Front_Bracket1" /> + <posXYZ volume="ECST_Front_Bracket2" X_Y_Z="0.;0.;-ECST_Front_Bracket23_topwidth/2" /> + <posXYZ volume="ECST_Front_Bracket3" X_Y_Z="0.;0.;-ECST_Front_Bracket23_topwidth/2" /> +</composition> +<!-- ECST_Front --> +<composition name="ECST_Front"> + <posXYZ volume="ECST_Front_Bar" /> + <posXYZ volume="ECST_Front_Arm1" X_Y_Z="ECST_Front_Bar_xwid/2-ECST_Front_Bar1_xwid-ECST_Front_Hand_width/2;-ECST_Front_Bar_ywid/2-ECST_Front_Hand_Gap;ECST_Front_Bar_zwid/2+ECST_Front_Hand_Gap" rot="0.;-90.;0." /> + <posXYZ volume="ECST_Front_Arm1" X_Y_Z="-ECST_Front_Bar_xwid/2-ECST_Front_Hand_width/2;-ECST_Front_Bar_ywid/2-ECST_Front_Hand_Gap;ECST_Front_Bar_zwid/2+ECST_Front_Hand_Gap" rot="0.;-90.;0." /> + <posXYZ volume="ECST_Front_Arm2" X_Y_Z="ECST_Front_Bar_xwid/2+ECST_Front_Hand_width/2;-ECST_Front_Bar_ywid/2-ECST_Front_Hand_Gap;ECST_Front_Bar_zwid/2+ECST_Front_Hand_Gap" rot="0.;-90.;0." /> + <posXYZ volume="ECST_Front_Arm2" X_Y_Z="-ECST_Front_Bar_xwid/2+ECST_Front_Bar3_xwid+ECST_Front_Hand_width/2;-ECST_Front_Bar_ywid/2-ECST_Front_Hand_Gap;ECST_Front_Bar_zwid/2+ECST_Front_Hand_Gap" rot="0.;-90.;0." /> +</composition> + +<composition name="ECT_ServiceTower" > + <posXYZ volume="ECST_Right_Leg" X_Y_Z="ECST_RL_xwid/2.+ECST_RightLeftLeg_InnerDistanceX/2.; ECST_movey; ECST_movez" /> + <posXYZ volume="ECST_Left_Leg" X_Y_Z="-ECST_LL_inner_distanceX/2-ECST_LL_xwid-ECST_RightLeftLeg_InnerDistanceX/2.; ECST_movey; ECST_movez" /> + <posXYZ volume="ECST_MiddleBars" /> + <posXYZ volume="ECST_InclinedBar" /> + <posXYZ volume="ECST_Front" X_Y_Z="ECST_RightLeftLeg_InnerDistanceX/2+ECST_RL_xwid-ECST_Front_Bar_xwid/2; ECST_Front_Bar_starty-ECST_ywid/2+ECST_Front_Bar_ywid/2+ECST_movey; ECST_Front_Bar_startz+ECST_zwid+ECST_RL_inner_distanceZ/2-ECST_Front_Bar_zwid/2+ECST_movez" /> + <posXYZ volume="ECST_Front_Glass" X_Y_Z="ECST_Front_Frame_xpos;ECST_Front_Frame_ypos;ECST_Front_Frame_zpos" /> +</composition> + +<var name="ECST_SToDzBot" value="1650." /> <!-- atczte__0002-vAB 14-JUL-2006 --> +<var name="ECST_SToThic2" value=" 50."/> +<var name="ECST_SToYpos" value="5800." /> <!-- atczte__0002-vAB 14-JUL-2006 --> + +<var name="AECT_SupInnWheel_Thickness" value=" 20. "/> +<var name="AECT_SupInnWheel_Distance" value=" 390. "/> +<var name="AECT_SupInnWheel_SideDY" value=" 160. "/> +<var name="AECT_SupInnWheel_SideDZ" value=" 3010. "/> +<var name="AECT_SupInnWheel_PlateDZ" value=" 160. "/> +<var name="AECT_SupInnWheel_Yoff" value=" 88. "/> + +<var name="AECT_SupOutWheel_Thickness" value=" 71. "/> +<var name="AECT_SupOutWheel_DY" value=" 446. "/> +<var name="AECT_SupOutWheel_XPosInn" value=" 2575. "/> +<var name="AECT_SupOutWheel_XPosOut" value=" 3434. "/> + +<var name="AECT_SupWheel_AirPadSup_addDY" value=" 150. "/> +<var name="AECT_SupWheel_AirPadSup_relZ" value=" 1330. "/> + +<var name="AECT_SupWheel_AirPad_Rad" value=" 350. "/> +<var name="AECT_SupWheel_AirPad_Hight" value=" 125. "/> + +<var name="AECT_SupWheel_dxJackBox_DX" value=" 555. "/> +<var name="AECT_SupWheel_dyJackBox_DY" value=" 110. "/> +<var name="AECT_SupWheel_dzJackBox_DZ" value=" 275. "/> +<var name="AECT_SupWheel_Jack_AbsXPos" value=" 3045. "/> +<var name="AECT_SupWheel_Jack_DiffXPos" value=" 230. "/> +<var name="AECT_SupWheel_Jack_Radius" value=" 80. "/> +<var name="AECT_SupWheel_Jack_Hight" value=" 280. "/> +<var name="AECT_SupWheel_SpecBox_DZ" value=" 2500. "/> + +<var name="AECT_SupWheel_YPos" value="-3945. "/> + +<array name="AECT_SupInnWheel_PlatePos" values=" 350. ; 852. ; 1425. ; 1998. " /> + +<box name="ECT_SupInnWheel_Side" material="Aluminium" X_Y_Z=" AECT_SupInnWheel_Thickness ; AECT_SupInnWheel_SideDY ; AECT_SupInnWheel_SideDZ " /> +<box name="ECT_SupInnWheel_Plate" material="Aluminium" X_Y_Z=" AECT_SupInnWheel_Distance - 2.*AECT_SupInnWheel_Thickness ; AECT_SupInnWheel_Thickness ; AECT_SupInnWheel_PlateDZ " /> +<box name="ECT_SupOutWheel" material="Aluminium" X_Y_Z=" AECT_SupOutWheel_Thickness ; AECT_SupOutWheel_DY ; AECT_EVOShZ_EVOutShellholeZwid - 2.*AECT_EVOSCZ_EVOutShellConnZwid " /> +<box name="ECT_SupWheel_AirPadSup" material="Iron" X_Y_Z=" AECT_SupInnWheel_Distance - 2.*AECT_SupInnWheel_Thickness; AECT_SupInnWheel_SideDY+AECT_SupWheel_AirPadSup_addDY; 2.*(AECT_SupWheel_AirPadSup_relZ-AECT_SupInnWheel_SideDZ/2+AECT_SupInnWheel_PlatePos[0])"/> +<tubs name="ECT_SupWheel_AirPad" material="Iron" Rio_Z=" 0. ; AECT_SupWheel_AirPad_Rad ; AECT_SupWheel_AirPad_Hight"/> +<box name="ECT_SupWheel_JackBox" material="Iron" X_Y_Z="AECT_SupWheel_dxJackBox_DX; AECT_SupWheel_dyJackBox_DY; AECT_SupWheel_dzJackBox_DZ"/> +<tubs name="ECT_SupWheel_Jack" material="Iron" Rio_Z=" 0. ; AECT_SupWheel_Jack_Radius ; AECT_SupWheel_Jack_Hight"/> +<box name="ECT_SupWheel_SpecBox" material="Aluminium" X_Y_Z="AECT_SupInnWheel_SideDY; AECT_SupInnWheel_SideDY; AECT_SupWheel_SpecBox_DZ"/> + +<composition name="ECT_SupWheel_basic"> + <posXYZ volume="ECT_SupOutWheel" X_Y_Z=" (AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn+AECT_SupOutWheel_Thickness)/2.; -AECT_SupOutWheel_DY/2. ; 0. " /> + <posXYZ volume="ECT_SupOutWheel" X_Y_Z="-(AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn+AECT_SupOutWheel_Thickness)/2.; -AECT_SupOutWheel_DY/2. ; 0. " /> + <posXYZ volume="ECT_SupInnWheel_Side" X_Y_Z=" (AECT_SupInnWheel_Distance-AECT_SupInnWheel_Thickness)/2.; -AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff ; 0. " /> + <posXYZ volume="ECT_SupInnWheel_Side" X_Y_Z="-(AECT_SupInnWheel_Distance-AECT_SupInnWheel_Thickness)/2.; -AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff ; 0. " /> + <foreach index="Irib" begin="1" loops="3" > + <posXYZ volume="ECT_SupInnWheel_Plate" X_Y_Z=" 0.; -AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff; -(AECT_SupInnWheel_SideDZ-AECT_SupInnWheel_PlateDZ)/2.+AECT_SupInnWheel_PlatePos[Irib]" /> + </foreach> + <posXYZ volume="ECT_SupInnWheel_Plate" X_Y_Z="0.; (AECT_SupInnWheel_SideDY-AECT_SupInnWheel_Thickness)/2.-AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff; -(AECT_SupInnWheel_SideDZ-AECT_SupInnWheel_PlateDZ)/2.+AECT_SupInnWheel_PlatePos[0] " /> + <posXYZ volume="ECT_SupInnWheel_Plate" X_Y_Z="0.; (AECT_SupInnWheel_SideDY-AECT_SupInnWheel_Thickness)/2.-AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff; (AECT_SupInnWheel_SideDZ-AECT_SupInnWheel_PlateDZ)/2.-AECT_SupInnWheel_PlatePos[0] " /> + <posXYZ volume="ECT_SupWheel_AirPadSup" X_Y_Z="0.; -(AECT_SupInnWheel_SideDY+AECT_SupWheel_AirPadSup_addDY)/2.; AECT_SupWheel_AirPadSup_relZ" /> + <posXYZ volume="ECT_SupWheel_AirPadSup" X_Y_Z="0.; -(AECT_SupInnWheel_SideDY+AECT_SupWheel_AirPadSup_addDY)/2.; -AECT_SupWheel_AirPadSup_relZ" /> + <posXYZ volume="ECT_SupWheel_AirPad" X_Y_Z="0.; -AECT_SupInnWheel_SideDY-AECT_SupWheel_AirPadSup_addDY-AECT_SupWheel_AirPad_Hight/2.; AECT_SupWheel_AirPadSup_relZ " rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_AirPad" X_Y_Z="0.; -AECT_SupInnWheel_SideDY-AECT_SupWheel_AirPadSup_addDY-AECT_SupWheel_AirPad_Hight/2.; -AECT_SupWheel_AirPadSup_relZ " rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_Jack" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY-AECT_SupWheel_Jack_Hight/2.; AECT_EVOShZ_EVOutShellholeZwid/2.-AECT_EVOSCZ_EVOutShellConnZwid" rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_Jack" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos-AECT_SupWheel_Jack_DiffXPos; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY-AECT_SupWheel_Jack_Hight/2.; AECT_EVOShZ_EVOutShellholeZwid/2.-AECT_EVOSCZ_EVOutShellConnZwid" rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_Jack" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY-AECT_SupWheel_Jack_Hight/2.; -AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_EVOSCZ_EVOutShellConnZwid" rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_Jack" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos-AECT_SupWheel_Jack_DiffXPos; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY-AECT_SupWheel_Jack_Hight/2.; -AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_EVOSCZ_EVOutShellConnZwid" rot="90.; 0.; 0."/> + <posXYZ volume="ECT_SupWheel_JackBox" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos-AECT_SupWheel_Jack_DiffXPos/2.; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY/2.; -AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_EVOSCZ_EVOutShellConnZwid" /> + <posXYZ volume="ECT_SupWheel_JackBox" X_Y_Z="(-AECT_SupOutWheel_XPosOut-AECT_SupOutWheel_XPosInn)/2.+AECT_SupWheel_Jack_AbsXPos-AECT_SupWheel_Jack_DiffXPos/2.; -AECT_EVOSso_EVOutShellspecioff-AECT_SupWheel_dyJackBox_DY/2.; AECT_EVOShZ_EVOutShellholeZwid/2.-AECT_EVOSCZ_EVOutShellConnZwid" /> +</composition> + +<composition name="ECT_SupWheel_Right"> + <posXYZ volume="ECT_SupWheel_basic" X_Y_Z=" (AECT_SupOutWheel_XPosOut+AECT_SupOutWheel_XPosInn)/2.; 0.; 0." /> + <posXYZ volume="ECT_SupWheel_SpecBox" X_Y_Z=" AECT_SupOutWheel_XPosOut-AECT_SupInnWheel_SideDY/2.; -AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff; AECT_SupWheel_SpecBox_DZ/2." /> +</composition> + +<composition name="ECT_SupWheel_Left"> + <posXYZ volume="ECT_SupWheel_basic" X_Y_Z=" -(AECT_SupOutWheel_XPosOut+AECT_SupOutWheel_XPosInn)/2.; 0.; 0." rot="0.; 180.; 0."/> + <posXYZ volume="ECT_SupWheel_SpecBox" X_Y_Z=" -AECT_SupOutWheel_XPosOut+AECT_SupInnWheel_SideDY/2.; -AECT_SupInnWheel_SideDY/2.-AECT_SupInnWheel_Yoff; AECT_SupWheel_SpecBox_DZ/2." /> +</composition> + +<composition name="ECT_SuppoWheels" > + <posXYZ volume="ECT_SupWheel_Right" X_Y_Z=" 0. ; AECT_SupWheel_YPos ; 0. " /> + <posXYZ volume="ECT_SupWheel_Left" X_Y_Z=" 0. ; AECT_SupWheel_YPos ; 0. " /> +</composition> + +<composition name="ECT_Toroid_single" > + <mposPhi volume="ECT_ColdMass" ncopy="8" /> + <mposWedge volume="ECT_TS_ThermalShield_default" wedge_number="8" sectors=" 0; 1; 1; 1; 0; 1; 1; 1" > + <sector value="1" step="1" /> + </mposWedge> + <posRPhiZ volume="ECT_TS_ThermalShield_special" R_Phi_Z=" 0. ; -90. ; 0. " > + <sector value="1" /> + </posRPhiZ> + <posRPhiZ volume="ECT_TS_ThermalShield_special" R_Phi_Z=" 0. ;-270. ; 0. " > + <sector value="5" /> + </posRPhiZ> + <posXYZ volume="ECT_TS_CentralTube"/> + <mposWedge volume="ECT_JTV_Shielding_default" wedge_number="8" sectors=" 0; 1; 1; 1; 0; 1; 1; 1" > + <sector value="1" step="1" /> + </mposWedge> + <posRPhiZ volume="ECT_JTV_Shielding_special" R_Phi_Z=" 0. ; -90. ; 0. " > + <sector value="1" /> + </posRPhiZ> + <posRPhiZ volume="ECT_JTV_Shielding_special" R_Phi_Z=" 0. ;-270. ; 0. " > + <sector value="5" /> + </posRPhiZ> + <mposWedge volume="ECT_EV_Envelop_default" wedge_number="8" sectors=" 1; 1; 1; 1; 1; 0; 0; 1" > + <sector value="1" step="1" /> + </mposWedge> + <posRPhiZ volume="ECT_EV_Envelop_special_Sector6" R_Phi_Z=" 0. ; 135. ; 0. " > + <sector value="6" /> + </posRPhiZ> + <posRPhiZ volume="ECT_EV_Envelop_special_Sector7" R_Phi_Z=" 0. ; 180. ; 0. " > + <sector value="7" /> + </posRPhiZ> + <mposWedge volume="ECT_EV_AlignTube_default" wedge_number="8" sectors=" 0; 1; 1; 1; 0; 1; 1; 1" > + <sector value="1" step="1" /> + </mposWedge> + <posRPhiZ volume="ECT_EV_AlignTube_special" R_Phi_Z=" 0. ; 22.5 ; 0. " > + <sector value="1" /> + </posRPhiZ> + <posRPhiZ volume="ECT_EV_AlignTube_special" R_Phi_Z=" 0. ;202.5 ; 0. " > + <sector value="5" /> + </posRPhiZ> + <posXYZ volume="ECT_EV_CentralTube"/> + <posXYZ volume="ECT_JTV_FrontRing" /> + <posXYZ volume="ECT_JTV_BackRing" X_Y_Z=" 0.; 0.; GENV_Eps"/> + <posXYZ volume="ECT_EV_Yoke" X_Y_Z=" 0.; 0.; AECT_CTYpoZ_CentTubeYokeposZ"/> + <posXYZ volume="ECT_EV_Yoke" X_Y_Z=" 0.; 0.; -AECT_CTYpoZ_CentTubeYokeposZ"/> + <posRPhiZ volume="ECT_EV_SideAttachment" R_Phi_Z=" AECT_EVEPid_EVEndPlateindist - (AECT_EVSSAh_EVSideSupporthight + AECT_EVOSit_EVOutShellinnthick + AECT_EVOSio_EVOutShellinneroff)/2. ; 22.5 ; 0. " /> + <posRPhiZ volume="ECT_EV_SideAttachment" R_Phi_Z=" AECT_EVEPid_EVEndPlateindist - (AECT_EVSSAh_EVSideSupporthight + AECT_EVOSit_EVOutShellinnthick + AECT_EVOSio_EVOutShellinneroff)/2. ; 202.5 ; 0. " /> + <posRPhiZ volume="ECT_EV_FrontAttachment" R_Phi_Z=" AECT_EVTSRa_EVTopSupportRadius + (AECT_EVTSAl_EVTopSupportlength)/2. ; 22.5 ; (AECT_EVOShZ_EVOutShellholeZwid - AECT_EVTSAh_EVTopSupporthight)/2." /> + <posRPhiZ volume="ECT_EV_FrontAttachment" R_Phi_Z=" AECT_EVTSRa_EVTopSupportRadius + (AECT_EVTSAl_EVTopSupportlength)/2. ; 202.5 ; (AECT_EVOShZ_EVOutShellholeZwid - AECT_EVTSAh_EVTopSupporthight)/2." /> + <posRPhiZ volume="ECT_EV_BackAttachment" R_Phi_Z=" AECT_EVTSRa_EVTopSupportRadius + (AECT_EVTSAl_EVTopSupportlength)/2. ; 22.5 ; -(AECT_EVOShZ_EVOutShellholeZwid - AECT_EVTSAh_EVTopSupporthight)/2." /> + <posRPhiZ volume="ECT_EV_BackAttachment" R_Phi_Z=" AECT_EVTSRa_EVTopSupportRadius + (AECT_EVTSAl_EVTopSupportlength)/2. ; 202.5 ; -(AECT_EVOShZ_EVOutShellholeZwid - AECT_EVTSAh_EVTopSupporthight)/2." /> + <mposPhi volume="ECT_EV_CryoStop_outside" ncopy="8" /> + <mposPhi volume="ECT_EV_CryoStop_inside" ncopy="8" /> + <posXYZ volume="ECT_ServTur" X_Y_Z=" 0. ; AECT_SrvTu1He_ServTur1Height/2. + AECT_EVEPod_EVEndPlateoutdist - AECT_EVOSio_EVOutShellinneroff; -AECT_EVOShZ_EVOutShellholeZwid/2.+AECT_ServTuZoff_ServTurZoffset" /> + <posXYZ volume="ECT_ServiceTower" X_Y_Z=" 0. ; ECST_SToYpos ; -ECST_SToThic2 - AECT_EVOShZ_EVOutShellholeZwid/2. + AECT_ServTuZoff_ServTurZoffset - ECST_SToDzBot/2. " rot="0. ; 0. ; 0. " /> + <posXYZ volume="ECT_SuppoWheels" /> +</composition> + +<composition name="ECT_ToroidN" > + <posXYZ volume="ECT_Toroid_single" X_Y_Z=" 0. ; 0. ; -AECT_Toroid_ZPosition" > + <ring value="-1" /> + </posXYZ> +</composition> + +<composition name="ECT_ToroidP" > + <posXYZ volume="ECT_Toroid_single" X_Y_Z=" 0. ; 0. ; AECT_Toroid_ZPosition" rot="0. ; 180. ; 0. "> + <ring value=" 1" /> + </posXYZ> +</composition> + +<composition name="ECT_Toroids" > + <posXYZ volume="ECT_ToroidN" X_Y_Z=" 0. ; 0. ; 0." /> + <posXYZ volume="ECT_ToroidP" X_Y_Z=" 0. ; 0. ; 0." /> +</composition> + +<!-- gvxy status 10/25 are converted to subtractions --> + +</section> + + +<section name = "Atlas Barrel Toroidal Magnets" + version = "7.0" + date = "01-01-10, 28 November 2002" + author = "Jochen Meyer, Laurent Chevalier, Marc Virchaux, Daniel Pomarede" + top_volume = "BAR_Toroid"> + +<!-- name = Atlas Barrel Toroidal Magnets section name = "Magnets" --> + +<!-- reviewed/corrected in March 2010 by Jochen Meyer + comment: * blueprint references are available on the twiki Pages + * still some details are missing --> + +<!-- ************************************************************** + ************************************************************** + *** **** + *** Atlas Barrel Toroid (BAR) **** + *** **** + ************************************************************** + ************************************************************** --> + + +<!-- Atlas Barrel toroid Cryostat --> + +<var name="ABRT_CryoRmin" value=" 4720." /> <!-- atltbw__0002-vAD 4745. --> +<var name="ABRT_CryoRmax" value=" 10030." /> <!-- atltbw__0002-vAD 10065. --> +<var name="ABRT_CryoZmax" value=" 12630." /> <!-- atltbyv_0003-vAE --> +<var name="ABRT_CryoRcur" value=" 821." /> <!-- atltbyv_0003-vAE --> +<var name="ABRT_CryoRadi_Radius" value=" 550." /> <!-- atltbyv_0003-vAE --> +<var name="ABRT_CryoRadT_RadThick" value=" 15." /> <!-- not confirmed --> + +<!-- Cryostat Attachment --> + +<!-- BEGIN confirmation with atltbyv_0010-vAB (if no other comment) --> +<var name="ABRT_CryAttD0_CryoAttDiam0" value=" 550." /> +<var name="ABRT_CryAttD1_CryoAttDiam1" value=" 439." /> +<var name="ABRT_CryAttAl_CryoAttAlfa" value=" 8." /> <!-- atltbwv_0029-vAB --> +<var name="ABRT_CryAttXh_CryoAttXhigh" value=" 1490." /> +<var name="ABRT_CryAttTh_CryoAttThick" value=" 10." /> +<var name="ABRT_CryAttRx_CryoAttRmax" value=" ABRT_CryoRmin + ABRT_CryoRadi_Radius" /> +<var name="ABRT_CryAttSe_CryoAttSlimend" value=" 557." /> +<!-- END confirmation with atltbyv_0010-vAB --> + +<!-- BEGIN confirmation with atltbyv_0007-vAC (if no other comment) --> +<var name="ABRT_CryAtWiY_CryoAttWingY" value=" 600." /> +<var name="ABRT_CryAtWXp_CryoAttWingXp" value=" 590." /> +<var name="ABRT_CryAtWXn_CryoAttWingXn" value=" -41." /> +<var name="ABRT_CryAtWBo_CryoAttWingBoss" value=" 40." /> +<var name="ABRT_CryAtWTh_CryoAttWingThick" value=" 20." /> <!-- atltbyv_0004-vAC --> +<var name="ABRT_CryAtWZe_CryoAttWingZesp" value=" 590." /> <!-- atltbyv_0003-vAE --> <!-- atltbyv_0004-vAC --> +<var name="ABRT_CryAtWRa_CryoAttWingRad" value=" 570." /> +<var name="ABRT_CryAtWYc_CryoAttWingYcut" value=" 150." /> +<!-- END confirmation with atltbyv_0007-vAC --> + +<!-- Cryostat Ribs --> + +<!-- BEGIN confirmation with atltbyv_0004-vAC (if no other comment) --> +<var name="ABRT_CryRibYw_CryoRibYwid" value=" 500." /> +<var name="ABRT_CryRibZl_CryoRibZlen" value=" 290." /> <!-- approx. since length is varying for each rib --> +<var name="ABRT_CryRibTh_CryoRibThick" value=" 10." /> +<var name="ABRT_CryRiWYp_CryoRibWingYp" value=" 436." /> +<var name="ABRT_CryRiWYn_CryoRibWingYn" value=" 1100." /> +<var name="ABRT_CryRiWXp_CryoRibWingXp" value=" 430." /> +<var name="ABRT_CryRiWTh_CryoRibWingThick" value=" 10." /> +<var name="ABRT_CryRiWXc_CryoRibWingXncut" value=" 75." /> +<var name="ABRT_CryRiWAn_CryoRibWingAngle" value=" 62." /> +<var name="ABRT_CryRiWXn_CryoRibWingXn" value=" -tan(ABRT_CryRiWAn_CryoRibWingAngle*GENV_PiS180)*(ABRT_CryRiWYn_CryoRibWingYn - ABRT_CryRiWYp_CryoRibWingYp)/2. + ABRT_CryRiWXp_CryoRibWingXp " /> +<!-- END confirmation with atltbyv_0004-vAC --> + +<!-- Cryostat Ring --> + +<var name="ABRT_CryRngRm_CryoRingRmed" value=" 8790." /> <!-- atltbw__0002-vAD--> +<var name="ABRT_CryRngZm_CryoRingZmed" value=" -1030." /> <!-- atltbyv_0003-vAE --> +<var name="ABRT_CryRngRa_CryoRingRadius" value=" 340." /> <!-- atltbyv_0004-vAC --> + + +<!-- Struts --> +<!-- BEGIN confirmation with atltbws_0023-vAA (if no other comment) --> +<var name="ABRT_StrtYlen" value=" 5690." /> +<var name="ABRT_StrtZwid_StrutZwidth" value=" 500." /> +<var name="ABRT_StrtRthi_StrutRthick" value=" 50." /> +<var name="ABRT_StrtPoff_StrutPlateoff" value=" 50." /> +<var name="ABRT_StrtPthi_StrutPlatethick" value=" 50." /> +<var name="ABRT_StrtZthi_StrutZthick" value=" 40." /> +<!-- END confirmation with atltbws_0023-vAA --> + +<var name="ABRT_StrWRmax_StrutWingRmax" value="ABRT_CryoRmax" /> <!-- has to be true, otherwise everything will break down--> + +<!-- BEGIN confirmation with atltbyv_0006-vAB (if no other comment) --> +<var name="ABRT_StrWYmax_StrutWingYmax" value=" 390." /> +<var name="ABRT_StrWYmed_StrutWingYmedi" value=" 791." /> +<var name="ABRT_StrWYRli_StrutWingYRlink" value=" 732." /> +<var name="ABRT_StrWRwid_StrutWingRwidth" value=" 1250." /> +<var name="ABRT_StrWYmin_StrutWingYmin" value=" 245." /> +<var name="ABRT_StrWZthi_StrutWingZthick" value=" 20." /> +<var name="ABRT_StrWYthi_StrutWingYthick" value=" 50." /> +<var name="ABRT_StrWZlen_StrutWingZlen" value=" 430." /> +<var name="ABRT_StrWYucu_StrutWingYupcut" value=" 150." /> +<var name="ABRT_StrWSPth_StrutWingSmallPlatethick" value=" 500." /> +<var name="ABRT_StrWBPth_StrutWingBigPlatethick" value=" 520." /> +<var name="ABRT_StrWBPhi_StrutWingBigPlateheight" value=" 700." /> +<!-- END confirmation with atltbyv_0006-vAB --> + +<array name="ABRT_Zvouss" values=" -10845. ; -8245. ; -5137.5 ; -1712.5 ; 1712.5 ; 5137.5 ; 8245. ; 10845. " /> <!-- atltbyv_0003-vAE --> +<array name="ABRT_Zrib" values=" -9540. ; -6760. ; -3490. ; 0. ; 3490. ; 6760. ; 9540. " /> <!-- atltbyv_0003-vAE --> + + + +<!-- Derived variables --> + +<var name="ABRT_CryRiXhi_CryoRibXhigh" value="(ABRT_CryoRmax+ABRT_CryoRmin)/2. - ABRT_CryoRmin - ABRT_CryoRadi_Radius" /> +<var name="ABRT_CryAttXs_CryoAttXsec" value="(ABRT_CryAttD0_CryoAttDiam0 - 2.*ABRT_CryAttTh_CryoAttThick - ABRT_CryAttD1_CryoAttDiam1)/2./tan(ABRT_CryAttAl_CryoAttAlfa*GENV_PiS180)" /> +<var name="ABRT_StrWRmed_StrutWingRmedi" value="(ABRT_StrtYlen + 2.* ( ABRT_StrWYRli_StrutWingYRlink + ABRT_StrWYthi_StrutWingYthick)) / 2. / GENV_Si225" /> +<var name="ABRT_StrWRmin_StrutWingRmin" value="ABRT_StrWRmax_StrutWingRmax - ABRT_StrWRwid_StrutWingRwidth" /> +<var name="ABRT_StrWYlow_StrutWingYlower" value="(ABRT_StrWRmin_StrutWingRmin - ABRT_StrWYmin_StrutWingYmin * GENV_Ta20 - ABRT_StrWRmed_StrutWingRmedi + ABRT_StrWYmed_StrutWingYmedi / GENV_Ta225 ) / (GENV_Ta675 - GENV_Ta20)" /> +<var name="ABRT_StrWRlow_StrutWingRlower" value="GENV_Ta675 * ABRT_StrWYlow_StrutWingYlower + ABRT_StrWRmed_StrutWingRmedi - ABRT_StrWYmed_StrutWingYmedi / GENV_Ta225 " /> +<var name="ABRT_StrWAlow_StrutWingAlower" value="atan((ABRT_StrWRlow_StrutWingRlower-ABRT_StrWRmax_StrutWingRmax + ABRT_StrWRwid_StrutWingRwidth)/(ABRT_StrWYlow_StrutWingYlower-ABRT_StrWYmin_StrutWingYmin))" /> +<var name="ABRT_StrWAupp_StrutWingAupper" value="atan((ABRT_StrWRmax_StrutWingRmax-ABRT_StrWRmed_StrutWingRmedi)/(ABRT_StrWYmed_StrutWingYmedi-ABRT_StrWYmax_StrutWingYmax))" /> + +<!-- Description of an Atlas Barrel Cold Mass --> + +<!-- BEGIN confirmation with atltbcc_0002-v0 (if no other comment) --> +<var name="ABRT_CoMaRmin_ColdMassRmin" value=" 4851.1" /> <!-- not confirmed, old GUESS 4857.5 --> +<var name="ABRT_CoMaRmax_ColdMassRmax" value=" 9924.3" /> <!-- not confirmed, old GUESS 9952.5 --> +<var name="ABRT_CoMaZmax_ColdMassZmax" value="12478.8" /> <!-- warm: 12532.5 --> +<var name="ABRT_CoMaRcuI_ColdMassRcurv" value=" 1449.8" /> <!-- warm: 1456. --> +<var name="ABRT_CoMaRThi_ColdMassRThick" value=" 791.6" /> <!-- warm: 795. --> +<var name="ABRT_CoMaYThi_ColdMassYThick" value=" 288. " /> <!-- warm: 288. (here warm value used because of ABRT_BielAtTh_BiellAttThick=288. too) --> +<var name="ABRT_CoMaRibZ_ColdMassRibZ" value=" 99.6" /> <!-- warm: 100. --> +<var name="ABRT_CoMaRanL_ColdMassRanglen" value=" 385.6" /> <!-- warm: 387.2 --> +<!-- END confirmation with atltbcc_0002-v0 --> + +<box name="BAR_ColdMassAlongZ" material="Aluminium8" X_Y_Z="ABRT_CoMaRThi_ColdMassRThick; ABRT_CoMaYThi_ColdMassYThick; 2.*(ABRT_CoMaZmax_ColdMassZmax - ABRT_CoMaRcuI_ColdMassRcurv) - GENV_Eps" /> +<box name="BAR_ColdMassAlongR" material="Aluminium8" X_Y_Z="ABRT_CoMaRmax_ColdMassRmax - ABRT_CoMaRmin_ColdMassRmin - 2.*ABRT_CoMaRcuI_ColdMassRcurv - GENV_Eps; ABRT_CoMaYThi_ColdMassYThick; ABRT_CoMaRThi_ColdMassRThick " /> + +<gvxy name="BAR_CornerAngled_Cut" material="Aluminium8" dZ="ABRT_CoMaYThi_ColdMassYThick + GENV_Eps" > + <gvxy_point X_Y=" ABRT_CoMaRThi_ColdMassRThick; -GENV_Eps " /> + <gvxy_point X_Y=" ABRT_CoMaRThi_ColdMassRThick; ABRT_CoMaRcuI_ColdMassRcurv - ABRT_CoMaRThi_ColdMassRThick - ABRT_CoMaRanL_ColdMassRanglen" /> + <gvxy_point X_Y=" ABRT_CoMaRThi_ColdMassRThick + ABRT_CoMaRanL_ColdMassRanglen; ABRT_CoMaRcuI_ColdMassRcurv - ABRT_CoMaRThi_ColdMassRThick" /> + <gvxy_point X_Y=" ABRT_CoMaRcuI_ColdMassRcurv + GENV_Eps; ABRT_CoMaRcuI_ColdMassRcurv - ABRT_CoMaRThi_ColdMassRThick" /> + <gvxy_point X_Y=" ABRT_CoMaRcuI_ColdMassRcurv + GENV_Eps; -GENV_Eps " /> +</gvxy> +<tubs name="BAR_CornerRound" material="Aluminium8" Rio_Z=" 0. ; ABRT_CoMaRcuI_ColdMassRcurv ; ABRT_CoMaYThi_ColdMassYThick" profile="90.; 90." nbPhi="8" /> +<subtraction name="BAR_Corner" > + <posXYZ volume="BAR_CornerRound" X_Y_Z=" ABRT_CoMaRcuI_ColdMassRcurv; 0. ; 0. " rot=" 90. ; 0. ; 0. "/> + <posXYZ volume="BAR_CornerAngled_Cut" X_Y_Z=" 0. ; 0. ; 0. " rot=" 90. ; 0. ; 0. "/> +</subtraction> + +<box name="BAR_ColdMassRib" material="Aluminium8" X_Y_Z=" ABRT_CoMaRmax_ColdMassRmax - ABRT_CoMaRmin_ColdMassRmin - 2.*ABRT_CoMaRThi_ColdMassRThick - GENV_Eps; ABRT_CoMaYThi_ColdMassYThick; ABRT_CoMaRibZ_ColdMassRibZ" /> + +<composition name="BAR_ColdMassCoil" > + <posXYZ volume="BAR_ColdMassAlongZ" X_Y_Z="ABRT_CoMaRmin_ColdMassRmin + ABRT_CoMaRThi_ColdMassRThick/2. ; 0; 0." /> + <posXYZ volume="BAR_ColdMassAlongZ" X_Y_Z="ABRT_CoMaRmax_ColdMassRmax - ABRT_CoMaRThi_ColdMassRThick/2. ; 0; 0." /> + <posXYZ volume="BAR_ColdMassAlongR" X_Y_Z="(ABRT_CoMaRmax_ColdMassRmax+ABRT_CoMaRmin_ColdMassRmin)/2.; 0; ABRT_CoMaZmax_ColdMassZmax - ABRT_CoMaRThi_ColdMassRThick/2." /> + <posXYZ volume="BAR_ColdMassAlongR" X_Y_Z="(ABRT_CoMaRmax_ColdMassRmax+ABRT_CoMaRmin_ColdMassRmin)/2.; 0; -ABRT_CoMaZmax_ColdMassZmax + ABRT_CoMaRThi_ColdMassRThick/2." /> + <posXYZ volume="BAR_Corner" X_Y_Z="ABRT_CoMaRmin_ColdMassRmin ; 0.; ABRT_CoMaZmax_ColdMassZmax - ABRT_CoMaRcuI_ColdMassRcurv" rot=" 0. ; 0. ; 0. " /> + <posXYZ volume="BAR_Corner" X_Y_Z="ABRT_CoMaRmin_ColdMassRmin + ABRT_CoMaRcuI_ColdMassRcurv ; 0.; -ABRT_CoMaZmax_ColdMassZmax" rot=" 0. ; 270. ; 0. " /> + <posXYZ volume="BAR_Corner" X_Y_Z="ABRT_CoMaRmax_ColdMassRmax ; 0.; -ABRT_CoMaZmax_ColdMassZmax + ABRT_CoMaRcuI_ColdMassRcurv" rot=" 0. ; 180. ; 0. " /> + <posXYZ volume="BAR_Corner" X_Y_Z="ABRT_CoMaRmax_ColdMassRmax - ABRT_CoMaRcuI_ColdMassRcurv; 0.; ABRT_CoMaZmax_ColdMassZmax" rot=" 0. ; 90. ; 0. " /> + <foreach index="Irib" begin="0" loops="7" > + <posXYZ volume="BAR_ColdMassRib" X_Y_Z=" (ABRT_CoMaRmax_ColdMassRmax+ABRT_CoMaRmin_ColdMassRmin)/2.; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</composition> + + +<!-- Description of an Atlas Barrel toroid Biellette --> + +<!-- BEGIN confirmation with atltbys_0002-v0 (if no other comment) --> +<var name="ABRT_BielYhei_BiellYheight" value= "1099." /> <!-- approx., explanation see twikipage --> +<var name="ABRT_BielYso1_BiellYsole1" value= " 27." /> <!-- approx., explanation see twikipage --> +<var name="ABRT_BielXsol_BiellXsole" value= " 130." /> +<var name="ABRT_BielXth1_BiellXthick1" value= " 20." /> +<var name="ABRT_BielXth2_BiellXthick2" value= " 30." /> +<var name="ABRT_BielZth1_BiellZthick1" value= " 240." /> +<var name="ABRT_BielRHol_BiellRadHole" value= " 62." /> +<var name="ABRT_BielYcHo_BiellYcenHole" value= " 120." /> +<var name="ABRT_BielElen_BiellEdgeLen" value= " 120." /> +<var name="ABRT_BielYki1_BiellYKink1" value= " 484." /> +<var name="ABRT_BielAki1_BiellAngKink1" value= " 10." /> +<var name="ABRT_BielAppr_BiellApprox" value= " 21." /> <!-- approx., explanation see twikipage --> +<!-- END confirmation with atltbys_0002-v0 --> + +<var name="ABRT_BielYso2_BiellYsole2" value= " GENV_Ta15 * (ABRT_BielXsol_BiellXsole - ABRT_BielXth1_BiellXthick1)/2. + ABRT_BielYso1_BiellYsole1" /> +<var name="ABRT_BielYXHo_BiellXYHole" value= " ABRT_BielElen_BiellEdgeLen * ( -1 + 2.*GENV_Si45 )" /> + +<!-- Aluminium7 to be replaced by Titanium7 !!!! --> +<gvxysx name="BAR_Biellette_1" material="Aluminium7" dZ="ABRT_BielZth1_BiellZthick1" > + <gvxy_point X_Y=" ABRT_BielYXHo_BiellXYHole ; 0. " /> + <gvxy_point X_Y=" ABRT_BielElen_BiellEdgeLen ; ABRT_BielElen_BiellEdgeLen - ABRT_BielYXHo_BiellXYHole " /> + <gvxy_point X_Y=" ABRT_BielElen_BiellEdgeLen ; ABRT_BielElen_BiellEdgeLen + 49.7 " /> + <gvxy_point X_Y=" ABRT_BielXth2_BiellXthick2/2. ; ABRT_BielElen_BiellEdgeLen + 49.7 + (ABRT_BielZth1_BiellZthick1 - ABRT_BielXth2_BiellXthick2)/(2. * tan(40.0*GENV_PiS180)) " /> + <gvxy_point X_Y=" ABRT_BielXth2_BiellXthick2/2. ; ABRT_BielYhei_BiellYheight - ABRT_BielYki1_BiellYKink1 + ABRT_BielAppr_BiellApprox - (ABRT_BielXth2_BiellXthick2 - ABRT_BielXth1_BiellXthick1)/tan(ABRT_BielAki1_BiellAngKink1*GENV_PiS180) " /> + <gvxy_point X_Y=" ABRT_BielXth1_BiellXthick1/2. ; ABRT_BielYhei_BiellYheight - ABRT_BielYki1_BiellYKink1 + ABRT_BielAppr_BiellApprox" /> + <gvxy_point X_Y=" ABRT_BielXth1_BiellXthick1/2. ; ABRT_BielYhei_BiellYheight - ABRT_BielYso2_BiellYsole2 " /> + <gvxy_point X_Y=" ABRT_BielXsol_BiellXsole/2. ; ABRT_BielYhei_BiellYheight - ABRT_BielYso1_BiellYsole1 " /> + <gvxy_point X_Y=" ABRT_BielXsol_BiellXsole/2. ; ABRT_BielYhei_BiellYheight " /> +</gvxysx> +<tubs name="BAR_Biellette_2" material="Aluminium7" Rio_Z="0.; ABRT_BielRHol_BiellRadHole; 300." nbPhi="16" /> +<gvxy name="BAR_Biellette_3" material="Aluminium7" dZ="500." > + <gvxy_point X_Y=" 70. ; -GENV_Eps " /> + <gvxy_point X_Y=" 70. ; 246. " /> + <gvxy_point X_Y=" ABRT_BielZth1_BiellZthick1/2. + GENV_Eps ; 358. " /> + <gvxy_point X_Y=" ABRT_BielZth1_BiellZthick1/2. + GENV_Eps ; -GENV_Eps " /> +</gvxy> +<subtraction name="BAR_Biellette" > + <posXYZ volume="BAR_Biellette_1" /> + <posXYZ volume="BAR_Biellette_2" X_Y_Z=" 0. ; ABRT_BielYcHo_BiellYcenHole ; 0. " /> + <posXYZ volume="BAR_Biellette_3" rot=" 0. ; 90. ; 0. " /> + <posXYZ volume="BAR_Biellette_3" rot=" 0. ; -90. ; 0. " /> +</subtraction> + + +<!-- BEGIN confirmation with atltbcc_0006-v0 (if no other comment) --> +<var name="ABRT_BielAtL1_BiellAttLeng1" value= " 575. " /> +<var name="ABRT_BielAtL2_BiellAttLeng2" value= " 280. " /> +<var name="ABRT_BielAtTh_BiellAttThick" value= " 288. " /> +<var name="ABRT_BielAtHe_BiellAttHeight" value= " 147.5" /> +<!-- END confirmation with atltbcc_0006-v0 --> + +<trd name="BAR_BiellAttFull" material="Aluminium8" Xmp_Ymp_Z=" ABRT_BielAtL1_BiellAttLeng1 ; ABRT_BielAtL2_BiellAttLeng2 ; ABRT_BielAtTh_BiellAttThick ; ABRT_BielAtTh_BiellAttThick ; ABRT_BielAtHe_BiellAttHeight " /> +<gvxysx name="BAR_BiellAttHol" material="Aluminium8" dZ="2.*ABRT_BielAtTh_BiellAttThick" > + <gvxy_point X_Y=" ABRT_BielXsol_BiellXsole*0.6 ; -GENV_Eps " /> + <gvxy_point X_Y=" ABRT_BielXsol_BiellXsole*0.6 ; ABRT_BielYso1_BiellYsole1 " /> + <gvxy_point X_Y=" ABRT_BielXth1_BiellXthick1*0.7 ; ABRT_BielYso2_BiellYsole2+GENV_Eps " /> + <gvxy_point X_Y=" ABRT_BielXth1_BiellXthick1*0.7 ; ABRT_BielAtHe_BiellAttHeight+GENV_Eps " /> +</gvxysx> +<subtraction name="BAR_BiellAtt" > + <posXYZ volume="BAR_BiellAttFull" X_Y_Z=" ABRT_BielAtHe_BiellAttHeight/2. ; 0. ; 0. " rot=" 0. ; 90. ; 0. " /> + <posXYZ volume="BAR_BiellAttHol" rot=" 90. ; 90. ; 0. " /> +</subtraction> + +<composition name="BAR_ColdMass_Sector" > + <posXYZ volume="BAR_ColdMassCoil" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0. " /> + <foreach index="Ivouss" begin="0" loops="8" > + <posXYZ volume="BAR_Biellette" X_Y_Z=" ABRT_CoMaRmin_ColdMassRmin+ABRT_CoMaRThi_ColdMassRThick+ABRT_BielYhei_BiellYheight+GENV_Eps ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 90. " /> + <posXYZ volume="BAR_BiellAtt" X_Y_Z=" ABRT_CoMaRmin_ColdMassRmin+ABRT_CoMaRThi_ColdMassRThick+GENV_Eps ; 0. ; ABRT_Zvouss[Ivouss] " /> + </foreach> +</composition> + + + + +<!-- Description of the Atlas Barrel toroid Cryostat --> + +<!-- basic CryoTube volumes, uncut --> +<tubs name="BAR_CryoTubAlongZBase" material="Iron1" Rio_Z="ABRT_CryoRadi_Radius - ABRT_CryoRadT_RadThick; ABRT_CryoRadi_Radius; 2.*ABRT_CryoZmax - 2.*ABRT_CryoRadi_Radius - ABRT_CryoRcur*sqrt(2.) + 2.*GENV_Ta225*ABRT_CryoRadi_Radius" nbPhi="25" /> +<tubs name="BAR_CryoTubAlongRBase" material="Iron1" Rio_Z="ABRT_CryoRadi_Radius - ABRT_CryoRadT_RadThick; ABRT_CryoRadi_Radius; ABRT_CryoRmax - ABRT_CryoRmin - 2.*ABRT_CryoRadi_Radius - ABRT_CryoRcur*sqrt(2.) + 2.*GENV_Ta225*ABRT_CryoRadi_Radius" nbPhi="32" /> +<tubs name="BAR_CryoTubCornerBase" material="Iron1" Rio_Z="ABRT_CryoRadi_Radius - ABRT_CryoRadT_RadThick; ABRT_CryoRadi_Radius; ABRT_CryoRcur + 2.*GENV_Ta225*ABRT_CryoRadi_Radius" nbPhi="32" /> + +<!-- basic CryoRib volumes, uncut --> +<box name="BAR_CryoRibOut" material="Iron1" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRmin - 2.* ABRT_CryoRadi_Radius ; ABRT_CryRibYw_CryoRibYwid ; ABRT_CryRibZl_CryoRibZlen " /> +<box name="BAR_CryoRibIn" material="Iron6" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRmin - 2.* ABRT_CryoRadi_Radius + 2.*GENV_Eps ; ABRT_CryRibYw_CryoRibYwid-2.*ABRT_CryRibTh_CryoRibThick ; ABRT_CryRibZl_CryoRibZlen-2.*ABRT_CryRibTh_CryoRibThick " /> + +<!-- basic CryoAtt volumes, uncut --> +<pcon name="BAR_CryoAttOut" material="Iron1" nbPhi="20" > + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2. ; 0. " /> + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2. ; ABRT_CryAttXh_CryoAttXhigh - ABRT_CryAttXs_CryoAttXsec - ABRT_CryAttSe_CryoAttSlimend" /> + <polyplane Rio_Z="0. ; ABRT_CryAttD1_CryoAttDiam1/2.+ABRT_CryAttTh_CryoAttThick ; ABRT_CryAttXh_CryoAttXhigh - ABRT_CryAttSe_CryoAttSlimend" /> + <polyplane Rio_Z="0. ; ABRT_CryAttD1_CryoAttDiam1/2.+ABRT_CryAttTh_CryoAttThick ; ABRT_CryAttXh_CryoAttXhigh " /> +</pcon> +<pcon name="BAR_CryoAttIn" material="Iron6" nbPhi="20" > + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2.-ABRT_CryAttTh_CryoAttThick ; -GENV_Eps " /> + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2.-ABRT_CryAttTh_CryoAttThick ; ABRT_CryAttXh_CryoAttXhigh - ABRT_CryAttXs_CryoAttXsec - ABRT_CryAttSe_CryoAttSlimend - ABRT_CryAttTh_CryoAttThick*tan(ABRT_CryAttAl_CryoAttAlfa*GENV_PiS180/2.) " /> + <polyplane Rio_Z="0. ; ABRT_CryAttD1_CryoAttDiam1/2. ; ABRT_CryAttXh_CryoAttXhigh - ABRT_CryAttSe_CryoAttSlimend-ABRT_CryAttTh_CryoAttThick*tan(ABRT_CryAttAl_CryoAttAlfa*GENV_PiS180/2.) " /> + <polyplane Rio_Z="0. ; ABRT_CryAttD1_CryoAttDiam1/2. ; ABRT_CryAttXh_CryoAttXhigh + GENV_Eps " /> +</pcon> + +<!-- CryoTube cut volumes --> +<box name="BAR_CryoTubCutBox" material="Iron1" X_Y_Z="2.*ABRT_CryoRadi_Radius/GENV_Co225; 2.*ABRT_CryoRadi_Radius/GENV_Co225; 2.*ABRT_CryoRadi_Radius/GENV_Co225 " /> +<tubs name="BAR_CryoTubCut" material="Iron1" Rio_Z=" 0. ; ABRT_CryoRadi_Radius+10.*GENV_Eps ; 2.*ABRT_CryRngRa_CryoRingRadius+2.*ABRT_CryRibZl_CryoRibZlen+ABRT_StrWZlen_StrutWingZlen " nbPhi="32" /> + +<!-- Begin of CryoRibWing --> +<gvxysx name="BAR_CryoRibWingA" material="Iron4" dZ=" ABRT_CryRibZl_CryoRibZlen+2.*ABRT_CryRiWTh_CryoRibWingThick+2.*GENV_Eps" > + <gvxy_point X_Y=" ABRT_CryRiWYp_CryoRibWingYp/2. ; ABRT_CryRiWXp_CryoRibWingXp " /> + <gvxy_point X_Y=" ABRT_CryRiWYn_CryoRibWingYn/2. ; ABRT_CryRiWXn_CryoRibWingXn " /> + <gvxy_point X_Y=" ABRT_CryRiWYn_CryoRibWingYn/2. ; -ABRT_CryoRadi_Radius+ABRT_CryRiWXc_CryoRibWingXncut " /> +</gvxysx> +<box name="BAR_CryoRibWingB" material="Iron1" X_Y_Z=" 4.*ABRT_CryoRadi_Radius ; 4.*ABRT_CryoRadi_Radius ; ABRT_CryRibZl_CryoRibZlen+2.*GENV_Eps " /> +<subtraction name="BAR_CryoRibWing" > + <posXYZ volume="BAR_CryoRibWingA" /> + <posXYZ volume="BAR_CryoRibWingB" /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" 0. ; -ABRT_CryoRadi_Radius - 5.*GENV_Eps ; 0. " /> +</subtraction> +<!-- End of CryoRibWing --> + +<!-- Begin of CryoAttWing --> +<gvxysx name="BAR_CryoAttWingA" material="Iron4" dZ=" ABRT_CryAtWZe_CryoAttWingZesp+2.*ABRT_CryAtWTh_CryoAttWingThick" > + <gvxy_point X_Y=" ABRT_CryAtWiY_CryoAttWingY-ABRT_CryAtWBo_CryoAttWingBoss ; ABRT_CryAtWXp_CryoAttWingXp " /> + <gvxy_point X_Y=" ABRT_CryAtWiY_CryoAttWingY ; ABRT_CryAtWXp_CryoAttWingXp-ABRT_CryAtWBo_CryoAttWingBoss " /> + <gvxy_point X_Y=" ABRT_CryAtWiY_CryoAttWingY ; ABRT_CryAtWXn_CryoAttWingXn " /> + <gvxy_point X_Y=" ABRT_CryAtWiY_CryoAttWingY-(2*ABRT_CryoRadi_Radius+ABRT_CryAtWXn_CryoAttWingXn)*GENV_Ta225 ;-2.*ABRT_CryoRadi_Radius " /> +</gvxysx> +<box name="BAR_CryoAttWingB" material="Iron1" X_Y_Z=" 4.*ABRT_CryoRadi_Radius ; 6.*ABRT_CryoRadi_Radius ; ABRT_CryAtWZe_CryoAttWingZesp " /> +<tubs name="BAR_CryoAttWingC" material="Iron4" Rio_Z=" ABRT_CryAtWRa_CryoAttWingRad ; 2.*ABRT_CryAtWRa_CryoAttWingRad ; 2.*ABRT_CryAtWZe_CryoAttWingZesp " profile=" 202.5 ; 135. " nbPhi="16" /> +<box name="BAR_CryoAttWingD" material="Iron1" X_Y_Z=" 2.*ABRT_CryAtWYc_CryoAttWingYcut ; 2.*ABRT_CryoRadi_Radius ; 3.*ABRT_CryAtWZe_CryoAttWingZesp " /> +<subtraction name="BAR_CryoAttWing" > + <posXYZ volume="BAR_CryoAttWingA" /> + <posXYZ volume="BAR_CryoAttWingB" /> + <posXYZ volume="BAR_CryoAttWingC" /> + <posXYZ volume="BAR_CryoTubCut" /> + <posXYZ volume="BAR_CryoAttWingD" X_Y_Z=" 0. ; -ABRT_CryoRadi_Radius ; 0. " /> +</subtraction> +<!-- End of CryoAttWing --> +<!-- laurent --> +<!-- Begin of CryoTube volumes including cuts --> +<subtraction name="BAR_CryoTubAlongZ_Down" > + <posXYZ volume="BAR_CryoTubAlongZBase" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius ; 0. ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius + ABRT_CryoRadi_Radius*GENV_Ta225 ; 0. ; ABRT_CryoZmax - ABRT_CryoRcur/sqrt(2.) - GENV_Eps " rot=" 0. ; 22.5 ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius + ABRT_CryoRadi_Radius*GENV_Ta225 ; 0. ; -(ABRT_CryoZmax - ABRT_CryoRcur/sqrt(2.) - GENV_Eps)" rot=" 0. ; -22.5 ; 0. "/> + <foreach index="Irib" begin="0" loops="7" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="0" loops="8" > + <posXYZ volume="BAR_CryoAttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_CryoTubAlongZ_Up" > + <posXYZ volume="BAR_CryoTubAlongZBase" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRadi_Radius; 0. ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRadi_Radius - ABRT_CryoRadi_Radius*GENV_Ta225 ; 0. ; ABRT_CryoZmax - ABRT_CryoRcur/sqrt(2.) - GENV_Eps " rot=" 0. ; -22.5 ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRadi_Radius - ABRT_CryoRadi_Radius*GENV_Ta225 ; 0. ; -(ABRT_CryoZmax - ABRT_CryoRcur/sqrt(2.) - GENV_Eps)" rot=" 0. ; 22.5 ; 0. "/> + <foreach index="Irib" begin="0" loops="7" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_CryoTubAlongR_Plus" > + <posXYZ volume="BAR_CryoTubAlongRBase" X_Y_Z=" (ABRT_CryoRmin + ABRT_CryoRmax)/2.; 0. ; ABRT_CryoZmax - ABRT_CryoRadi_Radius" rot=" 0. ; 90. ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRcur/sqrt(2.) + GENV_Eps; 0. ; ABRT_CryoZmax - ABRT_CryoRadi_Radius - ABRT_CryoRadi_Radius*GENV_Ta225 " rot=" 0. ; -22.5 ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRcur/sqrt(2.) - GENV_Eps; 0. ; ABRT_CryoZmax - ABRT_CryoRadi_Radius - ABRT_CryoRadi_Radius*GENV_Ta225 " rot=" 0. ; 22.5 ; 0. "/> +</subtraction> + +<subtraction name="BAR_CryoTubCorner" > + <posXYZ volume="BAR_CryoTubCornerBase" X_Y_Z=" (ABRT_CryoRcur + 2.*GENV_Ta225*ABRT_CryoRadi_Radius)/(2.*sqrt(2.)) + ABRT_CryoRadi_Radius/sqrt(2.) + ABRT_CryoRmin; 0. ; (ABRT_CryoRcur + 2.*GENV_Ta225*ABRT_CryoRadi_Radius)/(2.*sqrt(2.)) - ABRT_CryoRadi_Radius/sqrt(2.) + ABRT_CryoZmax - ABRT_CryoRadi_Radius - ABRT_CryoRcur/sqrt(2.) + GENV_Ta225*ABRT_CryoRadi_Radius" rot=" 0. ; 45. ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius - GENV_Ta225*ABRT_CryoRadi_Radius; 0. ; ABRT_CryoZmax - ABRT_CryoRcur/sqrt(2.) - 2.*ABRT_CryoRadi_Radius" rot=" 0. ; 22.5 ; 0. "/> + <posXYZ volume="BAR_CryoTubCutBox" X_Y_Z=" ABRT_CryoRmin + 2.*ABRT_CryoRadi_Radius + ABRT_CryoRcur/sqrt(2.) ; 0. ; ABRT_CryoZmax - ABRT_CryoRadi_Radius + ABRT_CryoRadi_Radius*GENV_Ta225" rot=" 0. ; -22.5 ; 0. "/> +</subtraction> +<!-- End of CryoTube with cuts --> + +<!-- Begin of barrel toroid thermal shielding between CryoTub and Coldmass --> +<var name="BAR_ThermShield_OuterAngle" value=" 35. " /> +<var name="BAR_ThermShield_InnerAngle" value=" 30. " /> + +<var name="BAR_ThermShield_Thickness" value=" 5. " /> +<var name="BAR_ThermShield_YHight" value=" 656. " /> +<var name="BAR_ThermShield_OuterXLenght" value=" 152. " /> +<var name="BAR_ThermShield_InnerXLenght" value=" 121. " /> +<var name="BAR_ThermShield_TopXLenght" value=" 657. " /> +<var name="BAR_ThermShield_XOverlap" value=" 35. " /> + +<!-- <var name="BAR_ThermShield_TotalZLength" value=" 25105. " /> replaced by Zmax of coldmass to be consistent, arbitrary value added to resolve overlap, difference after adding arbitrary value of 80 is 67.4 mm --> +<var name="BAR_ThermShield_TotalZLength" value=" 2.*ABRT_CoMaZmax_ColdMassZmax + 80. " /> +<!-- <var name="BAR_ThermShield_TotalXLength" value=" 5135. " /> replaced by radius diff of coldmass to be consistent, difference 61.8 mm, adding arbitrary value to resolve overlap, afterwards only 11.8mm diff --> +<var name="BAR_ThermShield_RadiusMin" value="ABRT_CoMaRmin_ColdMassRmin - 25. " /> +<var name="BAR_ThermShield_RadiusMax" value="ABRT_CoMaRmax_ColdMassRmax + 25. " /> +<var name="BAR_ThermShield_TotalXLength" value="BAR_ThermShield_RadiusMax - BAR_ThermShield_RadiusMin" /> +<var name="BAR_ThermShield_OuterEdgeLen" value=" 1217.4 " /> + +<var name="BAR_ThermShield_XLenght" value="BAR_ThermShield_TopXLenght+BAR_ThermShield_InnerXLenght+BAR_ThermShield_OuterXLenght-2.*BAR_ThermShield_XOverlap" /> + +<gvxysx name="BAR_ThermShield_AlongZOuter" material="Aluminium1" dZ="(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5.-GENV_Eps"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) ; BAR_ThermShield_XLenght/2." /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2.+ BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) ; -BAR_ThermShield_XLenght/2." /> +</gvxysx> + +<gvxysx name="BAR_ThermShield_AlongZInner" material="Aluminium1" dZ="(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5.-GENV_Eps"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_InnerAngle/2.*GENV_PiS180); BAR_ThermShield_XLenght/2. - BAR_ThermShield_Thickness" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap - BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_InnerAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap + BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_OuterAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_OuterAngle/2.*GENV_PiS180); -BAR_ThermShield_XLenght/2. + BAR_ThermShield_Thickness" /> +</gvxysx> + +<gvxysx name="BAR_ThermShield_AlongROuter" material="Aluminium1" dZ="BAR_ThermShield_TotalXLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45 - GENV_Eps"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) ; BAR_ThermShield_XLenght/2." /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2.+ BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) ; -BAR_ThermShield_XLenght/2." /> +</gvxysx> + +<gvxysx name="BAR_ThermShield_AlongRInner" material="Aluminium1" dZ="BAR_ThermShield_TotalXLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45 - GENV_Eps"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_InnerAngle/2.*GENV_PiS180); BAR_ThermShield_XLenght/2. - BAR_ThermShield_Thickness" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap - BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_InnerAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap + BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_OuterAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_OuterAngle/2.*GENV_PiS180); -BAR_ThermShield_XLenght/2. + BAR_ThermShield_Thickness" /> +</gvxysx> + +<gvxysx name="BAR_ThermShield_CornerOuter" material="Aluminium1" dZ="BAR_ThermShield_OuterEdgeLen"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) ; BAR_ThermShield_XLenght/2." /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. + BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2.+ BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) ; -BAR_ThermShield_XLenght/2." /> +</gvxysx> + +<gvxysx name="BAR_ThermShield_CornerInner" material="Aluminium1" dZ="BAR_ThermShield_OuterEdgeLen"> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_InnerXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_InnerAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_InnerAngle/2.*GENV_PiS180); BAR_ThermShield_XLenght/2. - BAR_ThermShield_Thickness" /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght + BAR_ThermShield_XOverlap - BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_InnerAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; BAR_ThermShield_XLenght/2. - BAR_ThermShield_InnerXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - BAR_ThermShield_Thickness ; -BAR_ThermShield_XLenght/2. + BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap + BAR_ThermShield_Thickness * tan( (90.-BAR_ThermShield_OuterAngle)/2.*GENV_PiS180) " /> + <gvxy_point X_Y=" BAR_ThermShield_YHight/2. - (BAR_ThermShield_OuterXLenght - BAR_ThermShield_XOverlap)/tan( BAR_ThermShield_OuterAngle*GENV_PiS180) - BAR_ThermShield_Thickness*tan( BAR_ThermShield_OuterAngle/2.*GENV_PiS180); -BAR_ThermShield_XLenght/2. + BAR_ThermShield_Thickness" /> +</gvxysx> + +<box name="BAR_ThermShield_CutBox" material="Aluminium1" X_Y_Z="BAR_ThermShield_XLenght/GENV_Co225; BAR_ThermShield_XLenght/GENV_Co225; BAR_ThermShield_XLenght/GENV_Co225" /> + +<pcon name="BAR_ThermShield_AttIn" material="Aluminium1" nbPhi="20" > + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2. + 20. ; -GENV_Eps " /> + <polyplane Rio_Z="0. ; ABRT_CryAttD0_CryoAttDiam0/2. + 20. ; ABRT_CryAttXh_CryoAttXhigh + GENV_Eps " /> +</pcon> + +<subtraction name="BAR_ThermShield_AlongZ_Down_Part1" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; 2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; 2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. + BAR_ThermShield_XLenght/2.*GENV_Ta225 ; 0. ; BAR_ThermShield_TotalZLength/2. - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - GENV_Eps " rot=" 0. ; 22.5 ; 0. "/> + <foreach index="Irib" begin="6" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="6" loops="2" > + <posXYZ volume="BAR_ThermShield_AttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Down_Part2" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; (BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; (BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <foreach index="Irib" begin="4" loops="2" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="5" loops="1" > + <posXYZ volume="BAR_ThermShield_AttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Down_Part3" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; 0. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; 0. " rot=" 0. ; 0. ; -90. "/> + <foreach index="Irib" begin="3" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="3" loops="2" > + <posXYZ volume="BAR_ThermShield_AttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Down_Part4" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; -(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; -(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <foreach index="Irib" begin="1" loops="2" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="2" loops="1" > + <posXYZ volume="BAR_ThermShield_AttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Down_Part5" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; -2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. ; 0. ; -2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght/2. + BAR_ThermShield_XLenght/2.*GENV_Ta225 ; 0. ; -(BAR_ThermShield_TotalZLength/2. - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - GENV_Eps)" rot=" 0. ; -22.5 ; 0. "/> + <foreach index="Irib" begin="0" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> + <foreach index="Ivouss" begin="0" loops="2" > + <posXYZ volume="BAR_ThermShield_AttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 90. ; 0. " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Up_Part1" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; 2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; 2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. - BAR_ThermShield_XLenght/2.*GENV_Ta225 ; 0. ; BAR_ThermShield_TotalZLength/2. - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - GENV_Eps " rot=" 0. ; -22.5 ; 0. "/> + <foreach index="Irib" begin="6" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Up_Part2" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; (BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; (BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <foreach index="Irib" begin="4" loops="2" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Up_Part3" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; 0. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; 0. " rot=" 0. ; 0. ; 90. "/> + <foreach index="Irib" begin="3" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Up_Part4" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; -(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; -(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <foreach index="Irib" begin="1" loops="2" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongZ_Up_Part5" > + <posXYZ volume="BAR_ThermShield_AlongZOuter" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; -2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_AlongZInner" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. ; 0. ; -2.*(BAR_ThermShield_TotalZLength - 2.*BAR_ThermShield_OuterEdgeLen*GENV_Si45)/5. " rot=" 0. ; 0. ; 90. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMax - BAR_ThermShield_XLenght/2. - BAR_ThermShield_XLenght/2.*GENV_Ta225 ; 0. ; -(BAR_ThermShield_TotalZLength/2. - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - GENV_Eps)" rot=" 0. ; 22.5 ; 0. "/> + <foreach index="Irib" begin="0" loops="1" > + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax+ABRT_CryoRmin)/2. ; 0. ; ABRT_Zrib[Irib] " /> + </foreach> +</subtraction> + +<subtraction name="BAR_ThermShield_AlongR" > + <posXYZ volume="BAR_ThermShield_AlongROuter" X_Y_Z=" (BAR_ThermShield_RadiusMin + BAR_ThermShield_RadiusMax)/2.; 0. ; (BAR_ThermShield_TotalZLength - BAR_ThermShield_XLenght)/2. " rot=" -90. ; 0. ; -90. " /> + <posXYZ volume="BAR_ThermShield_AlongRInner" X_Y_Z=" (BAR_ThermShield_RadiusMin + BAR_ThermShield_RadiusMax)/2.; 0. ; (BAR_ThermShield_TotalZLength - BAR_ThermShield_XLenght)/2. " rot=" -90. ; 0. ; -90. " /> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMin + (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) + GENV_Eps; 0. ; BAR_ThermShield_TotalZLength/2. - BAR_ThermShield_XLenght/2. - BAR_ThermShield_XLenght/2.*GENV_Ta225 " rot=" 0. ; -22.5 ; 0. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMax - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - GENV_Eps; 0. ; BAR_ThermShield_TotalZLength/2. - BAR_ThermShield_XLenght/2. - BAR_ThermShield_XLenght/2.*GENV_Ta225 " rot=" 0. ; 22.5 ; 0. "/> +</subtraction> + +<subtraction name="BAR_ThermShield_Corner" > + <posXYZ volume="BAR_ThermShield_CornerOuter" X_Y_Z=" (BAR_ThermShield_OuterEdgeLen)/(2.*sqrt(2.)) + BAR_ThermShield_XLenght/2./sqrt(2.) + BAR_ThermShield_RadiusMin; 0. ; - (BAR_ThermShield_OuterEdgeLen)/(2.*sqrt(2.)) + (2.+sqrt(2.))*BAR_ThermShield_XLenght*GENV_Ta225/(2.*sqrt(2.)) - (1.+sqrt(2.))*BAR_ThermShield_XLenght/(2.*sqrt(2.)) + BAR_ThermShield_TotalZLength/2." rot=" -45. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_CornerInner" X_Y_Z=" (BAR_ThermShield_OuterEdgeLen)/(2.*sqrt(2.)) + BAR_ThermShield_XLenght/2./sqrt(2.) + BAR_ThermShield_RadiusMin; 0. ; - (BAR_ThermShield_OuterEdgeLen)/(2.*sqrt(2.)) + (2.+sqrt(2.))*BAR_ThermShield_XLenght*GENV_Ta225/(2.*sqrt(2.)) - (1.+sqrt(2.))*BAR_ThermShield_XLenght/(2.*sqrt(2.)) + BAR_ThermShield_TotalZLength/2." rot=" -45. ; 0. ; -90. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMin + (1. - GENV_Ta225)*BAR_ThermShield_XLenght/2.; 0. ; BAR_ThermShield_TotalZLength/2. - (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) - BAR_ThermShield_XLenght" rot=" 0. ; 22.5 ; 0. "/> + <posXYZ volume="BAR_ThermShield_CutBox" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_XLenght + (BAR_ThermShield_OuterEdgeLen-BAR_ThermShield_XLenght*GENV_Ta225)/sqrt(2.) ; 0. ; BAR_ThermShield_TotalZLength/2. - BAR_ThermShield_XLenght/2.*(1. -GENV_Ta225)" rot=" 0. ; -22.5 ; 0. "/> +</subtraction> + +<composition name="BAR_ThermShield_Sector" > + <posXYZ volume="BAR_ThermShield_AlongZ_Down_Part1" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Down_Part2" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Down_Part3" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Down_Part4" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Down_Part5" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Up_Part1" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Up_Part2" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Up_Part3" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Up_Part4" /> + <posXYZ volume="BAR_ThermShield_AlongZ_Up_Part5" /> + <posXYZ volume="BAR_ThermShield_AlongR" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="BAR_ThermShield_AlongR" X_Y_Z=" 0.; 0.; 0." rot=" 0. ; 180. ; 180. "/> + <posXYZ volume="BAR_ThermShield_Corner" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="BAR_ThermShield_Corner" X_Y_Z=" 0.; 0.; 0." rot=" 0. ; 180. ; 180. "/> + <posXYZ volume="BAR_ThermShield_Corner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_RadiusMax; 0.; 0." rot=" 0. ; 180. ; 0. "/> + <posXYZ volume="BAR_ThermShield_Corner" X_Y_Z=" BAR_ThermShield_RadiusMin + BAR_ThermShield_RadiusMax; 0.; 0." rot=" 0. ; 0. ; 180. "/> +</composition> + +<!-- End of barrel toroid thermal shielding --> + +<var name="AFT_BTBrktInf_BackPlate_XLong" value="1080. " /> +<var name="AFT_BTBrktInf_BackPlate_XOff" value=" 140. " /> +<var name="AFT_BTBrktInf_BackPlate_XGap" value=" 190. " /> + +<var name="AFT_BTBrktInf_BackPlate_YLong" value=" 305. " /> +<var name="AFT_BTBrktInf_BackPlate_YAngle" value=" 22. " /> +<var name="AFT_BTBrktInf_BackPlate_YOff" value=" 150. " /> +<var name="AFT_BTBrktInf_BackPlate_YGap" value=" 40. " /> + +<var name="AFT_BTBrktInf_BackPlate_Thickness" value=" 20. " /> + +<gvxysx name="AFT_BTBrktInf_BackPlate" material="Iron" dZ="AFT_BTBrktInf_BackPlate_Thickness" > + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_BackPlate_XOff-AFT_BTBrktInf_BackPlate_XGap; 0."/> + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_BackPlate_XOff-AFT_BTBrktInf_BackPlate_XGap; AFT_BTBrktInf_BackPlate_YGap"/> + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_BackPlate_XOff; AFT_BTBrktInf_BackPlate_YGap"/> + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_BackPlate_XOff; 0."/> + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.; 0."/> + <gvxy_point X_Y="AFT_BTBrktInf_BackPlate_XLong/2.; AFT_BTBrktInf_BackPlate_YOff"/> + <gvxy_point X_Y="(AFT_BTBrktInf_BackPlate_XLong/2.)-((AFT_BTBrktInf_BackPlate_YLong-AFT_BTBrktInf_BackPlate_YOff)*tan(AFT_BTBrktInf_BackPlate_YAngle*GENV_PiS180)); AFT_BTBrktInf_BackPlate_YLong"/> +</gvxysx> + +<var name="AFT_BTBrktInf_ZLength" value=" 280. " /> +<var name="AFT_BTBrktInf_TopCentralXLong" value=" 590. " /> +<var name="AFT_BTBrktInf_CentralSpacerYLong" value=" 80. " /> +<var name="AFT_BTBrktInf_YSpacerTotal" value=" 168. " /> + +<var name="AFT_BTBrktInf_CentralSpacerOffsetX" value=" 407. " /> +<var name="AFT_BTBrktInf_SideSpacerOffsetX" value=" 42.5" /> + +<box name="AFT_BTBrktInf_LowCenterLongX" material="Iron" X_Y_Z="AFT_BTBrktInf_BackPlate_XLong-2.*(AFT_BTBrktInf_BackPlate_XOff+AFT_BTBrktInf_BackPlate_XGap); AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength" /> +<box name="AFT_BTBrktInf_LowSideLongX" material="Iron" X_Y_Z="AFT_BTBrktInf_BackPlate_XOff; AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength" /> +<box name="AFT_BTBrktInf_TopCenterLongX" material="Iron" X_Y_Z="AFT_BTBrktInf_TopCentralXLong; 2.+AFT_BTBrktInf_BackPlate_Thickness*2.; AFT_BTBrktInf_ZLength" /> + +<box name="AFT_BTBrktInf_CtrSpacerPlate" material="Iron" X_Y_Z="AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_CentralSpacerYLong; AFT_BTBrktInf_ZLength" /> +<box name="AFT_BTBrktInf_MidSpacerPlate" material="Iron" X_Y_Z="2.*AFT_BTBrktInf_BackPlate_Thickness+2.; AFT_BTBrktInf_YSpacerTotal-2.-2.*AFT_BTBrktInf_BackPlate_Thickness-AFT_BTBrktInf_CentralSpacerYLong; AFT_BTBrktInf_ZLength" /> +<box name="AFT_BTBrktInf_SideSpacerPlate" material="Iron" X_Y_Z="AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_YSpacerTotal; AFT_BTBrktInf_ZLength" /> + +<composition name="AFT_BTBrktInf"> + <posXYZ volume="AFT_BTBrktInf_BackPlate" X_Y_Z=" 0.; 0.; AFT_BTBrktInf_BackPlate_Thickness/2.+AFT_BTBrktInf_ZLength" /> + <posXYZ volume="AFT_BTBrktInf_LowCenterLongX" X_Y_Z=" 0.; AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_LowSideLongX" X_Y_Z=" (AFT_BTBrktInf_BackPlate_XLong-AFT_BTBrktInf_BackPlate_XOff)/2.; AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_LowSideLongX" X_Y_Z=" -(AFT_BTBrktInf_BackPlate_XLong-AFT_BTBrktInf_BackPlate_XOff)/2.; AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_TopCenterLongX" X_Y_Z=" 0.; AFT_BTBrktInf_CentralSpacerYLong+2.*AFT_BTBrktInf_BackPlate_Thickness+1.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_CtrSpacerPlate" X_Y_Z="-AFT_BTBrktInf_BackPlate_XLong/2.+AFT_BTBrktInf_CentralSpacerOffsetX+AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_CentralSpacerYLong/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_CtrSpacerPlate" X_Y_Z=" AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_CentralSpacerOffsetX-AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_CentralSpacerYLong/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_MidSpacerPlate" X_Y_Z="-AFT_BTBrktInf_TopCentralXLong/2.+AFT_BTBrktInf_BackPlate_Thickness+1.; (AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_CentralSpacerYLong)/2.+2.*AFT_BTBrktInf_BackPlate_Thickness+1.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_MidSpacerPlate" X_Y_Z=" AFT_BTBrktInf_TopCentralXLong/2.-AFT_BTBrktInf_BackPlate_Thickness-1.; (AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_CentralSpacerYLong)/2.+2.*AFT_BTBrktInf_BackPlate_Thickness+1.; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_SideSpacerPlate" X_Y_Z="-AFT_BTBrktInf_BackPlate_XLong/2.+AFT_BTBrktInf_BackPlate_XOff-AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_YSpacerTotal/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_SideSpacerPlate" X_Y_Z="-AFT_BTBrktInf_BackPlate_XLong/2.+AFT_BTBrktInf_SideSpacerOffsetX; AFT_BTBrktInf_YSpacerTotal/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_SideSpacerPlate" X_Y_Z=" AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_BackPlate_XOff+AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrktInf_YSpacerTotal/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> + <posXYZ volume="AFT_BTBrktInf_SideSpacerPlate" X_Y_Z=" AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_SideSpacerOffsetX; AFT_BTBrktInf_YSpacerTotal/2.+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrktInf_ZLength/2." /> +</composition> + +<var name="AFT_BTBrkt_BackPlate_XLong" value=" 955. " /> +<var name="AFT_BTBrkt_BackPlate_XShort" value=" 545. " /> +<var name="AFT_BTBrkt_BackPlate_YLong" value=" 183. " /> +<var name="AFT_BTBrkt_BackPlate_YShort" value=" 86. " /> + +<gvxysx name="AFT_BTBrkt_BackPlate" material="Iron" dZ="AFT_BTBrktInf_BackPlate_Thickness" > + <gvxy_point X_Y="AFT_BTBrkt_BackPlate_XShort/2.; 0."/> + <gvxy_point X_Y="AFT_BTBrkt_BackPlate_XShort/2.; AFT_BTBrkt_BackPlate_YShort-AFT_BTBrktInf_BackPlate_Thickness"/> + <gvxy_point X_Y="AFT_BTBrkt_BackPlate_XLong/2.+(AFT_BTBrkt_BackPlate_YLong-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness)*tan(AFT_BTBrktInf_BackPlate_YAngle*GENV_PiS180); AFT_BTBrkt_BackPlate_YShort-AFT_BTBrktInf_BackPlate_Thickness"/> + <gvxy_point X_Y="AFT_BTBrkt_BackPlate_XLong/2.; AFT_BTBrkt_BackPlate_YLong"/> +</gvxysx> + +<var name="AFT_BTBrkt_SidePlateXLength" value=" 235. " /> +<var name="AFT_BTBrkt_CentralPlateXLength" value=" 546. " /> +<var name="AFT_BTBrkt_ZLength" value=" 260. " /> + +<box name="AFT_BTBrkt_SideLongX" material="Iron" X_Y_Z="AFT_BTBrkt_SidePlateXLength+AFT_BTBrktInf_BackPlate_Thickness; 2.*AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength"/> + +<var name="AFT_BTBrkt_CtrSpacerPlate_XShort" value=" 10. " /> +<var name="AFT_BTBrkt_CtrSpacerPlate_YLong" value=" 308. " /> + +<var name="AFT_BTBrkt_MidSpacerPlate_XShort" value=" 9. " /> +<var name="AFT_BTBrkt_MidSpacerPlate_YLong" value=" 378. " /> + +<var name="AFT_BTBrkt_SideSpacerPlate_XShort" value=" 15.5" /> +<var name="AFT_BTBrkt_SideSpacerPlate_XLong" value=" 820. " /> +<var name="AFT_BTBrkt_SideSpacerPlate_YShort" value=" 125. " /> +<var name="AFT_BTBrkt_SideSpacerPlate_YLong" value=" 530. " /> +<var name="AFT_BTBrkt_SideSpacerPlate_XDist" value=" 457. " /> + +<gvxy name="AFT_BTBrkt_CtrSpacerPlate" material="Iron" dZ="AFT_BTBrktInf_BackPlate_Thickness" > + <gvxy_point X_Y=" 0.; 0."/> + <gvxy_point X_Y=" AFT_BTBrkt_ZLength; 0."/> + <gvxy_point X_Y=" AFT_BTBrkt_ZLength; AFT_BTBrkt_CtrSpacerPlate_YLong-AFT_BTBrkt_ZLength+AFT_BTBrkt_CtrSpacerPlate_XShort"/> + <gvxy_point X_Y=" AFT_BTBrkt_CtrSpacerPlate_XShort; AFT_BTBrkt_CtrSpacerPlate_YLong"/> + <gvxy_point X_Y=" 0.; AFT_BTBrkt_CtrSpacerPlate_YLong"/> +</gvxy> + +<gvxy name="AFT_BTBrkt_MidSpacerPlate" material="Iron" dZ="AFT_BTBrktInf_BackPlate_Thickness" > + <gvxy_point X_Y=" 0.; AFT_BTBrktInf_YSpacerTotal-2.-AFT_BTBrktInf_CentralSpacerYLong"/> + <gvxy_point X_Y=" AFT_BTBrkt_ZLength; AFT_BTBrktInf_YSpacerTotal-2.-AFT_BTBrktInf_CentralSpacerYLong"/> + <gvxy_point X_Y=" AFT_BTBrkt_ZLength; AFT_BTBrkt_MidSpacerPlate_YLong-AFT_BTBrkt_ZLength+AFT_BTBrkt_MidSpacerPlate_XShort"/> + <gvxy_point X_Y=" AFT_BTBrkt_MidSpacerPlate_XShort; AFT_BTBrkt_MidSpacerPlate_YLong"/> + <gvxy_point X_Y=" 0.; AFT_BTBrkt_MidSpacerPlate_YLong"/> +</gvxy> + +<gvxy name="AFT_BTBrkt_SideSpacerPlate" material="Iron" dZ="AFT_BTBrktInf_BackPlate_Thickness" > + <gvxy_point X_Y=" 0.; 0."/> + <gvxy_point X_Y=" AFT_BTBrkt_SideSpacerPlate_XLong; 0."/> + <gvxy_point X_Y=" AFT_BTBrkt_SideSpacerPlate_XLong; AFT_BTBrkt_SideSpacerPlate_YShort"/> + <gvxy_point X_Y=" AFT_BTBrkt_SideSpacerPlate_XShort+AFT_BTBrkt_SideSpacerPlate_YLong-AFT_BTBrkt_SideSpacerPlate_YShort; AFT_BTBrkt_SideSpacerPlate_YShort"/> + <gvxy_point X_Y=" AFT_BTBrkt_SideSpacerPlate_XShort; AFT_BTBrkt_SideSpacerPlate_YLong"/> + <gvxy_point X_Y=" 0.; AFT_BTBrkt_SideSpacerPlate_YLong"/> +</gvxy> + +<var name="AFT_BTBrkt_FrontTube_StartAngle" value=" 195. " /> +<var name="AFT_BTBrkt_FrontTube_Angle" value=" 70. " /> +<var name="AFT_BTBrkt_FrontTube_Radius" value=" 550. " /> +<var name="AFT_BTBrkt_FrontTube_ZLength" value=" 250. " /> +<var name="AFT_BTBrkt_FrontTube_YOffset" value=" 558. " /> +<var name="AFT_BTBrkt_BackTube_ZLength" value=" 700. " /> +<var name="AFT_BTBrkt_BackTube_StartAngle" value=" 190. " /> +<var name="AFT_BTBrkt_BackTube_YOffset" value=" 226. " /> + +<tubs name="AFT_BTBrkt_FrontTube" material="Iron" Rio_Z="AFT_BTBrkt_FrontTube_Radius; AFT_BTBrkt_FrontTube_Radius+AFT_BTBrktInf_BackPlate_Thickness/2. ; AFT_BTBrkt_FrontTube_ZLength" profile="AFT_BTBrkt_FrontTube_StartAngle; AFT_BTBrkt_FrontTube_Angle" nbPhi="20" /> +<tubs name="AFT_BTBrkt_BackTube" material="Iron" Rio_Z="AFT_BTBrkt_FrontTube_Radius; AFT_BTBrkt_FrontTube_Radius+AFT_BTBrktInf_BackPlate_Thickness/2. ; AFT_BTBrkt_BackTube_ZLength" profile="AFT_BTBrkt_BackTube_StartAngle; AFT_BTBrkt_FrontTube_Angle" nbPhi="20" /> + +<var name="AFT_BTBrkt_BackTube_PosOff" value=" (AFT_BTBrkt_FrontTube_Radius+AFT_BTBrktInf_BackPlate_Thickness/2.)*cos(asin((AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_CentralSpacerOffsetX-AFT_BTBrktInf_BackPlate_Thickness)/(AFT_BTBrkt_FrontTube_Radius+AFT_BTBrktInf_BackPlate_Thickness/2.)))*GENV_Si45"/> + +<var name="AFT_BTBrkt_FrontPlate_ZOffset" value=" 10. " /> +<var name="AFT_BTBrkt_FrontPlate_ZGap" value=" 190. " /> +<var name="AFT_BTBrkt_FrontPlate_XWidth" value=" 115. " /> +<var name="AFT_BTBrkt_FrontPlate_YHight" value=" 120. " /> + +<tubs name="AFT_BTBrkt_FrontPlate_SubTube" material="Iron" Rio_Z="0.; AFT_BTBrkt_FrontTube_Radius+AFT_BTBrktInf_BackPlate_Thickness/2.+GENV_Eps ; AFT_BTBrkt_BackTube_ZLength" profile=" 300.; 70." nbPhi="50" /> +<box name="AFT_BTBrkt_FrontPlate_Full" material="Iron" X_Y_Z="AFT_BTBrkt_FrontPlate_XWidth; AFT_BTBrkt_FrontPlate_YHight; AFT_BTBrktInf_BackPlate_Thickness" /> + +<subtraction name="AFT_BTBrkt_FrontPlate"> + <posXYZ volume="AFT_BTBrkt_FrontPlate_Full" X_Y_Z=" AFT_BTBrkt_SideSpacerPlate_XDist-AFT_BTBrkt_FrontPlate_XWidth/2.; AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrkt_FrontPlate_YHight/2.; 0."/> + <posXYZ volume="AFT_BTBrkt_FrontPlate_SubTube" X_Y_Z=" 0.; AFT_BTBrkt_FrontTube_YOffset; 0." /> +</subtraction> + +<composition name="AFT_BTBrkt"> + <posXYZ volume="AFT_BTBrkt_BackPlate" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort; AFT_BTBrkt_ZLength+AFT_BTBrktInf_BackPlate_Thickness/2."/> + <posXYZ volume="AFT_BTBrkt_SideLongX" X_Y_Z="-(AFT_BTBrkt_CentralPlateXLength+AFT_BTBrkt_SidePlateXLength-AFT_BTBrktInf_BackPlate_Thickness)/2.; 1.5*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrkt_ZLength/2."/> + <posXYZ volume="AFT_BTBrkt_SideLongX" X_Y_Z=" (AFT_BTBrkt_CentralPlateXLength+AFT_BTBrkt_SidePlateXLength-AFT_BTBrktInf_BackPlate_Thickness)/2.; 1.5*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_BackPlate_Thickness/2.; AFT_BTBrkt_ZLength/2."/> + <posXYZ volume="AFT_BTBrkt_CtrSpacerPlate" X_Y_Z="-AFT_BTBrktInf_BackPlate_XLong/2.+AFT_BTBrktInf_CentralSpacerOffsetX+AFT_BTBrktInf_BackPlate_Thickness/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_CtrSpacerPlate" X_Y_Z=" AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_CentralSpacerOffsetX-AFT_BTBrktInf_BackPlate_Thickness/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_MidSpacerPlate" X_Y_Z="-(AFT_BTBrkt_CentralPlateXLength-AFT_BTBrktInf_BackPlate_Thickness)/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_MidSpacerPlate" X_Y_Z=" (AFT_BTBrkt_CentralPlateXLength-AFT_BTBrktInf_BackPlate_Thickness)/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_SideSpacerPlate" X_Y_Z="-AFT_BTBrkt_SideSpacerPlate_XDist-AFT_BTBrktInf_BackPlate_Thickness/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_SideSpacerPlate" X_Y_Z=" AFT_BTBrkt_SideSpacerPlate_XDist+AFT_BTBrktInf_BackPlate_Thickness/2.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal+AFT_BTBrktInf_BackPlate_Thickness; AFT_BTBrkt_ZLength" rot=" 0.; 90.; 0."/> + <posXYZ volume="AFT_BTBrkt_FrontTube" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrkt_FrontTube_YOffset; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrkt_FrontTube_ZLength/2." /> + <posXYZ volume="AFT_BTBrkt_FrontTube" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrkt_FrontTube_YOffset; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrkt_FrontTube_ZLength/2." rot=" 0.; 0.; 80."/> + <posXYZ volume="AFT_BTBrkt_BackTube" X_Y_Z=" 0.; 3.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrkt_CtrSpacerPlate_YLong+AFT_BTBrkt_BackTube_PosOff+(AFT_BTBrkt_BackTube_ZLength/2.-AFT_BTBrkt_BackTube_YOffset)*GENV_Si45; AFT_BTBrkt_ZLength-AFT_BTBrkt_CtrSpacerPlate_XShort-AFT_BTBrkt_BackTube_PosOff+(AFT_BTBrkt_BackTube_ZLength/2.-AFT_BTBrkt_BackTube_YOffset)*GENV_Si45" rot=" -45.; 0.; 0."/> + <posXYZ volume="AFT_BTBrkt_BackTube" X_Y_Z=" 0.; 3.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort+AFT_BTBrkt_CtrSpacerPlate_YLong+AFT_BTBrkt_BackTube_PosOff+(AFT_BTBrkt_BackTube_ZLength/2.-AFT_BTBrkt_BackTube_YOffset)*GENV_Si45; AFT_BTBrkt_ZLength-AFT_BTBrkt_CtrSpacerPlate_XShort-AFT_BTBrkt_BackTube_PosOff+(AFT_BTBrkt_BackTube_ZLength/2.-AFT_BTBrkt_BackTube_YOffset)*GENV_Si45" rot=" 0.; 45.; 90."/> + <posXYZ volume="AFT_BTBrkt_FrontPlate" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrktInf_BackPlate_Thickness/2.+AFT_BTBrkt_FrontPlate_ZOffset" /> + <posXYZ volume="AFT_BTBrkt_FrontPlate" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrktInf_BackPlate_Thickness/2.+AFT_BTBrkt_FrontPlate_ZOffset+AFT_BTBrkt_FrontPlate_ZGap+AFT_BTBrktInf_BackPlate_Thickness" /> + <posXYZ volume="AFT_BTBrkt_FrontPlate" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrktInf_BackPlate_Thickness/2.+AFT_BTBrkt_FrontPlate_ZOffset" rot=" 0.; 180.; 0." /> + <posXYZ volume="AFT_BTBrkt_FrontPlate" X_Y_Z=" 0.; 2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrktInf_YSpacerTotal-AFT_BTBrkt_BackPlate_YShort; AFT_BTBrkt_ZLength-AFT_BTBrkt_SideSpacerPlate_XLong+AFT_BTBrktInf_BackPlate_Thickness/2.+AFT_BTBrkt_FrontPlate_ZOffset+AFT_BTBrkt_FrontPlate_ZGap+AFT_BTBrktInf_BackPlate_Thickness" rot=" 0.; 180.; 0." /> +</composition> + +<var name="AFT_BTBrkt_Cryotubethickness" value="AFT_BTBrkt_FrontTube_YOffset+2.-AFT_BTBrkt_FrontTube_Radius" /> +<var name="AFT_BTBrkt_CryotubeouterRadius" value="AFT_BTBrkt_FrontTube_YOffset+2." /> +<var name="AFT_BTBrkt_CtrSpacerXOffset" value="AFT_BTBrktInf_BackPlate_XLong/2.-AFT_BTBrktInf_CentralSpacerOffsetX-AFT_BTBrktInf_BackPlate_Thickness" /> + +<var name="AFT_BTBrkt_PositioningParameter" value="(AFT_BTBrktInf_BackPlate_Thickness-AFT_BTBrkt_Cryotubethickness+2.-AFT_BTBrkt_ZLength+AFT_BTBrkt_CtrSpacerPlate_YLong+AFT_BTBrkt_Cryotubethickness)*GENV_Si45-(AFT_BTBrkt_CryotubeouterRadius-sqrt(AFT_BTBrkt_CryotubeouterRadius*AFT_BTBrkt_CryotubeouterRadius-AFT_BTBrkt_CtrSpacerXOffset*AFT_BTBrkt_CtrSpacerXOffset))+AFT_BTBrkt_Cryotubethickness" /> + +<composition name="AFT_BTBrkt_final" > + <posXYZ volume="AFT_BTBrkt" X_Y_Z=" 0.; -(AFT_BTBrktInf_CentralSpacerYLong+2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrkt_Cryotubethickness); 2.*GENV_Si45*AFT_BTBrkt_PositioningParameter" /> + <posXYZ volume="AFT_BTBrktInf" X_Y_Z=" 0.; -(AFT_BTBrktInf_CentralSpacerYLong+2.*AFT_BTBrktInf_BackPlate_Thickness+AFT_BTBrkt_Cryotubethickness); 2.*GENV_Si45*AFT_BTBrkt_PositioningParameter" /> +</composition> + +<composition name="BAR_CryoTubCorner_AFT" > + <posXYZ volume="BAR_CryoTubCorner" X_Y_Z=" 0.; 0. ; 0." /> + <posXYZ volume="AFT_BTBrkt_final" X_Y_Z=" ABRT_CryoRmin - 10.*GENV_Eps; 0.; ABRT_CryoZmax - ABRT_CryoRadi_Radius - ABRT_CryoRcur/sqrt(2.) + GENV_Ta225*ABRT_CryoRadi_Radius + 10.*GENV_Eps" rot=" 0. ; 0. ; -90. "/> +</composition> + +<!-- CryoRib with cuts --> +<subtraction name="BAR_CryoRib" > + <posXYZ volume="BAR_CryoRibOut" X_Y_Z=" (ABRT_CryoRmax + ABRT_CryoRmin)/2. ; 0. ; 0. " /> + <posXYZ volume="BAR_CryoRibIn" X_Y_Z=" (ABRT_CryoRmax + ABRT_CryoRmin)/2. ; 0. ; 0. " /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" ABRT_CryoRmax - ABRT_CryoRadi_Radius - 10.*GENV_Eps; 0. ; 0. " /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius + 10.*GENV_Eps; 0. ; 0. " /> +</subtraction> + +<!-- CryoAtt with cuts --> +<subtraction name="BAR_CryoAtt" > + <posXYZ volume="BAR_CryoAttOut" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; 0. " rot=" 0. ; 90. ; 0. "/> + <posXYZ volume="BAR_CryoAttIn" X_Y_Z=" ABRT_CryAttRx_CryoAttRmax ; 0. ; 0. " rot=" 0. ; 90. ; 0. "/> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRadi_Radius + 10.*GENV_Eps; 0. ; 0. " /> +</subtraction> + +<!-- CryoRing with cuts --> +<tubs name="BAR_CryoRingA" material="Iron1" Rio_Z=" ABRT_CryRngRa_CryoRingRadius-ABRT_CryoRadT_RadThick ; ABRT_CryRngRa_CryoRingRadius ; 2.*ABRT_CryRngRm_CryoRingRmed*GENV_Ta225 " nbPhi="20" /> +<subtraction name="BAR_CryoRing" > + <posXYZ volume="BAR_CryoRingA" /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" (ABRT_CryoRmax-ABRT_CryoRadi_Radius)*GENV_Co225-ABRT_CryRngRm_CryoRingRmed ; 0. ; (ABRT_CryoRmax-ABRT_CryoRadi_Radius)*GENV_Si225 " rot=" 90. ; 0. ; 0. " /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" (ABRT_CryoRmax-ABRT_CryoRadi_Radius)*GENV_Co225-ABRT_CryRngRm_CryoRingRmed ; 0. ; -(ABRT_CryoRmax-ABRT_CryoRadi_Radius)*GENV_Si225 " rot=" 90. ; 0. ; 0. " /> +</subtraction> + +<composition name="BAR_CryoTub_Sector" > + <posXYZ volume="BAR_CryoTubAlongZ_Down" /> + <posXYZ volume="BAR_CryoTubAlongZ_Up" /> + <posXYZ volume="BAR_CryoTubAlongR_Plus" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="BAR_CryoTubAlongR_Plus" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRmax; 0.; 0." rot=" 0. ; 180. ; 0. "/> + <posXYZ volume="BAR_CryoTubCorner_AFT" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="BAR_CryoTubCorner_AFT" X_Y_Z=" 0.; 0.; 0." rot=" 0. ; 180. ; 180. "/> + <posXYZ volume="BAR_CryoTubCorner" X_Y_Z=" ABRT_CryoRmin + ABRT_CryoRmax; 0.; 0." rot=" 0. ; 180. ; 0. "/> + <posXYZ volume="BAR_CryoTubCorner" X_Y_Z="-GENV_Ta225*ABRT_CryoRadi_Radius*(1.+sqrt(2.)) + ABRT_CryoRmax - ABRT_CryoZmax + ABRT_CryoRadi_Radius; 0.; GENV_Ta225*ABRT_CryoRadi_Radius*(1.+sqrt(2.)) + ABRT_CryoRmin + ABRT_CryoZmax - ABRT_CryoRadi_Radius" rot=" 0. ; 90. ; 0. "/> + <posXYZ volume="BAR_CryoRing" X_Y_Z=" ABRT_CryRngRm_CryoRingRmed*GENV_Co225 ; -ABRT_CryRngRm_CryoRingRmed*GENV_Si225 ; ABRT_CryRngZm_CryoRingZmed " rot=" 90. ; 0. ; -22.5 " /> + <foreach index="Irib" begin="0" loops="7" > + <posXYZ volume="BAR_CryoRibWing" X_Y_Z=" ABRT_CryoRmin+2.*ABRT_CryoRadi_Radius ; 0. ; ABRT_Zrib[Irib] " rot=" 0. ; 0. ; -90. " /> + <posXYZ volume="BAR_CryoRibWing" X_Y_Z=" ABRT_CryoRmax-2.*ABRT_CryoRadi_Radius ; 0. ; ABRT_Zrib[Irib] " rot=" 0. ; 0. ; 90. " /> + <posXYZ volume="BAR_CryoRib" X_Y_Z=" 0.; 0.; ABRT_Zrib[Irib]" rot=" 0. ; 0. ; 0. " /> + </foreach> + <foreach index="Ivouss" begin="0" loops="8" > + <posXYZ volume="BAR_CryoAttWing" X_Y_Z=" ABRT_CryoRmin+ABRT_CryoRadi_Radius ; 0. ; ABRT_Zvouss[Ivouss] " rot=" 0. ; 0. ; -90. " /> + <posXYZ volume="BAR_CryoAtt" X_Y_Z=" 0.; 0.; ABRT_Zvouss[Ivouss]" rot=" 0. ; 0. ; 0. " /> + </foreach> +</composition> + + +<!-- Description of an Atlas Barrel toroid Strut --> + +<gvxysx name="BAR_StrutWingFull" material="Iron4" dZ="ABRT_StrWZthi_StrutWingZthick" > + <gvxy_point X_Y=" ABRT_StrWYmax_StrutWingYmax ; ABRT_StrWRmax_StrutWingRmax " /> + <gvxy_point X_Y=" ABRT_StrWYmed_StrutWingYmedi; ABRT_StrWRmed_StrutWingRmedi " /> + <gvxy_point X_Y=" ABRT_StrWYlow_StrutWingYlower; ABRT_StrWRlow_StrutWingRlower " /> + <gvxy_point X_Y=" ABRT_StrWYmin_StrutWingYmin ; ABRT_StrWRmin_StrutWingRmin " /> +</gvxysx> +<box name="BAR_StrutWingUpCut" material="Aluminium1" X_Y_Z=" 2*ABRT_StrWYucu_StrutWingYupcut; ABRT_StrWYucu_StrutWingYupcut; ABRT_StrWYucu_StrutWingYupcut" /> +<subtraction name="BAR_StrutWing" > + <posXYZ volume="BAR_StrutWingFull" /> + <posXYZ volume="BAR_CryoTubCut" X_Y_Z=" 0. ; ABRT_CryoRmax - ABRT_CryoRadi_Radius - 5.*GENV_Eps ; 0. " /> + <posXYZ volume="BAR_StrutWingUpCut" X_Y_Z=" 0. ; ABRT_CryoRmax ; 0. "/> +</subtraction> +<box name="BAR_StrutWingBigSidePlate" material="Iron1" X_Y_Z=" ABRT_StrWYthi_StrutWingYthick ; ABRT_StrWBPhi_StrutWingBigPlateheight ; ABRT_StrWBPth_StrutWingBigPlatethick " /> +<box name="BAR_StrutWingTopPlate" material="Iron1" X_Y_Z=" 2. * ABRT_StrWYmax_StrutWingYmax; ABRT_StrWZthi_StrutWingZthick ; ABRT_StrWSPth_StrutWingSmallPlatethick " /> +<box name="BAR_StrutWingBottomPlate" material="Iron1" X_Y_Z=" 2. * ABRT_StrWYmin_StrutWingYmin; ABRT_StrWZthi_StrutWingZthick ; ABRT_StrWSPth_StrutWingSmallPlatethick " /> +<box name="BAR_StrutWingUpperSidePlate" material="Iron1" X_Y_Z=" (ABRT_StrWYmed_StrutWingYmedi-ABRT_StrWYmax_StrutWingYmax)/(cos(ABRT_StrWAupp_StrutWingAupper ))- ABRT_StrWZthi_StrutWingZthick; ABRT_StrWZthi_StrutWingZthick ; ABRT_StrWSPth_StrutWingSmallPlatethick " /> +<box name="BAR_StrutWingLowerSidePlate" material="Iron1" X_Y_Z=" (ABRT_StrWYlow_StrutWingYlower-ABRT_StrWYmin_StrutWingYmin)/(cos(ABRT_StrWAlow_StrutWingAlower )) - ABRT_StrWZthi_StrutWingZthick; ABRT_StrWZthi_StrutWingZthick ; ABRT_StrWSPth_StrutWingSmallPlatethick " /> +<union name="BAR_StrutWingBox" > + <posXYZ volume="BAR_StrutWing" X_Y_Z=" 0. ; 0. ; -ABRT_StrWZlen_StrutWingZlen/2. " /> + <posXYZ volume="BAR_StrutWing" X_Y_Z=" 0. ; 0. ; +ABRT_StrWZlen_StrutWingZlen/2. " /> + <posXYZ volume="BAR_StrutWingBigSidePlate" X_Y_Z=" (ABRT_StrWYRli_StrutWingYRlink + ABRT_StrWYthi_StrutWingYthick/2. )*GENV_Co225; ABRT_StrWRmax_StrutWingRmax-ABRT_CryoRadi_Radius-(ABRT_StrWYRli_StrutWingYRlink + ABRT_StrWYthi_StrutWingYthick/2.)*GENV_Si225; 0. " rot=" 0. ; 0. ; -22.5" /> + <posXYZ volume="BAR_StrutWingBigSidePlate" X_Y_Z=" (- ABRT_StrWYRli_StrutWingYRlink - ABRT_StrWYthi_StrutWingYthick/2. )*GENV_Co225; ABRT_StrWRmax_StrutWingRmax-ABRT_CryoRadi_Radius-(ABRT_StrWYRli_StrutWingYRlink + ABRT_StrWYthi_StrutWingYthick/2.)*GENV_Si225; 0. " rot=" 0. ; 0. ; 22.5" /> + <posXYZ volume="BAR_StrutWingTopPlate" X_Y_Z=" 0. ; ABRT_StrWRmax_StrutWingRmax+ABRT_StrWZthi_StrutWingZthick/2.+GENV_Eps ; 0. " /> + <posXYZ volume="BAR_StrutWingBottomPlate" X_Y_Z=" 0. ;ABRT_StrWRmin_StrutWingRmin-ABRT_StrWZthi_StrutWingZthick/2. ; 0. " /> + <posXYZ volume="BAR_StrutWingUpperSidePlate" X_Y_Z=" (-ABRT_StrWYmed_StrutWingYmedi - ABRT_StrWYmax_StrutWingYmax - ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAupp_StrutWingAupper) - cos(ABRT_StrWAupp_StrutWingAupper)))/2.; (ABRT_StrWRmax_StrutWingRmax + ABRT_StrWRmed_StrutWingRmedi + ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAupp_StrutWingAupper) + cos(ABRT_StrWAupp_StrutWingAupper)))/2.; 0. " rot=" 0. ; 0. ; ABRT_StrWAupp_StrutWingAupper/GENV_PiS180" /> + <posXYZ volume="BAR_StrutWingUpperSidePlate" X_Y_Z=" ( ABRT_StrWYmed_StrutWingYmedi + ABRT_StrWYmax_StrutWingYmax + ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAupp_StrutWingAupper) - cos(ABRT_StrWAupp_StrutWingAupper)))/2.; (ABRT_StrWRmax_StrutWingRmax + ABRT_StrWRmed_StrutWingRmedi + ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAupp_StrutWingAupper) + cos(ABRT_StrWAupp_StrutWingAupper)))/2.; 0. " rot=" 0. ; 0. ; -ABRT_StrWAupp_StrutWingAupper/GENV_PiS180" /> + <posXYZ volume="BAR_StrutWingLowerSidePlate" X_Y_Z=" ( ABRT_StrWYlow_StrutWingYlower + ABRT_StrWYmin_StrutWingYmin + ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAlow_StrutWingAlower) - cos(ABRT_StrWAlow_StrutWingAlower)))/2.; (ABRT_StrWRlow_StrutWingRlower+ABRT_StrWRmin_StrutWingRmin - ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAlow_StrutWingAlower) + cos(ABRT_StrWAlow_StrutWingAlower)))/2. ; 0. " rot=" 0. ; 0. ; ABRT_StrWAlow_StrutWingAlower/GENV_PiS180" /> + <posXYZ volume="BAR_StrutWingLowerSidePlate" X_Y_Z=" (-ABRT_StrWYlow_StrutWingYlower - ABRT_StrWYmin_StrutWingYmin - ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAlow_StrutWingAlower) - cos(ABRT_StrWAlow_StrutWingAlower)))/2.; (ABRT_StrWRlow_StrutWingRlower+ABRT_StrWRmin_StrutWingRmin - ABRT_StrWZthi_StrutWingZthick*(sin(ABRT_StrWAlow_StrutWingAlower) + cos(ABRT_StrWAlow_StrutWingAlower)))/2. ; 0. " rot=" 0. ; 0. ; -ABRT_StrWAlow_StrutWingAlower/GENV_PiS180" /> +</union> + +<box name="BAR_StrutFull" material="Aluminium4" X_Y_Z=" ABRT_StrtYlen- 2.* ABRT_StrtPthi_StrutPlatethick ; ABRT_StrWBPhi_StrutWingBigPlateheight - 2.*ABRT_StrtPoff_StrutPlateoff ; ABRT_StrtZwid_StrutZwidth - 2.*ABRT_StrtPoff_StrutPlateoff " /> +<box name="BAR_StrutHole" material="Aluminium1" X_Y_Z=" ABRT_StrtYlen- 2.* ABRT_StrtPthi_StrutPlatethick + 10.*GENV_Eps; ABRT_StrWBPhi_StrutWingBigPlateheight - 2.*ABRT_StrtPoff_StrutPlateoff-2.*ABRT_StrtRthi_StrutRthick ; ABRT_StrtZwid_StrutZwidth - 2.*ABRT_StrtPoff_StrutPlateoff " /> +<box name="BAR_StrutPlate" material="Aluminium4" X_Y_Z=" ABRT_StrtPthi_StrutPlatethick; ABRT_StrWBPhi_StrutWingBigPlateheight ; ABRT_StrtZwid_StrutZwidth " /> +<subtraction name="BAR_StrutBarr" > + <posXYZ volume="BAR_StrutFull" /> + <posXYZ volume="BAR_StrutHole" X_Y_Z=" 0. ; 0. ; -(ABRT_StrtZwid_StrutZwidth - 2.* ABRT_StrtPoff_StrutPlateoff)/2. -ABRT_StrtZthi_StrutZthick/2. " /> + <posXYZ volume="BAR_StrutHole" X_Y_Z=" 0. ; 0. ; (ABRT_StrtZwid_StrutZwidth - 2.* ABRT_StrtPoff_StrutPlateoff)/2. +ABRT_StrtZthi_StrutZthick/2. " /> +</subtraction> +<!-- ABRT_StrtXpos_Strut_Xposition is done by calculation => should be taken from blueprint atltbw__0002-vAD BUT ONLY in combination with update of ABRT_CryoRmin and ABRT_CryoRmax --> +<var name="ABRT_StrtXpos_Strut_Xposition" value="ABRT_StrWRmax_StrutWingRmax-ABRT_CryoRadi_Radius-ABRT_StrtYlen/2.*GENV_Si225-(ABRT_StrWBPhi_StrutWingBigPlateheight/2. - ABRT_StrtPoff_StrutPlateoff)" /> +<composition name="BAR_Strut_Sector" > + <posXYZ volume="BAR_StrutWingBox" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; -90. " /> + <posXYZ volume="BAR_StrutBarr" X_Y_Z=" ABRT_StrtXpos_Strut_Xposition; -ABRT_StrtXpos_Strut_Xposition*GENV_Ta225; 0. " rot=" 0. ; 0. ; -112.5" /> + <posXYZ volume="BAR_StrutPlate" X_Y_Z=" ABRT_StrtXpos_Strut_Xposition-ABRT_StrtYlen/2.*GENV_Si225+ABRT_StrtPthi_StrutPlatethick/2.*GENV_Si225 ; -ABRT_StrtXpos_Strut_Xposition*GENV_Ta225-ABRT_StrtYlen/2.*GENV_Co225+ABRT_StrtPthi_StrutPlatethick/2.*GENV_Co225; 0." rot=" 0. ; 0. ; -112.5" /> + <posXYZ volume="BAR_StrutPlate" X_Y_Z=" ABRT_StrtXpos_Strut_Xposition+ABRT_StrtYlen/2.*GENV_Si225-ABRT_StrtPthi_StrutPlatethick/2.*GENV_Si225 ; -ABRT_StrtXpos_Strut_Xposition*GENV_Ta225+ABRT_StrtYlen/2.*GENV_Co225-ABRT_StrtPthi_StrutPlatethick/2.*GENV_Co225; 0." rot=" 0. ; 0. ; -112.5" /> +</composition> + + + + +<!-- Description of an Atlas Barrel toroid voussoir and voussoir head --> + +<!-- BEGIN confirmation with atltbwv_0028-vAA (if no other comment) --> +<var name="ABRT_VousBlXh_VoussBlockXheight" value= "850." /> +<var name="ABRT_VousPliX_VoussPlateInnerXwid" value= "120." /> +<var name="ABRT_VousPloX_VoussPlateOuterXwid" value= "80." /> +<var name="ABRT_VousBlYw_VoussBlockYwid" value="2850." /> +<var name="ABRT_VouBlYwS_VoussBlockYwidSub" value= "120." /> +<var name="ABRT_VouRCYwi_VoussRectCutYwid" value= "815." /> +<var name="ABRT_VouRPYwi_VoussReinforcePlatYwid" value= "50." /> +<var name="ABRT_VouBlZle_VoussBlockZlen" value= "500." /> +<var name="ABRT_VouBlZlS_VoussBlockZlenSub" value= "50." /> +<var name="ABRT_VouBZWTh_VoussBlockZWallTh" value= "50." /> +<var name="ABRT_VouCutZe_VoussCutZExt" value=" 500." /> <!-- no confirmation since arbitrary cut parameter --> +<var name="ABRT_VouRCutR_VoussRoundCutRad" value= "300." /> +<var name="ABRT_VouReCsl_VoussRectCutXYslant" value= "30." /> <!-- no confirmation since approx. for rounded corners --> +<!-- END confirmation with atltbwv_0028-vAA --> + +<!-- BEGIN confirmation with atltbwv_0029-vAB (if no other comment) --> +<var name="ABRT_CnbCoYex_ConboxCoreYextension" value= " 880." /> +<var name="ABRT_CnbCoXex_ConboxCoreXextension" value= "2367." /> +<var name="ABRT_CnbCoXsu_ConboxCoreXsup" value= " 834." /> +<var name="ABRT_CnbCoXin_ConboxCoreXinf" value= " 640.7"/> +<var name="ABRT_CnbEaHei_ConboxEarHeight" value= " 850." /> +<var name="ABRT_CnbEaCxi_ConboxEarCutXin" value= " 350." /> +<var name="ABRT_CnbEaCtl_ConboxEarCutPlateThickLowOut" value= " 120." /> +<var name="ABRT_CnbEaCtu_ConboxEarCutPlateThickUp" value= " 80." /> +<var name="ABRT_CnbEaCzw_ConboxEarCutZwall" value= " 50." /> +<var name="ABRT_CnbEaCze_ConboxEarCutZextr" value= " 135." /> +<var name="ABRT_CnbEaCPl_ConboxInnerEarCutPlate" value= " 60." /> <!-- atltbwv_0052-vAA --> +<var name="ABRT_CnbCaDma_ConboxCavityDmax" value= " 528." /> <!-- atltbwv_0059-v0 --> +<var name="ABRT_CnbCaDme_ConboxCavityDmedium" value= " 478." /> <!-- atltbwv_0059-v0 --> +<var name="ABRT_CnbCaDmi_ConboxCavityDmin" value= " 468." /> <!-- atltbwv_0059-v0 --> +<var name="ABRT_CnbCaZin_ConboxCavityZinter2" value= " 50." /> <!-- atltbwv_0059-v0 --> +<var name="ABRT_CnbCaZex_ConboxCavityZext" value= " 790." /> <!-- atltbwv_0059-v0 --> +<var name="ABRT_CnboxZex_ConboxZextension" value= " 550." /> + +<var name="ABRT_VousMBRa_VoussoirMainBlockRadius" value= "5723." /> <!-- atltbw__0002-vAD --> +<var name="ABRT_CnbxMBRa_ConboxMainBlockRadius" value= "6942." /> <!-- atltbw__0002-vAD --> +<!-- END confirmation with atltbwv_0029-vAB --> + + +<!-- Constants and derived variables --> + +<var name="ABRT_VouCRCYr_VoussCentrRectCutYreach" value=" ABRT_VousBlYw_VoussBlockYwid/2.-ABRT_VouBlYwS_VoussBlockYwidSub-ABRT_VouRCYwi_VoussRectCutYwid-ABRT_VouRPYwi_VoussReinforcePlatYwid" /> +<var name="ABRT_VousRCXw_VoussRectCutXwid" value=" ABRT_VousBlXh_VoussBlockXheight-ABRT_VousPliX_VoussPlateInnerXwid-ABRT_VousPloX_VoussPlateOuterXwid" /> +<var name="ABRT_VousCXof_VoussCutXoffset" value="(ABRT_VousPliX_VoussPlateInnerXwid-ABRT_VousPloX_VoussPlateOuterXwid)/2." /> +<var name="ABRT_VousCYpo_VoussoirCutYpos" value=" ABRT_VousBlYw_VoussBlockYwid/2.-ABRT_VouBlYwS_VoussBlockYwidSub-ABRT_VouRCYwi_VoussRectCutYwid/2." /> +<var name="ABRT_VousCZpo_VoussoirCutZpos" value=" ABRT_VouCutZe_VoussCutZExt/2.+ABRT_VouBZWTh_VoussBlockZWallTh/2." /> +<var name="ABRT_CnbEaXtp_ConboxEarXtop" value=" ABRT_CnbCoXex_ConboxCoreXextension/2. " /> +<var name="ABRT_CnbEaYtp_ConboxEarYtop" value=" ABRT_CnbCoYex_ConboxCoreYextension - GENV_Ta225 *(ABRT_CnbCoXex_ConboxCoreXextension-ABRT_CnbCoXsu_ConboxCoreXsup)/2." /> +<var name="ABRT_CnbEaXbt_ConboxEarXbot" value=" ABRT_CnbEaXtp_ConboxEarXtop - ABRT_CnbEaHei_ConboxEarHeight*GENV_Si225 " /> +<var name="ABRT_CnbEaYbt_ConboxEarYbot" value=" ABRT_CnbEaYtp_ConboxEarYtop - ABRT_CnbEaHei_ConboxEarHeight*GENV_Co225 " /> +<var name="ABRT_CnbECXol_ConboxEarCutXoutlow" value=" ABRT_CnbEaXbt_ConboxEarXbot - ABRT_CnbEaCtl_ConboxEarCutPlateThickLowOut*sqrt(2.)*GENV_Si225" /> +<var name="ABRT_CnbECYol_ConboxEarCutYoutlow" value=" ABRT_CnbEaYbt_ConboxEarYbot + ABRT_CnbEaCtl_ConboxEarCutPlateThickLowOut*sqrt(2.)*GENV_Co225" /> +<var name="ABRT_CnbECYil_ConboxEarCutYinlow" value=" ABRT_CnbECYol_ConboxEarCutYoutlow + (ABRT_CnbECXol_ConboxEarCutXoutlow-ABRT_CnbEaCxi_ConboxEarCutXin)*GENV_Ta225 " /> +<var name="ABRT_CnbECoHe_ConboxEarCutOutHeight" value=" ABRT_CnbEaHei_ConboxEarHeight- ABRT_CnbEaCtl_ConboxEarCutPlateThickLowOut-ABRT_CnbEaCtu_ConboxEarCutPlateThickUp" /> +<var name="ABRT_CnbECXou_ConboxEarCutXoutup" value=" ABRT_CnbECXol_ConboxEarCutXoutlow + ABRT_CnbECoHe_ConboxEarCutOutHeight*GENV_Si225" /> +<var name="ABRT_CnbECYou_ConboxEarCutYoutup" value=" ABRT_CnbECYol_ConboxEarCutYoutlow + ABRT_CnbECoHe_ConboxEarCutOutHeight*GENV_Co225" /> +<var name="ABRT_CnbECYiu_ConboxEarCutYinup" value=" ABRT_CnbECYou_ConboxEarCutYoutup + (ABRT_CnbECXou_ConboxEarCutXoutup-ABRT_CnbEaCxi_ConboxEarCutXin)*GENV_Ta225" /> +<var name="ABRT_CnbECZpo_ConboxEarCutZpos" value=" ABRT_CnboxZex_ConboxZextension/2. + ABRT_CnbEaCze_ConboxEarCutZextr " /> +<var name="ABRT_CnbIECZp_ConboxInnerEarCutZpos" value=" ABRT_CnboxZex_ConboxZextension/2. + ABRT_CnbEaCzw_ConboxEarCutZwall/2. " /> +<var name="ABRT_CnbCaZin_ConboxCavityZinter" value="(ABRT_CnbCaDma_ConboxCavityDmax - ABRT_CnbCaDme_ConboxCavityDmedium)/2. / tan(ABRT_CryAttAl_CryoAttAlfa*GENV_PiS180)" /> +<var name="ABRT_VoussRad_VoussoirRadius" value=" ABRT_VousMBRa_VoussoirMainBlockRadius + ABRT_VousBlXh_VoussBlockXheight/2." /> +<var name="ABRT_CnboxRad_ConboxRadius" value=" ABRT_CnbxMBRa_ConboxMainBlockRadius - ABRT_CnbCoYex_ConboxCoreYextension" /> + + + +<!-- Description of the voussoir head (connexion box) --> + +<gvxysx name="BAR_ConboxMainBlock" material="Aluminium4" dZ="ABRT_CnboxZex_ConboxZextension" > + <gvxy_point X_Y=" ABRT_CnbCoXin_ConboxCoreXinf/2. ; 0. " /> + <gvxy_point X_Y=" ABRT_CnbEaXbt_ConboxEarXbot ; ABRT_CnbEaYbt_ConboxEarYbot " /> + <gvxy_point X_Y=" ABRT_CnbEaXtp_ConboxEarXtop ; ABRT_CnbEaYtp_ConboxEarYtop " /> + <gvxy_point X_Y=" ABRT_CnbCoXsu_ConboxCoreXsup/2. ; ABRT_CnbCoYex_ConboxCoreYextension " /> +</gvxysx> +<gvxy name="BAR_ConboxEarCut" material="Aluminium1" dZ="ABRT_CnboxZex_ConboxZextension" > + <gvxy_point X_Y=" ABRT_CnbEaCxi_ConboxEarCutXin ; ABRT_CnbECYil_ConboxEarCutYinlow " /> + <gvxy_point X_Y=" ABRT_CnbECXol_ConboxEarCutXoutlow ; ABRT_CnbECYol_ConboxEarCutYoutlow " /> + <gvxy_point X_Y=" ABRT_CnbECXou_ConboxEarCutXoutup ; ABRT_CnbECYou_ConboxEarCutYoutup " /> + <gvxy_point X_Y=" ABRT_CnbEaCxi_ConboxEarCutXin ; ABRT_CnbECYiu_ConboxEarCutYinup " /> +</gvxy> +<gvxy name="BAR_ConboxInnerEarCut" material="Aluminium1" dZ="ABRT_CnboxZex_ConboxZextension" > + <gvxy_point X_Y=" ABRT_CnbEaCxi_ConboxEarCutXin + ABRT_CnbEaCPl_ConboxInnerEarCutPlate ; ABRT_CnbECYil_ConboxEarCutYinlow - ABRT_CnbEaCPl_ConboxInnerEarCutPlate * GENV_Ta225 " /> + <gvxy_point X_Y=" ABRT_CnbECXol_ConboxEarCutXoutlow ; ABRT_CnbECYol_ConboxEarCutYoutlow " /> + <gvxy_point X_Y=" ABRT_CnbECXou_ConboxEarCutXoutup ; ABRT_CnbECYou_ConboxEarCutYoutup " /> + <gvxy_point X_Y=" ABRT_CnbEaCxi_ConboxEarCutXin + ABRT_CnbEaCPl_ConboxInnerEarCutPlate ; ABRT_CnbECYiu_ConboxEarCutYinup - ABRT_CnbEaCPl_ConboxInnerEarCutPlate * GENV_Ta225 " /> +</gvxy> +<pcon name="BAR_ConboxCavity" material="Aluminium1" nbPhi="20" > + <polyplane Rio_Z="0. ; ABRT_CnbCaDma_ConboxCavityDmax/2. ; 0. " /> + <polyplane Rio_Z="0. ; ABRT_CnbCaDme_ConboxCavityDmedium/2. ; ABRT_CnbCaZin_ConboxCavityZinter" /> + <polyplane Rio_Z="0. ; ABRT_CnbCaDme_ConboxCavityDmedium/2. ; ABRT_CnbCaZex_ConboxCavityZext - ABRT_CnbCaZin_ConboxCavityZinter2 " /> + <polyplane Rio_Z="0. ; ABRT_CnbCaDmi_ConboxCavityDmin/2. ; ABRT_CnbCaZex_ConboxCavityZext - ABRT_CnbCaZin_ConboxCavityZinter2 " /> + <polyplane Rio_Z="0. ; ABRT_CnbCaDmi_ConboxCavityDmin/2. ; ABRT_CnbCaZex_ConboxCavityZext " /> +</pcon> +<tubs name="BAR_ConboxShaft" material="Aluminium4" Rio_Z=" 0. ; ABRT_BielRHol_BiellRadHole-3.*GENV_Eps ; 0.95*ABRT_CryAttD1_CryoAttDiam1 " nbPhi="16" /> +<!--<tubs name="BAR_ConboxShaftB" material="Aluminium1" Rio_Z=" 0. ; ABRT_CryAttD1_CryoAttDiam1/2.-3.*GENV_Eps ; 4.*ABRT_BielRHol_BiellRadHole " nbPhi="20" /> +<intersection name="BAR_ConboxShaft" > + <posXYZ volume="BAR_ConboxShaftA" /> + <posXYZ volume="BAR_ConboxShaftB" rot=" 0. ; 90. ; 0. "/> +</intersection>--> + + +<!-- Description of the voussoir --> + +<gvxysxy name="BAR_VoussoirMainBlock" material="Aluminium4" dZ="ABRT_VousBlXh_VoussBlockXheight" > + <gvxy_point X_Y=" ABRT_VouBlZle_VoussBlockZlen/2. - ABRT_VouBlZlS_VoussBlockZlenSub ; ABRT_VousBlYw_VoussBlockYwid/2. - ABRT_VouBlYwS_VoussBlockYwidSub -ABRT_VouBlZlS_VoussBlockZlenSub/GENV_Ta15 " /> + <gvxy_point X_Y=" ABRT_VouBlZle_VoussBlockZlen/2. ; ABRT_VousBlYw_VoussBlockYwid/2. - ABRT_VouBlYwS_VoussBlockYwidSub " /> + <gvxy_point X_Y=" ABRT_VouBlZle_VoussBlockZlen/2. ; ABRT_VousBlYw_VoussBlockYwid/2. " /> +</gvxysxy> +<gvxysxy name="BAR_VoussoirRectCut" material="Aluminium1" dZ="ABRT_VouCutZe_VoussCutZExt" > + <gvxy_point X_Y=" ABRT_VousRCXw_VoussRectCutXwid/2. ; ABRT_VouRCYwi_VoussRectCutYwid/2.-ABRT_VouReCsl_VoussRectCutXYslant" /> + <gvxy_point X_Y=" ABRT_VousRCXw_VoussRectCutXwid/2.-ABRT_VouReCsl_VoussRectCutXYslant ; ABRT_VouRCYwi_VoussRectCutYwid/2." /> +</gvxysxy> +<gvxysxy name="BAR_VoussoirCentralRectCut" material="Aluminium1" dZ="ABRT_VouCutZe_VoussCutZExt" > + <gvxy_point X_Y=" ABRT_VousRCXw_VoussRectCutXwid/2. ; ABRT_VouCRCYr_VoussCentrRectCutYreach-ABRT_VouReCsl_VoussRectCutXYslant" /> + <gvxy_point X_Y=" ABRT_VousRCXw_VoussRectCutXwid/2.-ABRT_VouReCsl_VoussRectCutXYslant ; ABRT_VouCRCYr_VoussCentrRectCutYreach" /> +</gvxysxy> +<tubs name="BAR_VoussoirRoundCut" material="Aluminium1" Rio_Z=" 0 ; ABRT_VouRCutR_VoussRoundCutRad ; ABRT_VouCutZe_VoussCutZExt" nbPhi="18" /> + +<union name="BAR_VoussoirCut" > + <posXYZ volume="BAR_VoussoirRoundCut" X_Y_Z=" 0. ; ABRT_VousCYpo_VoussoirCutYpos ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirRoundCut" X_Y_Z=" 0. ; -ABRT_VousCYpo_VoussoirCutYpos ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirRectCut" X_Y_Z=" 0. ; ABRT_VousCYpo_VoussoirCutYpos ; ABRT_VousCZpo_VoussoirCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirRectCut" X_Y_Z=" 0. ; -ABRT_VousCYpo_VoussoirCutYpos ; ABRT_VousCZpo_VoussoirCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirRectCut" X_Y_Z=" 0. ; ABRT_VousCYpo_VoussoirCutYpos ;-ABRT_VousCZpo_VoussoirCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirRectCut" X_Y_Z=" 0. ; -ABRT_VousCYpo_VoussoirCutYpos ;-ABRT_VousCZpo_VoussoirCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirCentralRectCut" X_Y_Z=" GENV_Eps ; 0. ; ABRT_VousCZpo_VoussoirCutZpos+GENV_Eps" rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_VoussoirCentralRectCut" X_Y_Z="-GENV_Eps ; 0. ;-ABRT_VousCZpo_VoussoirCutZpos-GENV_Eps" rot=" 0. ; 0. ; 0." /> +</union> +<subtraction name="BAR_Voussoir" > + <posXYZ volume="BAR_VoussoirMainBlock" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 90. ; 0." /> + <posXYZ volume="BAR_VoussoirCut" X_Y_Z=" ABRT_VousCXof_VoussCutXoffset ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> +</subtraction> + +<union name="BAR_ConboxTheCut" > + <posXYZ volume="BAR_ConboxEarCut" X_Y_Z=" 0. ; 0. ; ABRT_CnbECZpo_ConboxEarCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_ConboxEarCut" X_Y_Z=" 0. ; 0. ;-ABRT_CnbECZpo_ConboxEarCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_ConboxEarCut" X_Y_Z=" 0. ; 0. ; ABRT_CnbECZpo_ConboxEarCutZpos " rot=" 0. ; 180. ; 0." /> + <posXYZ volume="BAR_ConboxEarCut" X_Y_Z=" 0. ; 0. ;-ABRT_CnbECZpo_ConboxEarCutZpos " rot=" 0. ; 180. ; 0." /> + <posXYZ volume="BAR_ConboxInnerEarCut" X_Y_Z=" 0. ; 0. ; ABRT_CnbIECZp_ConboxInnerEarCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_ConboxInnerEarCut" X_Y_Z=" 0. ; 0. ;-ABRT_CnbIECZp_ConboxInnerEarCutZpos " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="BAR_ConboxInnerEarCut" X_Y_Z=" 0. ; 0. ; ABRT_CnbIECZp_ConboxInnerEarCutZpos " rot=" 0. ; 180. ; 0." /> + <posXYZ volume="BAR_ConboxInnerEarCut" X_Y_Z=" 0. ; 0. ;-ABRT_CnbIECZp_ConboxInnerEarCutZpos " rot=" 0. ; 180. ; 0." /> + <posXYZ volume="BAR_ConboxCavity" X_Y_Z=" 0. ; 0. ; 0. " rot=" -90. ; 0. ; 0." /> +</union> +<subtraction name="BAR_ConnectingBox" > + <posXYZ volume="BAR_ConboxMainBlock" /> + <posXYZ volume="BAR_ConboxTheCut" /> +</subtraction> + +<composition name="BAR_Voussoir_Sector" > + <posXYZ volume="BAR_ConnectingBox" X_Y_Z=" ABRT_CnboxRad_ConboxRadius ; 0. ; 0. " rot=" 0. ; 0. ; -90. " /> + <posXYZ volume="BAR_ConboxShaft" X_Y_Z=" ABRT_CoMaRmin_ColdMassRmin+ABRT_CoMaRThi_ColdMassRThick+ABRT_BielYhei_BiellYheight-ABRT_BielYcHo_BiellYcenHole ; 0. ; 0. " rot=" 90. ; 0. ; 0. " /> + <posXYZ volume="BAR_Voussoir" X_Y_Z=" GENV_Co225*ABRT_VoussRad_VoussoirRadius ; -GENV_Si225*ABRT_VoussRad_VoussoirRadius ; 0. " rot=" 0. ; 0. ; -22.5" /> +</composition> + + + + + +<composition name="BAR_Toroid_Sector" > + <posXYZ volume="BAR_CryoTub_Sector" /> + <posXYZ volume="BAR_ThermShield_Sector" /> + <foreach index="Ivouss" begin="0" loops="4" > + <posXYZ volume="BAR_Strut_Sector" X_Y_Z=" 0. ; 0. ; ABRT_Zvouss[Ivouss] " > + <ring value="-4+Ivouss" /> + </posXYZ> + <posXYZ volume="BAR_Voussoir_Sector" X_Y_Z=" 0. ; 0. ; ABRT_Zvouss[Ivouss] " > + <ring value="-4+Ivouss" /> + </posXYZ> + </foreach> + <foreach index="Ivouss" begin="4" loops="4" > + <posXYZ volume="BAR_Strut_Sector" X_Y_Z=" 0. ; 0. ; ABRT_Zvouss[Ivouss] " > + <ring value="Ivouss-3" /> + </posXYZ> + <posXYZ volume="BAR_Voussoir_Sector" X_Y_Z=" 0. ; 0. ; ABRT_Zvouss[Ivouss] " > + <ring value="Ivouss-3" /> + </posXYZ> + </foreach> + <posXYZ volume="BAR_ColdMass_Sector" /> +</composition> + +<!-- +<composition name="BAR_Toroid" > + <mposPhi volume="BAR_Toroid_Sector" Phi0="22.5" ncopy="8" > + <sector value="1" step="1" /> + </mposPhi> +</composition> +--> +<composition name="BAR_sector02" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ; 22.5" /> +</composition> +<composition name="BAR_sector04" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ; 67.5" /> +</composition> +<composition name="BAR_sector06" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;112.5" /> +</composition> +<composition name="BAR_sector08" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;157.5" /> +</composition> +<composition name="BAR_sector10" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;202.5" /> +</composition> +<composition name="BAR_sector12" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;247.5" /> +</composition> +<composition name="BAR_sector14" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;292.5" /> +</composition> +<composition name="BAR_sector16" > + <posXYZ volume="BAR_Toroid_Sector" rot=" 0. ; 0. ;337.5" /> +</composition> +<composition name="BAR_Toroid" > + <posXYZ volume="BAR_sector02"/> + <posXYZ volume="BAR_sector04"/> + <posXYZ volume="BAR_sector06"/> + <posXYZ volume="BAR_sector08"/> + <posXYZ volume="BAR_sector10"/> + <posXYZ volume="BAR_sector12"/> + <posXYZ volume="BAR_sector14"/> + <posXYZ volume="BAR_sector16"/> +</composition> + +</section> + +<section name = "Solenoid" + version = "1.1" + date = "22 11 1962" + author = "laurent" + top_volume = "Solenoid"> +<!-- name = Solenoid section name = "Magnets" --> +<!-- + ************************************************************** + *** **** + *** Solenoid **** + *** **** + ************************************************************** +--> + +<tubs name="tubs_hole" material="Aluminium" Rio_Z="1210;1267;5300" /> +<composition name="Solenoid"> + <posXYZ volume="tubs_hole" X_Y_Z=" 0 ; 0 ; 0" /> +</composition> +</section> + +<section name = "ATLAS Feet" + version = "7.0" + date = "20 November 2003" + author = "Jochen Meyer, Daniel Pomarede, Laurent Chevalier" + top_volume = "Feet"> + + +<!-- reviewed/corrected in October 2009 by Jochen Meyer + comment: * blueprint references are available on the twiki Pages + * still some details are missing --> + +<!-- name = Feet only section name = "Feet" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** ATLAS Feet **** + *** **** + ************************************************************** + ************************************************************** --> +<!-- Standard Feet --> +<!-- Basic parameters extracted from drawing ATLHBFB_0003 --> + + +<!-- Main Plate --> +<!-- BEGIN confirmation with atlhbfb_0003-vAF (if no other comment) --> +<var name="FEET_MainPlXo_MainPlateXorigin" value=" 0. " /> +<var name="FEET_MnPlGXwi_MainPlate_GroundXwidth" value=" 1800. " /> <!-- confirmed atcnh___0005-vAG --> +<var name="FEET_MnPlRCdx_MainPlateRoundCutDX" value=" 868. " /> +<var name="FEET_MnPldxex_MainPlateDXextr" value=" 733. " /> +<var name="FEET_MnPlUpDx_MainPlateUpperDX" value=" 1234.5" /> +<var name="FEET_MnPlUpXw_MainPlateUpperXwidth" value=" 1315. " /> +<var name="FEET_MnPlMiDx_MainPlateMiddleDX" value=" 380. " /> + +<var name="FEET_MainPlYo_MainPlateYorigin" value=" 0. " /> +<var name="FEET_MainPlHe_MainPlateHeight" value=" 5300. " /> +<var name="FEET_MainPlH1_MainPlateHeight_intermediate1" value=" 1605. " /> +<var name="FEET_MnPlRCYp_MainPlateRoundCut_Y" value=" 2173. " /> +<var name="FEET_MnPlSRCY_MainPlateSecondaryRoundCut_Y" value=" 1958. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="FEET_MnPlUpDy_MainPlateUpperDY" value=" 790. " /> +<var name="FEET_MnPlMiDy_MainPlateMiddleDY" value=" 1813. " /> +<var name="FEET_MnPlPeHe_MainPlate_PedestalHeight" value=" 60. " /> + +<var name="FEET_MainPldZ_MainPlateDZ" value=" 80. " /> +<var name="FEET_MnPlZsep_MainPlateZsep" value=" 980. " /> + +<var name="FEET_MnPlRCra_MainPlateRoundCut_R" value=" 615. " /> +<var name="FEET_MnPlSRCr_MainPlateSecondaryRoundCut_R" value=" 400. " /> <!-- NO CONFIRMATION POSSIBLE --> + +<var name="FEET_MnPlHDiX_MainPlateHoleDistanceX" value=" 1275. " /> + + +<!-- Connecting Plates --> + +<var name="FEET_MinCPlxw_MiniConnPlate_Xwidth" value=" 310. " /> +<var name="FEET_MinCPlyh_MiniConnPlate_Yheight" value=" 75. " /> +<var name="FEET_MinCPltz_MiniConnPlate_ThetaZ" value=" 22.5" /> +<var name="FEET_MinCPlzl_MiniConnPlate_Zlength" value=" 1100. " /> + +<var name="FEET_SlaCPlxw_SlantedConnPlate_Xwidth" value=" 2964. " /> <!-- GUESS since volume is a rough approx. --> +<var name="FEET_SlaCPlyh_SlantedConnPlate_Yheight" value=" 70. " /> <!-- confirmed atlhbfc_0003-vAG --> +<var name="FEET_SlaCPltz_SlantedConnPlate_ThetaZ" value=" -67.5" /> +<var name="FEET_SlaCPlzl_SlantedConnPlate_Zlength" value=" 1100. " /> <!-- confirmed atlhbfc_0003-vAG --> + +<var name="FEET_SlaCPlBr_BracketTriangle_Zwidth" value=" 5. " /> <!-- atlmh__0011-v0 --> +<var name="FEET_SlaCPlBr_BracketTube_Short" value=" 1016. " /> <!-- atlmh__0011-v0 --> +<var name="FEET_SlaCPlBr_BracketTube_Long" value=" 1140. " /> <!-- atlmh__0011-v0 --> +<var name="FEET_SlaCPlBr_Bracket_Pos" value=" 600. " /> <!-- approximate position --> +<var name="FEET_SlaCPlBr_BracketTub_OuterRadius" value=" 37.5" /> <!-- atlmh__0011-v0 --> +<var name="FEET_SlaCPlBr_BracketTub_InnerRadius" value=" 32.5" /> <!-- atlmh__0011-v0 --> + +<var name="FEET_GrndPlzl_GroundPlate_Zlength" value=" 1150. " /> <!-- confirmed atcnh___0005-vAG --> + +<var name="FEET_VCnPlxwi_VerticalConnPlate_Xwidth" value=" 80. " /> +<var name="FEET_VCnPlyhe_VerticalConnPlate_Yheight" value=" 1890. " /> +<var name="FEET_VCnPldxe_VerticalConnPlate_DX" value=" 150. " /> +<var name="FEET_VCnPldye_VerticalConnPlate_DY" value=" 1140. " /> + +<var name="FEET_UCnPlxwi_UpperConnPlate_Xwidth" value=" 57. " /> +<var name="FEET_UCnPlyhe_UpperConnPlate_Yheight" value=" 790. " /> +<var name="FEET_UpCPzlen_UpperConnPlate_Zlength" value=" 980. " /> +<!-- END confirmation with atlhbfb_0003-vAF --> + +<!-- Rail Support --> +<!-- BEGIN confirmation with atlhbsf_0002-vAE (if no other comment) --> +<var name="FEET_Xwidth" value=" 525. "/> + +<var name="FEET_UpperHeY_RailSupportUpper_Yheight" value=" 120. " /> +<var name="FEET_UpperLeZ_RailSupportUpper_Zlength" value=" 1190. " /> + +<var name="FEET_LowerHeY_RailSupportLower_Yheight" value=" 95. " /> +<var name="FEET_LowerLeZ_RailSupportLower_Zlength" value=" 1100. " /> + +<var name="FEET_TotalHeY_RailSupportTotal_Yheight" value=" 890. " /> +<var name="FEET_CentrLeZ_RailSupportCentral_Zlength" value=" 1080. " /> +<var name="FEET_CentrXth_RailSupportCentral_Xthick" value=" 100. " /> +<var name="FEET_MidllYth_RailSupportMiddle_Ythick" value=" 80. " /> +<var name="FEET_VertiZth_RailSupportVertical_Zthick" value=" 80. " /> +<var name="FEET_MidllYpo_RailSupportMiddle_Ypos" value=" 400. " /> + +<var name="FEET_ExtreHeY_RailSupportExtr_Yheight" value=" 15. " /> +<var name="FEET_ExtreLeZ_RailSupportExtr_Zlength" value=" 700. " /> + +<var name="FEET_HoleDist_RailSupport_DrillHoleDist" value=" 385. " /> +<!-- END confirmation with atlhbsf_0002-vAE --> + +<var name="FEET_CentrHeY_RailSupportCentral_Yheight" value="FEET_TotalHeY_RailSupportTotal_Yheight - FEET_UpperHeY_RailSupportUpper_Yheight - FEET_LowerHeY_RailSupportLower_Yheight " /> + +<!-- Standard Feet Strut ATLTBWS_0011 --> +<!-- BEGIN confirmation with atltbws_0011-v0 (if no other comment) --> +<var name="FEET_SFSthicz" value=" 40. " /> +<var name="FEET_SFSthicy" value=" 50. " /> +<var name="FEET_SFSwidth" value=" 400. " /> +<var name="FEET_SFSheigh" value=" 600. " /> +<var name="FEET_SFSangle" value=" 10. " /> +<var name="FEET_SFSthicx" value=" 55. " /> <!-- unused variable --> +<var name="FEET_SFSlengx" value="3440. " /> +<var name="FEET_SFSRCutR" value=" 210. " /> +<var name="FEET_SFSRCpx" value=" 897.5" /> +<var name="FEET_SFSmystic" value=" 20. " /> <!-- NO CONFIRMATION POSSIBLE --> + +<!-- Extremity Feet Strut ATLTBWS_0012 --> +<var name="FEET_EFSlengx" value="2780. " /> <!-- confirmed atcnh___0005-vAG --> + +<!-- Standard Feet Strut extremity plate --> +<var name="FEET_SFSEPdz" value=" 500. " /> +<var name="FEET_SFSEPdy" value=" 690. " /> +<var name="FEET_SFSEPdx" value=" 55. " /> +<!-- Standard and Extremity Feet Strut spacers --> +<var name="FEET_SFSSPdz" value=" 980. " /> +<var name="FEET_EFSSPdz" value=" 980. " /> <!-- confirmed in discussion with Tatiana Klioutchnikova --> +<var name="FEET_SFSSPdy" value=" 790. " /> +<var name="FEET_EFSSPdy" value=" 740. " /> <!-- to be confirmed --> +<var name="FEET_SFSSPdx" value=" 55. " /> +<!-- END confirmation with atltbws_0011-v0 --> +<!-- comment on the following two values: since the feet position was adjusted FEET_SFSSPsep was increased without clash! +these parts had been maschined during installation so that the true value is not known and different for each foot --> +<var name="FEET_SFSSPsep" value=" 18.5 "/> <!-- to be confirmed, drawing gives 15mm leading to clash with feet --> +<var name="FEET_EFSSPsep" value=" 28.5 "/> <!-- to be confirmed --> + +<!-- Girder 1-2 --> +<!-- BEGIN confirmation with atlhbg1_0001-vAF (if no other comment) --> +<var name="FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total" value=" 2355. " /> +<var name="FEET_G12IPSxo_Girder12_InnerPlateSmalloffset_Xdist" value=" 35. " /> +<var name="FEET_G12IPSLx_Girder12_InnerPlateSmall2Large_Xdist" value=" 995. " /> +<var name="FEET_G12IPLLx_Girder12_InnerPlateLarge2Large_Xdist" value=" 335. " /> +<var name="FEET_G12IPLSx_Girder12_InnerPlateLarge2Small_Xdist" value=" 960. " /> + +<var name="FEET_G12RPxwi_Girder12_ReinforcementPlate_Xwidth" value=" 2015. " /> +<var name="FEET_G12LPxw1_Girder12_LateralPlate_Xwidth_Inter1" value=" 1558. " /> + +<var name="FEET_G12LPx12_Girder12_LateralPlate_Xwidth_Inter1Inter2" value=" 263.5" /> +<var name="FEET_G12IPxwi_Girder12_InnerPlate_Xwidth" value=" 30. " /> +<var name="FEET_G12UMPwi_Girder12_UpperMiniPlate_Xwidth" value=" 135. " /> +<var name="FEET_G12SMPwi_Girder12_SideMiniPlate_Xwidth" value=" 135. " /> + +<var name="FEET_G12yorig_Girder12_Yorigin" value=" 0. " /> +<var name="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total" value=" 445. " /> +<var name="FEET_G12LPyh1_Girder12_LateralPlate_Yheight_Inter1" value=" 375. " /> +<var name="FEET_G12LPyh2_Girder12_LateralPlate_Yheight_Inter2" value=" 260. " /> +<var name="FEET_G12LPyth_Girder12_LowerPlate_Ythick" value=" 40. " /> +<var name="FEET_G12UPyth_Girder12_UpperPlate_Ythick" value=" 40. " /> +<var name="FEET_G12RPydi_Girder12_ReinforcementPlate_Ydist" value=" 330. " /> +<var name="FEET_G12UMPyh_Girder12_UpperMiniPlate_Yheight" value=" 40. " /> + +<var name="FEET_G12UPzle_Girder12_UpperPlate_Zlength" value=" 640. " /> +<var name="FEET_G12UMPzl_Girder12_UpperMiniPlate_Zlength" value=" 630. " /> +<var name="FEET_G12BPzle_Girder12_BottomPlate_Zlength" value=" 460. " /> +<var name="FEET_G12LPzle_Girder12_LateralPlate_Zlength" value=" 40. " /> <!-- unused variable --> +<var name="FEET_G12RPzle_Girder12_ReinforcementPlate_Zlength" value=" 40. " /> +<var name="FEET_G12SMPzl_Girder12_SideMiniPlate_Zlength" value=" 50. " /> +<!-- END confirmation with atlhbg1_0001-vAF --> + + +<!-- Girder 2-3 --> +<!-- BEGIN confirmation with atlhbg2_0001-vAF (if no other comment) --> +<var name="FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total" value=" 2135. " /> +<var name="FEET_G23IPSxo_Girder23_InnerPlateSmalloffset_Xdist" value=" 35. " /> +<var name="FEET_G23IPSLx_Girder23_InnerPlateSmall2Large_Xdist" value=" 1025. " /> +<var name="FEET_G23IPLLx_Girder23_InnerPlateLarge2Large_Xdist" value=" 305. " /> +<var name="FEET_G23IPLSx_Girder23_InnerPlateLarge2Small_Xdist" value=" 740. " /> + +<var name="FEET_G23RPxwi_Girder23_ReinforcementPlate_Xwidth" value=" 1795. " /> +<var name="FEET_G23LPxw1_Girder23_LateralPlate_Xwidth_Inter1" value=" 1338. " /> + +<var name="FEET_G23LPx12_Girder23_LateralPlate_Xwidth_Inter1Inter2" value=" 263.5" /> +<var name="FEET_G23IPxwi_Girder23_InnerPlate_Xwidth" value=" 30. " /> +<var name="FEET_G23UMPwi_Girder23_UpperMiniPlate_Xwidth" value=" 135. " /> +<var name="FEET_G23SMPwi_Girder23_SideMiniPlate_Xwidth" value=" 135. " /> +<!-- END confirmation with atlhbg2_0001-vAF --> + +<!-- Girder 3-4 --> +<!-- BEGIN confirmation with atlhbg3_0001-vAF (if no other comment) --> +<var name="FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total" value=" 1680. " /> +<var name="FEET_G34IPSxo_Girder34_InnerPlateSmalloffset_Xdist" value=" 35. " /> +<var name="FEET_G34IPSLx_Girder34_InnerPlateSmall2Large_Xdist" value=" 895. " /> +<var name="FEET_G34IPLLx_Girder34_InnerPlateLarge2Large_Xdist" value=" 335. " /> +<var name="FEET_G34IPLSx_Girder34_InnerPlateLarge2Small_Xdist" value=" 385. " /> + +<var name="FEET_G34RPxwi_Girder34_ReinforcementPlate_Xwidth" value=" 1340. " /> +<var name="FEET_G34LPxw1_Girder34_LateralPlate_Xwidth_Inter1" value=" 883. " /> + +<var name="FEET_G34LPx12_Girder34_LateralPlate_Xwidth_Inter1Inter2" value=" 263.5" /> +<var name="FEET_G34IPxwi_Girder34_InnerPlate_Xwidth" value=" 30. " /> +<var name="FEET_G34UMPwi_Girder34_UpperMiniPlate_Xwidth" value=" 135. " /> +<var name="FEET_G34SMPwi_Girder34_SideMiniPlate_Xwidth" value=" 135. " /> +<!-- END confirmation with atlhbg3_0001-vAF --> + +<!-- Girder Extremity --> +<!-- BEGIN confirmation with atlhbg4_0002-vAE (if no other comment) --> +<var name="FEET_GExBPzw_GirderEx_BottomPlate_Zwidth" value=" 40. " /> +<var name="FEET_GExBPyw_GirderEx_BottomPlate_Ywidth" value=" 765. " /> +<var name="FEET_GExBPxws_GirderEx_BottomPlate_Xwidth_Short" value=" 507. " /> +<var name="FEET_GExBPxwl_GirderEx_BottomPlate_Xwidth_Long" value=" 778. " /> +<var name="FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ" value=" 50. " /> + +<var name="FEET_GExFPzw_GirderEx_FrontPlate_Zwidth" value=" 40. " /> +<var name="FEET_GExFPyw_GirderEx_FrontPlate_Ywidth" value=" 383.5" /> +<var name="FEET_GExFPxw_GirderEx_FrontPlate_Xwidth" value=" 389.5" /> + +<var name="FEET_GExSPzw_GirderEx_SidePlate_Zwidth" value=" 40. " /> +<var name="FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short" value=" 259.5" /> +<var name="FEET_GExSPywl_GirderEx_SidePlate_Ywidth_Long" value=" 857. " /> +<var name="FEET_GExSPxw_GirderEx_SidePlate_Xwidth" value=" 725. " /> +<var name="FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ" value=" 80. " /> +<var name="FEET_GExSPxs_GirderEx_SidePlate_XShift" value=" 294.5" /> + +<var name="FEET_GExTPzws_GirderEx_TopPlate_Zwidth_Short" value=" 75. " /> <!-- GUESS since maschined during installation --> +<var name="FEET_GExTPzwl_GirderEx_TopPlate_Zwidth_Long" value=" 80. " /> +<var name="FEET_GExTPyws_GirderEx_TopPlate_Ywidth_Short" value=" 650. " /> +<var name="FEET_GExTPywl_GirderEx_TopPlate_Ywidth_Long" value=" 850. " /> +<var name="FEET_GExTPxwt_GirderEx_TopPlate_Xwidth_Total" value=" 740. " /> +<var name="FEET_GExTPxwp_GirderEx_TopPlate_Xwidth_Part" value=" 46. " /> +<var name="FEET_GExTPangi_GirderEx_TopPlate_AngleInternal" value=" 50. " /> +<!-- END confirmation with atlhbg4_0002-vAE --> + +<var name="FEET_GExCzw_GirderEx_Connector_Zwidth" value=" 70. " /> <!-- confirmed atcnh___0005-vAG --> + +<!-- BEGIN confirmation with atlhbeb_0032-vAA (if no other comment) --> +<var name="FEET_GExTCxw_GirderEx_TopConnector_Xwidth" value=" 960. " /> +<var name="FEET_GExTCyw_GirderEx_TopConnector_Ywidth" value=" 200. " /> +<var name="FEET_GExSCxw_GirderEx_SideConnector_Xwidth" value=" 200. " /> +<var name="FEET_GExSCyw_GirderEx_SideConnector_Ywidth" value=" 700. " /> +<var name="FEET_GExBCxw_GirderEx_BottomConnector_Xwidth" value=" 850. " /> +<var name="FEET_GExBCyw_GirderEx_BottomConnector_Ywidth" value=" 200. " /> +<var name="FEET_GExCys_GirderEx_Connector_Yshift" value=" 68. " /> <!-- GUESS since maschined during installation --> + + +<!-- Extremity Feet specific parameters --> + +<var name="FEET_ExMPheig_ExtremityMainPlate_Height" value=" 5420. " /> +<var name="FEET_ExMPRCra_ExtremityMainPlateRoundCut_R" value=" 385. " /> +<var name="FEET_ExMPRCdx_ExtremityMainPlateRoundCut_DX" value=" 1058. " /> +<var name="FEET_ExMPRCyp_ExtremityMainPlateRoundCut_Y" value=" 2780. " /> +<var name="FEET_ExMCPyhe_ExtremityMiniConnPlate_Yheight" value=" 75. " /> +<var name="FEET_ExMCPzle_ExtremityMiniConnPlate_Zlength" value=" 1480. " /> +<var name="FEET_ExGPzlen_ExtremityGroundPlate_Zlength" value=" 1460. " /> +<var name="FEET_ExSCPzle_ExtremitySlantedConnPlate_Zlength" value=" 1450. " /> <!-- confirmed atlhbec_0001-vAF --> +<var name="FEET_ExRSzoff_ExtremityRailSupport_Zoffset" value=" 62.5 " /> <!-- confirmed with a comparison of drilled holes in atlhbeb_0032-vAA and atlhbse_0001-vAG--> + +<var name="FEET_ExMPhei1_ExtremityMainPlate_Height_intermediate1" value=" 1727. " /> +<var name="FEET_ExMPhei2_ExtremityMainPlate_Height_intermediate2" value=" 1558. " /> + +<var name="FEET_ExMPxwid_ExtremityMainPlate_Xwidth" value=" 1635. " /> +<var name="FEET_ExMPxwi1_ExtremityMainPlate_Xwidth_inter1" value=" 1013. " /> +<var name="FEET_ExMPxwi2_ExtremityMainPlate_Xwidth_inter2" value=" 510. " /> + +<var name="FEET_ExMPyhi1_ExtremityMainPlate_Yheight_inter1" value=" 93. " /> +<var name="FEET_ExMPyhi2_ExtremityMainPlate_Yheight_inter2" value=" 4480. " /> +<var name="FEET_ExMPyhi3_ExtremityMainPlate_Yheight_inter3" value=" 740. " /> +<var name="FEET_ExMPyhi4_ExtremityMainPlate_Yheight_inter4" value=" 100. " /> + +<var name="FEET_ExMPxdi1_ExtremityMainPlate_Xdist_inter1" value=" 1070. " /> +<var name="FEET_ExMPxdi2_ExtremityMainPlate_Xdist_inter2" value=" 688. " /> +<var name="FEET_ExMPydi2_ExtremityMainPlate_Ydist_inter1" value=" 2834. " /> + +<var name="FEET_ExVCPldx_ExtremityVerticalConnPlate_DX" value=" 100. " /> +<var name="FEET_ExVCPldy_ExtremityVerticalConnPlate_DY" value=" 1075. " /> + +<var name="FEET_ExMPzsep_ExtremityMainPlate_Zsep" value=" 1360. " /> + +<var name="FEET_ExSPRCra_ExtremitySlantedConnPlateRoundCut_Radius" value=" 225. " /> <!-- confirmed atlhbec_0001-vAF --> +<var name="FEET_ExSPRCof_ExtremitySlantedConnPlateRoundCut_Offset" value=" -400. " /> <!-- GUESS since volume is a rough approx. --> + +<var name="FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness" value=" 80. " /> +<var name="FEET_ExVCPxex_ExtremityVerticalConnPlate_Xext" value=" 284. " /> +<var name="FEET_ExVCPhei_ExtremityVerticalConnPlate_Height" value=" 2005. " /> + +<var name="FEET_ExVCPycu_ExtremityVerticalConnPlate_CutY" value=" 337. " /> +<var name="FEET_ExVCPxcu_ExtremityVerticalConnPlate_CutX" value=" 450. " /> + +<var name="FEET_ExUCPyhe_ExtremityUpperConnPlate_Yheight" value=" 740. " /> +<var name="FEET_ExUCPzle_ExtremityUpperConnPlate_Zlength" value=" 1360. " /> +<!-- END confirmation with atlhbeb_0032-vAA --> + +<!-- Extremity Feet Rail support --> +<!-- BEGIN confirmation with atlhbse_0001-vAG (if no other comment) --> +<var name="FEET_ExRSUzle_ExtremityRailSupportUpper_Zlength" value=" 1820. " /> +<var name="FEET_ExRSLdzl_ExtremityRailSupportLower_DZlength" value=" 20. " /> +<var name="FEET_ExRSTyhe_ExtremityRailSupportTotal_Yheight" value=" 790. " /> +<var name="FEET_ExRSLyhe_ExtremityRailSupportLower_Yheight" value=" 90. " /> +<var name="FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight" value=" 20. " /> + +<var name="FEET_ExRSCyhe_ExtremityRailSupportCentral_Yheight" value=" 560. " /> +<var name="FEET_ExRSCzle_ExtremityRailSupportCentral_Zlength" value=" 1820. " /> +<var name="FEET_ExRSMzle_ExtremityRailSupportMiddle_Zlength" value=" 1205. " /> + +<var name="FEET_ExRSCxwi_ExtremityRailSupportCentral_Xwidth" value=" 80. " /> +<var name="FEET_ExRSMxwi_ExtremityRailSupportMiddle_Xwidth" value=" 222.5 " /> +<var name="FEET_ExRSVxwi_ExtremityRailSupportVertical_Xwidth" value=" 222.5 " /> + +<var name="FEET_ExRSVzi1_ExtremityRailSupportVertical_Zpos_inter1" value=" 420. " /> +<var name="FEET_ExRSEzle_ExtremityRailSupportExtr_Zlength" value=" 1090. " /> +<var name="FEET_ExRSEzof_ExtremityRailSupportExtr_Zoffset" value=" 180. " /> + +<var name="FEET_ExRSC1de_ExtremityRailSupportCut1_Depth" value=" 217. " /> +<var name="FEET_ExRSC1wi_ExtremityRailSupportCut1_Width" value=" 950. " /> + +<var name="FEET_ExRSC1xe_ExtremityRailSupportCut1_dumXext" value=" 300. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="FEET_ExRSC2xe_ExtremityRailSupportCut2_dumXext" value=" 320. " /> <!-- NO CONFIRMATION POSSIBLE --> + +<var name="FEET_ExRSC2z1_ExtremityRailSupportCut1_Zoffset1" value=" 604. " /> +<var name="FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2" value=" 200. " /> + +<var name="FEET_ExRSMCde_ExtremityRailSupportMiddleCut_Depth" value=" 149. " /> +<var name="FEET_ExRSMCwi_ExtremityRailSupportMiddleCut_Width" value=" 860. " /> +<var name="FEET_ExRSMCzo_ExtremityRailSupportMiddleCut_Zoffset" value=" 206. " /> + +<var name="FEET_ExRSMCy1_ExtremityRailSupportMiddleCut_dumy1" value=" 300. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="FEET_ExRSMCy2_ExtremityRailSupportMiddleCut_dumy2" value=" 600. " /> <!-- NO CONFIRMATION POSSIBLE --> +<!-- END confirmation with atlhbse_0001-vAG --> + +<!-- Global Positions --> +<!-- BEGIN confirmation with atcnh___0005-vAG (if no other comment) --> +<var name="FEET_StdFooXp_StandardFoot_Xpos" value=" 2710. " /> +<var name="FEET_StdFooYp_StandardFoot_Ypos" value="-11020. " /> + +<var name="FEET_ZposFee1" value=" 0. " /> +<var name="FEET_ZposFee2" value=" 3425. " /> +<var name="FEET_ZposFee3" value=" 6630. " /> +<var name="FEET_ZposFee4" value=" 9380. " /> +<var name="FEET_ZposFee5" value=" 12080. " /> + +<var name="FEET_GirdExtXpos_XposGirderEx" value=" 2735.5 " /> +<var name="FEET_GirdExtZpos_ZposGirderEx" value=" 6625. " /> + + +<var name="FEET_GirdYHei_YHeightGirder" value=" 3935. " /> +<var name="FEET_GirdXpos_XposGirder" value=" 2735.5 " /> +<!-- END confirmation with atcnh___0005-vAG --> + + +<!-- Additional parameters of arbitrary values --> +<var name="FEET_MPlaHcec_FeetMainPlate_Hcec" value=" 50. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="FEET_dumz" value="2000. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="FEET_dumphi" value=" 36. " /> <!-- NO CONFIRMATION POSSIBLE --> + + + + +<!-- Standard Feet Modelization of Main Plate --> + +<var name="FEET_MainPlXa" value=" FEET_MainPlXo_MainPlateXorigin " /> +<var name="FEET_MainPlYa" value=" FEET_MainPlYo_MainPlateYorigin + FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<var name="FEET_MainPlXb" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth " /> +<var name="FEET_MainPlYb" value=" FEET_MainPlYo_MainPlateYorigin + FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<var name="FEET_MainPlXc" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth " /> +<var name="FEET_MainPlYc" value=" FEET_MainPlH1_MainPlateHeight_intermediate1 + FEET_MnPlPeHe_MainPlate_PedestalHeight" /> + +<!-- Circular extrusion --> + +<var name="FEET_MaPlRCXc_MainPlateRoundCut_XC" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth-FEET_MnPlRCdx_MainPlateRoundCutDX " /> +<var name="FEET_MaPlRCYc_MainPlateRoundCut_YC" value=" FEET_MnPlRCYp_MainPlateRoundCut_Y + FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<var name="FEET_MaiPlXc3" value=" FEET_MaPlRCXc_MainPlateRoundCut_XC - FEET_MnPlRCra_MainPlateRoundCut_R * GENV_Co45 " /> +<var name="FEET_MaiPlYc3" value=" FEET_MaPlRCYc_MainPlateRoundCut_YC + FEET_MnPlRCra_MainPlateRoundCut_R * GENV_Si45 " /> + + +<!-- Additional circular extrusion --> + +<var name="FEET_MPlXextr_FeetMainPlate_Xextr" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth - FEET_MnPldxex_MainPlateDXextr " /> +<var name="FEET_MPlYextr_FeetMainPlate_Yextr" value=" FEET_MnPlSRCY_MainPlateSecondaryRoundCut_Y + FEET_MnPlPeHe_MainPlate_PedestalHeight" /> +<var name="FEET_MPlRextr_FeetMainPlate_Rextr" value=" FEET_MnPlSRCr_MainPlateSecondaryRoundCut_R " /> +<var name="FEET_MaiPlXc2" value=" FEET_MPlXextr_FeetMainPlate_Xextr + FEET_MPlRextr_FeetMainPlate_Rextr * GENV_Si225 " /> +<var name="FEET_MaiPlYc2" value=" FEET_MPlYextr_FeetMainPlate_Yextr - FEET_MPlRextr_FeetMainPlate_Rextr * GENV_Co225 " /> + +<!-- Circular extrusions completion --> + +<var name="FEET_MPlXcec1" value=" FEET_MPlXextr_FeetMainPlate_Xextr " /> +<var name="FEET_MPlYcec1" value=" FEET_MPlYextr_FeetMainPlate_Yextr - FEET_MPlRextr_FeetMainPlate_Rextr " /> +<var name="FEET_MPlXcec2" value=" FEET_MaPlRCXc_MainPlateRoundCut_XC " /> +<var name="FEET_MPlYcec2" value=" FEET_MaPlRCYc_MainPlateRoundCut_YC - FEET_MnPlRCra_MainPlateRoundCut_R " /> + +<var name="FEET_a" value=" GENV_Ta45 " /> +<var name="FEET_b" value=" FEET_MaiPlYc3 - FEET_MaiPlXc3 * GENV_Ta45 " /> +<var name="FEET_aprime" value="-GENV_Ta675 " /> +<var name="FEET_bprime" value=" FEET_MainPlYc + FEET_MainPlXc * GENV_Ta675 " /> +<var name="FEET_aseconde" value=" GENV_Ta225 " /> +<var name="FEET_bseconde" value=" FEET_MaiPlYc2 - FEET_MaiPlXc2 * FEET_aseconde " /> + +<var name="FEET_MainPlXd" value=" -(FEET_b-FEET_bprime)/(FEET_a-FEET_aprime) " /> +<var name="FEET_MainPlYd" value=" FEET_a*FEET_MainPlXd + FEET_b " /> +<var name="FEET_MainPlXe" value=" FEET_MainPlXc - FEET_MnPlUpDx_MainPlateUpperDX " /> +<var name="FEET_MainPlYe" value=" FEET_aprime*FEET_MainPlXe + FEET_bprime " /> +<var name="FEET_MaiPlXc1" value=" -(FEET_bseconde-FEET_bprime)/(FEET_aseconde-FEET_aprime) " /> +<var name="FEET_MaiPlYc1" value=" FEET_aseconde*FEET_MaiPlXc1 + FEET_bseconde " /> +<var name="FEET_MainPlXf" value=" FEET_MainPlXe " /> +<var name="FEET_MainPlYf" value=" FEET_MainPlHe_MainPlateHeight " /> +<var name="FEET_MainPlXg" value=" FEET_MainPlXe - FEET_MnPlUpXw_MainPlateUpperXwidth " /> +<var name="FEET_MainPlYg" value=" FEET_MainPlHe_MainPlateHeight " /> +<var name="FEET_MainPlXh" value=" FEET_MainPlXg " /> +<var name="FEET_MainPlYh" value=" FEET_MainPlHe_MainPlateHeight - FEET_MnPlUpDy_MainPlateUpperDY " /> +<var name="FEET_MainPlXi" value=" FEET_MainPlXo_MainPlateXorigin - FEET_MnPlMiDx_MainPlateMiddleDX " /> +<var name="FEET_MainPlYi" value=" FEET_MnPlMiDy_MainPlateMiddleDY + FEET_MnPlMiDx_MainPlateMiddleDX*GENV_Ta675 " /> +<var name="FEET_MainPlXj" value=" FEET_MainPlXo_MainPlateXorigin " /> +<var name="FEET_MainPlYj" value=" FEET_MnPlMiDy_MainPlateMiddleDY + FEET_MnPlPeHe_MainPlate_PedestalHeight" /> + + + +<gvxy name="FeetMainPlate" material="Iron" dZ="FEET_MainPldZ_MainPlateDZ" > + <gvxy_point X_Y=" FEET_MainPlXa ; FEET_MainPlYa " /> + <gvxy_point X_Y=" FEET_MainPlXb ; FEET_MainPlYb " /> + <gvxy_point X_Y=" FEET_MainPlXc ; FEET_MainPlYc " /> + <gvxy_point X_Y=" FEET_MaiPlXc1 ; FEET_MaiPlYc1 " /> + <gvxy_point X_Y=" FEET_MaiPlXc2 ; FEET_MaiPlYc2 " /> + <gvxy_point X_Y=" FEET_MaiPlXc3 ; FEET_MaiPlYc3 " /> + <gvxy_point X_Y=" FEET_MainPlXd ; FEET_MainPlYd " /> + <gvxy_point X_Y=" FEET_MainPlXe ; FEET_MainPlYe " /> + <gvxy_point X_Y=" FEET_MainPlXf ; FEET_MainPlYf " /> + <gvxy_point X_Y=" FEET_MainPlXg ; FEET_MainPlYg " /> + <gvxy_point X_Y=" FEET_MainPlXh ; FEET_MainPlYh " /> + <gvxy_point X_Y=" FEET_MainPlXi ; FEET_MainPlYi " /> + <gvxy_point X_Y=" FEET_MainPlXj ; FEET_MainPlYj " /> +</gvxy> + +<tubs name="MainPlateRoundCut" material="Aluminium1" Rio_Z=" 0 ; FEET_MnPlRCra_MainPlateRoundCut_R ; FEET_dumz" nbPhi="FEET_dumphi" /> +<tubs name="MainPlateSecondaryRoundCut" material="Aluminium1" Rio_Z=" 0 ; FEET_MPlRextr_FeetMainPlate_Rextr ; FEET_dumz" nbPhi="FEET_dumphi" /> +<gvxy name="MainPlateRoundCutCompletion" material="Aluminium1" dZ="FEET_dumz" > + <gvxy_point X_Y=" FEET_MPlXcec1 ; FEET_MPlYcec1 " /> + <gvxy_point X_Y=" FEET_MPlXcec1 ; FEET_MPlYcec1 + FEET_MPlaHcec_FeetMainPlate_Hcec " /> + <gvxy_point X_Y=" FEET_MPlXcec2 ; FEET_MPlYcec2 + FEET_MPlaHcec_FeetMainPlate_Hcec " /> + <gvxy_point X_Y=" FEET_MPlXcec2 ; FEET_MPlYcec2 " /> +</gvxy> + + +<!-- Ensemble of Connecting plates --> + +<var name="FEET_Alpha1" value="FEET_MinCPltz_MiniConnPlate_ThetaZ + atan(FEET_MinCPlyh_MiniConnPlate_Yheight/FEET_MinCPlxw_MiniConnPlate_Xwidth)/GENV_PiS180" /> +<var name="FEET_CoAl1" value="cos(FEET_Alpha1*GENV_PiS180)" /> +<var name="FEET_SiAl1" value="sin(FEET_Alpha1*GENV_PiS180)" /> +<var name="FEET_MiCPDiag_MiniConnPlate_DIAG" value=" ( (FEET_MinCPlxw_MiniConnPlate_Xwidth/2.)**2. + (FEET_MinCPlyh_MiniConnPlate_Yheight/2.)**2. )**0.5 " /> +<var name="FEET_MiCPxpos_MiniConnPlate_X" value=" FEET_MaiPlXc1-FEET_MiCPDiag_MiniConnPlate_DIAG*FEET_CoAl1" /> +<var name="FEET_MiCPypos_MiniConnPlate_Y" value=" FEET_MaiPlYc1-FEET_MiCPDiag_MiniConnPlate_DIAG*FEET_SiAl1 " /> +<box name="MiniConnPlate" material="Iron" X_Y_Z="FEET_MinCPlxw_MiniConnPlate_Xwidth; FEET_MinCPlyh_MiniConnPlate_Yheight; FEET_MinCPlzl_MiniConnPlate_Zlength " /> + +<var name="FEET_Alpha2" value="-FEET_SlaCPltz_SlantedConnPlate_ThetaZ + atan(FEET_SlaCPlyh_SlantedConnPlate_Yheight/FEET_SlaCPlxw_SlantedConnPlate_Xwidth)/GENV_PiS180" /> +<var name="FEET_CoAl2" value="cos(FEET_Alpha2*GENV_PiS180)" /> +<var name="FEET_SiAl2" value="sin(FEET_Alpha2*GENV_PiS180)" /> +<var name="FEET_SlCPDiag_SlantedConnPlate_DIAG" value=" ( (FEET_SlaCPlxw_SlantedConnPlate_Xwidth/2.)**2. + (FEET_SlaCPlyh_SlantedConnPlate_Yheight/2.)**2. )**0.5 " /> +<var name="FEET_SlCPBR_POS" value=" 600. " /> +<var name="FEET_SlCPxpos_SlantedConnPlate_X" value=" FEET_MaiPlXc1-FEET_SlCPDiag_SlantedConnPlate_DIAG*FEET_CoAl2 + FEET_MinCPlyh_MiniConnPlate_Yheight*GENV_Si225" /> +<var name="FEET_SlCPypos_SlantedConnPlate_Y" value=" FEET_MaiPlYc1+FEET_SlCPDiag_SlantedConnPlate_DIAG*FEET_SiAl2 - FEET_MinCPlyh_MiniConnPlate_Yheight*GENV_Co225 " /> +<box name="SlantedConnPlate" material="Iron" X_Y_Z="FEET_SlaCPlxw_SlantedConnPlate_Xwidth; FEET_SlaCPlyh_SlantedConnPlate_Yheight; FEET_SlaCPlzl_SlantedConnPlate_Zlength" /> + +<var name="FEET_SlaCPlBr_BracketTriangle_ShortSide" value=" sqrt(FEET_SlaCPlBr_BracketTube_Long**2-FEET_SlaCPlBr_BracketTube_Short**2) " /> +<var name="FEET_SlaCPlBr_BracketTriangle_cosphi" value=" FEET_SlaCPlBr_BracketTube_Short/FEET_SlaCPlBr_BracketTube_Long " /> +<var name="FEET_SlaCPlBr_BracketTriangle_sinphi" value=" FEET_SlaCPlBr_BracketTriangle_ShortSide/FEET_SlaCPlBr_BracketTube_Long " /> + +<gvxy name="SlantedConnPlateBracketTriangle" material="Aluminium" dZ="FEET_SlaCPlBr_BracketTriangle_Zwidth" > + <gvxy_point X_Y="FEET_SlaCPlBr_BracketTriangle_ShortSide; 0." /> + <gvxy_point X_Y=" 0.; 0." /> + <gvxy_point X_Y=" 0.; FEET_SlaCPlBr_BracketTube_Short" /> +</gvxy> + +<tubs name="SlantedConnPlateBracketTubeShort" material="Aluminium" Rio_Z="FEET_SlaCPlBr_BracketTub_InnerRadius; FEET_SlaCPlBr_BracketTub_OuterRadius; FEET_SlaCPlBr_BracketTube_Short" nbPhi="15" /> +<tubs name="SlantedConnPlateBracketTubeLong" material="Aluminium" Rio_Z="FEET_SlaCPlBr_BracketTub_InnerRadius; FEET_SlaCPlBr_BracketTub_OuterRadius; FEET_SlaCPlBr_BracketTube_Long" nbPhi="15" /> + +<composition name="SlantedConnPlateBracket" > + <posXYZ volume="SlantedConnPlateBracketTriangle" X_Y_Z="GENV_Eps+2*FEET_SlaCPlBr_BracketTub_OuterRadius; 0.; 0." rot="0.;0.;0." /> + <posXYZ volume="SlantedConnPlateBracketTubeShort" X_Y_Z="FEET_SlaCPlBr_BracketTub_OuterRadius; FEET_SlaCPlBr_BracketTube_Short/2.; 0. " rot="90.;0.;0." /> + <posXYZ volume="SlantedConnPlateBracketTubeLong" X_Y_Z="GENV_Eps+2.*FEET_SlaCPlBr_BracketTub_OuterRadius+FEET_SlaCPlBr_BracketTriangle_ShortSide/2.+(FEET_SlaCPlBr_BracketTub_OuterRadius+GENV_Eps)*(FEET_SlaCPlBr_BracketTriangle_cosphi); FEET_SlaCPlBr_BracketTube_Short/2+(FEET_SlaCPlBr_BracketTub_OuterRadius+GENV_Eps)*FEET_SlaCPlBr_BracketTriangle_sinphi; 0. " rot="90.; 0.; acos(FEET_SlaCPlBr_BracketTriangle_cosphi)/GENV_PiS180" /> +</composition> + +<var name="FEET_GrnPxwid_GroundPlate_Xwidth" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth " /> +<var name="FEET_GrnPyhei_GroundPlate_Yheight" value=" FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<var name="FEET_GrnPxpos_GroundPlate_X" value=" FEET_GrnPxwid_GroundPlate_Xwidth/2." /> +<var name="FEET_GrnPypos_GroundPlate_Y" value=" FEET_GrnPyhei_GroundPlate_Yheight/2." /> +<box name="GroundPlate" material="Iron" X_Y_Z="FEET_GrnPxwid_GroundPlate_Xwidth; FEET_GrnPyhei_GroundPlate_Yheight; FEET_GrndPlzl_GroundPlate_Zlength" /> + +<var name="FEET_VeCPxpos_VerticalConnPlate_X" value=" FEET_VCnPldxe_VerticalConnPlate_DX - FEET_VCnPlxwi_VerticalConnPlate_Xwidth/2." /> +<var name="FEET_VeCPypos_VerticalConnPlate_Y" value=" FEET_VCnPldye_VerticalConnPlate_DY + FEET_VCnPlyhe_VerticalConnPlate_Yheight/2." /> +<var name="FEET_VeCPzlen_VerticalConnPlate_Zlength" value=" FEET_MnPlZsep_MainPlateZsep - FEET_MainPldZ_MainPlateDZ " /> +<box name="VerticalConnPlate" material="Iron" X_Y_Z="FEET_VCnPlxwi_VerticalConnPlate_Xwidth; FEET_VCnPlyhe_VerticalConnPlate_Yheight; FEET_VeCPzlen_VerticalConnPlate_Zlength" /> + +<var name="FEET_UpCPxpos_UpperConnPlate_X" value=" FEET_MainPlXh - FEET_UCnPlxwi_UpperConnPlate_Xwidth/2." /> +<var name="FEET_UpCPypos_UpperConnPlate_Y" value=" FEET_MainPlYh + FEET_UCnPlyhe_UpperConnPlate_Yheight/2." /> +<box name="UpperConnPlate" material="Iron" X_Y_Z="FEET_UCnPlxwi_UpperConnPlate_Xwidth; FEET_UCnPlyhe_UpperConnPlate_Yheight; FEET_UpCPzlen_UpperConnPlate_Zlength" /> + + + +<!-- Rail Support --> + +<gvxysx name="RailSupportFull" material="Iron4" dZ="FEET_Xwidth" > + <gvxy_point X_Y=" FEET_ExtreLeZ_RailSupportExtr_Zlength/2. ; -FEET_ExtreHeY_RailSupportExtr_Yheight " /> + <gvxy_point X_Y=" FEET_ExtreLeZ_RailSupportExtr_Zlength/2. ; 0. " /> + <gvxy_point X_Y=" FEET_LowerLeZ_RailSupportLower_Zlength/2. ; 0. " /> + <gvxy_point X_Y=" FEET_LowerLeZ_RailSupportLower_Zlength/2. ; FEET_LowerHeY_RailSupportLower_Yheight " /> + <gvxy_point X_Y=" FEET_CentrLeZ_RailSupportCentral_Zlength/2. ; FEET_LowerHeY_RailSupportLower_Yheight " /> + <gvxy_point X_Y=" FEET_CentrLeZ_RailSupportCentral_Zlength/2. ; FEET_TotalHeY_RailSupportTotal_Yheight-FEET_UpperHeY_RailSupportUpper_Yheight " /> + <gvxy_point X_Y=" FEET_UpperLeZ_RailSupportUpper_Zlength/2. ; FEET_TotalHeY_RailSupportTotal_Yheight-FEET_UpperHeY_RailSupportUpper_Yheight " /> + <gvxy_point X_Y=" FEET_UpperLeZ_RailSupportUpper_Zlength/2. ; FEET_TotalHeY_RailSupportTotal_Yheight " /> +</gvxysx> +<box name="RailSupportHoleA" material="Iron1" X_Y_Z=" 2.*FEET_Xwidth ; FEET_CentrHeY_RailSupportCentral_Yheight ; FEET_CentrLeZ_RailSupportCentral_Zlength-2.*FEET_VertiZth_RailSupportVertical_Zthick " /> +<box name="RailSupportHoleB" material="Iron1" X_Y_Z=" FEET_CentrXth_RailSupportCentral_Xthick ; 2.*FEET_CentrHeY_RailSupportCentral_Yheight ; FEET_CentrLeZ_RailSupportCentral_Zlength " /> +<box name="RailSupportHoleC" material="Iron1" X_Y_Z=" 3.*FEET_Xwidth ; FEET_MidllYth_RailSupportMiddle_Ythick ; FEET_CentrLeZ_RailSupportCentral_Zlength " /> +<subtraction name="RailSupportHole" > + <posXYZ volume="RailSupportHoleA" /> + <posXYZ volume="RailSupportHoleB" /> + <posXYZ volume="RailSupportHoleC" /> +</subtraction> +<subtraction name="RailSupport" > + <posXYZ volume="RailSupportFull" rot=" 0. ; 90. ; 0. " /> + <posXYZ volume="RailSupportHole" X_Y_Z=" 0. ; FEET_LowerHeY_RailSupportLower_Yheight+FEET_CentrHeY_RailSupportCentral_Yheight/2. ; 0. " /> +</subtraction> + +<var name="FEET_Midyposi_RailSupportMiddle_Y" value=" FEET_MidllYpo_RailSupportMiddle_Ypos + FEET_MidllYth_RailSupportMiddle_Ythick/2." /> + +<var name="FEET_posx" value=" FEET_MainPlXf - FEET_Xwidth/2. " /> +<var name="FEET_posy" value=" FEET_MainPlYf" /> + +<!-- Modelization of Standard Feet Strut --> +<var name="FEET_SFSxc" value=" FEET_SFSwidth/2. " /> +<var name="FEET_SFSyc" value=" FEET_SFSheigh/2. " /> +<var name="FEET_SFSxb" value=" FEET_SFSxc " /> +<var name="FEET_SFSyb" value=" FEET_SFSyc - FEET_SFSthicy " /> +<var name="FEET_SFSxa" value=" FEET_SFSthicz/2. " /> +<var name="FEET_SFSya" value=" FEET_SFSyb - tan(FEET_SFSangle*GENV_PiS180)*(FEET_SFSwidth-FEET_SFSthicz)/2. " /> + +<gvxysxy name="FEET_StandardStrutCore" material="Aluminium" dZ="FEET_SFSlengx" > + <gvxy_point X_Y="FEET_SFSxa;FEET_SFSya"/> + <gvxy_point X_Y="FEET_SFSxb;FEET_SFSyb"/> + <gvxy_point X_Y="FEET_SFSxc;FEET_SFSyc"/> +</gvxysxy> + +<gvxysxy name="FEET_ExtremityStrutCore" material="Aluminium" dZ="FEET_EFSlengx" > + <gvxy_point X_Y="FEET_SFSxa;FEET_SFSya"/> + <gvxy_point X_Y="FEET_SFSxb;FEET_SFSyb"/> + <gvxy_point X_Y="FEET_SFSxc;FEET_SFSyc"/> +</gvxysxy> + +<var name="FEET_SFSRCutZ" value="FEET_SFSthicz*2. " /> + +<!-- Standard Feet --> +<var name="FEET_SFSEPpx" value="FEET_SFSlengx/2.+ FEET_SFSEPdx/2." /> +<var name="FEET_SFSSPx1" value="FEET_SFSEPpx+ FEET_SFSEPdx/2.+FEET_SFSSPsep+FEET_SFSSPdx/2." /> +<var name="FEET_SFSSPx2" value="FEET_SFSSPx1+FEET_SFSSPdx" /> +<var name="FEET_SFSSPx3" value="FEET_SFSEPpx+ FEET_SFSEPdx/2.+FEET_SFSSPsep/2." /> + +<!-- Extremity Feet --> +<var name="FEET_EFSEPpx" value="FEET_EFSlengx/2.+ FEET_SFSEPdx/2." /> +<var name="FEET_EFSSPx1" value="FEET_EFSEPpx+ FEET_SFSEPdx/2.+FEET_EFSSPsep+FEET_SFSSPdx/2." /> +<var name="FEET_EFSSPx2" value="FEET_EFSSPx1+FEET_SFSSPdx" /> +<var name="FEET_EFSSPx3" value="FEET_EFSEPpx+ FEET_SFSEPdx/2.+FEET_EFSSPsep/2." /> + +<tubs name="FEET_StandardStrutHole" material="Aluminium" Rio_Z=" 0.; FEET_SFSRCutR; FEET_SFSRCutZ"/> + +<box name="FEET_StandardStrutExtremityPlate" material="Iron" X_Y_Z="FEET_SFSEPdx;FEET_SFSEPdy;FEET_SFSEPdz " /> +<box name="FEET_StandardStrutSpacer" material="Iron" X_Y_Z="FEET_SFSSPdx;FEET_SFSSPdy;FEET_SFSSPdz " /> +<box name="FEET_StandardStrutShim" material="Iron" X_Y_Z="FEET_SFSSPsep;FEET_SFSEPdy;FEET_SFSEPdz" /> +<box name="FEET_ExtremityStrutShim" material="Iron" X_Y_Z="FEET_EFSSPsep;FEET_SFSEPdy;FEET_SFSEPdz" /> +<box name="FEET_ExtremityStrutSpacer" material="Iron" X_Y_Z="FEET_SFSSPdx;FEET_EFSSPdy;FEET_EFSSPdz " /> + +<subtraction name="FEET_StandardStrutCut" > + <posXYZ volume="FEET_StandardStrutCore" /> + <posXYZ volume="FEET_StandardStrutHole" X_Y_Z=" 0. ; 0. ; FEET_SFSRCpx" rot=" 0. ; 90. ; 0." /> + <posXYZ volume="FEET_StandardStrutHole" X_Y_Z=" 0. ; 0. ;-FEET_SFSRCpx" rot=" 0. ; 90. ; 0." /> +</subtraction> + +<subtraction name="FEET_ExtremityStrutCut" > + <posXYZ volume="FEET_ExtremityStrutCore"/> + <posXYZ volume="FEET_StandardStrutHole" X_Y_Z=" 0. ; 0. ; FEET_SFSRCpx" rot=" 0. ; 90. ; 0." /> + <posXYZ volume="FEET_StandardStrutHole" X_Y_Z=" 0. ; 0. ;-FEET_SFSRCpx" rot=" 0. ; 90. ; 0." /> +</subtraction> + +<composition name="FEET_StandardStrut" > + <posXYZ volume="FEET_StandardStrutCut" X_Y_Z="0.;-FEET_SFSmystic;0." rot=" 0. ; 90. ; 0." /> + <posXYZ volume="FEET_StandardStrutExtremityPlate" X_Y_Z=" FEET_SFSEPpx;-FEET_SFSmystic;0." /> + <posXYZ volume="FEET_StandardStrutExtremityPlate" X_Y_Z="-FEET_SFSEPpx;-FEET_SFSmystic;0." /> + <posXYZ volume="FEET_StandardStrutShim" X_Y_Z=" FEET_SFSSPx3;-FEET_SFSmystic;0." /> + <posXYZ volume="FEET_StandardStrutShim" X_Y_Z="-FEET_SFSSPx3;-FEET_SFSmystic;0." /> + <posXYZ volume="FEET_StandardStrutSpacer" X_Y_Z=" FEET_SFSSPx1;0.;0." /> + <posXYZ volume="FEET_StandardStrutSpacer" X_Y_Z=" FEET_SFSSPx2;0.;0." /> + <posXYZ volume="FEET_StandardStrutSpacer" X_Y_Z="-FEET_SFSSPx1;0.;0." /> + <posXYZ volume="FEET_StandardStrutSpacer" X_Y_Z="-FEET_SFSSPx2;0.;0." /> +</composition> + +<composition name="FEET_ExtremityStrut" > + <posXYZ volume="FEET_ExtremityStrutCut" X_Y_Z=" 0.;FEET_SFSEPdy/2.-FEET_EFSSPdy/2.;0." rot=" 0. ; 90. ; 0." /> + <posXYZ volume="FEET_StandardStrutExtremityPlate" X_Y_Z=" FEET_EFSEPpx;FEET_SFSEPdy/2.-FEET_EFSSPdy/2.;0." /> + <posXYZ volume="FEET_StandardStrutExtremityPlate" X_Y_Z="-FEET_EFSEPpx;FEET_SFSEPdy/2.-FEET_EFSSPdy/2.;0." /> + <posXYZ volume="FEET_ExtremityStrutShim" X_Y_Z=" FEET_EFSSPx3;FEET_SFSEPdy/2.-FEET_EFSSPdy/2.;0." /> + <posXYZ volume="FEET_ExtremityStrutShim" X_Y_Z="-FEET_EFSSPx3;FEET_SFSEPdy/2.-FEET_EFSSPdy/2.;0." /> + <posXYZ volume="FEET_ExtremityStrutSpacer" X_Y_Z=" FEET_EFSSPx1;0.;0." /> + <posXYZ volume="FEET_ExtremityStrutSpacer" X_Y_Z=" FEET_EFSSPx2;0.;0." /> + <posXYZ volume="FEET_ExtremityStrutSpacer" X_Y_Z="-FEET_EFSSPx1;0.;0." /> + <posXYZ volume="FEET_ExtremityStrutSpacer" X_Y_Z="-FEET_EFSSPx2;0.;0." /> +</composition> + +<!-- Girder 1-2 --> + +<var name="FEET_G12BoPxa_Girder12_BottomPlate_XA" value="FEET_G12LPxw1_Girder12_LateralPlate_Xwidth_Inter1/2." /> +<var name="FEET_G12BoPxb_Girder12_BottomPlate_XB" value="FEET_G12BoPxa_Girder12_BottomPlate_XA + FEET_G12LPx12_Girder12_LateralPlate_Xwidth_Inter1Inter2" /> +<var name="FEET_G12BoPxc_Girder12_BottomPlate_XC" value="FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total/2." /> +<var name="FEET_G12BoPxd_Girder12_BottomPlate_XD" value="FEET_G12BoPxc_Girder12_BottomPlate_XC" /> +<var name="FEET_G12BoPxe_Girder12_BottomPlate_XE" value="FEET_G12BoPxb_Girder12_BottomPlate_XB" /> +<var name="FEET_G12BoPxf_Girder12_BottomPlate_XF" value="FEET_G12BoPxa_Girder12_BottomPlate_XA" /> + +<var name="FEET_G12BoPya_Girder12_BottomPlate_YA" value="FEET_G12yorig_Girder12_Yorigin + FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total - FEET_G12LPyh1_Girder12_LateralPlate_Yheight_Inter1- FEET_G12LPyth_Girder12_LowerPlate_Ythick" /> +<var name="FEET_G12BoPyb_Girder12_BottomPlate_YB" value="FEET_G12yorig_Girder12_Yorigin + FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total - FEET_G12LPyh2_Girder12_LateralPlate_Yheight_Inter2 - FEET_G12LPyth_Girder12_LowerPlate_Ythick" /> +<var name="FEET_G12BoPyc_Girder12_BottomPlate_YC" value="FEET_G12BoPyb_Girder12_BottomPlate_YB" /> +<var name="FEET_G12BoPyd_Girder12_BottomPlate_YD" value="FEET_G12BoPyc_Girder12_BottomPlate_YC + FEET_G12LPyth_Girder12_LowerPlate_Ythick" /> +<var name="FEET_G12BoPye_Girder12_BottomPlate_YE" value="FEET_G12BoPyb_Girder12_BottomPlate_YB + FEET_G12LPyth_Girder12_LowerPlate_Ythick" /> +<var name="FEET_G12BoPyf_Girder12_BottomPlate_YF" value="FEET_G12BoPya_Girder12_BottomPlate_YA + FEET_G12LPyth_Girder12_LowerPlate_Ythick" /> + +<gvxysx name="Girder12_BottomPlate" material="Iron" dZ="FEET_G12BPzle_Girder12_BottomPlate_Zlength" > + <gvxy_point X_Y=" FEET_G12BoPxa_Girder12_BottomPlate_XA ; FEET_G12BoPya_Girder12_BottomPlate_YA " /> + <gvxy_point X_Y=" FEET_G12BoPxb_Girder12_BottomPlate_XB ; FEET_G12BoPyb_Girder12_BottomPlate_YB " /> + <gvxy_point X_Y=" FEET_G12BoPxc_Girder12_BottomPlate_XC ; FEET_G12BoPyc_Girder12_BottomPlate_YC " /> + <gvxy_point X_Y=" FEET_G12BoPxd_Girder12_BottomPlate_XD ; FEET_G12BoPyd_Girder12_BottomPlate_YD " /> + <gvxy_point X_Y=" FEET_G12BoPxe_Girder12_BottomPlate_XE ; FEET_G12BoPye_Girder12_BottomPlate_YE " /> + <gvxy_point X_Y=" FEET_G12BoPxf_Girder12_BottomPlate_XF ; FEET_G12BoPyf_Girder12_BottomPlate_YF " /> +</gvxysx> + +<var name="FEET_G12IPzle_Girder12_InnerPlate_Zlength" value="FEET_G12BPzle_Girder12_BottomPlate_Zlength" /> +<var name="FEET_G12IPLyh_Girder12_InnerPlateLarge_Yheight" value="FEET_G12LPyh1_Girder12_LateralPlate_Yheight_Inter1" /> +<var name="FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos" value="FEET_G12BoPyf_Girder12_BottomPlate_YF + FEET_G12IPLyh_Girder12_InnerPlateLarge_Yheight/2." /> +<var name="FEET_G12IPSyh_Girder12_InnerPlateSmall_Yheight" value="FEET_G12LPyh2_Girder12_LateralPlate_Yheight_Inter2" /> +<var name="FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos" value="FEET_G12BoPye_Girder12_BottomPlate_YE + FEET_G12IPSyh_Girder12_InnerPlateSmall_Yheight/2." /> + +<var name="FEET_G12IPSx1_Girder12_InnerPlateSmall1_Xpos" value="-FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total/2. + FEET_G12IPSxo_Girder12_InnerPlateSmalloffset_Xdist + FEET_G12IPxwi_Girder12_InnerPlate_Xwidth/2." /> +<var name="FEET_G12IPLx1_Girder12_InnerPlateLarge1_Xpos" value="-FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total/2. + FEET_G12IPSLx_Girder12_InnerPlateSmall2Large_Xdist + FEET_G12IPxwi_Girder12_InnerPlate_Xwidth/2." /> +<var name="FEET_G12IPLx2_Girder12_InnerPlateLarge2_Xpos" value=" FEET_G12IPLx1_Girder12_InnerPlateLarge1_Xpos + FEET_G12IPLLx_Girder12_InnerPlateLarge2Large_Xdist " /> +<var name="FEET_G12IPSx2_Girder12_InnerPlateSmall2_Xpos" value=" FEET_G12IPLx2_Girder12_InnerPlateLarge2_Xpos + FEET_G12IPLSx_Girder12_InnerPlateLarge2Small_Xdist " /> + +<box name="Girder12_InnerPlateLarge" material="Iron" X_Y_Z="FEET_G12IPxwi_Girder12_InnerPlate_Xwidth; FEET_G12IPLyh_Girder12_InnerPlateLarge_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> +<box name="Girder12_InnerPlateSmall" material="Iron" X_Y_Z="FEET_G12IPxwi_Girder12_InnerPlate_Xwidth; FEET_G12IPSyh_Girder12_InnerPlateSmall_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> + +<var name="FEET_G12UPxwi_Girder12_UpperPlate_Xwidth" value="FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total" /> +<var name="FEET_G12UPyhe_Girder12_UpperPlate_Yheight" value="FEET_G12UPyth_Girder12_UpperPlate_Ythick" /> +<var name="FEET_G12UPypo_Girder12_UpperPlate_Ypos" value="FEET_G12yorig_Girder12_Yorigin + FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total + FEET_G12UPyth_Girder12_UpperPlate_Ythick/2. " /> +<box name="Girder12_UpperPlate" material="Iron" X_Y_Z="FEET_G12UPxwi_Girder12_UpperPlate_Xwidth; FEET_G12UPyhe_Girder12_UpperPlate_Yheight; FEET_G12UPzle_Girder12_UpperPlate_Zlength" /> + +<var name="FEET_G12RePxa_Girder12_ReinforcementPlate_XA" value="FEET_G12RPxwi_Girder12_ReinforcementPlate_Xwidth/2." /> +<var name="FEET_G12RePxb_Girder12_ReinforcementPlate_XB" value="FEET_G12RePxa_Girder12_ReinforcementPlate_XA" /> +<var name="FEET_G12RePxc_Girder12_ReinforcementPlate_XC" value="FEET_G12BoPxc_Girder12_BottomPlate_XC" /> +<var name="FEET_G12RePxd_Girder12_ReinforcementPlate_XD" value="FEET_G12RePxc_Girder12_ReinforcementPlate_XC" /> +<var name="FEET_G12RePya_Girder12_ReinforcementPlate_YA" value="FEET_G12yorig_Girder12_Yorigin" /> +<var name="FEET_G12RePyb_Girder12_ReinforcementPlate_YB" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total - FEET_G12RPydi_Girder12_ReinforcementPlate_Ydist" /> +<var name="FEET_G12RePyc_Girder12_ReinforcementPlate_YC" value="FEET_G12RePyb_Girder12_ReinforcementPlate_YB" /> +<var name="FEET_G12RePyd_Girder12_ReinforcementPlate_YD" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total " /> + +<gvxysx name="Girder12_ReinforcementPlate" material="Iron" dZ="FEET_G12RPzle_Girder12_ReinforcementPlate_Zlength" > + <gvxy_point X_Y=" FEET_G12RePxa_Girder12_ReinforcementPlate_XA ; FEET_G12RePya_Girder12_ReinforcementPlate_YA " /> + <gvxy_point X_Y=" FEET_G12RePxb_Girder12_ReinforcementPlate_XB ; FEET_G12RePyb_Girder12_ReinforcementPlate_YB " /> + <gvxy_point X_Y=" FEET_G12RePxc_Girder12_ReinforcementPlate_XC ; FEET_G12RePyc_Girder12_ReinforcementPlate_YC " /> + <gvxy_point X_Y=" FEET_G12RePxd_Girder12_ReinforcementPlate_XD ; FEET_G12RePyd_Girder12_ReinforcementPlate_YD " /> +</gvxysx> +<var name="FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" value="FEET_G12BPzle_Girder12_BottomPlate_Zlength/2. +FEET_G12RPzle_Girder12_ReinforcementPlate_Zlength/2." /> + +<var name="FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos" value="FEET_G12yorig_Girder12_Yorigin + FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total + FEET_G12UPyth_Girder12_UpperPlate_Ythick + FEET_G12UMPyh_Girder12_UpperMiniPlate_Yheight/2. " /> +<var name="FEET_G12UMPxp_Girder12_UpperMiniPlate_Xpos" value="FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total/2. - FEET_G12UMPwi_Girder12_UpperMiniPlate_Xwidth/2." /> +<box name="Girder12_UpperMiniPlate" material="Iron" X_Y_Z="FEET_G12UMPwi_Girder12_UpperMiniPlate_Xwidth; FEET_G12UMPyh_Girder12_UpperMiniPlate_Yheight; FEET_G12UMPzl_Girder12_UpperMiniPlate_Zlength" /> + +<var name="FEET_G12SMPyh_Girder12_SideMiniPlate_Yheight" value="FEET_G12RPydi_Girder12_ReinforcementPlate_Ydist" /> +<var name="FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos" value="FEET_G12RePyb_Girder12_ReinforcementPlate_YB+FEET_G12SMPyh_Girder12_SideMiniPlate_Yheight/2." /> +<var name="FEET_G12SMPxp_Girder12_SideMiniPlate_Xpos" value="FEET_G12LPxwt_Girder12_LateralPlate_Xwidth_Total/2. - FEET_G12SMPwi_Girder12_SideMiniPlate_Xwidth/2." /> +<var name="FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" value="FEET_G12UPzle_Girder12_UpperPlate_Zlength/2. - FEET_G12SMPzl_Girder12_SideMiniPlate_Zlength/2." /> +<box name="Girder12_SideMiniPlate" material="Iron" X_Y_Z="FEET_G12SMPwi_Girder12_SideMiniPlate_Xwidth; FEET_G12SMPyh_Girder12_SideMiniPlate_Yheight; FEET_G12SMPzl_Girder12_SideMiniPlate_Zlength" /> + + + +<composition name="Girder12" > + <posXYZ volume="Girder12_BottomPlate" X_Y_Z="0.;0.;0." /> + <posXYZ volume="Girder12_InnerPlateLarge" X_Y_Z=" FEET_G12IPLx1_Girder12_InnerPlateLarge1_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder12_InnerPlateLarge" X_Y_Z=" FEET_G12IPLx2_Girder12_InnerPlateLarge2_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder12_InnerPlateSmall" X_Y_Z=" FEET_G12IPSx1_Girder12_InnerPlateSmall1_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder12_InnerPlateSmall" X_Y_Z=" FEET_G12IPSx2_Girder12_InnerPlateSmall2_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder12_UpperPlate" X_Y_Z="0.; FEET_G12UPypo_Girder12_UpperPlate_Ypos ;0." /> + <posXYZ volume="Girder12_ReinforcementPlate" X_Y_Z="0.; 0. ; FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder12_ReinforcementPlate" X_Y_Z="0.; 0. ;-FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder12_UpperMiniPlate" X_Y_Z="-FEET_G12UMPxp_Girder12_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder12_UpperMiniPlate" X_Y_Z=" FEET_G12UMPxp_Girder12_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder12_SideMiniPlate" X_Y_Z=" FEET_G12SMPxp_Girder12_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder12_SideMiniPlate" X_Y_Z=" FEET_G12SMPxp_Girder12_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder12_SideMiniPlate" X_Y_Z="-FEET_G12SMPxp_Girder12_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder12_SideMiniPlate" X_Y_Z="-FEET_G12SMPxp_Girder12_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> +</composition> + + +<!-- Girder 2-3 --> + +<var name="FEET_G23BoPxa_Girder23_BottomPlate_XA" value="FEET_G23LPxw1_Girder23_LateralPlate_Xwidth_Inter1/2." /> +<var name="FEET_G23BoPxb_Girder23_BottomPlate_XB" value="FEET_G23BoPxa_Girder23_BottomPlate_XA + FEET_G23LPx12_Girder23_LateralPlate_Xwidth_Inter1Inter2" /> +<var name="FEET_G23BoPxc_Girder23_BottomPlate_XC" value="FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total/2." /> +<var name="FEET_G23BoPxd_Girder23_BottomPlate_XD" value="FEET_G23BoPxc_Girder23_BottomPlate_XC" /> +<var name="FEET_G23BoPxe_Girder23_BottomPlate_XE" value="FEET_G23BoPxb_Girder23_BottomPlate_XB" /> +<var name="FEET_G23BoPxf_Girder23_BottomPlate_XF" value="FEET_G23BoPxa_Girder23_BottomPlate_XA" /> + +<gvxysx name="Girder23_BottomPlate" material="Iron" dZ="FEET_G12BPzle_Girder12_BottomPlate_Zlength" > + <gvxy_point X_Y=" FEET_G23BoPxa_Girder23_BottomPlate_XA ; FEET_G12BoPya_Girder12_BottomPlate_YA " /> + <gvxy_point X_Y=" FEET_G23BoPxb_Girder23_BottomPlate_XB ; FEET_G12BoPyb_Girder12_BottomPlate_YB " /> + <gvxy_point X_Y=" FEET_G23BoPxc_Girder23_BottomPlate_XC ; FEET_G12BoPyc_Girder12_BottomPlate_YC " /> + <gvxy_point X_Y=" FEET_G23BoPxd_Girder23_BottomPlate_XD ; FEET_G12BoPyd_Girder12_BottomPlate_YD " /> + <gvxy_point X_Y=" FEET_G23BoPxe_Girder23_BottomPlate_XE ; FEET_G12BoPye_Girder12_BottomPlate_YE " /> + <gvxy_point X_Y=" FEET_G23BoPxf_Girder23_BottomPlate_XF ; FEET_G12BoPyf_Girder12_BottomPlate_YF " /> +</gvxysx> + +<var name="FEET_G23IPSx1_Girder23_InnerPlateSmall1_Xpos" value="-FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total/2. + FEET_G23IPSxo_Girder23_InnerPlateSmalloffset_Xdist + FEET_G23IPxwi_Girder23_InnerPlate_Xwidth/2." /> +<var name="FEET_G23IPLx1_Girder23_InnerPlateLarge1_Xpos" value="-FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total/2. + FEET_G23IPSLx_Girder23_InnerPlateSmall2Large_Xdist + FEET_G23IPxwi_Girder23_InnerPlate_Xwidth/2." /> +<var name="FEET_G23IPLx2_Girder23_InnerPlateLarge2_Xpos" value=" FEET_G23IPLx1_Girder23_InnerPlateLarge1_Xpos + FEET_G23IPLLx_Girder23_InnerPlateLarge2Large_Xdist " /> +<var name="FEET_G23IPSx2_Girder23_InnerPlateSmall2_Xpos" value=" FEET_G23IPLx2_Girder23_InnerPlateLarge2_Xpos + FEET_G23IPLSx_Girder23_InnerPlateLarge2Small_Xdist " /> + +<box name="Girder23_InnerPlateLarge" material="Iron" X_Y_Z="FEET_G23IPxwi_Girder23_InnerPlate_Xwidth; FEET_G12IPLyh_Girder12_InnerPlateLarge_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> +<box name="Girder23_InnerPlateSmall" material="Iron" X_Y_Z="FEET_G23IPxwi_Girder23_InnerPlate_Xwidth; FEET_G12IPSyh_Girder12_InnerPlateSmall_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> + +<var name="FEET_G23UPxwi_Girder23_UpperPlate_Xwidth" value="FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total" /> +<var name="FEET_G23UPyhe_Girder23_UpperPlate_Yheight" value="FEET_G12UPyth_Girder12_UpperPlate_Ythick" /> +<box name="Girder23_UpperPlate" material="Iron" X_Y_Z="FEET_G23UPxwi_Girder23_UpperPlate_Xwidth; FEET_G23UPyhe_Girder23_UpperPlate_Yheight; FEET_G12UPzle_Girder12_UpperPlate_Zlength" /> + +<var name="FEET_G23RePxa_Girder23_ReinforcementPlate_XA" value="FEET_G23RPxwi_Girder23_ReinforcementPlate_Xwidth/2." /> +<var name="FEET_G23RePxb_Girder23_ReinforcementPlate_XB" value="FEET_G23RePxa_Girder23_ReinforcementPlate_XA" /> +<var name="FEET_G23RePxc_Girder23_ReinforcementPlate_XC" value="FEET_G23BoPxc_Girder23_BottomPlate_XC" /> +<var name="FEET_G23RePxd_Girder23_ReinforcementPlate_XD" value="FEET_G23RePxc_Girder23_ReinforcementPlate_XC" /> +<var name="FEET_G23RePya_Girder23_ReinforcementPlate_YA" value="FEET_G12yorig_Girder12_Yorigin" /> +<var name="FEET_G23RePyb_Girder23_ReinforcementPlate_YB" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total - FEET_G12RPydi_Girder12_ReinforcementPlate_Ydist" /> +<var name="FEET_G23RePyc_Girder23_ReinforcementPlate_YC" value="FEET_G23RePyb_Girder23_ReinforcementPlate_YB" /> +<var name="FEET_G23RePyd_Girder23_ReinforcementPlate_YD" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total " /> + +<gvxysx name="Girder23_ReinforcementPlate" material="Iron" dZ="FEET_G12RPzle_Girder12_ReinforcementPlate_Zlength" > + <gvxy_point X_Y=" FEET_G23RePxa_Girder23_ReinforcementPlate_XA ; FEET_G23RePya_Girder23_ReinforcementPlate_YA " /> + <gvxy_point X_Y=" FEET_G23RePxb_Girder23_ReinforcementPlate_XB ; FEET_G23RePyb_Girder23_ReinforcementPlate_YB " /> + <gvxy_point X_Y=" FEET_G23RePxc_Girder23_ReinforcementPlate_XC ; FEET_G23RePyc_Girder23_ReinforcementPlate_YC " /> + <gvxy_point X_Y=" FEET_G23RePxd_Girder23_ReinforcementPlate_XD ; FEET_G23RePyd_Girder23_ReinforcementPlate_YD " /> +</gvxysx> + +<var name="FEET_G23UMPxp_Girder23_UpperMiniPlate_Xpos" value="FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total/2. - FEET_G23UMPwi_Girder23_UpperMiniPlate_Xwidth/2." /> +<box name="Girder23_UpperMiniPlate" material="Iron" X_Y_Z="FEET_G23UMPwi_Girder23_UpperMiniPlate_Xwidth; FEET_G12UMPyh_Girder12_UpperMiniPlate_Yheight; FEET_G12UMPzl_Girder12_UpperMiniPlate_Zlength" /> + +<var name="FEET_G23SMPxp_Girder23_SideMiniPlate_Xpos" value="FEET_G23LPxwt_Girder23_LateralPlate_Xwidth_Total/2. - FEET_G23SMPwi_Girder23_SideMiniPlate_Xwidth/2." /> +<box name="Girder23_SideMiniPlate" material="Iron" X_Y_Z="FEET_G23SMPwi_Girder23_SideMiniPlate_Xwidth; FEET_G12SMPyh_Girder12_SideMiniPlate_Yheight; FEET_G12SMPzl_Girder12_SideMiniPlate_Zlength" /> + +<composition name="Girder23" > + <posXYZ volume="Girder23_BottomPlate" X_Y_Z="0.;0.;0." /> + <posXYZ volume="Girder23_InnerPlateLarge" X_Y_Z=" FEET_G23IPLx1_Girder23_InnerPlateLarge1_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder23_InnerPlateLarge" X_Y_Z=" FEET_G23IPLx2_Girder23_InnerPlateLarge2_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder23_InnerPlateSmall" X_Y_Z=" FEET_G23IPSx1_Girder23_InnerPlateSmall1_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder23_InnerPlateSmall" X_Y_Z=" FEET_G23IPSx2_Girder23_InnerPlateSmall2_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder23_UpperPlate" X_Y_Z="0.; FEET_G12UPypo_Girder12_UpperPlate_Ypos ;0." /> + <posXYZ volume="Girder23_ReinforcementPlate" X_Y_Z="0.; 0. ; FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder23_ReinforcementPlate" X_Y_Z="0.; 0. ;-FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder23_UpperMiniPlate" X_Y_Z="-FEET_G23UMPxp_Girder23_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder23_UpperMiniPlate" X_Y_Z=" FEET_G23UMPxp_Girder23_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder23_SideMiniPlate" X_Y_Z=" FEET_G23SMPxp_Girder23_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder23_SideMiniPlate" X_Y_Z=" FEET_G23SMPxp_Girder23_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder23_SideMiniPlate" X_Y_Z="-FEET_G23SMPxp_Girder23_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder23_SideMiniPlate" X_Y_Z="-FEET_G23SMPxp_Girder23_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> +</composition> + + + +<!-- Girder 3-4 --> + +<var name="FEET_G34BoPxa_Girder34_BottomPlate_XA" value="FEET_G34LPxw1_Girder34_LateralPlate_Xwidth_Inter1/2." /> +<var name="FEET_G34BoPxb_Girder34_BottomPlate_XB" value="FEET_G34BoPxa_Girder34_BottomPlate_XA + FEET_G34LPx12_Girder34_LateralPlate_Xwidth_Inter1Inter2" /> +<var name="FEET_G34BoPxc_Girder34_BottomPlate_XC" value="FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total/2." /> +<var name="FEET_G34BoPxd_Girder34_BottomPlate_XD" value="FEET_G34BoPxc_Girder34_BottomPlate_XC" /> +<var name="FEET_G34BoPxe_Girder34_BottomPlate_XE" value="FEET_G34BoPxb_Girder34_BottomPlate_XB" /> +<var name="FEET_G34BoPxf_Girder34_BottomPlate_XF" value="FEET_G34BoPxa_Girder34_BottomPlate_XA" /> + +<gvxysx name="Girder34_BottomPlate" material="Iron" dZ="FEET_G12BPzle_Girder12_BottomPlate_Zlength" > + <gvxy_point X_Y=" FEET_G34BoPxa_Girder34_BottomPlate_XA ; FEET_G12BoPya_Girder12_BottomPlate_YA " /> + <gvxy_point X_Y=" FEET_G34BoPxb_Girder34_BottomPlate_XB ; FEET_G12BoPyb_Girder12_BottomPlate_YB " /> + <gvxy_point X_Y=" FEET_G34BoPxc_Girder34_BottomPlate_XC ; FEET_G12BoPyc_Girder12_BottomPlate_YC " /> + <gvxy_point X_Y=" FEET_G34BoPxd_Girder34_BottomPlate_XD ; FEET_G12BoPyd_Girder12_BottomPlate_YD " /> + <gvxy_point X_Y=" FEET_G34BoPxe_Girder34_BottomPlate_XE ; FEET_G12BoPye_Girder12_BottomPlate_YE " /> + <gvxy_point X_Y=" FEET_G34BoPxf_Girder34_BottomPlate_XF ; FEET_G12BoPyf_Girder12_BottomPlate_YF " /> +</gvxysx> + +<var name="FEET_G34IPSx1_Girder34_InnerPlateSmall1_Xpos" value="-FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total/2. + FEET_G34IPSxo_Girder34_InnerPlateSmalloffset_Xdist + FEET_G34IPxwi_Girder34_InnerPlate_Xwidth/2." /> +<var name="FEET_G34IPLx1_Girder34_InnerPlateLarge1_Xpos" value="-FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total/2. + FEET_G34IPSLx_Girder34_InnerPlateSmall2Large_Xdist + FEET_G34IPxwi_Girder34_InnerPlate_Xwidth/2." /> +<var name="FEET_G34IPLx2_Girder34_InnerPlateLarge2_Xpos" value=" FEET_G34IPLx1_Girder34_InnerPlateLarge1_Xpos + FEET_G34IPLLx_Girder34_InnerPlateLarge2Large_Xdist " /> +<var name="FEET_G34IPSx2_Girder34_InnerPlateSmall2_Xpos" value=" FEET_G34IPLx2_Girder34_InnerPlateLarge2_Xpos + FEET_G34IPLSx_Girder34_InnerPlateLarge2Small_Xdist " /> + +<box name="Girder34_InnerPlateLarge" material="Iron" X_Y_Z="FEET_G34IPxwi_Girder34_InnerPlate_Xwidth; FEET_G12IPLyh_Girder12_InnerPlateLarge_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> +<box name="Girder34_InnerPlateSmall" material="Iron" X_Y_Z="FEET_G34IPxwi_Girder34_InnerPlate_Xwidth; FEET_G12IPSyh_Girder12_InnerPlateSmall_Yheight; FEET_G12IPzle_Girder12_InnerPlate_Zlength" /> + +<var name="FEET_G34UPxwi_Girder34_UpperPlate_Xwidth" value="FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total" /> +<var name="FEET_G34UPyhe_Girder34_UpperPlate_Yheight" value="FEET_G12UPyth_Girder12_UpperPlate_Ythick" /> +<box name="Girder34_UpperPlate" material="Iron" X_Y_Z="FEET_G34UPxwi_Girder34_UpperPlate_Xwidth; FEET_G34UPyhe_Girder34_UpperPlate_Yheight; FEET_G12UPzle_Girder12_UpperPlate_Zlength" /> + +<var name="FEET_G34RePxa_Girder34_ReinforcementPlate_XA" value="FEET_G34RPxwi_Girder34_ReinforcementPlate_Xwidth/2." /> +<var name="FEET_G34RePxb_Girder34_ReinforcementPlate_XB" value="FEET_G34RePxa_Girder34_ReinforcementPlate_XA" /> +<var name="FEET_G34RePxc_Girder34_ReinforcementPlate_XC" value="FEET_G34BoPxc_Girder34_BottomPlate_XC" /> +<var name="FEET_G34RePxd_Girder34_ReinforcementPlate_XD" value="FEET_G34RePxc_Girder34_ReinforcementPlate_XC" /> +<var name="FEET_G34RePya_Girder34_ReinforcementPlate_YA" value="FEET_G12yorig_Girder12_Yorigin" /> +<var name="FEET_G34RePyb_Girder34_ReinforcementPlate_YB" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total - FEET_G12RPydi_Girder12_ReinforcementPlate_Ydist" /> +<var name="FEET_G34RePyc_Girder34_ReinforcementPlate_YC" value="FEET_G34RePyb_Girder34_ReinforcementPlate_YB" /> +<var name="FEET_G34RePyd_Girder34_ReinforcementPlate_YD" value="FEET_G12LPyht_Girder12_LateralPlate_Yheight_Total " /> + +<gvxysx name="Girder34_ReinforcementPlate" material="Iron" dZ="FEET_G12RPzle_Girder12_ReinforcementPlate_Zlength" > + <gvxy_point X_Y=" FEET_G34RePxa_Girder34_ReinforcementPlate_XA ; FEET_G34RePya_Girder34_ReinforcementPlate_YA " /> + <gvxy_point X_Y=" FEET_G34RePxb_Girder34_ReinforcementPlate_XB ; FEET_G34RePyb_Girder34_ReinforcementPlate_YB " /> + <gvxy_point X_Y=" FEET_G34RePxc_Girder34_ReinforcementPlate_XC ; FEET_G34RePyc_Girder34_ReinforcementPlate_YC " /> + <gvxy_point X_Y=" FEET_G34RePxd_Girder34_ReinforcementPlate_XD ; FEET_G34RePyd_Girder34_ReinforcementPlate_YD " /> +</gvxysx> + +<var name="FEET_G34UMPxp_Girder34_UpperMiniPlate_Xpos" value="FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total/2. - FEET_G34UMPwi_Girder34_UpperMiniPlate_Xwidth/2." /> +<box name="Girder34_UpperMiniPlate" material="Iron" X_Y_Z="FEET_G34UMPwi_Girder34_UpperMiniPlate_Xwidth; FEET_G12UMPyh_Girder12_UpperMiniPlate_Yheight; FEET_G12UMPzl_Girder12_UpperMiniPlate_Zlength" /> + +<var name="FEET_G34SMPxp_Girder34_SideMiniPlate_Xpos" value="FEET_G34LPxwt_Girder34_LateralPlate_Xwidth_Total/2. - FEET_G34SMPwi_Girder34_SideMiniPlate_Xwidth/2." /> +<box name="Girder34_SideMiniPlate" material="Iron" X_Y_Z="FEET_G34SMPwi_Girder34_SideMiniPlate_Xwidth; FEET_G12SMPyh_Girder12_SideMiniPlate_Yheight; FEET_G12SMPzl_Girder12_SideMiniPlate_Zlength" /> + +<composition name="Girder34" > + <posXYZ volume="Girder34_BottomPlate" X_Y_Z="0.;0.;0." /> + <posXYZ volume="Girder34_InnerPlateLarge" X_Y_Z=" FEET_G34IPLx1_Girder34_InnerPlateLarge1_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder34_InnerPlateLarge" X_Y_Z=" FEET_G34IPLx2_Girder34_InnerPlateLarge2_Xpos; FEET_G12IPLyp_Girder12_InnerPlateLarge_Ypos ;0." /> + <posXYZ volume="Girder34_InnerPlateSmall" X_Y_Z=" FEET_G34IPSx1_Girder34_InnerPlateSmall1_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder34_InnerPlateSmall" X_Y_Z=" FEET_G34IPSx2_Girder34_InnerPlateSmall2_Xpos; FEET_G12IPSyp_Girder12_InnerPlateSmall_Ypos ;0." /> + <posXYZ volume="Girder34_UpperPlate" X_Y_Z="0.; FEET_G12UPypo_Girder12_UpperPlate_Ypos ;0." /> + <posXYZ volume="Girder34_ReinforcementPlate" X_Y_Z="0.; 0. ; FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder34_ReinforcementPlate" X_Y_Z="0.; 0. ;-FEET_G12RePzp_Girder12_ReinforcementPlate_Zpos" /> + <posXYZ volume="Girder34_UpperMiniPlate" X_Y_Z="-FEET_G34UMPxp_Girder34_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder34_UpperMiniPlate" X_Y_Z=" FEET_G34UMPxp_Girder34_UpperMiniPlate_Xpos; FEET_G12UMPyp_Girder12_UpperMiniPlate_Ypos ;0." /> + <posXYZ volume="Girder34_SideMiniPlate" X_Y_Z=" FEET_G34SMPxp_Girder34_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder34_SideMiniPlate" X_Y_Z=" FEET_G34SMPxp_Girder34_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder34_SideMiniPlate" X_Y_Z=" -FEET_G34SMPxp_Girder34_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> + <posXYZ volume="Girder34_SideMiniPlate" X_Y_Z=" -FEET_G34SMPxp_Girder34_SideMiniPlate_Xpos; FEET_G12SMPyp_Girder12_SideMiniPlate_Ypos ;-FEET_G12SMPzp_Girder12_SideMiniPlate_Zpos" /> +</composition> + +<!-- Girder Extremity --> + +<var name="FEET_GExBPxa_GirderEx_BottomPlate_XA" value=" FEET_GExBPxws_GirderEx_BottomPlate_Xwidth_Short/2." /> +<var name="FEET_GExBPxb_GirderEx_BottomPlate_XB" value=" FEET_GExBPxwl_GirderEx_BottomPlate_Xwidth_Long/2." /> +<var name="FEET_GExBPya_GirderEx_BottomPlate_YA" value=" FEET_GExBPyw_GirderEx_BottomPlate_Ywidth/2." /> +<var name="FEET_GExBPyb_GirderEx_BottomPlate_YB" value="-FEET_GExBPyw_GirderEx_BottomPlate_Ywidth/2." /> + +<gvxysx name="GirderExtremity_BottomPlate" material="Iron" dZ="FEET_GExBPzw_GirderEx_BottomPlate_Zwidth" > + <gvxy_point X_Y=" FEET_GExBPxa_GirderEx_BottomPlate_XA ; FEET_GExBPya_GirderEx_BottomPlate_YA " /> + <gvxy_point X_Y=" FEET_GExBPxb_GirderEx_BottomPlate_XB ; FEET_GExBPyb_GirderEx_BottomPlate_YB " /> +</gvxysx> + +<var name="FEET_GExSPxa_GirderEx_SidePlate_XA" value=" FEET_GExSPxw_GirderEx_SidePlate_Xwidth/2." /> +<var name="FEET_GExSPxb_GirderEx_SidePlate_XB" value="-FEET_GExSPxa_GirderEx_SidePlate_XA" /> +<var name="FEET_GExSPya_GirderEx_SidePlate_YA" value=" FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short" /> +<var name="FEET_GExSPyb_GirderEx_SidePlate_YB" value=" FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short-FEET_GExSPywl_GirderEx_SidePlate_Ywidth_Long" /> + +<gvxy name="GirderExtremity_SidePlate_single" material="Iron" dZ="FEET_GExSPzw_GirderEx_SidePlate_Zwidth" > + <gvxy_point X_Y=" -FEET_GExSPxa_GirderEx_SidePlate_XA ; 0. " /> + <gvxy_point X_Y=" -FEET_GExSPxa_GirderEx_SidePlate_XA ; FEET_GExSPya_GirderEx_SidePlate_YA " /> + <gvxy_point X_Y=" -FEET_GExSPxb_GirderEx_SidePlate_XB ; FEET_GExSPya_GirderEx_SidePlate_YA " /> + <gvxy_point X_Y=" -FEET_GExSPxb_GirderEx_SidePlate_XB ; FEET_GExSPyb_GirderEx_SidePlate_YB " /> +</gvxy> + +<box name="GirderExtremity_FrontPlate" material="Iron" X_Y_Z="FEET_GExFPxw_GirderEx_FrontPlate_Xwidth; FEET_GExFPyw_GirderEx_FrontPlate_Ywidth; FEET_GExFPzw_GirderEx_FrontPlate_Zwidth" /> + +<var name="FEET_GExTPywd_GirderEx_TopPlate_Ywidth_Difference" value=" FEET_GExTPywl_GirderEx_TopPlate_Ywidth_Long - FEET_GExTPyws_GirderEx_TopPlate_Ywidth_Short " /> +<var name="FEET_GExTPywdh_GirderEx_TopPlate_Ywidth_DiffHalf" value=" FEET_GExTPywd_GirderEx_TopPlate_Ywidth_Difference/2. " /> +<var name="FEET_GExTPxws_GirderEx_TopPlate_Xwidth_Short" value=" FEET_GExTPxwp_GirderEx_TopPlate_Xwidth_Part + FEET_GExTPywdh_GirderEx_TopPlate_Ywidth_DiffHalf/tan(FEET_GExTPangi_GirderEx_TopPlate_AngleInternal*GENV_PiS180) " /> +<var name="FEET_GExTPxwl_GirderEx_TopPlate_Xwidth_Long" value=" FEET_GExTPxwt_GirderEx_TopPlate_Xwidth_Total - FEET_GExTPxws_GirderEx_TopPlate_Xwidth_Short " /> + +<box name="GirderExtremity_TopPlate_Big" material="Iron" X_Y_Z="FEET_GExTPyws_GirderEx_TopPlate_Ywidth_Short; FEET_GExTPxwl_GirderEx_TopPlate_Xwidth_Long; FEET_GExTPzws_GirderEx_TopPlate_Zwidth_Short" /> + +<var name="FEET_GExTPxa_GirderEx_TopPlate_XA" value=" FEET_GExTPyws_GirderEx_TopPlate_Ywidth_Short/2." /> +<var name="FEET_GExTPxb_GirderEx_TopPlate_XB" value=" FEET_GExTPywl_GirderEx_TopPlate_Ywidth_Long/2." /> +<var name="FEET_GExTPya_GirderEx_TopPlate_YA" value=" FEET_GExTPxws_GirderEx_TopPlate_Xwidth_Short/2." /> +<var name="FEET_GExTPyb_GirderEx_TopPlate_YB" value=" FEET_GExTPxwp_GirderEx_TopPlate_Xwidth_Part-FEET_GExTPya_GirderEx_TopPlate_YA" /> +<var name="FEET_GExTPyc_GirderEx_TopPlate_YC" value="-FEET_GExTPya_GirderEx_TopPlate_YA" /> + +<gvxysx name="GirderExtremity_TopPlate_Small" material="Iron" dZ="FEET_GExTPzwl_GirderEx_TopPlate_Zwidth_Long" > + <gvxy_point X_Y=" FEET_GExTPxa_GirderEx_TopPlate_XA ; FEET_GExTPya_GirderEx_TopPlate_YA " /> + <gvxy_point X_Y=" FEET_GExTPxb_GirderEx_TopPlate_XB ; FEET_GExTPyb_GirderEx_TopPlate_YB " /> + <gvxy_point X_Y=" FEET_GExTPxb_GirderEx_TopPlate_XB ; FEET_GExTPyc_GirderEx_TopPlate_YC " /> +</gvxysx> + +<composition name="GirderExtremity_TopPlate" > + <posXYZ volume="GirderExtremity_TopPlate_Big" X_Y_Z="0.; FEET_GExTPzws_GirderEx_TopPlate_Zwidth_Short/2.; FEET_GExTPxws_GirderEx_TopPlate_Xwidth_Short+FEET_GExTPxwl_GirderEx_TopPlate_Xwidth_Long/2." rot="90.; 0.; 0."/> + <posXYZ volume="GirderExtremity_TopPlate_Small" X_Y_Z="0.; FEET_GExTPzwl_GirderEx_TopPlate_Zwidth_Long/2.; FEET_GExTPxws_GirderEx_TopPlate_Xwidth_Short/2." rot="90.; 0.; 0."/> +</composition> + +<var name="FEET_GExSPxsp_GirderEx_SidePlate_XShift_Pre" value="FEET_GExSPxs_GirderEx_SidePlate_XShift-FEET_GExSPxw_GirderEx_SidePlate_Xwidth/2.*cos(FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ*GENV_PiS180)" /> +<var name="FEET_GExSPxstc_GirderEx_SidePlate_XShift_ThicknessCorrection" value="FEET_GExSPzw_GirderEx_SidePlate_Zwidth/2.*sin(FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ*GENV_PiS180)" /> +<var name="FEET_GExSPxst_GirderEx_SidePlate_XShift_Total" value="FEET_GExSPxsp_GirderEx_SidePlate_XShift_Pre+FEET_GExSPxstc_GirderEx_SidePlate_XShift_ThicknessCorrection"/> + +<var name="FEET_GExSPzsp_GirderEx_SidePlate_ZShift_Pre" value="FEET_GExSPxw_GirderEx_SidePlate_Xwidth/2.*sin(FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ*GENV_PiS180)" /> +<var name="FEET_GExSPzstc_GirderEx_SidePlate_ZShift_ThicknessCorrection" value="FEET_GExSPzw_GirderEx_SidePlate_Zwidth/2.*cos(FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ*GENV_PiS180)"/> +<var name="FEET_GExSPzst_GirderEx_SidePlate_ZShift_Total" value="FEET_GExSPzsp_GirderEx_SidePlate_ZShift_Pre+FEET_GExSPzstc_GirderEx_SidePlate_ZShift_ThicknessCorrection" /> + +<composition name="GirderExtremity_SidePlate" > + <posXYZ volume="GirderExtremity_SidePlate_single" X_Y_Z="FEET_GExSPxst_GirderEx_SidePlate_XShift_Total; 0.; FEET_GExSPzst_GirderEx_SidePlate_ZShift_Total" rot="0.; FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ; 0."/> + <posXYZ volume="GirderExtremity_SidePlate_single" X_Y_Z="-FEET_GExSPxst_GirderEx_SidePlate_XShift_Total; 0.; FEET_GExSPzst_GirderEx_SidePlate_ZShift_Total" rot="0.; -FEET_GExSPangxz_GirderEx_SidePlate_AngleXZ+180.; 0."/> +</composition> + +<var name="Feet_GExBPzsp_GirderEx_BottomPlate_ZShift_Pre" value="FEET_GExBPyw_GirderEx_BottomPlate_Ywidth/2.*sin(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)"/> +<var name="Feet_GExBPzstc_GirderEx_BottomPlate_ZShift_ThicknessCorrection" value="FEET_GExBPzw_GirderEx_BottomPlate_Zwidth/2.*cos(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)"/> +<var name="Feet_GExBPzst_GirderEx_BottomPlate_ZShift_Total" value="Feet_GExBPzsp_GirderEx_BottomPlate_ZShift_Pre+Feet_GExBPzstc_GirderEx_BottomPlate_ZShift_ThicknessCorrection" /> + +<var name="Feet_GExBPyshv_GirderEx_BottomPlate_YShift_HelpValue" value="FEET_GExBPyw_GirderEx_BottomPlate_Ywidth+FEET_GExBPzw_GirderEx_BottomPlate_Zwidth/2./tan(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)" /> +<var name="Feet_GExBPysp_GirderEx_BottomPlate_YShift_Pre" value="FEET_GExSPywl_GirderEx_SidePlate_Ywidth_Long-FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short-cos(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)*Feet_GExBPyshv_GirderEx_BottomPlate_YShift_HelpValue/2.+FEET_GExSPzstc_GirderEx_SidePlate_ZShift_ThicknessCorrection/tan(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)"/> +<var name="Feet_GExBPystc_GirderEx_BottomPlate_YShift_ThicknessCorrection" value="FEET_GExBPzw_GirderEx_BottomPlate_Zwidth/2./sin(FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ*GENV_PiS180)"/> +<var name="Feet_GExBPyst_GirderEx_BottomPlate_YShift_Total" value="Feet_GExBPysp_GirderEx_BottomPlate_YShift_Pre+Feet_GExBPystc_GirderEx_BottomPlate_YShift_ThicknessCorrection" /> + +<composition name="GirderExtremity_Pre" > + <posXYZ volume="GirderExtremity_FrontPlate" X_Y_Z="0.; FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short-FEET_GExFPyw_GirderEx_FrontPlate_Ywidth/2.; FEET_GExTPxwt_GirderEx_TopPlate_Xwidth_Total-175.-FEET_GExFPzw_GirderEx_FrontPlate_Zwidth/2." rot="0.; 0.; 0."/> + <posXYZ volume="GirderExtremity_TopPlate" X_Y_Z="0.; FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short; 0." rot="0.; 0.; 0."/> + <posXYZ volume="GirderExtremity_SidePlate" X_Y_Z="0.; 0.; 0." rot="0.; 0.; 0."/> + <posXYZ volume="GirderExtremity_BottomPlate" X_Y_Z="0.; -Feet_GExBPyst_GirderEx_BottomPlate_YShift_Total; Feet_GExBPzst_GirderEx_BottomPlate_ZShift_Total" rot="FEET_GExBPangyz_GirderEx_BottomPlate_AngleYZ; 0.; 0."/> +</composition> + +<box name="GirderExtremity_TopConnector" material="Iron" X_Y_Z=" FEET_GExTCxw_GirderEx_TopConnector_Xwidth; FEET_GExTCyw_GirderEx_TopConnector_Ywidth; FEET_GExCzw_GirderEx_Connector_Zwidth " /> +<box name="GirderExtremity_SideConnector" material="Iron" X_Y_Z=" FEET_GExSCxw_GirderEx_SideConnector_Xwidth; FEET_GExSCyw_GirderEx_SideConnector_Ywidth; FEET_GExCzw_GirderEx_Connector_Zwidth " /> +<box name="GirderExtremity_BottomConnector" material="Iron" X_Y_Z="FEET_GExBCxw_GirderEx_BottomConnector_Xwidth; FEET_GExBCyw_GirderEx_BottomConnector_Ywidth; FEET_GExCzw_GirderEx_Connector_Zwidth " /> + +<var name="FEET_GExPreyp_GirderEx_Pre_Yposition" value=" -FEET_GExTPzws_GirderEx_TopPlate_Zwidth_Short-FEET_GExSPyws_GirderEx_SidePlate_Ywidth_Short" /> +<var name="FEET_GExTCyp_GirderEx_TopConnector_Yposition" value=" -FEET_GExTCyw_GirderEx_TopConnector_Ywidth/2.+FEET_GExCys_GirderEx_Connector_Yshift" /> +<var name="FEET_GExSCxp_GirderEx_SideConnector_Xposition" value=" FEET_GExBCxw_GirderEx_BottomConnector_Xwidth/2. -FEET_GExSCxw_GirderEx_SideConnector_Xwidth/2. " /> +<var name="FEET_GExSCyp_GirderEx_SideConnector_Yposition" value=" FEET_GExTCyp_GirderEx_TopConnector_Yposition-FEET_GExSCyw_GirderEx_SideConnector_Ywidth/2.-FEET_GExTCyw_GirderEx_TopConnector_Ywidth/2." /> +<var name="FEET_GExBCyp_GirderEx_BottomConnector_Yposition" value=" FEET_GExSCyp_GirderEx_SideConnector_Yposition-FEET_GExSCyw_GirderEx_SideConnector_Ywidth/2.-FEET_GExBCyw_GirderEx_BottomConnector_Ywidth/2." /> + + +<composition name="GirderExtremity" > + <posXYZ volume="GirderExtremity_Pre" X_Y_Z=" 0.; FEET_GExPreyp_GirderEx_Pre_Yposition; FEET_GExCzw_GirderEx_Connector_Zwidth" /> + <posXYZ volume="GirderExtremity_TopConnector" X_Y_Z=" 0.; FEET_GExTCyp_GirderEx_TopConnector_Yposition; FEET_GExCzw_GirderEx_Connector_Zwidth/2." /> + <posXYZ volume="GirderExtremity_SideConnector" X_Y_Z=" FEET_GExSCxp_GirderEx_SideConnector_Xposition; FEET_GExSCyp_GirderEx_SideConnector_Yposition; FEET_GExCzw_GirderEx_Connector_Zwidth/2." /> + <posXYZ volume="GirderExtremity_SideConnector" X_Y_Z=" -FEET_GExSCxp_GirderEx_SideConnector_Xposition; FEET_GExSCyp_GirderEx_SideConnector_Yposition; FEET_GExCzw_GirderEx_Connector_Zwidth/2." /> + <posXYZ volume="GirderExtremity_BottomConnector" X_Y_Z=" 0.; FEET_GExBCyp_GirderEx_BottomConnector_Yposition; FEET_GExCzw_GirderEx_Connector_Zwidth/2." /> +</composition> + +<!-- --> +<!-- Perform Cuts on Main Plate --> +<!-- --> + +<subtraction name="FeetMainPlate_inter1" > + <posXYZ volume="FeetMainPlate" /> + <posXYZ volume="MainPlateRoundCut" X_Y_Z="FEET_MaPlRCXc_MainPlateRoundCut_XC;FEET_MaPlRCYc_MainPlateRoundCut_YC; 0." /> +</subtraction> + +<subtraction name="FeetMainPlate_inter2" > + <posXYZ volume="FeetMainPlate_inter1" /> + <posXYZ volume="MainPlateSecondaryRoundCut" X_Y_Z="FEET_MPlXextr_FeetMainPlate_Xextr;FEET_MPlYextr_FeetMainPlate_Yextr; 0." /> +</subtraction> + +<subtraction name="FeetMainPlate_inter3" > + <posXYZ volume="FeetMainPlate_inter2" /> + <posXYZ volume="MainPlateRoundCutCompletion" /> +</subtraction> + +<subtraction name="FeetMain" > + <posXYZ volume="FeetMainPlate_inter3" /> + <posXYZ volume="MiniConnPlate" X_Y_Z="FEET_MiCPxpos_MiniConnPlate_X;FEET_MiCPypos_MiniConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_MinCPltz_MiniConnPlate_ThetaZ" /> +</subtraction> + +<var name="FEET_RaSuXo_RailSupport_Xoffset" value="-FEET_MnPlUpXw_MainPlateUpperXwidth - FEET_UCnPlxwi_UpperConnPlate_Xwidth + FEET_MnPlHDiX_MainPlateHoleDistanceX + (FEET_Xwidth - FEET_HoleDist_RailSupport_DrillHoleDist)/2." /> + +<composition name="StandardFoot" > + <posXYZ volume="FeetMain" X_Y_Z="0.;0.;-FEET_MnPlZsep_MainPlateZsep/2" /> + <posXYZ volume="FeetMain" X_Y_Z="0.;0.; FEET_MnPlZsep_MainPlateZsep/2" /> + <posXYZ volume="MiniConnPlate" X_Y_Z="FEET_MiCPxpos_MiniConnPlate_X;FEET_MiCPypos_MiniConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_MinCPltz_MiniConnPlate_ThetaZ" /> + <posXYZ volume="SlantedConnPlate" X_Y_Z="FEET_SlCPxpos_SlantedConnPlate_X;FEET_SlCPypos_SlantedConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_SlaCPltz_SlantedConnPlate_ThetaZ" /> + <posXYZ volume="SlantedConnPlateBracket" X_Y_Z="FEET_SlCPxpos_SlantedConnPlate_X+(0.5*FEET_SlaCPlyh_SlantedConnPlate_Yheight+GENV_Eps)*GENV_Co225-(FEET_SlaCPlBr_Bracket_Pos-GENV_Eps)*GENV_Si225;FEET_SlCPypos_SlantedConnPlate_Y+GENV_Eps+(0.5*FEET_SlaCPlyh_SlantedConnPlate_Yheight+GENV_Eps)*GENV_Si225+(FEET_SlaCPlBr_Bracket_Pos-GENV_Eps)*GENV_Co225;0." rot="0.;0.;FEET_SlaCPltz_SlantedConnPlate_ThetaZ" /> + <posXYZ volume="GroundPlate" X_Y_Z="FEET_GrnPxpos_GroundPlate_X;FEET_GrnPypos_GroundPlate_Y; 0." /> + <posXYZ volume="VerticalConnPlate" X_Y_Z="FEET_VeCPxpos_VerticalConnPlate_X;FEET_VeCPypos_VerticalConnPlate_Y; 0." /> + <posXYZ volume="UpperConnPlate" X_Y_Z="FEET_UpCPxpos_UpperConnPlate_X;FEET_UpCPypos_UpperConnPlate_Y; 0." /> + <posXYZ volume="RailSupport" X_Y_Z="FEET_posx + FEET_RaSuXo_RailSupport_Xoffset;FEET_posy; 0." /> +</composition> + +<var name="FEET_StdFStYp_StandardFootStrut_Ypos" value="FEET_StdFooYp_StandardFoot_Ypos + FEET_MainPlHe_MainPlateHeight - FEET_MnPlUpDy_MainPlateUpperDY/2." /> + +<composition name="StandardFootAssembly" > + <posXYZ volume="StandardFoot" X_Y_Z="-FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos ;0." rot="0.;180.; 0." > + <sector value="6" /> + </posXYZ> + <posXYZ volume="StandardFoot" X_Y_Z=" FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos ;0." rot="0.; 0.; 0." > + <sector value="7" /> + </posXYZ> + <posXYZ volume="FEET_StandardStrut" X_Y_Z=" 0. ;FEET_StdFStYp_StandardFootStrut_Ypos;0." > + <sector value="7" /> + </posXYZ> +</composition> + + + + +<!-- Extremity Feet --> + +<var name="FEET_ExMPRCxc_ExtremityMainPlateRoundCut_XC" value=" FEET_MnPlGXwi_MainPlate_GroundXwidth-FEET_ExMPRCdx_ExtremityMainPlateRoundCut_DX " /> +<var name="FEET_ExMPRCyc_ExtremityMainPlateRoundCut_YC" value=" FEET_ExMPRCyp_ExtremityMainPlateRoundCut_Y + FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<tubs name="ExtremityMainPlateRoundCut" material="Aluminium1" Rio_Z=" 0 ; FEET_ExMPRCra_ExtremityMainPlateRoundCut_R ; FEET_dumz" nbPhi="FEET_dumphi" /> + +<var name="FEET_ExMPlxc3_ExtremityMainPlate_XC3" value=" FEET_ExMPRCxc_ExtremityMainPlateRoundCut_XC - FEET_ExMPRCra_ExtremityMainPlateRoundCut_R * GENV_Co525 " /> +<var name="FEET_ExMPlyc3_ExtremityMainPlate_YC3" value=" FEET_ExMPRCyc_ExtremityMainPlateRoundCut_YC + FEET_ExMPRCra_ExtremityMainPlateRoundCut_R * GENV_Si525 " /> + +<var name="FEET_ExMPlxc4_ExtremityMainPlate_XC4" value=" FEET_ExMPRCxc_ExtremityMainPlateRoundCut_XC - FEET_ExMPRCra_ExtremityMainPlateRoundCut_R * GENV_Co5 " /> +<var name="FEET_ExMPlyc4_ExtremityMainPlate_YC4" value=" FEET_ExMPRCyc_ExtremityMainPlateRoundCut_YC + FEET_ExMPRCra_ExtremityMainPlateRoundCut_R * GENV_Si5 " /> + +<var name="FEET_ExMPlxc5_ExtremityMainPlate_XC5" value=" FEET_MaPlRCXc_MainPlateRoundCut_XC - FEET_MnPlRCra_MainPlateRoundCut_R * GENV_Co5 " /> +<var name="FEET_ExMPlyc5_ExtremityMainPlate_YC5" value=" FEET_MaPlRCYc_MainPlateRoundCut_YC + FEET_MnPlRCra_MainPlateRoundCut_R * GENV_Si5 " /> + +<var name="FEET_a2" value=" GENV_Ta375 " /> +<var name="FEET_b2" value=" FEET_ExMPlyc3_ExtremityMainPlate_YC3 - FEET_ExMPlxc3_ExtremityMainPlate_XC3 * GENV_Ta375 " /> +<var name="FEET_a2prime" value="-GENV_Ta675 " /> +<var name="FEET_b2prime" value=" FEET_MainPlYc + FEET_MainPlXc * GENV_Ta675 " /> +<var name="FEET_ExMPlaxd_ExtremityMainPlate_XD" value=" -(FEET_b2-FEET_b2prime)/(FEET_a2-FEET_a2prime) " /> +<var name="FEET_ExMPlayd_ExtremityMainPlate_YD" value=" FEET_a2*FEET_ExMPlaxd_ExtremityMainPlate_XD + FEET_b2 " /> + +<var name="FEET_ExMPc2c1_ExtremityMainPlate_LengthC2C1" value="FEET_ExMCPyhe_ExtremityMiniConnPlate_Yheight+(FEET_ExMPhei1_ExtremityMainPlate_Height_intermediate1-FEET_MainPlH1_MainPlateHeight_intermediate1)/GENV_Co225 " /> +<var name="FEET_ExMPlxc1_ExtremityMainPlate_XC1" value="FEET_MnPlGXwi_MainPlate_GroundXwidth - FEET_ExMPc2c1_ExtremityMainPlate_LengthC2C1*GENV_Si225 " /> +<var name="FEET_ExMPlyc1_ExtremityMainPlate_YC1" value="FEET_MainPlYc+ FEET_ExMPc2c1_ExtremityMainPlate_LengthC2C1*GENV_Co225" /> + +<var name="FEET_ExMPyc1a_ExtremityMainPlate_YC1a" value="FEET_ExMPhei2_ExtremityMainPlate_Height_intermediate2 + FEET_MnPlPeHe_MainPlate_PedestalHeight " /> +<var name="FEET_ExMPxc1a_ExtremityMainPlate_XC1a" value="FEET_ExMPlxc1_ExtremityMainPlate_XC1 - (FEET_ExMPlyc1_ExtremityMainPlate_YC1-FEET_ExMPyc1a_ExtremityMainPlate_YC1a)/GENV_Ta225 " /> + +<var name="FEET_ExMPxc1b_ExtremityMainPlate_XC1b" value="FEET_MaPlRCXc_MainPlateRoundCut_XC " /> +<var name="FEET_ExMPyc1b_ExtremityMainPlate_YC1b" value="FEET_ExMPyc1a_ExtremityMainPlate_YC1a " /> + +<var name="FEET_Alpha3" value="FEET_MinCPltz_MiniConnPlate_ThetaZ + atan(FEET_ExMCPyhe_ExtremityMiniConnPlate_Yheight/FEET_MinCPlxw_MiniConnPlate_Xwidth)/GENV_PiS180" /> +<var name="FEET_CoAl3" value="cos(FEET_Alpha3*GENV_PiS180)" /> +<var name="FEET_SiAl3" value="sin(FEET_Alpha3*GENV_PiS180)" /> +<var name="FEET_ExMCPDia_ExtremityMiniConnPlate_DIAG" value=" ( (FEET_MinCPlxw_MiniConnPlate_Xwidth/2.)**2. + (FEET_ExMCPyhe_ExtremityMiniConnPlate_Yheight/2.)**2. )**0.5 " /> +<var name="FEET_ExMCPxpo_ExtremityMiniConnPlate_X" value="FEET_ExMPlxc1_ExtremityMainPlate_XC1-FEET_ExMCPDia_ExtremityMiniConnPlate_DIAG*FEET_CoAl3" /> +<var name="FEET_ExMCPypo_ExtremityMiniConnPlate_Y" value="FEET_ExMPlyc1_ExtremityMainPlate_YC1-FEET_ExMCPDia_ExtremityMiniConnPlate_DIAG*FEET_SiAl3 " /> + +<box name="ExtremityMiniConnPlate" material="Iron" X_Y_Z="FEET_MinCPlxw_MiniConnPlate_Xwidth; FEET_ExMCPyhe_ExtremityMiniConnPlate_Yheight; FEET_ExMCPzle_ExtremityMiniConnPlate_Zlength " /> + +<var name="FEET_ExMPlaxf_ExtremityMainPlate_XF" value=" FEET_MainPlXe" /> +<var name="FEET_ExMPlayf_ExtremityMainPlate_YF" value=" FEET_ExMPheig_ExtremityMainPlate_Height " /> + +<var name="FEET_ExMPlxf1_ExtremityMainPlate_XF1" value=" FEET_MainPlXf - ( FEET_ExMPxwid_ExtremityMainPlate_Xwidth - FEET_ExMPxwi1_ExtremityMainPlate_Xwidth_inter1 )" /> +<var name="FEET_ExMPlyf1_ExtremityMainPlate_YF1" value=" FEET_ExMPheig_ExtremityMainPlate_Height " /> + +<var name="FEET_ExMPlxf2_ExtremityMainPlate_XF2" value="FEET_ExMPlxf1_ExtremityMainPlate_XF1 " /> +<var name="FEET_ExMPlyf2_ExtremityMainPlate_YF2" value="FEET_ExMPlyf1_ExtremityMainPlate_YF1 - FEET_ExMPyhi1_ExtremityMainPlate_Yheight_inter1" /> + +<var name="FEET_ExMPlyf3_ExtremityMainPlate_YF3" value="FEET_ExMPyhi2_ExtremityMainPlate_Yheight_inter2+FEET_ExMPyhi3_ExtremityMainPlate_Yheight_inter3-FEET_ExMPyhi4_ExtremityMainPlate_Yheight_inter4+FEET_MnPlPeHe_MainPlate_PedestalHeight"/> + +<var name="FEET_ExMPlxf3_ExtremityMainPlate_XF3" value="FEET_ExMPlxf2_ExtremityMainPlate_XF2 - (FEET_ExMPlyf2_ExtremityMainPlate_YF2-FEET_ExMPlyf3_ExtremityMainPlate_YF3)/GENV_Ta20 " /> + +<var name="FEET_ExMPlxf4_ExtremityMainPlate_XF4" value="FEET_ExMPlxf2_ExtremityMainPlate_XF2 - (FEET_ExMPxwi1_ExtremityMainPlate_Xwidth_inter1-FEET_ExMPxwi2_ExtremityMainPlate_Xwidth_inter2)" /> +<var name="FEET_ExMPlyf4_ExtremityMainPlate_YF4" value="FEET_ExMPlyf3_ExtremityMainPlate_YF3 " /> + +<var name="FEET_ExMPlxf5_ExtremityMainPlate_XF5" value="FEET_ExMPlxf4_ExtremityMainPlate_XF4 - FEET_ExMPyhi4_ExtremityMainPlate_Yheight_inter4*GENV_Ta225" /> +<var name="FEET_ExMPlyf5_ExtremityMainPlate_YF5" value="FEET_ExMPlyf4_ExtremityMainPlate_YF4 + FEET_ExMPyhi4_ExtremityMainPlate_Yheight_inter4" /> + +<var name="FEET_ExMPlxf6_ExtremityMainPlate_XF6" value="FEET_ExMPlxf4_ExtremityMainPlate_XF4 - FEET_ExMPxwi2_ExtremityMainPlate_Xwidth_inter2" /> +<var name="FEET_ExMPlyf6_ExtremityMainPlate_YF6" value="FEET_ExMPlyf5_ExtremityMainPlate_YF5" /> + +<var name="FEET_ExMPlxf7_ExtremityMainPlate_XF7" value="FEET_ExMPlxf6_ExtremityMainPlate_XF6" /> +<var name="FEET_ExMPlyf7_ExtremityMainPlate_YF7" value="FEET_ExMPlyf6_ExtremityMainPlate_YF6 - FEET_ExMPyhi3_ExtremityMainPlate_Yheight_inter3" /> + +<var name="FEET_ExMPlaxi_ExtremityMainPlate_XI" value=" -FEET_ExMPxdi1_ExtremityMainPlate_Xdist_inter1 + FEET_ExMPxdi2_ExtremityMainPlate_Xdist_inter2 " /> + +<var name="FEET_ExMPlaxh_ExtremityMainPlate_XH" value="FEET_ExMPlaxi_ExtremityMainPlate_XI -(FEET_ExMPyhi2_ExtremityMainPlate_Yheight_inter2-FEET_ExMPydi2_ExtremityMainPlate_Ydist_inter1)/GENV_Ta77 " /> +<var name="FEET_ExMPlayh_ExtremityMainPlate_YH" value=" FEET_ExMPlyf7_ExtremityMainPlate_YF7 " /> + + +<gvxy name="ExtremityFeetMainPlate" material="Iron" dZ="FEET_MainPldZ_MainPlateDZ" > + <gvxy_point X_Y=" FEET_MainPlXa ; FEET_MainPlYa " /> + <gvxy_point X_Y=" FEET_MainPlXb ; FEET_MainPlYb " /> + <gvxy_point X_Y=" FEET_MainPlXc ; FEET_MainPlYc " /> + <gvxy_point X_Y=" FEET_ExMPlxc1_ExtremityMainPlate_XC1 ; FEET_ExMPlyc1_ExtremityMainPlate_YC1 " /> + <gvxy_point X_Y=" FEET_ExMPxc1a_ExtremityMainPlate_XC1a ; FEET_ExMPyc1a_ExtremityMainPlate_YC1a " /> + <gvxy_point X_Y=" FEET_ExMPxc1b_ExtremityMainPlate_XC1b ; FEET_ExMPyc1b_ExtremityMainPlate_YC1b " /> + <gvxy_point X_Y=" FEET_ExMPlxc5_ExtremityMainPlate_XC5 ; FEET_ExMPlyc5_ExtremityMainPlate_YC5 " /> + <gvxy_point X_Y=" FEET_ExMPlxc4_ExtremityMainPlate_XC4 ; FEET_ExMPlyc4_ExtremityMainPlate_YC4 " /> + <gvxy_point X_Y=" FEET_ExMPlxc3_ExtremityMainPlate_XC3 ; FEET_ExMPlyc3_ExtremityMainPlate_YC3 " /> + <gvxy_point X_Y=" FEET_ExMPlaxd_ExtremityMainPlate_XD ; FEET_ExMPlayd_ExtremityMainPlate_YD " /> + <gvxy_point X_Y=" FEET_MainPlXe ; FEET_MainPlYe " /> + <gvxy_point X_Y=" FEET_ExMPlaxf_ExtremityMainPlate_XF ; FEET_ExMPlayf_ExtremityMainPlate_YF " /> + <gvxy_point X_Y=" FEET_ExMPlxf1_ExtremityMainPlate_XF1 ; FEET_ExMPlyf1_ExtremityMainPlate_YF1 " /> + <gvxy_point X_Y=" FEET_ExMPlxf2_ExtremityMainPlate_XF2 ; FEET_ExMPlyf2_ExtremityMainPlate_YF2 " /> + <gvxy_point X_Y=" FEET_ExMPlxf3_ExtremityMainPlate_XF3 ; FEET_ExMPlyf3_ExtremityMainPlate_YF3 " /> + <gvxy_point X_Y=" FEET_ExMPlxf4_ExtremityMainPlate_XF4 ; FEET_ExMPlyf4_ExtremityMainPlate_YF4 " /> + <gvxy_point X_Y=" FEET_ExMPlxf5_ExtremityMainPlate_XF5 ; FEET_ExMPlyf5_ExtremityMainPlate_YF5 " /> + <gvxy_point X_Y=" FEET_ExMPlxf6_ExtremityMainPlate_XF6 ; FEET_ExMPlyf6_ExtremityMainPlate_YF6 " /> + <gvxy_point X_Y=" FEET_ExMPlxf7_ExtremityMainPlate_XF7 ; FEET_ExMPlyf7_ExtremityMainPlate_YF7 " /> + <gvxy_point X_Y=" FEET_ExMPlaxh_ExtremityMainPlate_XH ; FEET_ExMPlayh_ExtremityMainPlate_YH " /> + <gvxy_point X_Y=" FEET_MainPlXi ; FEET_MainPlYi " /> + <gvxy_point X_Y=" FEET_MainPlXj ; FEET_MainPlYj " /> +</gvxy> + + + +<!-- Ensemble of Connecting plates --> + +<box name="ExtremityGroundPlate" material="Iron" X_Y_Z="FEET_GrnPxwid_GroundPlate_Xwidth; FEET_GrnPyhei_GroundPlate_Yheight; FEET_ExGPzlen_ExtremityGroundPlate_Zlength" /> + +<box name="ExtremitySlantedConnPlate_box" material="Iron" X_Y_Z="FEET_SlaCPlxw_SlantedConnPlate_Xwidth; FEET_SlaCPlyh_SlantedConnPlate_Yheight; FEET_ExSCPzle_ExtremitySlantedConnPlate_Zlength" /> +<tubs name="ExtremitySlantedConnPlateRoundCut" material="Iron" Rio_Z=" 0 ; FEET_ExSPRCra_ExtremitySlantedConnPlateRoundCut_Radius; FEET_dumz" nbPhi="FEET_dumphi" /> + +<subtraction name="ExtremitySlantedConnPlate" > + <posXYZ volume="ExtremitySlantedConnPlate_box" /> + <posXYZ volume="ExtremitySlantedConnPlateRoundCut" X_Y_Z="FEET_ExSPRCof_ExtremitySlantedConnPlateRoundCut_Offset;0.;0." rot="90.;0.;0." /> +</subtraction> + + +<var name="FEET_ExUCPxpo_ExtremityUpperConnPlate_X" value="FEET_ExMPlxf7_ExtremityMainPlate_XF7 - FEET_UCnPlxwi_UpperConnPlate_Xwidth/2." /> +<var name="FEET_ExUCPypo_ExtremityUpperConnPlate_Y" value=" FEET_ExMPlayh_ExtremityMainPlate_YH + FEET_ExUCPyhe_ExtremityUpperConnPlate_Yheight/2." /> +<box name="ExtremityUpperConnPlate" material="Iron" X_Y_Z="FEET_UCnPlxwi_UpperConnPlate_Xwidth; FEET_ExUCPyhe_ExtremityUpperConnPlate_Yheight; FEET_ExUCPzle_ExtremityUpperConnPlate_Zlength" /> + +<var name="FEET_ExVCPzle_ExtremityVerticalConnPlate_Zlength" value=" FEET_ExMPzsep_ExtremityMainPlate_Zsep - FEET_MainPldZ_MainPlateDZ " /> + +<var name="FEET_ExVCPlxa_ExtremityVerticalConnPlate_XA" value=" 0." /> +<var name="FEET_ExVCPlya_ExtremityVerticalConnPlate_YA" value=" 0." /> +<var name="FEET_ExVCPlxb_ExtremityVerticalConnPlate_XB" value="FEET_ExVCPlxa_ExtremityVerticalConnPlate_XA - FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness" /> +<var name="FEET_ExVCPlyb_ExtremityVerticalConnPlate_YB" value="FEET_ExVCPlya_ExtremityVerticalConnPlate_YA" /> + +<var name="FEET_ExVCPlxc_ExtremityVerticalConnPlate_XC" value="FEET_ExVCPlxb_ExtremityVerticalConnPlate_XB" /> +<var name="FEET_ExVCPlyc_ExtremityVerticalConnPlate_YC" value="FEET_ExVCPhei_ExtremityVerticalConnPlate_Height-(FEET_ExVCPxex_ExtremityVerticalConnPlate_Xext-FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness)*GENV_Ta675"/> + +<var name="FEET_ExVCPlxd_ExtremityVerticalConnPlate_XD" value="FEET_ExVCPlxc_ExtremityVerticalConnPlate_XC - FEET_ExVCPxex_ExtremityVerticalConnPlate_Xext + FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness*GENV_Co225" /> +<var name="FEET_ExVCPlyd_ExtremityVerticalConnPlate_YD" value="FEET_ExVCPhei_ExtremityVerticalConnPlate_Height - FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness*GENV_Si225" /> + +<var name="FEET_ExVCPlxe_ExtremityVerticalConnPlate_XE" value="FEET_ExVCPlxd_ExtremityVerticalConnPlate_XD + FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness*GENV_Co225 " /> +<var name="FEET_ExVCPlye_ExtremityVerticalConnPlate_YE" value="FEET_ExVCPlyd_ExtremityVerticalConnPlate_YD + FEET_ExVCPthi_ExtremityVerticalConnPlate_Thickness*GENV_Si225 " /> + +<var name="FEET_ExVCPlxf_ExtremityVerticalConnPlate_XF" value="FEET_ExVCPlxa_ExtremityVerticalConnPlate_XA " /> +<var name="FEET_ExVCPlyf_ExtremityVerticalConnPlate_YF" value="FEET_ExVCPlyc_ExtremityVerticalConnPlate_YC " /> + +<gvxy name="ExtremityVerticalConnPlateCore" material="Iron" dZ="FEET_ExVCPzle_ExtremityVerticalConnPlate_Zlength" > + <gvxy_point X_Y=" FEET_ExVCPlxa_ExtremityVerticalConnPlate_XA ; FEET_ExVCPlya_ExtremityVerticalConnPlate_YA " /> + <gvxy_point X_Y=" FEET_ExVCPlxb_ExtremityVerticalConnPlate_XB ; FEET_ExVCPlyb_ExtremityVerticalConnPlate_YB " /> + <gvxy_point X_Y=" FEET_ExVCPlxc_ExtremityVerticalConnPlate_XC ; FEET_ExVCPlyc_ExtremityVerticalConnPlate_YC " /> + <gvxy_point X_Y=" FEET_ExVCPlxd_ExtremityVerticalConnPlate_XD ; FEET_ExVCPlyd_ExtremityVerticalConnPlate_YD " /> + <gvxy_point X_Y=" FEET_ExVCPlxe_ExtremityVerticalConnPlate_XE ; FEET_ExVCPlye_ExtremityVerticalConnPlate_YE " /> + <gvxy_point X_Y=" FEET_ExVCPlxf_ExtremityVerticalConnPlate_XF ; FEET_ExVCPlyf_ExtremityVerticalConnPlate_YF " /> +</gvxy> + +<box name="ExtremityVerticalConnPlateCut" material="Iron" X_Y_Z="FEET_ExVCPxcu_ExtremityVerticalConnPlate_CutX; FEET_ExVCPycu_ExtremityVerticalConnPlate_CutY; FEET_dumz" /> + + +<var name="FEET_ExVCPlxp_ExtremityVerticalConnPlate_Xpos" value="(FEET_ExVCPlxd_ExtremityVerticalConnPlate_XD+FEET_ExVCPlxe_ExtremityVerticalConnPlate_XE)/2.+GENV_Co675*FEET_ExVCPycu_ExtremityVerticalConnPlate_CutY/2."/> +<var name="FEET_ExVCPlyp_ExtremityVerticalConnPlate_Ypos" value="(FEET_ExVCPlyd_ExtremityVerticalConnPlate_YD+FEET_ExVCPlye_ExtremityVerticalConnPlate_YE)/2.-GENV_Si675*FEET_ExVCPycu_ExtremityVerticalConnPlate_CutY/2."/> + +<subtraction name="ExtremityVerticalConnPlate" > + <posXYZ volume="ExtremityVerticalConnPlateCore" /> + <posXYZ volume="ExtremityVerticalConnPlateCut" X_Y_Z="FEET_ExVCPlxp_ExtremityVerticalConnPlate_Xpos; FEET_ExVCPlyp_ExtremityVerticalConnPlate_Ypos +GENV_Eps; 0. " rot=" 0. ; 90. ; 22.5" /> +</subtraction> + +<var name="FEET_ExVCPlax_ExtremityVerticalConnPlate_X" value=" FEET_ExVCPldx_ExtremityVerticalConnPlate_DX " /> +<var name="FEET_ExVCPlay_ExtremityVerticalConnPlate_Y" value=" FEET_ExVCPldy_ExtremityVerticalConnPlate_DY + FEET_MnPlPeHe_MainPlate_PedestalHeight" /> + +<!-- Extremity Feet Rail support --> + +<var name="FEET_ExRSLzle_ExtremityRailSupportLower_Zlength" value="FEET_ExRSUzle_ExtremityRailSupportUpper_Zlength - FEET_ExRSLdzl_ExtremityRailSupportLower_DZlength" /> +<var name="FEET_ExRSVyhe_ExtremityRailSupportVertical_Yheight" value="FEET_ExRSCyhe_ExtremityRailSupportCentral_Yheight " /> +<var name="FEET_ExRSMxpo_ExtremityRailSupportMiddle_Xpos" value="FEET_ExRSMxwi_ExtremityRailSupportMiddle_Xwidth/2. + FEET_ExRSCxwi_ExtremityRailSupportCentral_Xwidth/2." /> +<var name="FEET_ExRSVxpo_ExtremityRailSupportVertical_Xpos" value="FEET_ExRSVxwi_ExtremityRailSupportVertical_Xwidth/2. + FEET_ExRSCxwi_ExtremityRailSupportCentral_Xwidth/2." /> + + +<box name="ExtremityRailSupportUpper" material="Iron" X_Y_Z="FEET_Xwidth; FEET_UpperHeY_RailSupportUpper_Yheight; FEET_ExRSUzle_ExtremityRailSupportUpper_Zlength " /> +<box name="ExtremityRailSupportLower" material="Iron" X_Y_Z="FEET_Xwidth; FEET_ExRSLyhe_ExtremityRailSupportLower_Yheight; FEET_ExRSLzle_ExtremityRailSupportLower_Zlength " /> +<box name="ExtremityRailSupportCentral" material="Iron" X_Y_Z="FEET_ExRSCxwi_ExtremityRailSupportCentral_Xwidth; FEET_ExRSCyhe_ExtremityRailSupportCentral_Yheight; FEET_ExRSCzle_ExtremityRailSupportCentral_Zlength" /> +<box name="ExtremityRailSupportMiddle" material="Iron" X_Y_Z="FEET_ExRSMxwi_ExtremityRailSupportMiddle_Xwidth; FEET_MidllYth_RailSupportMiddle_Ythick; FEET_ExRSMzle_ExtremityRailSupportMiddle_Zlength" /> +<box name="ExtremityRailSupportVertical" material="Iron" X_Y_Z="FEET_ExRSVxwi_ExtremityRailSupportVertical_Xwidth; FEET_ExRSVyhe_ExtremityRailSupportVertical_Yheight; FEET_VertiZth_RailSupportVertical_Zthick" /> +<box name="ExtremityRailSupportExtr" material="Iron" X_Y_Z="FEET_Xwidth; FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight; FEET_ExRSEzle_ExtremityRailSupportExtr_Zlength " /> + + +<var name="FEET_ExRSEypo_ExtremityRailSupportExtr_Y" value="FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight/2."/> +<var name="FEET_ExRSUypo_ExtremityRailSupportUpper_Y" value="FEET_ExRSTyhe_ExtremityRailSupportTotal_Yheight-FEET_UpperHeY_RailSupportUpper_Yheight/2."/> +<var name="FEET_ExRSLypo_ExtremityRailSupportLower_Y" value="FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight+FEET_ExRSLyhe_ExtremityRailSupportLower_Yheight/2."/> +<var name="FEET_ExRSCypo_ExtremityRailSupportCentral_Y" value="FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight+FEET_ExRSLyhe_ExtremityRailSupportLower_Yheight+FEET_ExRSCyhe_ExtremityRailSupportCentral_Yheight/2."/> +<var name="FEET_ExRSVypo_ExtremityRailSupportVertical_Y" value="FEET_ExRSCypo_ExtremityRailSupportCentral_Y"/> + +<var name="FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos" value="-FEET_ExRSUzle_ExtremityRailSupportUpper_Zlength/2.+FEET_ExRSVzi1_ExtremityRailSupportVertical_Zpos_inter1-FEET_VertiZth_RailSupportVertical_Zthick/2."/> +<var name="FEET_ExRSVzp2_ExtremityRailSupportVertical2_Zpos" value=" FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos + FEET_ExRSMzle_ExtremityRailSupportMiddle_Zlength + FEET_VertiZth_RailSupportVertical_Zthick" /> +<var name="FEET_ExRSMzpo_ExtremityRailSupportMiddle_Zpos" value="(FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos+FEET_ExRSVzp2_ExtremityRailSupportVertical2_Zpos)/2." /> +<var name="FEET_ExRSEzpo_ExtremityRailSupportExtr_Zpos" value=" FEET_ExRSLzle_ExtremityRailSupportLower_Zlength/2.-FEET_ExRSEzof_ExtremityRailSupportExtr_Zoffset-FEET_ExRSEzle_ExtremityRailSupportExtr_Zlength/2."/> + +<var name="FEET_ExRSC1ye_ExtremityRailSupportCut1_Yext" value="FEET_ExRSC1wi_ExtremityRailSupportCut1_Width - FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2*2 " /> +<var name="FEET_ExRSC2ye_ExtremityRailSupportCut2_Yext" value="FEET_ExRSC1wi_ExtremityRailSupportCut1_Width " /> + +<box name="ExtremityRailSupportCut1" material="Iron" X_Y_Z="FEET_ExRSC1xe_ExtremityRailSupportCut1_dumXext; FEET_ExRSC1ye_ExtremityRailSupportCut1_Yext; FEET_dumz " /> +<box name="ExtremityRailSupportCut2" material="Iron" X_Y_Z="FEET_ExRSC2xe_ExtremityRailSupportCut2_dumXext; FEET_ExRSC2ye_ExtremityRailSupportCut2_Yext; FEET_dumz " /> +<tubs name="ExtremityRailSupportCut3" material="Iron" Rio_Z=" 0 ; FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2 ; FEET_dumz" nbPhi="FEET_dumphi" /> + +<var name="FEET_ExRSC1xp_ExtremityRailSupportCut1_Xpos" value="FEET_dumz/2. + ( FEET_Xwidth/2.- FEET_ExRSC1de_ExtremityRailSupportCut1_Depth) " /> +<var name="FEET_ExRSC2xp_ExtremityRailSupportCut2_Xpos" value="FEET_dumz/2. + ( FEET_Xwidth/2.- FEET_ExRSC1de_ExtremityRailSupportCut1_Depth+ FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2) " /> + +<var name="FEET_ExRSC1zp_ExtremityRailSupportCut1_Zpos" value="-FEET_ExRSLzle_ExtremityRailSupportLower_Zlength/2.+ FEET_ExRSC2z1_ExtremityRailSupportCut1_Zoffset1 + FEET_ExRSC1wi_ExtremityRailSupportCut1_Width/2." /> + +<var name="FEET_ExRSC3xp_ExtremityRailSupportCut3_Xpos" value="FEET_Xwidth/2. -(FEET_ExRSC1de_ExtremityRailSupportCut1_Depth-FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2)" /> +<var name="FEET_ExRSC3zp_ExtremityRailSupportCut3_Zpos" value="-FEET_ExRSLzle_ExtremityRailSupportLower_Zlength/2.+ FEET_ExRSC2z1_ExtremityRailSupportCut1_Zoffset1 + FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2" /> + +<var name="FEET_ExRSC4z1" value="FEET_ExRSC1wi_ExtremityRailSupportCut1_Width-FEET_ExRSC2z2_ExtremityRailSupportCut1_Zoffset2"/> +<var name="FEET_ExRSC4zp_ExtremityRailSupportCut4_Zpos" value="-FEET_ExRSLzle_ExtremityRailSupportLower_Zlength/2.+FEET_ExRSC2z1_ExtremityRailSupportCut1_Zoffset1+FEET_ExRSC4z1"/> + +<var name="FEET_ExRSMCxa_ExtremityRailSupportMiddleCut_XA" value="FEET_ExRSMCwi_ExtremityRailSupportMiddleCut_Width/2." /> +<var name="FEET_ExRSMCya_ExtremityRailSupportMiddleCut_YA" value="FEET_ExRSMCy1_ExtremityRailSupportMiddleCut_dumy1" /> + +<var name="FEET_ExRSMCxb_ExtremityRailSupportMiddleCut_XB" value="FEET_ExRSMCxa_ExtremityRailSupportMiddleCut_XA" /> +<var name="FEET_ExRSMCyb_ExtremityRailSupportMiddleCut_YB" value="FEET_ExRSMCya_ExtremityRailSupportMiddleCut_YA + FEET_ExRSMCy2_ExtremityRailSupportMiddleCut_dumy2" /> + +<var name="FEET_ExRSMCxc_ExtremityRailSupportMiddleCut_XC" value="FEET_ExRSMCwi_ExtremityRailSupportMiddleCut_Width/2.- FEET_ExRSMCde_ExtremityRailSupportMiddleCut_Depth" /> +<var name="FEET_ExRSMCyc_ExtremityRailSupportMiddleCut_YC" value="FEET_ExRSMCyb_ExtremityRailSupportMiddleCut_YB + FEET_ExRSMCde_ExtremityRailSupportMiddleCut_Depth" /> + +<gvxysx name="ExtremityRailSupportMiddleCut" material="Iron" dZ="FEET_dumz" > + <gvxy_point X_Y=" FEET_ExRSMCxa_ExtremityRailSupportMiddleCut_XA ; FEET_ExRSMCya_ExtremityRailSupportMiddleCut_YA " /> + <gvxy_point X_Y=" FEET_ExRSMCxb_ExtremityRailSupportMiddleCut_XB ; FEET_ExRSMCyb_ExtremityRailSupportMiddleCut_YB " /> + <gvxy_point X_Y=" FEET_ExRSMCxc_ExtremityRailSupportMiddleCut_XC ; FEET_ExRSMCyc_ExtremityRailSupportMiddleCut_YC " /> +</gvxysx> + +<var name="FEET_ExRSMCxp_ExtremityRailSupportMiddle_cut_Xpos" value="FEET_ExRSMCyc_ExtremityRailSupportMiddleCut_YC+FEET_Xwidth/2.-FEET_ExRSMCde_ExtremityRailSupportMiddleCut_Depth" /> + +<var name="FEET_ExRSMCz1" value="FEET_ExRSVzi1_ExtremityRailSupportVertical_Zpos_inter1+FEET_ExRSMCzo_ExtremityRailSupportMiddleCut_Zoffset"/> +<var name="FEET_ExRSMCzp_ExtremityRailSupportMiddle_cut_Zpos" value="FEET_ExRSMCxb_ExtremityRailSupportMiddleCut_XB-FEET_ExRSLzle_ExtremityRailSupportLower_Zlength/2.+FEET_ExRSMCz1"/> + +<composition name="ExtremityRailSupport" > + <posXYZ volume="ExtremityRailSupportUpper" X_Y_Z=" 0.;FEET_ExRSUypo_ExtremityRailSupportUpper_Y;0." /> + <posXYZ volume="ExtremityRailSupportCentral" X_Y_Z=" 0.;FEET_ExRSCypo_ExtremityRailSupportCentral_Y;0." /> + <posXYZ volume="ExtremityRailSupportVertical" X_Y_Z=" FEET_ExRSVxpo_ExtremityRailSupportVertical_Xpos;FEET_ExRSVypo_ExtremityRailSupportVertical_Y; FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos" /> + <posXYZ volume="ExtremityRailSupportVertical" X_Y_Z="-FEET_ExRSVxpo_ExtremityRailSupportVertical_Xpos;FEET_ExRSVypo_ExtremityRailSupportVertical_Y; FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos" /> + <posXYZ volume="ExtremityRailSupportVertical" X_Y_Z=" FEET_ExRSVxpo_ExtremityRailSupportVertical_Xpos;FEET_ExRSVypo_ExtremityRailSupportVertical_Y; FEET_ExRSVzp2_ExtremityRailSupportVertical2_Zpos" /> + <posXYZ volume="ExtremityRailSupportVertical" X_Y_Z="-FEET_ExRSVxpo_ExtremityRailSupportVertical_Xpos;FEET_ExRSVypo_ExtremityRailSupportVertical_Y; FEET_ExRSVzp2_ExtremityRailSupportVertical2_Zpos" /> +</composition> + + +<subtraction name="ExtremityRailSupportMiddle_cut_plus" > + <posXYZ volume="ExtremityRailSupportMiddle" X_Y_Z="FEET_ExRSMxpo_ExtremityRailSupportMiddle_Xpos;FEET_Midyposi_RailSupportMiddle_Y;FEET_ExRSMzpo_ExtremityRailSupportMiddle_Zpos" rot="0.;0.;0." /> + <posXYZ volume="ExtremityRailSupportMiddleCut" X_Y_Z="FEET_ExRSMCxp_ExtremityRailSupportMiddle_cut_Xpos;0.;FEET_ExRSMCzp_ExtremityRailSupportMiddle_cut_Zpos" rot="0.;90.;90." /> +</subtraction> + +<subtraction name="ExtremityRailSupportMiddle_cut_minus" > + <posXYZ volume="ExtremityRailSupportMiddle" X_Y_Z="-FEET_ExRSMxpo_ExtremityRailSupportMiddle_Xpos;FEET_Midyposi_RailSupportMiddle_Y;FEET_ExRSMzpo_ExtremityRailSupportMiddle_Zpos" rot="0.;0.;0." /> + <posXYZ volume="ExtremityRailSupportMiddleCut" X_Y_Z="-FEET_ExRSMCxp_ExtremityRailSupportMiddle_cut_Xpos;0.;FEET_ExRSMCzp_ExtremityRailSupportMiddle_cut_Zpos" rot="0.;90.;270." /> +</subtraction> + +<subtraction name="ExtremityRailSupportLower_cut1_plus" > + <posXYZ volume="ExtremityRailSupportLower" rot="0.;0.;0." /> + <posXYZ volume="ExtremityRailSupportCut1" X_Y_Z="FEET_ExRSC1xp_ExtremityRailSupportCut1_Xpos;0.;FEET_ExRSC1zp_ExtremityRailSupportCut1_Zpos" rot="90.;0.;90." /> +</subtraction> +<subtraction name="ExtremityRailSupportLower_cut2_plus" > + <posXYZ volume="ExtremityRailSupportLower_cut1_plus" /> + <posXYZ volume="ExtremityRailSupportCut2" X_Y_Z="FEET_ExRSC2xp_ExtremityRailSupportCut2_Xpos;0.;FEET_ExRSC1zp_ExtremityRailSupportCut1_Zpos" rot="90.;0.;90." /> +</subtraction> +<subtraction name="ExtremityRailSupportLower_cut3_plus" > + <posXYZ volume="ExtremityRailSupportLower_cut2_plus" /> + <posXYZ volume="ExtremityRailSupportCut3" X_Y_Z="FEET_ExRSC3xp_ExtremityRailSupportCut3_Xpos;0.;FEET_ExRSC3zp_ExtremityRailSupportCut3_Zpos" rot="90.;0.;0." /> +</subtraction> +<subtraction name="ExtremityRailSupportLower_cut4_plus" > + <posXYZ volume="ExtremityRailSupportLower_cut3_plus" /> + <posXYZ volume="ExtremityRailSupportCut3" X_Y_Z="FEET_ExRSC3xp_ExtremityRailSupportCut3_Xpos;0.;FEET_ExRSC4zp_ExtremityRailSupportCut4_Zpos" rot="90.;0.;0." /> +</subtraction> + + + +<subtraction name="ExtremityRailSupportExtr_cut1_plus" > + <posXYZ volume="ExtremityRailSupportExtr" X_Y_Z="0.;FEET_ExRSEypo_ExtremityRailSupportExtr_Y;FEET_ExRSEzpo_ExtremityRailSupportExtr_Zpos" rot="0.;0.;0." /> + <posXYZ volume="ExtremityRailSupportCut1" X_Y_Z="FEET_ExRSC1xp_ExtremityRailSupportCut1_Xpos;0.;FEET_ExRSC1zp_ExtremityRailSupportCut1_Zpos" rot="90.;0.;90." /> +</subtraction> +<subtraction name="ExtremityRailSupportExtr_cut2_plus" > + <posXYZ volume="ExtremityRailSupportExtr_cut1_plus" /> + <posXYZ volume="ExtremityRailSupportCut2" X_Y_Z="FEET_ExRSC2xp_ExtremityRailSupportCut2_Xpos;0.;FEET_ExRSC1zp_ExtremityRailSupportCut1_Zpos" rot="90.;0.;90." /> +</subtraction> +<subtraction name="ExtremityRailSupportExtr_cut3_plus" > + <posXYZ volume="ExtremityRailSupportExtr_cut2_plus" /> + <posXYZ volume="ExtremityRailSupportCut3" X_Y_Z="FEET_ExRSC3xp_ExtremityRailSupportCut3_Xpos;0.;FEET_ExRSC3zp_ExtremityRailSupportCut3_Zpos" rot="90.;0.;0." /> +</subtraction> +<subtraction name="ExtremityRailSupportExtr_cut4_plus" > + <posXYZ volume="ExtremityRailSupportExtr_cut3_plus" /> + <posXYZ volume="ExtremityRailSupportCut3" X_Y_Z="FEET_ExRSC3xp_ExtremityRailSupportCut3_Xpos;0.;FEET_ExRSC4zp_ExtremityRailSupportCut4_Zpos" rot="90.;0.;0." /> +</subtraction> + +<composition name="ExtremityRailSupport_plus" > + <posXYZ volume="ExtremityRailSupport" /> + <posXYZ volume="ExtremityRailSupportMiddle_cut_plus" /> + <posXYZ volume="ExtremityRailSupportMiddle" X_Y_Z="-FEET_ExRSMxpo_ExtremityRailSupportMiddle_Xpos;FEET_Midyposi_RailSupportMiddle_Y;FEET_ExRSMzpo_ExtremityRailSupportMiddle_Zpos"/> + <posXYZ volume="ExtremityRailSupportLower_cut4_plus" X_Y_Z="0.;FEET_ExRSLypo_ExtremityRailSupportLower_Y;0." /> + <posXYZ volume="ExtremityRailSupportExtr_cut4_plus" X_Y_Z="0.;0.;0." /> +</composition> + +<composition name="ExtremityRailSupport_minus" > + <posXYZ volume="ExtremityRailSupport" /> + <posXYZ volume="ExtremityRailSupportMiddle_cut_minus" /> + <posXYZ volume="ExtremityRailSupportMiddle" X_Y_Z="FEET_ExRSMxpo_ExtremityRailSupportMiddle_Xpos;FEET_Midyposi_RailSupportMiddle_Y;FEET_ExRSMzpo_ExtremityRailSupportMiddle_Zpos"/> + <posXYZ volume="ExtremityRailSupportLower_cut4_plus" X_Y_Z="0.;FEET_ExRSLypo_ExtremityRailSupportLower_Y;0." rot="0.;0.;180." /> + <posXYZ volume="ExtremityRailSupportExtr_cut4_plus" X_Y_Z="0.;FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight;0." rot="0.;0.;180." /> +</composition> + + + + +<var name="FEET_ExRSposx_ExtremityRailSupport_X" value="FEET_ExMPlaxf_ExtremityMainPlate_XF-FEET_Xwidth/2."/> +<var name="FEET_ExRSposy_ExtremityRailSupport_Y" value="FEET_ExMPlayf_ExtremityMainPlate_YF-FEET_ExRSEyhe_ExtremityRailSupportExtr_Yheight"/> +<var name="FEET_ExRSposz_ExtremityRailSupport_Z" value="-FEET_ExRSzoff_ExtremityRailSupport_Zoffset-(FEET_ExRSVzp1_ExtremityRailSupportVertical1_Zpos+FEET_ExRSVzp2_ExtremityRailSupportVertical2_Zpos)/2."/> + + + +<!-- --> +<!-- Perform Cuts on Main Plate --> +<!-- --> + +<subtraction name="ExtremityFeetMainPlate_inter1" > + <posXYZ volume="ExtremityFeetMainPlate" /> + <posXYZ volume="MainPlateRoundCut" X_Y_Z="FEET_MaPlRCXc_MainPlateRoundCut_XC;FEET_MaPlRCYc_MainPlateRoundCut_YC; 0." /> +</subtraction> + +<subtraction name="ExtremityFeetMainPlate_inter2" > + <posXYZ volume="ExtremityFeetMainPlate_inter1" /> + <posXYZ volume="ExtremityMainPlateRoundCut" X_Y_Z=" FEET_ExMPRCxc_ExtremityMainPlateRoundCut_XC; FEET_ExMPRCyc_ExtremityMainPlateRoundCut_YC; 0." /> +</subtraction> + +<subtraction name="ExtremityFeetMain" > + <posXYZ volume="ExtremityFeetMainPlate_inter2" /> + <posXYZ volume="ExtremityMiniConnPlate" X_Y_Z="FEET_ExMCPxpo_ExtremityMiniConnPlate_X;FEET_ExMCPypo_ExtremityMiniConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_MinCPltz_MiniConnPlate_ThetaZ" /> + +</subtraction> + + + + +<composition name="ExtremityFoot" > + <posXYZ volume="ExtremityFeetMain" X_Y_Z="0.;0.; FEET_ExMPzsep_ExtremityMainPlate_Zsep/2" /> + <posXYZ volume="ExtremityFeetMain" X_Y_Z="0.;0.;-FEET_ExMPzsep_ExtremityMainPlate_Zsep/2" /> + <posXYZ volume="ExtremityMiniConnPlate" X_Y_Z="FEET_ExMCPxpo_ExtremityMiniConnPlate_X;FEET_ExMCPypo_ExtremityMiniConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_MinCPltz_MiniConnPlate_ThetaZ" /> + <posXYZ volume="ExtremitySlantedConnPlate" X_Y_Z="FEET_SlCPxpos_SlantedConnPlate_X;FEET_SlCPypos_SlantedConnPlate_Y+GENV_Eps; 0." rot="0.;0.;FEET_SlaCPltz_SlantedConnPlate_ThetaZ" /> + <posXYZ volume="ExtremityGroundPlate" X_Y_Z="FEET_GrnPxpos_GroundPlate_X;FEET_GrnPypos_GroundPlate_Y; 0." /> + <posXYZ volume="ExtremityVerticalConnPlate" X_Y_Z="FEET_ExVCPlax_ExtremityVerticalConnPlate_X;FEET_ExVCPlay_ExtremityVerticalConnPlate_Y; 0." /> + <posXYZ volume="ExtremityUpperConnPlate" X_Y_Z="FEET_ExUCPxpo_ExtremityUpperConnPlate_X;FEET_ExUCPypo_ExtremityUpperConnPlate_Y; 0." /> +</composition> + +<var name="FEET_ExRSpxap_ExtremityRailSupport_assembled_plus_X" value=" FEET_ExRSposx_ExtremityRailSupport_X + FEET_StdFooXp_StandardFoot_Xpos + FEET_RaSuXo_RailSupport_Xoffset" /> +<var name="FEET_ExRSpxam_ExtremityRailSupport_assembled_minus_X" value="-FEET_ExRSposx_ExtremityRailSupport_X - FEET_StdFooXp_StandardFoot_Xpos - FEET_RaSuXo_RailSupport_Xoffset" /> +<var name="FEET_ExRSpyas_ExtremityRailSupport_assembled_Y" value=" FEET_ExRSposy_ExtremityRailSupport_Y + FEET_StdFooYp_StandardFoot_Ypos " /> + +<var name="FEET_ExtFStYp_ExtremityFootStrut_Ypos" value="FEET_StdFooYp_StandardFoot_Ypos + FEET_ExUCPypo_ExtremityUpperConnPlate_Y" /> + +<composition name="ExtremityFootAssemblyPlus" > + <posXYZ volume="ExtremityFoot" X_Y_Z="-FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos;0." rot="0.;180.;0." > + <sector value="6" /> + </posXYZ> + <posXYZ volume="ExtremityRailSupport_minus" X_Y_Z=" FEET_ExRSpxam_ExtremityRailSupport_assembled_minus_X;FEET_ExRSpyas_ExtremityRailSupport_assembled_Y; -FEET_ExRSposz_ExtremityRailSupport_Z" rot="0.;180.;0." > + <sector value="6" /> + </posXYZ> + <posXYZ volume="ExtremityFoot" X_Y_Z=" FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos;0." > + <sector value="7" /> + </posXYZ> + <posXYZ volume="ExtremityRailSupport_plus" X_Y_Z=" FEET_ExRSpxap_ExtremityRailSupport_assembled_plus_X; FEET_ExRSpyas_ExtremityRailSupport_assembled_Y; -FEET_ExRSposz_ExtremityRailSupport_Z" rot="0.;180.;0." > + <sector value="7" /> + </posXYZ> + <posXYZ volume="FEET_ExtremityStrut" X_Y_Z="0.;FEET_ExtFStYp_ExtremityFootStrut_Ypos;0." > + <sector value="7" /> + </posXYZ> +</composition> + +<composition name="ExtremityFootAssemblyMinus" > + <posXYZ volume="ExtremityFoot" X_Y_Z="-FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos;0." rot="0.;180.;0." > + <sector value="7" /> + </posXYZ> + <posXYZ volume="ExtremityRailSupport_minus" X_Y_Z=" FEET_ExRSpxam_ExtremityRailSupport_assembled_minus_X;FEET_ExRSpyas_ExtremityRailSupport_assembled_Y; -FEET_ExRSposz_ExtremityRailSupport_Z" rot="0.;180.;0." > + <sector value="7" /> + </posXYZ> + <posXYZ volume="ExtremityFoot" X_Y_Z=" FEET_StdFooXp_StandardFoot_Xpos;FEET_StdFooYp_StandardFoot_Ypos;0." > + <sector value="6" /> + </posXYZ> + <posXYZ volume="ExtremityRailSupport_plus" X_Y_Z=" FEET_ExRSpxap_ExtremityRailSupport_assembled_plus_X; FEET_ExRSpyas_ExtremityRailSupport_assembled_Y; -FEET_ExRSposz_ExtremityRailSupport_Z" rot="0.;180.;0." > + <sector value="6" /> + </posXYZ> + <posXYZ volume="FEET_ExtremityStrut" X_Y_Z="0.;FEET_ExtFStYp_ExtremityFootStrut_Ypos;0." > + <sector value="7" /> + </posXYZ> +</composition> + + +<var name="FEET_Gir12zpo" value="(FEET_ZposFee1+FEET_ZposFee2)/2. " /> +<var name="FEET_Gir12ypo" value=" FEET_StdFooYp_StandardFoot_Ypos + FEET_GirdYHei_YHeightGirder" /> +<var name="FEET_Gir23zpo" value="(FEET_ZposFee2+FEET_ZposFee3)/2. " /> +<var name="FEET_Gir34zpo" value="(FEET_ZposFee3+FEET_ZposFee4)/2. " /> +<var name="FEET_GirExzpo" value="FEET_ZposFee5-FEET_ExMPzsep_ExtremityMainPlate_Zsep/2.-FEET_MainPldZ_MainPlateDZ/2." /> +<var name="FEET_GirExxpo" value="FEET_GirdExtXpos_XposGirderEx"/> + + +<composition name="Feet" > + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.; FEET_ZposFee1" > + <ring value="0" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.; FEET_ZposFee2" > + <ring value="1" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.;-FEET_ZposFee2" > + <ring value="-1" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.; FEET_ZposFee3" > + <ring value="2" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.;-FEET_ZposFee3" > + <ring value="-2" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.; FEET_ZposFee4" > + <ring value="3" /> + </posXYZ> + <posXYZ volume="StandardFootAssembly" X_Y_Z=" 0.;0.;-FEET_ZposFee4" > + <ring value="-3" /> + </posXYZ> + <posXYZ volume="ExtremityFootAssemblyPlus" X_Y_Z=" 0.;0.; FEET_ZposFee5" rot="0.; 0.;0." > + <ring value="4" /> + </posXYZ> + <posXYZ volume="ExtremityFootAssemblyMinus" X_Y_Z=" 0.;0.;-FEET_ZposFee5" rot="0.;180.;0." > + <ring value="-4" /> + </posXYZ> + <posXYZ volume="Girder12" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir12zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="1" /> + </posXYZ> + <posXYZ volume="Girder12" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir12zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="1" /> + </posXYZ> + <posXYZ volume="Girder12" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir12zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="-1" /> + </posXYZ> + <posXYZ volume="Girder12" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir12zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="-1" /> + </posXYZ> + <posXYZ volume="Girder23" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir23zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="2" /> + </posXYZ> + <posXYZ volume="Girder23" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir23zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="2" /> + </posXYZ> + <posXYZ volume="Girder23" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir23zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="-2" /> + </posXYZ> + <posXYZ volume="Girder23" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir23zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="-2" /> + </posXYZ> + <posXYZ volume="Girder34" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir34zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="3" /> + </posXYZ> + <posXYZ volume="Girder34" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;FEET_Gir34zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="3" /> + </posXYZ> + <posXYZ volume="Girder34" X_Y_Z=" FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir34zpo" rot="0.;-90.;0." > + <sector value="7" /> + <ring value="-3" /> + </posXYZ> + <posXYZ volume="Girder34" X_Y_Z="-FEET_GirdXpos_XposGirder;FEET_Gir12ypo;-FEET_Gir34zpo" rot="0.;-90.;0." > + <sector value="6" /> + <ring value="-3" /> + </posXYZ> + <posXYZ volume="GirderExtremity" X_Y_Z=" FEET_GirdExtXpos_XposGirderEx; -FEET_GirdExtZpos_ZposGirderEx; FEET_GirExzpo" rot="0.;180.;0." > + </posXYZ> + <posXYZ volume="GirderExtremity" X_Y_Z=" -FEET_GirdExtXpos_XposGirderEx; -FEET_GirdExtZpos_ZposGirderEx; FEET_GirExzpo" rot="0.;180.;0." > + </posXYZ> + <posXYZ volume="GirderExtremity" X_Y_Z=" FEET_GirdExtXpos_XposGirderEx; -FEET_GirdExtZpos_ZposGirderEx; -FEET_GirExzpo" rot="0.;0.;0." > + </posXYZ> + <posXYZ volume="GirderExtremity" X_Y_Z=" -FEET_GirdExtXpos_XposGirderEx; -FEET_GirdExtZpos_ZposGirderEx; -FEET_GirExzpo" rot="0.;0.;0." > + </posXYZ> +</composition> + +</section> + +<section name = "ATLAS Rail" + version = "7.0" + date = "10 December 2003" + author = "Jochen Meyer, Laurent Chevalier, Daniel Pomarede" + top_volume = "RailAssembly"> + + + +<!-- Basic parameters --> + +<!-- Rails Main section --> +<!-- BEGIN confirmation with atlhbrb_0001-vAH (if no other comment) --> +<var name="RAIL_CeRzleng_CentralRail_Zlength" value="6850." /> +<var name="RAIL_ExRzleng_ExtremityRail_Zlength" value="9784." /> +<var name="RAIL_CeRwidt1_CentralRail_Width1" value=" 450." /> +<var name="RAIL_CeRwidt2_CentralRail_Width2" value=" 120." /> +<var name="RAIL_CeRwid3o_CentralRail_Width3outer" value=" 380." /> +<var name="RAIL_CeRwid3i_CentralRail_Width3inner" value=" 350." /> + +<var name="RAIL_CeRthic1_CentralRail_Thick1" value=" 100." /> +<var name="RAIL_CeRthic2_CentralRail_Thick2" value=" 200." /> + +<!-- Reinforcement Plates --> + +<var name="RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength" value=" 50." /> +<var name="RAIL_CeRRPEzl_CentralRailReinforcementPlate_extremity_Zlength" value=" 40." /> +<var name="RAIL_CeRRPIx1_CentralRailReinforcementPlateInner_Xdist1" value="260." /> +<var name="RAIL_CeRRPOx1_CentralRailReinforcementPlateOuter_Xdist1" value="290." /> + +<!-- CentralRailReinforcementPlate_std_Zpos --> +<array name="RAIL_CeRRPSzp" values="490.;1090.;1687.5;2285.;2885.;3400.;3915.;4515.;5112.5;5710.;6310. " /> +<!-- ExtremityRailReinforcementPlate_std_Zpos --> +<array name="RAIL_ExRRPSzp" values="540;1085;1627.5;2170;2715;3230;3745;4315;4895;5465;5980;6495;7017.5;7540;8062.5;8720;9375" /> + +<!-- Global position --> +<var name="RAIL_Xpos" value=" 2985." /> <!-- confirmed atcnh___0005-vAG --> +<var name="RAIL_Ypos_above" value="-4390." /> <!-- confirmed atcnh___0005-vAG --> + +<!-- Derived variables --> + +<var name="RAIL_totHeight" value="RAIL_CeRthic2_CentralRail_Thick2+2.*RAIL_CeRthic1_CentralRail_Thick1" /> + + + +<!-- Feet Modelization --> + +<!-- Rail Main section --> + +<var name="RAIL_CeRy" value="0." /> + +<var name="RAIL_CeRxb" value="RAIL_CeRwidt1_CentralRail_Width1/2." /> +<var name="RAIL_CeRyb" value="0." /> + +<var name="RAIL_CeRxc" value="RAIL_CeRxb" /> +<var name="RAIL_CeRyc" value="RAIL_CeRthic1_CentralRail_Thick1" /> + +<var name="RAIL_CeRxd" value="RAIL_CeRwidt2_CentralRail_Width2/2." /> +<var name="RAIL_CeRyd" value="RAIL_CeRyc" /> + +<var name="RAIL_CeRxe" value="RAIL_CeRxd" /> +<var name="RAIL_CeRye" value="RAIL_CeRyd+RAIL_CeRthic2_CentralRail_Thick2" /> + +<var name="RAIL_CeRxf" value="RAIL_CeRwid3i_CentralRail_Width3inner" /> +<var name="RAIL_CeRyf" value="RAIL_CeRye" /> + +<var name="RAIL_CeRxg" value="RAIL_CeRxf" /> +<var name="RAIL_CeRyg" value="RAIL_CeRyf+RAIL_CeRthic1_CentralRail_Thick1" /> + +<var name="RAIL_CeRxh" value="-RAIL_CeRwid3o_CentralRail_Width3outer" /> +<var name="RAIL_CeRyh" value="RAIL_CeRyg" /> + +<var name="RAIL_CeRxi" value="RAIL_CeRxh" /> +<var name="RAIL_CeRyi" value="RAIL_CeRye" /> + +<var name="RAIL_CeRxj" value="-RAIL_CeRwidt2_CentralRail_Width2/2." /> +<var name="RAIL_CeRyj" value="RAIL_CeRyi" /> + +<var name="RAIL_CeRxk" value="RAIL_CeRxj" /> +<var name="RAIL_CeRyk" value="RAIL_CeRyc" /> + +<var name="RAIL_CeRxl" value="-RAIL_CeRwidt1_CentralRail_Width1/2." /> +<var name="RAIL_CeRyl" value="RAIL_CeRyk" /> + +<var name="RAIL_CeRxm" value="RAIL_CeRxl" /> +<var name="RAIL_CeRym" value="RAIL_CeRy " /> + +<!-- gvxy name="CentralRail" material="Iron" dZ="RAIL_CeRzleng_CentralRail_Zlength" > + <gvxy_point X_Y="-RAIL_CeRxb;RAIL_CeRyb"/> + <gvxy_point X_Y="-RAIL_CeRxc;RAIL_CeRyc"/> + <gvxy_point X_Y="-RAIL_CeRxd;RAIL_CeRyd"/> + <gvxy_point X_Y="-RAIL_CeRxe;RAIL_CeRye"/> + <gvxy_point X_Y="-RAIL_CeRxf;RAIL_CeRyf"/> + <gvxy_point X_Y="-RAIL_CeRxg;RAIL_CeRyg"/> + <gvxy_point X_Y="-RAIL_CeRxh;RAIL_CeRyh"/> + <gvxy_point X_Y="-RAIL_CeRxi;RAIL_CeRyi"/> + <gvxy_point X_Y="-RAIL_CeRxj;RAIL_CeRyj"/> + <gvxy_point X_Y="-RAIL_CeRxk;RAIL_CeRyk"/> + <gvxy_point X_Y="-RAIL_CeRxl;RAIL_CeRyl"/> + <gvxy_point X_Y="-RAIL_CeRxm;RAIL_CeRym"/> +</gvxy --> + +<var name="Rail_temp1" value="RAIL_CeRyg/2.-(RAIL_CeRyg-RAIL_CeRyf)/2." /> +<var name="Rail_temp2" value="-RAIL_CeRyg/2.+(RAIL_CeRyc-RAIL_CeRyb)/2." /> +<var name="Rail_temp3" value="(RAIL_CeRxg+RAIL_CeRxh)/2." /> + +<box name="ExtremityRail_a" material="Iron" X_Y_Z="RAIL_CeRxd*2.;RAIL_CeRyg;RAIL_ExRzleng_ExtremityRail_Zlength - GENV_Eps" /> +<box name="ExtremityRail_b" material="Iron" X_Y_Z="(RAIL_CeRxg-RAIL_CeRxh);(RAIL_CeRyg-RAIL_CeRyf);RAIL_ExRzleng_ExtremityRail_Zlength" /> +<box name="ExtremityRail_c" material="Iron" X_Y_Z="-2.*RAIL_CeRxl;(RAIL_CeRyc-RAIL_CeRyb);RAIL_ExRzleng_ExtremityRail_Zlength" /> +<union name="ExtremityRail_d" > + <posXYZ volume="ExtremityRail_a" /> + <posXYZ volume="ExtremityRail_b" X_Y_Z="-Rail_temp3;Rail_temp1;0"/> + <posXYZ volume="ExtremityRail_c" X_Y_Z="0.;Rail_temp2;0"/> +</union> + +<composition name="ExtremityRail_plus_new" > + <posXYZ volume="ExtremityRail_d" X_Y_Z="0.;RAIL_CeRyg/2.;0." /> +</composition> + +<box name="CentralRail_a" material="Iron" X_Y_Z="RAIL_CeRxd*2.;RAIL_CeRyg;RAIL_CeRzleng_CentralRail_Zlength - GENV_Eps" /> +<box name="CentralRail_b" material="Iron" X_Y_Z="(RAIL_CeRxg-RAIL_CeRxh);(RAIL_CeRyg-RAIL_CeRyf);RAIL_CeRzleng_CentralRail_Zlength" /> +<box name="CentralRail_c" material="Iron" X_Y_Z="-2.*RAIL_CeRxl;(RAIL_CeRyc-RAIL_CeRyb);RAIL_CeRzleng_CentralRail_Zlength" /> +<union name="CentralRail_d" > + <posXYZ volume="CentralRail_a" /> + <posXYZ volume="CentralRail_b" X_Y_Z="-Rail_temp3;Rail_temp1;0"/> + <posXYZ volume="CentralRail_c" X_Y_Z="0.;Rail_temp2;0"/> +</union> + +<composition name="CentralRail_new" > + <posXYZ volume="CentralRail_d" X_Y_Z="0.;RAIL_CeRyg/2.;0." /> +</composition> + +<!--gvxy name="ExtremityRail_plus" material="Iron" dZ="RAIL_ExRzleng_ExtremityRail_Zlength" > + <gvxy_point X_Y=" -RAIL_CeRxb ; RAIL_CeRyb " /> + <gvxy_point X_Y=" -RAIL_CeRxc ; RAIL_CeRyc " /> + <gvxy_point X_Y=" -RAIL_CeRxd ; RAIL_CeRyd " /> + <gvxy_point X_Y=" -RAIL_CeRxe ; RAIL_CeRye " /> + <gvxy_point X_Y=" -RAIL_CeRxf ; RAIL_CeRyf " /> + <gvxy_point X_Y=" -RAIL_CeRxg ; RAIL_CeRyg " /> + <gvxy_point X_Y=" -RAIL_CeRxh ; RAIL_CeRyh " /> + <gvxy_point X_Y=" -RAIL_CeRxi ; RAIL_CeRyi " /> + <gvxy_point X_Y=" -RAIL_CeRxj ; RAIL_CeRyj " /> + <gvxy_point X_Y=" -RAIL_CeRxk ; RAIL_CeRyk " /> + <gvxy_point X_Y=" -RAIL_CeRxl ; RAIL_CeRyl " /> + <gvxy_point X_Y=" -RAIL_CeRxm ; RAIL_CeRym " /> +</gvxy --> + +<composition name="ExtremityRail_minus" > + <posXYZ volume="ExtremityRail_plus_new" rot=" 0.; 180.; 0. " /> +</composition> + + + +<!-- Reinforcement Plates --> + +<var name="RAIL_CeRRPIy2_CentralRailReinforcementPlateInner_Ydist2" value="(RAIL_CeRRPIx1_CentralRailReinforcementPlateInner_Xdist1 + RAIL_CeRwidt2_CentralRail_Width2/2. - RAIL_CeRxc) * GENV_Ta55" /> + +<var name="RAIL_CeRRPIxa" value="RAIL_CeRxd" /> +<var name="RAIL_CeRRPIya" value="RAIL_CeRyd" /> +<var name="RAIL_CeRRPIxb" value="RAIL_CeRxc" /> +<var name="RAIL_CeRRPIyb" value="RAIL_CeRyc" /> +<var name="RAIL_CeRRPIxc" value="RAIL_CeRxd + RAIL_CeRRPIx1_CentralRailReinforcementPlateInner_Xdist1" /> +<var name="RAIL_CeRRPIyc" value="RAIL_CeRyc + RAIL_CeRRPIy2_CentralRailReinforcementPlateInner_Ydist2" /> +<var name="RAIL_CeRRPIxd" value="RAIL_CeRRPIxc" /> +<var name="RAIL_CeRRPIyd" value="RAIL_CeRye" /> +<var name="RAIL_CeRRPIxe" value="RAIL_CeRRPIxa" /> +<var name="RAIL_CeRRPIye" value="RAIL_CeRRPIyd" /> + +<gvxy name="CentralRailReinforcementPlateInner_extremity" material="Iron" dZ="RAIL_CeRRPEzl_CentralRailReinforcementPlate_extremity_Zlength" > + <gvxy_point X_Y=" -RAIL_CeRRPIxa ; RAIL_CeRRPIya " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxb ; RAIL_CeRRPIyb " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxc ; RAIL_CeRRPIyc " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxd ; RAIL_CeRRPIyd " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxe ; RAIL_CeRRPIye " /> +</gvxy> + + +<var name="RAIL_CeRRPOxa" value="-RAIL_CeRxd" /> +<var name="RAIL_CeRRPOya" value=" RAIL_CeRyd" /> +<var name="RAIL_CeRRPOxb" value="-RAIL_CeRxc" /> +<var name="RAIL_CeRRPOyb" value=" RAIL_CeRyc" /> +<var name="RAIL_CeRRPOxc" value="-RAIL_CeRxd - RAIL_CeRRPOx1_CentralRailReinforcementPlateOuter_Xdist1" /> +<var name="RAIL_CeRRPOyc" value=" RAIL_CeRyc + RAIL_CeRRPIy2_CentralRailReinforcementPlateInner_Ydist2" /> +<var name="RAIL_CeRRPOxd" value=" RAIL_CeRRPOxc" /> +<var name="RAIL_CeRRPOyd" value=" RAIL_CeRye" /> +<var name="RAIL_CeRRPOxe" value=" RAIL_CeRRPOxa" /> +<var name="RAIL_CeRRPOye" value=" RAIL_CeRRPOyd" /> + +<gvxy name="CentralRailReinforcementPlateOuter_extremity" material="Iron" dZ="RAIL_CeRRPEzl_CentralRailReinforcementPlate_extremity_Zlength" > + <gvxy_point X_Y=" RAIL_CeRRPOxa ; RAIL_CeRRPOya " /> + <gvxy_point X_Y=" RAIL_CeRRPOxb ; RAIL_CeRRPOyb " /> + <gvxy_point X_Y=" RAIL_CeRRPOxc ; RAIL_CeRRPOyc " /> + <gvxy_point X_Y=" RAIL_CeRRPOxd ; RAIL_CeRRPOyd " /> + <gvxy_point X_Y=" RAIL_CeRRPOxe ; RAIL_CeRRPOye " /> +</gvxy> + +<var name="RAIL_CeRRPe1z_CentralRailReinforcementPlate_extremity1_Zpos" value="-RAIL_CeRzleng_CentralRail_Zlength/2. + RAIL_CeRRPEzl_CentralRailReinforcementPlate_extremity_Zlength/2. " /> +<var name="RAIL_CeRRPe2z_CentralRailReinforcementPlate_extremity2_Zpos" value="-RAIL_CeRRPe1z_CentralRailReinforcementPlate_extremity1_Zpos" /> +<var name="RAIL_ExRRPe1z_ExtremityRailReinforcementPlate_extremity1_Zpos" value="-RAIL_ExRzleng_ExtremityRail_Zlength/2. + RAIL_CeRRPEzl_CentralRailReinforcementPlate_extremity_Zlength/2. " /> +<var name="RAIL_ExRRPe2z_ExtremityRailReinforcementPlate_extremity2_Zpos" value="-RAIL_ExRRPe1z_ExtremityRailReinforcementPlate_extremity1_Zpos" /> + +<gvxy name="CentralRailReinforcementPlateInner_std" material="Iron" dZ="RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength" > + <gvxy_point X_Y=" -RAIL_CeRRPIxa ; RAIL_CeRRPIya " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxb ; RAIL_CeRRPIyb " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxc ; RAIL_CeRRPIyc " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxd ; RAIL_CeRRPIyd " /> + <gvxy_point X_Y=" -RAIL_CeRRPIxe ; RAIL_CeRRPIye " /> +</gvxy> +<gvxy name="CentralRailReinforcementPlateOuter_std" material="Iron" dZ="RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength" > + <gvxy_point X_Y=" RAIL_CeRRPOxa ; RAIL_CeRRPOya " /> + <gvxy_point X_Y=" RAIL_CeRRPOxb ; RAIL_CeRRPOyb " /> + <gvxy_point X_Y=" RAIL_CeRRPOxc ; RAIL_CeRRPOyc " /> + <gvxy_point X_Y=" RAIL_CeRRPOxd ; RAIL_CeRRPOyd " /> + <gvxy_point X_Y=" RAIL_CeRRPOxe ; RAIL_CeRRPOye " /> +</gvxy> + + + +<composition name="CentralRailReinforcementPlate_extremity_minus" > + <posXYZ volume="CentralRailReinforcementPlateInner_extremity" rot="0.;180.;0." /> + <posXYZ volume="CentralRailReinforcementPlateOuter_extremity" /> +</composition> +<composition name="CentralRailReinforcementPlate_extremity_plus" > + <posXYZ volume="CentralRailReinforcementPlateInner_extremity" /> + <posXYZ volume="CentralRailReinforcementPlateOuter_extremity" rot="0.;180.;0." /> +</composition> + +<composition name="CentralRailReinforcementPlate_std_minus" > + <posXYZ volume="CentralRailReinforcementPlateInner_std" rot="0.;180.;0." /> + <posXYZ volume="CentralRailReinforcementPlateOuter_std" /> +</composition> +<composition name="CentralRailReinforcementPlate_std_plus" > + <posXYZ volume="CentralRailReinforcementPlateInner_std" /> + <posXYZ volume="CentralRailReinforcementPlateOuter_std" rot="0.;180.;0." /> +</composition> + + + +<!-- Feet Assembly --> + +<composition name="CentralRailAssembly" > + <!-- posXYZ volume="CentralRail" rot="0.;180.;0." /--> + <posXYZ volume="CentralRail_new" rot="0.;180.;0." /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_minus" X_Y_Z=" 0.;0.; RAIL_CeRRPe1z_CentralRailReinforcementPlate_extremity1_Zpos" /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_minus" X_Y_Z=" 0.;0.; RAIL_CeRRPe2z_CentralRailReinforcementPlate_extremity2_Zpos" /> + <foreach index="I" begin="0" loops="11" > + <posXYZ volume="CentralRailReinforcementPlate_std_minus" X_Y_Z=" 0.;0.;-RAIL_CeRzleng_CentralRail_Zlength/2. + RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength/2. + RAIL_CeRRPSzp[I]" /> + </foreach> +</composition> + + +<var name="RAIL_Ypos" value="RAIL_Ypos_above - RAIL_totHeight" /> <!-- ATTENTION THIS VARIABLE IS ALSO USED IN SHIELDING AND HFTRUCK SECTIONS --> +<var name="RAIL_ExtrZpos" value="RAIL_CeRzleng_CentralRail_Zlength/2.+RAIL_ExRzleng_ExtremityRail_Zlength/2." /> + + +<composition name="ExtremityRailAssembly" > + <posXYZ volume="ExtremityRail_minus" X_Y_Z=" -RAIL_Xpos;0.; 0." /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_minus" X_Y_Z="-RAIL_Xpos;0.; RAIL_ExRRPe1z_ExtremityRailReinforcementPlate_extremity1_Zpos" /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_minus" X_Y_Z="-RAIL_Xpos;0.; RAIL_ExRRPe2z_ExtremityRailReinforcementPlate_extremity2_Zpos" /> + + <foreach index="I" begin="0" loops="17" > + <posXYZ volume="CentralRailReinforcementPlate_std_minus" X_Y_Z=" -RAIL_Xpos;0.;-RAIL_ExRzleng_ExtremityRail_Zlength/2. - RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength/2. + RAIL_ExRRPSzp[I]" /> + </foreach> + + <!--posXYZ volume="ExtremityRail_plus" X_Y_Z=" RAIL_Xpos;0.; 0." /--> + <posXYZ volume="ExtremityRail_plus_new" X_Y_Z=" RAIL_Xpos;0.; 0." /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_plus" X_Y_Z=" RAIL_Xpos;0.; RAIL_ExRRPe1z_ExtremityRailReinforcementPlate_extremity1_Zpos" /> + <posXYZ volume="CentralRailReinforcementPlate_extremity_plus" X_Y_Z=" RAIL_Xpos;0.; RAIL_ExRRPe2z_ExtremityRailReinforcementPlate_extremity2_Zpos" /> + + <foreach index="I" begin="0" loops="17" > + <posXYZ volume="CentralRailReinforcementPlate_std_plus" X_Y_Z=" RAIL_Xpos;0.;-RAIL_ExRzleng_ExtremityRail_Zlength/2. - RAIL_CeRRPSzl_CentralRailReinforcementPlate_std_Zlength/2. + RAIL_ExRRPSzp[I]" /> + </foreach> +</composition> + +<composition name="RailAssembly" > + <posXYZ volume="CentralRailAssembly" X_Y_Z="-RAIL_Xpos;RAIL_Ypos; 0." rot="0.; 0.;0." /> + <posXYZ volume="CentralRailAssembly" X_Y_Z=" RAIL_Xpos;RAIL_Ypos; 0." rot="0.;180.;0." /> + <posXYZ volume="ExtremityRailAssembly" X_Y_Z=" 0.;RAIL_Ypos; RAIL_ExtrZpos" rot="0.; 0.;0." /> + <posXYZ volume="ExtremityRailAssembly" X_Y_Z=" 0.;RAIL_Ypos;-RAIL_ExtrZpos" rot="0.;180.;0." /> +</composition> + +</section> + + + + + +<section name = "ATLAS Shielding" + version = "8.0" + date = "10 January 2011" + author = "Daniel Pomarede, reviewed by Jochen" + top_volume = "useless"> + + +<!-- name = A Frame Welded Assembly section name = "Shielding" --> + +<!-- ************************************************************** + ************************************************************** + *** **** + *** ATLAS Shields **** + *** **** + ************************************************************** + ************************************************************** --> + + + +<!-- JF Shielding --> + +<!-- "A" Frame Welded Assembly --> + + + +<!-- Useful variables --> + +<var name="JFSH_XYZref" value=" 0." /> <!-- NO CONFIRMATION NEEDED --> +<var name="JFSH_rot180" value=" 180." /> <!-- NO CONFIRMATION NEEDED --> + +<!-- Primary variables --> + +<!-- BEGIN confirmation with atljf___0087-vAC (if no other comment) --> +<var name="JFSH_AFBBleng_AFrame_BottomBar_length" value="5498." /> +<var name="JFSH_AFBheigh_AFrame_Bar_height" value=" 250." /> +<var name="JFSH_AFrwidth_AFrame_width" value=" 250." /> +<var name="JFSH_AFBthic1_AFrame_Bar_thickness1" value=" 9." /> +<var name="JFSH_AFBthic2_AFrame_Bar_thickness2" value=" 14." /> +<var name="JFSH_AFLangle_AFrame_Leg_angle" value=" 42." /> + +<var name="JFSH_AFSlengt_AFrame_Spacer_length" value=" 140." /> +<var name="JFSH_AFSheigh_AFrame_Spacer_height" value=" 290." /> + +<var name="JFSH_AFWEBBx1_AFrame_Web_element_BottomBar_X1" value=" 0." /> <!-- NO CONFIRMATION NEEDED --> +<var name="JFSH_AFWEBBx2_AFrame_Web_element_BottomBar_X2" value="1306." /> <!-- confirmed atljf___0028-vAD --> +<var name="JFSH_AFWEleng_AFrame_Web_element_length" value=" 30." /> +<var name="JFSH_AFWEBLx1_AFrame_Web_element_Leg_DX1" value="1090.+8." /> <!-- temporarily sum to avoid overlap, second Flange needs to be introduced, confirmed atljf___0028-vAD--> +<var name="JFSH_AFWEBLx2_AFrame_Web_element_Leg_DX2" value=" 965." /> <!-- confirmed atljf___0028-vAD --> + +<var name="JFSH_AFFthick_AFrame_Flange_thickness" value=" 15." /> +<var name="JFSH_AFFlengt_AFrame_Flange_length" value=" 935." /> + +<var name="JFSH_AFTPleng_AFrame_TopPlate_length" value=" 300." /> +<var name="JFSH_AFTPheig_AFrame_TopPlate_height" value=" 50." /> + +<var name="JFSH_AFWheigh_AFrame_Wedge_height" value=" 149.2"/> +<var name="JFSH_AFWexten_AFrame_Wedge_extension" value=" 200." /> +<var name="JFSH_AFWthick_AFrame_Wedge_thickness" value=" 50." /> +<var name="JFSH_AFWzoffs_AFrame_Wedge_zoffset" value=" 20." /> <!-- confirmed atljf___0028-vAD --> + +<var name="JFSH_AFFEElen_AFrame_Feet_length" value=" 830."/> +<var name="JFSH_AFFEEthi_AFrame_Feet_thickness" value=" 50."/> +<var name="JFSH_AFFEEsle_AFrame_Feet_shortlength" value=" 100. - 20."/> <!-- reduced value to avoid clash with rail --> +<var name="JFSH_AFFEEhei_AFrame_Feet_height" value=" 225."/> +<var name="JFSH_AFFEEext_AFrame_Feet_X_extension" value=" 6830."/> <!-- confirmed atljf___0028-vAD --> + +<var name="JFSH_AFtothei_AFrame_Total_height" value=" 2740."/> <!-- confirmed atljf___0028-vAD --> +<var name="JFSH_AFECTcle_Clearance_ECT_AFrame" value=" 25."/> <!-- confirmed atljf___0010-vAC --> + +<var name="JFSH_ECTnomiz_ECT_Nominal_zpos" value="12914."/> <!-- confirmed atljf___0010-vAC --> +<!-- END confirmation with atljf___0087-vAC --> + +<!-- Derived variables TEMPORAY already declare in RAIL Section laurent 05-05-10 ********* --> +<var name="RAIL_CeRthic1_CentralRail_Thick1JFSH" value=" 100." /> <!-- confirmed atlhbrb_0001-vAH --> +<var name="RAIL_CeRthic2_CentralRail_Thick2JFSH" value=" 200." /> <!-- confirmed atlhbrb_0001-vAH --> +<var name="RAIL_Ypos_aboveJFSH" value="-4390." /> <!-- confirmed atcnh___0005-vAG --> +<var name="RAIL_totHeightJFSH" value="RAIL_CeRthic2_CentralRail_Thick2JFSH+2.*RAIL_CeRthic1_CentralRail_Thick1JFSH" /> +<var name="RAIL_YposJFSH" value="RAIL_Ypos_aboveJFSH - RAIL_totHeightJFSH" /> +<var name="JFSH_AFyposit_AFrame_Ypos" value="RAIL_YposJFSH+RAIL_totHeightJFSH+JFSH_AFFEEthi_AFrame_Feet_thickness" /> +<var name="JFSH_AFzposit_AFrame_Zpos" value="JFSH_XYZref + JFSH_AFECTcle_Clearance_ECT_AFrame +JFSH_AFrwidth_AFrame_width/2." /> +<var name="JFSH_AFASposy_AFrame_Assembly_Y" value=" JFSH_AFyposit_AFrame_Ypos" /> +<var name="JFSH_AFASposz_AFrame_Assembly_Z" value=" JFSH_AFzposit_AFrame_Zpos" /> +<!-- Derived variables TEMPORAY already declare in RAIL Section ********* --> + + +<!-- "A" Frame Welded Assembly Bottom Bar Lower Horizontal Plate --> +<var name="JFSH_AFBLHPxa" value="JFSH_AFBBleng_AFrame_BottomBar_length/2." /> +<var name="JFSH_AFBLHPya" value="JFSH_XYZref" /> +<var name="JFSH_AFBLHPyb" value="JFSH_AFBLHPya+JFSH_AFBthic2_AFrame_Bar_thickness2" /> + +<var name="JFSH_AFBLHPxb" value="JFSH_AFBLHPxa - (JFSH_AFBLHPyb-JFSH_AFBLHPya)/tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<trd name="JFSH_AFrame_BottomBar_LowerHorizontalPlate" material="ShieldSteel" Xmp_Ymp_Z="2.*JFSH_AFBLHPxb; 2.*JFSH_AFBLHPxa; JFSH_AFrwidth_AFrame_width; JFSH_AFrwidth_AFrame_width; JFSH_AFBLHPyb-JFSH_AFBLHPya" /> + + +<!-- "A" Frame Welded Assembly Bottom Bar Vertical Plate --> + +<var name="JFSH_AFBBVPxa" value="JFSH_AFBLHPxb" /> +<var name="JFSH_AFBBVPya" value="JFSH_AFBthic2_AFrame_Bar_thickness2" /> +<var name="JFSH_AFBBVPyb" value="JFSH_AFBheigh_AFrame_Bar_height - JFSH_AFBthic2_AFrame_Bar_thickness2" /> + +<var name="JFSH_AFBBVPxb" value="JFSH_AFBBVPxa - (JFSH_AFBBVPyb-JFSH_AFBBVPya)/tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<trd name="JFSH_AFrame_BottomBar_VerticalPlate" material="ShieldSteel" Xmp_Ymp_Z="2.*JFSH_AFBBVPxb; 2.*JFSH_AFBBVPxa; JFSH_AFBthic1_AFrame_Bar_thickness1; JFSH_AFBthic1_AFrame_Bar_thickness1; JFSH_AFBBVPyb-JFSH_AFBBVPya" /> + +<!-- "A" Frame Welded Assembly Bottom Bar Upper Horizontal Plate --> + +<var name="JFSH_AFBUHPxa" value="JFSH_AFBBVPxb" /> +<var name="JFSH_AFBUHPya" value="JFSH_AFBBVPyb" /> +<var name="JFSH_AFBUHPyb" value="JFSH_AFBUHPya + JFSH_AFBthic2_AFrame_Bar_thickness2" /> + +<var name="JFSH_AFBUHPxb" value="JFSH_AFBUHPxa - (JFSH_AFBUHPyb-JFSH_AFBUHPya)/tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<trd name="JFSH_AFrame_BottomBar_UpperHorizontalPlate" material="ShieldSteel" Xmp_Ymp_Z="2.*JFSH_AFBUHPxb; 2.*JFSH_AFBUHPxa; JFSH_AFrwidth_AFrame_width; JFSH_AFrwidth_AFrame_width; JFSH_AFBUHPyb-JFSH_AFBUHPya" /> + + +<!-- "A" Frame Welded Assembly Leg Lower Horizontal Plate --> + +<var name="JFSH_AFLLHPxa" value="JFSH_AFBLHPxa" /> +<var name="JFSH_AFLLHPya" value="JFSH_AFBLHPya" /> + +<var name="JFSH_AFLLHPxb" value="JFSH_AFSlengt_AFrame_Spacer_length/2." /> +<var name="JFSH_AFLLHPyb" value="(JFSH_AFLLHPxa-JFSH_AFLLHPxb)*tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180) " /> + +<var name="JFSH_AFLLHPxc" value="JFSH_AFLLHPxb" /> +<var name="JFSH_AFLLHPyc" value="JFSH_AFLLHPyb + JFSH_AFBthic2_AFrame_Bar_thickness2/cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<var name="JFSH_AFLLHPxd" value="JFSH_AFLLHPxa + JFSH_AFBthic2_AFrame_Bar_thickness2/sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFLLHPyd" value="JFSH_AFBLHPya" /> + +<box name="JFSH_AFrame_Leg_LowerHorizontalPlate_basic" material="ShieldSteel" X_Y_Z="JFSH_AFBthic2_AFrame_Bar_thickness2; JFSH_AFLLHPyc/sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180); JFSH_AFrwidth_AFrame_width" /> +<box name="JFSH_AFrame_Leg_LowerHorizontalPlate_cut1" material="ShieldSteel" X_Y_Z="2.*JFSH_AFLLHPxb; JFSH_AFrwidth_AFrame_width; 2.*JFSH_AFrwidth_AFrame_width" /> +<box name="JFSH_AFrame_Leg_LowerHorizontalPlate_cut2" material="ShieldSteel" X_Y_Z="JFSH_AFrwidth_AFrame_width; JFSH_AFrwidth_AFrame_width; 2.*JFSH_AFrwidth_AFrame_width" /> + +<subtraction name="JFSH_AFrame_Leg_LowerHorizontalPlate"> + <posXYZ volume="JFSH_AFrame_Leg_LowerHorizontalPlate_basic" X_Y_Z="(JFSH_AFLLHPxd+JFSH_AFLLHPxb)/2.-JFSH_AFBthic2_AFrame_Bar_thickness2*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2.; JFSH_AFLLHPyc/2.-JFSH_AFBthic2_AFrame_Bar_thickness2*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2.; 0. " rot=" 0.; 0.; 90-JFSH_AFLangle_AFrame_Leg_angle"/> + <posXYZ volume="JFSH_AFrame_Leg_LowerHorizontalPlate_cut1" X_Y_Z="0.; JFSH_AFLLHPyc; 0."/> + <posXYZ volume="JFSH_AFrame_Leg_LowerHorizontalPlate_cut2" X_Y_Z="JFSH_AFLLHPxd; -JFSH_AFrwidth_AFrame_width/2.; 0."/> +</subtraction> + +<!-- "A" Frame Welded Assembly Leg Vertical Plate --> + +<var name="JFSH_AFLVPxa" value="JFSH_AFLLHPxd" /> +<var name="JFSH_AFLVPya" value="JFSH_AFLLHPyd" /> + +<var name="JFSH_AFLVPxb" value="JFSH_AFLLHPxc" /> +<var name="JFSH_AFLVPyb" value="JFSH_AFLLHPyc" /> + +<var name="JFSH_AFLVPxc" value="JFSH_AFLVPxb" /> +<var name="JFSH_AFLVPyc" value="JFSH_AFtothei_AFrame_Total_height - JFSH_AFTPheig_AFrame_TopPlate_height" /> + +<var name="JFSH_AFLVPxe" value="JFSH_AFLVPxa + (JFSH_AFBheigh_AFrame_Bar_height-2*JFSH_AFBthic2_AFrame_Bar_thickness2)/sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFLVPye" value="JFSH_AFBLHPya" /> + +<var name="JFSH_AFLVPyd" value="JFSH_AFLVPyc" /> +<var name="JFSH_AFLVPxd" value="JFSH_AFLVPxe - (JFSH_AFLVPyd)/tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<box name="JFSH_AFrame_Leg_VerticalPlate_basic" material="ShieldSteel" X_Y_Z="-(JFSH_AFLVPxa-JFSH_AFLVPxe)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180); (JFSH_AFLVPxe-JFSH_AFLVPxb)/cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180); JFSH_AFBthic1_AFrame_Bar_thickness1" /> +<box name="JFSH_AFrame_Leg_VerticalPlate_cut1" material="ShieldSteel" X_Y_Z="JFSH_AFLVPxa; JFSH_AFLVPxa; JFSH_AFLVPxa"/> +<box name="JFSH_AFrame_Leg_VerticalPlate_cut2" material="ShieldSteel" X_Y_Z="JFSH_AFLVPxa; JFSH_AFLVPxa; JFSH_AFLVPxa"/> +<box name="JFSH_AFrame_Leg_VerticalPlate_cut3" material="ShieldSteel" X_Y_Z="JFSH_AFLVPxa; JFSH_AFLVPxa; JFSH_AFLVPxa"/> + +<subtraction name="JFSH_AFrame_Leg_VerticalPlate"> + <posXYZ volume="JFSH_AFrame_Leg_VerticalPlate_basic" X_Y_Z="(JFSH_AFLVPxe+JFSH_AFLVPxc)/2.+(JFSH_AFLVPxa-JFSH_AFLVPxe)*(1-cos(2.*JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180))/4.; (JFSH_AFLVPxe-JFSH_AFLVPxb)*tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2.+(JFSH_AFLVPxa-JFSH_AFLVPxe)*sin(2.*JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/4.; 0" rot=" 0.; 0.; 90-JFSH_AFLangle_AFrame_Leg_angle"/> + <posXYZ volume="JFSH_AFrame_Leg_VerticalPlate_cut1" X_Y_Z="JFSH_AFLVPxa; -JFSH_AFLVPxa/2.; 0"/> + <posXYZ volume="JFSH_AFrame_Leg_VerticalPlate_cut2" X_Y_Z="-JFSH_AFLVPxa/2.+JFSH_AFLVPxb; JFSH_AFLVPyb; 0"/> + <posXYZ volume="JFSH_AFrame_Leg_VerticalPlate_cut3" X_Y_Z="0.; JFSH_AFLVPyc+JFSH_AFLVPxa/2.; 0"/> +</subtraction> + +<!-- "A" Frame Welded Assembly Leg Upper Horizontal Plate --> + +<var name="JFSH_AFLUHPxa" value="JFSH_AFLVPxe" /> +<var name="JFSH_AFLUHPya" value="JFSH_AFLVPye" /> + +<var name="JFSH_AFLUHPxb" value="JFSH_AFLVPxd" /> +<var name="JFSH_AFLUHPyb" value="JFSH_AFLVPyd" /> + +<var name="JFSH_AFLUHPxc" value="JFSH_AFLUHPxb + JFSH_AFBthic2_AFrame_Bar_thickness2/sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFLUHPyc" value="JFSH_AFLVPyc" /> + +<var name="JFSH_AFLUHPxd" value="JFSH_AFLUHPxa + JFSH_AFBthic2_AFrame_Bar_thickness2/sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFLUHPyd" value="JFSH_AFLUHPya" /> + +<var name="JFSH_AFrame_Leg_Angle" value="atan(JFSH_AFLUHPyb / (JFSH_AFLUHPxb - JFSH_AFLUHPxa))"/> +<box name="JFSH_AFrame_Leg_UpperHorizontalPlate_basic" material="ShieldSteel" X_Y_Z="(JFSH_AFLUHPxa - JFSH_AFLUHPxb)/cos(JFSH_AFrame_Leg_Angle) + cos(JFSH_AFrame_Leg_Angle)*(JFSH_AFLUHPxd - JFSH_AFLUHPxa); -sin(JFSH_AFrame_Leg_Angle)*(JFSH_AFLUHPxd - JFSH_AFLUHPxa);JFSH_AFrwidth_AFrame_width"/> +<box name="JFSH_AFrame_Leg_UpperHorizontalPlate_cut" material="ShieldSteel" X_Y_Z="(JFSH_AFLUHPxd-JFSH_AFLUHPxa)*4.;(JFSH_AFLUHPxd-JFSH_AFLUHPxa)*4.;JFSH_AFrwidth_AFrame_width*2."/> + +<subtraction name="JFSH_AFrame_Leg_UpperHorizontalPlate"> + <posXYZ volume="JFSH_AFrame_Leg_UpperHorizontalPlate_basic" X_Y_Z="JFSH_AFLUHPxb + (JFSH_AFLUHPxd - JFSH_AFLUHPxb)/2.; JFSH_AFLUHPyb/2.; 0." rot="0.;0.;JFSH_AFrame_Leg_Angle/GENV_Pi*180." /> + <posXYZ volume="JFSH_AFrame_Leg_UpperHorizontalPlate_cut" X_Y_Z="JFSH_AFLUHPxd; -2.*(JFSH_AFLUHPxd - JFSH_AFLUHPxa); 0."/> + <posXYZ volume="JFSH_AFrame_Leg_UpperHorizontalPlate_cut" X_Y_Z="JFSH_AFLUHPxc; JFSH_AFLUHPyc + 2.*(JFSH_AFLUHPxd - JFSH_AFLUHPxa); 0."/> +</subtraction> + +<!-- "A" Frame Welded Assembly Top Plate --> + +<var name="JFSH_AFTPLAxa" value="JFSH_AFTPleng_AFrame_TopPlate_length/2." /> +<var name="JFSH_AFTPLAya" value="JFSH_AFtothei_AFrame_Total_height-JFSH_AFTPheig_AFrame_TopPlate_height" /> + +<var name="JFSH_AFTPLAxb" value="JFSH_AFTPLAxa " /> +<var name="JFSH_AFTPLAyb" value="JFSH_AFtothei_AFrame_Total_height" /> + +<trd name="JFSH_AFrame_TopPlate" material="ShieldSteel" Xmp_Ymp_Z="2.*JFSH_AFTPLAxb; 2.*JFSH_AFTPLAxa; JFSH_AFrwidth_AFrame_width; JFSH_AFrwidth_AFrame_width; JFSH_AFTPLAyb-JFSH_AFTPLAya" /> + +<!-- "A" Frame Welded Assembly Spacer --> + +<var name="JFSH_AFSPACxa" value="JFSH_AFSlengt_AFrame_Spacer_length/2." /> +<var name="JFSH_AFSPACya" value="JFSH_AFTPLAya-JFSH_AFSheigh_AFrame_Spacer_height" /> + +<var name="JFSH_AFSPACxb" value="JFSH_AFSPACxa " /> +<var name="JFSH_AFSPACyb" value="JFSH_AFTPLAya" /> + +<trd name="JFSH_AFrame_Spacer" material="ShieldSteel" Xmp_Ymp_Z="2.*JFSH_AFSPACxb; 2.*JFSH_AFSPACxa; JFSH_AFrwidth_AFrame_width; JFSH_AFrwidth_AFrame_width; JFSH_AFSPACyb-JFSH_AFSPACya" /> + + +<!-- "A" Frame Welded Assembly Web --> + +<var name="JFSH_AFWEBwid_AFrame_Web_element_width" value="(JFSH_AFrwidth_AFrame_width-JFSH_AFBthic1_AFrame_Bar_thickness1)/2." /> +<var name="JFSH_AFWEBhei_AFrame_Web_element_height" value="JFSH_AFBheigh_AFrame_Bar_height-2.*JFSH_AFBthic2_AFrame_Bar_thickness2" /> + +<var name="JFSH_AFWEBBBy_AFrame_Web_element_BottomBar_Y" value="JFSH_AFBthic2_AFrame_Bar_thickness2+JFSH_AFWEBhei_AFrame_Web_element_height/2" /> +<var name="JFSH_AFWEBzpo_AFrame_Web_element_Z" value="JFSH_AFBthic1_AFrame_Bar_thickness1/2. + JFSH_AFWEBwid_AFrame_Web_element_width/2." /> + +<box name="JFSH_AFrame_Web_element" material="ShieldSteel" X_Y_Z="JFSH_AFWEleng_AFrame_Web_element_length;JFSH_AFWEBhei_AFrame_Web_element_height;JFSH_AFWEBwid_AFrame_Web_element_width" /> + +<composition name="JFSH_AFrame_Web_composite_element" > + <posXYZ volume="JFSH_AFrame_Web_element" X_Y_Z="0.;0.; JFSH_AFWEBzpo_AFrame_Web_element_Z" rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Web_element" X_Y_Z="0.;0.;-JFSH_AFWEBzpo_AFrame_Web_element_Z" rot="0.;0.;0." /> +</composition> + +<!-- "A" Frame Welded Assembly Web element leg --> + +<var name="JFSH_AFWELxi1" value="JFSH_AFLUHPxd - JFSH_AFWEBLx1_AFrame_Web_element_Leg_DX1*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyi1" value="JFSH_AFWEBLx1_AFrame_Web_element_Leg_DX1*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELxp1" value="JFSH_AFWELxi1-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyp1" value="JFSH_AFWELyi1-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<var name="JFSH_AFWELxi2" value="JFSH_AFWELxi1 - JFSH_AFWEBLx2_AFrame_Web_element_Leg_DX2*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyi2" value="JFSH_AFWELyi1 + JFSH_AFWEBLx2_AFrame_Web_element_Leg_DX2*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELxp2" value="JFSH_AFWELxi2-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyp2" value="JFSH_AFWELyi2-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<var name="JFSH_AFWELxi3" value="JFSH_AFWELxi2 - JFSH_AFWEBLx2_AFrame_Web_element_Leg_DX2*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyi3" value="JFSH_AFWELyi2 + JFSH_AFWEBLx2_AFrame_Web_element_Leg_DX2*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELxp3" value="JFSH_AFWELxi3-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWELyp3" value="JFSH_AFWELyi3-(JFSH_AFWEBhei_AFrame_Web_element_height/2 + JFSH_AFBthic2_AFrame_Bar_thickness2)*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> + +<!-- "A" Frame Welded Assembly Flanges --> + +<var name="JFSH_AFFwidth_AFrame_Flange_width" value="JFSH_AFWEBwid_AFrame_Web_element_width" /> +<var name="JFSH_AFFzposi_AFrame_Flange_Z" value="JFSH_AFWEBzpo_AFrame_Web_element_Z" /> + +<box name="JFSH_AFrame_Flange" material="ShieldSteel" X_Y_Z="JFSH_AFFlengt_AFrame_Flange_length;JFSH_AFFthick_AFrame_Flange_thickness;JFSH_AFFwidth_AFrame_Flange_width" /> +<composition name="JFSH_AFrame_Flange_composite" > + <posXYZ volume="JFSH_AFrame_Flange" X_Y_Z="0.;0.; JFSH_AFFzposi_AFrame_Flange_Z" rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Flange" X_Y_Z="0.;0.;-JFSH_AFFzposi_AFrame_Flange_Z" rot="0.;0.;0." /> +</composition> + +<var name="JFSH_AFFposx1_AFrame_Flange_X1" value="JFSH_AFWELxp1+(JFSH_AFFlengt_AFrame_Flange_length+JFSH_AFWEleng_AFrame_Web_element_length)*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2" /> +<var name="JFSH_AFFposy1_AFrame_Flange_Y1" value="JFSH_AFWELyp1-(JFSH_AFFlengt_AFrame_Flange_length+JFSH_AFWEleng_AFrame_Web_element_length)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2" /> + +<var name="JFSH_AFFposx2_AFrame_Flange_X2" value="JFSH_AFWELxp2+(JFSH_AFFlengt_AFrame_Flange_length+JFSH_AFWEleng_AFrame_Web_element_length)*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2" /> +<var name="JFSH_AFFposy2_AFrame_Flange_Y2" value="JFSH_AFWELyp2-(JFSH_AFFlengt_AFrame_Flange_length+JFSH_AFWEleng_AFrame_Web_element_length)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)/2" /> + +<!-- "A" Frame Welded Assembly Wedges --> + +<var name="JFSH_AFWposxa_AFrame_Wedge_XA" value="JFSH_XYZref" /> +<var name="JFSH_AFWposya_AFrame_Wedge_YA" value="JFSH_XYZref" /> +<var name="JFSH_AFWposxb_AFrame_Wedge_XB" value="JFSH_AFWheigh_AFrame_Wedge_height*tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWposyb_AFrame_Wedge_YB" value="JFSH_AFWheigh_AFrame_Wedge_height" /> +<var name="JFSH_AFWposxc_AFrame_Wedge_XC" value="JFSH_AFWposxb_AFrame_Wedge_XB+JFSH_AFWexten_AFrame_Wedge_extension*cos(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWposyc_AFrame_Wedge_YC" value="JFSH_AFWposyb_AFrame_Wedge_YB-JFSH_AFWexten_AFrame_Wedge_extension*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWposxd_AFrame_Wedge_XD" value="JFSH_AFWposxc_AFrame_Wedge_XC- JFSH_AFWposyc_AFrame_Wedge_YC * tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWposyd_AFrame_Wedge_YD" value="JFSH_AFWposya_AFrame_Wedge_YA" /> + +<var name="JFSH_AFWposx0_AFrame_Wedge_X0" value="JFSH_AFWposxb_AFrame_Wedge_XB + JFSH_AFWposyb_AFrame_Wedge_YB / tan(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180)" /> +<var name="JFSH_AFWposy0_AFrame_Wedge_Y0" value="JFSH_AFWposxa_AFrame_Wedge_XA" /> + +<box name="JFSH_AFrame_Wedge_basic" material="ShieldSteel" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC; JFSH_AFWposyb_AFrame_Wedge_YB; JFSH_AFWthick_AFrame_Wedge_thickness"/> +<box name="JFSH_AFrame_Wedge_cut1" material="ShieldSteel" X_Y_Z="2.*(JFSH_AFWposxc_AFrame_Wedge_XC-JFSH_AFWposxb_AFrame_Wedge_XB)*sin(JFSH_AFLangle_AFrame_Leg_angle*GENV_PiS180); JFSH_AFWposxc_AFrame_Wedge_XC; 2.*JFSH_AFWthick_AFrame_Wedge_thickness"/> +<box name="JFSH_AFrame_Wedge_cut2" material="ShieldSteel" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC; 2.*JFSH_AFWposxb_AFrame_Wedge_XB*cos(atan(JFSH_AFWposxb_AFrame_Wedge_XB/JFSH_AFWposyb_AFrame_Wedge_YB)); 2.*JFSH_AFWthick_AFrame_Wedge_thickness"/> +<box name="JFSH_AFrame_Wedge_cut3" material="ShieldSteel" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC; 2.*(JFSH_AFWposxc_AFrame_Wedge_XC-JFSH_AFWposxd_AFrame_Wedge_XD)*cos(atan((JFSH_AFWposxc_AFrame_Wedge_XC-JFSH_AFWposxd_AFrame_Wedge_XD)/JFSH_AFWposyc_AFrame_Wedge_YC)); 2.*JFSH_AFWthick_AFrame_Wedge_thickness"/> + +<subtraction name="JFSH_AFrame_Wedge"> + <posXYZ volume="JFSH_AFrame_Wedge_basic" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC/2.; JFSH_AFWposyb_AFrame_Wedge_YB/2.; 0." /> + <posXYZ volume="JFSH_AFrame_Wedge_cut1" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC; JFSH_AFWposyb_AFrame_Wedge_YB; 0." rot=" 0.; 0.; 90-JFSH_AFLangle_AFrame_Leg_angle" /> + <posXYZ volume="JFSH_AFrame_Wedge_cut2" X_Y_Z="0.; JFSH_AFWposyb_AFrame_Wedge_YB; 0." rot=" 0.; 0.; 90-atan(JFSH_AFWposxb_AFrame_Wedge_XB/JFSH_AFWposyb_AFrame_Wedge_YB)/GENV_PiS180" /> + <posXYZ volume="JFSH_AFrame_Wedge_cut3" X_Y_Z="JFSH_AFWposxc_AFrame_Wedge_XC; 0.; 0." rot=" 0.; 0.; 90-atan((JFSH_AFWposxc_AFrame_Wedge_XC-JFSH_AFWposxd_AFrame_Wedge_XD)/JFSH_AFWposyc_AFrame_Wedge_YC)/GENV_PiS180" /> +</subtraction> + +<var name="JFSH_AFWposix_AFrame_Wedge_X" value=" JFSH_AFBUHPxb - JFSH_AFWposx0_AFrame_Wedge_X0" /> +<var name="JFSH_AFWposiy_AFrame_Wedge_Y" value=" JFSH_AFBUHPyb - JFSH_AFWposy0_AFrame_Wedge_Y0" /> +<var name="JFSH_AFWposiz_AFrame_Wedge_Z" value=" JFSH_AFrwidth_AFrame_width/2. - JFSH_AFWzoffs_AFrame_Wedge_zoffset - JFSH_AFWthick_AFrame_Wedge_thickness/2." /> + +<!-- "A" Frame Welded Assembly Feet --> + +<var name="JFSH_AFFeetxa_AFrame_Feet_XA" value="JFSH_AFFEElen_AFrame_Feet_length/2." /> +<var name="JFSH_AFFeetya_AFrame_Feet_YA" value="JFSH_XYZref" /> +<var name="JFSH_AFFeetxb_AFrame_Feet_XB" value="JFSH_AFFeetxa_AFrame_Feet_XA" /> +<var name="JFSH_AFFeetyb_AFrame_Feet_YB" value="JFSH_AFFeetya_AFrame_Feet_YA - JFSH_AFFEEhei_AFrame_Feet_height" /> +<var name="JFSH_AFFeetxc_AFrame_Feet_XC" value="JFSH_AFFeetxb_AFrame_Feet_XB - JFSH_AFFEEsle_AFrame_Feet_shortlength" /> +<var name="JFSH_AFFeetyc_AFrame_Feet_YC" value="JFSH_AFFeetyb_AFrame_Feet_YB" /> +<var name="JFSH_AFFeetxd_AFrame_Feet_XD" value="JFSH_AFFeetxc_AFrame_Feet_XC" /> +<var name="JFSH_AFFeetyd_AFrame_Feet_YD" value="JFSH_AFFeetyb_AFrame_Feet_YB+JFSH_AFFEEthi_AFrame_Feet_thickness" /> +<var name="JFSH_AFFeetxe_AFrame_Feet_XE" value="JFSH_AFFeetxc_AFrame_Feet_XC+JFSH_AFFEEsle_AFrame_Feet_shortlength-JFSH_AFFEEthi_AFrame_Feet_thickness" /> +<var name="JFSH_AFFeetye_AFrame_Feet_YE" value="JFSH_AFFeetyd_AFrame_Feet_YD" /> +<var name="JFSH_AFFeetxf_AFrame_Feet_XF" value="JFSH_AFFeetxe_AFrame_Feet_XE" /> +<var name="JFSH_AFFeetyf_AFrame_Feet_YF" value="JFSH_AFFeetya_AFrame_Feet_YA-JFSH_AFFEEthi_AFrame_Feet_thickness" /> + +<var name="JFSH_AFFeetpx_AFrame_Feet_X" value=" JFSH_AFFEEext_AFrame_Feet_X_extension/2. - JFSH_AFFEElen_AFrame_Feet_length/2." /> + +<box name="JFSH_AFrame_Feet_basic" material="ShieldSteel" X_Y_Z="2.*JFSH_AFFeetxa_AFrame_Feet_XA; -JFSH_AFFeetyb_AFrame_Feet_YB; JFSH_AFrwidth_AFrame_width" /> +<box name="JFSH_AFrame_Feet_cut1" material="ShieldSteel" X_Y_Z="2.*JFSH_AFFeetxe_AFrame_Feet_XE; JFSH_AFFeetyf_AFrame_Feet_YF-JFSH_AFFeetye_AFrame_Feet_YE; 2.*JFSH_AFrwidth_AFrame_width" /> +<box name="JFSH_AFrame_Feet_cut2" material="ShieldSteel" X_Y_Z="2.*JFSH_AFFeetxc_AFrame_Feet_XC; JFSH_AFFeetyf_AFrame_Feet_YF-JFSH_AFFeetye_AFrame_Feet_YE; 2.*JFSH_AFrwidth_AFrame_width" /> + +<subtraction name="JFSH_AFrame_Feet"> + <posXYZ volume="JFSH_AFrame_Feet_basic" X_Y_Z="0.; JFSH_AFFeetyb_AFrame_Feet_YB/2.; 0."/> + <posXYZ volume="JFSH_AFrame_Feet_cut1" X_Y_Z="0.; (JFSH_AFFeetye_AFrame_Feet_YE-JFSH_AFFeetyf_AFrame_Feet_YF)/2.+JFSH_AFFeetyf_AFrame_Feet_YF; 0."/> + <posXYZ volume="JFSH_AFrame_Feet_cut2" X_Y_Z="0.; JFSH_AFFeetyc_AFrame_Feet_YC; 0."/> +</subtraction> + +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- "A" Frame Welded Assembly Composition of volumes --> +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<composition name="JFSH_AFrame_BottomBar" > + <posXYZ volume="JFSH_AFrame_BottomBar_LowerHorizontalPlate" X_Y_Z="0.;(JFSH_AFBLHPyb-JFSH_AFBLHPya)/2.; 0." rot="90.;0.;0."/> + <posXYZ volume="JFSH_AFrame_BottomBar_VerticalPlate" X_Y_Z="0.;(JFSH_AFBBVPyb-JFSH_AFBBVPya)/2.+JFSH_AFBLHPyb-JFSH_AFBLHPya; 0." rot="90.;0.;0."/> + <posXYZ volume="JFSH_AFrame_BottomBar_UpperHorizontalPlate" X_Y_Z="0.;(JFSH_AFBUHPyb-JFSH_AFBUHPya)/2.+JFSH_AFBBVPyb-JFSH_AFBBVPya+JFSH_AFBLHPyb-JFSH_AFBLHPya; 0." rot="90.;0.;0."/> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z=" JFSH_AFWEBBx1_AFrame_Web_element_BottomBar_X1;JFSH_AFWEBBBy_AFrame_Web_element_BottomBar_Y;0. " rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z=" JFSH_AFWEBBx2_AFrame_Web_element_BottomBar_X2;JFSH_AFWEBBBy_AFrame_Web_element_BottomBar_Y;0. " rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z="-JFSH_AFWEBBx2_AFrame_Web_element_BottomBar_X2;JFSH_AFWEBBBy_AFrame_Web_element_BottomBar_Y;0. " rot="0.;0.;0." /> +</composition> + +<composition name="JFSH_AFrame_Leg" > + <posXYZ volume="JFSH_AFrame_Leg_LowerHorizontalPlate" X_Y_Z="0.;0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Leg_VerticalPlate" X_Y_Z="0.;0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Leg_UpperHorizontalPlate" X_Y_Z="0.;0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z=" JFSH_AFWELxp1;JFSH_AFWELyp1;0. " rot="0.;0.;-JFSH_AFLangle_AFrame_Leg_angle" /> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z=" JFSH_AFWELxp2;JFSH_AFWELyp2;0. " rot="0.;0.;-JFSH_AFLangle_AFrame_Leg_angle" /> + <posXYZ volume="JFSH_AFrame_Web_composite_element" X_Y_Z=" JFSH_AFWELxp3;JFSH_AFWELyp3;0. " rot="0.;0.;-JFSH_AFLangle_AFrame_Leg_angle" /> + <posXYZ volume="JFSH_AFrame_Flange_composite" X_Y_Z=" JFSH_AFFposx1_AFrame_Flange_X1;JFSH_AFFposy1_AFrame_Flange_Y1;0. " rot="0.;0.;-JFSH_AFLangle_AFrame_Leg_angle" /> + <posXYZ volume="JFSH_AFrame_Flange_composite" X_Y_Z=" JFSH_AFFposx2_AFrame_Flange_X2;JFSH_AFFposy2_AFrame_Flange_Y2;0. " rot="0.;0.;-JFSH_AFLangle_AFrame_Leg_angle" /> +</composition> + +<composition name="JFSH_AFrame_Assembly" > + <posXYZ volume="JFSH_AFrame_TopPlate" X_Y_Z="0.;JFSH_AFTPLAyb-(JFSH_AFTPLAyb-JFSH_AFTPLAya)/2.; 0." rot="90.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Spacer" X_Y_Z="0.;JFSH_AFSPACyb-(JFSH_AFSPACyb-JFSH_AFSPACya)/2.; 0." rot="90.;0.;0." /> + <posXYZ volume="JFSH_AFrame_BottomBar" X_Y_Z="0.;0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Leg" X_Y_Z="0.;0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Leg" X_Y_Z="0.;0.; 0." rot="0.;JFSH_rot180;0." /> + <posXYZ volume="JFSH_AFrame_Wedge" X_Y_Z=" JFSH_AFWposix_AFrame_Wedge_X;JFSH_AFWposiy_AFrame_Wedge_Y; JFSH_AFWposiz_AFrame_Wedge_Z" rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Wedge" X_Y_Z=" JFSH_AFWposix_AFrame_Wedge_X;JFSH_AFWposiy_AFrame_Wedge_Y;-JFSH_AFWposiz_AFrame_Wedge_Z" rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Wedge" X_Y_Z="-JFSH_AFWposix_AFrame_Wedge_X;JFSH_AFWposiy_AFrame_Wedge_Y; JFSH_AFWposiz_AFrame_Wedge_Z" rot="0.;JFSH_rot180;0." /> + <posXYZ volume="JFSH_AFrame_Wedge" X_Y_Z="-JFSH_AFWposix_AFrame_Wedge_X;JFSH_AFWposiy_AFrame_Wedge_Y;-JFSH_AFWposiz_AFrame_Wedge_Z" rot="0.;JFSH_rot180;0." /> + <posXYZ volume="JFSH_AFrame_Feet" X_Y_Z=" JFSH_AFFeetpx_AFrame_Feet_X;0.;0." rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Feet" X_Y_Z="-JFSH_AFFeetpx_AFrame_Feet_X;0.;0." rot="0.;0.;0." /> +</composition> + +<!-- name = JF Shielding section name = "Shielding" --> +<!-- Simple modelization --> + + +<!-- Primary variables --> + +<!-- BEGIN confirmation with atljf___0010-vAC (if no other comment) --> +<!-- Main Cylinder --> +<var name="JFSH_JFCMClen_JFCMainCylinder_length" value=" 5041." /> +<var name="JFSH_JFCMCir1_JFCMainCylinder_innerRadius1" value=" 282." /> <!-- NO CONFIRMATION POSSIBLE; changed by Sven.Menke@CERN.CH Jul 2020 from 304 to 282 according to http://atlas.web.cern.ch/Atlas/GROUPS/Shielding/shielding.htm --> +<var name="JFSH_JFCMCouR_JFCMainCylinder_outerRadius" value=" 1550." /> +<var name="JFSH_JFCMChSl_JFCMainCylinder_HoleSLope" value=" 1.1"/> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JFSH_JFCMChSl_JFCMainCylinder_HoleSLope_zoffset" value=" 1630." /> <!-- this length plus plug is straight; introduced by Sven.Menke@CERN.CH Jul 2020 according to https://edms.cern.ch/ui/file/322317/AC/atljf___0003-vAC.pdf --> +<var name="JFSH_JFCMChSl_JFCMainCylinder_OctoZoverlap" value=" 520." /> <!-- this is the z-portion of JFC3 that is modeled here as Oct; introduced by Sven.Menke@CERN.CH Jul 2020 --> +<var name="JFSH_JFCMCzof_JFCMainCylinder_zoffset" value=" 45." /> +<var name="JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff" value=" 30." /> <!-- confirmed atljf___0031-vAE --> +<var name="JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff" value=" 50." /> <!-- confirmed atljf___0030-vAD --> + +<!-- PLUG --> +<var name="JFSH_PLUGleng_Plug_length" value=" 250." /> +<var name="JFSH_PLUGinRa_Plug_innerRadius" value=" 280." /> <!-- confirmed atljf___0006-vAE --> +<var name="JFSH_PLUGouRa_Plug_outerRadius" value=" 520." /> <!-- confirmed atljf___0006-vAE --> + +<!-- JFS Octogon --> +<var name="JFSH_JFSOCmRa_JFSOctogon_mainRadius" value=" 2100." /> +<var name="JFSH_JFSOClen_JFSOctogon_length" value=" 3000." /> +<var name="JFSH_JFSOCzof_JFSOctogon_zoffset" value=" 5086." /> +<var name="JFSH_JFSOCrso_JFSOctogon_rolledsteeloff" value=" 30." /> <!-- confirmed atljf___0029-vAG --> +<var name="JFSH_JFSOCpoo_JFSOctogon_polybaronoff" value=" 80." /> <!-- confirmed atljf___0024-vAD --> + +<!-- END confirmation with atljf___0010-vAC --> + +<!-- A-Frame to JFS Octogon connection --> +<var name="JFSH_AFOconle_AFrame_to_JFSOctogon_connection_length" value=" 230." /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JFSH_AFOconwi_AFrame_to_JFSOctogon_connection_width" value=" 200." /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JFSH_AFOconhe_AFrame_to_JFSOctogon_connection_height" value=" 67." /> <!-- NO CONFIRMATION POSSIBLE --> + +<!-- Derived variables --> + +<var name="JFSH_JFCMCir2_JFCMainCylinder_innerRadius2" value="JFSH_JFCMCir1_JFCMainCylinder_innerRadius1+(JFSH_JFCMClen_JFCMainCylinder_length-JFSH_JFCMChSl_JFCMainCylinder_HoleSLope_zoffset)*tan(JFSH_JFCMChSl_JFCMainCylinder_HoleSLope*GENV_PiS180)"/> <!-- changed by SvenMenke@CERN.CH Jul 2020 --> +<var name="JFSH_JFCMCir3_JFCMainCylinder_innerRadius3" value="JFSH_JFCMCir2_JFCMainCylinder_innerRadius2+JFSH_JFCMChSl_JFCMainCylinder_OctoZoverlap*tan(JFSH_JFCMChSl_JFCMainCylinder_HoleSLope*GENV_PiS180)"/> <!-- added by SvenMenke@CERN.CH Jul 2020 --> +<var name="JFSH_JFCMCzpo_JFCMainCylinder_Z" value="JFSH_XYZref+JFSH_JFCMCzof_JFCMainCylinder_zoffset" /> +<var name="JFSH_JFSOCzpo_JFSOctogon_Z" value="JFSH_XYZref+JFSH_JFSOCzof_JFSOctogon_zoffset+JFSH_JFSOClen_JFSOctogon_length/2." /> +<var name="JFSH_PLUGzpos_Plug_posz" value="JFSH_XYZref-JFSH_PLUGleng_Plug_length"/> + +<!-- JFC Cylinder --> +<pcon name="JFSH_JFCMainCylinder_core" material="ShieldIron" > + <polyplane Rio_Z="JFSH_PLUGinRa_Plug_innerRadius;JFSH_PLUGouRa_Plug_outerRadius;JFSH_PLUGzpos_Plug_posz" /> + <polyplane Rio_Z="JFSH_PLUGinRa_Plug_innerRadius;JFSH_PLUGouRa_Plug_outerRadius;0." /> + <polyplane Rio_Z="JFSH_JFCMCir1_JFCMainCylinder_innerRadius1;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff-GENV_Eps;0." /> + <polyplane Rio_Z="JFSH_JFCMCir1_JFCMainCylinder_innerRadius1;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff-GENV_Eps;JFSH_JFCMChSl_JFCMainCylinder_HoleSLope_zoffset" /> <!-- added plane by Sven.Menke@CERN.CH Jul 2020 since JFC2 is first straight and then with 1.1 degrees like JFC3 --> + <polyplane Rio_Z="JFSH_JFCMCir2_JFCMainCylinder_innerRadius2;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff-GENV_Eps;JFSH_JFCMClen_JFCMainCylinder_length" /> +</pcon> + +<tubs name="JFSH_JFCMainCylinder_steelroll" material="ShieldSteel" Rio_Z=" JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff+GENV_Eps; JFSH_JFCMCouR_JFCMainCylinder_outerRadius; JFSH_JFCMClen_JFCMainCylinder_length"/> +<tubs name="JFSH_JFCMainCylinder_polyroll" material="PolyBoronH3B03" Rio_Z=" JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff; JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff; JFSH_JFCMClen_JFCMainCylinder_length"/> + +<!-- A Frame to JFC Cylinder connection --> + +<box name="JFSH_AFrame_to_JFCMainCylinder_connection" material="ShieldSteel" X_Y_Z="JFSH_AFOconwi_AFrame_to_JFSOctogon_connection_width;JFSH_AFOconhe_AFrame_to_JFSOctogon_connection_height;JFSH_AFOconle_AFrame_to_JFSOctogon_connection_length" /> + +<var name="JFSH_AFMCcony_AFrame_to_JFCMainCylinder_connection_Y" value="JFSH_AFASposy_AFrame_Assembly_Y + JFSH_AFtothei_AFrame_Total_height + JFSH_AFOconhe_AFrame_to_JFSOctogon_connection_height/2." /> +<var name="JFSH_AFMCconz_AFrame_to_JFCMainCylinder_connection_Z" value="JFSH_AFOconle_AFrame_to_JFSOctogon_connection_length/2.+GENV_Eps" /> +<var name="JFSH_AFconnexion2" value="15." /> <!-- former value 290. --> +<union name="JFSH_JFCMainCylinder_compsteel" > + <posXYZ volume="JFSH_JFCMainCylinder_steelroll" X_Y_Z=" 0. ; 0. ; JFSH_JFCMClen_JFCMainCylinder_length/2. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_AFrame_to_JFCMainCylinder_connection" X_Y_Z=" 0. ; JFSH_AFMCcony_AFrame_to_JFCMainCylinder_connection_Y ; JFSH_AFMCconz_AFrame_to_JFCMainCylinder_connection_Z+JFSH_AFconnexion2" rot=" 0. ; 0. ; 0." /> +</union> + +<composition name="JFSH_JFCCylinder" > + <posXYZ volume="JFSH_JFCMainCylinder_core" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFCMainCylinder_compsteel" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFCMainCylinder_polyroll" X_Y_Z=" 0. ; 0. ; JFSH_JFCMClen_JFCMainCylinder_length/2. " rot=" 0. ; 0. ; 0." /> +</composition> + +<!-- JFS Octogon --> + +<var name="JFSH_JFSOctxa_JFSOctogon_XA" value="JFSH_JFSOCmRa_JFSOctogon_mainRadius-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff-JFSH_JFSOCpoo_JFSOctogon_polybaronoff-GENV_Eps" /> +<var name="JFSH_JFSOctya_JFSOctogon_YA" value="JFSH_JFSOctxa_JFSOctogon_XA*GENV_Ta225" /> +<var name="JFSH_JFSOctxb_JFSOctogon_XB" value="JFSH_JFSOctya_JFSOctogon_YA" /> +<var name="JFSH_JFSOctyb_JFSOctogon_YB" value="JFSH_JFSOctxa_JFSOctogon_XA" /> + +<gvxysxy name="JFSH_JFSOctogon_Coreedge" material="ShieldIron" dZ="JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff-JFSH_JFSOCpoo_JFSOctogon_polybaronoff-GENV_Eps" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA ; JFSH_JFSOctya_JFSOctogon_YA " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB ; JFSH_JFSOctyb_JFSOctogon_YB " /> +</gvxysxy> + +<tubs name="JFSH_JFSOctogon_Coreround" material="ShieldIron" Rio_Z=" 0. ;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff-GENV_Eps; JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps"/> + +<union name="JFSH_JFSOctogon_Core" > + <posXYZ volume="JFSH_JFSOctogon_Coreedge" X_Y_Z=" 0.; 0.; (JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps)/2. "/> + <posXYZ volume="JFSH_JFSOctogon_Coreround" X_Y_Z=" 0.; 0.;-(JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff-JFSH_JFSOCpoo_JFSOctogon_polybaronoff)/2.+GENV_Eps" /> +</union> + +<pcon name="JFSH_JFSOctogon_Hole" material="ShieldIron" > <!-- changed from tubs to pcon by Sven.Menke@CERN.CH Jul 2020 since inner bore of JFC3 has 1.1 degree angle --> + <polyplane Rio_Z="0.;JFSH_JFCMCir2_JFCMainCylinder_innerRadius2;-0.6*JFSH_JFSOClen_JFSOctogon_length"/> + <polyplane Rio_Z="0.;JFSH_JFCMCir2_JFCMainCylinder_innerRadius2;-0.5*JFSH_JFSOClen_JFSOctogon_length"/> + <polyplane Rio_Z="0.;JFSH_JFCMCir2_JFCMainCylinder_innerRadius2;-0.5*JFSH_JFSOClen_JFSOctogon_length"/> + <polyplane Rio_Z="0.;JFSH_JFCMCir3_JFCMainCylinder_innerRadius3;-0.5*JFSH_JFSOClen_JFSOctogon_length+JFSH_JFCMChSl_JFCMainCylinder_OctoZoverlap"/> + <polyplane Rio_Z="0.;JFSH_JFCMCir3_JFCMainCylinder_innerRadius3; 0.6*JFSH_JFSOClen_JFSOctogon_length"/> +</pcon> +<var name="JFSH_JFSOctHBPzo_JFSOctogon_HoleBPzoffset" value=" 600." /> <!-- confirmed atljf___0010-vAC --> +<var name="JFSH_JFSOctHBPoR_JFSOctogon_HoleBPoutRad" value=" 436. + 1." /> <!-- value of MuonSys mother volume --> +<tubs name="JFSH_JFSOctogon_HoleBP" material="ShieldIron" Rio_Z=" 0. ;JFSH_JFSOctHBPoR_JFSOctogon_HoleBPoutRad; JFSH_JFSOClen_JFSOctogon_length"/> +<subtraction name="JFSH_JFSOctogon_main" > + <posXYZ volume="JFSH_JFSOctogon_Core" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_Hole" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_HoleBP" X_Y_Z=" 0. ; 0. ; JFSH_JFSOctHBPzo_JFSOctogon_HoleBPzoffset " rot=" 0. ; 0. ; 0." /> +</subtraction> + +<gvxysxy name="JFSH_JFSOctogon_Polyedge_baseside" material="PolyBoronH3B03" dZ="JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff - JFSH_JFSOCpoo_JFSOctogon_polybaronoff - GENV_Eps" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps ; JFSH_JFSOctya_JFSOctogon_YA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps)*GENV_Ta225 " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps)*GENV_Ta225 ; JFSH_JFSOctyb_JFSOctogon_YB+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps " /> +</gvxysxy> + +<gvxysxy name="JFSH_JFSOctogon_Polyedge_subblock" material="PolyBoronH3B03" dZ="JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCpoo_JFSOctogon_polybaronoff-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+GENV_Eps" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA+GENV_Eps ; JFSH_JFSOctya_JFSOctogon_YA+GENV_Eps*GENV_Ta225 " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB+GENV_Eps*GENV_Ta225 ; JFSH_JFSOctyb_JFSOctogon_YB+GENV_Eps " /> +</gvxysxy> + +<subtraction name="JFSH_JFSOctogon_Polyedge_side"> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_baseside" X_Y_Z=" 0. ; 0. ; JFSH_JFSOCrso_JFSOctogon_rolledsteeloff/2. + JFSH_JFSOCpoo_JFSOctogon_polybaronoff/2." /> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_subblock" X_Y_Z=" 0. ; 0. ; (JFSH_JFSOCpoo_JFSOctogon_polybaronoff+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff-GENV_Eps)/2.+GENV_Eps" /> +</subtraction> + +<gvxysxy name="JFSH_JFSOctogon_Polyedge_basefront" material="PolyBoronB2O3" dZ="JFSH_JFSOCpoo_JFSOctogon_polybaronoff" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps ; JFSH_JFSOctya_JFSOctogon_YA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps)*GENV_Ta225 " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps)*GENV_Ta225 ; JFSH_JFSOctyb_JFSOctogon_YB+JFSH_JFSOCpoo_JFSOctogon_polybaronoff+GENV_Eps " /> +</gvxysxy> + +<tubs name="JFSH_JFSOctogon_Polyedge_subtube" material="PolyBoronB2O3" Rio_Z=" 0. ;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff+GENV_Eps; JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps"/> + +<subtraction name="JFSH_JFSOctogon_Polyedge_front"> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_basefront" X_Y_Z=" 0. ; 0. ; -(JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCpoo_JFSOctogon_polybaronoff)/2.+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff" /> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_subtube" X_Y_Z=" 0. ; 0. ; -(JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCpoo_JFSOctogon_polybaronoff)/2.+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff" /> +</subtraction> + +<gvxysxy name="JFSH_JFSOctogon_Steeledge_base" material="ShieldSteel" dZ="JFSH_JFSOClen_JFSOctogon_length" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+GENV_Eps) ; JFSH_JFSOctya_JFSOctogon_YA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+GENV_Eps)*GENV_Ta225 " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+GENV_Eps)*GENV_Ta225 ; JFSH_JFSOctyb_JFSOctogon_YB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+GENV_Eps) " /> +</gvxysxy> + +<gvxysxy name="JFSH_JFSOctogon_Steeledge_subblock" material="ShieldSteel" dZ="JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+2.*GENV_Eps" > + <gvxy_point X_Y=" JFSH_JFSOctxa_JFSOctogon_XA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps) ; JFSH_JFSOctya_JFSOctogon_YA+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps)*GENV_Ta225 " /> + <gvxy_point X_Y=" JFSH_JFSOctxb_JFSOctogon_XB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps)*GENV_Ta225 ; JFSH_JFSOctyb_JFSOctogon_YB+(JFSH_JFSOCpoo_JFSOctogon_polybaronoff+2.*GENV_Eps) " /> +</gvxysxy> +<tubs name="JFSH_JFSOctogon_Steeledge_subtube" material="ShieldSteel" Rio_Z=" 0. ;JFSH_JFCMCouR_JFCMainCylinder_outerRadius-JFSH_JFCMCrso_JFCMainCylinder_rolledsteeloff-JFSH_JFCMCpoo_JFCMainCylinder_polybaronoff+GENV_Eps; JFSH_JFSOCrso_JFSOctogon_rolledsteeloff+2.*GENV_Eps"/> + +<subtraction name="JFSH_JFSOctogon_Steeledge_main"> + <posXYZ volume="JFSH_JFSOctogon_Steeledge_base" X_Y_Z=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_Steeledge_subblock" X_Y_Z=" 0. ; 0. ; JFSH_JFSOCrso_JFSOctogon_rolledsteeloff/2." /> + <posXYZ volume="JFSH_JFSOctogon_Steeledge_subtube" X_Y_Z=" 0. ; 0. ; -(JFSH_JFSOClen_JFSOctogon_length-JFSH_JFSOCrso_JFSOctogon_rolledsteeloff)/2." /> +</subtraction> + +<composition name="JFSH_JFSOctogon"> + <posXYZ volume="JFSH_JFSOctogon_main" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_side" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_Polyedge_front" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JFSH_JFSOctogon_Steeledge_main" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> +</composition> + +<!-- JN Nose Shielding --> + +<!-- TX1STM Elements --> +<var name="JNSH_TX1e1oRa" value=" 1480." /> <!-- JFSH_tx1stm_element1_outerRadius --> +<var name="JNSH_TX1e1iRa" value=" 1285." /> <!-- JFSH_tx1stm_element1_innerRadius --> +<var name="JNSH_TX1e1iLe" value=" 1045." /> <!-- JFSH_tx1stm_element1_length --> +<var name="JNSH_TX1e2iRa" value=" 1085." /> <!-- JFSH_tx1stm_element2_innerRadius --> +<var name="JNSH_TX1e2iLe" value=" 1100." /> <!-- JFSH_tx1stm_element2_length --> +<var name="JNSH_TX1e3iLe" value=" 2900." /> <!-- JFSH_tx1stm_element3_length --> + +<var name="JNSH_TX1SO1iRa" value=" 1550." /> +<var name="JNSH_TX1SO1oRa" value=" 2620." /> +<var name="JNSH_TX1SO1iLe" value=" 1800." /> <!-- to adjust for cavern asymmetry and wall-position --> +<var name="JNSH_TX1SO6oRa" value=" 2075." /> +<var name="JNSH_TX1SO6iLe" value=" 200." /> + +<var name="JNSH_TX1STzof" value=" JFSH_JFSOClen_JFSOctogon_length + JFSH_JFSOCzof_JFSOctogon_zoffset" /> + +<var name="JNSH_TX1e1zpo_tx1stm_element1_Z" value="JFSH_XYZref+JNSH_TX1STzof+JNSH_TX1e1iLe/2." /> +<var name="JNSH_TX1e2zpo_tx1stm_element2_Z" value="JNSH_TX1e1zpo_tx1stm_element1_Z+JNSH_TX1e1iLe/2.+JNSH_TX1e2iLe/2."/> +<var name="JNSH_TX1e3zpo_tx1stm_element3_Z" value="JNSH_TX1e2zpo_tx1stm_element2_Z+JNSH_TX1e2iLe/2.+JNSH_TX1e3iLe/2."/> + +<var name="JNSH_TX1SO6zpo_tx1som_element6_Z" value="JFSH_XYZref+JNSH_TX1STzof+JNSH_TX1SO6iLe/2."/> +<var name="JNSH_TX1SO1zpo_tx1som_element1_Z" value="JNSH_TX1SO6zpo_tx1som_element6_Z+JNSH_TX1SO6iLe/2.+JNSH_TX1SO1iLe/2."/> + +<!-- JFS TX1STM --> +<tubs name="JNSH_tx1stm_element1" material="ShieldIron" Rio_Z="JNSH_TX1e1iRa ; JNSH_TX1e1oRa ; JNSH_TX1e1iLe"/> +<tubs name="JNSH_tx1stm_element2" material="ShieldIron" Rio_Z="JNSH_TX1e2iRa ; JNSH_TX1e1oRa ; JNSH_TX1e2iLe"/> +<tubs name="JNSH_tx1stm_element3" material="ShieldIron" Rio_Z="JNSH_TX1e1iRa ; JNSH_TX1e1oRa ; JNSH_TX1e3iLe"/> + +<var name="JNSH_tx1som_e1_XA" value="JNSH_TX1SO1oRa * tan(11.25 * GENV_PiS180)" /> +<var name="JNSH_tx1som_e1_YA" value="JNSH_TX1SO1oRa" /> +<var name="JNSH_tx1som_e1_XB" value="JNSH_tx1som_e1_XA * (1. + 2.*GENV_Co225)" /> +<var name="JNSH_tx1som_e1_YB" value="JNSH_tx1som_e1_YA - 2.*JNSH_tx1som_e1_XA*GENV_Si225" /> +<var name="JNSH_tx1som_e1_XC" value="JNSH_tx1som_e1_YB" /> +<var name="JNSH_tx1som_e1_YC" value="JNSH_tx1som_e1_XB" /> +<var name="JNSH_tx1som_e1_XD" value="JNSH_tx1som_e1_YA" /> +<var name="JNSH_tx1som_e1_YD" value="JNSH_tx1som_e1_XA" /> + +<gvxysxy name="JNSH_tx1som_element1_basic" material="ShieldIron" dZ="JNSH_TX1SO1iLe" > + <gvxy_point X_Y=" JNSH_tx1som_e1_XD ; JNSH_tx1som_e1_YD " /> + <gvxy_point X_Y=" JNSH_tx1som_e1_XC ; JNSH_tx1som_e1_YC " /> + <gvxy_point X_Y=" JNSH_tx1som_e1_XB ; JNSH_tx1som_e1_YB " /> + <gvxy_point X_Y=" JNSH_tx1som_e1_XA ; JNSH_tx1som_e1_YA " /> +</gvxysxy> +<tubs name="JNSH_tx1som_element6_cutout" material="ShieldIron" Rio_Z="0. ; JNSH_TX1SO1iRa ; 2.*JNSH_TX1SO1iLe"/> +<subtraction name="JNSH_tx1som_element1" > + <posXYZ volume="JNSH_tx1som_element1_basic" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> + <posXYZ volume="JNSH_tx1som_element6_cutout" X_Y_Z=" 0. ; 0. ; 0. " rot=" 0. ; 0. ; 0." /> +</subtraction> + +<tubs name="JNSH_tx1som_element6" material="ShieldIron" Rio_Z="JNSH_TX1SO1iRa ; JNSH_TX1SO6oRa ; JNSH_TX1SO6iLe"/> + + +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- JF and JN Shield Composition of volumes --> +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<composition name="JFSH_ShieldElements" > + <posXYZ volume="JFSH_JFCCylinder" X_Y_Z="0.;0.;JFSH_JFCMCzpo_JFCMainCylinder_Z" rot="0.;0.;0." /> + <posXYZ volume="JFSH_AFrame_Assembly" X_Y_Z="0.;-4340; JFSH_JFCMCzpo_JFCMainCylinder_Z+JFSH_AFconnexion2+110." rot="0.;0.;0." /> + <posXYZ volume="JFSH_JFSOctogon" X_Y_Z="0.;0.;JFSH_JFSOCzpo_JFSOctogon_Z" rot="0.;0.;0." /> + <posXYZ volume="JNSH_tx1stm_element1" X_Y_Z="0.;0.;JNSH_TX1e1zpo_tx1stm_element1_Z" rot="0.;0.;0." /> + <posXYZ volume="JNSH_tx1stm_element2" X_Y_Z="0.;0.;JNSH_TX1e2zpo_tx1stm_element2_Z" rot="0.;0.;0." /> + <posXYZ volume="JNSH_tx1stm_element3" X_Y_Z="0.;0.;JNSH_TX1e3zpo_tx1stm_element3_Z" rot="0.;0.;0." /> + <posXYZ volume="JNSH_tx1som_element6" X_Y_Z="0.;0.;JNSH_TX1SO6zpo_tx1som_element6_Z" rot="0.;0.;0." /> + <posXYZ volume="JNSH_tx1som_element1" X_Y_Z="0.;0.;JNSH_TX1SO1zpo_tx1som_element1_Z" rot="0.;0.;0." /> +</composition> + + +<composition name="JFSH_Shield" > + <posXYZ volume="JFSH_ShieldElements" X_Y_Z="0.;0.; JFSH_ECTnomiz_ECT_Nominal_zpos" rot="0.;0.;0." /> + <posXYZ volume="JFSH_ShieldElements" X_Y_Z="0.;0.;-JFSH_ECTnomiz_ECT_Nominal_zpos" rot="0.;JFSH_rot180;0." /> +</composition> + +<!-- JD Disk Shielding --> + +<!-- Useful variables --> + +<var name="JDSH_XYZrefpt_XYZReferencePoint" value=" 0." /> <!-- NO CONFIRMATION NEEDED --> +<var name="JDSH_rota180d_180degRotation" value=" 180." /> <!-- NO CONFIRMATION NEEDED --> + +<!-- Primary variables --> + +<!-- data from ATCZ____0005 --> +<var name="JDSH_NomiZpos_Nominal_zpos" value=" 6784." /> <!-- ATL-MH-ER-0024 --> +<!-- <var name="JDSH_NomiZpos_Nominal_zpos" value=" 6650." /> --> + +<!-- Front Disk and Back Disk --> + +<!-- BEGIN confirmation with atljd___0046-vAE (if no other comment) --> +<var name="JDSH_FDinnRad_FrontDisk_innerRadius" value=" 750." /> +<var name="JDSH_FDoutRad_FrontDisk_outerRadius" value=" 2700." /> +<var name="JDSH_FDthickn_FrontDisk_thickness" value=" 50." /> +<!-- END confirmation with atljd___0046-vAE --> +<var name="JDSH_BDinnRad_BackDisk_innerRadius" value=" 540." /> <!-- NO CONFIRMATION POSSIBLE --> + +<!-- BEGIN confirmation with atljd___0100-vAD (if no other comment) --> +<var name="JDSH_BDhatohi_BackDisk_halftotalhight" value=" 4360. " /> +<var name="JDSH_BDlophhi_BackDisk_lowparthalfhight" value=" 1325.5 " /> +<var name="JDSH_BDcutdia_BackDisk_cutoutdiameter" value=" 400. " /> <!-- confirmed atljd___0103-vAD --> +<var name="JDSH_BDtbyoff_BackDisk_totbottomyoffset" value=" 432. " /> +<var name="JDSH_BDpbyoff_BackDisk_partbottomyoffset" value=" 223. " /> +<var name="JDSH_BDhedlen_BackDisk_halfedgelength" value=" 867. " /> +<var name="JDSH_BDloedle_BackDisk_loweredgelength" value=" 1830. " /> +<var name="JDSH_BDfeyend_BackDisk_feetyend" value=" 3370. " /> +<var name="JDSH_BDcuxoff_BackDisk_cutxoffset" value=" 1400. " /> <!-- confirmed atljd___0103-vAD --> +<var name="JDSH_BDcuyoff_BackDisk_cutyoffsetfromtop" value=" 930. " /> <!-- confirmed atljd___0103-vAD --> +<var name="JDSH_BDfecaxo_BackDisk_feetcavityxoffset" value=" 108. " /> +<var name="JDSH_BDfeplhi_BackDisk_feetplatehight" value=" 50. " /> +<var name="JDSH_BackDisk_angle" value=" 32. " /> +<!-- END confirmation with atljd___0100-vAD --> + +<!-- BEGIN confirmation with atljd___0028-vAC (if no other comment) --> +<var name="JDSH_BDRRouRa_RetrunRing_outerRadius" value=" 4220." /> +<var name="JDSH_BDthickn_BackDisk_thickness" value=" 80." /> + + +<!-- Cone Assembly --> + +<var name="JDSH_CABCinRa_BrassCone_innerRadius" value=" 530." /> +<var name="JDSH_CABCouRa_BrassCone_outerRadius" value=" 1600." /> +<!-- END confirmation with atljd___0028-vAC --> + +<!-- BEGIN confirmation with atljd___0063-vAE (if no other comment) --> +<var name="JDSH_CABCthi1_BrassCone_thickness_inter1" value=" 5." /> +<var name="JDSH_CABCthic_BrassCone_thickness" value=" 260." /> +<var name="JDSH_CABCslAn_BrassCone_slopeAngle" value=" 10." /> +<var name="JDSH_CABCslLe_BrassCone_slopeLength" value=" 900." /> +<!-- END confirmation with atljd___0063-vAE --> + +<!-- BEGIN confirmation with atljd___0069-vAC (if no other comment) --> +<var name="JDSH_CALCthic_LeadCone_thickness" value=" 30." /> +<var name="JDSH_CALCleng_LeadCone_length" value=" 888." /> +<var name="JDSH_CALCwidt_LeadCone_width" value=" 629." /> +<!-- END confirmation with atljd___0069-vAC --> + +<!-- BEGIN confirmation with atljd___0066-vAA (if no other comment) --> +<var name="JDSH_CAPCthic_PolyCone_thickness" value=" 70." /> +<var name="JDSH_CAPCleng_PolyCone_length" value=" 900." /> +<var name="JDSH_CAPCwidt_PolyCone_width" value=" 634." /> +<var name="JDSH_CACOprAn_Cone_projectiveAngle" value=" 11.25" /> +<array name="JDSH_CACOangz" values="-90.;-67.5;-45.;-22.5;0.;22.5;45.;67.5;90.;112.5;135.;157.5;180.;-157.5;-135.;-112.5"/> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JDSH_CACOangx_ConeAssembly_angx" value="-10." /> +<!-- END confirmation with atljd___0066-vAA --> + +<!-- BEGIN confirmation with atljd___0081-vAI (if no other comment) --> +<var name="JDSH_TUBEinRa_Tube_innerRadius" value=" 430." /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JDSH_TUBEOuR1_Tube_OuterRadius1" value=" 730." /> +<var name="JDSH_TUBEOuR2_Tube_OuterRadius2" value=" 530." /> +<var name="JDSH_TUBEslen_Tube_shortlength" value=" 49." /> +<var name="JDSH_TUBEleng_Tube_length" value=" 2105." /> +<!-- END confirmation with atljd___0081-vAI --> + +<!-- data from ATLJT___0036 --> +<var name="JDSH_PLUGinR1_Plug_innerRadius1" value=" 129. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JDSH_PLUGouRa_Plug_OuterRadius" value=" 428. " /> <!-- NO CONFIRMATION POSSIBLE --> +<var name="JDSH_PLUGleng_Plug_length" value=" 2105. " /> <!-- confirmed atljd___0081-vAI --> +<var name="JDSH_PLUGtiAn_Plug_tiltAngle" value=" 1.1" /> <!-- NO CONFIRMATION POSSIBLE --> + +<!-- BEGIN confirmation with atljd___0035-vAK (if no other comment) --> +<var name="JDSH_SWHinnRa_SmallWheelHub_innerRadius" value=" 540. " /> +<var name="JDSH_SWHoutR1_SmallWheelHub_outerRadius1" value=" 764. " /> +<var name="JDSH_SWHoutR2_SmallWheelHub_outerRadius2" value=" 850. " /> +<var name="JDSH_SWHlengt_SmallWheelHub_length" value=" 700. " /> +<!-- END confirmation with atljd___0035-vAK --> + +<var name="JDSH_SWHPthic_SmallWheelHub_Polythickness" value=" 50. " /> <!-- confirmed atljd___0112 --> +<var name="JDSH_SWHLthic_SmallWheelHub_Leadthickness" value=" 30. " /> <!-- confirmed atljd___0113 --> + +<!-- BEGIN confirmation with atljd___0031-vAD (if no other comment) --> +<var name="JDSH_MaRiFefxl_MainRibFeet_feetxlength" value=" 358. " /> +<var name="JDSH_MaRiFefyo_MainRibFeet_feetyoffset" value=" 100. " /> +<var name="JDSH_MaRiFelol_MainRibFeet_lowerlength" value=" 2737. " /> +<var name="JDSH_MaRiFeupl_MainRibFeet_upperlength" value=" 2923. " /> +<var name="JDSH_MaRiFuxle_MainRibFull_xlength" value=" 3185. " /> +<var name="JDSH_MaRiFuyle_MainRibFull_ylength" value=" 3950. " /> +<var name="JDSH_MaRiFeaxy_MainRibFeet_anglexyplane" value=" 58. " /> +<var name="JDSH_MaRiFeayz_MainRibFeet_angleyzplane" value=" -6. " /> +<var name="JDSH_MaRiFeata_MainRibFeet_attribangle" value=" 30. " /> +<var name="JDSH_MaRiFemad_MainRibFeet_mainwidth" value=" 250. " /> +<var name="JDSH_MaRiFewzw_MainRibFeet_wholezwidth" value=" 517. " /> +<var name="JDSH_MaRiFeozw_MainRibFeet_offsetzwidth" value=" 180. " /> +<var name="JDSH_MaRiFeazo_MainRibFeet_attribzoffset" value=" 40. " /> +<var name="JDSH_MaRiFeazw_MainRibFeet_attribzwidth" value=" 150. " /> +<var name="JDSH_MaRiFerao_MainRibFeet_radialoffset" value=" 1000. + 10. " /> <!-- sum to avoid overlap, reasonalbe due to many approx. in this region --> +<var name="JDSH_MaRiFeatw_MainRibFeet_attribwidth" value=" 830. " /> +<var name="JDSH_MaRiFearw_MainRibFeet_attredwidth" value=" 605. " /> <!-- confirmed atljd___0065-vAA --> +<var name="JDSH_MainRibFeet_PosX" value=" 3185. " /> +<var name="JDSH_MainRibFeet_PosY" value="-3950. " /> +<!-- END confirmation with atljd___0031-vAD --> + +<!-- Derived variables --> + +<var name="JDSH_FDzposit_FrontDisk_Z" value="JDSH_XYZrefpt_XYZReferencePoint + JDSH_FDthickn_FrontDisk_thickness/2. " /> +<var name="JDSH_BDzposit_BackDisk_Z" value="JDSH_FDzposit_FrontDisk_Z + JDSH_FDthickn_FrontDisk_thickness/2. + JDSH_BDthickn_BackDisk_thickness/2. " /> +<var name="JDSH_CAzposit_ConeAssembly_Z" value="JDSH_BDzposit_BackDisk_Z + JDSH_BDthickn_BackDisk_thickness/2. " /> +<var name="JDSH_TUBEzpos_Tube_Z" value="JDSH_XYZrefpt_XYZReferencePoint" /> +<var name="JDSH_PLUGzpos_Plug_Z" value="JDSH_XYZrefpt_XYZReferencePoint" /> +<var name="JDSH_SWHzposi_SmallWheelHub_Z" value="JDSH_CAzposit_ConeAssembly_Z + JDSH_CABCthic_BrassCone_thickness" /> + +<var name="JDSH_CABCouR1_BrassCone_outerRadius1" value="JDSH_CABCouRa_BrassCone_outerRadius - JDSH_CABCslLe_BrassCone_slopeLength * cos(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180)" /> +<var name="JDSH_CABCthi2_BrassCone_thickness2" value="JDSH_CABCthi1_BrassCone_thickness_inter1 + JDSH_CABCslLe_BrassCone_slopeLength * sin(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180)" /> +<var name="JDSH_CABCouR2_BrassCone_outerRadius2" value="JDSH_CABCouR1_BrassCone_outerRadius1 + (JDSH_CABCthic_BrassCone_thickness-JDSH_CABCthi2_BrassCone_thickness2) * tan(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180)" /> + +<var name="JDSH_LCAxbpos_LeadConeAssembly_XB" value=" JDSH_CALCwidt_LeadCone_width/2." /> +<var name="JDSH_LCAybpos_LeadConeAssembly_YB" value=" JDSH_CALCleng_LeadCone_length" /> +<var name="JDSH_LCAxapos_LeadConeAssembly_XA" value=" JDSH_LCAxbpos_LeadConeAssembly_XB - JDSH_CALCleng_LeadCone_length*tan(JDSH_CACOprAn_Cone_projectiveAngle*GENV_PiS180) " /> +<var name="JDSH_LCAyapos_LeadConeAssembly_YA" value=" 0." /> + +<var name="JDSH_PCAxbpos_PolyConeAssembly_XB" value=" JDSH_CAPCwidt_PolyCone_width/2." /> +<var name="JDSH_PCAybpos_PolyConeAssembly_YB" value=" JDSH_CAPCleng_PolyCone_length" /> +<var name="JDSH_PCAxapos_PolyConeAssembly_XA" value=" JDSH_PCAxbpos_PolyConeAssembly_XB - JDSH_CAPCleng_PolyCone_length*tan(JDSH_CACOprAn_Cone_projectiveAngle*GENV_PiS180) " /> +<var name="JDSH_PCAyapos_PolyConeAssembly_YA" value=" 0." /> + +<var name="JDSH_CALCradi_LeadCone_Radius" value="JDSH_CABCouR2_BrassCone_outerRadius2 - (JDSH_CALCthic_LeadCone_thickness/2.)*sin(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180) " /> +<var name="JDSH_CALCposz_LeadCone_posz" value="JDSH_CABCthic_BrassCone_thickness - (JDSH_CALCthic_LeadCone_thickness/2.)*cos(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180) - cos((JDSH_CACOangx_ConeAssembly_angx+90.)*GENV_PiS180) * (JDSH_LCAybpos_LeadConeAssembly_YB-JDSH_LCAyapos_LeadConeAssembly_YA)/2." /> + +<var name="JDSH_CAPCradi_PolyCone_Radius" value="JDSH_CABCouR2_BrassCone_outerRadius2 - (JDSH_CALCthic_LeadCone_thickness+JDSH_CAPCthic_PolyCone_thickness/2.)*sin(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180) " /> +<var name="JDSH_CAPCposz_PolyCone_posz" value="JDSH_CABCthic_BrassCone_thickness - (JDSH_CALCthic_LeadCone_thickness+JDSH_CAPCthic_PolyCone_thickness/2.)*cos(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180) - cos((JDSH_CACOangx_ConeAssembly_angx+90.)*GENV_PiS180) * (JDSH_PCAybpos_PolyConeAssembly_YB-JDSH_PCAyapos_PolyConeAssembly_YA)/2. " /> + +<var name="JDSH_i1" value="JDSH_CALCradi_LeadCone_Radius+(JDSH_LCAybpos_LeadConeAssembly_YB-JDSH_LCAyapos_LeadConeAssembly_YA)/2.*cos(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180)" /> +<array name="JDSH_LCApx" values="JDSH_i1;JDSH_i1*GENV_Co225;JDSH_i1*GENV_Co45;JDSH_i1*GENV_Si225;0.;-JDSH_i1*GENV_Si225;-JDSH_i1*GENV_Co45;-JDSH_i1*GENV_Co225;-JDSH_i1;-JDSH_i1*GENV_Co225;-JDSH_i1*GENV_Co45;-JDSH_i1*GENV_Si225;0.;JDSH_i1*GENV_Si225;JDSH_i1*GENV_Co45;JDSH_i1*GENV_Co225"/> +<array name="JDSH_LCApy" values="0.;JDSH_i1*GENV_Si225;JDSH_i1*GENV_Si45;JDSH_i1*GENV_Co225;JDSH_i1;JDSH_i1*GENV_Co225;JDSH_i1*GENV_Si45;JDSH_i1*GENV_Si225;0;-JDSH_i1*GENV_Si225;-JDSH_i1*GENV_Si45;-JDSH_i1*GENV_Co225;-JDSH_i1;-JDSH_i1*GENV_Co225;-JDSH_i1*GENV_Si45;-JDSH_i1*GENV_Si225"/> + +<var name="JDSH_i2" value="JDSH_CAPCradi_PolyCone_Radius+(JDSH_PCAybpos_PolyConeAssembly_YB-JDSH_PCAyapos_PolyConeAssembly_YA)/2.*cos(JDSH_CABCslAn_BrassCone_slopeAngle*GENV_PiS180)" /> +<array name="JDSH_PCApx" values="JDSH_i2;JDSH_i2*GENV_Co225;JDSH_i2*GENV_Co45;JDSH_i2*GENV_Si225;0.;-JDSH_i2*GENV_Si225;-JDSH_i2*GENV_Co45;-JDSH_i2*GENV_Co225;-JDSH_i2;-JDSH_i2*GENV_Co225;-JDSH_i2*GENV_Co45;-JDSH_i2*GENV_Si225;0.;JDSH_i2*GENV_Si225;JDSH_i2*GENV_Co45;JDSH_i2*GENV_Co225"/> +<array name="JDSH_PCApy" values="0.;JDSH_i2*GENV_Si225;JDSH_i2*GENV_Si45;JDSH_i2*GENV_Co225;JDSH_i2;JDSH_i2*GENV_Co225;JDSH_i2*GENV_Si45;JDSH_i2*GENV_Si225;0.;-JDSH_i2*GENV_Si225;-JDSH_i2*GENV_Si45;-JDSH_i2*GENV_Co225;-JDSH_i2;-JDSH_i2*GENV_Co225;-JDSH_i2*GENV_Si45;-JDSH_i2*GENV_Si225"/> + +<var name="JDSH_PLUGinR2_Plug_innerRadius2" value=" JDSH_PLUGinR1_Plug_innerRadius1 + JDSH_PLUGleng_Plug_length *tan(JDSH_PLUGtiAn_Plug_tiltAngle*GENV_PiS180)" /> + +<!-- Modelization of Volumes --> + +<!-- Modelization of Front and Back disks --> +<tubs name="JDSH_FrontDisk" material="ShieldSteel" Rio_Z="JDSH_FDinnRad_FrontDisk_innerRadius; JDSH_FDoutRad_FrontDisk_outerRadius; JDSH_FDthickn_FrontDisk_thickness" /> + +<box name="JDSH_BackDisk_CutBox1" material="ShieldSteel" X_Y_Z=" 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight ; JDSH_BDcutdia_BackDisk_cutoutdiameter ; 2.*JDSH_BDthickn_BackDisk_thickness" /> +<tubs name="JDSH_BackDisk_InnerTube" material="ShieldSteel" Rio_Z=" 0. ; JDSH_BDinnRad_BackDisk_innerRadius ; 2*JDSH_BDthickn_BackDisk_thickness" /> +<tubs name="JDSH_BackDisk_CutTube" material="ShieldSteel" Rio_Z=" 0. ; JDSH_BDcutdia_BackDisk_cutoutdiameter/2. ; 2.*JDSH_BDthickn_BackDisk_thickness" /> + +<var name="JDSH_BD_GVXYPOS_posX3" value="GENV_Co225 * JDSH_BDloedle_BackDisk_loweredgelength + JDSH_BDhedlen_BackDisk_halfedgelength + GENV_Ta225 * ( GENV_Si225*JDSH_BDloedle_BackDisk_loweredgelength - (JDSH_BDhatohi_BackDisk_halftotalhight - (JDSH_BDhedlen_BackDisk_halfedgelength + 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight + JDSH_BDtbyoff_BackDisk_totbottomyoffset) ) )"/> + +<gvxysx name="JDSH_BackDisk_tmp" material="ShieldSteel" dZ="JDSH_BDthickn_BackDisk_thickness"> + <gvxy_point X_Y="JDSH_BDhedlen_BackDisk_halfedgelength; -JDSH_BDhatohi_BackDisk_halftotalhight " /> + <gvxy_point X_Y="GENV_Co225 * JDSH_BDloedle_BackDisk_loweredgelength + JDSH_BDhedlen_BackDisk_halfedgelength; GENV_Si225*JDSH_BDloedle_BackDisk_loweredgelength-JDSH_BDhatohi_BackDisk_halftotalhight " /> + <gvxy_point X_Y="JDSH_BD_GVXYPOS_posX3; - JDSH_BDhedlen_BackDisk_halfedgelength - 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight - JDSH_BDtbyoff_BackDisk_totbottomyoffset " /> + <gvxy_point X_Y="JDSH_BDfeyend_BackDisk_feetyend; - JDSH_BDhedlen_BackDisk_halfedgelength - 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight - JDSH_BDtbyoff_BackDisk_totbottomyoffset " /> + <gvxy_point X_Y="JDSH_BDfeyend_BackDisk_feetyend; -JDSH_BDhedlen_BackDisk_halfedgelength - 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight - JDSH_BDtbyoff_BackDisk_totbottomyoffset + JDSH_BDfeplhi_BackDisk_feetplatehight " /> + <gvxy_point X_Y="JDSH_BDfeyend_BackDisk_feetyend-JDSH_BDfecaxo_BackDisk_feetcavityxoffset; -JDSH_BDhedlen_BackDisk_halfedgelength - 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight - JDSH_BDtbyoff_BackDisk_totbottomyoffset + JDSH_BDpbyoff_BackDisk_partbottomyoffset " /> + <gvxy_point X_Y="JDSH_BDfeyend_BackDisk_feetyend-JDSH_BDfecaxo_BackDisk_feetcavityxoffset; -JDSH_BDhedlen_BackDisk_halfedgelength - 2.*JDSH_BDlophhi_BackDisk_lowparthalfhight " /> + <gvxy_point X_Y="JDSH_BDhatohi_BackDisk_halftotalhight; -JDSH_BDhedlen_BackDisk_halfedgelength " /> + <gvxy_point X_Y="JDSH_BDhatohi_BackDisk_halftotalhight; JDSH_BDhedlen_BackDisk_halfedgelength " /> + <gvxy_point X_Y="JDSH_BDhatohi_BackDisk_halftotalhight-GENV_Si225*(2.*JDSH_BDhedlen_BackDisk_halfedgelength); JDSH_BDhedlen_BackDisk_halfedgelength + GENV_Co225*(2.*JDSH_BDhedlen_BackDisk_halfedgelength) " /> + <gvxy_point X_Y="JDSH_BDhedlen_BackDisk_halfedgelength + GENV_Co225*(2.*JDSH_BDhedlen_BackDisk_halfedgelength); JDSH_BDhatohi_BackDisk_halftotalhight - GENV_Si225*(2.*JDSH_BDhedlen_BackDisk_halfedgelength) " /> + <gvxy_point X_Y="JDSH_BDhedlen_BackDisk_halfedgelength; JDSH_BDhatohi_BackDisk_halftotalhight " /> +</gvxysx> + +<subtraction name="JDSH_BackDisk"> + <posXYZ volume="JDSH_BackDisk_tmp" X_Y_Z="0. ; 0. ; 0." /> + <posXYZ volume="JDSH_BackDisk_InnerTube" X_Y_Z="0. ; 0. ; 0." /> + <posXYZ volume="JDSH_BackDisk_CutBox1" X_Y_Z=" JDSH_BDcuxoff_BackDisk_cutxoffset + JDSH_BDlophhi_BackDisk_lowparthalfhight ; JDSH_BDhatohi_BackDisk_halftotalhight-JDSH_BDcuyoff_BackDisk_cutyoffsetfromtop ; 0. " /> + <posXYZ volume="JDSH_BackDisk_CutTube" X_Y_Z=" JDSH_BDcuxoff_BackDisk_cutxoffset ; JDSH_BDhatohi_BackDisk_halftotalhight-JDSH_BDcuyoff_BackDisk_cutyoffsetfromtop ; 0. " /> +</subtraction> + +<!-- Modelization of Brass Cone Assembly --> +<pcon name="JDSH_BrassConeAssembly" material="ShieldBrass" > + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouRa_BrassCone_outerRadius ; 0." /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouRa_BrassCone_outerRadius ; JDSH_CABCthi1_BrassCone_thickness_inter1" /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouR1_BrassCone_outerRadius1 ; JDSH_CABCthi2_BrassCone_thickness2 " /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouR2_BrassCone_outerRadius2 ; JDSH_CABCthic_BrassCone_thickness " /> +</pcon> + +<pcon name="JDSH_BrassConeAssembly_NSW" material="ShieldBrass" > + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouRa_BrassCone_outerRadius - 30. ; 0." /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouRa_BrassCone_outerRadius - 30. ; JDSH_CABCthi1_BrassCone_thickness_inter1 + 10." /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouR2_BrassCone_outerRadius2 ; JDSH_CABCthi1_BrassCone_thickness_inter1 + 10." /> + <polyplane Rio_Z="JDSH_CABCinRa_BrassCone_innerRadius; JDSH_CABCouR2_BrassCone_outerRadius2 ; JDSH_CABCthic_BrassCone_thickness " /> +</pcon> + +<!-- Modelization of Lead Cone Element --> +<trd name="JDSH_LeadConeAssembly" material="Lead" Xmp_Ymp_Z="2.*JDSH_LCAxbpos_LeadConeAssembly_XB; 2.*JDSH_LCAxapos_LeadConeAssembly_XA; JDSH_CALCthic_LeadCone_thickness; JDSH_CALCthic_LeadCone_thickness; JDSH_LCAybpos_LeadConeAssembly_YB-JDSH_LCAyapos_LeadConeAssembly_YA" /> + +<pcon name="JDSH_LeadConeAssembly_NSW" material="Lead" > + <polyplane Rio_Z="JDSH_CABCouRa_BrassCone_outerRadius - 30. + GENV_Eps ; JDSH_CABCouRa_BrassCone_outerRadius + 5. ; 0." /> + <polyplane Rio_Z="JDSH_CABCouRa_BrassCone_outerRadius - 30. + GENV_Eps ; JDSH_CABCouRa_BrassCone_outerRadius + 5. ; JDSH_CAPCthic_PolyCone_thickness-40. + GENV_Eps + JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps" /> + <polyplane Rio_Z="JDSH_CABCouR2_BrassCone_outerRadius2 + 2.*GENV_Eps + 23.; JDSH_CABCouRa_BrassCone_outerRadius + 5. ; JDSH_CAPCthic_PolyCone_thickness-40. + GENV_Eps + JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps" /> + <polyplane Rio_Z="JDSH_CABCouR2_BrassCone_outerRadius2 + 2.*GENV_Eps + 23.; JDSH_CABCouRa_BrassCone_outerRadius + 5. ; JDSH_CAPCthic_PolyCone_thickness-40. + GENV_Eps + JDSH_CALCthic_LeadCone_thickness + JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps - 17." /> + <polyplane Rio_Z="JDSH_CABCouR2_BrassCone_outerRadius2 + 2.*GENV_Eps + 23.; JDSH_SWHoutR1_SmallWheelHub_outerRadius1; JDSH_CAPCthic_PolyCone_thickness-40. + GENV_Eps + JDSH_CALCthic_LeadCone_thickness + JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps - 17." /> + <polyplane Rio_Z="JDSH_CABCouR2_BrassCone_outerRadius2 + 2.*GENV_Eps + 23.; JDSH_SWHoutR1_SmallWheelHub_outerRadius1; JDSH_CABCthic_BrassCone_thickness " /> +</pcon> + +<!-- Modelization of Poly Cone Element --> +<trd name="JDSH_PolyConeAssembly" material="PolyBoronB2O3" Xmp_Ymp_Z="2.*JDSH_PCAxbpos_PolyConeAssembly_XB; 2.*JDSH_PCAxapos_PolyConeAssembly_XA; JDSH_CAPCthic_PolyCone_thickness; JDSH_CAPCthic_PolyCone_thickness; JDSH_PCAybpos_PolyConeAssembly_YB-JDSH_PCAyapos_PolyConeAssembly_YA" /> + +<pcon name="JDSH_PolyConeAssembly_NSW" material="PolyBoronB2O3" > + <polyplane Rio_Z=" JDSH_CABCouR2_BrassCone_outerRadius2+GENV_Eps; JDSH_CABCouRa_BrassCone_outerRadius - 30.; JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps" /> + <polyplane Rio_Z=" JDSH_CABCouR2_BrassCone_outerRadius2+GENV_Eps; JDSH_CABCouRa_BrassCone_outerRadius - 30.; JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps + JDSH_CAPCthic_PolyCone_thickness-40." /> + <polyplane Rio_Z=" JDSH_CABCouR2_BrassCone_outerRadius2+GENV_Eps; JDSH_CABCouR2_BrassCone_outerRadius2 + GENV_Eps + 23.; JDSH_CABCthi1_BrassCone_thickness_inter1 + 10. + GENV_Eps + JDSH_CAPCthic_PolyCone_thickness-40." /> + <polyplane Rio_Z=" JDSH_CABCouR2_BrassCone_outerRadius2+GENV_Eps; JDSH_CABCouR2_BrassCone_outerRadius2 + GENV_Eps + 23.; JDSH_CABCthic_BrassCone_thickness" /> +</pcon> + +<!-- Composition of JD Cone Assembly --> +<composition name="JDSH_ConeAssembly" > + <posXYZ volume="JDSH_BrassConeAssembly" X_Y_Z="0.;0.;0." rot="0.;0.;0." /> + <foreach index="I" begin="0" loops="16" > + <posXYZ volume="JDSH_LeadConeAssembly" X_Y_Z=" JDSH_LCApx[I];JDSH_LCApy[I];JDSH_CALCposz_LeadCone_posz" rot="JDSH_CACOangx_ConeAssembly_angx+90.;0.;JDSH_CACOangz[I]" /> + <posXYZ volume="JDSH_PolyConeAssembly" X_Y_Z=" JDSH_PCApx[I];JDSH_PCApy[I];JDSH_CAPCposz_PolyCone_posz" rot="JDSH_CACOangx_ConeAssembly_angx+90.;0.;JDSH_CACOangz[I]" /> + </foreach> +</composition> + +<composition name="JDSH_ConeAssembly_NSW" > + <posXYZ volume="JDSH_BrassConeAssembly_NSW" X_Y_Z=" 0.; 0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JDSH_LeadConeAssembly_NSW" X_Y_Z=" 0.; 0.; 0." rot="0.;0.;0." /> + <posXYZ volume="JDSH_PolyConeAssembly_NSW" X_Y_Z=" 0.; 0.; 0." rot="0.;0.;0." /> +</composition> + +<!-- Modelization of JD Tube --> +<pcon name="JDSH_Tube" material="ShieldSteel" > + <polyplane Rio_Z="JDSH_TUBEinRa_Tube_innerRadius;JDSH_TUBEOuR1_Tube_OuterRadius1;0." /> + <polyplane Rio_Z="JDSH_TUBEinRa_Tube_innerRadius;JDSH_TUBEOuR1_Tube_OuterRadius1;JDSH_TUBEslen_Tube_shortlength" /> + <polyplane Rio_Z="JDSH_TUBEinRa_Tube_innerRadius;JDSH_TUBEOuR2_Tube_OuterRadius2;JDSH_TUBEslen_Tube_shortlength+1." /> + <polyplane Rio_Z="JDSH_TUBEinRa_Tube_innerRadius;JDSH_TUBEOuR2_Tube_OuterRadius2;JDSH_TUBEleng_Tube_length" /> +</pcon> +<pcon name="JDSH_Plug" material="ShieldBrass" > + <polyplane Rio_Z="JDSH_PLUGinR2_Plug_innerRadius2;JDSH_PLUGouRa_Plug_OuterRadius;0." /> + <polyplane Rio_Z="JDSH_PLUGinR1_Plug_innerRadius1;JDSH_PLUGouRa_Plug_OuterRadius;JDSH_PLUGleng_Plug_length" /> +</pcon> +<pcon name="JDSH_SmallWheelHub" material="ShieldBrass" > + <polyplane Rio_Z="JDSH_SWHinnRa_SmallWheelHub_innerRadius;JDSH_SWHoutR1_SmallWheelHub_outerRadius1;0." /> + <polyplane Rio_Z="JDSH_SWHinnRa_SmallWheelHub_innerRadius;JDSH_SWHoutR2_SmallWheelHub_outerRadius2;JDSH_SWHlengt_SmallWheelHub_length" /> +</pcon> + +<tubs name="JDSH_SmallWheelHub_NSW" material="ShieldBrass" Rio_Z="JDSH_SWHinnRa_SmallWheelHub_innerRadius ; JDSH_SWHoutR1_SmallWheelHub_outerRadius1 - JDSH_SWHPthic_SmallWheelHub_Polythickness - JDSH_SWHLthic_SmallWheelHub_Leadthickness ; JDSH_SWHlengt_SmallWheelHub_length"/> + +<pcon name="JDSH_SmallWheelHubPoly" material="PolyBoronB2O3" > + <polyplane Rio_Z="JDSH_SWHoutR1_SmallWheelHub_outerRadius1 + GENV_Eps; JDSH_SWHoutR1_SmallWheelHub_outerRadius1 + JDSH_SWHPthic_SmallWheelHub_Polythickness; 0." /> + <polyplane Rio_Z="JDSH_SWHoutR2_SmallWheelHub_outerRadius2 + GENV_Eps; JDSH_SWHoutR2_SmallWheelHub_outerRadius2 + JDSH_SWHPthic_SmallWheelHub_Polythickness; JDSH_SWHlengt_SmallWheelHub_length" /> +</pcon> + +<tubs name="JDSH_SmallWheelHubPoly_NSW" material="PolyBoronB2O3" Rio_Z="JDSH_SWHoutR1_SmallWheelHub_outerRadius1 - JDSH_SWHPthic_SmallWheelHub_Polythickness - JDSH_SWHLthic_SmallWheelHub_Leadthickness + GENV_Eps ; JDSH_SWHoutR1_SmallWheelHub_outerRadius1 - JDSH_SWHLthic_SmallWheelHub_Leadthickness ; JDSH_SWHlengt_SmallWheelHub_length"/> + +<pcon name="JDSH_SmallWheelHubLead" material="Lead" > + <polyplane Rio_Z="JDSH_SWHoutR1_SmallWheelHub_outerRadius1 + JDSH_SWHPthic_SmallWheelHub_Polythickness + GENV_Eps; JDSH_SWHoutR1_SmallWheelHub_outerRadius1 + JDSH_SWHPthic_SmallWheelHub_Polythickness + JDSH_SWHLthic_SmallWheelHub_Leadthickness; 0." /> + <polyplane Rio_Z="JDSH_SWHoutR2_SmallWheelHub_outerRadius2 + JDSH_SWHPthic_SmallWheelHub_Polythickness + GENV_Eps; JDSH_SWHoutR2_SmallWheelHub_outerRadius2 + JDSH_SWHPthic_SmallWheelHub_Polythickness + JDSH_SWHLthic_SmallWheelHub_Leadthickness; JDSH_SWHlengt_SmallWheelHub_length" /> +</pcon> + +<tubs name="JDSH_SmallWheelHubLead_NSW" material="Lead" Rio_Z="JDSH_SWHoutR1_SmallWheelHub_outerRadius1 - JDSH_SWHLthic_SmallWheelHub_Leadthickness + GENV_Eps ; JDSH_SWHoutR1_SmallWheelHub_outerRadius1 ; JDSH_SWHlengt_SmallWheelHub_length"/> + +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- JD Shield Feet --> +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<var name="JDSH_MaRiFefxo_MainRibFeet_feetxoffset" value="JDSH_MaRiFefxl_MainRibFeet_feetxlength - JDSH_MaRiFemad_MainRibFeet_mainwidth/sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)" /> +<var name="JDSH_MaRiFeulp_MainRibFeet_upplenpro" value="JDSH_MaRiFeupl_MainRibFeet_upperlength*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)" /> +<var name="JDSH_MaRiFellp_MainRibFeet_lowlenpro" value="JDSH_MaRiFelol_MainRibFeet_lowerlength*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)" /> +<var name="JDSH_MaRiFeulp_MainRibFeet_upplenpro2" value="JDSH_MaRiFeupl_MainRibFeet_upperlength*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)" /> +<var name="JDSH_MaRiFellp_MainRibFeet_lowlenpro2" value="JDSH_MaRiFelol_MainRibFeet_lowerlength*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)" /> +<var name="JDSH_MaRiFetca_MainRibFeet_topcutangel" value="(asin((cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180) * JDSH_MaRiFeupl_MainRibFeet_upperlength -JDSH_MaRiFellp_MainRibFeet_lowlenpro - JDSH_MaRiFemad_MainRibFeet_mainwidth / sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)) / JDSH_MaRiFemad_MainRibFeet_mainwidth))" /> + +<!-- arbitrary parameters for cutting boxes --> +<var name="JDSH_MaRiCB1xw_MainCutBox1_xwidth" value=" 200. " /> +<var name="JDSH_MaRiCB1yw_MainCutBox1_ywidth" value=" 120. " /> +<var name="JDSH_MaRiCuBzw_MainCutBox_zwidth" value=" 600. " /> +<var name="JDSH_MaRiCB2xw_MainCutBox2_xwidth" value=" 2000. " /> +<var name="JDSH_MaRiCB2yw_MainCutBox2_ywidth" value=" JDSH_MaRiFuyle_MainRibFull_ylength " /> +<var name="JDSH_MaRiCB3yw_MainCutBox3_ywidth" value=" JDSH_MaRiFelol_MainRibFeet_lowerlength" /> +<var name="JDSH_MaRiCB3xw_MainCutBox3_xwidth" value=" 3000. " /> +<var name="JDSH_MaRiCB4yw_MainCutBox4_ywidth" value=" 4000. " /> + +<box name="JDSH_MainRib_basis" material="ShieldIron" X_Y_Z="JDSH_MaRiFuxle_MainRibFull_xlength; JDSH_MaRiFuyle_MainRibFull_ylength; JDSH_MaRiFewzw_MainRibFeet_wholezwidth" /> + +<box name="JDSH_MainRib_cutbox1" material="ShieldIron" X_Y_Z="JDSH_MaRiCB1xw_MainCutBox1_xwidth; JDSH_MaRiCB1yw_MainCutBox1_ywidth; JDSH_MaRiCuBzw_MainCutBox_zwidth" /> +<box name="JDSH_MainRib_cutbox2" material="ShieldIron" X_Y_Z="JDSH_MaRiCB2xw_MainCutBox2_xwidth; JDSH_MaRiCB2yw_MainCutBox2_ywidth; JDSH_MaRiFewzw_MainRibFeet_wholezwidth" /> +<box name="JDSH_MainRib_cutbox3" material="ShieldIron" X_Y_Z="JDSH_MaRiCB3xw_MainCutBox3_xwidth; JDSH_MaRiCB3yw_MainCutBox3_ywidth; JDSH_MaRiCuBzw_MainCutBox_zwidth" /> +<box name="JDSH_MainRib_cutbox4" material="ShieldIron" X_Y_Z="JDSH_MaRiCB3xw_MainCutBox3_xwidth; JDSH_MaRiCB4yw_MainCutBox4_ywidth; JDSH_MaRiCuBzw_MainCutBox_zwidth" /> +<box name="JDSH_MainRib_cutbox5" material="ShieldIron" X_Y_Z="JDSH_MaRiCB2xw_MainCutBox2_xwidth; JDSH_MaRiCB2yw_MainCutBox2_ywidth; JDSH_MaRiCuBzw_MainCutBox_zwidth" /> + +<var name="JDSH_MainRib_basis_PosX" value="(JDSH_MaRiFuxle_MainRibFull_xlength)/2." /> +<var name="JDSH_MainRib_basis_PosY" value="(JDSH_MaRiFuyle_MainRibFull_ylength)/2." /> +<var name="JDSH_MainRib_basis_PosZ" value="JDSH_MaRiFewzw_MainRibFeet_wholezwidth/2." /> + +<var name="JDSH_MainRib_cb1_PosX1" value="JDSH_MaRiFefxo_MainRibFeet_feetxoffset - JDSH_MaRiCB1xw_MainCutBox1_xwidth/2. " /> +<var name="JDSH_MainRib_cb1_PosY1" value="JDSH_MaRiFefyo_MainRibFeet_feetyoffset + JDSH_MaRiCB1yw_MainCutBox1_ywidth/2." /> + +<var name="JDSH_MainRib_cb1_PosX2" value="JDSH_MaRiFefxl_MainRibFeet_feetxlength + JDSH_MaRiCB1xw_MainCutBox1_xwidth/2." /> +<var name="JDSH_MainRib_cb1_PosY2" value="JDSH_MaRiFefyo_MainRibFeet_feetyoffset - JDSH_MaRiCB1yw_MainCutBox1_ywidth/2." /> + +<var name="JDSH_MainRib_cb2_PosX1" value="JDSH_MaRiCB2xw_MainCutBox2_xwidth/2. " /> +<var name="JDSH_MainRib_cb2_PosY1" value="(JDSH_MaRiCB2yw_MainCutBox2_ywidth*cos(-JDSH_MaRiFeayz_MainRibFeet_angleyzplane*GENV_PiS180)+JDSH_MaRiFewzw_MainRibFeet_wholezwidth*sin(-JDSH_MaRiFeayz_MainRibFeet_angleyzplane*GENV_PiS180))/2." /> +<var name="JDSH_MainRib_cb2_PosZ1" value="JDSH_MaRiFewzw_MainRibFeet_wholezwidth+(-JDSH_MaRiCB2yw_MainCutBox2_ywidth*sin(-JDSH_MaRiFeayz_MainRibFeet_angleyzplane*GENV_PiS180)+JDSH_MaRiFewzw_MainRibFeet_wholezwidth*cos(-JDSH_MaRiFeayz_MainRibFeet_angleyzplane*GENV_PiS180))/2." /> + +<var name="JDSH_MainRib_cb2_PosX2" value="JDSH_MaRiFuxle_MainRibFull_xlength+(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Co45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFearw_MainRibFeet_attredwidth)*GENV_Si45 " /> +<var name="JDSH_MainRib_cb2_PosY2" value="JDSH_MaRiFuyle_MainRibFull_ylength+(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Si45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFearw_MainRibFeet_attredwidth)*GENV_Co45 " /> + +<var name="JDSH_MainRib_cb2_PosX3" value="JDSH_MaRiFuxle_MainRibFull_xlength+(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Co45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFeatw_MainRibFeet_attribwidth)*GENV_Si45 " /> +<var name="JDSH_MainRib_cb2_PosY3" value="JDSH_MaRiFuyle_MainRibFull_ylength+(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Si45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFeatw_MainRibFeet_attribwidth)*GENV_Co45 " /> +<var name="JDSH_MainRib_cb2_PosZ3" value="JDSH_MaRiFewzw_MainRibFeet_wholezwidth/2.+JDSH_MaRiFeazw_MainRibFeet_attribzwidth " /> + +<var name="JDSH_MainRib_cb2_PosX4" value="JDSH_MaRiFuxle_MainRibFull_xlength-(JDSH_MaRiCB2xw_MainCutBox2_xwidth*cos(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180)*GENV_Co45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFeatw_MainRibFeet_attribwidth)*GENV_Si45+JDSH_MaRiFewzw_MainRibFeet_wholezwidth*sin(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180)*GENV_Si45/2. " /> +<var name="JDSH_MainRib_cb2_PosY4" value="JDSH_MaRiFuyle_MainRibFull_ylength-(JDSH_MaRiCB2xw_MainCutBox2_xwidth*cos(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180)*GENV_Si45)/2.-(JDSH_MaRiFerao_MainRibFeet_radialoffset+JDSH_MaRiFeatw_MainRibFeet_attribwidth)*GENV_Co45+JDSH_MaRiFewzw_MainRibFeet_wholezwidth*sin(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180)*GENV_Co45/2. " /> +<var name="JDSH_MainRib_cb2_PosZ4" value="(JDSH_MaRiCB2xw_MainCutBox2_xwidth*sin(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180)+JDSH_MaRiFewzw_MainRibFeet_wholezwidth*cos(JDSH_MaRiFeata_MainRibFeet_attribangle*GENV_PiS180))/2.+JDSH_MaRiFeazw_MainRibFeet_attribzwidth+JDSH_MaRiFeazo_MainRibFeet_attribzoffset " /> + +<var name="JDSH_MainRib_cb3_PosX" value="(JDSH_MaRiCB3xw_MainCutBox3_xwidth*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)+JDSH_MaRiCB3yw_MainCutBox3_ywidth*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180))/2. + JDSH_MaRiFefxl_MainRibFeet_feetxlength" /> +<var name="JDSH_MainRib_cb3_PosY" value="JDSH_MaRiFefyo_MainRibFeet_feetyoffset+(-JDSH_MaRiCB3xw_MainCutBox3_xwidth*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)+JDSH_MaRiCB3yw_MainCutBox3_ywidth*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180))/2." /> + +<var name="JDSH_MainRib_cb4_PosX1" value="(-JDSH_MaRiCB3xw_MainCutBox3_xwidth*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)+JDSH_MaRiCB4yw_MainCutBox4_ywidth*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180))/2. + JDSH_MaRiFefxo_MainRibFeet_feetxoffset " /> +<var name="JDSH_MainRib_cb4_PosY1" value="JDSH_MaRiFefyo_MainRibFeet_feetyoffset + (JDSH_MaRiCB3xw_MainCutBox3_xwidth*cos(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180)+JDSH_MaRiCB4yw_MainCutBox4_ywidth*sin(JDSH_MaRiFeaxy_MainRibFeet_anglexyplane*GENV_PiS180))/2." /> + +<var name="JDSH_MainRib_cb4_PosX2" value="(-JDSH_MaRiCB3xw_MainCutBox3_xwidth*GENV_Si45+JDSH_MaRiCB4yw_MainCutBox4_ywidth*GENV_Co45)/2.+JDSH_MaRiFefxl_MainRibFeet_feetxlength+JDSH_MaRiFellp_MainRibFeet_lowlenpro-JDSH_MaRiCB4yw_MainCutBox4_ywidth/2." /> +<var name="JDSH_MainRib_cb4_PosY2" value="-(JDSH_MaRiCB3xw_MainCutBox3_xwidth*GENV_Co45+JDSH_MaRiCB4yw_MainCutBox4_ywidth*GENV_Si45)/2.+JDSH_MaRiFefyo_MainRibFeet_feetyoffset+JDSH_MaRiFellp_MainRibFeet_lowlenpro2+JDSH_MaRiCB4yw_MainCutBox4_ywidth/2." /> +<var name="JDSH_MainRib_cb4_PosZ2" value="-JDSH_MaRiCuBzw_MainCutBox_zwidth/2.+JDSH_MaRiFeozw_MainRibFeet_offsetzwidth" /> + +<var name="JDSH_MainRib_cb5_PosX1" value="(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Co45-JDSH_MaRiCB2yw_MainCutBox2_ywidth*GENV_Si45)/2.+JDSH_MaRiFefxo_MainRibFeet_feetxoffset+JDSH_MaRiFeulp_MainRibFeet_upplenpro2 " /> +<var name="JDSH_MainRib_cb5_PosY1" value="(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Si45+JDSH_MaRiCB2yw_MainCutBox2_ywidth*GENV_Co45)/2.+JDSH_MaRiFefyo_MainRibFeet_feetyoffset+JDSH_MaRiFellp_MainRibFeet_lowlenpro2+JDSH_MaRiFemad_MainRibFeet_mainwidth*cos(JDSH_MaRiFetca_MainRibFeet_topcutangel)" /> + +<var name="JDSH_MainRib_cb5_PosX2" value="(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Co45+JDSH_MaRiCB2yw_MainCutBox2_ywidth*GENV_Si45)/2.+JDSH_MaRiFefxl_MainRibFeet_feetxlength+JDSH_MaRiFellp_MainRibFeet_lowlenpro " /> +<var name="JDSH_MainRib_cb5_PosY2" value="(JDSH_MaRiCB2xw_MainCutBox2_xwidth*GENV_Si45-JDSH_MaRiCB2yw_MainCutBox2_ywidth*GENV_Co45)/2.+JDSH_MaRiFellp_MainRibFeet_lowlenpro2+JDSH_MaRiFefyo_MainRibFeet_feetyoffset" /> + +<subtraction name="JDSH_MainRib_Left"> + <posXYZ volume="JDSH_MainRib_basis" X_Y_Z="JDSH_MainRib_basis_PosX; JDSH_MainRib_basis_PosY; JDSH_MainRib_basis_PosZ" /> + <posXYZ volume="JDSH_MainRib_cutbox1" X_Y_Z="JDSH_MainRib_cb1_PosX1 ; JDSH_MainRib_cb1_PosY1 ; JDSH_MainRib_basis_PosZ " /> + <posXYZ volume="JDSH_MainRib_cutbox1" X_Y_Z="JDSH_MainRib_cb1_PosX2 ; JDSH_MainRib_cb1_PosY2 ; JDSH_MainRib_basis_PosZ " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="JDSH_MainRib_cb2_PosX1 ; JDSH_MainRib_cb2_PosY1 ; JDSH_MainRib_cb2_PosZ1 " rot=" JDSH_MaRiFeayz_MainRibFeet_angleyzplane ; 0. ; 0. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="JDSH_MainRib_cb2_PosX2 ; JDSH_MainRib_cb2_PosY2 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; 45. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="JDSH_MainRib_cb2_PosX3 ; JDSH_MainRib_cb2_PosY3 ; JDSH_MainRib_cb2_PosZ3 " rot=" 0. ; 0. ; 45. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="JDSH_MainRib_cb2_PosX4 ; JDSH_MainRib_cb2_PosY4 ; JDSH_MainRib_cb2_PosZ4 " rot=" 0. ; JDSH_MaRiFeata_MainRibFeet_attribangle ; 45. " /> + <posXYZ volume="JDSH_MainRib_cutbox3" X_Y_Z="JDSH_MainRib_cb3_PosX ; JDSH_MainRib_cb3_PosY ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; JDSH_MaRiFeaxy_MainRibFeet_anglexyplane-90. " /> + <posXYZ volume="JDSH_MainRib_cutbox4" X_Y_Z="JDSH_MainRib_cb4_PosX1 ; JDSH_MainRib_cb4_PosY1 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; JDSH_MaRiFeaxy_MainRibFeet_anglexyplane-90. " /> + <posXYZ volume="JDSH_MainRib_cutbox4" X_Y_Z="JDSH_MainRib_cb4_PosX2 ; JDSH_MainRib_cb4_PosY2 ; JDSH_MainRib_cb4_PosZ2 " rot=" 0. ; 0. ; 45. " /> + <posXYZ volume="JDSH_MainRib_cutbox5" X_Y_Z="JDSH_MainRib_cb5_PosX1 ; JDSH_MainRib_cb5_PosY1 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; 45. " /> + <posXYZ volume="JDSH_MainRib_cutbox5" X_Y_Z="JDSH_MainRib_cb5_PosX2 ; JDSH_MainRib_cb5_PosY2 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; 45. " /> +</subtraction> + +<subtraction name="JDSH_MainRib_Right"> + <posXYZ volume="JDSH_MainRib_basis" X_Y_Z="-JDSH_MainRib_basis_PosX; JDSH_MainRib_basis_PosY; JDSH_MainRib_basis_PosZ" /> + <posXYZ volume="JDSH_MainRib_cutbox1" X_Y_Z="-JDSH_MainRib_cb1_PosX1 ; JDSH_MainRib_cb1_PosY1 ; JDSH_MainRib_basis_PosZ " /> + <posXYZ volume="JDSH_MainRib_cutbox1" X_Y_Z="-JDSH_MainRib_cb1_PosX2 ; JDSH_MainRib_cb1_PosY2 ; JDSH_MainRib_basis_PosZ " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="-JDSH_MainRib_cb2_PosX1 ; JDSH_MainRib_cb2_PosY1 ; JDSH_MainRib_cb2_PosZ1 " rot=" JDSH_MaRiFeayz_MainRibFeet_angleyzplane ; 0. ; 0. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="-JDSH_MainRib_cb2_PosX2 ; JDSH_MainRib_cb2_PosY2 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; -45. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="-JDSH_MainRib_cb2_PosX3 ; JDSH_MainRib_cb2_PosY3 ; JDSH_MainRib_cb2_PosZ3 " rot=" 0. ; 0. ; -45. " /> + <posXYZ volume="JDSH_MainRib_cutbox2" X_Y_Z="-JDSH_MainRib_cb2_PosX4 ; JDSH_MainRib_cb2_PosY4 ; JDSH_MainRib_cb2_PosZ4 " rot=" 0. ; -JDSH_MaRiFeata_MainRibFeet_attribangle ; -45. " /> + <posXYZ volume="JDSH_MainRib_cutbox3" X_Y_Z="-JDSH_MainRib_cb3_PosX ; JDSH_MainRib_cb3_PosY ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; -JDSH_MaRiFeaxy_MainRibFeet_anglexyplane-90. " /> + <posXYZ volume="JDSH_MainRib_cutbox4" X_Y_Z="-JDSH_MainRib_cb4_PosX1 ; JDSH_MainRib_cb4_PosY1 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; -JDSH_MaRiFeaxy_MainRibFeet_anglexyplane-90. " /> + <posXYZ volume="JDSH_MainRib_cutbox4" X_Y_Z="-JDSH_MainRib_cb4_PosX2 ; JDSH_MainRib_cb4_PosY2 ; JDSH_MainRib_cb4_PosZ2 " rot=" 0. ; 0. ; -45. " /> + <posXYZ volume="JDSH_MainRib_cutbox5" X_Y_Z="-JDSH_MainRib_cb5_PosX1 ; JDSH_MainRib_cb5_PosY1 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; -45. " /> + <posXYZ volume="JDSH_MainRib_cutbox5" X_Y_Z="-JDSH_MainRib_cb5_PosX2 ; JDSH_MainRib_cb5_PosY2 ; JDSH_MainRib_basis_PosZ " rot=" 0. ; 0. ; -45. " /> +</subtraction> + +<!-- BEGIN confirmation with atljd___0042-vAC (if no other comment) --> +<var name="JDSH_MaRiTPthi_MainRibTP_thickness" value=" 50. " /> +<var name="JDSH_MaRiTPful_MainRibTP_fulllength" value=" 1295. " /> +<var name="JDSH_MaRiTPblo_MainRibTP_biglenoff" value=" 985. " /> +<var name="JDSH_MaRiTPslo_MainRibTP_smalllenoff" value=" 229. " /> +<var name="JDSH_MaRiTPfuw_MainRibTP_fullwidth" value=" 855. " /> +<var name="JDSH_MaRiTPwof_MainRibTP_widthoffset" value=" 46. " /> +<var name="JDSH_MaRiTPrew_MainRibTP_reducedwidth" value=" 730. " /> +<var name="JDSH_MaRiBSPof_MainRibBS_loweroffset" value=" 588. " /> +<var name="JDSH_MainRib_Support_PosX" value=" 2640. " /> <!-- confirmed atljd___0028-vAC --> +<var name="JDSH_MainRib_Support_PosZoffset" value=" 905. " /> +<!-- END confirmation with atljd___0042-vAC --> + +<!-- BEGIN confirmation with atljd___0126-v0 (if no other comment) --> +<var name="JDSH_MaRiSPthi_MainRibSP_thickness" value=" 35. " /> +<var name="JDSH_MaRiSPfii_MainRibSP_firstincline" value=" 175. " /> +<var name="JDSH_MaRiSPsei_MainRibSP_secondincline" value=" 1346. " /> +<var name="JDSH_MaRiBPfhi_MainRibBP_fullheight" value=" 253. " /> +<var name="JDSH_MaRiBPmhi_MainRibBP_middleheight" value=" 180. " /> +<var name="JDSH_MaRiBPrhi_MainRibBP_reducedheight" value=" 100. " /> +<var name="JDSH_MaRiBPhbo_MainRibBP_heightbigoff" value=" 85. " /> +<var name="JDSH_MaRiBPhso_MainRibBP_heightsmalloff" value=" 40. " /> +<var name="JDSH_MaRiBPihs_MainRibBP_interheight1" value=" 160. " /> +<var name="JDSH_MaRiBPihb_MainRibBP_interheight2" value=" 166. " /> +<var name="JDSH_MaRiBPfii_MainRibBP_firstincline" value=" 149. " /> +<var name="JDSH_MaRiBPbso_MainRibBP_beginstepone" value=" 379. " /> +<var name="JDSH_MaRiBPeso_MainRibBP_endstepone" value=" 524. " /> +<var name="JDSH_MaRiBPbst_MainRibBP_beginsteptwo" value=" 1011.5 " /> +<var name="JDSH_MaRiBPest_MainRibBP_endsteptwo" value=" 1156.5 " /> +<var name="JDSH_MaRiBPsei_MainRibBP_secondincline" value=" 1386.5 " /> +<var name="JDSH_MaRiBPful_MainRibBP_fulllength" value=" 1536. " /> +<var name="JDSH_MaRiBSPid_MainRibBS_interdistance" value=" 356. " /> +<var name="JDSH_MaRiIPOle_MainRibIP_length" value=" 325. " /> +<!-- END confirmation with atljd___0126-v0 --> + +<var name="JDSH_RiAPRadi_RibAirPad_Radius" value=" 350. "/> <!-- equivalent to AECT_SupWheel_AirPad_Rad --> +<var name="JDSH_RiAPHigh_RibAirPad_Hight" value=" 125. "/> <!-- equivalent to AECT_SupWheel_AirPad_Hight --> +<var name="JDSH_RiAPFuDi_RibAirPad_FullDist" value=" 1880. "/> +<var name="JDSH_RiAPSupZ_RibAirPad_SuppDZ" value=" 290." /> + +<var name="JDSH_RiAPSupY_RibAirPad_SuppDY" value="-RAIL_Ypos_aboveJFSH + JDSH_MainRibFeet_PosY - 2.*JDSH_MaRiTPthi_MainRibTP_thickness - JDSH_RiAPHigh_RibAirPad_Hight "/> + +<box name="JDSH_MainRib_InterPlateOne" material="ShieldIron" X_Y_Z="JDSH_MaRiBSPid_MainRibBS_interdistance; JDSH_MaRiTPthi_MainRibTP_thickness; JDSH_MaRiIPOle_MainRibIP_length"/> +<box name="JDSH_MainRib_InterPlateTwo" material="ShieldIron" X_Y_Z="JDSH_MaRiBSPid_MainRibBS_interdistance; JDSH_MaRiTPthi_MainRibTP_thickness; JDSH_MaRiIPOle_MainRibIP_length-JDSH_MaRiBPful_MainRibBP_fulllength+JDSH_MaRiTPful_MainRibTP_fulllength"/> +<box name="JDSH_MainRib_InterPlateThree" material="ShieldIron" X_Y_Z="JDSH_MaRiBSPid_MainRibBS_interdistance; JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBPhso_MainRibBP_heightsmalloff; JDSH_MaRiBPful_MainRibBP_fulllength-JDSH_MaRiTPful_MainRibTP_fulllength"/> + +<box name="JDSH_MainRibSP_APSupp" material="ShieldIron" X_Y_Z=" JDSH_MaRiBSPid_MainRibBS_interdistance ; JDSH_RiAPSupY_RibAirPad_SuppDY ; JDSH_RiAPSupZ_RibAirPad_SuppDZ" /> +<tubs name="JDSH_MainRibAP_AirPad" material="ShieldIron" Rio_Z=" 0. ; JDSH_RiAPRadi_RibAirPad_Radius ; JDSH_RiAPHigh_RibAirPad_Hight" /> + +<gvxy name="JDSH_MainRib_TopPlate" material="ShieldIron" dZ="JDSH_MaRiTPthi_MainRibTP_thickness" > + <gvxy_point X_Y=" 0. ; 0. " /> + <gvxy_point X_Y=" 0. ; JDSH_MaRiTPblo_MainRibTP_biglenoff " /> + <gvxy_point X_Y=" JDSH_MaRiTPwof_MainRibTP_widthoffset ; JDSH_MaRiTPblo_MainRibTP_biglenoff " /> + <gvxy_point X_Y=" JDSH_MaRiTPwof_MainRibTP_widthoffset ; JDSH_MaRiTPful_MainRibTP_fulllength " /> + <gvxy_point X_Y=" JDSH_MaRiTPrew_MainRibTP_reducedwidth ; JDSH_MaRiTPful_MainRibTP_fulllength " /> + <gvxy_point X_Y=" JDSH_MaRiTPrew_MainRibTP_reducedwidth ; JDSH_MaRiTPslo_MainRibTP_smalllenoff " /> + <gvxy_point X_Y=" JDSH_MaRiTPfuw_MainRibTP_fullwidth ; JDSH_MaRiTPslo_MainRibTP_smalllenoff " /> + <gvxy_point X_Y=" JDSH_MaRiTPfuw_MainRibTP_fullwidth ; 0. " /> +</gvxy> + +<gvxy name="JDSH_MainRib_LargeSidePlate" material="ShieldIron" dZ="JDSH_MaRiTPthi_MainRibTP_thickness" > + <gvxy_point X_Y=" 0. ; 0. " /> + <gvxy_point X_Y=" 0. ; JDSH_MaRiBPhbo_MainRibBP_heightbigoff " /> + <gvxy_point X_Y=" JDSH_MaRiBPfii_MainRibBP_firstincline ; JDSH_MaRiBPihb_MainRibBP_interheight2 " /> + <gvxy_point X_Y=" JDSH_MaRiBPfii_MainRibBP_firstincline ; JDSH_MaRiBPfhi_MainRibBP_fullheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbso_MainRibBP_beginstepone ; JDSH_MaRiBPfhi_MainRibBP_fullheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbso_MainRibBP_beginstepone ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPeso_MainRibBP_endstepone ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPeso_MainRibBP_endstepone ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbst_MainRibBP_beginsteptwo ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbst_MainRibBP_beginsteptwo ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPest_MainRibBP_endsteptwo ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPest_MainRibBP_endsteptwo ; JDSH_MaRiBPfhi_MainRibBP_fullheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPsei_MainRibBP_secondincline ; JDSH_MaRiBPfhi_MainRibBP_fullheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPsei_MainRibBP_secondincline ; JDSH_MaRiBPihs_MainRibBP_interheight1 " /> + <gvxy_point X_Y=" JDSH_MaRiBPful_MainRibBP_fulllength ; JDSH_MaRiBPhbo_MainRibBP_heightbigoff " /> + <gvxy_point X_Y=" JDSH_MaRiBPful_MainRibBP_fulllength ; JDSH_MaRiBPhso_MainRibBP_heightsmalloff " /> + <gvxy_point X_Y=" JDSH_MaRiTPful_MainRibTP_fulllength ; JDSH_MaRiBPhso_MainRibBP_heightsmalloff " /> + <gvxy_point X_Y=" JDSH_MaRiTPful_MainRibTP_fulllength ; 0. " /> +</gvxy> + +<gvxy name="JDSH_MainRib_SmallSidePlate" material="ShieldIron" dZ="JDSH_MaRiSPthi_MainRibSP_thickness" > + <gvxy_point X_Y=" 0. ; 0. " /> + <gvxy_point X_Y=" 0. ; JDSH_MaRiBPhbo_MainRibBP_heightbigoff " /> + <gvxy_point X_Y=" JDSH_MaRiSPfii_MainRibSP_firstincline ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbso_MainRibBP_beginstepone ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbso_MainRibBP_beginstepone ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPeso_MainRibBP_endstepone ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPeso_MainRibBP_endstepone ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbst_MainRibBP_beginsteptwo ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPbst_MainRibBP_beginsteptwo ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPest_MainRibBP_endsteptwo ; JDSH_MaRiBPrhi_MainRibBP_reducedheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPest_MainRibBP_endsteptwo ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiSPsei_MainRibSP_secondincline ; JDSH_MaRiBPmhi_MainRibBP_middleheight " /> + <gvxy_point X_Y=" JDSH_MaRiBPful_MainRibBP_fulllength ; JDSH_MaRiBPhbo_MainRibBP_heightbigoff " /> + <gvxy_point X_Y=" JDSH_MaRiBPful_MainRibBP_fulllength ; JDSH_MaRiBPhso_MainRibBP_heightsmalloff " /> + <gvxy_point X_Y=" JDSH_MaRiTPful_MainRibTP_fulllength ; JDSH_MaRiBPhso_MainRibBP_heightsmalloff " /> + <gvxy_point X_Y=" JDSH_MaRiTPful_MainRibTP_fulllength ; 0. " /> +</gvxy> + +<composition name="JDSH_MainRib_Support_Right"> + <posXYZ volume="JDSH_MainRib_TopPlate" X_Y_Z="0 ; JDSH_MaRiTPthi_MainRibTP_thickness/2. ; 0" rot=" -90. ; 0. ; 0. " /> + <posXYZ volume="JDSH_MainRib_InterPlateOne" X_Y_Z="JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness/2.; -JDSH_MaRiIPOle_MainRibIP_length/2."/> + <posXYZ volume="JDSH_MainRib_InterPlateTwo" X_Y_Z="JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness/2.; (JDSH_MaRiIPOle_MainRibIP_length-JDSH_MaRiBPful_MainRibBP_fulllength-JDSH_MaRiTPful_MainRibTP_fulllength)/2."/> + <posXYZ volume="JDSH_MainRib_InterPlateThree" X_Y_Z="JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; (-JDSH_MaRiBPhso_MainRibBP_heightsmalloff-JDSH_MaRiTPthi_MainRibTP_thickness)/2.; -(JDSH_MaRiBPful_MainRibBP_fulllength+JDSH_MaRiTPful_MainRibTP_fulllength)/2."/> + <posXYZ volume="JDSH_MainRib_LargeSidePlate" X_Y_Z="JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness/2. ; 0 ; 0" rot=" 180. ; 90. ; 0. " /> + <posXYZ volume="JDSH_MainRib_SmallSidePlate" X_Y_Z="JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiBSPid_MainRibBS_interdistance-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiSPthi_MainRibSP_thickness/2. ; 0 ; 0" rot=" 180. ; 90. ; 0. " /> + <posXYZ volume="JDSH_MainRibSP_APSupp" X_Y_Z=" JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. + JDSH_RiAPFuDi_RibAirPad_FullDist/2.-JDSH_RiAPRadi_RibAirPad_Radius "/> + <posXYZ volume="JDSH_MainRibSP_APSupp" X_Y_Z=" JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. - JDSH_RiAPFuDi_RibAirPad_FullDist/2.+JDSH_RiAPRadi_RibAirPad_Radius "/> + <posXYZ volume="JDSH_MainRibAP_AirPad" X_Y_Z=" JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY-JDSH_RiAPHigh_RibAirPad_Hight/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. + JDSH_RiAPFuDi_RibAirPad_FullDist/2.-JDSH_RiAPRadi_RibAirPad_Radius" rot=" 90. ; 0. ; 0. "/> + <posXYZ volume="JDSH_MainRibAP_AirPad" X_Y_Z=" JDSH_MaRiBSPof_MainRibBS_loweroffset-JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY-JDSH_RiAPHigh_RibAirPad_Hight/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. - JDSH_RiAPFuDi_RibAirPad_FullDist/2.+JDSH_RiAPRadi_RibAirPad_Radius" rot=" 90. ; 0. ; 0. "/> +</composition> + +<composition name="JDSH_MainRib_Support_Left"> + <posXYZ volume="JDSH_MainRib_TopPlate" X_Y_Z="0 ; JDSH_MaRiTPthi_MainRibTP_thickness/2. ; 0" rot=" -90. ; 0. ; 180. " /> + <posXYZ volume="JDSH_MainRib_InterPlateOne" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness/2.; -JDSH_MaRiIPOle_MainRibIP_length/2."/> + <posXYZ volume="JDSH_MainRib_InterPlateTwo" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness/2.; (JDSH_MaRiIPOle_MainRibIP_length-JDSH_MaRiBPful_MainRibBP_fulllength-JDSH_MaRiTPful_MainRibTP_fulllength)/2."/> + <posXYZ volume="JDSH_MainRib_InterPlateThree" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; (-JDSH_MaRiBPhso_MainRibBP_heightsmalloff-JDSH_MaRiTPthi_MainRibTP_thickness)/2.; -(JDSH_MaRiBPful_MainRibBP_fulllength+JDSH_MaRiTPful_MainRibTP_fulllength)/2."/> + <posXYZ volume="JDSH_MainRib_LargeSidePlate" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness/2. ; 0 ; 0" rot=" 180. ; 90. ; 0. " /> + <posXYZ volume="JDSH_MainRib_SmallSidePlate" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiBSPid_MainRibBS_interdistance+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiSPthi_MainRibSP_thickness/2. ; 0 ; 0" rot=" 180. ; 90. ; 0. " /> + <posXYZ volume="JDSH_MainRibSP_APSupp" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. + JDSH_RiAPFuDi_RibAirPad_FullDist/2.-JDSH_RiAPRadi_RibAirPad_Radius "/> + <posXYZ volume="JDSH_MainRibSP_APSupp" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. - JDSH_RiAPFuDi_RibAirPad_FullDist/2.+JDSH_RiAPRadi_RibAirPad_Radius "/> + <posXYZ volume="JDSH_MainRibAP_AirPad" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY-JDSH_RiAPHigh_RibAirPad_Hight/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. + JDSH_RiAPFuDi_RibAirPad_FullDist/2.-JDSH_RiAPRadi_RibAirPad_Radius" rot=" 90. ; 0. ; 0. "/> + <posXYZ volume="JDSH_MainRibAP_AirPad" X_Y_Z="-JDSH_MaRiBSPof_MainRibBS_loweroffset+JDSH_MaRiTPthi_MainRibTP_thickness+JDSH_MaRiBSPid_MainRibBS_interdistance/2.; -JDSH_MaRiTPthi_MainRibTP_thickness-JDSH_RiAPSupY_RibAirPad_SuppDY-JDSH_RiAPHigh_RibAirPad_Hight/2.; -JDSH_MaRiBPful_MainRibBP_fulllength/2. - JDSH_RiAPFuDi_RibAirPad_FullDist/2.+JDSH_RiAPRadi_RibAirPad_Radius" rot=" 90. ; 0. ; 0. "/> +</composition> + +<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- Additional Shielding installed winter shutdown 2011/2012 --> +<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<!-- BEGIN confirmation with ATL-MH-ER-0024 (if no other comment) --> +<var name="JDSH_AddShield_OutRing_Lead_innerRad" value=" 730. " /> +<var name="JDSH_AddShield_OutRing_Lead_outerRad" value=" 749.5" /> +<var name="JDSH_AddShield_OutRing_Poly_innerRad" value=" 630. " /> +<var name="JDSH_AddShield_OutRing_Iron_innerRad" value=" 445. " /> +<var name="JDSH_AddShield_Zwidth" value=" 46. " /> +<!-- END confirmation with ATL-MH-ER-0024 --> + +<tubs name="JDSH_AddShield_Lead" material="Lead" Rio_Z=" JDSH_AddShield_OutRing_Lead_innerRad ; JDSH_AddShield_OutRing_Lead_outerRad ; JDSH_AddShield_Zwidth" /> +<tubs name="JDSH_AddShield_Poly" material="PolyBoronB4C" Rio_Z=" JDSH_AddShield_OutRing_Poly_innerRad ; JDSH_AddShield_OutRing_Lead_innerRad - GENV_Eps ; JDSH_AddShield_Zwidth" /> +<tubs name="JDSH_AddShield_Iron" material="ShieldIron" Rio_Z=" JDSH_AddShield_OutRing_Iron_innerRad ; JDSH_AddShield_OutRing_Poly_innerRad - GENV_Eps ; JDSH_AddShield_Zwidth" /> + +<!-- ++++++++++++++++++++++++++++++++++++++++++ --> +<!-- Additional Shielding installed for run 2 --> +<!-- ++++++++++++++++++++++++++++++++++++++++++ --> + +<!-- for documentation also see https://indico.cern.ch/event/299435/session/0/contribution/11/material/slides/1.pdf --> +<var name="JDSH_Run2_FrtInnRing_Poly_innerRad" value=" 850. " /> <!-- atujd___0003-v0 --> +<var name="JDSH_Run2_FrtInnRing_Poly_outerRad" value=" 950. " /> <!-- atujd___0003-v0 --> +<var name="JDSH_Run2_FrtInnRing_Poly_Zwidth" value=" 35. " /> <!-- sum of atujd___0003-v0 and atujd___0012-v0 (merge of 2 rings) --> +<var name="JDSH_Run2_FrtOutRing_Lead_Radthick" value=" 10. " /> <!-- atujd___0004-v0 --> +<var name="JDSH_Run2_FrtOutRing_Lead_Zwidth" value=" 34. " /> <!-- atujd___0004-v0 --> +<var name="JDSH_Run2_FrtCoverRg_Iron_Radthick" value=" 1. " /> <!-- atujd___0010-v0 --> +<var name="JDSH_Run2_FrtCoverRg_Iron_TotRadtk" value=" 25. " /> <!-- atujd___0010-v0 --> +<var name="JDSH_Run2_FrtZposition" value=" 47.9" /> <!-- presentation above says 53. however adjusted to calo in sim --> + +<tubs name="JDSH_Run2_FrtLeadRing" material="Lead" Rio_Z=" JDSH_Run2_FrtInnRing_Poly_outerRad+GENV_Eps ; JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick ; JDSH_Run2_FrtOutRing_Lead_Zwidth" /> +<tubs name="JDSH_Run2_FrtPolyRing" material="PolyBoron207HD5" Rio_Z=" JDSH_Run2_FrtInnRing_Poly_innerRad ; JDSH_Run2_FrtInnRing_Poly_outerRad ; JDSH_Run2_FrtInnRing_Poly_Zwidth" /> +<pcon name="JDSH_Run2_FrtIronRingCover" material="ShieldIron" > + <polyplane Rio_Z="JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps-JDSH_Run2_FrtCoverRg_Iron_TotRadtk; JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps; 0." /> + <polyplane Rio_Z="JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps-JDSH_Run2_FrtCoverRg_Iron_TotRadtk; JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps; -JDSH_Run2_FrtCoverRg_Iron_Radthick + GENV_Eps" /> + <polyplane Rio_Z="JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+GENV_Eps; JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps; - JDSH_Run2_FrtCoverRg_Iron_Radthick + GENV_Eps" /> + <polyplane Rio_Z="JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+GENV_Eps; JDSH_Run2_FrtInnRing_Poly_outerRad+JDSH_Run2_FrtOutRing_Lead_Radthick+JDSH_Run2_FrtCoverRg_Iron_Radthick+GENV_Eps; -JDSH_Run2_FrtOutRing_Lead_Zwidth - JDSH_Run2_FrtCoverRg_Iron_Radthick" /> +</pcon> + +<var name="JDSH_Run2_BckBckRing_Poly_innerRad" value=" 532.5" /> <!-- atujd___0023-v0 --> +<var name="JDSH_Run2_BckBckRing_Poly_outerRad" value=" 582.5" /> <!-- atujd___0023-v0 --> +<var name="JDSH_Run2_BckBckRing_Poly_Zwidth" value=" 200. " /> <!-- atujd___0023-v0 , 8*25 see presentation --> + +<var name="JDSH_Run2_BckFrtRing_Poly_innerRad" value=" 532.5" /> <!-- atujd___0022-v0 --> +<var name="JDSH_Run2_BckFrtRing_Poly_outerRad" value=" 800. " /> <!-- atujd___0022-v0 --> +<var name="JDSH_Run2_BckFrtRing_Poly_Zwidth" value=" 40. " /> <!-- sum atujd___0022-v0 and atujd___0021-v0 --> + +<tubs name="JDSH_Run2_BckBckRing" material="PolyBoron207HD5" Rio_Z=" JDSH_Run2_BckBckRing_Poly_innerRad ; JDSH_Run2_BckBckRing_Poly_outerRad ; JDSH_Run2_BckBckRing_Poly_Zwidth" /> +<tubs name="JDSH_Run2_BckFrtRing" material="PolyBoron207HD5" Rio_Z=" JDSH_Run2_BckFrtRing_Poly_innerRad ; JDSH_Run2_BckFrtRing_Poly_outerRad ; JDSH_Run2_BckFrtRing_Poly_Zwidth" /> + +<!-- name = JD Return Ring section name = "Shielding" --> + +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- JD Return Ring --> +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<!-- BEGIN confirmation with atljd___0146-vAA (if no other comment) --> +<var name="JDReturnH" value="220. " /> +<var name="JDReturnL" value="385. " /> +<var name="JDReturnW" value=" 25. " /> +<var name="JDReturnT" value="680. " /> +<var name="JDReturnS" value="604.5" /> +<var name="JDReturnD" value="310. " /> +<!-- END confirmation with atljd___0146-vAA --> +<var name="JDReturnO" value="114. " /> <!-- confirmed atljd___0147-vAA --> + + +<box name="JDReturnTra" material="ShieldIron" X_Y_Z="JDReturnL;2.*JDReturnW;JDReturnH" /> +<trd name="JDReturntop" material="ShieldIron" Xmp_Ymp_Z="JDReturnT ; JDReturnS ; JDReturnW ; JDReturnW ; JDReturnL " /> +<box name="JDReturnSubBox" material="ShieldIron" X_Y_Z="JDReturnT;JDReturnT; JDReturnT" /> + +<composition name="JDReturnR1"> + <posXYZ volume="JDReturnTra" X_Y_Z=" JDReturnD/2.;Zero;Zero " rot=" 0.; 90; 90"/> + <posXYZ volume="JDReturnTra" X_Y_Z="-JDReturnD/2.;Zero;Zero " rot=" 0.; 90; 90"/> +</composition> +<composition name="JDReturnRing1"> + <posXYZ volume="JDReturntop" X_Y_Z="Zero; JDReturnH/2.+JDReturnW/2.;Zero" rot=" 0.;270.; 0." /> + <posXYZ volume="JDReturntop" X_Y_Z="Zero;-JDReturnH/2.-JDReturnW/2.;Zero" rot=" 0.;270.; 0." /> + <posXYZ volume="JDReturnR1" X_Y_Z="Zero;Zero;Zero" rot=" 0.; 270.;0."/> +</composition> +<composition name="JDReturnRing0"> + <posXYZ volume="JDReturnRing1" X_Y_Z="JDSH_BDRRouRa_RetrunRing_outerRadius-JDReturnL/2. ; 0 ; -(JDReturnH+2.*JDReturnW)/2. " rot=" 90.; 0.; 0."/> +</composition> + +<subtraction name="JDReturntopS" > + <posXYZ volume="JDReturntop" X_Y_Z="0 ; 0. ; 0" rot=" 0. ; 0. ; 0. " /> + <posXYZ volume="JDReturnSubBox" X_Y_Z="JDReturnT*(GENV_Si225+GENV_Co225)/2.-JDReturnT/2.+JDReturnO ; 0. ; JDReturnT*(-GENV_Si225+GENV_Co225)/2.+JDReturnL/2. " rot=" 0. ; 22.5 ; 0. " /> +</subtraction> +<subtraction name="JDReturnR1S1"> + <posXYZ volume="JDReturnTra" X_Y_Z="JDReturnD/2.;Zero; Zero" rot=" 0.; 90; 90."/> + <posXYZ volume="JDReturnSubBox" X_Y_Z="JDReturnT*(GENV_Si225+GENV_Co225)/2.-JDReturnT/2.+JDReturnO ; 0. ; JDReturnT*(-GENV_Si225+GENV_Co225)/2.+JDReturnL/2. " rot=" 0. ; 22.5 ; 0. " /> +</subtraction> +<subtraction name="JDReturnR1S2"> + <posXYZ volume="JDReturnTra" X_Y_Z="-JDReturnD/2.;Zero; Zero" rot=" 0.; 90; 90."/> + <posXYZ volume="JDReturnSubBox" X_Y_Z="JDReturnT*(GENV_Si225+GENV_Co225)/2.-JDReturnT/2.+JDReturnO ; 0. ; JDReturnT*(-GENV_Si225+GENV_Co225)/2.+JDReturnL/2. " rot=" 0. ; 22.5 ; 0. " /> +</subtraction> +<composition name="JDReturnRing1S"> + <posXYZ volume="JDReturntopS" X_Y_Z="Zero; JDReturnH/2.+JDReturnW/2.;Zero" rot=" 0.;270.; 0."/> + <posXYZ volume="JDReturntopS" X_Y_Z="Zero;-JDReturnH/2.-JDReturnW/2.;Zero" rot=" 0.;270.; 0."/> + <posXYZ volume="JDReturnR1S1" X_Y_Z="Zero;Zero;Zero" rot=" 0.;270.; 0."/> + <posXYZ volume="JDReturnR1S2" X_Y_Z="Zero;Zero;Zero" rot=" 0.;270.; 0."/> +</composition> +<composition name="JDReturnRing0S"> + <posXYZ volume="JDReturnRing1S" X_Y_Z="JDSH_BDRRouRa_RetrunRing_outerRadius-JDReturnL/2. ; 0 ; -(JDReturnH+2.*JDReturnW)/2. " rot=" 90.; 0.; 0."/> +</composition> + +<composition name="JDReturnRing"> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 0. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 11.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 22.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 33.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 45. "/> + <posXYZ volume="JDReturnRing0S" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 67.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 78.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 90. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 101.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 112.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 123.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 135. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 146.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 157.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 168.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 180. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 191.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 202.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 213.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 225. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 236.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 247.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 258.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 270. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 281.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 292.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 303.75"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 315. "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 326.25"/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 337.5 "/> + <posXYZ volume="JDReturnRing0" X_Y_Z=" 0.; 0.;0" rot=" 0.; 0.; 348.75"/> +</composition> + +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- JD Shield Composition of volumes --> +<!-- +++++++++++++++++++++++++++++++++++++++++++++++++ --> + +<composition name="JDSH_ShieldAssembly_ASide_Base" > + <posXYZ volume="JDSH_FrontDisk" X_Y_Z="0.;0.;JDSH_FDzposit_FrontDisk_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_BackDisk" X_Y_Z="0.;0.;JDSH_BDzposit_BackDisk_Z" rot="0.;180.;0." /> + <posXYZ volume="JDSH_Tube" X_Y_Z="0.;0.;JDSH_TUBEzpos_Tube_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_Plug" X_Y_Z="0.;0.;JDSH_PLUGzpos_Plug_Z" rot="0.;0.;0." /> + <posXYZ volume="JDReturnRing" X_Y_Z="0.;0.;JDSH_BDzposit_BackDisk_Z-JDSH_BDthickn_BackDisk_thickness/2.-2.*JDReturnW-JDReturnH" rot="0.;180.;0." /> + <posXYZ volume="JDSH_MainRib_Support_Left" X_Y_Z=" -JDSH_MainRib_Support_PosX ; JDSH_MainRibFeet_PosY-JDSH_MaRiTPthi_MainRibTP_thickness ; JDSH_CAzposit_ConeAssembly_Z+JDSH_MainRib_Support_PosZoffset " /> + <posXYZ volume="JDSH_MainRib_Support_Right" X_Y_Z=" JDSH_MainRib_Support_PosX ; JDSH_MainRibFeet_PosY-JDSH_MaRiTPthi_MainRibTP_thickness ; JDSH_CAzposit_ConeAssembly_Z+JDSH_MainRib_Support_PosZoffset " /> +</composition> + +<composition name="JDSH_ShieldAssembly_ASide_2011" > + <posXYZ volume="JDSH_MainRib_Left" X_Y_Z=" -JDSH_MainRibFeet_PosX ; JDSH_MainRibFeet_PosY ; JDSH_CAzposit_ConeAssembly_Z " /> + <posXYZ volume="JDSH_MainRib_Right" X_Y_Z=" JDSH_MainRibFeet_PosX ; JDSH_MainRibFeet_PosY ; JDSH_CAzposit_ConeAssembly_Z " /> + <posXYZ volume="JDSH_ConeAssembly" X_Y_Z="0.;0.;JDSH_CAzposit_ConeAssembly_Z" /> + <posXYZ volume="JDSH_SmallWheelHub" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_SmallWheelHubPoly" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_SmallWheelHubLead" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_ShieldAssembly_ASide_Base" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_ShieldAssembly_ASide_2012" > + <posXYZ volume="JDSH_AddShield_Lead" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_AddShield_Poly" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_AddShield_Iron" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_ShieldAssembly_ASide_2011" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_ShieldAssembly_ASide" > + <posXYZ volume="JDSH_Run2_BckFrtRing" X_Y_Z="0.; 0.; JDSH_SWHzposi_SmallWheelHub_Z + JDSH_SWHlengt_SmallWheelHub_length + JDSH_Run2_BckFrtRing_Poly_Zwidth/2. + GENV_Eps" /> + <posXYZ volume="JDSH_Run2_BckBckRing" X_Y_Z="0.; 0.; JDSH_SWHzposi_SmallWheelHub_Z + JDSH_SWHlengt_SmallWheelHub_length + JDSH_Run2_BckFrtRing_Poly_Zwidth + JDSH_Run2_BckBckRing_Poly_Zwidth/2. + 2.*GENV_Eps" /> + <posXYZ volume="JDSH_Run2_FrtIronRingCover" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition+JDSH_Run2_FrtOutRing_Lead_Zwidth + 2.*JDSH_Run2_FrtCoverRg_Iron_Radthick" /> + <posXYZ volume="JDSH_Run2_FrtPolyRing" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition+JDSH_Run2_FrtInnRing_Poly_Zwidth/2." /> + <posXYZ volume="JDSH_Run2_FrtLeadRing" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition-JDSH_Run2_FrtOutRing_Lead_Zwidth/2.+JDSH_Run2_FrtInnRing_Poly_Zwidth" /> + <posXYZ volume="JDSH_ShieldAssembly_ASide_2012" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_ShieldAssembly_CSide_Base" > + <posXYZ volume="JDSH_FrontDisk" X_Y_Z="0.;0.;JDSH_FDzposit_FrontDisk_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_BackDisk" X_Y_Z="0.;0.;JDSH_BDzposit_BackDisk_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_Tube" X_Y_Z="0.;0.;JDSH_TUBEzpos_Tube_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_Plug" X_Y_Z="0.;0.;JDSH_PLUGzpos_Plug_Z" rot="0.;0.;0." /> + <posXYZ volume="JDReturnRing" X_Y_Z="0.;0.;JDSH_BDzposit_BackDisk_Z-JDSH_BDthickn_BackDisk_thickness/2." rot="0.;0.;0." /> + <posXYZ volume="JDSH_MainRib_Support_Left" X_Y_Z=" -JDSH_MainRib_Support_PosX ; JDSH_MainRibFeet_PosY-JDSH_MaRiTPthi_MainRibTP_thickness ; JDSH_CAzposit_ConeAssembly_Z+JDSH_MainRib_Support_PosZoffset " /> + <posXYZ volume="JDSH_MainRib_Support_Right" X_Y_Z=" JDSH_MainRib_Support_PosX ; JDSH_MainRibFeet_PosY-JDSH_MaRiTPthi_MainRibTP_thickness ; JDSH_CAzposit_ConeAssembly_Z+JDSH_MainRib_Support_PosZoffset " /> +</composition> + +<composition name="JDSH_ShieldAssembly_CSide_2011" > + <posXYZ volume="JDSH_MainRib_Left" X_Y_Z=" -JDSH_MainRibFeet_PosX ; JDSH_MainRibFeet_PosY ; JDSH_CAzposit_ConeAssembly_Z " /> + <posXYZ volume="JDSH_MainRib_Right" X_Y_Z=" JDSH_MainRibFeet_PosX ; JDSH_MainRibFeet_PosY ; JDSH_CAzposit_ConeAssembly_Z " /> + <posXYZ volume="JDSH_ConeAssembly" X_Y_Z="0.;0.;JDSH_CAzposit_ConeAssembly_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_SmallWheelHub" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_SmallWheelHubPoly" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_SmallWheelHubLead" X_Y_Z="0.;0.;JDSH_SWHzposi_SmallWheelHub_Z" rot="0.;0.;0." /> + <posXYZ volume="JDSH_ShieldAssembly_CSide_Base" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_ShieldAssembly_CSide_2012" > + <posXYZ volume="JDSH_AddShield_Lead" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_AddShield_Poly" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_AddShield_Iron" X_Y_Z="0.;0.; - JDSH_AddShield_Zwidth/2. - GENV_Eps" /> + <posXYZ volume="JDSH_ShieldAssembly_CSide_2011" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_ShieldAssembly_CSide" > + <posXYZ volume="JDSH_Run2_BckFrtRing" X_Y_Z="0.; 0.; JDSH_SWHzposi_SmallWheelHub_Z + JDSH_SWHlengt_SmallWheelHub_length + JDSH_Run2_BckFrtRing_Poly_Zwidth/2. + GENV_Eps" /> + <posXYZ volume="JDSH_Run2_BckBckRing" X_Y_Z="0.; 0.; JDSH_SWHzposi_SmallWheelHub_Z + JDSH_SWHlengt_SmallWheelHub_length + JDSH_Run2_BckFrtRing_Poly_Zwidth + JDSH_Run2_BckBckRing_Poly_Zwidth/2. + 2.*GENV_Eps" /> + <posXYZ volume="JDSH_Run2_FrtIronRingCover" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition+JDSH_Run2_FrtOutRing_Lead_Zwidth + 2.*JDSH_Run2_FrtCoverRg_Iron_Radthick" /> + <posXYZ volume="JDSH_Run2_FrtPolyRing" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition+JDSH_Run2_FrtInnRing_Poly_Zwidth/2." /> + <posXYZ volume="JDSH_Run2_FrtLeadRing" X_Y_Z="0.;0.; -JDSH_Run2_FrtZposition-JDSH_Run2_FrtOutRing_Lead_Zwidth/2.+JDSH_Run2_FrtInnRing_Poly_Zwidth" /> + <posXYZ volume="JDSH_ShieldAssembly_CSide_2012" X_Y_Z="0.;0.; 0." /> +</composition> + +<composition name="JDSH_Shield" > + <posXYZ volume="JDSH_ShieldAssembly_ASide" X_Y_Z="0.;0.; JDSH_NomiZpos_Nominal_zpos" rot="0.;0.;0." /> + <posXYZ volume="JDSH_ShieldAssembly_CSide" X_Y_Z="0.;0.;-JDSH_NomiZpos_Nominal_zpos" rot="0.;JDSH_rota180d_180degRotation;0." /> +</composition> + +<!-- name = JT Toroid Shielding section name = "Shielding" --> +<!-- Primary variables --> +<var name="JTSH_OPlength_OuterPlugs_length" value=" 4736. " /> <!-- confirmed atljt___0055-vAC --> +<!-- BEGIN confirmation with atljt___0059-vAB (if no other comment) --> +<var name="JTSH_OPinnRad_OuterPlugs_innerRadius" value=" 600. " /> +<var name="JTSH_OPinnRad_OuterPlugs_innerRadiusSmall" value=" 562.5" /> <!-- confirmed atljt___0056-vAC --> +<var name="JTSH_OPoutRad_OuterPlugs_outerRadius" value=" 802. " /> +<var name="JTSH_IPlength_InnerPlugs_length" value=" 3686. " /> <!-- confirmed atljt___0055-vAC --> +<var name="JTSH_IPinnRa1_InnerPlugs_innerRadius1" value=" 170.8" /> +<var name="JTSH_IPtiltAn_InnerPlugs_tiltAngle" value=" 1.1" /> +<var name="JTSH_IPzoffse_InnerPlugs_zoffset" value=" 1000. " /> +<var name="JTSH_PRlenoff_PolyRings_lengthoffset" value=" 67. " /> <!-- confirmed atljt___0055-vAC --> +<!-- END confirmation with atljt___0059-vAB --> +<!-- BEGIN confirmation with atljt___0052-vAA (if no other comment) --> +<var name="JTSH_PRinnRad_PolyRings_innerRadius" value=" 802. " /> +<var name="JTSH_PRinRaof_PolyRings_innerRadoff" value=" 15. " /> +<var name="JTSH_PRoutRad_PolyRings_outerRadius" value=" 857. " /> +<var name="JTSH_PRexttAn_PolyRings_extension_tiltAngle" value=" 18. " /> +<!-- END confirmation with atljt___0052-vAA --> +<var name="JTSH_PRipexle_PolyRings_IPextension_length" value=" 205. " /> <!-- confirmed atljt___0059-vAB --> +<var name="JTSH_zpositio_Shield_Z" value=" 7917. " /> <!-- atljt___0055-vAC says 7941. , TC says wrong by 3cm --> +<var name="JTSH_yrotatio_Shield_rotY" value=" 180. " /> <!-- NO CONFIRMATION NEEDED --> + +<var name="JTSH_IPinnRa2_InnerPlugs_innerRadius2" value="JTSH_IPinnRa1_InnerPlugs_innerRadius1 + JTSH_IPlength_InnerPlugs_length *tan(JTSH_IPtiltAn_InnerPlugs_tiltAngle*GENV_PiS180)"/> <!-- changed by Sven.Menke@CERN.CH Jul 2020 from JTSH_OPlength_OuterPlugs_length to JTSH_IPlength_InnerPlugs_length --> +<var name="JTSH_PRextzpo_PolyRings_extension_z" value="(JTSH_PRoutRad_PolyRings_outerRadius-JTSH_PRinnRad_PolyRings_innerRadius-JTSH_PRinRaof_PolyRings_innerRadoff)/tan(JTSH_PRexttAn_PolyRings_extension_tiltAngle*GENV_PiS180)"/> + +<var name="JTSH_OPzposi1_OuterPlugs_z1" value="JTSH_PRipexle_PolyRings_IPextension_length" /> +<var name="JTSH_OPzposi2_OuterPlugs_z2" value="JTSH_OPzposi1_OuterPlugs_z1+JTSH_OPlength_OuterPlugs_length" /> + +<var name="JTSH_IPzposi1_InnerPlugs_z1" value="JTSH_IPzoffse_InnerPlugs_zoffset" /> +<var name="JTSH_IPzposi2_InnerPlugs_z2" value="JTSH_IPzposi1_InnerPlugs_z1+JTSH_IPlength_InnerPlugs_length" /> + +<var name="JTSH_PRzposi1_PolyRings_z1" value="JTSH_OPzposi2_OuterPlugs_z2-JTSH_OPlength_OuterPlugs_length+JTSH_PRlenoff_PolyRings_lengthoffset" /> +<var name="JTSH_PRzposi2_PolyRings_z2" value="JTSH_OPzposi2_OuterPlugs_z2-JTSH_OPlength_OuterPlugs_length+JTSH_PRlenoff_PolyRings_lengthoffset+JTSH_PRextzpo_PolyRings_extension_z" /> +<var name="JTSH_PRzposi3_PolyRings_z3" value="JTSH_OPzposi2_OuterPlugs_z2" /> + +<!-- Modelization of JT Plugs (outer and inner combined) --> +<pcon name="JTSH_Plugs" material="ShieldIron" > + <polyplane Rio_Z="JTSH_OPinnRad_OuterPlugs_innerRadius;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_OPzposi1_OuterPlugs_z1" /> + <polyplane Rio_Z="JTSH_OPinnRad_OuterPlugs_innerRadius;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_IPzposi1_InnerPlugs_z1" /> + <polyplane Rio_Z="JTSH_IPinnRa1_InnerPlugs_innerRadius1;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_IPzposi1_InnerPlugs_z1" /> + <polyplane Rio_Z="JTSH_IPinnRa2_InnerPlugs_innerRadius2;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_IPzposi2_InnerPlugs_z2" /> + <polyplane Rio_Z="JTSH_OPinnRad_OuterPlugs_innerRadiusSmall;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_IPzposi2_InnerPlugs_z2" /> + <polyplane Rio_Z="JTSH_OPinnRad_OuterPlugs_innerRadiusSmall;JTSH_OPoutRad_OuterPlugs_outerRadius;JTSH_OPzposi2_OuterPlugs_z2" /> +</pcon> + +<pcon name="JTSH_PolyRings" material="PolyBoronB2O3" > + <polyplane Rio_Z="JTSH_PRinnRad_PolyRings_innerRadius;JTSH_PRinnRad_PolyRings_innerRadius+JTSH_PRinRaof_PolyRings_innerRadoff;JTSH_PRzposi1_PolyRings_z1" /> + <polyplane Rio_Z="JTSH_PRinnRad_PolyRings_innerRadius;JTSH_PRoutRad_PolyRings_outerRadius;JTSH_PRzposi2_PolyRings_z2" /> + <polyplane Rio_Z="JTSH_PRinnRad_PolyRings_innerRadius;JTSH_PRoutRad_PolyRings_outerRadius;JTSH_PRzposi3_PolyRings_z3" /> +</pcon> + +<!-- ************************************************************** + *** Installed for Run2 **** + ************************************************************** --> + +<var name="JTC_JTCC_JTCCommonAngle" value=" 66. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomRadYOffset" value=" 177. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomCenterCutX" value=" 300. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomCenterCutY" value="JTC_JTCB_JTCBottomCenterCutX" /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomSideCutY" value=" 400. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomBigRad" value=" 1500. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomBigX" value=" 1220. " /> <!-- atujt___0020-v0 --> +<var name="JTC_JTCB_JTCBottomBigZ" value=" 25. + 13. " /> <!-- atujt___0020-v0 , adjustments discussed with TC--> +<var name="JTC_JTCB_JTCBottomSmallRad" value=" 864.9" /> <!-- atujt___0022-v0 says 865. but overlaps with ECT_EV_CentralTube --> +<var name="JTC_JTCB_JTCBottomSmallX" value=" 610. " /> <!-- atujt___0022-v0 --> +<var name="JTC_JTCB_JTCBottomSmallZ" value=" 36. - 13. " /> <!-- atujt___0022-v0 , TC says distance to JF is 4cm, it's mounted on ECT --> + +<var name="JTC_JTCT_JTCTopInnerRad" value=" 522.5" /> <!-- atujt___0018-v0 --> +<var name="JTC_JTCT_JTCTopMediumRad" value=" 1050. " /> <!-- atujt___0029-v0 --> +<var name="JTC_JTCT_JTCTopOuterRad" value=" 1500. " /> <!-- atujt___0018-v0 --> +<var name="JTC_JTCT_JTCTopFullZ" value=" 65. + 10. " /> <!-- atujt___0018-v0 , adding 1cm to close gap to ECT, agreed with TC --> +<var name="JTC_JTCT_JTCTopThickZ" value=" 45. + 5. " /> <!-- atujt___0018-v0 , adding 5mm just to be a bit closer, agreed with TC--> +<var name="JTC_JTCT_JTCTopCenterXCut" value=" 374. " /> <!-- atujt___0026-v0 --> +<var name="JTC_JTCT_JTCTopSideCutY" value=" 395. " /> <!-- atujt___0026-v0 --> +<var name="JTC_JTCT_JTCTopRadYOff" value=" 161. " /> <!-- atujt___0026-v0 --> + +<var name="JTC_JTCB_BottomTiltedXOffset" value="tan(JTC_JTCC_JTCCommonAngle*GENV_PiS180)*(JTC_JTCB_JTCBottomSideCutY-JTC_JTCB_JTCBottomRadYOffset)"/> +<var name="JTC_JTCT_TopTiltedXOffset" value="tan(JTC_JTCC_JTCCommonAngle*GENV_PiS180)*(JTC_JTCT_JTCTopSideCutY-JTC_JTCT_JTCTopRadYOff)"/> + +<tubs name="JTC_JTCB_BottomBigTubeBase" material="PolyBoron207HD5" Rio_Z=" 0.; JTC_JTCB_JTCBottomBigRad; JTC_JTCB_JTCBottomBigZ" nbPhi="20" profile="180.; 180."/> +<tubs name="JTC_JTCB_BottomSmallTubeBase" material="PolyBoron207HD5" Rio_Z=" 0.; JTC_JTCB_JTCBottomSmallRad; JTC_JTCB_JTCBottomSmallZ" nbPhi="20" profile="180.; 180."/> +<tubs name="JTC_JTCB_BottomAuxCutTube" material="PolyBoron207HD5" Rio_Z=" 0.; JFSH_PLUGouRa_Plug_outerRadius+GENV_Eps; JTC_JTCT_JTCTopFullZ" /> + +<!-- not required since approximations in JFSH +box name="JTC_JTCB_BottomCentralCut" material="PolyBoron207HD5" X_Y_Z=" 2.*(JTC_JTCB_JTCBottomCenterCutX+GENV_Eps); JTC_JTCB_JTCBottomCenterCutY+2.*GENV_Eps; JTC_JTCB_JTCBottomBigZ+2.*GENV_Eps"/> +--> +<box name="JTC_JTCB_SideCut" material="PolyBoron207HD5" X_Y_Z=" 2.*JTC_JTCB_JTCBottomCenterCutX; JTC_JTCB_JTCBottomSideCutY+2.*GENV_Eps; JTC_JTCB_JTCBottomBigZ+4.*GENV_Eps"/> +<box name="JTC_JTCB_EndCut" material="PolyBoron207HD5" X_Y_Z=" JTC_JTCB_JTCBottomBigX; JTC_JTCB_JTCBottomBigRad+2.*GENV_Eps; JTC_JTCB_JTCBottomBigZ+6.*GENV_Eps"/> +<box name="JTC_JTCB_TiltCut" material="PolyBoron207HD5" X_Y_Z=" JTC_JTCB_JTCBottomBigRad; JTC_JTCB_JTCBottomBigRad; JTC_JTCT_JTCTopFullZ+8.*GENV_Eps"/> + +<subtraction name="JTC_JTCB_BottomBigTube"> + <posXYZ volume="JTC_JTCB_BottomBigTubeBase" X_Y_Z=" 0.; 0.; 0. " /> + <posXYZ volume="JTC_JTCB_BottomAuxCutTube" X_Y_Z=" 0.; 0.; 0. " /> +<!-- <posXYZ volume="JTC_JTCB_BottomCentralCut" X_Y_Z=" 0.; -JTC_JTCB_JTCBottomCenterCutY/2.+GENV_Eps; 0." /> --> + <posXYZ volume="JTC_JTCB_SideCut" X_Y_Z=" 2.*JTC_JTCB_JTCBottomCenterCutX; -JTC_JTCB_JTCBottomSideCutY/2.+GENV_Eps; 0." /> + <posXYZ volume="JTC_JTCB_SideCut" X_Y_Z=" -2.*JTC_JTCB_JTCBottomCenterCutX; -JTC_JTCB_JTCBottomSideCutY/2.+GENV_Eps; 0." /> + <posXYZ volume="JTC_JTCB_EndCut" X_Y_Z=" 1.5*JTC_JTCB_JTCBottomBigX; -JTC_JTCB_JTCBottomBigRad/2.; 0." /> + <posXYZ volume="JTC_JTCB_EndCut" X_Y_Z=" -1.5*JTC_JTCB_JTCBottomBigX; -JTC_JTCB_JTCBottomBigRad/2.; 0." /> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" -JTC_JTCB_BottomTiltedXOffset-cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCB_JTCBottomSideCutY+sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; 90.-JTC_JTCC_JTCCommonAngle"/> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" JTC_JTCB_BottomTiltedXOffset+cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCB_JTCBottomSideCutY+sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; -90.+JTC_JTCC_JTCCommonAngle"/> +</subtraction> + +<subtraction name="JTC_JTCB_BottomSmallTube"> + <posXYZ volume="JTC_JTCB_BottomSmallTubeBase" X_Y_Z=" 0.; 0.; 0. " /> + <posXYZ volume="JTC_JTCB_BottomAuxCutTube" X_Y_Z=" 0.; 0.; 0. " /> +<!-- <posXYZ volume="JTC_JTCB_BottomCentralCut" X_Y_Z=" 0.; -JTC_JTCB_JTCBottomCenterCutY/2.+GENV_Eps; 0." /> --> + <posXYZ volume="JTC_JTCB_SideCut" X_Y_Z=" 2.*JTC_JTCB_JTCBottomCenterCutX; -JTC_JTCB_JTCBottomSideCutY/2.+GENV_Eps; 0." /> + <posXYZ volume="JTC_JTCB_SideCut" X_Y_Z=" -2.*JTC_JTCB_JTCBottomCenterCutX; -JTC_JTCB_JTCBottomSideCutY/2.+GENV_Eps; 0." /> + <posXYZ volume="JTC_JTCB_EndCut" X_Y_Z=" 0.5*JTC_JTCB_JTCBottomBigX+JTC_JTCB_JTCBottomSmallX; -JTC_JTCB_JTCBottomBigRad/2.; 0." /> + <posXYZ volume="JTC_JTCB_EndCut" X_Y_Z=" -0.5*JTC_JTCB_JTCBottomBigX-JTC_JTCB_JTCBottomSmallX; -JTC_JTCB_JTCBottomBigRad/2.; 0." /> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" -JTC_JTCB_BottomTiltedXOffset-cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCB_JTCBottomSideCutY+sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; 90.-JTC_JTCC_JTCCommonAngle"/> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" JTC_JTCB_BottomTiltedXOffset+cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCB_JTCBottomSideCutY+sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; -90.+JTC_JTCC_JTCCommonAngle"/> +</subtraction> + +<tubs name="JTC_JTCT_TopTubeBase" material="PolyBoron207HD5" Rio_Z=" JTC_JTCT_JTCTopInnerRad; JTC_JTCT_JTCTopOuterRad; JTC_JTCT_JTCTopFullZ" nbPhi="25" /> +<tubs name="JTC_JTCT_TopCutTube" material="PolyBoron207HD5" Rio_Z=" 0.; JTC_JTCT_JTCTopMediumRad; JTC_JTCT_JTCTopFullZ-JTC_JTCT_JTCTopThickZ+GENV_Eps" nbPhi="25"/> + +<box name="JTC_JTCT_TopCentralCut" material="PolyBoron207HD5" X_Y_Z=" 2.*JTC_JTCT_JTCTopCenterXCut; JTC_JTCT_JTCTopOuterRad+2.*GENV_Eps; JTC_JTCT_JTCTopFullZ+4.*GENV_Eps"/> +<box name="JTC_JTCT_SideCut" material="PolyBoron207HD5" X_Y_Z=" 2.*JTC_JTCT_TopTiltedXOffset; JTC_JTCT_JTCTopOuterRad; JTC_JTCT_JTCTopFullZ+6.*GENV_Eps"/> + +<subtraction name="JTC_JTCT_TopTube"> + <posXYZ volume="JTC_JTCT_TopTubeBase" X_Y_Z=" 0.; 0.; 0. " /> + <posXYZ volume="JTC_JTCT_TopCutTube" X_Y_Z=" 0.; 0.; JTC_JTCT_JTCTopThickZ/2.+GENV_Eps" /> + <posXYZ volume="JTC_JTCT_TopCentralCut" X_Y_Z=" 0.; -JTC_JTCT_JTCTopOuterRad/2.-GENV_Eps; 0." /> + <posXYZ volume="JTC_JTCT_SideCut" X_Y_Z=" 0.; -JTC_JTCT_JTCTopOuterRad/2.-JTC_JTCT_JTCTopSideCutY; 0." /> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" JTC_JTCT_TopTiltedXOffset+sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCT_JTCTopSideCutY-cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; JTC_JTCC_JTCCommonAngle"/> + <posXYZ volume="JTC_JTCB_TiltCut" X_Y_Z=" -JTC_JTCT_TopTiltedXOffset-sin((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); -JTC_JTCT_JTCTopSideCutY-cos((45.-(90-JTC_JTCC_JTCCommonAngle))*GENV_PiS180)*JTC_JTCB_JTCBottomBigRad/sqrt(2.); 0." rot="0.; 0.; -JTC_JTCC_JTCCommonAngle"/> +</subtraction> + +<!-- Composition of JT Shields --> +<composition name="JTSH_ShieldElements" > + <posXYZ volume="JTSH_Plugs" X_Y_Z="0.;0.;0." rot="0.;0.;0." /> + <posXYZ volume="JTSH_PolyRings" X_Y_Z="0.;0.;0." rot="0.;0.;0." /> +</composition> + +<composition name="JTSH_Shield" > + <posXYZ volume="JTSH_ShieldElements" X_Y_Z="0.;0.; JTSH_zpositio_Shield_Z" rot="0.;0.;0." /> + <posXYZ volume="JTSH_ShieldElements" X_Y_Z="0.;0.;-JTSH_zpositio_Shield_Z" rot="0.;JTSH_yrotatio_Shield_rotY;0." /> + <posXYZ volume="JTC_JTCT_TopTube" X_Y_Z="0.;0.; JFSH_ECTnomiz_ECT_Nominal_zpos+JFSH_JFCMCzof_JFCMainCylinder_zoffset-JTC_JTCT_JTCTopFullZ/2.-GENV_Eps" rot="0.;JTSH_yrotatio_Shield_rotY;0." /> + <posXYZ volume="JTC_JTCT_TopTube" X_Y_Z="0.;0.;-JFSH_ECTnomiz_ECT_Nominal_zpos-JFSH_JFCMCzof_JFCMainCylinder_zoffset+JTC_JTCT_JTCTopFullZ/2.+GENV_Eps" rot="0.;0.;0." /> + <posXYZ volume="JTC_JTCB_BottomSmallTube" X_Y_Z="0.;0.;JTSH_OPzposi2_OuterPlugs_z2+JTSH_zpositio_Shield_Z+JTC_JTCB_JTCBottomSmallZ/2.+GENV_Eps" /> + <posXYZ volume="JTC_JTCB_BottomBigTube" X_Y_Z="0.;0.;JTSH_OPzposi2_OuterPlugs_z2+JTSH_zpositio_Shield_Z+JTC_JTCB_JTCBottomSmallZ+JTC_JTCB_JTCBottomBigZ/2.+2.*GENV_Eps"/> + <posXYZ volume="JTC_JTCB_BottomSmallTube" X_Y_Z="0.;0.;-(JTSH_OPzposi2_OuterPlugs_z2+JTSH_zpositio_Shield_Z+JTC_JTCB_JTCBottomSmallZ/2.+GENV_Eps)" /> + <posXYZ volume="JTC_JTCB_BottomBigTube" X_Y_Z="0.;0.;-(JTSH_OPzposi2_OuterPlugs_z2+JTSH_zpositio_Shield_Z+JTC_JTCB_JTCBottomSmallZ+JTC_JTCB_JTCBottomBigZ/2.+2.*GENV_Eps)"/> +</composition> + +</section> + + +<section name = "pp2" + version = "7.0" + date = "01-04-2010" + author = "new simplified pp2 by Jochen - old versions by Laurent, Andrea Dell'Acqua and Daniel Pomarede removed" + top_volume = "pp2"> + + +<!-- name = pp2 section name = "Services" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** ATLAS Services : ID Patch Panels PP2 **** + *** **** + ************************************************************** + ************************************************************** --> + +<!-- New Simplified PP2 - subboxes merged by Jochen Meyer--> + +<!-- variables for semi simplified boxes --> +<!-- sector 13 - one --> +<var name="IPP2_Sec13_Box1_z" value=" 520. " /> +<var name="IPP2_Sec13_Box1_x" value="1300. " /> +<var name="IPP2_Sec13_Box1_y" value=" 420. " /> + +<var name="IPP2_Sec13_Box2_z" value="IPP2_Sec13_Box1_z" /> +<var name="IPP2_Sec13_Box2_x" value="IPP2_Sec13_Box1_x/2." /> +<var name="IPP2_Sec13_Box2_y" value=" 450. " /> + +<!-- sector 13 - two --> +<var name="IPP2_Sec13_Box3_z" value=" 380. " /> +<var name="IPP2_Sec13_Box3_x" value=" 420. " /> +<var name="IPP2_Sec13_Box3_y" value=" 440. " /> + +<var name="IPP2_Sec13_Box4_z" value=" 700. " /> +<var name="IPP2_Sec13_Box4_x" value=" 400. " /> +<var name="IPP2_Sec13_Box4_y" value="IPP2_Sec13_Box3_y" /> + +<var name="IPP2_Sec13_Box5_z" value=" 590. " /> +<var name="IPP2_Sec13_Box5_x" value=" 540. " /> +<var name="IPP2_Sec13_Box5_y" value=" 170. " /> + +<var name="IPP2_Sec13_Box6_z" value=" 500. " /> +<var name="IPP2_Sec13_Box6_x" value=" 150. " /> +<var name="IPP2_Sec13_Box6_y" value=" 100. " /> + +<var name="IPP2_Sec13_xspace" value=" 37.5" /> + +<!-- sector 3 & 7 --> +<var name="IPP2_Sec37_Box1_z" value=" 610. " /> +<var name="IPP2_Sec37_Box1_x" value=" 520. " /> +<var name="IPP2_Sec37_Box1_y" value=" 850. " /> + +<var name="IPP2_Sec37_Box2_z" value=" 300. " /> +<var name="IPP2_Sec37_Box2_x" value="IPP2_Sec37_Box1_x" /> +<var name="IPP2_Sec37_Box2_y" value=" 420. " /> + +<var name="IPP2_Sec37_Box3_z" value=" 300. " /> +<var name="IPP2_Sec37_Box3_x" value=" 260. " /> +<var name="IPP2_Sec37_Box3_y" value=" 360. " /> + +<var name="IPP2_Sec37_Box4_z" value=" 360. " /> +<var name="IPP2_Sec37_Box4_x" value=" 560. " /> +<var name="IPP2_Sec37_Box4_y" value="IPP2_Sec37_Box3_y" /> + +<var name="IPP2_Sec37_Box5_z" value=" 120. " /> +<var name="IPP2_Sec37_Box5_x" value=" 320. " /> +<var name="IPP2_Sec37_Box5_y" value=" 120. " /> + +<var name="IPP2_Sec37_Box6_z" value=" 200. " /> +<var name="IPP2_Sec37_Box6_x" value=" 120. " /> +<var name="IPP2_Sec37_Box6_y" value=" 120. " /> + +<var name="IPP2_Sec37_xoffset" value=" 40. " /> + +<!-- sector 1 & 9 --> +<var name="IPP2_Sec19_Box1_z" value=" 610. " /> +<var name="IPP2_Sec19_Box1_x" value=" 520. " /> +<var name="IPP2_Sec19_Box1_y" value="1260. " /> + +<var name="IPP2_Sec19_Box2_z" value=" 300." /> +<var name="IPP2_Sec19_Box2_x" value=" 520." /> +<var name="IPP2_Sec19_Box2_y" value=" 850." /> + +<var name="IPP2_Sec19_Box3_z" value=" 420." /> +<var name="IPP2_Sec19_Box3_x" value=" 380." /> +<var name="IPP2_Sec19_Box3_y" value=" 710." /> + +<var name="IPP2_Sec19_Box4_z" value=" 400." /> +<var name="IPP2_Sec19_Box4_x" value=" 700." /> +<var name="IPP2_Sec19_Box4_y" value="IPP2_Sec19_Box3_y" /> + +<var name="IPP2_Sec19_Box5_z" value=" 110." /> +<var name="IPP2_Sec19_Box5_x" value=" 400." /> +<var name="IPP2_Sec19_Box5_y" value=" 100." /> + +<var name="IPP2_Sec19_Box2_yoffset" value=" 300." /> +<var name="IPP2_Sec19_xoffset" value="IPP2_Sec37_xoffset" /> + +<!-- universal floor --> +<var name="IPP2_UniFloor_x" value=" 900. "/> +<var name="IPP2_UniFloor_y" value=" 15. "/> +<var name="IPP2_UniFloor_z" value="1770. "/> + +<var name="IPP2_UniFl_Sec13Zshift" value=" 40. "/> + +<!-- coordinates --> +<var name="IPP2_xpos19" value="+5880. "/> +<var name="IPP2_ypos19" value="-1100. "/> +<var name="IPP2_zpos19" value="+2560. "/> +<var name="IPP2_xpos37" value="+4710. "/> +<var name="IPP2_ypos37" value="+3340. "/> +<var name="IPP2_zpos37" value="+2710. "/> +<var name="IPP2_xpos13_one" value=" 650. "/> +<var name="IPP2_ypos13_one" value="-6380. "/> +<var name="IPP2_zpos13_one" value="+3820. "/> +<var name="IPP2_xpos13_two" value=" +890. "/> +<var name="IPP2_ypos13_two" value="-6380. "/> +<var name="IPP2_zpos13_two" value="+2460. "/> + +<box name="IPP2_UniFloor" material="Aluminium4" X_Y_Z="IPP2_UniFloor_x; IPP2_UniFloor_y; IPP2_UniFloor_z" /> + +<box name="IPP2_Sec13_Box1" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box1_x; IPP2_Sec13_Box1_y; IPP2_Sec13_Box1_z" /> +<box name="IPP2_Sec13_Box2" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box2_x; IPP2_Sec13_Box2_y; IPP2_Sec13_Box2_z" /> +<box name="IPP2_Sec13_Box3" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box3_x; IPP2_Sec13_Box3_y; IPP2_Sec13_Box3_z" /> +<box name="IPP2_Sec13_Box4" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box4_x; IPP2_Sec13_Box4_y; IPP2_Sec13_Box4_z" /> +<box name="IPP2_Sec13_Box5" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box5_x; IPP2_Sec13_Box5_y; IPP2_Sec13_Box5_z" /> +<box name="IPP2_Sec13_Box6" material="Aluminium1" X_Y_Z="IPP2_Sec13_Box6_x; IPP2_Sec13_Box6_y; IPP2_Sec13_Box6_z" /> + +<box name="IPP2_Sec37_Box1" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box1_x; IPP2_Sec37_Box1_y; IPP2_Sec37_Box1_z" /> +<box name="IPP2_Sec37_Box2" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box2_x; IPP2_Sec37_Box2_y; IPP2_Sec37_Box2_z" /> +<box name="IPP2_Sec37_Box3" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box3_x; IPP2_Sec37_Box3_y; IPP2_Sec37_Box3_z" /> +<box name="IPP2_Sec37_Box4" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box4_x; IPP2_Sec37_Box4_y; IPP2_Sec37_Box4_z" /> +<box name="IPP2_Sec37_Box5" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box5_x; IPP2_Sec37_Box5_y; IPP2_Sec37_Box5_z" /> +<box name="IPP2_Sec37_Box6" material="Aluminium1" X_Y_Z="IPP2_Sec37_Box6_x; IPP2_Sec37_Box6_y; IPP2_Sec37_Box6_z" /> + +<box name="IPP2_Sec19_Box1" material="Aluminium1" X_Y_Z="IPP2_Sec19_Box1_x; IPP2_Sec19_Box1_y; IPP2_Sec19_Box1_z" /> +<box name="IPP2_Sec19_Box2" material="Aluminium1" X_Y_Z="IPP2_Sec19_Box2_x; IPP2_Sec19_Box2_y; IPP2_Sec19_Box2_z" /> +<box name="IPP2_Sec19_Box3" material="Aluminium1" X_Y_Z="IPP2_Sec19_Box3_x; IPP2_Sec19_Box3_y; IPP2_Sec19_Box3_z" /> +<box name="IPP2_Sec19_Box4" material="Aluminium1" X_Y_Z="IPP2_Sec19_Box4_x; IPP2_Sec19_Box4_y; IPP2_Sec19_Box4_z" /> +<box name="IPP2_Sec19_Box5" material="Aluminium1" X_Y_Z="IPP2_Sec19_Box5_x; IPP2_Sec19_Box5_y; IPP2_Sec19_Box5_z" /> + +<composition name="IPP2_Sec13_single_one"> + <posXYZ volume="IPP2_UniFloor" X_Y_Z="0.; -IPP2_UniFloor_y/2.; IPP2_UniFl_Sec13Zshift" rot="0.; 90.; 0." /> + <posXYZ volume="IPP2_Sec13_Box1" X_Y_Z="0.; IPP2_Sec13_Box1_y/2. + GENV_Eps; 0." /> + <posXYZ volume="IPP2_Sec13_Box2" X_Y_Z="0.; IPP2_Sec13_Box2_y/2. + IPP2_Sec13_Box1_y + 2.*GENV_Eps; 0." /> +</composition> + +<var name="IPP2_Sec13_length" value="(IPP2_Sec13_Box3_x + IPP2_Sec13_Box4_x + IPP2_Sec13_xspace)*2."/> + +<composition name="IPP2_Sec13_single_two_Cside"> + <posXYZ volume="IPP2_UniFloor" X_Y_Z="0.; -IPP2_UniFloor_y/2.; -IPP2_UniFl_Sec13Zshift" rot="0.; 90.; 0." /> + <posXYZ volume="IPP2_Sec13_Box3" X_Y_Z=" IPP2_Sec13_Box4_x + IPP2_Sec13_Box3_x/2. + IPP2_Sec13_xspace + GENV_Eps; IPP2_Sec13_Box3_y/2. + GENV_Eps; (IPP2_Sec13_Box3_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box4" X_Y_Z=" IPP2_Sec13_Box4_x/2. + IPP2_Sec13_xspace; IPP2_Sec13_Box4_y/2. + GENV_Eps; 0." /> + <posXYZ volume="IPP2_Sec13_Box3" X_Y_Z="-IPP2_Sec13_Box3_x/2. - IPP2_Sec13_xspace; IPP2_Sec13_Box3_y/2. + GENV_Eps; (IPP2_Sec13_Box3_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box4" X_Y_Z="-IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x/2. - IPP2_Sec13_xspace - GENV_Eps; IPP2_Sec13_Box4_y/2. + GENV_Eps; 0." /> + <posXYZ volume="IPP2_Sec13_Box5" X_Y_Z=" IPP2_Sec13_Box5_x/2. + IPP2_Sec13_xspace; IPP2_Sec13_Box3_y + IPP2_Sec13_Box5_y/2. + 2.*GENV_Eps; (IPP2_Sec13_Box5_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box6" X_Y_Z="-IPP2_Sec13_Box6_x/2. - IPP2_Sec13_xspace; IPP2_Sec13_Box3_y + IPP2_Sec13_Box6_y/2. + 2.*GENV_Eps; (IPP2_Sec13_Box6_z - IPP2_Sec13_Box4_z)/2." /> +</composition> + +<composition name="IPP2_Sec13_single_two_Aside"> + <posXYZ volume="IPP2_UniFloor" X_Y_Z="0.; -IPP2_UniFloor_y/2.; -IPP2_UniFl_Sec13Zshift" rot="0.; 90.; 0." /> + <posXYZ volume="IPP2_Sec13_Box3" X_Y_Z=" IPP2_Sec13_Box4_x + IPP2_Sec13_Box3_x/2. + IPP2_Sec13_xspace + GENV_Eps; IPP2_Sec13_Box3_y/2. + GENV_Eps; (IPP2_Sec13_Box3_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box4" X_Y_Z=" IPP2_Sec13_Box4_x/2. + IPP2_Sec13_xspace; IPP2_Sec13_Box4_y/2. + GENV_Eps; 0." /> + <posXYZ volume="IPP2_Sec13_Box3" X_Y_Z="-IPP2_Sec13_Box3_x/2. - IPP2_Sec13_xspace; IPP2_Sec13_Box3_y/2. + GENV_Eps; (IPP2_Sec13_Box3_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box4" X_Y_Z="-IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x/2. - IPP2_Sec13_xspace - GENV_Eps; IPP2_Sec13_Box4_y/2. + GENV_Eps; 0." /> + <posXYZ volume="IPP2_Sec13_Box5" X_Y_Z="-IPP2_Sec13_Box5_x/2. - IPP2_Sec13_xspace; IPP2_Sec13_Box3_y + IPP2_Sec13_Box5_y/2. + 2.*GENV_Eps; (IPP2_Sec13_Box5_z - IPP2_Sec13_Box4_z)/2." /> + <posXYZ volume="IPP2_Sec13_Box6" X_Y_Z=" IPP2_Sec13_Box6_x/2. + IPP2_Sec13_xspace; IPP2_Sec13_Box3_y + IPP2_Sec13_Box6_y/2. + 2.*GENV_Eps; (IPP2_Sec13_Box6_z - IPP2_Sec13_Box4_z)/2." /> +</composition> + +<var name="IPP_Sec37_length" value="IPP2_Sec37_Box1_z + IPP2_Sec37_Box2_z + IPP2_Sec13_Box3_x + IPP2_Sec13_Box4_x"/> + +<composition name="IPP2_Sec37_single"> + <posXYZ volume="IPP2_UniFloor" X_Y_Z="0.; -IPP2_UniFloor_y/2.; 0." rot="0.; 0.; 0." /> + <posXYZ volume="IPP2_Sec37_Box1" X_Y_Z="0.; IPP2_Sec37_Box1_y/2. + GENV_Eps; - IPP_Sec37_length/2. - 2.*GENV_Eps + IPP2_Sec37_Box1_z/2." /> + <posXYZ volume="IPP2_Sec37_Box2" X_Y_Z="0.; IPP2_Sec37_Box2_y/2. + GENV_Eps; - IPP_Sec37_length/2. - GENV_Eps + IPP2_Sec37_Box1_z + IPP2_Sec37_Box2_z/2." /> + <posXYZ volume="IPP2_Sec13_Box3" X_Y_Z="IPP2_Sec37_xoffset + (IPP2_Sec13_Box3_z-IPP2_Sec13_Box4_z)/2.; IPP2_Sec13_Box3_y/2. + GENV_Eps; IPP_Sec37_length/2. + 2.*GENV_Eps - IPP2_Sec13_Box3_x/2." rot="0.; 90.; 0."/> + <posXYZ volume="IPP2_Sec13_Box4" X_Y_Z="IPP2_Sec37_xoffset ; IPP2_Sec13_Box4_y/2. + GENV_Eps; IPP_Sec37_length/2. + GENV_Eps - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x/2." rot="0.; 90.; 0."/> + <posXYZ volume="IPP2_Sec37_Box3" X_Y_Z="IPP2_Sec37_xoffset + (-IPP2_Sec13_Box4_z + IPP2_Sec37_Box3_x)/2.; IPP2_Sec13_Box3_y + IPP2_Sec37_Box3_y/2. + 2.*GENV_Eps; IPP_Sec37_length/2. - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x + IPP2_Sec37_Box4_z + IPP2_Sec37_Box3_z/2. + 2.*GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box4" X_Y_Z="IPP2_Sec37_xoffset + (-IPP2_Sec13_Box4_z + IPP2_Sec37_Box4_x)/2.; IPP2_Sec13_Box4_y + IPP2_Sec37_Box4_y/2. + 2.*GENV_Eps; IPP_Sec37_length/2. - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x + IPP2_Sec37_Box4_z/2. + GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box5" X_Y_Z="IPP2_Sec37_xoffset - IPP2_Sec13_Box4_z/2. + IPP2_Sec37_Box3_x - IPP2_Sec37_Box6_x + IPP2_Sec37_Box5_x/2.; IPP2_Sec37_Box4_y + IPP2_Sec13_Box4_y + IPP2_Sec37_Box5_y/2. + 3.*GENV_Eps; IPP_Sec37_length/2. - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x + IPP2_Sec37_Box4_z - IPP2_Sec37_Box5_z/2. + GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box6" X_Y_Z="IPP2_Sec37_xoffset - IPP2_Sec13_Box4_z/2. + IPP2_Sec37_Box3_x - IPP2_Sec37_Box6_x/2.; IPP2_Sec37_Box4_y + IPP2_Sec13_Box4_y + IPP2_Sec37_Box5_y/2. + 3.*GENV_Eps; IPP_Sec37_length/2. - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x + IPP2_Sec37_Box4_z + IPP2_Sec37_Box6_z/2. + 2.*GENV_Eps" /> +</composition> + +<var name="IPP_Sec19_length" value="IPP2_Sec19_Box1_z + IPP2_Sec19_Box2_z + IPP2_Sec19_Box3_z + IPP2_Sec19_Box4_z"/> + +<composition name="IPP2_Sec19_single"> + <posXYZ volume="IPP2_UniFloor" X_Y_Z="0.; -IPP2_UniFloor_y/2.; 0." rot="0.; 0.; 0." /> + <posXYZ volume="IPP2_Sec19_Box1" X_Y_Z="0.; IPP2_Sec19_Box1_y/2. + GENV_Eps; - IPP_Sec19_length/2. - 2.*GENV_Eps + IPP2_Sec19_Box1_z/2." /> + <posXYZ volume="IPP2_Sec19_Box2" X_Y_Z="0.; IPP2_Sec19_Box2_y/2. + IPP2_Sec19_Box2_yoffset; - IPP_Sec19_length/2. - GENV_Eps + IPP2_Sec19_Box1_z + IPP2_Sec19_Box2_z/2." /> + <posXYZ volume="IPP2_Sec19_Box3" X_Y_Z="IPP2_Sec19_xoffset + (IPP2_Sec19_Box3_x - IPP2_Sec19_Box4_x)/2.; IPP2_Sec37_Box4_y + IPP2_Sec19_Box3_y/2. + 2.*GENV_Eps; IPP_Sec19_length/2. + 2.*GENV_Eps - IPP2_Sec19_Box3_z/2." /> + <posXYZ volume="IPP2_Sec19_Box4" X_Y_Z="IPP2_Sec19_xoffset; IPP2_Sec37_Box3_y + IPP2_Sec19_Box4_y/2. + 2.*GENV_Eps; IPP_Sec19_length/2. + GENV_Eps - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z/2." /> + <posXYZ volume="IPP2_Sec37_Box3" X_Y_Z="IPP2_Sec19_xoffset + (-IPP2_Sec19_Box4_x + IPP2_Sec37_Box3_x)/2.; IPP2_Sec37_Box3_y/2. + GENV_Eps; IPP_Sec19_length/2. - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z + IPP2_Sec37_Box4_z + IPP2_Sec37_Box3_z/2. + 2.*GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box4" X_Y_Z="IPP2_Sec19_xoffset + (-IPP2_Sec19_Box4_x + IPP2_Sec37_Box4_x)/2.; IPP2_Sec37_Box4_y/2. + GENV_Eps; IPP_Sec19_length/2. - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z + IPP2_Sec37_Box4_z/2. + GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box5" X_Y_Z="IPP2_Sec19_xoffset - IPP2_Sec19_Box4_x/2. + IPP2_Sec37_Box3_x - IPP2_Sec37_Box6_x + IPP2_Sec37_Box5_x/2.; IPP2_Sec37_Box4_y + IPP2_Sec19_Box4_y + IPP2_Sec37_Box5_y/2. + 3.*GENV_Eps; IPP_Sec19_length/2. - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z + IPP2_Sec37_Box4_z - IPP2_Sec37_Box5_z/2. + GENV_Eps" /> + <posXYZ volume="IPP2_Sec37_Box6" X_Y_Z="IPP2_Sec19_xoffset - IPP2_Sec19_Box4_x/2. + IPP2_Sec37_Box3_x - IPP2_Sec37_Box6_x/2.; IPP2_Sec37_Box4_y + IPP2_Sec19_Box4_y + IPP2_Sec37_Box5_y/2. + 3.*GENV_Eps; IPP_Sec19_length/2. - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z + IPP2_Sec37_Box4_z + IPP2_Sec37_Box6_z/2. + 2.*GENV_Eps" /> + <posXYZ volume="IPP2_Sec19_Box5" X_Y_Z="0.; IPP2_Sec37_Box4_y + IPP2_Sec19_Box4_y + IPP2_Sec19_Box5_y/2. + 3.*GENV_Eps; 3.*IPP2_Sec19_Box5_z/2." /> +</composition> + +<composition name="pp2"> + <posXYZ volume="IPP2_Sec13_single_one" X_Y_Z="IPP2_xpos13_one - IPP2_Sec13_Box1_x/2.; IPP2_ypos13_one; IPP2_zpos13_one + IPP2_Sec13_Box1_z/2."/> + <posXYZ volume="IPP2_Sec13_single_one" X_Y_Z="IPP2_xpos13_one - IPP2_Sec13_Box1_x/2.; IPP2_ypos13_one; -IPP2_zpos13_one - IPP2_Sec13_Box1_z/2." rot="0.; 180.; 0."/> + <posXYZ volume="IPP2_Sec13_single_two_Aside" X_Y_Z="IPP2_xpos13_two - IPP2_Sec13_length/2.; IPP2_ypos13_two; IPP2_zpos13_two + IPP2_Sec13_Box4_z/2."/> + <posXYZ volume="IPP2_Sec13_single_two_Cside" X_Y_Z="IPP2_xpos13_two - IPP2_Sec13_length/2.; IPP2_ypos13_two; -IPP2_zpos13_two - IPP2_Sec13_Box4_z/2." rot="0.; 180.; 0."/> + <posXYZ volume="IPP2_Sec37_single" X_Y_Z=" IPP2_xpos37 + IPP2_Sec13_Box4_z/2. - IPP2_Sec37_xoffset; IPP2_ypos37; IPP2_zpos37 - IPP_Sec37_length/2. + IPP2_Sec37_Box1_z + IPP2_Sec37_Box2_z + IPP2_Sec13_Box3_x + IPP2_Sec13_Box4_x"/> + <posXYZ volume="IPP2_Sec37_single" X_Y_Z=" IPP2_xpos37 + IPP2_Sec13_Box4_z/2. - IPP2_Sec37_xoffset; IPP2_ypos37; -IPP2_zpos37 + IPP_Sec37_length/2. - IPP2_Sec37_Box1_z - IPP2_Sec37_Box2_z - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x"/> + <posXYZ volume="IPP2_Sec37_single" X_Y_Z="-IPP2_xpos37 - IPP2_Sec13_Box4_z/2. + IPP2_Sec37_xoffset; IPP2_ypos37; IPP2_zpos37 - IPP_Sec37_length/2. + IPP2_Sec37_Box1_z + IPP2_Sec37_Box2_z + IPP2_Sec13_Box3_x + IPP2_Sec13_Box4_x" rot="0.; 180.; 0."/> + <posXYZ volume="IPP2_Sec37_single" X_Y_Z="-IPP2_xpos37 - IPP2_Sec13_Box4_z/2. + IPP2_Sec37_xoffset; IPP2_ypos37; -IPP2_zpos37 + IPP_Sec37_length/2. - IPP2_Sec37_Box1_z - IPP2_Sec37_Box2_z - IPP2_Sec13_Box3_x - IPP2_Sec13_Box4_x" rot="0.; 180.; 0."/> + <posXYZ volume="IPP2_Sec19_single" X_Y_Z=" IPP2_xpos19 + IPP2_Sec19_Box4_x/2. - IPP2_Sec37_xoffset; IPP2_ypos19; IPP2_zpos19 - IPP_Sec19_length/2. + IPP2_Sec19_Box1_z + IPP2_Sec19_Box2_z + IPP2_Sec19_Box3_z + IPP2_Sec19_Box4_z"/> + <posXYZ volume="IPP2_Sec19_single" X_Y_Z=" IPP2_xpos19 + IPP2_Sec19_Box4_x/2. - IPP2_Sec37_xoffset; IPP2_ypos19; -IPP2_zpos19 + IPP_Sec19_length/2. - IPP2_Sec19_Box1_z - IPP2_Sec19_Box2_z - IPP2_Sec37_Box4_z - IPP2_Sec37_Box3_z"/> + <posXYZ volume="IPP2_Sec19_single" X_Y_Z="-IPP2_xpos19 - IPP2_Sec19_Box4_x/2. + IPP2_Sec37_xoffset; IPP2_ypos19; IPP2_zpos19 - IPP_Sec19_length/2. + IPP2_Sec19_Box1_z + IPP2_Sec19_Box2_z + IPP2_Sec37_Box4_z + IPP2_Sec37_Box3_z" rot="0.; 180.; 0."/> + <posXYZ volume="IPP2_Sec19_single" X_Y_Z="-IPP2_xpos19 - IPP2_Sec19_Box4_x/2. + IPP2_Sec37_xoffset; IPP2_ypos19; -IPP2_zpos19 + IPP_Sec19_length/2. - IPP2_Sec19_Box1_z - IPP2_Sec19_Box2_z - IPP2_Sec19_Box3_z - IPP2_Sec19_Box4_z" rot="0.; 180.; 0."/> +</composition> + +</section> + +<section name = "Eta0Services" + version = "7.0" + date = "29 Mar 2010" + author = "Laurent Chevalier" + top_volume = "servicesAtZ0"> + +<!-- name = Eta0Services section name = "Services" --> +<!-- + ************************************************************** + *** **** + *** Services **** + *** **** + ************************************************************** +--> +<tubs name="EMCaloPipeI" material="Iron1" Rio_Z=" 310 ; 320; 5500" nbPhi="20" /> +<tubs name="EMCaloPipeO" material="Iron1" Rio_Z=" 190 ; 200; 1400" nbPhi="20" /> +<tubs name="CuivreCable" material="Aluminium2" Rio_Z=" 0.; 170; 5500" nbPhi="20" /> +<tubs name="CuivreCabl0" material="Aluminium2" Rio_Z=" 0.; 170; 5000" nbPhi="20" /> +<var name="SerStart" value="7500"/> +<var name="SerZ" value="-100"/> + +<composition name="services0" > <!-- modified positions to avoid overlap --> + <posXYZ volume="CuivreCable" X_Y_Z=" 0; 541 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCable" X_Y_Z=" 0; 181 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCable" X_Y_Z=" 0;-181 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCable" X_Y_Z=" 0;-541 ;SerZ" rot=" 0.;90.;0." /> +</composition> + +<composition name="services1" > + <posRPhiZ volume="services0" R_Phi_Z=" SerStart; Zero ; Zero" /> +</composition> + +<composition name="services2" > <!-- modified positions to avoid overlap --> + <posXYZ volume="CuivreCabl0" X_Y_Z=" 300; 541 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCabl0" X_Y_Z=" 300; 181 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCable" X_Y_Z=" 0;-181 ;SerZ" rot=" 0.;90.;0." /> + <posXYZ volume="CuivreCable" X_Y_Z=" 0;-541 ;SerZ" rot=" 0.;90.;0." /> +</composition> + +<composition name="services3" > + <posRPhiZ volume="services2" R_Phi_Z=" SerStart; Zero ; Zero" /> +</composition> + +<var name="FlChx" value="200"/> +<var name="FlChy" value="1000"/> +<var name="FlChz" value="3200"/> +<box name="Flexible" material="Aluminium1" X_Y_Z="FlChx;FlChy;FlChz" /> +<tubs name="Virage" material="Aluminium1" Rio_Z="800;1000;1000" profile="0;90" /> + +<composition name="FlexibleChain2"> + <posXYZ volume="Flexible" X_Y_Z=" FlChy-FlChx/2.; 0.; 0." /> + <posXYZ volume="Flexible" X_Y_Z=" -FlChz/2. ; 0.;FlChz/2.+FlChy-FlChx/2." rot=" 0.; 90.; 0." /> + <posXYZ volume="Flexible" X_Y_Z="-3*FlChz/2. ; 0.;FlChz/2.+FlChy-FlChx/2." rot=" 0.; 90.; 0." /> + <posXYZ volume="Virage" X_Y_Z=" 0.; 0.;FlChz/2." rot="90.; 0.; 0." /> +</composition> + +<composition name="servicesAtZ0" > + <posXYZ volume="EMCaloPipeI" X_Y_Z=" Zero; 7000 ; Zero" rot=" 90.; 0.;0." /> + <posXYZ volume="EMCaloPipeO" X_Y_Z=" Zero; -5000 ; 100" rot=" 90.; 0.;0." /> + <posXYZ volume="services1" X_Y_Z=" Zero; Zero ; Zero" rot=" 0.; 0.;0." /> + <posRPhiZ volume="services1" R_Phi_Z="Zero; 45 ; Zero" rot=" 0.; 0.;0." /> + <posRPhiZ volume="services1" R_Phi_Z="Zero; 135 ; Zero" rot=" 0.; 0.;0." /> + <posRPhiZ volume="services3" R_Phi_Z="Zero; 225 ; Zero" rot=" 0.; 0.;0." /> + <posRPhiZ volume="services3" R_Phi_Z="Zero; 315 ; Zero" rot="180.; 0.;0." /> + <posXYZ volume="FlexibleChain2" X_Y_Z=" -5440.;0.;-2750." /> + <posXYZ volume="FlexibleChain2" X_Y_Z=" -5440.;0.;+2750." rot="180.; 0.; 0."/> +</composition> +</section> + +<section name = "AccessPlatforms" + version = "7.0" + date = "21 Mar 2005" + author = "Laurent Chevalier, Daniel Pomarede" + top_volume = "MBAP_AccessPlatform"> + + +<!-- name = AccessPlatforms section name = "Services" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** ATLAS Access : Muon Barrel Access Platforms **** + *** **** + ************************************************************** + ************************************************************** --> +<!-- Design from ATLHXT__0001 --> + +<!-- Platform 1-2 positioned between Strut 1 and Strut 2 --> +<!-- Platform 2-3 positioned between Strut 2 and Strut 3 --> +<!-- Platform 3-4 positioned between Strut 3 and Strut 4 --> + +<!-- Platform dimensions --> +<var name="MBAP_P12s1dz1" value="3000." /> +<var name="MBAP_P12s1dz2" value="2500." /> +<var name="MBAP_P23s1dz1" value="2700." /> +<var name="MBAP_P23s1dz2" value="2200." /> +<var name="MBAP_P34s1dz1" value="2200." /> +<var name="MBAP_P34s1dz2" value="1700." /> + +<var name="MBAP_P14s3dz" value="8600." /> +<var name="MBAP_P14s3dx" value=" 540." /> + +<var name="MBAP_PLAs1dx1" value="1225." /> +<var name="MBAP_PLAs1dx2" value=" 600." /> +<var name="MBAP_PFLhe" value=" 1.5" /> + +<!-- Platform positions --> +<!-- sector 1 & 9 --> +<var name="MBAP_Ps01posx" value=" 7800." /> +<var name="MBAP_Ps01posy" value="-1200." /> +<!-- sector 11 & 15 --> +<var name="MBAP_Ps11posx" value=" 5000." /> +<var name="MBAP_Ps11posy" value="-6500." /> +<!-- sector 3 & 7 --> +<var name="MBAP_Ps14posx" value=" 6730." /> +<var name="MBAP_Ps14posy" value=" 5300." /> +<var name="MBAP_Ps14angz" value=" 45." /> + +<var name="MBAP_P12posz" value=" 3425." /> <!-- ??? could use (ABRT_Zvouss(5)+ABRT_Zvouss(6))/2. ??? --> +<var name="MBAP_P23posz" value=" 6691.25" /> <!-- ??? could use (ABRT_Zvouss(6)+ABRT_Zvouss(7))/2. ??? --> +<var name="MBAP_P34posz" value=" 9545." /> <!-- ??? could use (ABRT_Zvouss(7)+ABRT_Zvouss(8))/2. ??? --> + +<!-- Useful variables --> +<var name="MBAP_xyzref" value=" 0. " /> + +<!-- Modelization of floor of Platform --> + +<var name="MBAP_PFL12xa" value="MBAP_P12s1dz1/2." /> +<var name="MBAP_PFL23xa" value="MBAP_P23s1dz1/2." /> +<var name="MBAP_PFL34xa" value="MBAP_P34s1dz1/2." /> +<var name="MBAP_PFLya" value="MBAP_xyzref" /> + +<var name="MBAP_PFL12xb" value="MBAP_PFL12xa" /> +<var name="MBAP_PFL23xb" value="MBAP_PFL23xa" /> +<var name="MBAP_PFL34xb" value="MBAP_PFL34xa" /> +<var name="MBAP_PFLyb" value="MBAP_PLAs1dx2" /> + +<var name="MBAP_PFL12xc" value="MBAP_P12s1dz2/2." /> +<var name="MBAP_PFL23xc" value="MBAP_P23s1dz2/2." /> +<var name="MBAP_PFL34xc" value="MBAP_P34s1dz2/2." /> +<var name="MBAP_PFLyc" value="MBAP_PFLyb" /> + +<var name="MBAP_PFL12xd" value="MBAP_PFL12xc" /> +<var name="MBAP_PFL23xd" value="MBAP_PFL23xc" /> +<var name="MBAP_PFL34xd" value="MBAP_PFL34xc" /> +<var name="MBAP_PFLyd" value="MBAP_PLAs1dx1-GENV_Eps" /> + +<!-- sector 1 & 9 --> + +<gvxysx name="MBAP_PlatformFloor12s1s9" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL12xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL12xb;MBAP_PFLyb"/> + <gvxy_point X_Y="MBAP_PFL12xc;MBAP_PFLyc"/> + <gvxy_point X_Y="MBAP_PFL12xd;MBAP_PFLyd"/> +</gvxysx> + +<gvxysx name="MBAP_PlatformFloor23s1s9" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL23xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL23xb;MBAP_PFLyb"/> + <gvxy_point X_Y="MBAP_PFL23xc;MBAP_PFLyc"/> + <gvxy_point X_Y="MBAP_PFL23xd;MBAP_PFLyd"/> +</gvxysx> + +<gvxysx name="MBAP_PlatformFloor34s1s9" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL34xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL34xb;MBAP_PFLyb"/> + <gvxy_point X_Y="MBAP_PFL34xc;MBAP_PFLyc"/> + <gvxy_point X_Y="MBAP_PFL34xd;MBAP_PFLyd"/> +</gvxysx> + +<!-- sector 11 & 15 --> + +<gvxysx name="MBAP_PlatformFloor12s11s15" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL12xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL12xa;MBAP_PFLyd"/> +</gvxysx> + +<gvxysx name="MBAP_PlatformFloor23s11s15" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL23xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL23xa;MBAP_PFLyd"/> +</gvxysx> + +<gvxysx name="MBAP_PlatformFloor34s11s15" material="Aluminium4" dZ="MBAP_PFLhe" > + <gvxy_point X_Y="MBAP_PFL34xa;MBAP_PFLya"/> + <gvxy_point X_Y="MBAP_PFL34xa;MBAP_PFLyd"/> +</gvxysx> + +<!-- sector 3 & 7 --> + +<box name="MBAP_PlatformFloor14s3s7" material="Aluminium4" X_Y_Z="MBAP_P14s3dx;MBAP_PFLhe;MBAP_P14s3dz" /> + +<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ --> +<!-- Modelization of rambarde of Platforms 1-2, 2-3, 3-4 --> + +<!-- Primary variables --> + +<!-- Tubes radii --> +<var name="MBAP_PlatRaRo" value=" 17." /> + +<!-- Slanted Support for Platform 1-4 sector 3 & 7 --> +<!-- dimensions --> +<var name="MBAP_PSSs3dy1" value=" 242.5"/> +<var name="MBAP_PSSs3dy2" value=" 393." /> +<var name="MBAP_PSSs3dx1" value=" 393." /> + +<!-- absolute positions --> +<var name="MBAP_PSSs3zp1" value=" 1975. " /> <!-- could use ABRT_Zvouss(5) + 200 + 62.5 , see ATLHXT__0001 --> +<var name="MBAP_PSSs3zp6" value="10582.5" /> <!-- could use ABRT_Zvouss(8) - 200 - 62.5 , see ATLHXT__0001 --> + +<!-- Relative positions of Slanted Supports --> +<var name="MBAP_PSSzrp6" value="MBAP_PSSs3zp6-MBAP_PSSs3zp1" /> + +<!-- Bottom Frame Tube angle --> +<var name="MBAP_P14s3BFa" value="-atan(MBAP_PSSs3dy2/MBAP_PSSs3dx1)/GENV_PiS180" /> + +<!-- Floor Position, angle w.r.t Frame --> +<var name="MBAP_P14s3Fla" value="MBAP_P14s3BFa" /> +<var name="MBAP_P14s3Flx" value="-(MBAP_PSSs3dy1+MBAP_PSSs3dy2/2.)+(MBAP_PlatRaRo+MBAP_PFLhe/2.)*cos(MBAP_P14s3Fla*GENV_PiS180)" /> +<var name="MBAP_P14s3Fly" value="MBAP_PSSs3dx1/2.+(MBAP_PlatRaRo+MBAP_PFLhe/2.)*cos(MBAP_P14s3Fla*GENV_PiS180)" /> +<var name="MBAP_P14s3Flz" value="MBAP_PSSzrp6/2." /> + +<!-- Primary variables --> + +<!-- Supporting Frame --> +<!-- longitudinal and transverse beams --> + +<var name="AP13_SFBeamTh" value=" 8."/> <!-- Thickness --> +<var name="AP13_SFBeamHe" value=" 50."/> <!-- Height --> +<var name="AP13_SFBeamDx" value="100."/> <!-- Transverse Size (X-wise) --> + +<!-- Frame 12 (connect BT strut 1 - strut 2) --> + +<!-- Longitudinal and Transverse beam length / cf ATLHXT__0032 --> +<var name="AP13_Fr34Llen" value="2400."/> + +<!-- Longitudinal and Transverse Positions --> +<var name="AP13_Fr23xsp1" value="2160."/> <!-- separation of longitudinal beams along x --> +<var name="AP13_Fr34Tzof" value=" 615."/> <!-- offset transverse beams along z --> +<var name="AP13_Fr34Tzsp" value=" 840."/> <!-- separation of transverse beams along z --> + +<!-- Y-position --> +<var name="AP13_Fr12y" value="-9190."/> + +<!-- Modelization of beam --> +<var name="AP13_SFBeamXa" value="AP13_SFBeamDx/2."/> +<var name="AP13_SFBeamYa" value="0."/> +<var name="AP13_SFBeamXb" value="AP13_SFBeamXa"/> +<var name="AP13_SFBeamYb" value="AP13_SFBeamHe"/> +<var name="AP13_SFBeamXc" value="AP13_SFBeamXa-AP13_SFBeamTh"/> +<var name="AP13_SFBeamYc" value="AP13_SFBeamYb"/> +<var name="AP13_SFBeamXd" value="AP13_SFBeamXc"/> +<var name="AP13_SFBeamYd" value="AP13_SFBeamYa+AP13_SFBeamTh"/> + +<!-- Positions of beams --> +<var name="AP13_Fr23x1" value="AP13_Fr23xsp1/2.+AP13_SFBeamDx/2."/> +<var name="AP13_Fr12Typ" value="-AP13_SFBeamHe"/> <!-- Transversal beam y position --> +<var name="AP13_Fr34Tz1" value="-AP13_Fr34Llen/2.+ AP13_Fr34Tzof +AP13_SFBeamDx/2."/> <!-- Transversal beam z position --> +<var name="AP13_Fr34Tz2" value="AP13_Fr34Tz1 + AP13_Fr34Tzsp -AP13_SFBeamDx"/> <!-- Transversal beam z position --> + +<var name="PL05" value="2200."/> +<var name="DZS5" value="3000."/> + +<gvxysx name="MBAP_Sector05_Beam12Transversal" material="Aluminium" dZ="DZS5"> + <gvxy_point X_Y="AP13_SFBeamXa;AP13_SFBeamYa"/> + <gvxy_point X_Y="AP13_SFBeamXb;AP13_SFBeamYb"/> + <gvxy_point X_Y="AP13_SFBeamXc;AP13_SFBeamYc"/> + <gvxy_point X_Y="AP13_SFBeamXd;AP13_SFBeamYd"/> +</gvxysx> + +<gvxysx name="MBAP_Sector05_Beam34Longitudinal" material="Aluminium" dZ="PL05"> + <gvxy_point X_Y="AP13_SFBeamXa;AP13_SFBeamYa"/> + <gvxy_point X_Y="AP13_SFBeamXb;AP13_SFBeamYb"/> + <gvxy_point X_Y="AP13_SFBeamXc;AP13_SFBeamYc"/> + <gvxy_point X_Y="AP13_SFBeamXd;AP13_SFBeamYd"/> +</gvxysx> + +<!-- NEw simplify Platforms lc 24-03-10 --> + +<!-- sector 3 & 7 --> +<composition name="MBAP_AccessPlatform14s3s7AssemblyS"> + <posXYZ volume="MBAP_PlatformFloor14s3s7" X_Y_Z="MBAP_P14s3Flx;MBAP_P14s3Fly;MBAP_P14s3Flz" rot="0.;0.;MBAP_P14s3Fla"/> +</composition> +<composition name="MBAP_AccessPlatform14s3s7AssemblySymS"> + <posXYZ volume="MBAP_PlatformFloor14s3s7" X_Y_Z="MBAP_P14s3Flx;MBAP_P14s3Fly;-MBAP_P14s3Flz" rot="0.;0.;MBAP_P14s3Fla"/> +</composition> +<composition name="MBAP_AccessPlatform14s3s7_zplusS"> + <posXYZ volume="MBAP_AccessPlatform14s3s7AssemblyS" X_Y_Z=" MBAP_Ps14posx;MBAP_Ps14posy; MBAP_PSSs3zp1" rot="0.; 0.; MBAP_Ps14angz"/> +</composition> +<composition name="MBAP_AccessPlatform14s3s7Sym_zplusS"> + <posXYZ volume="MBAP_AccessPlatform14s3s7AssemblySymS" X_Y_Z=" MBAP_Ps14posx;MBAP_Ps14posy; -MBAP_PSSs3zp1" rot="0.; 0.; MBAP_Ps14angz"/> +</composition> +<composition name="MBAP_AccessPlatform14s3s7_zminusS"> + <posXYZ volume="MBAP_AccessPlatform14s3s7AssemblyS" X_Y_Z="-MBAP_Ps14posx;MBAP_Ps14posy;-MBAP_PSSs3zp1" rot="0.;180.;-MBAP_Ps14angz"/> +</composition> +<composition name="MBAP_AccessPlatform14s3s7Sym_zminusS"> + <posXYZ volume="MBAP_AccessPlatform14s3s7AssemblySymS" X_Y_Z="-MBAP_Ps14posx;MBAP_Ps14posy;MBAP_PSSs3zp1" rot="0.;180.;-MBAP_Ps14angz"/> +</composition> + + +<box name="MBAP_PlatformFloorS" material="Aluminium4" X_Y_Z="DZS5;MBAP_PFLhe;2*AP13_Fr23x1-65" /> +<composition name="MBAP_Sector05_Platform2"> + <posXYZ volume="MBAP_Sector05_Beam34Longitudinal" X_Y_Z=" AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector05_Beam34Longitudinal" X_Y_Z="-AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector05_Beam12Transversal" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz1" rot="0.;90.;0." /> + <posXYZ volume="MBAP_Sector05_Beam12Transversal" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz2" rot="0.;90.;0." /> + <posXYZ volume="MBAP_PlatformFloorS" X_Y_Z="0.;MBAP_PFLhe+0.1;0." /> +</composition> + +<var name="AP05" value="5370."/> + +<composition name="MBAP_Sector05S"> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; +5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; +1500."/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; +3700"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; -5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; -1500"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05; -3700"/> +</composition> + +<var name="AP05_MS" value="7650.1"/> +<composition name="MBAP_Sector05_MediumS"> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; +8100"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; +5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; +1500."/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; +3700"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; -5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; -8100"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; -1500"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP05_MS; -3700"/> +</composition> + +<var name="AP13_MS" value="-6700."/> +<composition name="MBAP_Sector13_MediumS"> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; +8100"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; +5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; +1500."/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; +3700"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; -5900"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; -8100"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; -1500"/> + <posXYZ volume="MBAP_Sector05_Platform2" X_Y_Z="0.;AP13_MS; -3700"/> +</composition> + +<gvxysx name="MBAP_Sector13_Beam12Transversal2" material="Aluminium" dZ="5000."> + <gvxy_point X_Y="AP13_SFBeamXa;AP13_SFBeamYa"/> + <gvxy_point X_Y="AP13_SFBeamXb;AP13_SFBeamYb"/> + <gvxy_point X_Y="AP13_SFBeamXc;AP13_SFBeamYc"/> + <gvxy_point X_Y="AP13_SFBeamXd;AP13_SFBeamYd"/> +</gvxysx> +<gvxysx name="MBAP_Sector13_Beam34Longitudinal2" material="Aluminium" dZ="5000"> + <gvxy_point X_Y="AP13_SFBeamXa;AP13_SFBeamYa"/> + <gvxy_point X_Y="AP13_SFBeamXb;AP13_SFBeamYb"/> + <gvxy_point X_Y="AP13_SFBeamXc;AP13_SFBeamYc"/> + <gvxy_point X_Y="AP13_SFBeamXd;AP13_SFBeamYd"/> +</gvxysx> +<gvxysx name="MBAP_Sector13_Beam34Longitudinal3" material="Aluminium" dZ="6000"> + <gvxy_point X_Y="AP13_SFBeamXa;AP13_SFBeamYa"/> + <gvxy_point X_Y="AP13_SFBeamXb;AP13_SFBeamYb"/> + <gvxy_point X_Y="AP13_SFBeamXc;AP13_SFBeamYc"/> + <gvxy_point X_Y="AP13_SFBeamXd;AP13_SFBeamYd"/> +</gvxysx> +<box name="MBAP_PlatformFloorS2" material="Aluminium4" X_Y_Z="DZS5+1700;MBAP_PFLhe; 6000." /> +<composition name="MBAP_Sector13_Platform3"> + <posXYZ volume="MBAP_Sector13_Beam34Longitudinal3" X_Y_Z=" AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector13_Beam34Longitudinal3" X_Y_Z="-AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector13_Beam12Transversal2" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz1" rot="0.;90.;0." /> + <posXYZ volume="MBAP_Sector13_Beam12Transversal2" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz2" rot="0.;90.;0." /> + <posXYZ volume="MBAP_PlatformFloorS2" X_Y_Z="0.;MBAP_PFLhe;0." /> +</composition> +<box name="MBAP_PlatformFloorS3" material="Aluminium4" X_Y_Z="DZS5+1700;MBAP_PFLhe; 4900." /> +<composition name="MBAP_Sector13_Platform2"> + <posXYZ volume="MBAP_Sector13_Beam34Longitudinal2" X_Y_Z=" AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector13_Beam34Longitudinal2" X_Y_Z="-AP13_Fr23x1;2.*MBAP_PFLhe;0." /> + <posXYZ volume="MBAP_Sector13_Beam12Transversal2" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz1" rot="0.;90.;0." /> + <posXYZ volume="MBAP_Sector13_Beam12Transversal2" X_Y_Z="0.;AP13_Fr12Typ; AP13_Fr34Tz2" rot="0.;90.;0." /> + <posXYZ volume="MBAP_PlatformFloorS3" X_Y_Z="0.;MBAP_PFLhe;0." /> +</composition> + +<composition name="MBAP_Sector13S"> + <posXYZ volume="MBAP_Sector13_Platform3" X_Y_Z="0.;AP13_Fr12y; +9300"/> + <posXYZ volume="MBAP_Sector13_Platform2" X_Y_Z="0.;AP13_Fr12y; +3000"/> + <posXYZ volume="MBAP_Sector13_Platform2" X_Y_Z="0.;AP13_Fr12y; -2650"/> + <posXYZ volume="MBAP_Sector13_Platform3" X_Y_Z="0.;AP13_Fr12y; -9300"/> +</composition> + + +<composition name="MBAP_AccessPlatform"> + +<!-- sector 1 & 9 --> + + <posXYZ volume="MBAP_PlatformFloor12s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P12posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P23posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P34posz" rot="90.; 90.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P12posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P23posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s1s9" X_Y_Z=" MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P34posz" rot="90.; 90.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P12posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P23posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy; MBAP_P34posz" rot="90.;270.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P12posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P23posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s1s9" X_Y_Z="-MBAP_Ps01posx;MBAP_Ps01posy;-MBAP_P34posz" rot="90.;270.;0."/> + +<!-- sector 11 & 15 --> + + <posXYZ volume="MBAP_PlatformFloor12s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P12posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P23posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P34posz" rot="90.; 90.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P12posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P23posz" rot="90.; 90.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s11s15" X_Y_Z=" MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P34posz" rot="90.; 90.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P12posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P23posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy; MBAP_P34posz" rot="90.;270.;0."/> + + <posXYZ volume="MBAP_PlatformFloor12s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P12posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor23s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P23posz" rot="90.;270.;0."/> + <posXYZ volume="MBAP_PlatformFloor34s11s15" X_Y_Z="-MBAP_Ps11posx;MBAP_Ps11posy;-MBAP_P34posz" rot="90.;270.;0."/> + +<!-- sector 3 & 7 --> + <posXYZ volume="MBAP_AccessPlatform14s3s7_zplusS" /> + <posXYZ volume="MBAP_AccessPlatform14s3s7Sym_zplusS" /> + <posXYZ volume="MBAP_AccessPlatform14s3s7_zminusS" /> + <posXYZ volume="MBAP_AccessPlatform14s3s7Sym_zminusS" /> + + +<!-- Access Platform Sector 13 Bottom Level --> + <posXYZ volume="MBAP_Sector13S" /> + <posXYZ volume="MBAP_Sector13_MediumS" /> +<!-- Access Platform Sector 05 Top Level --> + <posXYZ volume="MBAP_Sector05S" /> + <posXYZ volume="MBAP_Sector05_MediumS" /> + +</composition> + +</section> +<section name = "MDT Big Wheel" + version = "7.0" + date = "11 Oct 2005" + author = "Daniel Pomarede" + top_volume = "MBWH_BigWheels"> + + +<!-- name = MDT Big Wheel section name = "Supports" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** MDT Big Wheel **** + *** **** + ************************************************************** + ************************************************************** --> + + + + +<var name="MBWH_zposL" value="13950" /> + + + + +<!-- + ************************************************************** + *** **** + *** common items **** + *** **** + ************************************************************** +--> + + +<!-- Cut profiles cross bracing large and small sector --> +<!-- ATLMHHBM0091 & ATLMHHBM0100--> +<var name="MBWH_CBext" value="200"/> +<var name="MBWH_CBhei" value="60"/> + +<!-- Spokes U profile --> + +<!-- ATLMHHBM0130 & ATLMHHBM0085 & ATLMHHBM0086 & ATLMHHBM0087 --> + +<var name="MBWH_SUPthi" value=" 5." /> +<var name="MBWH_SUPext" value=" 230." /> +<var name="MBWH_SUPhei" value=" 55." /> + +<!-- Spokes Reinforcing bar --> + +<!-- ATLMHHBM0082A & ATLMHHBM0051A & ATLMHHBM0154A --> + +<!-- Slate --> +<var name="MBWH_RBSlen" value="1080"/> +<var name="MBWH_RBSwid" value="100"/> +<var name="MBWH_RBSthi" value="25"/> +<!-- Bracket --> +<var name="MBWH_RBBlen" value="200"/> +<var name="MBWH_RBBsiz" value="60"/> +<var name="MBWH_RBBthi" value="10"/> + +<!-- holes spacing for clamping Reinforcing bar on spokes --> +<!-- ATLMHHBM0130 & ATLMHHBM0085 --> +<var name="MBWH_SRBhos" value="160" /> + +<!-- Plates of Cross Bracings --> +<var name="MBWH_CBPth" value="8"/> <!-- thickness --> + +<!-- Derived variables --> +<var name="MBWH_RBBxa" value="0"/> +<var name="MBWH_RBBya" value="0"/> +<var name="MBWH_RBBxb" value="MBWH_RBBsiz"/> +<var name="MBWH_RBByb" value="MBWH_RBBya"/> +<var name="MBWH_RBBxc" value="MBWH_RBBxb"/> +<var name="MBWH_RBByc" value="MBWH_RBBsiz"/> +<var name="MBWH_RBBxd" value="MBWH_RBBxc-MBWH_RBBthi"/> +<var name="MBWH_RBByd" value="MBWH_RBByc"/> +<var name="MBWH_RBBxe" value="MBWH_RBBxd"/> +<var name="MBWH_RBBye" value="MBWH_RBBthi"/> +<var name="MBWH_RBBxf" value="MBWH_RBBxa"/> +<var name="MBWH_RBByf" value="MBWH_RBBye"/> + +<var name="MBWH_RBBxp" value="-MBWH_RBSlen/2.+MBWH_RBBsiz"/> +<var name="MBWH_RBByp1" value="-MBWH_RBSthi/2.-MBWH_RBBsiz"/> +<var name="MBWH_RBByp2" value="MBWH_RBSthi/2."/> + +<box name="MBWH_ReinforcingBarSlate" material="Aluminium1" X_Y_Z="MBWH_RBSlen;MBWH_RBSthi;MBWH_RBSwid"/> + +<gvxy name="MBWH_ReinforcingBarBracket" material="Aluminium2" dZ="MBWH_RBBlen"> + <gvxy_point X_Y="MBWH_RBBxa;MBWH_RBBya"/> + <gvxy_point X_Y="MBWH_RBBxb;MBWH_RBByb"/> + <gvxy_point X_Y="MBWH_RBBxc;MBWH_RBByc"/> + <gvxy_point X_Y="MBWH_RBBxd;MBWH_RBByd"/> + <gvxy_point X_Y="MBWH_RBBxe;MBWH_RBBye"/> + <gvxy_point X_Y="MBWH_RBBxf;MBWH_RBByf"/> +</gvxy> + +<composition name="MBWH_ReinforcingBar"> + <posXYZ volume="MBWH_ReinforcingBarSlate"/> + <posXYZ volume="MBWH_ReinforcingBarBracket" X_Y_Z=" MBWH_RBBxp;MBWH_RBByp1;0" rot="0;0;90"/> + <posXYZ volume="MBWH_ReinforcingBarBracket" X_Y_Z="-MBWH_RBBxp;MBWH_RBByp2;0"/> +</composition> + +<!-- positions of reinforcing bars --> +<var name="MBWH_SRBpx" value="MBWH_SUPext/2.+MBWH_RBSthi/2.+MBWH_RBBthi"/> +<var name="MBWH_SRBpy" value="-MBWH_RBSlen/2.+MBWH_SUPhei+MBWH_RBBthi"/> + +<!-- Spokes --> +<!-- Derived variables --> +<var name="MBWH_SUPxa" value="MBWH_SUPext/2." /> +<var name="MBWH_SUPya" value="0." /> +<var name="MBWH_SUPxb" value="MBWH_SUPxa" /> +<var name="MBWH_SUPyb" value="MBWH_SUPhei" /> +<var name="MBWH_SUPxc" value="MBWH_SUPxb-MBWH_SUPthi" /> +<var name="MBWH_SUPyc" value="MBWH_SUPyb" /> +<var name="MBWH_SUPxd" value="MBWH_SUPxc" /> +<var name="MBWH_SUPyd" value="MBWH_SUPthi" /> + +<!-- Plates of Cross Bracings --> +<var name="MBWH_CBPx" value="(MBWH_CBext+MBWH_CBPth)/2." /> <!-- x pos --> + + + + +<!-- + ************************************************************** + *** **** + *** Large Sector **** + *** **** + ************************************************************** +--> + +<!-- ATLMHHBM0091 --> +<!-- Cut profiles cross bracing large sector --> +<var name="MBWH_CBLthi" value="5"/> + +<!-- Contreventements lengths --> +<!-- item numbering in ATLMHHBM0002 --> +<var name="MBWH_CBLl11" value="3690." /> <!-- item 11 --> +<var name="MBWH_CBLl17" value="2700." /> <!-- item 17 --> +<var name="MBWH_CBLl22" value="1740." /> <!-- item 22 --> +<var name="MBWH_CBLl26" value=" 750." /> <!-- item 26 --> + +<!-- Contreventements positions (...to be confirmed...) --> +<var name="MBWH_CBLy11" value="9700." /> <!-- item 11 --> +<var name="MBWH_CBLy17" value="7750." /> <!-- item 17 --> +<var name="MBWH_CBLy22" value="5800." /> <!-- item 22 --> +<var name="MBWH_CBLy26" value="3850." /> <!-- item 26 --> + + +<!-- item numbering in ATLMHHBM0002 --> +<!-- Cross bracing, bay 1 large sector --> +<var name="MBWH_CBLl10" value="4260." /> <!-- item 10 --> <!-- drawing ATLMHHBM0066 --> +<!-- Cross bracing, bay 2 large sector --> +<var name="MBWH_CBLl15" value="3590." /> <!-- item 15 --> <!-- drawing ATLMHHBM0068 --> +<!-- Cross bracing, bay 3 large sector --> +<var name="MBWH_CBLl21" value="2830." /> <!-- item 21 --> <!-- drawing ATLMHHBM0070 --> +<!-- Cross bracing, bay 4 large sector --> +<var name="MBWH_CBLl25" value="2130." /> <!-- item 25 --> <!-- drawing ATLMHHBM0073 --> + +<!-- item numbering in ATLMHHBM0002 --> +<!-- Contreventements, bay 1 large sector --> +<var name="MBWH_CBLl8" value="1780."/> <!-- item 8 --> <!-- drawing ATLMHHBM0091 --> +<var name="MBWH_CBLl9" value="2310."/> <!-- item 9 --> <!-- drawing ATLMHHBM0091 --> + +<!-- Contreventements, bay 2 large sector --> +<var name="MBWH_CBLl14" value="1450."/> <!-- item 14 --> <!-- drawing ATLMHHBM0091 --> +<var name="MBWH_CBLl13" value="2005."/> <!-- item 13 --> <!-- drawing ATLMHHBM0091 --> + +<!-- Contreventements, bay 3 large sector --> +<var name="MBWH_CBLl20" value="1055."/> <!-- item 20 --> <!-- drawing ATLMHHBM0091 --> +<var name="MBWH_CBLl18" value="1685."/> <!-- item 18 --> <!-- drawing ATLMHHBM0091 --> + +<!-- Contreventements, bay 4 large sector --> +<var name="MBWH_CBLl24" value="590."/> <!-- item 24 --> <!-- drawing ATLMHHBM0091 --> +<var name="MBWH_CBLl23" value="1430."/> <!-- item 23 --> <!-- drawing ATLMHHBM0091 --> + + +<!-- Plates --> + <!-- item 10 for Bay 1 --> <!-- drawing ATLMHHBM0066 --> +<var name="MBWH_CBPL10le" value="419"/> <!-- length --> +<var name="MBWH_CBPL10wi" value="216"/> <!-- width --> +<var name="MBWH_CBPL10cu" value="40"/> <!-- cut --> +<var name="MBWH_CBPL10ti" value="22"/> <!-- tilt --> +<var name="MBWH_CBPL10za" value="2174"/> <!-- Plate offset --> +<var name="MBWH_CBPL10ya" value="14"/> <!-- Plate offset --> + <!-- item 15 for Bay 2 --> <!-- drawing ATLMHHBM0068 --> +<var name="MBWH_CBPL15le" value="345"/> <!-- length --> +<var name="MBWH_CBPL15wi" value="224"/> <!-- width --> +<var name="MBWH_CBPL15cu" value="30"/> <!-- cut --> +<var name="MBWH_CBPL15ti" value="30"/> <!-- tilt --> +<var name="MBWH_CBPL15za" value="1322"/> <!-- Plate offset --> +<var name="MBWH_CBPL15ya" value="9"/> <!-- Plate offset --> + <!-- item 21 for Bay 3 --> <!-- drawing ATLMHHBM0070 --> +<var name="MBWH_CBPL21le" value="269"/> <!-- length --> +<var name="MBWH_CBPL21wi" value="230"/> <!-- width --> +<var name="MBWH_CBPL21cu" value="20"/> <!-- cut --> +<var name="MBWH_CBPL21ti" value="40"/> <!-- tilt --> +<var name="MBWH_CBPL21za" value="938"/> <!-- Plate offset --> +<var name="MBWH_CBPL21ya" value="13"/> <!-- Plate offset --> + <!-- item 25 for Bay 4 --> <!-- drawing ATLMHHBM0073 --> +<var name="MBWH_CBPL25le" value="300"/> <!-- length --> +<var name="MBWH_CBPL25wi" value="222"/> <!-- width --> +<var name="MBWH_CBPL25cu" value="20"/> <!-- cut --> +<var name="MBWH_CBPL25ti" value="33"/> <!-- tilt --> <!-- ==> to be confirmed <== --> +<var name="MBWH_CBPL25za" value="470"/> <!-- Plate offset --> +<var name="MBWH_CBPL25ya" value="21"/> <!-- Plate offset --> + + +<!-- positions (...to be confirmed...) --> +<var name="MBWH_Croily10" value="10500"/> <!-- item 10 --> +<var name="MBWH_Croily15" value="8600"/> <!-- item 15 --> +<var name="MBWH_Croily21" value="6600"/> <!-- item 21 --> +<var name="MBWH_Croily25" value="4450"/> <!-- item 25 --> + + +<!-- ATLMHHBM0002 --> +<!-- Spokes Opening angle large sector --> +<var name="MBWH_SLangle" value="14." /> + +<!-- Spoke large sector --> +<!-- Inner spoke large sector ATLMHHBM0130 --> +<!-- External spoke large sector ATLMHHBM0128 --> + +<!-- ATLMHHBM0130 --> +<!-- U profile length --> +<var name="MBWH_SlsUPlen" value="8465" /> <!-- ??? to be confirmed for both --> + +<!-- relative positions of reinforcing bars --> +<var name="MBWH_SlsRBdz1" value="1317" /> +<var name="MBWH_SlsRBdz2" value="1787" /> +<var name="MBWH_SlsRBdz3" value="2030" /> +<var name="MBWH_SlsRBdz4" value="1740" /> + + +<!-- External Spokes supports --> + +<!-- ATLMHHBM0128 --> +<!-- position along the spoke of 1st support --> +<var name="MBWH_SlsSup1" value=" 414" /> +<!-- size of support --> +<var name="MBWH_SlsSSize" value=" 220" /> <!-- as measured on drawing, to be confirmed in atlmhhbm0123 ? --> + +<!-- Transversal beam, central support --> + +<!-- ATLMHHBM0080 --> +<var name="MBWH_TBCSlen1" value="2396." /> +<var name="MBWH_TBCSlen2" value="2526.6"/> +<var name="MBWH_TBCSext" value=" 87." /> +<var name="MBWH_TBCShei" value=" 180." /> +<var name="MBWH_TBCSthi1" value=" 15." /> +<var name="MBWH_TBCSthi2" value=" 10." /> +<var name="MBWH_TBCSoffs" value=" 135." /> +<var name="MBWH_TBCSang1" value=" 14." /> +<var name="MBWH_TBCSang2" value="22.5"/> + + +<!-- Connection beam / extremity plate --> + +<!-- ATLMHHBM0076 --> +<!-- thickness, assumed constant --> +<var name="MBWH_CBEPthic" value="15."/> +<!-- dimensions and angles --> +<var name="MBWH_CBEPl1" value="195.8"/> +<var name="MBWH_CBEPl2" value="230."/> +<var name="MBWH_CBEPl3" value="263."/> + +<var name="MBWH_CBEPh1" value="89.5"/> +<var name="MBWH_CBEPh2" value="169.2"/> +<var name="MBWH_CBEPh3" value="72.8"/> +<var name="MBWH_CBEPh4" value="81.2"/> +<var name="MBWH_CBEPh5" value="125"/> + +<var name="MBWH_CBEPa1" value="22.5"/> +<var name="MBWH_CBEPa2" value="67.5"/> +<var name="MBWH_CBEPa3" value="82."/> +<var name="MBWH_CBEPa4" value="15."/> + + +<!-- Extremity plate --> + +<!-- ATLMHHBM0075 --> +<!-- thickness, assumed constant --> +<var name="MBWH_EPthic" value="15."/> +<!-- dimensions and angles --> +<var name="MBWH_EPl1" value="227.8"/> +<var name="MBWH_EPl2" value="423"/> +<var name="MBWH_EPl3" value="193.7"/> + +<var name="MBWH_EPh1" value="250.7"/> +<var name="MBWH_EPh2" value="170.3"/> +<var name="MBWH_EPh3" value="383"/> +<var name="MBWH_EPh4" value="76.1"/> + + +<!-- Central Reinforcing bar --> + +<!-- ATLMHHBM0113 --> + +<var name="MBWH_CRBLPwid" value="180"/> +<var name="MBWH_CRBPL1pi" value="643"/> +<var name="MBWH_CRBPL1po" value="647"/> +<var name="MBWH_CRBSHIof" value="4"/> + +<!-- L Profile --> +<var name="MBWH_CRBLPthi" value="12"/> +<var name="MBWH_CRBLPle1" value="910"/> +<var name="MBWH_CRBLPhe1" value="60"/> +<var name="MBWH_CRBLPle2" value="145"/> +<var name="MBWH_CRBLPhe2" value="39"/> + +<!-- Plate 1 --> +<var name="MBWH_CRBPL1th" value="12"/> +<var name="MBWH_CRBPL1le" value="340"/> +<var name="MBWH_CRBPL1wi" value="156"/> + +<!-- Plate 2 --> +<var name="MBWH_CRBPL2th" value="12"/> +<var name="MBWH_CRBPL2le" value="210"/> +<var name="MBWH_CRBPL2wi" value="156"/> + +<!-- Shim --> +<var name="MBWH_CRBSHIth" value="12"/> +<var name="MBWH_CRBSHIle" value="165"/> +<var name="MBWH_CRBSHIwi" value="156"/> + +<!-- position of Reinforcing Bar relative to extremity plate ... pifometric, to be confirmed --> +<var name="MBWH_CRBxoff" value="-200"/> +<var name="MBWH_CRByoff" value="-400"/> +<var name="MBWH_CRBzoff" value="-300"/> + + +<!-- ATLMHHBM0002 --> +<!-- position of 1st support in atlas ref system --> +<var name="MBWH_SlsSuy1" value=" 3612.7" /> +<var name="MBWH_SlsSux1" value=" 1305." /> +<!-- ATLMHHBM0128 --> +<!-- x extension --> +<var name="MBWH_SlsSxext" value=" 139.3" /> + +<!-- Derived variables --> +<!-- Positions --> +<var name="MBWH_Slsypos" value="MBWH_SlsSuy1+(.5*MBWH_SlsUPlen-MBWH_SlsSup1)*cos(MBWH_SLangle*GENV_PiS180)"/> +<var name="MBWH_Slsxp1" value="MBWH_SlsSux1+(MBWH_SlsSxext-.5*MBWH_SUPhei)/cos(MBWH_SLangle*GENV_PiS180)-.5*MBWH_SlsSSize*sin(MBWH_SLangle*GENV_PiS180) " /> +<!-- external spokes --> +<var name="MBWH_SlsExref" value="MBWH_Slsxp1 +(.5*MBWH_SlsUPlen-MBWH_SlsSup1)*sin(MBWH_SLangle*GENV_PiS180) "/> +<!-- inner spokes --> +<var name="MBWH_SlsIxref" value="MBWH_SlsExref - (MBWH_RBSlen-MBWH_RBBsiz)/cos(MBWH_SLangle*GENV_PiS180) "/> + +<!-- Connection beam / extremity plate --> +<!-- Derived variables --> +<var name="MBWH_CBEPxa" value="0"/> +<var name="MBWH_CBEPya" value="0"/> +<var name="MBWH_CBEPxb" value="MBWH_CBEPxa"/> +<var name="MBWH_CBEPyb" value="MBWH_CBEPh1"/> +<var name="MBWH_CBEPxc" value="MBWH_CBEPl2-MBWH_CBEPl3"/> +<var name="MBWH_CBEPyc" value="MBWH_CBEPh2"/> +<var name="MBWH_CBEPxd" value="MBWH_CBEPxc+MBWH_CBEPl1"/> +<var name="MBWH_CBEPyd" value="MBWH_CBEPyc"/> +<var name="MBWH_CBEPxe" value="MBWH_CBEPxd+(MBWH_CBEPh2-MBWH_CBEPh5)/tan(MBWH_CBEPa2*GENV_PiS180)"/> +<var name="MBWH_CBEPye" value="MBWH_CBEPh5"/> +<var name="MBWH_CBEPxf" value="MBWH_CBEPxe+(MBWH_CBEPh5-MBWH_CBEPh4)/tan(MBWH_CBEPa3*GENV_PiS180)"/> +<var name="MBWH_CBEPyf" value="MBWH_CBEPh4"/> +<var name="MBWH_CBEPxg" value="MBWH_CBEPxf+(MBWH_CBEPh4-MBWH_CBEPh3)/tan(MBWH_CBEPa4*GENV_PiS180)"/> +<var name="MBWH_CBEPyg" value="MBWH_CBEPh3"/> +<var name="MBWH_CBEPxh" value="MBWH_CBEPl2"/> +<var name="MBWH_CBEPyh" value="MBWH_CBEPya"/> + +<!-- Modelization --> +<gvxy name="MBWH_ConnectionBeamExtremityPlate" material="Aluminium2" dZ="MBWH_CBEPthic"> + <gvxy_point X_Y="MBWH_CBEPxa;MBWH_CBEPya"/> + <gvxy_point X_Y="MBWH_CBEPxb;MBWH_CBEPyb"/> + <gvxy_point X_Y="MBWH_CBEPxc;MBWH_CBEPyc"/> + <gvxy_point X_Y="MBWH_CBEPxd;MBWH_CBEPyd"/> + <gvxy_point X_Y="MBWH_CBEPxe;MBWH_CBEPye"/> + <gvxy_point X_Y="MBWH_CBEPxf;MBWH_CBEPyf"/> + <gvxy_point X_Y="MBWH_CBEPxg;MBWH_CBEPyg"/> + <gvxy_point X_Y="MBWH_CBEPxh;MBWH_CBEPyh"/> +</gvxy> + +<!-- Extremity plate --> +<!-- Derived variables --> +<var name="MBWH_EPxa" value="0"/> +<var name="MBWH_EPya" value="0"/> +<var name="MBWH_EPxb" value="MBWH_EPxa"/> +<var name="MBWH_EPyb" value="MBWH_EPh1"/> +<var name="MBWH_EPxc" value="MBWH_EPl2-MBWH_EPl3"/> +<var name="MBWH_EPyc" value="MBWH_EPh3"/> +<var name="MBWH_EPxd" value="MBWH_EPl2"/> +<var name="MBWH_EPyd" value="MBWH_EPyc"/> +<var name="MBWH_EPxe" value="MBWH_EPxd"/> +<var name="MBWH_EPye" value="MBWH_EPyd-MBWH_EPh2"/> +<var name="MBWH_EPxf" value="MBWH_EPl1"/> +<var name="MBWH_EPyf" value="MBWH_EPh4"/> +<var name="MBWH_EPxg" value="MBWH_EPxf"/> +<var name="MBWH_EPyg" value="MBWH_EPya"/> + +<!-- Modelization --> +<gvxy name="MBWH_ExtremityPlate" material="Aluminium1" dZ="MBWH_EPthic"> + <gvxy_point X_Y="MBWH_EPxa;MBWH_EPya"/> + <gvxy_point X_Y="MBWH_EPxb;MBWH_EPyb"/> + <gvxy_point X_Y="MBWH_EPxc;MBWH_EPyc"/> + <gvxy_point X_Y="MBWH_EPxd;MBWH_EPyd"/> + <gvxy_point X_Y="MBWH_EPxe;MBWH_EPye"/> + <gvxy_point X_Y="MBWH_EPxf;MBWH_EPyf"/> + <gvxy_point X_Y="MBWH_EPxg;MBWH_EPyg"/> +</gvxy> + + +<!-- Central Reinforcing bar --> +<!-- L Profile --> +<!-- Derived variables --> +<!-- piece 1 --> +<var name="MBWH_CRBLP1xa" value="0"/> +<var name="MBWH_CRBLP1ya" value="0"/> +<var name="MBWH_CRBLP1xb" value="MBWH_CRBLPle1"/> +<var name="MBWH_CRBLP1yb" value="MBWH_CRBLP1ya"/> +<var name="MBWH_CRBLP1xc" value="MBWH_CRBLP1xb"/> +<var name="MBWH_CRBLP1yc" value="MBWH_CRBLPhe2"/> +<var name="MBWH_CRBLP1xd" value="MBWH_CRBLPle1-MBWH_CRBLPle2"/> +<var name="MBWH_CRBLP1yd" value="MBWH_CRBLPhe1"/> +<var name="MBWH_CRBLP1xe" value="MBWH_CRBLP1xa"/> +<var name="MBWH_CRBLP1ye" value="MBWH_CRBLP1yd"/> + +<!-- piece 2 --> +<var name="MBWH_CRBLP2dy" value="MBWH_CRBLPhe1-MBWH_CRBLPthi"/> + + +<!-- Modelization --> +<gvxy name="MBWH_CRB-LProfile1" material="Aluminium1" dZ="MBWH_CRBLPthi"> + <gvxy_point X_Y="MBWH_CRBLP1xa;MBWH_CRBLP1ya"/> + <gvxy_point X_Y="MBWH_CRBLP1xb;MBWH_CRBLP1yb"/> + <gvxy_point X_Y="MBWH_CRBLP1xc;MBWH_CRBLP1yc"/> + <gvxy_point X_Y="MBWH_CRBLP1xd;MBWH_CRBLP1yd"/> + <gvxy_point X_Y="MBWH_CRBLP1xe;MBWH_CRBLP1ye"/> +</gvxy> + +<var name="MBWH_CRBLP1z" value="-MBWH_CRBLPwid/2.+MBWH_CRBLPthi/2"/> + +<box name="MBWH_CRB-LProfile2" material="Aluminium1" X_Y_Z="MBWH_CRBLPle1;MBWH_CRBLP2dy;MBWH_CRBLPthi"/> +<var name="MBWH_CRBLP2x" value="MBWH_CRBLPle1/2"/> +<var name="MBWH_CRBLP2y" value="MBWH_CRBLPthi/2"/> +<var name="MBWH_CRBLP2z" value="MBWH_CRBLP1z+(MBWH_CRBLPthi+MBWH_CRBLP2dy)/2"/> + +<box name="MBWH_CRB-Plate2" material="Aluminium1" X_Y_Z="MBWH_CRBPL2le;MBWH_CRBPL2th;MBWH_CRBPL2wi"/> +<var name="MBWH_CRBPL2xp" value="MBWH_CRBLPle1/2"/> +<var name="MBWH_CRBPL2yp" value="MBWH_CRBLPthi+MBWH_CRBPL2th/2"/> + +<box name="MBWH_CRB-Plate1" material="Aluminium1" X_Y_Z="MBWH_CRBPL1le;MBWH_CRBPL1th;MBWH_CRBPL1wi"/> +<var name="MBWH_CRBPL1x1" value="MBWH_CRBLPle1/2+MBWH_CRBPL1pi-MBWH_CRBPL1le/2"/> +<var name="MBWH_CRBPL1x2" value="MBWH_CRBLPle1/2-MBWH_CRBPL1po+MBWH_CRBPL1le/2"/> +<var name="MBWH_CRBPL1yp" value="-MBWH_CRBPL1th/2."/> + +<box name="MBWH_CRB-Shim" material="Aluminium1" X_Y_Z="MBWH_CRBSHIle;MBWH_CRBSHIth;MBWH_CRBSHIwi"/> +<var name="MBWH_CRBSHIx1" value="MBWH_CRBPL1x1+MBWH_CRBPL1le/2.-MBWH_CRBSHIle/2.-MBWH_CRBSHIof"/> +<var name="MBWH_CRBSHIx2" value="MBWH_CRBPL1x2-MBWH_CRBPL1le/2.+MBWH_CRBSHIle/2.+MBWH_CRBSHIof"/> +<var name="MBWH_CRBSHIyp" value="MBWH_CRBPL1yp-MBWH_CRBPL1th/2.-MBWH_CRBSHIth/2."/> + + +<composition name="MBWH_CRB-LProfile_1"> + <posXYZ volume="MBWH_CRB-LProfile1" X_Y_Z="0;0;MBWH_CRBLP1z"/> + <posXYZ volume="MBWH_CRB-LProfile2" X_Y_Z="MBWH_CRBLP2x;MBWH_CRBLP2y;MBWH_CRBLP2z" rot="90;0;0"/> +</composition> + +<composition name="MBWH_CRB-LProfile_2"> + <posXYZ volume="MBWH_CRB-LProfile1" X_Y_Z="0;0;-MBWH_CRBLP1z"/> + <posXYZ volume="MBWH_CRB-LProfile2" X_Y_Z="MBWH_CRBLP2x;MBWH_CRBLP2y;-MBWH_CRBLP2z" rot="90;0;0"/> +</composition> + + +<composition name="MBWH_CentralReinforcingbar"> + <posXYZ volume="MBWH_CRB-LProfile_1"/> + <posXYZ volume="MBWH_CRB-LProfile_2"/> + <posXYZ volume="MBWH_CRB-Plate2" X_Y_Z="MBWH_CRBPL2xp;MBWH_CRBPL2yp;0"/> + <posXYZ volume="MBWH_CRB-Plate1" X_Y_Z="MBWH_CRBPL1x1;MBWH_CRBPL1yp;0"/> + <posXYZ volume="MBWH_CRB-Plate1" X_Y_Z="MBWH_CRBPL1x2;MBWH_CRBPL1yp;0"/> + <posXYZ volume="MBWH_CRB-Shim" X_Y_Z="MBWH_CRBSHIx1;MBWH_CRBSHIyp;0"/> + <posXYZ volume="MBWH_CRB-Shim" X_Y_Z="MBWH_CRBSHIx2;MBWH_CRBSHIyp;0"/> +</composition> + +<!-- Cut profiles cross bracing large sector --> +<!-- Derived variables --> +<var name="MBWH_CBLxa" value="MBWH_CBext/2." /> +<var name="MBWH_CBLya" value="0." /> +<var name="MBWH_CBLxb" value="MBWH_CBLxa" /> +<var name="MBWH_CBLyb" value="MBWH_CBhei" /> +<var name="MBWH_CBLxc" value="MBWH_CBLxb-MBWH_CBLthi" /> +<var name="MBWH_CBLyc" value="MBWH_CBLyb" /> +<var name="MBWH_CBLxd" value="MBWH_CBLxc" /> +<var name="MBWH_CBLyd" value="MBWH_CBLthi" /> + +<!-- Modelization --> + +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem11" material="Aluminium1" dZ="MBWH_CBLl11"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem17" material="Aluminium1" dZ="MBWH_CBLl17"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem22" material="Aluminium1" dZ="MBWH_CBLl22"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem26" material="Aluminium1" dZ="MBWH_CBLl26"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem10" material="Aluminium1" dZ="MBWH_CBLl10"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem15" material="Aluminium1" dZ="MBWH_CBLl15"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem21" material="Aluminium1" dZ="MBWH_CBLl21"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem25" material="Aluminium1" dZ="MBWH_CBLl25"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + + +<!-- Contreventements, bay 1 large sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem8" material="Aluminium1" dZ="MBWH_CBLl8"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem9" material="Aluminium1" dZ="MBWH_CBLl9"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + +<!-- Contreventements, bay 2 large sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem14" material="Aluminium1" dZ="MBWH_CBLl14"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem13" material="Aluminium1" dZ="MBWH_CBLl13"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + +<!-- Contreventements, bay 3 large sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem20" material="Aluminium1" dZ="MBWH_CBLl20"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem18" material="Aluminium1" dZ="MBWH_CBLl18"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + +<!-- Contreventements, bay 4 large sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem24" material="Aluminium1" dZ="MBWH_CBLl24"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingLargeSectorItem23" material="Aluminium1" dZ="MBWH_CBLl23"> + <gvxy_point X_Y="MBWH_CBLxa;MBWH_CBLya"/> + <gvxy_point X_Y="MBWH_CBLxb;MBWH_CBLyb"/> + <gvxy_point X_Y="MBWH_CBLxc;MBWH_CBLyc"/> + <gvxy_point X_Y="MBWH_CBLxd;MBWH_CBLyd"/> +</gvxysx> + + +<!-- cross bracing Plates large sector --> + +<!-- Bay 1 --> +<var name="MBWH_CBPL10x1" value="MBWH_CBPL10le/2." /> +<var name="MBWH_CBPL10y1" value="MBWH_CBPL10wi/2.-MBWH_CBPL10cu" /> +<var name="MBWH_CBPL10x2" value="MBWH_CBPL10x1-MBWH_CBPL10cu" /> +<var name="MBWH_CBPL10y2" value="MBWH_CBPL10wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateLargeSectorItem10" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPL10x1;MBWH_CBPL10y1"/> + <gvxy_point X_Y="MBWH_CBPL10x2;MBWH_CBPL10y2"/> +</gvxysxy> + +<!-- Bay 2 --> +<var name="MBWH_CBPL15x1" value="MBWH_CBPL15le/2." /> +<var name="MBWH_CBPL15y1" value="MBWH_CBPL15wi/2.-MBWH_CBPL15cu" /> +<var name="MBWH_CBPL15x2" value="MBWH_CBPL15x1-MBWH_CBPL15cu" /> +<var name="MBWH_CBPL15y2" value="MBWH_CBPL15wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateLargeSectorItem15" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPL15x1;MBWH_CBPL15y1"/> + <gvxy_point X_Y="MBWH_CBPL15x2;MBWH_CBPL15y2"/> +</gvxysxy> + +<!-- Bay 3 --> +<var name="MBWH_CBPL21x1" value="MBWH_CBPL21le/2." /> +<var name="MBWH_CBPL21y1" value="MBWH_CBPL21wi/2.-MBWH_CBPL21cu" /> +<var name="MBWH_CBPL21x2" value="MBWH_CBPL21x1-MBWH_CBPL21cu" /> +<var name="MBWH_CBPL21y2" value="MBWH_CBPL21wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateLargeSectorItem21" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPL21x1;MBWH_CBPL21y1"/> + <gvxy_point X_Y="MBWH_CBPL21x2;MBWH_CBPL21y2"/> +</gvxysxy> + +<!-- Bay 4 --> +<var name="MBWH_CBPL25x1" value="MBWH_CBPL25le/2." /> +<var name="MBWH_CBPL25y1" value="MBWH_CBPL25wi/2.-MBWH_CBPL25cu" /> +<var name="MBWH_CBPL25x2" value="MBWH_CBPL25x1-MBWH_CBPL25cu" /> +<var name="MBWH_CBPL25y2" value="MBWH_CBPL25wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateLargeSectorItem25" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPL25x1;MBWH_CBPL25y1"/> + <gvxy_point X_Y="MBWH_CBPL25x2;MBWH_CBPL25y2"/> +</gvxysxy> + + +<!-- Bay 1 --> +<var name="MBWH_CBL10z" value="MBWH_CBLl10/2." /> +<var name="MBWH_CBPL10d" value="MBWH_CBPL10wi-2.*MBWH_CBPL10cu" /> +<var name="MBWH_CBPL10zb" value="MBWH_CBPL10za+sin(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBPL10d/2." /> +<var name="MBWH_CBPL10yb" value="MBWH_CBPL10ya-cos(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBPL10d/2." /> +<var name="MBWH_CBPL10zc" value="MBWH_CBPL10zb+cos(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBPL10le/2" /> +<var name="MBWH_CBPL10yc" value="MBWH_CBPL10yb+sin(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBPL10le/2" /> + <!-- get positions of contreventements 8,9 using locations of item 10 extremities --> +<var name="MBWH_cvl10xo" value="-MBWH_CBPL10zc*cos(MBWH_CBPL10ti*GENV_PiS180)-0.5*(MBWH_CBhei)*sin(MBWH_CBPL10ti*GENV_PiS180)" /> +<var name="MBWH_cvl10yo" value=" MBWH_CBPL10zc*sin(MBWH_CBPL10ti*GENV_PiS180)-0.5*(MBWH_CBhei)*cos(MBWH_CBPL10ti*GENV_PiS180)" /> +<var name="MBWH_cvl10xu" value="MBWH_cvl10xo+MBWH_CBLl10*cos(MBWH_CBPL10ti*GENV_PiS180)" /> +<var name="MBWH_cvl10yu" value="MBWH_cvl10yo-MBWH_CBLl10*sin(MBWH_CBPL10ti*GENV_PiS180)" /> +<var name="MBWH_cvlx8" value="-MBWH_cvl10xu+cos(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBLl8/2." /> +<var name="MBWH_cvly8" value=" MBWH_cvl10yu+sin(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBLl8/2." /> +<var name="MBWH_cvlx9" value="-MBWH_cvl10xo-cos(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBLl9/2." /> +<var name="MBWH_cvly9" value=" MBWH_cvl10yo-sin(MBWH_CBPL10ti*GENV_PiS180)*MBWH_CBLl9/2." /> + +<composition name="MBWH_CrossBracingPlateLargeSectorItem10Rot"> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem10" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay1LargeSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem10" X_Y_Z="0;0;MBWH_CBL10z" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem10Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPL10yc;MBWH_CBPL10zc" rot="-MBWH_CBPL10ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem10Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPL10yc;MBWH_CBPL10zc" rot="-MBWH_CBPL10ti;0;0"/> +</composition> +<composition name="MBWH_CroisillonBay1LargeSector"> + <posXYZ volume="MBWH_CrossBracingBay1LargeSector" X_Y_Z="0;-MBWH_CBPL10yc;-MBWH_CBPL10zc" /> +</composition> +<composition name="MBWH_CroisillonBay1LargeSectorRot"> + <posXYZ volume="MBWH_CroisillonBay1LargeSector" rot="MBWH_CBPL10ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem8" X_Y_Z="MBWH_cvlx8;MBWH_cvly8;0" rot="-MBWH_CBPL10ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem9" X_Y_Z="MBWH_cvlx9;MBWH_cvly9;0" rot="-MBWH_CBPL10ti;90;0" /> +</composition> + +<!-- Bay 2 --> +<var name="MBWH_CBL15z" value="MBWH_CBLl15/2." /> +<var name="MBWH_CBPL15d" value="MBWH_CBPL15wi-2.*MBWH_CBPL15cu" /> +<var name="MBWH_CBPL15zb" value="MBWH_CBPL15za+sin(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBPL15d/2." /> +<var name="MBWH_CBPL15yb" value="MBWH_CBPL15ya-cos(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBPL15d/2." /> +<var name="MBWH_CBPL15zi" value="MBWH_CBPL15zb+cos(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBPL15le/2" /> +<var name="MBWH_CBPL15yi" value="MBWH_CBPL15yb+sin(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBPL15le/2" /> +<var name="MBWH_CBPL15zc" value="MBWH_CBLl15-MBWH_CBPL15zi" /> +<var name="MBWH_CBPL15yc" value="MBWH_CBhei-MBWH_CBPL15yi" /> + <!-- get positions of contreventements 14, 13 using locations of item 15 extremities --> +<var name="MBWH_cvl15xo" value="-MBWH_CBPL15zc*cos(MBWH_CBPL15ti*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL15ya)*sin(MBWH_CBPL15ti*GENV_PiS180)"/> +<var name="MBWH_cvl15yo" value=" MBWH_CBPL15zc*sin(MBWH_CBPL15ti*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL15ya)*cos(MBWH_CBPL15ti*GENV_PiS180)"/> +<var name="MBWH_cvl15xu" value="MBWH_cvl15xo+MBWH_CBLl15*cos(MBWH_CBPL15ti*GENV_PiS180)" /> +<var name="MBWH_cvl15yu" value="MBWH_cvl15yo-MBWH_CBLl15*sin(MBWH_CBPL15ti*GENV_PiS180)" /> +<var name="MBWH_cvlx14" value="-MBWH_cvl15xu+cos(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBLl14/2." /> +<var name="MBWH_cvly14" value=" MBWH_cvl15yu+sin(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBLl14/2." /> +<var name="MBWH_cvlx13" value="-MBWH_cvl15xo-cos(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBLl13/2." /> +<var name="MBWH_cvly13" value=" MBWH_cvl15yo-sin(MBWH_CBPL15ti*GENV_PiS180)*MBWH_CBLl13/2." /> + + +<composition name="MBWH_CrossBracingPlateLargeSectorItem15Rot"> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem15" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay2LargeSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem15" X_Y_Z="0;0;MBWH_CBL15z" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem15Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPL15yc;MBWH_CBPL15zc" rot="-MBWH_CBPL15ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem15Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPL15yc;MBWH_CBPL15zc" rot="-MBWH_CBPL15ti;0;0"/> +</composition> +<composition name="MBWH_CroisillonBay2LargeSector"> + <posXYZ volume="MBWH_CrossBracingBay2LargeSector" X_Y_Z="0;-MBWH_CBPL15yc;-MBWH_CBPL15zc" /> +</composition> +<composition name="MBWH_CroisillonBay2LargeSectorRot"> + <posXYZ volume="MBWH_CroisillonBay2LargeSector" rot="MBWH_CBPL15ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem14" X_Y_Z="MBWH_cvlx14;MBWH_cvly14;0" rot="-MBWH_CBPL15ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem13" X_Y_Z="MBWH_cvlx13;MBWH_cvly13;0" rot="-MBWH_CBPL15ti;90;0" /> +</composition> + + +<!-- Bay 3 --> +<var name="MBWH_CBL21z" value="MBWH_CBLl21/2." /> +<var name="MBWH_CBPL21d" value="MBWH_CBPL21wi-2.*MBWH_CBPL21cu" /> +<var name="MBWH_CBPL21zb" value="MBWH_CBPL21za+sin(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBPL21d/2." /> +<var name="MBWH_CBPL21yb" value="MBWH_CBPL21ya-cos(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBPL21d/2." /> +<var name="MBWH_CBPL21z" value="MBWH_CBPL21zb+cos(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBPL21le/2" /> +<var name="MBWH_CBPL21yi" value="MBWH_CBPL21yb+sin(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBPL21le/2" /> +<var name="MBWH_CBPL21zc" value="MBWH_CBLl21-MBWH_CBPL21z" /> +<var name="MBWH_CBPL21yc" value="MBWH_CBhei-MBWH_CBPL21yi" /> + <!-- get positions of contreventements 14, 13 using locations of item 21 extremities --> +<var name="MBWH_cvl21xo" value="-MBWH_CBPL21zc*cos(MBWH_CBPL21ti*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL21ya)*sin(MBWH_CBPL21ti*GENV_PiS180)"/> +<var name="MBWH_cvl21yo" value=" MBWH_CBPL21zc*sin(MBWH_CBPL21ti*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL21ya)*cos(MBWH_CBPL21ti*GENV_PiS180)"/> +<var name="MBWH_cvl21xu" value="MBWH_cvl21xo+MBWH_CBLl21*cos(MBWH_CBPL21ti*GENV_PiS180)" /> +<var name="MBWH_cvl21yu" value="MBWH_cvl21yo-MBWH_CBLl21*sin(MBWH_CBPL21ti*GENV_PiS180)" /> +<var name="MBWH_cvlx20" value="-MBWH_cvl21xu+cos(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBLl20/2." /> +<var name="MBWH_cvly20" value=" MBWH_cvl21yu+sin(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBLl20/2." /> +<var name="MBWH_cvlx18" value="-MBWH_cvl21xo-cos(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBLl18/2." /> +<var name="MBWH_cvly18" value=" MBWH_cvl21yo-sin(MBWH_CBPL21ti*GENV_PiS180)*MBWH_CBLl18/2." /> + +<composition name="MBWH_CrossBracingPlateLargeSectorItem21Rot"> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem21" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay3LargeSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem21" X_Y_Z="0;0;MBWH_CBL21z" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem21Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPL21yc;MBWH_CBPL21zc" rot="-MBWH_CBPL21ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem21Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPL21yc;MBWH_CBPL21zc" rot="-MBWH_CBPL21ti;0;0"/> +</composition> +<composition name="MBWH_CroisillonBay3LargeSector"> + <posXYZ volume="MBWH_CrossBracingBay3LargeSector" X_Y_Z="0;-MBWH_CBPL21yc;-MBWH_CBPL21zc" /> +</composition> +<composition name="MBWH_CroisillonBay3LargeSectorRot"> + <posXYZ volume="MBWH_CroisillonBay3LargeSector" rot="MBWH_CBPL21ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem20" X_Y_Z="MBWH_cvlx20;MBWH_cvly20;0" rot="-MBWH_CBPL21ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem18" X_Y_Z="MBWH_cvlx18;MBWH_cvly18;0" rot="-MBWH_CBPL21ti;90;0" /> +</composition> + + + +<!-- Bay 4 --> +<var name="MBWH_CBPL25tii" value="90-MBWH_CBPL25ti" /> +<var name="MBWH_CBL25z" value="-MBWH_CBLl25/2." /> +<var name="MBWH_CBPL25d" value="MBWH_CBPL25wi-2.*MBWH_CBPL25cu" /> +<var name="MBWH_CBPL25zb" value="-MBWH_CBPL25za-sin(MBWH_CBPL25ti*GENV_PiS180)*MBWH_CBPL25d/2." /> +<var name="MBWH_CBPL25yb" value="MBWH_CBPL25ya-cos(MBWH_CBPL25ti*GENV_PiS180)*MBWH_CBPL25d/2." /> +<var name="MBWH_CBPL25zc" value="MBWH_CBPL25zb-cos(MBWH_CBPL25ti*GENV_PiS180)*MBWH_CBPL25le/2" /> +<var name="MBWH_CBPL25yc" value="MBWH_CBPL25yb+sin(MBWH_CBPL25ti*GENV_PiS180)*MBWH_CBPL25le/2" /> + <!-- get positions of contreventements 14, 13 using locations of item 25 extremities --> +<var name="MBWH_cvl25xo" value="-MBWH_CBPL25zc*cos(MBWH_CBPL25tii*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL25ya)*sin(MBWH_CBPL25ti*GENV_PiS180)"/> +<var name="MBWH_cvl25yo" value=" MBWH_CBPL25zc*sin(MBWH_CBPL25tii*GENV_PiS180)-0.5*(MBWH_CBhei+MBWH_CBPL25ya)*cos(MBWH_CBPL25ti*GENV_PiS180)"/> +<var name="MBWH_cvl25xo" value="-MBWH_CBPL25zc*cos(MBWH_CBPL25tii*GENV_PiS180)-0.5*(MBWH_CBhei)*cos(MBWH_CBPL25ti*GENV_PiS180)"/> +<var name="MBWH_cvl25yo" value=" MBWH_CBPL25zc*sin(MBWH_CBPL25tii*GENV_PiS180)-0.5*(MBWH_CBhei)*sin(MBWH_CBPL25ti*GENV_PiS180)"/> +<var name="MBWH_cvl25xu" value="MBWH_cvl25xo-MBWH_CBLl25*cos(MBWH_CBPL25tii*GENV_PiS180)" /> +<var name="MBWH_cvl25yu" value="MBWH_cvl25yo+MBWH_CBLl25*sin(MBWH_CBPL25tii*GENV_PiS180)" /> +<var name="MBWH_cvlx24" value="-MBWH_cvl25xo+cos(MBWH_CBPL25tii*GENV_PiS180)*MBWH_CBLl24/2." /> +<var name="MBWH_cvly24" value=" MBWH_cvl25yo+sin(MBWH_CBPL25tii*GENV_PiS180)*MBWH_CBLl24/2." /> +<var name="MBWH_cvlx23" value="-MBWH_cvl25xu-cos(MBWH_CBPL25tii*GENV_PiS180)*MBWH_CBLl23/2." /> +<var name="MBWH_cvly23" value=" MBWH_cvl25yu-sin(MBWH_CBPL25tii*GENV_PiS180)*MBWH_CBLl23/2." /> + +<composition name="MBWH_CrossBracingPlateLargeSectorItem25Rot"> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem25" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay4LargeSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem25" X_Y_Z="0;0;MBWH_CBL25z" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem25Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPL25yc;MBWH_CBPL25zc" rot="MBWH_CBPL25ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateLargeSectorItem25Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPL25yc;MBWH_CBPL25zc" rot="MBWH_CBPL25ti;0;0"/> +</composition> +<composition name="MBWH_CroisillonBay4LargeSector"> + <posXYZ volume="MBWH_CrossBracingBay4LargeSector" X_Y_Z="0;-MBWH_CBPL25yc;-MBWH_CBPL25zc" /> +</composition> +<composition name="MBWH_CroisillonBay4LargeSectorRot"> + <posXYZ volume="MBWH_CroisillonBay4LargeSector" rot="90-MBWH_CBPL25ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem24" X_Y_Z="MBWH_cvlx24;MBWH_cvly24;0" rot="MBWH_CBPL25ti-90;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem23" X_Y_Z="MBWH_cvlx23;MBWH_cvly23;0" rot="MBWH_CBPL25ti-90;90;0" /> +</composition> + + + +<!-- Inner and Outer spoke large sector --> + +<gvxysx name="MBWH_SpokeLargeSectorUprofile" material="Aluminium1" dZ="MBWH_SlsUPlen"> + <gvxy_point X_Y="MBWH_SUPxa;MBWH_SUPya"/> + <gvxy_point X_Y="MBWH_SUPxb;MBWH_SUPyb"/> + <gvxy_point X_Y="MBWH_SUPxc;MBWH_SUPyc"/> + <gvxy_point X_Y="MBWH_SUPxd;MBWH_SUPyd"/> +</gvxysx> + +<!-- Derived variables --> +<!-- positions of reinforcing bars --> +<var name="MBWH_SlsRBpz1" value="MBWH_SlsUPlen/2.-MBWH_SlsRBdz1-MBWH_SRBhos/2."/> +<var name="MBWH_SlsRBpz2" value="MBWH_SlsRBpz1-MBWH_SlsRBdz2"/> +<var name="MBWH_SlsRBpz3" value="MBWH_SlsRBpz2-MBWH_SlsRBdz3"/> +<var name="MBWH_SlsRBpz4" value="MBWH_SlsRBpz3-MBWH_SlsRBdz4"/> + +<!-- Relative positions of spokes --> +<var name="MBWH_SlsIxpos" value="MBWH_SRBpx+MBWH_SUPext/2.+MBWH_RBBthi+MBWH_RBSthi/2." /> +<var name="MBWH_SlsIypos" value="-MBWH_RBSlen+MBWH_RBBsiz" /> +<var name="MBWH_SlsIzpos" value="-MBWH_SlsIypos*tan(MBWH_SLangle*GENV_PiS180)" /> + + +<!-- Transversal beam, central support --> +<!-- Derived variables --> +<var name="MBWH_TBCSxa" value="MBWH_TBCSlen1/2." /> +<var name="MBWH_TBCSya" value="0." /> +<var name="MBWH_TBCSxc" value="MBWH_TBCSlen2/2.-MBWH_TBCSext" /> +<var name="MBWH_TBCSyc" value="MBWH_TBCShei" /> +<var name="MBWH_TBCSxb" value="MBWH_TBCSlen2/2." /> +<var name="MBWH_TBCSyb" value="MBWH_TBCSyc-MBWH_TBCSext*tan(MBWH_TBCSang1*GENV_PiS180)" /> + +<var name="MBWH_TBCSxa1" value="MBWH_TBCSxa-MBWH_TBCSoffs/cos(MBWH_TBCSang1*GENV_PiS180)" /> +<var name="MBWH_TBCSya1" value="0." /> +<var name="MBWH_TBCSxb1" value="MBWH_TBCSxa1+MBWH_TBCShei*tan(MBWH_TBCSang2*GENV_PiS180)" /> +<var name="MBWH_TBCSyb1" value="MBWH_TBCShei" /> + +<var name="MBWH_TBCSxoff" value="(MBWH_TBCSthi1+MBWH_TBCSthi2)/2." /> + +<!-- Transversal beam, central support Position --> +<var name="MBWH_TBCSypos" value="MBWH_Slsypos-(.5*MBWH_SlsUPlen)*cos(MBWH_SLangle*GENV_PiS180)-MBWH_TBCShei"/> +<var name="MBWH_TBCSzpos" value="-MBWH_SlsIzpos/2.-MBWH_TBCSxoff"/> +<!-- Connection beam / extremity plate position relative to Transversal beam, central support --> +<var name="MBWH_CBEPxpos" value="MBWH_TBCSxa1+MBWH_CBEPyb*cos(MBWH_CBEPa1*GENV_PiS180)+(MBWH_CBEPyc-MBWH_CBEPyb)/cos(MBWH_CBEPa1*GENV_PiS180)"/> +<var name="MBWH_CBEPypos" value="-MBWH_CBEPyb*sin(MBWH_CBEPa1*GENV_PiS180)-GENV_Eps"/> +<var name="MBWH_CBEPzpos" value="MBWH_TBCSthi1/2+MBWH_CBEPthic/2+GENV_Eps"/> +<!-- extremity plate position relative to Transversal beam, central support --> +<var name="MBWH_EPxpos" value="MBWH_CBEPxpos+MBWH_EPl1*sin(MBWH_CBEPa1*GENV_PiS180)-0.5*MBWH_EPthic*cos(MBWH_CBEPa1*GENV_PiS180)"/> +<var name="MBWH_EPypos" value="MBWH_CBEPypos+MBWH_EPl1*cos(MBWH_CBEPa1*GENV_PiS180)+0.5*MBWH_EPthic*sin(MBWH_CBEPa1*GENV_PiS180)"/> +<var name="MBWH_EPzpos" value="MBWH_CBEPzpos-MBWH_CBEPthic/2"/> +<!-- Reinforcing Bar relative to extremity plate position --> +<var name="MBWH_RBxpos" value="MBWH_EPxpos+MBWH_CRBxoff"/> +<var name="MBWH_RBypos" value="MBWH_EPypos+MBWH_CRByoff"/> +<var name="MBWH_RBzpos" value="MBWH_EPzpos+MBWH_CRBzoff"/> + + +<gvxysx name="MBWH_TransvBeamCSupLargeSect1" material="Aluminium1" dZ="MBWH_TBCSthi1"> + <gvxy_point X_Y="MBWH_TBCSxa;MBWH_TBCSya"/> + <gvxy_point X_Y="MBWH_TBCSxb;MBWH_TBCSyb"/> + <gvxy_point X_Y="MBWH_TBCSxc;MBWH_TBCSyc"/> +</gvxysx> +<gvxysx name="MBWH_TransvBeamCSupLargeSect2" material="Aluminium1" dZ="MBWH_TBCSthi2"> + <gvxy_point X_Y="MBWH_TBCSxa1;MBWH_TBCSya1"/> + <gvxy_point X_Y="MBWH_TBCSxb1;MBWH_TBCSyb1"/> +</gvxysx> + +<composition name="MBWH_TransvBeamCSupLargeSect"> + <posXYZ volume="MBWH_TransvBeamCSupLargeSect1" /> + <posXYZ volume="MBWH_TransvBeamCSupLargeSect2" X_Y_Z="0;0;MBWH_TBCSxoff"/> +</composition> + + +<composition name="MBWH_SpokesLargeSectorAssembly1"> + <posXYZ volume="MBWH_SpokeLargeSectorUprofile"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SlsRBpz1" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SlsRBpz2" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SlsRBpz3" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SlsRBpz4" rot="0.;0.;90."/> + <posXYZ volume="MBWH_SpokeLargeSectorUprofile" X_Y_Z=" MBWH_SlsIxpos;MBWH_SlsIypos;MBWH_SlsIzpos"/> +</composition> + +<composition name="MBWH_SpokesLargeSectorAssembly2"> + <posXYZ volume="MBWH_SpokeLargeSectorUprofile"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SlsRBpz1" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SlsRBpz2" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SlsRBpz3" rot="0.;0.;90."/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SlsRBpz4" rot="0.;0.;90."/> + <posXYZ volume="MBWH_SpokeLargeSectorUprofile" X_Y_Z=" MBWH_SlsIxpos;MBWH_SlsIypos;-MBWH_SlsIzpos"/> +</composition> + + +<composition name="MBWH_SpokesLargeSectorAssemblyTemp1"> + <posXYZ volume="MBWH_SpokesLargeSectorAssembly1" X_Y_Z="MBWH_SlsIxref;MBWH_Slsypos;0" rot="0.; 90.;90-MBWH_SLangle" /> +</composition> + +<composition name="MBWH_SpokesLargeSectorAssemblyTemp2"> + <posXYZ volume="MBWH_SpokesLargeSectorAssembly2" X_Y_Z="-MBWH_SlsIxref;MBWH_Slsypos;0" rot="180.; 90.;90+MBWH_SLangle" /> +</composition> + +<composition name="MBWH_InnerAssemblyTemp1"> + <posXYZ volume="MBWH_ConnectionBeamExtremityPlate" X_Y_Z="MBWH_CBEPxpos;MBWH_CBEPypos;MBWH_CBEPzpos" rot="0;0;90-MBWH_CBEPa1" /> + <posXYZ volume="MBWH_ExtremityPlate" X_Y_Z="MBWH_EPxpos;MBWH_EPypos;MBWH_EPzpos" rot="-90.; 0.;-90-MBWH_CBEPa1" /> + <posXYZ volume="MBWH_CentralReinforcingbar" X_Y_Z="MBWH_RBxpos;MBWH_RBypos;MBWH_RBzpos" rot="180.; 0.;-90-MBWH_CBEPa1" /> +</composition> + +<composition name="MBWH_InnerAssemblyTemp2"> + <posXYZ volume="MBWH_ConnectionBeamExtremityPlate" X_Y_Z="-MBWH_CBEPxpos;MBWH_CBEPypos;MBWH_CBEPzpos" rot="180;0;90+MBWH_CBEPa1" /> + <posXYZ volume="MBWH_ExtremityPlate" X_Y_Z="-MBWH_EPxpos;MBWH_EPypos;MBWH_EPzpos" rot="-90.; 0.;-90+MBWH_CBEPa1" /> + <posXYZ volume="MBWH_CentralReinforcingbar" X_Y_Z="-MBWH_RBxpos;MBWH_RBypos;MBWH_RBzpos" rot="0.; 0.;-90+MBWH_CBEPa1" /> +</composition> + +<composition name="MBWH_InnerAssembly"> + <posXYZ volume="MBWH_TransvBeamCSupLargeSect" X_Y_Z="0;0;0" /> + <posXYZ volume="MBWH_InnerAssemblyTemp1" /> + <posXYZ volume="MBWH_InnerAssemblyTemp2" /> +</composition> + + + +<composition name="MBWH_LargeSector"> + <posXYZ volume="MBWH_SpokesLargeSectorAssemblyTemp1" /> + <posXYZ volume="MBWH_SpokesLargeSectorAssemblyTemp2" /> + <posXYZ volume="MBWH_InnerAssembly" X_Y_Z="0;MBWH_TBCSypos;MBWH_TBCSzpos"/> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem11" X_Y_Z=" 0.;MBWH_CBLy11;0" rot="0.;90.;0."/> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem17" X_Y_Z=" 0.;MBWH_CBLy17;0" rot="0.;90.;0."/> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem22" X_Y_Z=" 0.;MBWH_CBLy22;0" rot="0.;90.;0."/> + <posXYZ volume="MBWH_CutProfilesCrossBracingLargeSectorItem26" X_Y_Z=" 0.;MBWH_CBLy26;0" rot="0.;90.;0."/> + + <posXYZ volume="MBWH_CroisillonBay1LargeSectorRot" X_Y_Z=" 0.;MBWH_Croily10;0" rot="0.;0.;0."/> + <posXYZ volume="MBWH_CroisillonBay2LargeSectorRot" X_Y_Z=" 0.;MBWH_Croily15;0" rot="0.;0.;0."/> + <posXYZ volume="MBWH_CroisillonBay3LargeSectorRot" X_Y_Z=" 0.;MBWH_Croily21;0" rot="0.;0.;0."/> + <posXYZ volume="MBWH_CroisillonBay4LargeSectorRot" X_Y_Z=" 0.;MBWH_Croily25+20;0" rot="0.;0.;0."/> +</composition> + + + +<!-- + ************************************************************** + *** **** + *** Small Sector **** + *** **** + ************************************************************** +--> + +<!-- ATLMHHBM0100 --> +<!-- Cut profiles Cross Bracing small sector --> +<var name="MBWH_CBSthi" value="6"/> + +<!-- Contreventements lengths --> +<!-- item numbering in ATLMHHBM0003 --> +<var name="MBWH_CBSl10" value="1650" /> <!-- item 10 --> +<var name="MBWH_CBSl14" value="1050" /> <!-- item 14 --> +<var name="MBWH_CBSl18a" value="533" /> <!-- item 18 --> +<var name="MBWH_CBSl18b" value="510" /> <!-- item 18 --> + +<!-- Contreventements positions (...to be confirmed...) --> +<var name="MBWH_CBSy10" value="9730" /> <!-- item 10 --> +<var name="MBWH_CBSy14" value="7760" /> <!-- item 14 --> +<var name="MBWH_CBSy18" value="5820" /> <!-- item 18 --> + +<!-- item numbering in ATLMHHBM0003 --> +<!-- Cross bracing, bay 1 small sector --> +<var name="MBWH_CBSl9" value="2625"/> <!-- item 9 --> <!-- drawing ATLMHHBM0047 --> +<!-- Cross bracing, bay 2 small sector --> +<var name="MBWH_CBSl11" value="2360"/> <!-- item 11 --> <!-- drawing ATLMHHBM0049 --> +<!-- Cross bracing, bay 3 small sector --> +<var name="MBWH_CBSl15" value="2025"/> <!-- item 15 --> <!-- drawing ATLMHHBM0052 --> + +<!-- item numbering in ATLMHHBM0003 --> +<!-- Contreventements, bay 1 small sector --> +<var name="MBWH_CBSl7" value="1430"/> <!-- item 7 --> <!-- drawing ATLMHHBM0100 --> +<var name="MBWH_CBSl8" value="1120"/> <!-- item 8 --> <!-- drawing ATLMHHBM0100 --> +<var name="MBWH_CBSb1xof" value="6"/> <!-- x offset item 7 & 8 , to be confirmed - see drawing ATLMHHBM0003 --> +<var name="MBWH_CBSb1yof" value="2"/> <!-- y offset item 7 & 8 , to be confirmed - see drawing ATLMHHBM0003 --> + +<!-- Contreventements, bay 2 small sector --> +<var name="MBWH_CBSl12" value="1360"/> <!-- item 12 --> <!-- drawing ATLMHHBM0100 --> +<var name="MBWH_CBSl13" value="890"/> <!-- item 13 --> <!-- drawing ATLMHHBM0100 --> + +<!-- Contreventements, bay 3 small sector --> +<var name="MBWH_CBSl16" value="1260"/> <!-- item 16 --> <!-- drawing ATLMHHBM0100 --> +<var name="MBWH_CBSl17" value="600"/> <!-- item 17 --> <!-- drawing ATLMHHBM0100 --> +<var name="MBWH_CBSb3xof" value="8"/> <!-- x offset item 16 & 17, to be confirmed - see drawing ATLMHHBM0003 --> +<var name="MBWH_CBSb3yof" value="2"/> <!-- y offset item 16 & 17, to be confirmed - see drawing ATLMHHBM0003 --> + +<!-- Plates --> + <!-- item 9 for Bay 1 --> <!-- drawing ATLMHHBM0057 --> +<var name="MBWH_CBPS9le" value="300"/> <!-- length --> +<var name="MBWH_CBPS9wi" value="270"/> <!-- width --> +<var name="MBWH_CBPS9cu" value="60"/> <!-- cut --> +<var name="MBWH_CBPS9ti" value="41.2"/> <!-- tilt --> <!-- ????????????? --> +<var name="MBWH_CBPS9za" value="1311"/> <!-- Plate offset --> +<var name="MBWH_CBPS9ya" value="-13.3"/> <!-- Plate offset --> + <!-- item 11 for Bay 2 --> <!-- drawing ATLMHHBM0049 --> +<var name="MBWH_CBPS11le" value="260"/> <!-- length --> +<var name="MBWH_CBPS11wi" value="300"/> <!-- width --> +<var name="MBWH_CBPS11cu" value="20"/> <!-- cut --> +<var name="MBWH_CBPS11ti" value="52.9"/> <!-- tilt --> <!-- ????????????? --> +<var name="MBWH_CBPS11za" value="764.9"/> <!-- Plate offset --> +<var name="MBWH_CBPS11ya" value="32.1"/> <!-- Plate offset w.r.t base --> + <!-- item 15 for Bay 3 --> <!-- drawing ATLMHHBM0052 --> +<var name="MBWH_CBPS15le" value="200"/> <!-- length --> +<var name="MBWH_CBPS15wi" value="380"/> <!-- width --> +<var name="MBWH_CBPS15cu" value="20"/> <!-- cut --> +<var name="MBWH_CBPS15ti" value="65.5"/> <!-- tilt --> <!-- ????????????? --> +<var name="MBWH_CBPS15za" value="473.8"/> <!-- Plate offset --> +<var name="MBWH_CBPS15ya" value="26"/> <!-- Plate offset --> + +<!-- positions (... measured on ATLMHHBM003 ... to be confirmed ...) --> +<var name="MBWH_Croisy9" value="10550"/> <!-- item 9 --> +<var name="MBWH_Croisy11" value="8580"/> <!-- item 11 --> +<var name="MBWH_Croisy15" value="6520"/> <!-- item 15 --> + +<!-- Special Cut profiles cross bracing small sector item 18--> +<!-- ATLMHHBM0067--> +<var name="MBWH_CBext18" value="138"/> +<var name="MBWH_CBhei18" value="35"/> +<var name="MBWH_CBSthi18" value="5"/> + + +<!-- ATLMHHBM0003B --> +<!-- Spokes Opening angle small sector --> +<var name="MBWH_SSangle" value="8.5"/> +<!-- Y-ref --> +<var name="MBWH_yref" value="1682.7"/> +<!-- Inner spoke y position wrt ref --> +<var name="MBWH_SIypos" value="2252.8"/> +<!-- External spoke y position wrt ref --> +<var name="MBWH_SEypos" value="280.7"/> + +<!-- Spoke small sector --> +<!-- Inner spoke small sector ATLMHHBM0085 --> +<!-- External spoke small sector ATLMHHBM0086 & ATLMHHBM0087 --> + +<!-- ATLMHHBM0085 ... --> +<!-- U profile length Inner spoke --> +<var name="MBWH_SsiUPlen" value="7680"/> +<!-- U profile length External spoke --> +<var name="MBWH_SseUPlen" value="9530"/> +<!-- U profile Inner spoke extremity cut height --> +<var name="MBWH_SsiUPhcu" value="12"/> + + +<!-- ATLMHHBM0085 --> +<!-- relative positions of reinforcing bars --> +<var name="MBWH_SssRBdz1" value="2575"/> +<var name="MBWH_SssRBdz2" value="2055"/> +<var name="MBWH_SssRBdz3" value="2250"/> + +<!-- Spoke Reinforcing Bar 1 and 2 --> +<var name="MBWH_SRBthi" value="25"/> + +<!-- ATLMHHBM0054 --> +<!-- Spoke Reinforcing Bar 1 --> +<var name="MBWH_SRB1dx1" value="962"/> +<var name="MBWH_SRB1dx2" value="1765"/> +<var name="MBWH_SRB1dx3" value="81"/> +<var name="MBWH_SRB1dx4" value="1712"/> +<var name="MBWH_SRB1dy1" value="150"/> +<var name="MBWH_SRB1dy2" value="440"/> +<var name="MBWH_SRB1dy3" value="180"/> +<var name="MBWH_SRB1alph" value="39"/> +<var name="MBWH_SRB1ypos" value="2910"/> + +<!-- ATLMHHBM0058 --> +<!-- Spoke Reinforcing Bar 2 --> +<var name="MBWH_SRB2dx1" value="2474"/> +<var name="MBWH_SRB2dx2" value="2429"/> +<var name="MBWH_SRB2dy" value="152"/> +<var name="MBWH_SRB2ypos" value="5020"/> + + +<!-- Cut profiles cross bracing small sector --> +<!-- Derived variables --> +<var name="MBWH_CBSxa" value="MBWH_CBext/2." /> +<var name="MBWH_CBSya" value="0." /> +<var name="MBWH_CBSxb" value="MBWH_CBSxa" /> +<var name="MBWH_CBSyb" value="MBWH_CBhei" /> +<var name="MBWH_CBSxc" value="MBWH_CBSxb-MBWH_CBSthi" /> +<var name="MBWH_CBSyc" value="MBWH_CBSyb" /> +<var name="MBWH_CBSxd" value="MBWH_CBSxc" /> +<var name="MBWH_CBSyd" value="MBWH_CBSthi" /> +<!-- Derived variables for special item 18 --> +<var name="MBWH_CBS18xa" value="MBWH_CBext18/2." /> +<var name="MBWH_CBS18ya" value="0." /> +<var name="MBWH_CBS18xb" value="MBWH_CBS18xa" /> +<var name="MBWH_CBS18yb" value="MBWH_CBhei18" /> +<var name="MBWH_CBS18xc" value="MBWH_CBS18xb-MBWH_CBSthi18" /> +<var name="MBWH_CBS18yc" value="MBWH_CBS18yb" /> +<var name="MBWH_CBS18xd" value="MBWH_CBS18xc" /> +<var name="MBWH_CBS18yd" value="MBWH_CBSthi18" /> + +<var name="MBWH_CBSy18b" value="MBWH_CBSy18-MBWH_CBhei18" /> + +<!-- Modelization --> + +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem10" material="Aluminium1" dZ="MBWH_CBSl10"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem14" material="Aluminium1" dZ="MBWH_CBSl14"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem18a" material="Aluminium1" dZ="MBWH_CBSl18a"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem18b" material="Aluminium1" dZ="MBWH_CBSl18b"> + <gvxy_point X_Y="MBWH_CBS18xa;MBWH_CBS18ya"/> + <gvxy_point X_Y="MBWH_CBS18xb;MBWH_CBS18yb"/> + <gvxy_point X_Y="MBWH_CBS18xc;MBWH_CBS18yc"/> + <gvxy_point X_Y="MBWH_CBS18xd;MBWH_CBS18yd"/> +</gvxysx> + +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem9" material="Aluminium1" dZ="MBWH_CBSl9"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem11" material="Aluminium1" dZ="MBWH_CBSl11"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem15" material="Aluminium1" dZ="MBWH_CBSl15"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> + + +<!-- Contreventements, bay 1 small sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem7" material="Aluminium1" dZ="MBWH_CBSl7"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem8" material="Aluminium1" dZ="MBWH_CBSl8"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> + +<!-- Contreventements, bay 2 small sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem12" material="Aluminium1" dZ="MBWH_CBSl12"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem13" material="Aluminium1" dZ="MBWH_CBSl13"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> + +<!-- Contreventements, bay 3 small sector --> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem16" material="Aluminium1" dZ="MBWH_CBSl16"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> +<gvxysx name="MBWH_CutProfilesCrossBracingSmallSectorItem17" material="Aluminium1" dZ="MBWH_CBSl17"> + <gvxy_point X_Y="MBWH_CBSxa;MBWH_CBSya"/> + <gvxy_point X_Y="MBWH_CBSxb;MBWH_CBSyb"/> + <gvxy_point X_Y="MBWH_CBSxc;MBWH_CBSyc"/> + <gvxy_point X_Y="MBWH_CBSxd;MBWH_CBSyd"/> +</gvxysx> + + + +<!-- cross bracing Plates small sector --> + +<!-- Bay 1 --> +<var name="MBWH_CBPS9x1" value="MBWH_CBPS9le/2." /> +<var name="MBWH_CBPS9y1" value="MBWH_CBPS9wi/2.-MBWH_CBPS9cu" /> +<var name="MBWH_CBPS9x2" value="MBWH_CBPS9x1-MBWH_CBPS9cu" /> +<var name="MBWH_CBPS9y2" value="MBWH_CBPS9wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateSmallSectorItem9" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPS9x1;MBWH_CBPS9y1"/> + <gvxy_point X_Y="MBWH_CBPS9x2;MBWH_CBPS9y2"/> +</gvxysxy> + +<!-- Bay 2 --> +<var name="MBWH_CBPS11x1" value="MBWH_CBPS11le/2." /> +<var name="MBWH_CBPS11y1" value="MBWH_CBPS11wi/2.-MBWH_CBPS11cu" /> +<var name="MBWH_CBPS11x2" value="MBWH_CBPS11x1-MBWH_CBPS11cu" /> +<var name="MBWH_CBPS11y2" value="MBWH_CBPS11wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateSmallSectorItem11" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPS11x1;MBWH_CBPS11y1"/> + <gvxy_point X_Y="MBWH_CBPS11x2;MBWH_CBPS11y2"/> +</gvxysxy> + +<!-- Bay 3 --> +<var name="MBWH_CBPS15x1" value="MBWH_CBPS15le/2." /> +<var name="MBWH_CBPS15y1" value="MBWH_CBPS15wi/2.-MBWH_CBPS15cu" /> +<var name="MBWH_CBPS15x2" value="MBWH_CBPS15x1-MBWH_CBPS15cu" /> +<var name="MBWH_CBPS15y2" value="MBWH_CBPS15wi/2." /> +<gvxysxy name="MBWH_CrossBracingPlateSmallSectorItem15" material="Aluminium1" dZ="MBWH_CBPth"> + <gvxy_point X_Y="MBWH_CBPS15x1;MBWH_CBPS15y1"/> + <gvxy_point X_Y="MBWH_CBPS15x2;MBWH_CBPS15y2"/> +</gvxysxy> + + +<!-- Bay 1 --> +<var name="MBWH_CBS9z" value="MBWH_CBSl9/2." /> +<var name="MBWH_CBPS9d" value="MBWH_CBPS9wi-2.*MBWH_CBPS9cu" /> +<var name="MBWH_CBPS9zb" value="MBWH_CBPS9za+sin(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBPS9d/2." /> +<var name="MBWH_CBPS9ya" value="MBWH_CBPS9cu*sqrt(2.)*cos((45-MBWH_CBPS9ti)*GENV_PiS180) -MBWH_CBhei+MBWH_CBPS9ya" /> +<var name="MBWH_CBPS9yb" value="-MBWH_CBPS9ya-cos(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBPS9d/2." /> +<var name="MBWH_CBPS9zc" value="MBWH_CBPS9zb+cos(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBPS9le/2" /> +<var name="MBWH_CBPS9yc" value="MBWH_CBPS9yb+sin(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBPS9le/2" /> + <!-- get positions of contreventements 7,8 using locations of item 9 extremities --> +<var name="MBWH_cvs9xo" value="-MBWH_CBPS9zc*cos(MBWH_CBPS9ti*GENV_PiS180)-0.5*(MBWH_CBhei)*sin(MBWH_CBPS9ti*GENV_PiS180)" /> +<var name="MBWH_cvs9yo" value=" MBWH_CBPS9zc*sin(MBWH_CBPS9ti*GENV_PiS180)-0.5*(MBWH_CBhei)*cos(MBWH_CBPS9ti*GENV_PiS180)" /> +<var name="MBWH_cvs9xu" value="MBWH_cvs9xo+MBWH_CBSl9*cos(MBWH_CBPS9ti*GENV_PiS180)" /> +<var name="MBWH_cvs9yu" value="MBWH_cvs9yo-MBWH_CBSl9*sin(MBWH_CBPS9ti*GENV_PiS180)" /> +<var name="MBWH_cvsx8" value="-MBWH_cvs9xu+cos(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBSl8/2.-MBWH_CBSb1xof" /> +<var name="MBWH_cvsy8" value=" MBWH_cvs9yu+sin(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBSl8/2.-MBWH_CBSb1yof" /> +<var name="MBWH_cvsx7" value="-MBWH_cvs9xo-cos(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBSl7/2.-MBWH_CBSb1xof" /> +<var name="MBWH_cvsy7" value=" MBWH_cvs9yo-sin(MBWH_CBPS9ti*GENV_PiS180)*MBWH_CBSl7/2.-MBWH_CBSb1yof" /> + +<composition name="MBWH_CrossBracingPlateSmallSectorItem9Rot"> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem9" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay1SmallSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem9" X_Y_Z="0;0;MBWH_CBS9z" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem9Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPS9yc;MBWH_CBPS9zc" rot="-MBWH_CBPS9ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem9Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPS9yc;MBWH_CBPS9zc" rot="-MBWH_CBPS9ti;0;0"/> +</composition> +<composition name="MBWH_CroisillonBay1SmallSector"> + <posXYZ volume="MBWH_CrossBracingBay1SmallSector" X_Y_Z="0;-MBWH_CBPS9yc;-MBWH_CBPS9zc" /> +</composition> +<composition name="MBWH_CroisillonBay1SmallSectorRot"> + <posXYZ volume="MBWH_CroisillonBay1SmallSector" rot="MBWH_CBPS9ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem7" X_Y_Z="MBWH_cvsx7;MBWH_cvsy7;0" rot="-MBWH_CBPS9ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem8" X_Y_Z="MBWH_cvsx8;MBWH_cvsy8;0" rot="-MBWH_CBPS9ti;90;0" /> +</composition> + +<!-- Bay 2 --> +<var name="MBWH_CBS11z" value="MBWH_CBSl11/2." /> +<var name="MBWH_CBPS11d" value="MBWH_CBPS11le-2.*MBWH_CBPS11cu" /> +<var name="MBWH_CBPS11zb" value="MBWH_CBPS11za+cos(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBPS11d/2." /> +<var name="MBWH_CBPS11yb" value="MBWH_CBPS11ya+sin(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBPS11d/2." /> +<var name="MBWH_CBPS11zc" value="MBWH_CBPS11zb+sin(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBPS11wi/2" /> +<var name="MBWH_CBPS11yc" value="MBWH_CBPS11yb-cos(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBPS11wi/2" /> + <!-- get positions of contreventements 13, 12 using locations of item 11 extremities --> +<var name="MBWH_cvs11xo" value="-(MBWH_CBSl11-MBWH_CBPS11zc)*cos(MBWH_CBPS11ti*GENV_PiS180)-(MBWH_CBhei-MBWH_CBPS11yc)*sin(MBWH_CBPS11ti*GENV_PiS180)"/> +<var name="MBWH_cvs11yo" value=" (MBWH_CBSl11-MBWH_CBPS11zc)*sin(MBWH_CBPS11ti*GENV_PiS180)-(MBWH_CBhei-MBWH_CBPS11yc)*cos(MBWH_CBPS11ti*GENV_PiS180)"/> +<var name="MBWH_cvs11xu" value="MBWH_cvs11xo+MBWH_CBSl11*cos(MBWH_CBPS11ti*GENV_PiS180)" /> +<var name="MBWH_cvs11yu" value="MBWH_cvs11yo-MBWH_CBSl11*sin(MBWH_CBPS11ti*GENV_PiS180)" /> +<var name="MBWH_cvsx13" value="-MBWH_cvs11xu+cos(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBSl13/2." /> +<var name="MBWH_cvsy13" value=" MBWH_cvs11yu+sin(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBSl13/2." /> +<var name="MBWH_cvsx12" value="-MBWH_cvs11xo-cos(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBSl12/2." /> +<var name="MBWH_cvsy12" value=" MBWH_cvs11yo-sin(MBWH_CBPS11ti*GENV_PiS180)*MBWH_CBSl12/2." /> + +<composition name="MBWH_CrossBracingPlateSmallSectorItem11Rot"> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem11" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay2SmallSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem11" X_Y_Z="0;MBWH_CBhei;MBWH_CBS11z" rot="0.;0.;180" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem11Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPS11yc;MBWH_CBPS11zc" rot="-MBWH_CBPS11ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem11Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPS11yc;MBWH_CBPS11zc" rot="-MBWH_CBPS11ti;0;0"/> +</composition> + +<composition name="MBWH_CroisillonBay2SmallSector"> + <posXYZ volume="MBWH_CrossBracingBay2SmallSector" X_Y_Z="0;-MBWH_CBPS11yc;-MBWH_CBPS11zc" /> +</composition> +<composition name="MBWH_CroisillonBay2SmallSectorRot"> + <posXYZ volume="MBWH_CroisillonBay2SmallSector" rot="MBWH_CBPS11ti;90;180" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem13" X_Y_Z="MBWH_cvsx13;MBWH_cvsy13;0" rot="-MBWH_CBPS11ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem12" X_Y_Z="MBWH_cvsx12;MBWH_cvsy12;0" rot="-MBWH_CBPS11ti;90;0" /> +</composition> + + + +<!-- Bay 3 --> +<var name="MBWH_CBS15z" value="MBWH_CBSl15/2." /> +<var name="MBWH_CBPS15d" value="MBWH_CBPS15le-2.*MBWH_CBPS15cu" /> +<var name="MBWH_CBPS15zb" value="MBWH_CBPS15za+cos(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBPS15d/2." /> +<var name="MBWH_CBPS15yb" value="MBWH_CBPS15ya+sin(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBPS15d/2." /> +<var name="MBWH_CBPS15zc" value="MBWH_CBPS15zb+sin(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBPS15wi/2" /> +<var name="MBWH_CBPS15yc" value="MBWH_CBPS15yb-cos(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBPS15wi/2" /> + <!-- get positions of contreventements 16, 17 using locations of item 15 extremities --> +<var name="MBWH_cvs15xo" value="-(MBWH_CBSl15-MBWH_CBPS15zc)*cos(MBWH_CBPS15ti*GENV_PiS180)-(MBWH_CBhei-MBWH_CBPS15yc)*sin(MBWH_CBPS15ti*GENV_PiS180)"/> +<var name="MBWH_cvs15yo" value=" (MBWH_CBSl15-MBWH_CBPS15zc)*sin(MBWH_CBPS15ti*GENV_PiS180)-(MBWH_CBhei-MBWH_CBPS15yc)*cos(MBWH_CBPS15ti*GENV_PiS180)"/> +<var name="MBWH_cvs15xu" value="MBWH_cvs15xo+MBWH_CBSl15*cos(MBWH_CBPS15ti*GENV_PiS180)" /> +<var name="MBWH_cvs15yu" value="MBWH_cvs15yo-MBWH_CBSl15*sin(MBWH_CBPS15ti*GENV_PiS180)" /> +<var name="MBWH_cvsx17" value="-MBWH_cvs15xu+cos(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBSl17/2.-MBWH_CBSb3xof" /> +<var name="MBWH_cvsy17" value=" MBWH_cvs15yu+sin(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBSl17/2.-MBWH_CBSb3yof" /> +<var name="MBWH_cvsx16" value="-MBWH_cvs15xo-cos(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBSl16/2.-MBWH_CBSb3xof" /> +<var name="MBWH_cvsy16" value=" MBWH_cvs15yo-sin(MBWH_CBPS15ti*GENV_PiS180)*MBWH_CBSl16/2.-MBWH_CBSb3yof" /> + +<composition name="MBWH_CrossBracingPlateSmallSectorItem15Rot"> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem15" rot="0.;90.;0" /> +</composition> +<composition name="MBWH_CrossBracingBay3SmallSector"> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem15" X_Y_Z="0;MBWH_CBhei;MBWH_CBS15z" rot="0.;0.;180" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem15Rot" X_Y_Z="-MBWH_CBPx;MBWH_CBPS15yc;MBWH_CBPS15zc" rot="-MBWH_CBPS15ti;0;0" /> + <posXYZ volume="MBWH_CrossBracingPlateSmallSectorItem15Rot" X_Y_Z=" MBWH_CBPx;MBWH_CBPS15yc;MBWH_CBPS15zc" rot="-MBWH_CBPS15ti;0;0"/> +</composition> + +<composition name="MBWH_CroisillonBay3SmallSector"> + <posXYZ volume="MBWH_CrossBracingBay3SmallSector" X_Y_Z="0;-MBWH_CBPS15yc;-MBWH_CBPS15zc" /> +</composition> +<composition name="MBWH_CroisillonBay3SmallSectorRot"> + <posXYZ volume="MBWH_CroisillonBay3SmallSector" rot="MBWH_CBPS15ti;90;180" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem16" X_Y_Z="MBWH_cvsx16;MBWH_cvsy16;0" rot="-MBWH_CBPS15ti;90;0" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem17" X_Y_Z="MBWH_cvsx17;MBWH_cvsy17;0" rot="-MBWH_CBPS15ti;90;0" /> +</composition> + + + + + + +<!-- Derived variables --> +<!-- positions of reinforcing bars --> +<var name="MBWH_SssRBpz1" value="MBWH_SsiUPlen/2.-MBWH_SssRBdz1-MBWH_SRBhos/2."/> +<var name="MBWH_SssRBpz2" value="MBWH_SssRBpz1-MBWH_SssRBdz2"/> +<var name="MBWH_SssRBpz3" value="MBWH_SssRBpz2-MBWH_SssRBdz3"/> + +<!-- Relative positions of spokes --> +<var name="MBWH_SssIxpos" value="MBWH_SRBpx+MBWH_SUPext/2.+MBWH_RBBthi+MBWH_RBSthi/2." /> +<var name="MBWH_SssIypos" value="-MBWH_RBSlen+MBWH_RBBsiz" /> +<var name="MBWH_SssIzof1" value="-(MBWH_SseUPlen-MBWH_SsiUPlen)/2." /> +<var name="MBWH_SssIzof2" value=" MBWH_SssIypos*tan(MBWH_SSangle*GENV_PiS180)+(MBWH_SIypos-MBWH_SEypos)/cos(MBWH_SSangle*GENV_PiS180)" /> +<var name="MBWH_SssIzpos" value="MBWH_SssIzof1+MBWH_SssIzof2" /> + +<!-- inner spokes position --> +<var name="MBWH_SssIxref" value="0.5*MBWH_SsiUPlen*sin(MBWH_SSangle*GENV_PiS180)+(MBWH_SUPhei-MBWH_SsiUPhcu)*cos(MBWH_SSangle*GENV_PiS180)"/> +<var name="MBWH_Sssypos" value="MBWH_yref+MBWH_SIypos+0.5*MBWH_SsiUPlen*cos(MBWH_SSangle*GENV_PiS180) "/> + +<!-- Inner spoke small sector --> + +<gvxysx name="MBWH_InnerSpokeSmallSectorUprofile" material="Aluminium4" dZ="MBWH_SsiUPlen-180"> + <gvxy_point X_Y="MBWH_SUPxa;MBWH_SUPya"/> + <gvxy_point X_Y="MBWH_SUPxb;MBWH_SUPyb"/> + <gvxy_point X_Y="MBWH_SUPxc;MBWH_SUPyc"/> + <gvxy_point X_Y="MBWH_SUPxd;MBWH_SUPyd"/> +</gvxysx> + +<!-- External spoke small sector --> + +<gvxysx name="MBWH_ExternalSpokeSmallSectorUprofile" material="Aluminium4" dZ="MBWH_SseUPlen"> + <gvxy_point X_Y="MBWH_SUPxa;MBWH_SUPya"/> + <gvxy_point X_Y="MBWH_SUPxb;MBWH_SUPyb"/> + <gvxy_point X_Y="MBWH_SUPxc;MBWH_SUPyc"/> + <gvxy_point X_Y="MBWH_SUPxd;MBWH_SUPyd"/> +</gvxysx> + +<!-- Spoke Reinforcing Bar 1 --> +<var name="MBWH_SRB1x1" value="MBWH_SRB1dx1/2"/> +<var name="MBWH_SRB1y1" value="0"/> +<var name="MBWH_SRB1x3" value="MBWH_SRB1dx2/2"/> +<var name="MBWH_SRB1y3" value="MBWH_SRB1dy3-MBWH_SRB1dy2"/> +<var name="MBWH_SRB1x2" value="MBWH_SRB1x3-MBWH_SRB1dx3"/> +<var name="MBWH_SRB1y2" value="MBWH_SRB1y3"/> +<var name="MBWH_SRB1x4" value="MBWH_SRB1dx4/2"/> +<var name="MBWH_SRB1y4" value="-MBWH_SRB1dy2"/> +<var name="MBWH_SRB1x6" value="MBWH_SRB1x1-MBWH_SRB1dy1*tan(0.5*MBWH_SRB1alph*GENV_PiS180)"/> +<var name="MBWH_SRB1y6" value="-MBWH_SRB1dy1"/> +<var name="MBWH_SRB1x5" value="MBWH_SRB1x6+(MBWH_SRB1dy2-MBWH_SRB1dy1)/tan(MBWH_SRB1alph*GENV_PiS180)"/> +<var name="MBWH_SRB1y5" value="MBWH_SRB1y4"/> + +<var name="MBWH_SRB1zpos" value="MBWH_SssIxpos-MBWH_CBext/2.-MBWH_SRBthi"/> + +<gvxysx name="MBWH_SpokeReinforcingBar1SmallSector" material="Aluminium1" dZ="MBWH_SRBthi"> + <gvxy_point X_Y="MBWH_SRB1x1;MBWH_SRB1y1"/> + <gvxy_point X_Y="MBWH_SRB1x2;MBWH_SRB1y2"/> + <gvxy_point X_Y="MBWH_SRB1x3;MBWH_SRB1y3"/> + <gvxy_point X_Y="MBWH_SRB1x4;MBWH_SRB1y4"/> + <gvxy_point X_Y="MBWH_SRB1x5;MBWH_SRB1y5"/> + <gvxy_point X_Y="MBWH_SRB1x6;MBWH_SRB1y6"/> +</gvxysx> + +<!-- Spoke Reinforcing Bar 1 --> +<var name="MBWH_SRB2x1" value="MBWH_SRB2dx1/2"/> +<var name="MBWH_SRB2y1" value="0"/> +<var name="MBWH_SRB2x2" value="MBWH_SRB2dx2/2"/> +<var name="MBWH_SRB2y2" value="-MBWH_SRB2dy"/> + +<var name="MBWH_SRB2zpos" value="MBWH_SssIxpos-MBWH_CBext/2.-MBWH_SRBthi"/> + +<gvxysx name="MBWH_SpokeReinforcingBar2SmallSector" material="Aluminium1" dZ="MBWH_SRBthi"> + <gvxy_point X_Y="MBWH_SRB2x1;MBWH_SRB2y1"/> + <gvxy_point X_Y="MBWH_SRB2x2;MBWH_SRB2y2"/> +</gvxysx> + + +<composition name="MBWH_SpokesSmallSectorAssembly1"> + <posXYZ volume="MBWH_InnerSpokeSmallSectorUprofile"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SssRBpz1" rot="0;0;90"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SssRBpz2" rot="0;0;90"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;MBWH_SssRBpz3" rot="0;0;90"/> + <posXYZ volume="MBWH_ExternalSpokeSmallSectorUprofile" X_Y_Z=" MBWH_SssIxpos;MBWH_SssIypos;MBWH_SssIzpos"/> +</composition> + +<composition name="MBWH_SpokesSmallSectorAssembly2"> + <posXYZ volume="MBWH_InnerSpokeSmallSectorUprofile"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SssRBpz1" rot="0;0;90"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SssRBpz2" rot="0;0;90"/> + <posXYZ volume="MBWH_ReinforcingBar" X_Y_Z=" MBWH_SRBpx;MBWH_SRBpy;-MBWH_SssRBpz3" rot="0;0;90"/> + <posXYZ volume="MBWH_ExternalSpokeSmallSectorUprofile" X_Y_Z=" MBWH_SssIxpos;MBWH_SssIypos;-MBWH_SssIzpos"/> +</composition> + +<composition name="MBWH_SpokesSmallSectorAssemblyTemp1"> + <posXYZ volume="MBWH_SpokesSmallSectorAssembly1" X_Y_Z="MBWH_SssIxref;MBWH_Sssypos;0" rot="0.; -90.;90-MBWH_SSangle" /> +</composition> + +<composition name="MBWH_SpokesSmallSectorAssemblyTemp2"> + <posXYZ volume="MBWH_SpokesSmallSectorAssembly2" X_Y_Z="-MBWH_SssIxref;MBWH_Sssypos;0" rot="180.; -90.;90+MBWH_SSangle" /> +</composition> + +<composition name="MBWH_SmallSector"> + <posXYZ volume="MBWH_SpokesSmallSectorAssemblyTemp1" /> + <posXYZ volume="MBWH_SpokesSmallSectorAssemblyTemp2" /> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem10" X_Y_Z="0;MBWH_CBSy10-5.;0" rot="0;90;0"/> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem14" X_Y_Z="0;MBWH_CBSy14;0" rot="0;90;0"/> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem18a" X_Y_Z="0;MBWH_CBSy18;0" rot="0;90;0"/> + <posXYZ volume="MBWH_CutProfilesCrossBracingSmallSectorItem18b" X_Y_Z="0;MBWH_CBSy18b;0" rot="0;90;0"/> + <posXYZ volume="MBWH_CroisillonBay1SmallSectorRot" X_Y_Z="0;MBWH_Croisy9;0"/> + <posXYZ volume="MBWH_CroisillonBay2SmallSectorRot" X_Y_Z="0;MBWH_Croisy11;0" rot="0;180;0"/> + <posXYZ volume="MBWH_CroisillonBay3SmallSectorRot" X_Y_Z="0;MBWH_Croisy15;0"/> + <posXYZ volume="MBWH_SpokeReinforcingBar1SmallSector" X_Y_Z="0;MBWH_SRB1ypos;MBWH_SRB1zpos-2.6"/> + <posXYZ volume="MBWH_SpokeReinforcingBar2SmallSector" X_Y_Z="0;MBWH_SRB2ypos;MBWH_SRB2zpos-2.6"/> +</composition> + + +<!-- + ************************************************************** + *** **** + *** Big Wheel Assembly **** + *** **** + ************************************************************** +--> + +<var name="MBWH_zposS" value="MBWH_zposL+MBWH_SlsIxpos" /> + +<composition name="MBWH_BigWheelOctant"> + <posXYZ volume="MBWH_SmallSector" X_Y_Z=" 0.;0.;MBWH_zposS" rot="0.;180.;22.5"/> + <posXYZ volume="MBWH_LargeSector" X_Y_Z=" 0.;0.;MBWH_zposL" rot="0.;180.;0."/> +</composition> + +<array name="MBWH_BWOA" values="-90;-45;0;45;90;135;180;225" /> <!-- octant angles --> + +<composition name="MBWH_BigWheel"> + <foreach index="I" begin="0" loops="8" > + <posXYZ volume="MBWH_BigWheelOctant" rot="0.;0.;MBWH_BWOA[I]"/> + </foreach> +</composition> + +<composition name="MBWH_BigWheels"> + <posXYZ volume="MBWH_BigWheel"/> + <posXYZ volume="MBWH_BigWheel" rot="0.;180.;0."/> +</composition> + +</section> + +<section name = "Calorimeter Saddle" + version = "7.0" + date = "9 May 2006" + author = "Daniel Pomarede" + top_volume = "SADL_CalorimeterSaddle"> + +<!-- name = Calorimeter Saddle section name = "Supports" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** Calorimeter Saddle **** + *** **** + ************************************************************** + ************************************************************** --> + + + +<!-- Andrei Table need for the structure missing in Oracle table --> +<var name="SADL_numboxes" value="12"/> +<var name="SADL_numbreps" value="1"/> +<var name="SADL_numtubes" value="4"/> +<var name="SADL_NumEmTubesBrep" value="1"/> +<var name="SADL_Gusset_tubecut" value="0"/> +<var name="SADL_num_Gusset_vol" value="12"/> +<var name="SADL_numbreppoint" value="10"/> +<var name="SADL_SymX" value="1"/> +<var name="SADL_SymY" value="0"/> +<var name="SADL_SymZ" value="1"/> +<var name="PiDegOver4" value=" 45"/> +<var name="PiDegOver2" value=" 90"/> +<var name="Pideg" value="180"/> +<var name="2Pideg" value="360"/> +<var name="SADL_Stzrot" value="45"/> +<var name="SADL_Stzrotmoins" value="-45"/> +<!--SaddleBOVN --> +<var name="SADL_BoxBeam_numHPlateVol" value="1"/> +<var name="SADL_BoxBeam_numVPlateVol" value="2"/> +<var name="SADL_numConnGussetBBeamVol" value="4"/> +<var name="SADL_numStiffenerVol" value="4"/> +<var name="SADL_numBarrelBlocking_JackVol" value="4"/> +<array name="SADL_SymBoxBeam" values="1;0;0"/> +<array name="SADL_SymExtendedBoxBeam" values="1;0;1"/> +<array name="SADL_SymConnGussetBBeam" values="1;0;1"/> +<array name="SADL_SymStiffener" values="1;0;1"/> +<array name="SADL_SymBarrel_Blocking_Jack" values="1;0;1"/> +<array name="SADL_Material" values="1;2"/> <!-- 1=Iron, 2=Aluminium--> +<array name="SADL_EmptyVolBoxBeam" values="0;0;0"/> <!--values="NUMEMBO(number empty boxes);NUMEMTU(tubes);NUMEMBR(breps)"--> +<array name="SADL_EmptyVolExtendedBoxBeam" values="0;0;0"/> +<array name="SADL_EmptyVolConnGussetBBeam" values="0;0;0"/> +<array name="SADL_EmptyVolStiffener" values="0;0;0"/> +<array name="SADL_EmptyVolBarrel_Blocking_Jack" values="0;0;0"/> +<!--SaddleTUVN --> +<var name="SADL_RoundedSupport" value="2"/> +<var name="SAD_Barrel_Blocking_Jack_Cylinder" value="4"/> +<array name="SADL_SymRoundedSupport" values="1;0;1"/> +<array name="SADL_SymBarrel_Blocking_Jack_Cylinder" values="1;0;1"/> +<array name="SADL_EmptyVolRoundedSupport" values="0;0;0"/> +<array name="SADL_EmptyVolBarrel_Blocking_Jack_Cylinder" values="0;0;0"/> + + + +<!-- for box --> +<var name="SADL_BoxBeam_HPlate_vol" value="1"/> +<var name="SADL_BoxBeam_VPlate_vol" value="2"/> +<var name="SADL_ConnGussetBBeam_vol" value="4"/> +<var name="SADL_ConnGussetBBeam_VPlate_vol" value="2"/> + +<!-- END --> + +<!-- ATLLBUS_0019 --> +<var name="SADL_BxBLen" value="6200"/> +<var name="SADL_BxBWid" value="520"/> +<var name="SADL_BxBHei" value="360"/> +<var name="SADL_BxBHThi1" value="90"/> +<var name="SADL_BxBHThi2" value="40"/> +<var name="SADL_BxBVThi" value="60"/> +<!-- ATLLBUS_0003 --> +<var name="SADL_BxBxref" value="2740"/> +<var name="SADL_BxByref" value="4000"/> + +<!-- Extended Barrel Box Beam --> + +<!-- ATLLEUS_0002 --> +<var name="SADL_BxBELen" value="3355"/> +<var name="SADL_EBxBzpos" value="4832.5"/> + +<!-- Rounded Support --> + +<!-- ATLLBUS_0006 & ATLLBUS_0009 & ATLLBUS_0012 & ATLLBUS_0015 --> +<var name="SADL_RSprof1" value="301.8"/> +<var name="SADL_RSprof2" value="32"/> +<var name="SADL_RSLenAC" value="731"/> +<var name="SADL_RSLenBD" value="746"/> +<var name="SADL_RSrin" value="4240"/> +<var name="SADL_RSrout" value="4310"/> + +<!-- Gusset --> + +<!-- ATLLBUS_0005 --> +<var name="SADL_GudZ" value="70"/> +<var name="SADL_GualphA" value="31"/> +<var name="SADL_GualphE" value="22.5"/> +<var name="SADL_GuthicAB" value="61"/> +<var name="SADL_GuthicBC" value="63.6"/> +<var name="SADL_GudyAF" value="252"/> +<var name="SADL_GudxAF" value="443.8"/> +<var name="SADL_GudxEF" value="55"/> +<var name="SADL_GudxFJ" value="1087.7"/> +<var name="SADL_GudyAJ" value="1634.3"/> +<var name="SADL_GudyFG" value="430"/> +<var name="SADL_GudxGH" value="510"/> +<var name="SADL_GudxFI" value="1125.5"/> +<var name="SADL_GudyHI" value="1440.6"/> + +<!-- ATLLBUS_0006 --> +<var name="SADL_Guposxg" value="2715"/> +<var name="SADL_Guposyg" value="-3485"/> + +<!-- ATLLBUS_0006 --> +<var name="SADL_Gussdz1" value="265"/> +<var name="SADL_Gussdz2" value="280"/> + +<!-- Connection Gusset / Box Beam --> +<!-- ATLLBUS_0006 & ATLLBUS_0007 --> +<var name="SADL_CGBBthi" value="25"/> +<var name="SADL_CGBBlen" value="870"/> +<var name="SADL_CGBBHwid" value="545"/> +<var name="SADL_CGBBVwid" value="400"/> + +<!-- Stiffener --> +<!-- ATLLBUS_0018 & ATLLEUS_0021 --> + +<var name="SADL_StifLen" value="1149"/> +<!-- extremity plate --> +<var name="SADL_StEPwid" value="152"/> +<var name="SADL_StEPthi" value="15"/> +<!-- tube-square --> +<var name="SADL_StTUthi" value="10"/> +<var name="SADL_StTUext" value="100"/> + +<!-- Doublet --> +<!-- ATLLBUS_0003 --> +<var name="SADL_SaddZmax" value="2820"/> <!-- Gusset surface is in this plane --> +<!-- ATLLEUS_0002 --> +<var name="SADL_ESadZmax" value="6150"/> <!-- Gusset surface is in this plane --> + +<!-- stiffener position --> +<!-- ATLLBUS_0008 --> +<var name="SADL_Stxpos" value=" 3362"/> +<var name="SADL_Stypos" value="-2910"/> + +<!-- Barrel Blocking Jacks --> +<!-- Barrel Blocking Jacks positions --> +<array name="SADL_BlJazpos" values="529;2369;3989;5789" /> +<var name="SADL_BlJaypos" value="-4390+50"/> <!-- added 50 for the modification of SADL_BBJSCthi (few lines below)--> +<var name="SADL_BlJaxpos" value="3000"/> + +<var name="SADL_BBJPlen" value="520"/> +<var name="SADL_BBJPwid" value="360"/> +<var name="SADL_BBJPthi" value="45"/> + +<var name="SADL_BBJBCthi" value="290"/> +<var name="SADL_BBJBCrad" value="152"/> +<var name="SADL_BBJSCthi" value="5"/> <!-- modified from 55 to 5 to avoid overlap --> +<var name="SADL_BBJSCrad" value="98"/> + + + +<!-- Derived variables --> + +<!-- Box Beam --> + +<var name="SADL_BxBHyp1" value="-SADL_BxBHei/2.-SADL_BxBHThi1/2."/> +<var name="SADL_BxBHyp2" value="SADL_BxBHei/2.+SADL_BxBHThi2/2."/> +<var name="SADL_BxBVxpos" value="SADL_BxBWid/2.-SADL_BxBVThi/2."/> + +<!-- Gusset --> + +<var name="SADL_Guxa" value="0"/> +<var name="SADL_Guya" value="0"/> +<var name="SADL_Guxb" value="SADL_Guxa+SADL_GuthicAB*sin(SADL_GualphA*GENV_PiS180)"/> +<var name="SADL_Guyb" value="SADL_Guya-SADL_GuthicAB*cos(SADL_GualphA*GENV_PiS180)"/> +<var name="SADL_Guxc" value="SADL_Guxb+SADL_GuthicBC/tan(SADL_GualphA*GENV_PiS180)"/> +<var name="SADL_Guyc" value="SADL_Guyb+SADL_GuthicBC"/> + +<var name="SADL_Guxf" value="SADL_Guxa+SADL_GudxAF"/> +<var name="SADL_Guyf" value="SADL_Guya-SADL_GudyAF"/> +<var name="SADL_Guxe" value="SADL_Guxf-SADL_GudxEF"/> +<var name="SADL_Guye" value="SADL_Guyf"/> +<var name="SADL_Guyd" value="SADL_Guyc"/> +<var name="SADL_Guxd" value="SADL_Guxe-(SADL_Guyd-SADL_Guye)*tan(SADL_GualphE*GENV_PiS180)"/> +<var name="SADL_Guxg" value="SADL_Guxf"/> +<var name="SADL_Guyg" value="SADL_Guyf+SADL_GudyFG"/> +<var name="SADL_Guxh" value="SADL_Guxg+SADL_GudxGH"/> +<var name="SADL_Guyh" value="SADL_Guyg"/> + +<var name="SADL_Guxi" value="SADL_Guxf+SADL_GudxFI"/> +<var name="SADL_Guyi" value="SADL_Guyh+SADL_GudyHI"/> +<var name="SADL_Guxj" value="SADL_Guxf+SADL_GudxFJ"/> +<var name="SADL_Guyj" value="SADL_Guya+SADL_GudyAJ"/> + +<var name="SADL_Guposxa" value="SADL_Guposxg-SADL_Guxg"/> +<var name="SADL_Guposya" value="SADL_Guposyg-SADL_Guyg"/> + +<var name="SADL_Gusspz2" value="SADL_Gussdz2+SADL_GudZ"/> +<var name="SADL_Gusspz1" value="SADL_Gussdz1+SADL_GudZ"/> + +<!-- Box beam positions --> + +<var name="SADL_BxBxpos" value="SADL_BxBxref+SADL_BxBWid/2"/> +<var name="SADL_BxBypos" value="-SADL_BxByref+SADL_BxBHei/2+SADL_BxBHThi1"/> + +<!-- Connection Gusset / Box Beam --> + +<var name="SADL_CGBBHPx" value="SADL_Guposxg+SADL_CGBBHwid/2"/> +<var name="SADL_CGBBHPy" value="SADL_Guposyg-SADL_CGBBthi/2"/> +<var name="SADL_CGBBVPx" value="SADL_Guposxg+SADL_CGBBthi/2"/> +<var name="SADL_CGBBVPy" value="SADL_Guposyg-SADL_CGBBVwid/2-SADL_CGBBthi"/> + +<!-- Stiffener --> + +<!-- height of flange --> +<var name="SADL_StTFlhei" value="SADL_StTUext-2*SADL_StTUthi"/> +<!-- x/y pos of flange/plate --> +<var name="SADL_StTFlpos" value="SADL_StTUext/2-SADL_StTUthi/2"/> +<!-- length --> +<var name="SADL_StifLen0" value="SADL_StifLen-2*SADL_StEPthi"/> +<!-- z pos of extremity plate --> +<var name="SADL_StEPzpos" value="SADL_StifLen/2-SADL_StEPthi/2"/> + +<!-- Barrel Doublet --> +<!-- ATLLBUS_0003 --> +<var name="SADL_SaddZ2" value="SADL_SaddZmax-SADL_Gussdz1-1.5*SADL_GudZ"/> +<!-- position of first unit is inferred from stiffener length --> +<var name="SADL_SaddZ1" value="SADL_SaddZ2-3.*SADL_GudZ-2.*SADL_Gussdz2-SADL_StifLen"/> + +<!-- stiffener position --> +<var name="SADL_Stzpos" value="(SADL_SaddZ1+SADL_SaddZ2)/2"/> + +<!-- Extended Barrel Doublet --> +<!-- ATLLEUS_0002 --> +<var name="SADL_ESaddZ2" value="SADL_ESadZmax-SADL_Gussdz1-1.5*SADL_GudZ"/> +<!-- position of first unit is inferred from stiffener length --> +<var name="SADL_ESaddZ1" value="SADL_ESaddZ2-3.*SADL_GudZ-2.*SADL_Gussdz2-SADL_StifLen"/> + +<!-- stiffener position --> +<var name="SADL_EStzpos" value="(SADL_ESaddZ1+SADL_ESaddZ2)/2"/> + +<!-- Barrel Blocking Jacks --> + +<var name="SADL_BBJSCyp" value="SADL_BBJSCthi/2"/> +<var name="SADL_BBJBCyp" value="SADL_BBJSCthi+SADL_BBJBCthi/2"/> +<var name="SADL_BBJPyp" value="SADL_BBJSCthi+SADL_BBJBCthi+SADL_BBJPthi/2"/> + +<!-- Andrei Table need for the structure missing in Oracle table --> +<var name="SADL_Gusset_Plate_Zmoins" value="-SADL_Gusspz2"/> +<var name="SADL_BxBVxposmoins" value="-SADL_BxBVxpos"/> +<var name="SADL_StEPzposmoins" value="-SADL_StEPzpos"/> +<var name="SADL_StTFlposRot" value="SADL_StTFlpos*sin(SADL_Stzrot*GENV_PiS180)"/> +<var name="SADL_StTFlposRotmoins" value="-SADL_StTFlposRot"/> +<!-- Andrei Table need for the structure missing in Oracle table --> + +<!-- Modelization --> + +<!-- Box Beam --> +<box name="SADL_BoxBeam_HPlate_Lower" material="Iron1" X_Y_Z="SADL_BxBWid ;SADL_BxBHThi1;SADL_BxBLen"/> +<box name="SADL_BoxBeam_HPlate_Upper" material="Iron1" X_Y_Z="SADL_BxBWid ;SADL_BxBHThi2;SADL_BxBLen"/> +<box name="SADL_BoxBeam_VPlate" material="Iron1" X_Y_Z="SADL_BxBVThi;SADL_BxBHei ;SADL_BxBLen"/> + +<!-- Extended Barrel Box Beam --> +<box name="SADL_Extended_BoxBeam_HPlate_Lower" material="Iron1" X_Y_Z="SADL_BxBWid ;SADL_BxBHThi1;SADL_BxBELen"/> +<box name="SADL_Extended_BoxBeam_HPlate_Upper" material="Iron1" X_Y_Z="SADL_BxBWid ;SADL_BxBHThi2;SADL_BxBELen"/> +<box name="SADL_Extended_BoxBeam_VPlate" material="Iron1" X_Y_Z="SADL_BxBVThi;SADL_BxBHei ;SADL_BxBELen"/> + +<composition name="SADL_BoxBeam"> + <posXYZ volume="SADL_BoxBeam_HPlate_Lower" X_Y_Z="0;SADL_BxBHyp1;0" /> + <posXYZ volume="SADL_BoxBeam_HPlate_Upper" X_Y_Z="0;SADL_BxBHyp2;0" /> + <posXYZ volume="SADL_BoxBeam_VPlate" X_Y_Z=" SADL_BxBVxpos;0;0" /> + <posXYZ volume="SADL_BoxBeam_VPlate" X_Y_Z="-SADL_BxBVxpos;0;0" /> +</composition> + +<composition name="SADL_Extended_BoxBeam"> + <posXYZ volume="SADL_Extended_BoxBeam_HPlate_Lower" X_Y_Z="0;SADL_BxBHyp1;0" /> + <posXYZ volume="SADL_Extended_BoxBeam_HPlate_Upper" X_Y_Z="0;SADL_BxBHyp2;0" /> + <posXYZ volume="SADL_Extended_BoxBeam_VPlate" X_Y_Z=" SADL_BxBVxpos;0;0" /> + <posXYZ volume="SADL_Extended_BoxBeam_VPlate" X_Y_Z="-SADL_BxBVxpos;0;0" /> +</composition> + +<!-- Rounded Support --> +<tubs name="SADL_RoundedSupportAC" material="Iron2" Rio_Z="SADL_RSrin;SADL_RSrout;SADL_RSLenAC" profile="SADL_RSprof1;SADL_RSprof2"/> +<tubs name="SADL_RoundedSupportBD" material="Iron2" Rio_Z="SADL_RSrin;SADL_RSrout;SADL_RSLenBD" profile="SADL_RSprof1;SADL_RSprof2"/> + +<!-- Gusset --> +<gvxy name="SADL_Gusset_Core" material="Iron" dZ="SADL_GudZ"> + <gvxy_point X_Y="SADL_Guxa;SADL_Guya"/> + <gvxy_point X_Y="SADL_Guxb;SADL_Guyb"/> + <gvxy_point X_Y="SADL_Guxc;SADL_Guyc"/> + <gvxy_point X_Y="SADL_Guxd;SADL_Guyd"/> + <gvxy_point X_Y="SADL_Guxe;SADL_Guye"/> + <gvxy_point X_Y="SADL_Guxf;SADL_Guyf"/> + <gvxy_point X_Y="SADL_Guxg;SADL_Guyg"/> + <gvxy_point X_Y="SADL_Guxh;SADL_Guyh"/> + <gvxy_point X_Y="SADL_Guxi;SADL_Guyi"/> + <gvxy_point X_Y="SADL_Guxj;SADL_Guyj"/> +</gvxy> + +<tubs name="SADL_Gusset_Cut" material="Aluminium4" Rio_Z="0;SADL_RSrout;SADL_RSLenBD" profile="SADL_RSprof1;SADL_RSprof2" /> + +<subtraction name="SADL_Gusset_Plate" > + <posXYZ volume="SADL_Gusset_Core" X_Y_Z="SADL_Guposxa;SADL_Guposya;0"/> + <posXYZ volume="SADL_Gusset_Cut"/> +</subtraction> + +<!-- Connection Gusset / Box Beam --> + +<box name="SADL_ConnGussetBBeam_HPlate" material="Iron4" X_Y_Z="SADL_CGBBHwid;SADL_CGBBthi;SADL_CGBBlen"/> +<box name="SADL_ConnGussetBBeam_VPlate" material="Iron4" X_Y_Z="SADL_CGBBthi;SADL_CGBBVwid;SADL_CGBBlen"/> + +<composition name="SADL_Saddle_UnitA"> + <posXYZ volume="SADL_RoundedSupportAC" /> + <posXYZ volume="SADL_Gusset_Plate" /> + <posXYZ volume="SADL_Gusset_Plate" X_Y_Z="Zero;Zero;SADL_Gusspz1" /> + <posXYZ volume="SADL_Gusset_Plate" X_Y_Z="Zero;Zero;SADL_Gusset_Plate_Zmoins" /> + <posXYZ volume="SADL_ConnGussetBBeam_HPlate" X_Y_Z="SADL_CGBBHPx;SADL_CGBBHPy;0" /> + <posXYZ volume="SADL_ConnGussetBBeam_VPlate" X_Y_Z="SADL_CGBBVPx;SADL_CGBBVPy;0" /> +</composition> + +<composition name="SADL_Saddle_UnitB"> + <posXYZ volume="SADL_RoundedSupportBD" /> + <posXYZ volume="SADL_Gusset_Plate" /> + <posXYZ volume="SADL_Gusset_Plate" X_Y_Z="0;0;SADL_Gusspz2" /> + <posXYZ volume="SADL_Gusset_Plate" X_Y_Z="0;0;-SADL_Gusspz2" /> + <posXYZ volume="SADL_ConnGussetBBeam_HPlate" X_Y_Z="SADL_CGBBHPx;SADL_CGBBHPy;0" /> + <posXYZ volume="SADL_ConnGussetBBeam_VPlate" X_Y_Z="SADL_CGBBVPx;SADL_CGBBVPy;0" /> +</composition> + +<!-- Stiffener --> + +<box name="SADL_Stiffener_Plate" material="Iron1" X_Y_Z="SADL_StEPwid;SADL_StEPwid;SADL_StEPthi"/> +<box name="SADL_Stiffener_Tube_Plate" material="Iron1" X_Y_Z="SADL_StTUext;SADL_StTUthi; SADL_StifLen0"/> +<box name="SADL_Stiffener_Tube_Flange" material="Iron1" X_Y_Z="SADL_StTUthi;SADL_StTFlhei;SADL_StifLen0"/> + +<composition name="SADL_Stiffener"> + <posXYZ volume="SADL_Stiffener_Tube_Flange" X_Y_Z=" SADL_StTFlpos;0;0" /> + <posXYZ volume="SADL_Stiffener_Tube_Flange" X_Y_Z="-SADL_StTFlpos;0;0" /> + <posXYZ volume="SADL_Stiffener_Tube_Plate" X_Y_Z="0; SADL_StTFlpos;0;0" /> + <posXYZ volume="SADL_Stiffener_Tube_Plate" X_Y_Z="0;-SADL_StTFlpos;0;0" /> + <posXYZ volume="SADL_Stiffener_Plate" X_Y_Z="0;0; SADL_StEPzpos" /> + <posXYZ volume="SADL_Stiffener_Plate" X_Y_Z="0;0;-SADL_StEPzpos" /> +</composition> + +<composition name="SADL_Saddle_Doublet"> + <posXYZ volume="SADL_Saddle_UnitB" X_Y_Z="0;0;SADL_SaddZ1" /> + <posXYZ volume="SADL_Saddle_UnitA" X_Y_Z="0;0;SADL_SaddZ2" /> + <posXYZ volume="SADL_Stiffener" X_Y_Z="SADL_Stxpos;SADL_Stypos;SADL_Stzpos" rot="Zero;Zero;SADL_Stzrot" /> +</composition> + +<composition name="SADL_Extended_Saddle_Doublet"> + <posXYZ volume="SADL_Extended_BoxBeam" X_Y_Z="SADL_BxBxpos;SADL_BxBypos;SADL_EBxBzpos" /> + <posXYZ volume="SADL_Saddle_UnitB" X_Y_Z="0;0;SADL_ESaddZ1" /> + <posXYZ volume="SADL_Saddle_UnitA" X_Y_Z="0;0;SADL_ESaddZ2" /> + <posXYZ volume="SADL_Stiffener" X_Y_Z="SADL_Stxpos;SADL_Stypos;SADL_EStzpos" rot="Zero;Zero;SADL_Stzrot" /> +</composition> + +<composition name="SADL_Saddle_Quadruplet"> + <posXYZ volume="SADL_Saddle_Doublet" /> + <posXYZ volume="SADL_Saddle_Doublet" rot="0;180;0" X_Y_Z="0.;0.;2*SADL_Stzpos"/> +</composition> + +<composition name="SADL_Extended_Saddle_Quadruplet"> + <posXYZ volume="SADL_Extended_Saddle_Doublet" /> + <posXYZ volume="SADL_Extended_Saddle_Doublet" rot="0;180;0" X_Y_Z="0.;0.;2*SADL_EStzpos" /> +</composition> + +<!-- Barrel Blocking Jacks --> + +<box name="SADL_Barrel_Blocking_Jack_Plate" material="Iron1" X_Y_Z="SADL_BBJPlen;SADL_BBJPwid;SADL_BBJPthi"/> + +<tubs name="SADL_Barrel_Blocking_Jack_BigCylinder" material="Iron2" Rio_Z="0;SADL_BBJBCrad;SADL_BBJBCthi" /> +<tubs name="SADL_Barrel_Blocking_Jack_SmallCylinder" material="Iron2" Rio_Z="0;SADL_BBJSCrad;SADL_BBJSCthi" /> + +<composition name="SADL_Barrel_Blocking_Jack_Unit"> + <posXYZ volume="SADL_Barrel_Blocking_Jack_SmallCylinder" X_Y_Z="0;SADL_BBJSCyp;0" rot="PiDegOver2;Zero;Zero"/> + <posXYZ volume="SADL_Barrel_Blocking_Jack_BigCylinder" X_Y_Z="0;SADL_BBJBCyp;0" rot="PiDegOver2;Zero;Zero"/> + <posXYZ volume="SADL_Barrel_Blocking_Jack_Plate" X_Y_Z="0;SADL_BBJPyp;0" rot="PiDegOver2;Zero;Zero"/> +</composition> + +<composition name="SADL_Barrel_Blocking_Jacks"> + <foreach index="I" begin="0" loops="4" > + <posXYZ volume="SADL_Barrel_Blocking_Jack_Unit" X_Y_Z=" SADL_BlJaxpos;SADL_BlJaypos; SADL_BlJazpos[I]"/> + <posXYZ volume="SADL_Barrel_Blocking_Jack_Unit" X_Y_Z="-SADL_BlJaxpos;SADL_BlJaypos; SADL_BlJazpos[I]"/> + <posXYZ volume="SADL_Barrel_Blocking_Jack_Unit" X_Y_Z=" SADL_BlJaxpos;SADL_BlJaypos;-SADL_BlJazpos[I]"/> + <posXYZ volume="SADL_Barrel_Blocking_Jack_Unit" X_Y_Z="-SADL_BlJaxpos;SADL_BlJaypos;-SADL_BlJazpos[I]"/> + </foreach> +</composition> + +<composition name="SADL_CalorimeterSaddle1"> + <posXYZ volume="SADL_BoxBeam" X_Y_Z=" SADL_BxBxpos;SADL_BxBypos;0" /> + <posXYZ volume="SADL_BoxBeam" X_Y_Z="-SADL_BxBxpos;SADL_BxBypos;0" /> + <posXYZ volume="SADL_Saddle_Quadruplet" /> + <posXYZ volume="SADL_Saddle_Quadruplet" rot="0;180.;0" /> + <posXYZ volume="SADL_Extended_Saddle_Quadruplet" /> + <posXYZ volume="SADL_Extended_Saddle_Quadruplet" rot="0;180.;0" /> + <posXYZ volume="SADL_Barrel_Blocking_Jacks" /> +</composition> + +<composition name="SADL_CalorimeterSaddle"> + <posXYZ volume="SADL_CalorimeterSaddle1" X_Y_Z=" 0.;-50.;0" /> +</composition> + +</section> + + +<section name = "TGC Big Wheel" + version = "7.0" + date = "14 04 2008, redone 20 08 2013" + author = "laurent+andrea, jochen - initial implementation removed " + top_volume = "useless"> + +<!-- general parameters for surrounding boxes --> + +<var name="TGC_BigWheel_SurBoxWallThick" value=" 12. " /> +<var name="TGC_BigWheel_SurBoxSideLength" value=" 250. " /> +<var name="TGC_BigWheel_SurBoxDistance" value=" 50. " /> +<var name="TGC_BigWheel_SurBoxSpcLength" value=" 200. " /> +<var name="TGC_BigWheel_SurBoxSpcHeight" value=" 80. " /> +<var name="TGC_BigWheel_SurBoxSpcWall" value=" 5. " /> + +<!-- name = TGC2 Big Wheel section name = "Supports" --> +<!-- ************************************************************** + ************************************************************** + *** **** + *** TGC Big Wheel **** + *** **** + ************************************************************** + ************************************************************** --> +<var name="TBWH_BigWheel_ZPosL" value=" 14730. "/> + +<var name="TBWH_BigWheel_RadDist00" value=" 2445. "/> +<var name="TBWH_BigWheel_RadDist01" value=" 3700. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist02" value=" 4562. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist03" value=" 5946. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist04" value=" 6974. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist05" value=" 8134. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist06" value=" 9161. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist07" value=" 10527. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist08" value=" 11348. - TBWH_BigWheel_RadDist00"/> +<var name="TBWH_BigWheel_RadDist09" value=" 12230. "/> +<var name="TBWH_BigWheel_RadDistOutPlate" value=" 4195. "/> +<var name="TBWH_BigWheel_RadDistPlate02" value=" 4140. - TBWH_BigWheel_RadDist00 + 170. + 30. "/> <!-- two different values on same blueprint --> +<var name="TBWH_BigWheel_PhiDistRPlate1" value=" 388. "/> + +<var name="TBWH_BigWheel_ZThickPhiPlate" value=" 30. "/> +<var name="TBWH_BigWheel_WallThickPhiPlate" value=" 16. "/> +<var name="TBWH_BigWheel_RThickPhiPlate1" value=" 200. "/> +<var name="TBWH_BigWheel_RThickPhiPlate2" value=" 150. "/> +<var name="TBWH_BigWheel_RThickPhiPlate3" value=" 100. "/> +<var name="TBWH_BigWheel_ZThickRPlate" value=" 150. "/> +<var name="TBWH_BigWheel_PhiThickRPlate" value=" 50. "/> +<var name="TBWH_BigWheel_WallThickRPlate" value=" 5. "/> + +<var name="TBWH_BigWheel_PhiPlaDelEvenOdd" value="TBWH_BigWheel_RThickPhiPlate2 + TBWH_BigWheel_PhiThickRPlate/2."/> + +<var name="TBWH_BigWheel_PhiStepAngle1" value=" 7.5 * GENV_PiS180 "/> +<var name="TBWH_BigWheel_PhiStepAngle2" value=" 15. * GENV_PiS180 "/> + +<var name="TBWH_BigWheel_PhiStep1toP1" value=" -88. "/> <!-- estimate --> +<var name="TBWH_BigWheel_PhiStepP1toP2" value=" 372. "/> <!-- estimate --> + +<var name="TBWH_BigWheel_PhiStep2toP1" value=" 459. "/> +<var name="TBWH_BigWheel_PhiStepP2toP2" value=" 780. + TBWH_BigWheel_PhiThickRPlate"/> <!-- estimate --> + +<var name="TBWH_BigWheel_TubeInnerR" value=" 2335. "/> +<var name="TBWH_BigWheel_TubeOuterR" value=" TBWH_BigWheel_TubeInnerR + 405. "/> + +<!-- lowest phi plate - plate 1 --> +<gvxysx name="TBWH_PhiPlate1" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" (TBWH_BigWheel_RadDist00+TBWH_BigWheel_RadDist01+TBWH_BigWheel_RThickPhiPlate1)*sin(TBWH_BigWheel_PhiStepAngle2); TBWH_BigWheel_RadDist01+TBWH_BigWheel_RThickPhiPlate1"/> + <gvxy_point X_Y=" (TBWH_BigWheel_RadDist00+TBWH_BigWheel_RadDist01)*sin(TBWH_BigWheel_PhiStepAngle2); TBWH_BigWheel_RadDist01"/> +</gvxysx> + +<!-- first phi plate with kink - plate 2 --> +<var name="TBWH_PhiPlate2_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist02-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate2_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist02-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate2" /> +<var name="TBWH_PhiPlate2_XPos2" value="TBWH_PhiPlate2_XPos1+(TBWH_BigWheel_RadDist02*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate2_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)" /> +<var name="TBWH_PhiPlate2_YPos2" value="TBWH_BigWheel_RadDist02-(TBWH_BigWheel_RadDist02*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate2_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TBWH_PhiPlate2_Even" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos3; TBWH_BigWheel_RadDist02+TBWH_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate2_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate2_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos1; TBWH_BigWheel_RadDist02"/> +</gvxysx> + +<gvxysx name="TBWH_PhiPlate2_Odd" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos3-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist02+TBWH_BigWheel_RThickPhiPlate2-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate2_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate2_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate2_XPos1-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist02-TBWH_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- second phi plate with kink - plate 3 --> +<var name="TBWH_PhiPlate3_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist03-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate3_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist03-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate3" /> +<var name="TBWH_PhiPlate3_XPos2" value="TBWH_PhiPlate3_XPos1+(TBWH_BigWheel_RadDist03*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate3_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> +<var name="TBWH_PhiPlate3_YPos2" value="TBWH_BigWheel_RadDist03-(TBWH_BigWheel_RadDist03*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate3_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)+sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TBWH_PhiPlate3" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate3_XPos3; TBWH_BigWheel_RadDist03+TBWH_BigWheel_RThickPhiPlate3"/> + <gvxy_point X_Y=" TBWH_PhiPlate3_XPos2+TBWH_BigWheel_RThickPhiPlate3*sin(TBWH_BigWheel_PhiStepAngle2)+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate3_YPos2+TBWH_BigWheel_RThickPhiPlate3*cos(TBWH_BigWheel_PhiStepAngle2)-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate3_XPos2+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate3_YPos2-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate3_XPos1; TBWH_BigWheel_RadDist03"/> +</gvxysx> + +<!-- third phi plate with kink - plate 4 --> +<var name="TBWH_PhiPlate4_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist04-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate4_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist04-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate2" /> +<var name="TBWH_PhiPlate4_XPos2" value="TBWH_PhiPlate4_XPos1+(TBWH_BigWheel_RadDist04*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate4_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)" /> +<var name="TBWH_PhiPlate4_YPos2" value="TBWH_BigWheel_RadDist04-(TBWH_BigWheel_RadDist04*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate4_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TBWH_PhiPlate4_Even" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos3; TBWH_BigWheel_RadDist04+TBWH_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate4_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate4_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos1; TBWH_BigWheel_RadDist04"/> +</gvxysx> + +<gvxysx name="TBWH_PhiPlate4_Odd" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos3-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist04+TBWH_BigWheel_RThickPhiPlate2-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate4_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate4_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate4_XPos1-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist04-TBWH_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- forth phi plate with kink - plate 5 --> +<var name="TBWH_PhiPlate5_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist05-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate5_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist05-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate3" /> +<var name="TBWH_PhiPlate5_XPos2" value="TBWH_PhiPlate5_XPos1+(TBWH_BigWheel_RadDist05*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate5_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> +<var name="TBWH_PhiPlate5_YPos2" value="TBWH_BigWheel_RadDist05-(TBWH_BigWheel_RadDist05*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate5_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)+sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TBWH_PhiPlate5" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate5_XPos3; TBWH_BigWheel_RadDist05+TBWH_BigWheel_RThickPhiPlate3"/> + <gvxy_point X_Y=" TBWH_PhiPlate5_XPos2+TBWH_BigWheel_RThickPhiPlate3*sin(TBWH_BigWheel_PhiStepAngle2)+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate5_YPos2+TBWH_BigWheel_RThickPhiPlate3*cos(TBWH_BigWheel_PhiStepAngle2)-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate5_XPos2+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate5_YPos2-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate5_XPos1; TBWH_BigWheel_RadDist05"/> +</gvxysx> + +<!-- fifth phi plate with kink - plate 6 --> +<var name="TBWH_PhiPlate6_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist06-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate6_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist06-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate2" /> +<var name="TBWH_PhiPlate6_XPos2" value="TBWH_PhiPlate6_XPos1+(TBWH_BigWheel_RadDist06*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate6_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)" /> +<var name="TBWH_PhiPlate6_YPos2" value="TBWH_BigWheel_RadDist06-(TBWH_BigWheel_RadDist06*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate6_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TBWH_PhiPlate6_Even" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos3; TBWH_BigWheel_RadDist06+TBWH_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate6_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate6_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos1; TBWH_BigWheel_RadDist06"/> +</gvxysx> + +<gvxysx name="TBWH_PhiPlate6_Odd" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos3-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist06+TBWH_BigWheel_RThickPhiPlate2-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate6_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate6_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate6_XPos1-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist06-TBWH_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- sixth phi plate with kink - plate 7 --> +<var name="TBWH_PhiPlate7_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist07-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate7_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist07-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate3" /> +<var name="TBWH_PhiPlate7_XPos2" value="TBWH_PhiPlate7_XPos1+(TBWH_BigWheel_RadDist07*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate7_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> +<var name="TBWH_PhiPlate7_YPos2" value="TBWH_BigWheel_RadDist07-(TBWH_BigWheel_RadDist07*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate7_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)+sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TBWH_PhiPlate7" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate7_XPos3; TBWH_BigWheel_RadDist07+TBWH_BigWheel_RThickPhiPlate3"/> + <gvxy_point X_Y=" TBWH_PhiPlate7_XPos2+TBWH_BigWheel_RThickPhiPlate3*sin(TBWH_BigWheel_PhiStepAngle2)+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate7_YPos2+TBWH_BigWheel_RThickPhiPlate3*cos(TBWH_BigWheel_PhiStepAngle2)-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate7_XPos2+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate7_YPos2-(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate7_XPos1; TBWH_BigWheel_RadDist07"/> +</gvxysx> + +<!-- seventh phi plate with kink - plate 8 --> +<var name="TBWH_PhiPlate8_XPos1" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist08-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2." /> +<var name="TBWH_PhiPlate8_XPos3" value="tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RadDist08-TBWH_BigWheel_PhiStep1toP1/cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/cos(TBWH_BigWheel_PhiStepAngle2)/2.+tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_RThickPhiPlate2" /> +<var name="TBWH_PhiPlate8_XPos2" value="TBWH_PhiPlate8_XPos1+(TBWH_BigWheel_RadDist08*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate8_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*cos(TBWH_BigWheel_PhiStepAngle2)" /> +<var name="TBWH_PhiPlate8_YPos2" value="TBWH_BigWheel_RadDist08-(TBWH_BigWheel_RadDist08*tan(TBWH_BigWheel_PhiStepAngle2)-TBWH_PhiPlate8_XPos1)*cos(TBWH_BigWheel_PhiStepAngle2)*sin(TBWH_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TBWH_PhiPlate8_Even" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos3; TBWH_BigWheel_RadDist08+TBWH_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate8_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2); TBWH_PhiPlate8_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos1; TBWH_BigWheel_RadDist08"/> +</gvxysx> + +<gvxysx name="TBWH_PhiPlate8_Odd" material="Aluminium" dZ="TBWH_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos3-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist08+TBWH_BigWheel_RThickPhiPlate2-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos2+TBWH_BigWheel_RThickPhiPlate2*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate8_YPos2+TBWH_BigWheel_RThickPhiPlate2*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos2+TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2)-tan(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_PhiPlate8_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TBWH_PhiPlate8_XPos1-tan(TBWH_BigWheel_PhiStepAngle1)*TBWH_BigWheel_PhiPlaDelEvenOdd; TBWH_BigWheel_RadDist08-TBWH_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- first R plate - center --> +<box name="TBWH_RPlate1_base" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickRPlate" /> +<box name="TBWH_RPlate1_sub" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00+TBWH_BigWheel_WallThickRPlate; TBWH_BigWheel_ZThickRPlate-2.*TBWH_BigWheel_WallThickRPlate" /> + +<subtraction name="TBWH_RPlate1"> + <posXYZ volume="TBWH_RPlate1_base" X_Y_Z=" TBWH_BigWheel_PhiDistRPlate1/2.+TBWH_BigWheel_PhiThickRPlate/2.; (TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00)/2.; 0." /> + <posXYZ volume="TBWH_RPlate1_sub" X_Y_Z=" TBWH_BigWheel_PhiDistRPlate1/2.+TBWH_BigWheel_PhiThickRPlate/2.+TBWH_BigWheel_WallThickRPlate; (TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00)/2.; 0." /> +</subtraction> + +<!-- second R plate - 7.5 degrees --> +<box name="TBWH_RPlate2_base" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00)/cos(TBWH_BigWheel_PhiStepAngle1); TBWH_BigWheel_ZThickRPlate" /> +<box name="TBWH_RPlate2_sub" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00+TBWH_BigWheel_WallThickRPlate)/cos(TBWH_BigWheel_PhiStepAngle1); TBWH_BigWheel_ZThickRPlate-2.*TBWH_BigWheel_WallThickRPlate" /> + +<subtraction name="TBWH_RPlate2"> + <posXYZ volume="TBWH_RPlate2_base" X_Y_Z=" TBWH_PhiPlate2_XPos1+(TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00-2.*TBWH_BigWheel_RadDist02)*tan(TBWH_BigWheel_PhiStepAngle1)/2.; (TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TBWH_RPlate2_sub" X_Y_Z=" TBWH_PhiPlate2_XPos1+(TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00-2.*TBWH_BigWheel_RadDist02)*tan(TBWH_BigWheel_PhiStepAngle1)/2.-TBWH_BigWheel_WallThickRPlate; (TBWH_BigWheel_RadDist09+TBWH_BigWheel_RadDistPlate02-TBWH_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle1/GENV_PiS180" /> +</subtraction> + +<!-- third R plate - 7.5 degrees TBWH_BigWheel_PhiThickRPlate--> +<var name="TBWH_RPlate3_length" value="(TBWH_BigWheel_RadDist09 - TBWH_BigWheel_RadDist00 - (TBWH_PhiPlate2_YPos2-TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)) - (TBWH_BigWheel_PhiStep2toP1 + TBWH_BigWheel_PhiThickRPlate) * sin(TBWH_BigWheel_PhiStepAngle2) ) / cos(TBWH_BigWheel_PhiStepAngle1)" /> + +<box name="TBWH_RPlate3_base" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; TBWH_RPlate3_length; TBWH_BigWheel_ZThickRPlate" /> +<box name="TBWH_RPlate3_sub1" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; TBWH_RPlate3_length + TBWH_BigWheel_WallThickRPlate/cos(TBWH_BigWheel_PhiStepAngle1); TBWH_BigWheel_ZThickRPlate-2.*TBWH_BigWheel_WallThickRPlate" /> +<box name="TBWH_RPlate3_sub2" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; TBWH_RPlate3_length; TBWH_BigWheel_ZThickRPlate+2.*TBWH_BigWheel_WallThickRPlate" /> + +<subtraction name="TBWH_RPlate3_tmp"> + <posXYZ volume="TBWH_RPlate3_base" X_Y_Z=" TBWH_RPlate3_length/2.*sin(TBWH_BigWheel_PhiStepAngle1); TBWH_RPlate3_length/2.*cos(TBWH_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TBWH_RPlate3_sub1" X_Y_Z=" TBWH_RPlate3_length/2.*sin(TBWH_BigWheel_PhiStepAngle1)-TBWH_BigWheel_WallThickRPlate; TBWH_RPlate3_length/2.*cos(TBWH_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TBWH_RPlate3_sub2" X_Y_Z="TBWH_RPlate3_length/2.*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/2*(cos(TBWH_BigWheel_PhiStepAngle1)-cos(TBWH_BigWheel_PhiStepAngle2));TBWH_RPlate3_length/2.*cos(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_PhiThickRPlate/2*(sin(TBWH_BigWheel_PhiStepAngle2)-sin(TBWH_BigWheel_PhiStepAngle1)); 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<var name="TBWH_RPlate3_PosX" value="TBWH_PhiPlate2_XPos2+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1)*cos(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiThickRPlate*(0.5*cos(TBWH_BigWheel_PhiStepAngle1)-cos(TBWH_BigWheel_PhiStepAngle2))-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> + +<var name="TBWH_RPlate3_PosY" value="TBWH_PhiPlate2_YPos2+(TBWH_BigWheel_PhiStep2toP1-TBWH_BigWheel_PhiStepP2toP2)*sin(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_PhiThickRPlate*(sin(TBWH_BigWheel_PhiStepAngle2)-0.5*sin(TBWH_BigWheel_PhiStepAngle1))+sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate" /> + +<composition name="TBWH_RPlate3" > + <posXYZ volume="TBWH_RPlate3_tmp" X_Y_Z=" TBWH_RPlate3_PosX-GENV_Eps; TBWH_RPlate3_PosY ; 0." /> +</composition> + +<!-- first R plate - 15 degrees --> +<box name="TBWH_RPlate4_base" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00)/cos(TBWH_BigWheel_PhiStepAngle2); TBWH_BigWheel_ZThickRPlate" /> +<box name="TBWH_RPlate4_sub" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00+TBWH_BigWheel_WallThickRPlate)/cos(TBWH_BigWheel_PhiStepAngle2); TBWH_BigWheel_ZThickRPlate-2.*TBWH_BigWheel_WallThickRPlate" /> + +<subtraction name="TBWH_RPlate4"> + <posXYZ volume="TBWH_RPlate4_base" X_Y_Z=" (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00)*tan(TBWH_BigWheel_PhiStepAngle2)/2.+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1-1.5*TBWH_BigWheel_PhiThickRPlate)/cos(TBWH_BigWheel_PhiStepAngle2); (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TBWH_RPlate4_sub" X_Y_Z=" (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00)*tan(TBWH_BigWheel_PhiStepAngle2)/2.-TBWH_BigWheel_WallThickRPlate+(TBWH_BigWheel_PhiStepP2toP2-TBWH_BigWheel_PhiStep2toP1-1.5*TBWH_BigWheel_PhiThickRPlate)/cos(TBWH_BigWheel_PhiStepAngle2); (TBWH_BigWheel_RadDist09-TBWH_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<!-- second R plate - 15 degrees --> +<box name="TBWH_RPlate5_base" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_RadDistOutPlate)/cos(TBWH_BigWheel_PhiStepAngle2); TBWH_BigWheel_ZThickRPlate" /> +<box name="TBWH_RPlate5_sub" material="Aluminium" X_Y_Z=" TBWH_BigWheel_PhiThickRPlate; (TBWH_BigWheel_RadDist09-cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_RadDistOutPlate)/cos(TBWH_BigWheel_PhiStepAngle2)+TBWH_BigWheel_WallThickRPlate; TBWH_BigWheel_ZThickRPlate-2.*TBWH_BigWheel_WallThickRPlate" /> + +<var name="TBWH_RPlate5_PosX" value="sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_RadDistOutPlate/2. +TBWH_PhiPlate2_XPos2 +TBWH_BigWheel_PhiStepP2toP2*cos(TBWH_BigWheel_PhiStepAngle2) +tan(TBWH_BigWheel_PhiStepAngle2)*(TBWH_BigWheel_RadDist09/2.-TBWH_PhiPlate2_YPos2+TBWH_BigWheel_PhiStepP2toP2*sin(TBWH_BigWheel_PhiStepAngle2)-TBWH_BigWheel_RadDist00)"/> + +<subtraction name="TBWH_RPlate5"> + <posXYZ volume="TBWH_RPlate5_base" X_Y_Z=" TBWH_RPlate5_PosX - cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate/2.; (TBWH_BigWheel_RadDist09+cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_RadDistOutPlate)/2. - TBWH_BigWheel_RadDist00 + sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TBWH_RPlate5_sub" X_Y_Z=" TBWH_RPlate5_PosX - cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate/2.+TBWH_BigWheel_WallThickRPlate; (TBWH_BigWheel_RadDist09+cos(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_RadDistOutPlate)/2.- TBWH_BigWheel_RadDist00 + sin(TBWH_BigWheel_PhiStepAngle2)*TBWH_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TBWH_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<composition name="TBWH_Support_EvenSector_ASide"> + <posXYZ volume="TBWH_PhiPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate2_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate4_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate6_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate7" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate8_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TBWH_Support_OddSector_ASide"> + <posXYZ volume="TBWH_PhiPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate2_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate4_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate6_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate7" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate8_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TBWH_Support_EvenSector_CSide"> + <posXYZ volume="TBWH_PhiPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate2_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate4_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate6_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate7" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate8_Even" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TBWH_Support_OddSector_CSide"> + <posXYZ volume="TBWH_PhiPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate2_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate4_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate6_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate7" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_PhiPlate8_Odd" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; 0." /> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate1" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate2" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate3" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate4" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; -TBWH_BigWheel_ZThickPhiPlate-TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TBWH_RPlate5" X_Y_Z=" 0.; TBWH_BigWheel_RadDist00; TBWH_BigWheel_ZThickPhiPlate+TBWH_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> +</composition> + +<!-- tube and boxes are rather rouhg approximated here - should be okay though - Cavern Background only --> + +<tubs name="TBWH_CentralTube" material="Aluminium" Rio_Z="TBWH_BigWheel_TubeInnerR; TBWH_BigWheel_TubeOuterR; TBWH_BigWheel_WallThickPhiPlate" nbPhi="20" /> + +<box name="TBWH_SurBox_base" material="Aluminium" X_Y_Z=" 2.*TBWH_BigWheel_RadDist09*tan(TBWH_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSideLength; TGC_BigWheel_SurBoxSideLength" /> +<box name="TBWH_SurBox_inner" material="Aluminium" X_Y_Z=" 2.*TBWH_BigWheel_RadDist09*tan(TBWH_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall" /> + +<subtraction name="TBWH_SurBox_default" > + <posXYZ volume="TBWH_SurBox_base" X_Y_Z=" 0.; TBWH_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> + <posXYZ volume="TBWH_SurBox_inner" X_Y_Z=" 0.; TBWH_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> +</subtraction> + +<box name="TBWH_SurBoxSpc_base" material="Aluminium" X_Y_Z=" 2.*TBWH_BigWheel_RadDist09*tan(TBWH_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSpcLength; TGC_BigWheel_SurBoxSpcHeight" /> +<box name="TBWH_SurBoxSpc_inner" material="Aluminium" X_Y_Z=" 2.*TBWH_BigWheel_RadDist09*tan(TBWH_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSpcLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSpcHeight" /> + +<subtraction name="TBWH_SurBoxSpc" > + <posXYZ volume="TBWH_SurBoxSpc_base" X_Y_Z=" 0.; TBWH_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2." /> + <posXYZ volume="TBWH_SurBoxSpc_inner" X_Y_Z=" 0.; TBWH_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2.-TGC_BigWheel_SurBoxSpcWall" /> +</subtraction> + +<composition name="TBWH_SurBox_extended" > + <posXYZ volume="TBWH_SurBox_default" X_Y_Z=" 0.; TGC_BigWheel_SurBoxSideLength + TGC_BigWheel_SurBoxDistance; 0." /> + <posXYZ volume="TBWH_SurBoxSpc" X_Y_Z=" 0.; 0.; GENV_Eps" /> + <posXYZ volume="TBWH_SurBoxSpc" X_Y_Z=" 0.; 0.; -GENV_Eps" rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TBWH_BigWheel_ASide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TBWH_Support_EvenSector_ASide" X_Y_Z=" 0.; 0.; TBWH_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TBWH_Support_OddSector_ASide" X_Y_Z=" 0.; 0.; TBWH_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TBWH_SurBox_default" X_Y_Z=" 0.; 0.; TBWH_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <foreach index="counter" begin="0" loops="7" > + <posXYZ volume="TBWH_SurBox_extended" X_Y_Z=" 0.; 0.; TBWH_BigWheel_ZPosL" rot="0.; 0.; -90.+counter*30." /> + </foreach> + <posXYZ volume="TBWH_CentralTube" X_Y_Z=" 0.; 0.; TBWH_BigWheel_ZPosL" /> +</composition> + +<composition name="TBWH_BigWheel_CSide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TBWH_Support_EvenSector_CSide" X_Y_Z=" 0.; 0.; -TBWH_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TBWH_Support_OddSector_CSide" X_Y_Z=" 0.; 0.; -TBWH_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TBWH_SurBox_default" X_Y_Z=" 0.; 0.; -TBWH_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <foreach index="counter" begin="0" loops="7" > + <posXYZ volume="TBWH_SurBox_extended" X_Y_Z=" 0.; 0.; -TBWH_BigWheel_ZPosL" rot="0.; 0.; -90.+counter*30." /> + </foreach> + <posXYZ volume="TBWH_CentralTube" X_Y_Z=" 0.; 0.; -TBWH_BigWheel_ZPosL" /> +</composition> + +<composition name="TBWH_BigWheels"> + <posXYZ volume="TBWH_BigWheel_ASide" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="TBWH_BigWheel_CSide" X_Y_Z=" 0.; 0.; 0." /> +</composition> + +<!-- name = TGC3 Big Wheel section name = "Supports" --> +<var name="TGC3_BigWheel_ZPosL" value=" 15150. "/> + +<var name="TGC3_BigWheel_RadDist00" value=" 2445. "/> +<var name="TGC3_BigWheel_RadDist01" value=" 970. "/> +<var name="TGC3_BigWheel_RadDist02" value=" 2528. "/> +<var name="TGC3_BigWheel_RadDist03" value=" 3560. "/> +<var name="TGC3_BigWheel_RadDist04" value=" 4767. "/> +<var name="TGC3_BigWheel_RadDist05" value=" 5800. "/> +<var name="TGC3_BigWheel_RadDist06" value=" 7005. "/> +<var name="TGC3_BigWheel_RadDist07" value=" 8037. "/> +<var name="TGC3_BigWheel_RadDist08" value=" 9243. "/> +<var name="TGC3_BigWheel_RadDist09" value=" 12230. "/> +<var name="TGC3_BigWheel_RadDistOutPlate" value=" 4150. "/> +<var name="TGC3_BigWheel_RadDistPlate02" value=" 2353. "/> +<var name="TGC3_BigWheel_PhiDistRPlate1" value=" 390. "/> + +<var name="TGC3_BigWheel_ZThickPhiPlate" value=" 30. "/> +<var name="TGC3_BigWheel_WallThickPhiPlate" value=" 16. "/> +<var name="TGC3_BigWheel_RThickPhiPlate1" value=" 200. "/> +<var name="TGC3_BigWheel_RThickPhiPlate2" value=" 130. "/> <!-- estimated --> +<var name="TGC3_BigWheel_ZThickRPlate" value=" 150. "/> +<var name="TGC3_BigWheel_PhiThickRPlate" value=" 50. "/> +<var name="TGC3_BigWheel_WallThickRPlate" value=" 5. "/> + +<var name="TGC3_BigWheel_PhiPlaDelEvenOdd" value="TGC3_BigWheel_RThickPhiPlate2 + TGC3_BigWheel_PhiThickRPlate"/> + +<var name="TGC3_BigWheel_PhiStepAngle1" value=" 7.5 * GENV_PiS180 "/> +<var name="TGC3_BigWheel_PhiStepAngle2" value=" 15. * GENV_PiS180 "/> + +<var name="TGC3_BigWheel_PhiStep1toP1" value=" -28. "/> <!-- estimate --> +<var name="TGC3_BigWheel_PhiStepP1toP2" value=" 456. "/> + +<var name="TGC3_BigWheel_PhiStep2toP1" value=" 468. "/> +<var name="TGC3_BigWheel_PhiStepP2toP2" value=" 765. + TGC3_BigWheel_PhiThickRPlate"/> <!-- estimate --> + +<var name="TGC3_BigWheel_TubeInnerR" value=" 2335. "/> +<var name="TGC3_BigWheel_TubeOuterR" value=" TGC3_BigWheel_TubeInnerR + 405. "/> + +<!-- lowest phi plate - plate 1 --> +<gvxysx name="TGC3_PhiPlate1" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" (TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1)*sin(TGC3_BigWheel_PhiStepAngle2); TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1"/> + <gvxy_point X_Y=" (TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01)*sin(TGC3_BigWheel_PhiStepAngle2); TGC3_BigWheel_RadDist01"/> +</gvxysx> + +<!-- first phi plate with kink - plate 2 --> +<var name="TGC3_PhiPlate2_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist02-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate2_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist02-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate2_XPos2" value="TGC3_PhiPlate2_XPos1+(TGC3_BigWheel_RadDist02*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate2_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)" /> +<var name="TGC3_PhiPlate2_YPos2" value="TGC3_BigWheel_RadDist02-(TGC3_BigWheel_RadDist02*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate2_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC3_PhiPlate2_Even" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos3; TGC3_BigWheel_RadDist02+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate2_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate2_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos1; TGC3_BigWheel_RadDist02"/> +</gvxysx> + +<gvxysx name="TGC3_PhiPlate2_Odd" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos3-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist02+TGC3_BigWheel_RThickPhiPlate2-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate2_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate2_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate2_XPos1-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist02-TGC3_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- second phi plate with kink - plate 3 --> +<var name="TGC3_PhiPlate3_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist03-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate3_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist03-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate3_XPos2" value="TGC3_PhiPlate3_XPos1+(TGC3_BigWheel_RadDist03*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate3_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> +<var name="TGC3_PhiPlate3_YPos2" value="TGC3_BigWheel_RadDist03-(TGC3_BigWheel_RadDist03*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate3_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)+sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC3_PhiPlate3" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate3_XPos3; TGC3_BigWheel_RadDist03+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate3_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate3_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate3_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate3_YPos2-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate3_XPos1; TGC3_BigWheel_RadDist03"/> +</gvxysx> + +<!-- third phi plate with kink - plate 4 --> +<var name="TGC3_PhiPlate4_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist04-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate4_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist04-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate4_XPos2" value="TGC3_PhiPlate4_XPos1+(TGC3_BigWheel_RadDist04*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate4_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)" /> +<var name="TGC3_PhiPlate4_YPos2" value="TGC3_BigWheel_RadDist04-(TGC3_BigWheel_RadDist04*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate4_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC3_PhiPlate4_Even" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos3; TGC3_BigWheel_RadDist04+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate4_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate4_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos1; TGC3_BigWheel_RadDist04"/> +</gvxysx> + +<gvxysx name="TGC3_PhiPlate4_Odd" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos3-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist04+TGC3_BigWheel_RThickPhiPlate2-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate4_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate4_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate4_XPos1-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist04-TGC3_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- forth phi plate with kink - plate 5 --> +<var name="TGC3_PhiPlate5_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist05-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate5_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist05-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate5_XPos2" value="TGC3_PhiPlate5_XPos1+(TGC3_BigWheel_RadDist05*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate5_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> +<var name="TGC3_PhiPlate5_YPos2" value="TGC3_BigWheel_RadDist05-(TGC3_BigWheel_RadDist05*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate5_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)+sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC3_PhiPlate5" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate5_XPos3; TGC3_BigWheel_RadDist05+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate5_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate5_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate5_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate5_YPos2-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate5_XPos1; TGC3_BigWheel_RadDist05"/> +</gvxysx> + +<!-- fifth phi plate with kink - plate 6 --> +<var name="TGC3_PhiPlate6_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist06-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate6_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist06-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate6_XPos2" value="TGC3_PhiPlate6_XPos1+(TGC3_BigWheel_RadDist06*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate6_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)" /> +<var name="TGC3_PhiPlate6_YPos2" value="TGC3_BigWheel_RadDist06-(TGC3_BigWheel_RadDist06*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate6_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC3_PhiPlate6_Even" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos3; TGC3_BigWheel_RadDist06+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate6_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate6_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos1; TGC3_BigWheel_RadDist06"/> +</gvxysx> + +<gvxysx name="TGC3_PhiPlate6_Odd" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos3-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist06+TGC3_BigWheel_RThickPhiPlate2-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate6_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate6_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate6_XPos1-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist06-TGC3_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- sixth phi plate with kink - plate 7 --> +<var name="TGC3_PhiPlate7_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist07-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate7_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist07-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate7_XPos2" value="TGC3_PhiPlate7_XPos1+(TGC3_BigWheel_RadDist07*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate7_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> +<var name="TGC3_PhiPlate7_YPos2" value="TGC3_BigWheel_RadDist07-(TGC3_BigWheel_RadDist07*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate7_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)+sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC3_PhiPlate7" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate7_XPos3; TGC3_BigWheel_RadDist07+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate7_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate7_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate7_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate7_YPos2-(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate7_XPos1; TGC3_BigWheel_RadDist07"/> +</gvxysx> + +<!-- seventh phi plate with kink - plate 8 --> +<var name="TGC3_PhiPlate8_XPos1" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist08-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC3_PhiPlate8_XPos3" value="tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RadDist08-TGC3_BigWheel_PhiStep1toP1/cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/cos(TGC3_BigWheel_PhiStepAngle2)/2.+tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_RThickPhiPlate2" /> +<var name="TGC3_PhiPlate8_XPos2" value="TGC3_PhiPlate8_XPos1+(TGC3_BigWheel_RadDist08*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate8_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*cos(TGC3_BigWheel_PhiStepAngle2)" /> +<var name="TGC3_PhiPlate8_YPos2" value="TGC3_BigWheel_RadDist08-(TGC3_BigWheel_RadDist08*tan(TGC3_BigWheel_PhiStepAngle2)-TGC3_PhiPlate8_XPos1)*cos(TGC3_BigWheel_PhiStepAngle2)*sin(TGC3_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC3_PhiPlate8_Even" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos3; TGC3_BigWheel_RadDist08+TGC3_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate8_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2); TGC3_PhiPlate8_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos1; TGC3_BigWheel_RadDist08"/> +</gvxysx> + +<gvxysx name="TGC3_PhiPlate8_Odd" material="Aluminium" dZ="TGC3_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos3-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist08+TGC3_BigWheel_RThickPhiPlate2-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos2+TGC3_BigWheel_RThickPhiPlate2*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate8_YPos2+TGC3_BigWheel_RThickPhiPlate2*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos2+TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2)-tan(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_PhiPlate8_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC3_PhiPlate8_XPos1-tan(TGC3_BigWheel_PhiStepAngle1)*TGC3_BigWheel_PhiPlaDelEvenOdd; TGC3_BigWheel_RadDist08-TGC3_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- first R plate - center --> +<box name="TGC3_RPlate1_base" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickRPlate" /> +<box name="TGC3_RPlate1_sub" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00+TGC3_BigWheel_WallThickRPlate; TGC3_BigWheel_ZThickRPlate-2.*TGC3_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC3_RPlate1"> + <posXYZ volume="TGC3_RPlate1_base" X_Y_Z=" TGC3_BigWheel_PhiDistRPlate1/2.+TGC3_BigWheel_PhiThickRPlate/2.; (TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00)/2.; 0." /> + <posXYZ volume="TGC3_RPlate1_sub" X_Y_Z=" TGC3_BigWheel_PhiDistRPlate1/2.+TGC3_BigWheel_PhiThickRPlate/2.+TGC3_BigWheel_WallThickRPlate; (TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00)/2.; 0." /> +</subtraction> + +<!-- second R plate - 7.5 degrees --> +<box name="TGC3_RPlate2_base" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00)/cos(TGC3_BigWheel_PhiStepAngle1); TGC3_BigWheel_ZThickRPlate" /> +<box name="TGC3_RPlate2_sub" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00+TGC3_BigWheel_WallThickRPlate)/cos(TGC3_BigWheel_PhiStepAngle1); TGC3_BigWheel_ZThickRPlate-2.*TGC3_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC3_RPlate2"> + <posXYZ volume="TGC3_RPlate2_base" X_Y_Z=" TGC3_PhiPlate2_XPos1+(TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00-2.*TGC3_BigWheel_RadDist02)*tan(TGC3_BigWheel_PhiStepAngle1)/2.; (TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC3_RPlate2_sub" X_Y_Z=" TGC3_PhiPlate2_XPos1+(TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00-2.*TGC3_BigWheel_RadDist02)*tan(TGC3_BigWheel_PhiStepAngle1)/2.-TGC3_BigWheel_WallThickRPlate; (TGC3_BigWheel_RadDist09+TGC3_BigWheel_RadDistPlate02-TGC3_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle1/GENV_PiS180" /> +</subtraction> + +<!-- third R plate - 7.5 degrees TGC3_BigWheel_PhiThickRPlate--> +<var name="TGC3_RPlate3_length" value="(TGC3_BigWheel_RadDist09 - TGC3_BigWheel_RadDist00 - (TGC3_PhiPlate2_YPos2-TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)) - (TGC3_BigWheel_PhiStep2toP1 + TGC3_BigWheel_PhiThickRPlate) * sin(TGC3_BigWheel_PhiStepAngle2) ) / cos(TGC3_BigWheel_PhiStepAngle1)" /> + +<box name="TGC3_RPlate3_base" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; TGC3_RPlate3_length; TGC3_BigWheel_ZThickRPlate" /> +<box name="TGC3_RPlate3_sub1" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; TGC3_RPlate3_length + TGC3_BigWheel_WallThickRPlate/cos(TGC3_BigWheel_PhiStepAngle1); TGC3_BigWheel_ZThickRPlate-2.*TGC3_BigWheel_WallThickRPlate" /> +<box name="TGC3_RPlate3_sub2" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; TGC3_RPlate3_length; TGC3_BigWheel_ZThickRPlate+2.*TGC3_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC3_RPlate3_tmp"> + <posXYZ volume="TGC3_RPlate3_base" X_Y_Z=" TGC3_RPlate3_length/2.*sin(TGC3_BigWheel_PhiStepAngle1); TGC3_RPlate3_length/2.*cos(TGC3_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC3_RPlate3_sub1" X_Y_Z=" TGC3_RPlate3_length/2.*sin(TGC3_BigWheel_PhiStepAngle1)-TGC3_BigWheel_WallThickRPlate; TGC3_RPlate3_length/2.*cos(TGC3_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC3_RPlate3_sub2" X_Y_Z="TGC3_RPlate3_length/2.*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/2*(cos(TGC3_BigWheel_PhiStepAngle1)-cos(TGC3_BigWheel_PhiStepAngle2));TGC3_RPlate3_length/2.*cos(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_PhiThickRPlate/2*(sin(TGC3_BigWheel_PhiStepAngle2)-sin(TGC3_BigWheel_PhiStepAngle1)); 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<var name="TGC3_RPlate3_PosX" value="TGC3_PhiPlate2_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiThickRPlate*(0.5*cos(TGC3_BigWheel_PhiStepAngle1)-cos(TGC3_BigWheel_PhiStepAngle2))-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> + +<var name="TGC3_RPlate3_PosY" value="TGC3_PhiPlate2_YPos2+(TGC3_BigWheel_PhiStep2toP1-TGC3_BigWheel_PhiStepP2toP2)*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_PhiThickRPlate*(sin(TGC3_BigWheel_PhiStepAngle2)-0.5*sin(TGC3_BigWheel_PhiStepAngle1))+sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate" /> + +<composition name="TGC3_RPlate3" > + <posXYZ volume="TGC3_RPlate3_tmp" X_Y_Z=" TGC3_RPlate3_PosX-GENV_Eps; TGC3_RPlate3_PosY ; 0." /> +</composition> + +<!-- first R plate - 15 degrees --> +<box name="TGC3_RPlate4_base" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00)/cos(TGC3_BigWheel_PhiStepAngle2); TGC3_BigWheel_ZThickRPlate" /> +<box name="TGC3_RPlate4_sub" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00+TGC3_BigWheel_WallThickRPlate)/cos(TGC3_BigWheel_PhiStepAngle2); TGC3_BigWheel_ZThickRPlate-2.*TGC3_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC3_RPlate4"> + <posXYZ volume="TGC3_RPlate4_base" X_Y_Z=" (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00)*tan(TGC3_BigWheel_PhiStepAngle2)/2.+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1-1.5*TGC3_BigWheel_PhiThickRPlate)/cos(TGC3_BigWheel_PhiStepAngle2); (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TGC3_RPlate4_sub" X_Y_Z=" (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00)*tan(TGC3_BigWheel_PhiStepAngle2)/2.-TGC3_BigWheel_WallThickRPlate+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1-1.5*TGC3_BigWheel_PhiThickRPlate)/cos(TGC3_BigWheel_PhiStepAngle2); (TGC3_BigWheel_RadDist09-TGC3_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<!-- second R plate - 15 degrees --> +<box name="TGC3_RPlate5_base" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_RadDistOutPlate)/cos(TGC3_BigWheel_PhiStepAngle2); TGC3_BigWheel_ZThickRPlate" /> +<box name="TGC3_RPlate5_sub" material="Aluminium" X_Y_Z=" TGC3_BigWheel_PhiThickRPlate; (TGC3_BigWheel_RadDist09-cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_RadDistOutPlate)/cos(TGC3_BigWheel_PhiStepAngle2)+TGC3_BigWheel_WallThickRPlate; TGC3_BigWheel_ZThickRPlate-2.*TGC3_BigWheel_WallThickRPlate" /> + +<var name="TGC3_RPlate5_PosX" value="sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_RadDistOutPlate/2. +TGC3_PhiPlate2_XPos2 +TGC3_BigWheel_PhiStepP2toP2*cos(TGC3_BigWheel_PhiStepAngle2) +tan(TGC3_BigWheel_PhiStepAngle2)*(TGC3_BigWheel_RadDist09/2.-TGC3_PhiPlate2_YPos2+TGC3_BigWheel_PhiStepP2toP2*sin(TGC3_BigWheel_PhiStepAngle2)-TGC3_BigWheel_RadDist00)"/> + +<subtraction name="TGC3_RPlate5"> + <posXYZ volume="TGC3_RPlate5_base" X_Y_Z=" TGC3_RPlate5_PosX - cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate/2.; (TGC3_BigWheel_RadDist09+cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_RadDistOutPlate)/2. - TGC3_BigWheel_RadDist00 + sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TGC3_RPlate5_sub" X_Y_Z=" TGC3_RPlate5_PosX - cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate/2.+TGC3_BigWheel_WallThickRPlate; (TGC3_BigWheel_RadDist09+cos(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_RadDistOutPlate)/2.- TGC3_BigWheel_RadDist00 + sin(TGC3_BigWheel_PhiStepAngle2)*TGC3_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TGC3_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<!-- very rough approximation of trigger boxes and cables - everything estimated - even/odd sectors for TGC3 --> +<!-- change of variables does not change placement correctly - fine tuning required --> + +<var name="TGC3_TrigBoxThicknessZ" value=" 2. " /> +<var name="TGC3_TrigBoxWidthPhi" value=" 260. " /> +<var name="TGC3_TrigBoxLengthR" value=" 5160. " /> +<var name="TGC3_TrigBoxAngle1" value=" 3.25" /> +<var name="TGC3_TrigBoxAngle2" value=" 12. " /> + +<box name="TGC3_TrigBox" material="Aluminium" X_Y_Z="TGC3_TrigBoxWidthPhi; TGC3_TrigBoxLengthR; TGC3_TrigBoxThicknessZ" /> + +<var name="TGC3_TrigCableThicknessZ1" value=" 5. " /> +<var name="TGC3_TrigCableThicknessZ2" value=" 3. " /> +<var name="TGC3_TrigCableThicknessZ3" value=" 6.5 " /> +<var name="TGC3_TrigCableWidthPhi1" value=" 130. " /> +<var name="TGC3_TrigCableWidthPhi2" value=" 100. " /> +<var name="TGC3_TrigCableWidthPhi3" value=" 75. " /> +<var name="TGC3_TrigCableWidthPhi4" value=" 60. " /> +<var name="TGC3_TrigCableWidthPhi5" value=" 250. " /> +<var name="TGC3_TrigCableLengthR1" value=" 4500. " /> +<var name="TGC3_TrigCableLengthR3" value=" 1600. " /> +<var name="TGC3_TrigCableLengthR4" value=" 1400. " /> +<var name="TGC3_TrigCableLengthR5" value=" 1550. " /> + +<box name="TGC3_TrigCable1" material="Copper" X_Y_Z=" TGC3_TrigCableWidthPhi1; TGC3_TrigCableLengthR1; TGC3_TrigCableThicknessZ1" /> +<box name="TGC3_TrigCable2" material="Copper" X_Y_Z=" TGC3_TrigCableWidthPhi2; TGC3_TrigCableLengthR1; TGC3_TrigCableThicknessZ2" /> +<box name="TGC3_TrigCable3" material="Copper" X_Y_Z=" TGC3_TrigCableWidthPhi3; TGC3_TrigCableLengthR3; TGC3_TrigCableThicknessZ3" /> +<box name="TGC3_TrigCable4" material="Copper" X_Y_Z=" TGC3_TrigCableWidthPhi4; TGC3_TrigCableLengthR4; TGC3_TrigCableThicknessZ3" /> +<box name="TGC3_TrigCable5" material="Copper" X_Y_Z=" TGC3_TrigCableWidthPhi5; TGC3_TrigCableLengthR5; TGC3_TrigCableThicknessZ1" /> + +<composition name="TGC3_Support_EvenSector_ASide"> + <posXYZ volume="TGC3_PhiPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate2_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate4_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate6_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate7" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate8_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" TGC3_PhiPlate4_XPos3-TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigBoxWidthPhi/4.*cos(TGC3_TrigBoxAngle1*GENV_PiS180); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC3_TrigBoxAngle1" /> + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" -TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-7.*TGC3_TrigBoxWidthPhi/10.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_PhiPlate3_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2)); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC3_TrigBoxAngle2" /> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 850.; -TGC3_TrigCableWidthPhi1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 580.; -TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable3" X_Y_Z="-TGC3_TrigCableLengthR3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi3/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 380.; -TGC3_TrigCableWidthPhi3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-(TGC3_TrigCableLengthR3/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2315; TGC3_TrigCableWidthPhi1*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2620.; TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable4" X_Y_Z="TGC3_TrigCableLengthR4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi4/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-1430.; -TGC3_TrigCableWidthPhi4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_TrigCableLengthR4/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + + <posXYZ volume="TGC3_TrigCable5" X_Y_Z="TGC3_TrigCableLengthR5/2.*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_TrigCableWidthPhi5/2.*cos(TGC3_BigWheel_PhiStepAngle2)-700.; TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1-75; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; TGC3_BigWheel_PhiStepAngle2/GENV_PiS180"/> + +</composition> + +<composition name="TGC3_Support_OddSector_ASide"> + <posXYZ volume="TGC3_PhiPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate2_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate4_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate6_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate7" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate8_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" TGC3_PhiPlate4_XPos3-TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigBoxWidthPhi/4.*cos(TGC3_TrigBoxAngle1*GENV_PiS180); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC3_TrigBoxAngle1" /> + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" -TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-7.*TGC3_TrigBoxWidthPhi/10.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_PhiPlate3_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2)); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC3_TrigBoxAngle2" /> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 850.; -TGC3_TrigCableWidthPhi1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 580.; -TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable3" X_Y_Z="-TGC3_TrigCableLengthR3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi3/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 380.; -TGC3_TrigCableWidthPhi3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-(TGC3_TrigCableLengthR3/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2." rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2315; TGC3_TrigCableWidthPhi1*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2620.; TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable4" X_Y_Z="TGC3_TrigCableLengthR4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi4/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-1430.; -TGC3_TrigCableWidthPhi4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_TrigCableLengthR4/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2." rot="0.; 0.; TGC3_TrigBoxAngle2"/> + + <posXYZ volume="TGC3_TrigCable5" X_Y_Z="TGC3_TrigCableLengthR5/2.*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_TrigCableWidthPhi5/2.*cos(TGC3_BigWheel_PhiStepAngle2)-700.; TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1-75; TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2." rot="0.; 0.; TGC3_BigWheel_PhiStepAngle2/GENV_PiS180"/> + +</composition> + +<composition name="TGC3_Support_EvenSector_CSide"> + <posXYZ volume="TGC3_PhiPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate2_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate4_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate6_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate7" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate8_Even" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" TGC3_PhiPlate4_XPos3-TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigBoxWidthPhi/4.*cos(TGC3_TrigBoxAngle1*GENV_PiS180); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC3_TrigBoxAngle1" /> + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" -TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-7.*TGC3_TrigBoxWidthPhi/10.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_PhiPlate3_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2)); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC3_TrigBoxAngle2" /> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 850.; -TGC3_TrigCableWidthPhi1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 580.; -TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable3" X_Y_Z="-TGC3_TrigCableLengthR3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi3/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 380.; -TGC3_TrigCableWidthPhi3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-(TGC3_TrigCableLengthR3/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2315; TGC3_TrigCableWidthPhi1*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2620.; TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable4" X_Y_Z="TGC3_TrigCableLengthR4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi4/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-1430.; -TGC3_TrigCableWidthPhi4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_TrigCableLengthR4/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + + <posXYZ volume="TGC3_TrigCable5" X_Y_Z="TGC3_TrigCableLengthR5/2.*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_TrigCableWidthPhi5/2.*cos(TGC3_BigWheel_PhiStepAngle2)-700.; TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1-75; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC3_BigWheel_PhiStepAngle2/GENV_PiS180"/> + +</composition> + +<composition name="TGC3_Support_OddSector_CSide"> + <posXYZ volume="TGC3_PhiPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate2_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate4_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate6_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate7" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_PhiPlate8_Odd" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate1" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate2" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate3" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate4" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; -TGC3_BigWheel_ZThickPhiPlate-TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC3_RPlate5" X_Y_Z=" 0.; TGC3_BigWheel_RadDist00; TGC3_BigWheel_ZThickPhiPlate+TGC3_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" TGC3_PhiPlate4_XPos3-TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigBoxWidthPhi/4.*cos(TGC3_TrigBoxAngle1*GENV_PiS180); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC3_TrigBoxAngle1" /> + <posXYZ volume="TGC3_TrigBox" X_Y_Z=" -TGC3_TrigBoxLengthR/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-7.*TGC3_TrigBoxWidthPhi/10.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_PhiPlate3_XPos2+(TGC3_BigWheel_PhiStepP2toP2-TGC3_BigWheel_PhiStep2toP1)*cos(TGC3_BigWheel_PhiStepAngle2)); -TGC3_TrigBoxLengthR/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -TGC3_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC3_TrigBoxAngle2" /> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 850.; -TGC3_TrigCableWidthPhi1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="-TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 580.; -TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + <posXYZ volume="TGC3_TrigCable3" X_Y_Z="-TGC3_TrigCableLengthR3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_TrigCableWidthPhi3/2.*cos(TGC3_TrigBoxAngle1*GENV_PiS180) + 380.; -TGC3_TrigCableWidthPhi3/2.*sin(TGC3_TrigBoxAngle1*GENV_PiS180)-(TGC3_TrigCableLengthR3/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle1*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2.)" rot="0.; 0.; -TGC3_TrigBoxAngle1"/> + + <posXYZ volume="TGC3_TrigCable1" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2315; TGC3_TrigCableWidthPhi1*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable2" X_Y_Z="TGC3_TrigCableLengthR1/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableWidthPhi2/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-2620.; TGC3_TrigCableWidthPhi2/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-TGC3_TrigCableLengthR1/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ2/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + <posXYZ volume="TGC3_TrigCable4" X_Y_Z="TGC3_TrigCableLengthR4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_TrigCableWidthPhi4/2.*cos(TGC3_TrigBoxAngle2*GENV_PiS180)-1430.; -TGC3_TrigCableWidthPhi4/2.*sin(TGC3_TrigBoxAngle2*GENV_PiS180)-(TGC3_TrigCableLengthR4/2.+TGC3_TrigBoxLengthR)*cos(TGC3_TrigBoxAngle2*GENV_PiS180)+TGC3_BigWheel_RadDist09; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ3/2.)" rot="0.; 0.; TGC3_TrigBoxAngle2"/> + + <posXYZ volume="TGC3_TrigCable5" X_Y_Z="TGC3_TrigCableLengthR5/2.*sin(TGC3_BigWheel_PhiStepAngle2)+TGC3_TrigCableWidthPhi5/2.*cos(TGC3_BigWheel_PhiStepAngle2)-700.; TGC3_BigWheel_RadDist00+TGC3_BigWheel_RadDist01+TGC3_BigWheel_RThickPhiPlate1-75; -(TGC3_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC3_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC3_BigWheel_PhiStepAngle2/GENV_PiS180"/> + +</composition> + +<!-- tube and boxes are rather rouhg approximated here - should be okay though - Cavern Background only --> + +<tubs name="TGC3_CentralTube" material="Aluminium" Rio_Z="TGC3_BigWheel_TubeInnerR; TGC3_BigWheel_TubeOuterR; TGC3_BigWheel_WallThickPhiPlate" nbPhi="20" /> + +<box name="TGC3_SurBox_base" material="Aluminium" X_Y_Z=" 2.*TGC3_BigWheel_RadDist09*tan(TGC3_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSideLength; TGC_BigWheel_SurBoxSideLength" /> +<box name="TGC3_SurBox_inner" material="Aluminium" X_Y_Z=" 2.*TGC3_BigWheel_RadDist09*tan(TGC3_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall" /> + +<subtraction name="TGC3_SurBox_default" > + <posXYZ volume="TGC3_SurBox_base" X_Y_Z=" 0.; TGC3_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> + <posXYZ volume="TGC3_SurBox_inner" X_Y_Z=" 0.; TGC3_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> +</subtraction> + +<box name="TGC3_SurBoxSpc_base" material="Aluminium" X_Y_Z=" 2.*TGC3_BigWheel_RadDist09*tan(TGC3_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSpcLength; TGC_BigWheel_SurBoxSpcHeight" /> +<box name="TGC3_SurBoxSpc_inner" material="Aluminium" X_Y_Z=" 2.*TGC3_BigWheel_RadDist09*tan(TGC3_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSpcLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSpcHeight" /> + +<subtraction name="TGC3_SurBoxSpc" > + <posXYZ volume="TGC3_SurBoxSpc_base" X_Y_Z=" 0.; TGC3_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2." /> + <posXYZ volume="TGC3_SurBoxSpc_inner" X_Y_Z=" 0.; TGC3_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2.-TGC_BigWheel_SurBoxSpcWall" /> +</subtraction> + +<composition name="TGC3_SurBox_extended" > + <posXYZ volume="TGC3_SurBox_default" X_Y_Z=" 0.; TGC_BigWheel_SurBoxSideLength + TGC_BigWheel_SurBoxDistance; 0." /> + <posXYZ volume="TGC3_SurBoxSpc" X_Y_Z=" 0.; 0.; GENV_Eps" /> + <posXYZ volume="TGC3_SurBoxSpc" X_Y_Z=" 0.; 0.; -GENV_Eps" rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TGC3_BigWheel_ASide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TGC3_Support_EvenSector_ASide" X_Y_Z=" 0.; 0.; TGC3_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TGC3_Support_OddSector_ASide" X_Y_Z=" 0.; 0.; TGC3_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TGC3_SurBox_default" X_Y_Z=" 0.; 0.; TGC3_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <foreach index="counter" begin="0" loops="7" > + <posXYZ volume="TGC3_SurBox_extended" X_Y_Z=" 0.; 0.; TGC3_BigWheel_ZPosL" rot="0.; 0.; -90.+counter*30." /> + </foreach> + <posXYZ volume="TGC3_CentralTube" X_Y_Z=" 0.; 0.; TGC3_BigWheel_ZPosL" /> +</composition> + +<composition name="TGC3_BigWheel_CSide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TGC3_Support_EvenSector_CSide" X_Y_Z=" 0.; 0.; -TGC3_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TGC3_Support_OddSector_CSide" X_Y_Z=" 0.; 0.; -TGC3_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TGC3_SurBox_default" X_Y_Z=" 0.; 0.; -TGC3_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <foreach index="counter" begin="0" loops="7" > + <posXYZ volume="TGC3_SurBox_extended" X_Y_Z=" 0.; 0.; -TGC3_BigWheel_ZPosL" rot="0.; 0.; -90.+counter*30." /> + </foreach> + <posXYZ volume="TGC3_CentralTube" X_Y_Z=" 0.; 0.; -TGC3_BigWheel_ZPosL" /> +</composition> + +<composition name="TGC3_BigWheels"> + <posXYZ volume="TGC3_BigWheel_ASide" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="TGC3_BigWheel_CSide" X_Y_Z=" 0.; 0.; 0." /> +</composition> + +<!-- name = TGC1 Big Wheel section name = "Supports" --> +<!-- Spokes U zposition --> +<var name="TGC1_BigWheel_ZPosL" value=" 13435. " /> + +<var name="TGC1_BigWheel_RadDist00" value=" 1777.5 "/> +<var name="TGC1_BigWheel_RadDist01" value=" 922. "/> +<var name="TGC1_BigWheel_RadDist02" value=" 2582.5 "/> +<var name="TGC1_BigWheel_RadDist03" value=" 3572.5 "/> +<var name="TGC1_BigWheel_RadDist04" value=" 4667.5 "/> +<var name="TGC1_BigWheel_RadDist05" value=" 5672.5 "/> +<var name="TGC1_BigWheel_RadDist06" value=" 6754.5 "/> +<var name="TGC1_BigWheel_RadDist07" value=" 7772.5 "/> +<var name="TGC1_BigWheel_RadDist08" value=" 8682.5 "/> +<var name="TGC1_BigWheel_RadDist09" value=" 10990. "/> +<var name="TGC1_BigWheel_RadDistOutPlate" value=" 3670. "/> +<var name="TGC1_BigWheel_RadDistPlate02" value=" 2547. "/> +<var name="TGC1_BigWheel_PhiDistRPlate1" value=" 350. "/> + +<var name="TGC1_BigWheel_ZThickPhiPlate" value=" 30. "/> +<var name="TGC1_BigWheel_WallThickPhiPlate" value=" 16. "/> +<var name="TGC1_BigWheel_RThickPhiPlate1" value=" 200. "/> +<var name="TGC1_BigWheel_RThickPhiPlate2" value=" 120. "/> +<var name="TGC1_BigWheel_ZThickRPlate" value=" 150. "/> +<var name="TGC1_BigWheel_PhiThickRPlate" value=" 50. "/> +<var name="TGC1_BigWheel_WallThickRPlate" value=" 5. "/> + +<var name="TGC1_BigWheel_PhiPlaDelEvenOdd" value="TGC1_BigWheel_RThickPhiPlate2 + TGC1_BigWheel_PhiThickRPlate/2."/> + +<var name="TGC1_BigWheel_PhiStepAngle1" value=" 7.5 * GENV_PiS180 "/> +<var name="TGC1_BigWheel_PhiStepAngle2" value=" 15. * GENV_PiS180 "/> + +<var name="TGC1_BigWheel_PhiStep1toP1" value=" 18. "/> +<var name="TGC1_BigWheel_PhiStepP1toP2" value=" 497. "/> + +<var name="TGC1_BigWheel_PhiStep2toP1" value=" 442. "/> +<var name="TGC1_BigWheel_PhiStepP2toP2" value=" 642. + TGC1_BigWheel_PhiThickRPlate"/> + +<var name="TGC1_BigWheel_TubeInnerR" value=" 1715. "/> +<var name="TGC1_BigWheel_TubeOuterR" value=" TGC1_BigWheel_TubeInnerR + 405. "/> + +<!-- lowest phi plate - plate 1 --> +<gvxysx name="TGC1_PhiPlate1" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" (TGC1_BigWheel_RadDist00+TGC1_BigWheel_RadDist01+TGC1_BigWheel_RThickPhiPlate1)*sin(TGC1_BigWheel_PhiStepAngle2); TGC1_BigWheel_RadDist01+TGC1_BigWheel_RThickPhiPlate1"/> + <gvxy_point X_Y=" (TGC1_BigWheel_RadDist00+TGC1_BigWheel_RadDist01)*sin(TGC1_BigWheel_PhiStepAngle2); TGC1_BigWheel_RadDist01"/> +</gvxysx> + +<!-- first phi plate with kink - plate 2 --> +<var name="TGC1_PhiPlate2_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist02-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate2_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist02-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate2_XPos2" value="TGC1_PhiPlate2_XPos1+(TGC1_BigWheel_RadDist02*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate2_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)" /> +<var name="TGC1_PhiPlate2_YPos2" value="TGC1_BigWheel_RadDist02-(TGC1_BigWheel_RadDist02*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate2_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC1_PhiPlate2_Even" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos3; TGC1_BigWheel_RadDist02+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate2_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate2_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos1; TGC1_BigWheel_RadDist02"/> +</gvxysx> + +<gvxysx name="TGC1_PhiPlate2_Odd" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos3-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist02+TGC1_BigWheel_RThickPhiPlate2-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate2_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate2_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate2_XPos1-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist02-TGC1_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- second phi plate with kink - plate 3 --> +<var name="TGC1_PhiPlate3_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist03-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate3_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist03-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate3_XPos2" value="TGC1_PhiPlate3_XPos1+(TGC1_BigWheel_RadDist03*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate3_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> +<var name="TGC1_PhiPlate3_YPos2" value="TGC1_BigWheel_RadDist03-(TGC1_BigWheel_RadDist03*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate3_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)+sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC1_PhiPlate3" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate3_XPos3; TGC1_BigWheel_RadDist03+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate3_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate3_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate3_XPos2+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate3_YPos2-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate3_XPos1; TGC1_BigWheel_RadDist03"/> +</gvxysx> + +<!-- third phi plate with kink - plate 4 --> +<var name="TGC1_PhiPlate4_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist04-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate4_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist04-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate4_XPos2" value="TGC1_PhiPlate4_XPos1+(TGC1_BigWheel_RadDist04*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate4_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)" /> +<var name="TGC1_PhiPlate4_YPos2" value="TGC1_BigWheel_RadDist04-(TGC1_BigWheel_RadDist04*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate4_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC1_PhiPlate4_Even" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos3; TGC1_BigWheel_RadDist04+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate4_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate4_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos1; TGC1_BigWheel_RadDist04"/> +</gvxysx> + +<gvxysx name="TGC1_PhiPlate4_Odd" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos3-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist04+TGC1_BigWheel_RThickPhiPlate2-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate4_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate4_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate4_XPos1-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist04-TGC1_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- forth phi plate with kink - plate 5 --> +<var name="TGC1_PhiPlate5_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist05-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate5_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist05-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate5_XPos2" value="TGC1_PhiPlate5_XPos1+(TGC1_BigWheel_RadDist05*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate5_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> +<var name="TGC1_PhiPlate5_YPos2" value="TGC1_BigWheel_RadDist05-(TGC1_BigWheel_RadDist05*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate5_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)+sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC1_PhiPlate5" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate5_XPos3; TGC1_BigWheel_RadDist05+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate5_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate5_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate5_XPos2+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate5_YPos2-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate5_XPos1; TGC1_BigWheel_RadDist05"/> +</gvxysx> + +<!-- fifth phi plate with kink - plate 6 --> +<var name="TGC1_PhiPlate6_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist06-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate6_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist06-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate6_XPos2" value="TGC1_PhiPlate6_XPos1+(TGC1_BigWheel_RadDist06*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate6_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)" /> +<var name="TGC1_PhiPlate6_YPos2" value="TGC1_BigWheel_RadDist06-(TGC1_BigWheel_RadDist06*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate6_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC1_PhiPlate6_Even" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos3; TGC1_BigWheel_RadDist06+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate6_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate6_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos1; TGC1_BigWheel_RadDist06"/> +</gvxysx> + +<gvxysx name="TGC1_PhiPlate6_Odd" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos3-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist06+TGC1_BigWheel_RThickPhiPlate2-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate6_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate6_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate6_XPos1-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist06-TGC1_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- sixth phi plate with kink - plate 7 --> +<var name="TGC1_PhiPlate7_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist07-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate7_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist07-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate7_XPos2" value="TGC1_PhiPlate7_XPos1+(TGC1_BigWheel_RadDist07*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate7_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> +<var name="TGC1_PhiPlate7_YPos2" value="TGC1_BigWheel_RadDist07-(TGC1_BigWheel_RadDist07*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate7_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)+sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> + +<gvxysx name="TGC1_PhiPlate7" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate7_XPos3; TGC1_BigWheel_RadDist07+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate7_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate7_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate7_XPos2+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate7_YPos2-(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate7_XPos1; TGC1_BigWheel_RadDist07"/> +</gvxysx> + +<!-- seventh phi plate with kink - plate 8 --> +<var name="TGC1_PhiPlate8_XPos1" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist08-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2." /> +<var name="TGC1_PhiPlate8_XPos3" value="tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RadDist08-TGC1_BigWheel_PhiStep1toP1/cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/cos(TGC1_BigWheel_PhiStepAngle2)/2.+tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_RThickPhiPlate2" /> +<var name="TGC1_PhiPlate8_XPos2" value="TGC1_PhiPlate8_XPos1+(TGC1_BigWheel_RadDist08*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate8_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*cos(TGC1_BigWheel_PhiStepAngle2)" /> +<var name="TGC1_PhiPlate8_YPos2" value="TGC1_BigWheel_RadDist08-(TGC1_BigWheel_RadDist08*tan(TGC1_BigWheel_PhiStepAngle2)-TGC1_PhiPlate8_XPos1)*cos(TGC1_BigWheel_PhiStepAngle2)*sin(TGC1_BigWheel_PhiStepAngle2)" /> + +<gvxysx name="TGC1_PhiPlate8_Even" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos3; TGC1_BigWheel_RadDist08+TGC1_BigWheel_RThickPhiPlate2"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate8_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2); TGC1_PhiPlate8_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos1; TGC1_BigWheel_RadDist08"/> +</gvxysx> + +<gvxysx name="TGC1_PhiPlate8_Odd" material="Aluminium" dZ="TGC1_BigWheel_WallThickPhiPlate" > + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos3-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist08+TGC1_BigWheel_RThickPhiPlate2-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos2+TGC1_BigWheel_RThickPhiPlate2*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate8_YPos2+TGC1_BigWheel_RThickPhiPlate2*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos2+TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2)-tan(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_PhiPlate8_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiPlaDelEvenOdd"/> + <gvxy_point X_Y=" TGC1_PhiPlate8_XPos1-tan(TGC1_BigWheel_PhiStepAngle1)*TGC1_BigWheel_PhiPlaDelEvenOdd; TGC1_BigWheel_RadDist08-TGC1_BigWheel_PhiPlaDelEvenOdd"/> +</gvxysx> + +<!-- first R plate - center --> +<box name="TGC1_RPlate1_base" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickRPlate" /> +<box name="TGC1_RPlate1_sub" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00+TGC1_BigWheel_WallThickRPlate; TGC1_BigWheel_ZThickRPlate-2.*TGC1_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC1_RPlate1"> + <posXYZ volume="TGC1_RPlate1_base" X_Y_Z=" TGC1_BigWheel_PhiDistRPlate1/2.+TGC1_BigWheel_PhiThickRPlate/2.; (TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00)/2.; 0." /> + <posXYZ volume="TGC1_RPlate1_sub" X_Y_Z=" TGC1_BigWheel_PhiDistRPlate1/2.+TGC1_BigWheel_PhiThickRPlate/2.+TGC1_BigWheel_WallThickRPlate; (TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00)/2.; 0." /> +</subtraction> + +<!-- second R plate - 7.5 degrees --> +<box name="TGC1_RPlate2_base" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00)/cos(TGC1_BigWheel_PhiStepAngle1); TGC1_BigWheel_ZThickRPlate" /> +<box name="TGC1_RPlate2_sub" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00+TGC1_BigWheel_WallThickRPlate)/cos(TGC1_BigWheel_PhiStepAngle1); TGC1_BigWheel_ZThickRPlate-2.*TGC1_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC1_RPlate2"> + <posXYZ volume="TGC1_RPlate2_base" X_Y_Z=" TGC1_PhiPlate2_XPos1+(TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00-2.*TGC1_BigWheel_RadDist02)*tan(TGC1_BigWheel_PhiStepAngle1)/2.; (TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_RPlate2_sub" X_Y_Z=" TGC1_PhiPlate2_XPos1+(TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00-2.*TGC1_BigWheel_RadDist02)*tan(TGC1_BigWheel_PhiStepAngle1)/2.-TGC1_BigWheel_WallThickRPlate; (TGC1_BigWheel_RadDist09+TGC1_BigWheel_RadDistPlate02-TGC1_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> +</subtraction> + +<!-- third R plate - 7.5 degrees TGC1_BigWheel_PhiThickRPlate--> +<var name="TGC1_RPlate3_length" value="(TGC1_BigWheel_RadDist09 - TGC1_BigWheel_RadDist00 - (TGC1_PhiPlate2_YPos2-TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)) - (TGC1_BigWheel_PhiStep2toP1 + TGC1_BigWheel_PhiThickRPlate) * sin(TGC1_BigWheel_PhiStepAngle2) ) / cos(TGC1_BigWheel_PhiStepAngle1)" /> + +<box name="TGC1_RPlate3_base" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; TGC1_RPlate3_length; TGC1_BigWheel_ZThickRPlate" /> +<box name="TGC1_RPlate3_sub1" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; TGC1_RPlate3_length + TGC1_BigWheel_WallThickRPlate/cos(TGC1_BigWheel_PhiStepAngle1); TGC1_BigWheel_ZThickRPlate-2.*TGC1_BigWheel_WallThickRPlate" /> +<box name="TGC1_RPlate3_sub2" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; TGC1_RPlate3_length; TGC1_BigWheel_ZThickRPlate+2.*TGC1_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC1_RPlate3_tmp"> + <posXYZ volume="TGC1_RPlate3_base" X_Y_Z=" TGC1_RPlate3_length/2.*sin(TGC1_BigWheel_PhiStepAngle1); TGC1_RPlate3_length/2.*cos(TGC1_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_RPlate3_sub1" X_Y_Z=" TGC1_RPlate3_length/2.*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_BigWheel_WallThickRPlate; TGC1_RPlate3_length/2.*cos(TGC1_BigWheel_PhiStepAngle1); 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_RPlate3_sub2" X_Y_Z="TGC1_RPlate3_length/2.*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/2*(cos(TGC1_BigWheel_PhiStepAngle1)-cos(TGC1_BigWheel_PhiStepAngle2));TGC1_RPlate3_length/2.*cos(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_PhiThickRPlate/2*(sin(TGC1_BigWheel_PhiStepAngle2)-sin(TGC1_BigWheel_PhiStepAngle1)); 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<var name="TGC1_RPlate3_PosX" value="TGC1_PhiPlate2_XPos2+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1)*cos(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiThickRPlate*(0.5*cos(TGC1_BigWheel_PhiStepAngle1)-cos(TGC1_BigWheel_PhiStepAngle2))-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> + +<var name="TGC1_RPlate3_PosY" value="TGC1_PhiPlate2_YPos2+(TGC1_BigWheel_PhiStep2toP1-TGC1_BigWheel_PhiStepP2toP2)*sin(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_PhiThickRPlate*(sin(TGC1_BigWheel_PhiStepAngle2)-0.5*sin(TGC1_BigWheel_PhiStepAngle1))+sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate" /> + +<composition name="TGC1_RPlate3" > + <posXYZ volume="TGC1_RPlate3_tmp" X_Y_Z=" TGC1_RPlate3_PosX-GENV_Eps; TGC1_RPlate3_PosY ; 0." /> +</composition> + +<!-- first R plate - 15 degrees --> +<box name="TGC1_RPlate4_base" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00)/cos(TGC1_BigWheel_PhiStepAngle2); TGC1_BigWheel_ZThickRPlate" /> +<box name="TGC1_RPlate4_sub" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00+TGC1_BigWheel_WallThickRPlate)/cos(TGC1_BigWheel_PhiStepAngle2); TGC1_BigWheel_ZThickRPlate-2.*TGC1_BigWheel_WallThickRPlate" /> + +<subtraction name="TGC1_RPlate4"> + <posXYZ volume="TGC1_RPlate4_base" X_Y_Z=" (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00)*tan(TGC1_BigWheel_PhiStepAngle2)/2.+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1-1.5*TGC1_BigWheel_PhiThickRPlate)/cos(TGC1_BigWheel_PhiStepAngle2); (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TGC1_RPlate4_sub" X_Y_Z=" (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00)*tan(TGC1_BigWheel_PhiStepAngle2)/2.-TGC1_BigWheel_WallThickRPlate+(TGC1_BigWheel_PhiStepP2toP2-TGC1_BigWheel_PhiStep2toP1-1.5*TGC1_BigWheel_PhiThickRPlate)/cos(TGC1_BigWheel_PhiStepAngle2); (TGC1_BigWheel_RadDist09-TGC1_BigWheel_RadDist00)/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<!-- second R plate - 15 degrees --> +<box name="TGC1_RPlate5_base" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_RadDistOutPlate)/cos(TGC1_BigWheel_PhiStepAngle2); TGC1_BigWheel_ZThickRPlate" /> +<box name="TGC1_RPlate5_sub" material="Aluminium" X_Y_Z=" TGC1_BigWheel_PhiThickRPlate; (TGC1_BigWheel_RadDist09-cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_RadDistOutPlate)/cos(TGC1_BigWheel_PhiStepAngle2)+TGC1_BigWheel_WallThickRPlate; TGC1_BigWheel_ZThickRPlate-2.*TGC1_BigWheel_WallThickRPlate" /> + +<var name="TGC1_RPlate5_PosX" value="sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_RadDistOutPlate/2. +TGC1_PhiPlate2_XPos2 +TGC1_BigWheel_PhiStepP2toP2*cos(TGC1_BigWheel_PhiStepAngle2) +tan(TGC1_BigWheel_PhiStepAngle2)*(TGC1_BigWheel_RadDist09/2.-TGC1_PhiPlate2_YPos2+TGC1_BigWheel_PhiStepP2toP2*sin(TGC1_BigWheel_PhiStepAngle2)-TGC1_BigWheel_RadDist00)"/> + +<subtraction name="TGC1_RPlate5"> + <posXYZ volume="TGC1_RPlate5_base" X_Y_Z=" TGC1_RPlate5_PosX - cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate/2.; (TGC1_BigWheel_RadDist09+cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_RadDistOutPlate)/2. - TGC1_BigWheel_RadDist00 + sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle2/GENV_PiS180" /> + <posXYZ volume="TGC1_RPlate5_sub" X_Y_Z=" TGC1_RPlate5_PosX - cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate/2.+TGC1_BigWheel_WallThickRPlate; (TGC1_BigWheel_RadDist09+cos(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_RadDistOutPlate)/2.- TGC1_BigWheel_RadDist00 + sin(TGC1_BigWheel_PhiStepAngle2)*TGC1_BigWheel_PhiThickRPlate/2.; 0." rot=" 0.; 0.; -TGC1_BigWheel_PhiStepAngle2/GENV_PiS180" /> +</subtraction> + +<!-- very rough approximation of trigger boxes and cables - everything estimated - everywhere for TGC1 --> +<!-- change of variables does not change placement correctly - fine tuning required --> + +<var name="TGC1_TrigBoxThicknessZ" value=" 2. " /> +<var name="TGC1_TrigBoxWidthPhi" value=" 260. " /> +<var name="TGC1_TrigBoxLengthR" value=" 3160. " /> + +<box name="TGC1_TrigBox" material="Aluminium" X_Y_Z="TGC1_TrigBoxWidthPhi; TGC1_TrigBoxLengthR; TGC1_TrigBoxThicknessZ" /> + +<var name="TGC1_TrigCableThicknessZ1" value=" 4. " /> +<var name="TGC1_TrigCableWidthPhi1" value=" 100. " /> +<var name="TGC1_TrigCableLengthR1" value=" 5650. " /> + +<box name="TGC1_TrigCable1" material="Copper" X_Y_Z=" TGC1_TrigCableWidthPhi1; TGC1_TrigCableLengthR1; TGC1_TrigCableThicknessZ1" /> + +<composition name="TGC1_Support_EvenSector_ASide"> + <posXYZ volume="TGC1_PhiPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate2_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate4_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate6_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate7" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate8_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(TGC1_PhiPlate6_XPos1-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigBoxWidthPhi/8.*cos(TGC1_BigWheel_PhiStepAngle1)); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)-3.*TGC1_TrigBoxWidthPhi/4.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate5_XPos2); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(-TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1) + TGC1_PhiPlate6_XPos1 + 175.); -TGC1_TrigCableWidthPhi1/2.*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -(TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+3.*TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate7_XPos2); TGC1_TrigCableWidthPhi1*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -(TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2.)" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + +</composition> + +<composition name="TGC1_Support_OddSector_ASide"> + <posXYZ volume="TGC1_PhiPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate2_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate4_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate6_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate7" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate8_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(TGC1_PhiPlate6_XPos1-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigBoxWidthPhi/8.*cos(TGC1_BigWheel_PhiStepAngle1)); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)-3.*TGC1_TrigBoxWidthPhi/4.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate5_XPos2); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(-TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1) + TGC1_PhiPlate6_XPos1 + 175.); -TGC1_TrigCableWidthPhi1/2.*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -(TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2.)" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+3.*TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate7_XPos2); TGC1_TrigCableWidthPhi1*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; -(TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2.)" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + +</composition> + +<composition name="TGC1_Support_EvenSector_CSide"> + <posXYZ volume="TGC1_PhiPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate2_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate4_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate6_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate7" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate8_Even" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(TGC1_PhiPlate6_XPos1-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigBoxWidthPhi/8.*cos(TGC1_BigWheel_PhiStepAngle1)); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)-3.*TGC1_TrigBoxWidthPhi/4.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate5_XPos2); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(-TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1) + TGC1_PhiPlate6_XPos1 + 175.); -TGC1_TrigCableWidthPhi1/2.*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2." rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+3.*TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate7_XPos2); TGC1_TrigCableWidthPhi1*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2." rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + +</composition> + +<composition name="TGC1_Support_OddSector_CSide"> + <posXYZ volume="TGC1_PhiPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate2_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate4_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate6_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate7" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_PhiPlate8_Odd" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; 0." /> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate1" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate2" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate3" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate4" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; -TGC1_BigWheel_ZThickPhiPlate-TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 0.; 0."/> + <posXYZ volume="TGC1_RPlate5" X_Y_Z=" 0.; TGC1_BigWheel_RadDist00; TGC1_BigWheel_ZThickPhiPlate+TGC1_BigWheel_ZThickRPlate/2." rot=" 0.; 180.; 0."/> + + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(TGC1_PhiPlate6_XPos1-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigBoxWidthPhi/8.*cos(TGC1_BigWheel_PhiStepAngle1)); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + <posXYZ volume="TGC1_TrigBox" X_Y_Z=" -(-TGC1_TrigBoxLengthR/2.*sin(TGC1_BigWheel_PhiStepAngle1)-3.*TGC1_TrigBoxWidthPhi/4.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate5_XPos2); -TGC1_TrigBoxLengthR/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_ZThickPhiPlate" rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180" /> + + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(-TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1) + TGC1_PhiPlate6_XPos1 + 175.); -TGC1_TrigCableWidthPhi1/2.*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2." rot="0.; 0.; TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + <posXYZ volume="TGC1_TrigCable1" X_Y_Z="-(TGC1_TrigCableLengthR1/2.*sin(TGC1_BigWheel_PhiStepAngle1)+3.*TGC1_TrigCableWidthPhi1/2.*cos(TGC1_BigWheel_PhiStepAngle1)-TGC1_PhiPlate7_XPos2); TGC1_TrigCableWidthPhi1*sin(TGC1_BigWheel_PhiStepAngle1)-TGC1_TrigCableLengthR1/2.*cos(TGC1_BigWheel_PhiStepAngle1)+TGC1_BigWheel_RadDist09; TGC1_BigWheel_WallThickPhiPlate/2.+GENV_Eps+TGC1_TrigCableThicknessZ1/2." rot="0.; 0.; -TGC1_BigWheel_PhiStepAngle1/GENV_PiS180"/> + +</composition> + +<!-- tube and boxes are rather rouhg approximated here - should be okay though - Cavern Background only --> + +<tubs name="TGC1_CentralTube" material="Aluminium" Rio_Z="TGC1_BigWheel_TubeInnerR; TGC1_BigWheel_TubeOuterR; TGC1_BigWheel_WallThickPhiPlate" nbPhi="20" /> + +<box name="TGC1_SurBox_base" material="Aluminium" X_Y_Z=" 2.*TGC1_BigWheel_RadDist09*tan(TGC1_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSideLength; TGC_BigWheel_SurBoxSideLength" /> +<box name="TGC1_SurBox_inner" material="Aluminium" X_Y_Z=" 2.*TGC1_BigWheel_RadDist09*tan(TGC1_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSideLength-2.*TGC_BigWheel_SurBoxSpcWall" /> + +<subtraction name="TGC1_SurBox_default" > + <posXYZ volume="TGC1_SurBox_base" X_Y_Z=" 0.; TGC1_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> + <posXYZ volume="TGC1_SurBox_inner" X_Y_Z=" 0.; TGC1_BigWheel_RadDist09+TGC_BigWheel_SurBoxSideLength; 0." /> +</subtraction> + +<box name="TGC1_SurBoxSpc_base" material="Aluminium" X_Y_Z=" 2.*TGC1_BigWheel_RadDist09*tan(TGC1_BigWheel_PhiStepAngle2); TGC_BigWheel_SurBoxSpcLength; TGC_BigWheel_SurBoxSpcHeight" /> +<box name="TGC1_SurBoxSpc_inner" material="Aluminium" X_Y_Z=" 2.*TGC1_BigWheel_RadDist09*tan(TGC1_BigWheel_PhiStepAngle2)+2.*GENV_Eps; TGC_BigWheel_SurBoxSpcLength-2.*TGC_BigWheel_SurBoxSpcWall; TGC_BigWheel_SurBoxSpcHeight" /> + +<subtraction name="TGC1_SurBoxSpc" > + <posXYZ volume="TGC1_SurBoxSpc_base" X_Y_Z=" 0.; TGC1_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2." /> + <posXYZ volume="TGC1_SurBoxSpc_inner" X_Y_Z=" 0.; TGC1_BigWheel_RadDist09+1.5*TGC_BigWheel_SurBoxSideLength+TGC_BigWheel_SurBoxDistance/2.; TGC_BigWheel_SurBoxSideLength/2.+TGC_BigWheel_SurBoxSpcHeight/2.-TGC_BigWheel_SurBoxSpcWall" /> +</subtraction> + +<composition name="TGC1_SurBox_extended" > + <posXYZ volume="TGC1_SurBox_default" X_Y_Z=" 0.; TGC_BigWheel_SurBoxSideLength + TGC_BigWheel_SurBoxDistance; 0." /> + <posXYZ volume="TGC1_SurBoxSpc" X_Y_Z=" 0.; 0.; GENV_Eps" /> + <posXYZ volume="TGC1_SurBoxSpc" X_Y_Z=" 0.; 0.; -GENV_Eps" rot=" 0.; 180.; 0."/> +</composition> + +<composition name="TGC1_BigWheel_ASide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TGC1_Support_EvenSector_ASide" X_Y_Z=" 0.; 0.; TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TGC1_Support_OddSector_ASide" X_Y_Z=" 0.; 0.; TGC1_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TGC1_SurBox_default" X_Y_Z=" 0.; 0.; TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + <posXYZ volume="TGC1_SurBox_extended" X_Y_Z=" 0.; 0.; TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <posXYZ volume="TGC1_CentralTube" X_Y_Z=" 0.; 0.; TGC1_BigWheel_ZPosL" /> +</composition> + +<composition name="TGC1_BigWheel_CSide"> + <foreach index="counter" begin="0" loops="6" > + <posXYZ volume="TGC1_Support_EvenSector_CSide" X_Y_Z=" 0.; 0.; -TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*60." /> + <posXYZ volume="TGC1_Support_OddSector_CSide" X_Y_Z=" 0.; 0.; -TGC1_BigWheel_ZPosL" rot="0.; 0.; 30.+(counter)*60." /> + </foreach> + <foreach index="counter" begin="0" loops="12" > + <posXYZ volume="TGC1_SurBox_default" X_Y_Z=" 0.; 0.; -TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + <posXYZ volume="TGC1_SurBox_extended" X_Y_Z=" 0.; 0.; -TGC1_BigWheel_ZPosL" rot="0.; 0.; counter*30." /> + </foreach> + <posXYZ volume="TGC1_CentralTube" X_Y_Z=" 0.; 0.; -TGC1_BigWheel_ZPosL" /> +</composition> + +<composition name="TGC1_BigWheels"> + <posXYZ volume="TGC1_BigWheel_ASide" X_Y_Z=" 0.; 0.; 0." /> + <posXYZ volume="TGC1_BigWheel_CSide" X_Y_Z=" 0.; 0.; 0." /> +</composition> + +</section> + +<section name = "MdtRailSupport" + version = "1.0" + date = "21 10 2010" + author = "Claude, Jochen, laurent" + top_volume = "MDTRail"> +<defaults unit_length="mm" /> + +<var name="Zero" value=" 0"/> + +<var name="R_BOL_rail" value="9650."/> +<var name="S_BOL_rail" value="2710."/> +<var name="Z_BOL_rail" value="6350."/> +<box name="rail_BOL" material="Aluminium" X_Y_Z="120.;120.;11300." /> + +<composition name="BOL_MDTRail"> + <mposPhi volume="rail_BOL" ncopy="7" Phi0="-45." dPhi=" 45." S=" S_BOL_rail" R_Z="R_BOL_rail; Z_BOL_rail" impliedRot="true" /> + <mposPhi volume="rail_BOL" ncopy="7" Phi0="-45." dPhi=" 45." S="-S_BOL_rail" R_Z="R_BOL_rail; Z_BOL_rail" impliedRot="true" /> + <mposPhi volume="rail_BOL" ncopy="7" Phi0="-45." dPhi=" 45." S=" S_BOL_rail" R_Z="R_BOL_rail;-Z_BOL_rail" impliedRot="true" /> + <mposPhi volume="rail_BOL" ncopy="7" Phi0="-45." dPhi=" 45." S="-S_BOL_rail" R_Z="R_BOL_rail;-Z_BOL_rail" impliedRot="true" /> +</composition> + +<var name="R_BOL_service" value="9520."/> +<var name="S_BOL_service" value="2570."/> +<var name="Z_BOL_service" value="6350."/> +<box name="service_BOL" material="Carbon" X_Y_Z="200.;150.; 11300." /> + +<composition name="BOL_MDTService"> + <mposPhi volume="service_BOL" ncopy="8" Phi0="0." S=" S_BOL_service" R_Z="R_BOL_service; Z_BOL_service" impliedRot="true" /> + <mposPhi volume="service_BOL" ncopy="8" Phi0="0." S="-S_BOL_service" R_Z="R_BOL_service; Z_BOL_service" impliedRot="true" /> + <mposPhi volume="service_BOL" ncopy="8" Phi0="0." S=" S_BOL_service" R_Z="R_BOL_service;-Z_BOL_service" impliedRot="true" /> + <mposPhi volume="service_BOL" ncopy="8" Phi0="0." S="-S_BOL_service" R_Z="R_BOL_service;-Z_BOL_service" impliedRot="true" /> +</composition> + + +<var name="R_BML_rail" value="7139."/> +<var name="S_BML_rail" value="1998."/> +<var name="Z_BML_rail" value="4850."/> +<box name="rail_BML" material="Aluminium" X_Y_Z="120.;120.; 8300." /> + +<composition name="BML_MDTRail"> + <mposPhi volume="rail_BML" ncopy="8" Phi0="0." S=" S_BML_rail" R_Z="R_BML_rail; Z_BML_rail" impliedRot="true" /> + <mposPhi volume="rail_BML" ncopy="8" Phi0="0." S="-S_BML_rail" R_Z="R_BML_rail; Z_BML_rail" impliedRot="true" /> + <mposPhi volume="rail_BML" ncopy="8" Phi0="0." S=" S_BML_rail" R_Z="R_BML_rail;-Z_BML_rail" impliedRot="true" /> + <mposPhi volume="rail_BML" ncopy="8" Phi0="0." S="-S_BML_rail" R_Z="R_BML_rail;-Z_BML_rail" impliedRot="true" /> +</composition> + +<var name="R_BML_support1" value="6900."/> +<var name="S_BML_support1" value="2120."/> +<var name="Z1_BML_support1" value="1712.5"/> +<var name="Z2_BML_support1" value="5137.5"/> +<var name="Z3_BML_support1" value="8245.0"/> +<box name="support1_BML" material="Aluminium" X_Y_Z="590.;120.; 120." /> + +<composition name="BML_RailSupport1"> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1; Z1_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1; Z1_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1;-Z1_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1;-Z1_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1; Z2_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1; Z2_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1;-Z2_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1;-Z2_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1; Z3_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1; Z3_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S=" S_BML_support1" R_Z="R_BML_support1;-Z3_BML_support1" impliedRot="true" /> + <mposPhi volume="support1_BML" ncopy="8" Phi0="0." S="-S_BML_support1" R_Z="R_BML_support1;-Z3_BML_support1" impliedRot="true" /> +</composition> + +<var name="R_BML_support2" value="7139."/> +<var name="S_BML_support2" value="2362."/> +<var name="Z1_BML_support2" value="3490.0"/> +<var name="Z2_BML_support2" value="6760.0"/> +<box name="support2_BML" material="Aluminium" X_Y_Z=" 120.; 590.; 120." /> + +<composition name="BML_RailSupport2"> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S=" S_BML_support2" R_Z="R_BML_support2; Z1_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S="-S_BML_support2" R_Z="R_BML_support2; Z1_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S=" S_BML_support2" R_Z="R_BML_support2;-Z1_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S="-S_BML_support2" R_Z="R_BML_support2;-Z1_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S=" S_BML_support2" R_Z="R_BML_support2; Z2_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S="-S_BML_support2" R_Z="R_BML_support2; Z2_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S=" S_BML_support2" R_Z="R_BML_support2;-Z2_BML_support2" impliedRot="true" /> + <mposPhi volume="support2_BML" ncopy="8" Phi0="0." S="-S_BML_support2" R_Z="R_BML_support2;-Z2_BML_support2" impliedRot="true" /> +</composition> + + +<var name="R_BML_service" value="7139."/> +<var name="S_BML_service" value="1860."/> +<var name="Z_BML_service" value="4850."/> +<box name="service_BML" material="Carbon" X_Y_Z="250.;120.; 8300." /> + +<composition name="BML_MDTService"> + <mposPhi volume="service_BML" ncopy="8" Phi0="0." S=" S_BML_service" R_Z="R_BML_service; Z_BML_service" impliedRot="true" /> + <mposPhi volume="service_BML" ncopy="8" Phi0="0." S="-S_BML_service" R_Z="R_BML_service; Z_BML_service" impliedRot="true" /> + <mposPhi volume="service_BML" ncopy="8" Phi0="0." S=" S_BML_service" R_Z="R_BML_service;-Z_BML_service" impliedRot="true" /> + <mposPhi volume="service_BML" ncopy="8" Phi0="0." S="-S_BML_service" R_Z="R_BML_service;-Z_BML_service" impliedRot="true" /> +</composition> + +<var name="R_BML_trigbox" value="7575."/> +<var name="S_BML_trigbox" value=" 900."/> +<var name="Z_BML_trigbox" value="4850."/> +<box name="trigbox_BML" material="Carbon" X_Y_Z="50.;1000.; 8300." /> +<composition name="BML_trigbox"> + <mposPhi volume="trigbox_BML" ncopy="8" Phi0="0." S=" S_BML_trigbox" R_Z="R_BML_trigbox; Z_BML_trigbox" impliedRot="true" /> + <mposPhi volume="trigbox_BML" ncopy="8" Phi0="0." S="-S_BML_trigbox" R_Z="R_BML_trigbox; Z_BML_trigbox" impliedRot="true" /> + <mposPhi volume="trigbox_BML" ncopy="8" Phi0="0." S=" S_BML_trigbox" R_Z="R_BML_trigbox;-Z_BML_trigbox" impliedRot="true" /> + <mposPhi volume="trigbox_BML" ncopy="8" Phi0="0." S="-S_BML_trigbox" R_Z="R_BML_trigbox;-Z_BML_trigbox" impliedRot="true" /> +</composition> + +<var name="R_BMS_service" value="8095."/> +<var name="S_BMS_service" value="1610."/> +<var name="Z_BMS_service" value="4850."/> +<box name="service_BMS" material="Carbon" X_Y_Z="100.;120.; 8300." /> + +<composition name="BMS_MDTService"> + <mposPhi volume="service_BMS" ncopy="8" Phi0="22.5" S=" S_BMS_service" R_Z="R_BMS_service; Z_BMS_service" impliedRot="true" /> + <mposPhi volume="service_BMS" ncopy="8" Phi0="22.5" S="-S_BMS_service" R_Z="R_BMS_service; Z_BMS_service" impliedRot="true" /> + <mposPhi volume="service_BMS" ncopy="8" Phi0="22.5" S=" S_BMS_service" R_Z="R_BMS_service;-Z_BMS_service" impliedRot="true" /> + <mposPhi volume="service_BMS" ncopy="8" Phi0="22.5" S="-S_BMS_service" R_Z="R_BMS_service;-Z_BMS_service" impliedRot="true" /> +</composition> + +<var name="R_BMS_trigbox" value="7740."/> +<var name="S_BMS_trigbox" value=" 550."/> +<var name="Z_BMS_trigbox1" value="1950."/> +<var name="Z_BMS_trigbox2" value="5150."/> +<var name="Z_BMS_trigbox3" value="8150."/> +<box name="trigbox_BMS" material="Carbon" X_Y_Z="50.;900.; 2000." /> + +<composition name="BMS_trigbox"> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox1" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox1" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox1" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox1" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox2" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox2" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox2" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox2" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox3" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox; Z_BMS_trigbox3" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S=" S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox3" impliedRot="true" /> + <mposPhi volume="trigbox_BMS" ncopy="6" Phi0="-22.5" dPhi="45." S="-S_BMS_trigbox" R_Z="R_BMS_trigbox;-Z_BMS_trigbox3" impliedRot="true" /> +</composition> + + +<composition name="MDTRail"> + <posXYZ volume="BOL_MDTRail" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BOL_MDTService" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BML_MDTRail" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BML_RailSupport1" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BML_RailSupport2" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BML_MDTService" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BML_trigbox" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BMS_MDTService" X_Y_Z="Zero;Zero;Zero"/> + <posXYZ volume="BMS_trigbox" X_Y_Z="Zero;Zero;Zero"/> +</composition> + +</section> + +<section name = "HFtruck" + version = "7.0" + date = "22 November 2008" + author = "Laurent" + top_volume = "HFTruckRail"> + +<!-- name = HFTruck section name = "Supports" --> +<!-- + ************************************************************** + *** **** + *** HF Truck **** + *** **** + ************************************************************** +--> + +<defaults unit_length="mm" /> +<!-- Spokes U profile --> +<var name="HFTCBLthi" value="5"/> +<var name="HFTCBext" value="400"/> +<var name="HFTCBext2" value="200"/> +<var name="HFTCBhei" value="100"/> +<var name="HFTCBSthi" value="6"/> + +<var name="HFTCBLxa" value="HFTCBext/2." /> +<var name="HFTCBLya" value="0." /> +<var name="HFTCBLxb" value="HFTCBLxa" /> +<var name="HFTCBLyb" value="HFTCBhei" /> +<var name="HFTCBLxc" value="HFTCBLxb -HFTCBSthi" /> +<var name="HFTCBLyc" value="HFTCBLyb" /> +<var name="HFTCBLxd" value="HFTCBLxc" /> +<var name="HFTCBLyd" value="HFTCBLthi" /> + +<var name="HFT_leng" value="5400" /> +<var name="HFT_width" value="2210" /> +<var name="HFT_Decal" value="HFT_width/2.+40"/> +<var name="HFT_feet" value="6662" /> +<var name="HFT_RFP" value="1522" /> +<var name="HFT_RPR" value="4630" /> +<var name="HFT_RP2" value="2200" /> +<var name="HFT_RP3" value="5000" /> +<var name="TubPos" value="HFT_RFP+1300" /> +<var name="feePos" value="2092" /> +<var name="ZtruckPos" value="17850" /> +<var name="Zup" value="9850" /> +<var name="Tshape" value="540" /> +<var name="Sup2" value="Tshape+1075" /> +<var name="HFT_Deca" value="1700" /> + +<box name="HFTsup1" material="Iron2" X_Y_Z="Tshape;100;HFT_leng-10" /> +<box name="HFTsup2" material="Iron2" X_Y_Z="Tshape;100;HFT_width" /> +<box name="HFTcot1" material="Iron1" X_Y_Z="540;100;880" /> +<box name="HFTame1" material="Iron1" X_Y_Z="679;60;HFT_leng-10." /> + +<tubs name="HFTubes" material="Iron1" Rio_Z="244; 254;HFT_width" nbPhi="20" /> +<tubs name="HFTube2" material="Iron1" Rio_Z="104; 154;2105" nbPhi="20" /> + +<composition name="HFTruckSuppor1"> + <posXYZ volume="HFTcot1" X_Y_Z="Zero;Zero; HFT_leng/2.+50" rot="90.;Zero;Zero"/> + <posXYZ volume="HFTcot1" X_Y_Z="Zero;Zero;-HFT_leng/2.-50" rot="90.;Zero;Zero"/> + <posXYZ volume="HFTame1" X_Y_Z="Zero;Zero;Zero" rot="Zero;Zero;90."/> + <posXYZ volume="HFTsup1" X_Y_Z="Zero; 390;Zero" /> + <posXYZ volume="HFTsup1" X_Y_Z="Zero;-390;Zero" /> +</composition> + +<box name="HFTfee1" material="Iron2" X_Y_Z="639;60;HFT_feet-10." /> +<box name="HFTfee2" material="Iron1" X_Y_Z="540;60;HFT_feet" /> +<composition name="HFTruckFeet2"> + <posXYZ volume="HFTfee1" X_Y_Z="Zero;Zero;Zero" rot="Zero;Zero;90."/> + <posXYZ volume="HFTfee2" X_Y_Z="Zero; 350;Zero" /> + <posXYZ volume="HFTfee2" X_Y_Z="Zero;-350;Zero" /> +</composition> + +<composition name="HFTruckFeet1"> + <posXYZ volume="HFTruckFeet2" X_Y_Z="Zero;-HFT_leng/2.;Zero" rot="90.;0.;0." /> +</composition> + +<gvxysx name="HFTProfiles2" material="Aluminium1" dZ="HFT_leng"> + <gvxy_point X_Y="HFTCBLxa;HFTCBLya"/> + <gvxy_point X_Y="HFTCBLxb;HFTCBLyb"/> + <gvxy_point X_Y="HFTCBLxc;HFTCBLyc"/> + <gvxy_point X_Y="HFTCBLxd;HFTCBLyd"/> +</gvxysx> + +<composition name="HFTProfiles1"> + <posXYZ volume="HFTProfiles2" X_Y_Z="Zero;Zero;Zero" rot="0.;0.;180."/> +</composition> + +<composition name="HFTUPorfile"> + <posXYZ volume="HFTProfiles1" X_Y_Z="Zero;Zero;-7." rot="90.;0.; 20."/> + <posXYZ volume="HFTProfiles2" X_Y_Z="Zero;Zero; 7." rot="90.;0.;-20."/> +</composition> + +<var name="HFTCBLxa2" value="HFTCBext2/2." /> +<var name="HFTCBLya2" value="0." /> +<var name="HFTCBLxb2" value="HFTCBLxa2" /> +<var name="HFTCBLyb2" value="HFTCBhei" /> +<var name="HFTCBLxc2" value="HFTCBLxb2 -HFTCBSthi" /> +<var name="HFTCBLyc2" value="HFTCBLyb2" /> +<var name="HFTCBLxd2" value="HFTCBLxc2" /> +<var name="HFTCBLyd2" value="HFTCBLthi" /> + +<gvxysx name="HFTProfiles3" material="Aluminium1" dZ="HFT_leng-1400"> + <gvxy_point X_Y="HFTCBLxa2;HFTCBLya2"/> + <gvxy_point X_Y="HFTCBLxb2;HFTCBLyb2"/> + <gvxy_point X_Y="HFTCBLxc2;HFTCBLyc2"/> + <gvxy_point X_Y="HFTCBLxd2;HFTCBLyd2"/> +</gvxysx> + +<composition name="HFTProfiles4"> + <posXYZ volume="HFTProfiles3" X_Y_Z="Zero;Zero;Zero" rot="0.;0.;180."/> +</composition> + +<!-- Spokes Rail same position that the feet rail --> +<gvxy name="HFTExtremityRail1" material="Iron" dZ="HFT_leng+200" > + <gvxy_point X_Y="RAIL_CeRxb;RAIL_CeRyb"/> + <gvxy_point X_Y="RAIL_CeRxc;RAIL_CeRyc"/> + <gvxy_point X_Y="RAIL_CeRxd;RAIL_CeRyd"/> + <gvxy_point X_Y="RAIL_CeRxe;RAIL_CeRye"/> + <gvxy_point X_Y="RAIL_CeRxf;RAIL_CeRyf"/> + <gvxy_point X_Y="RAIL_CeRxg;RAIL_CeRyg"/> + <gvxy_point X_Y="RAIL_CeRxh;RAIL_CeRyh"/> + <gvxy_point X_Y="RAIL_CeRxi;RAIL_CeRyi"/> + <gvxy_point X_Y="RAIL_CeRxj;RAIL_CeRyj"/> + <gvxy_point X_Y="RAIL_CeRxk;RAIL_CeRyk"/> + <gvxy_point X_Y="RAIL_CeRxl;RAIL_CeRyl"/> + <gvxy_point X_Y="RAIL_CeRxm;RAIL_CeRym"/> +</gvxy> + +<composition name="HFTruckFeet"> + <posXYZ volume="HFTruckFeet1" X_Y_Z=" HFT_Decal;RAIL_Ypos-HFT_RFP; feePos" /> + <posXYZ volume="HFTruckFeet1" X_Y_Z=" HFT_Decal;RAIL_Ypos-HFT_RFP;-feePos" /> + <posXYZ volume="HFTruckFeet1" X_Y_Z="-HFT_Decal;RAIL_Ypos-HFT_RFP; feePos" /> + <posXYZ volume="HFTruckFeet1" X_Y_Z="-HFT_Decal;RAIL_Ypos-HFT_RFP;-feePos" /> + + <posXYZ volume="HFTruckSuppor1" X_Y_Z=" HFT_Decal;RAIL_Ypos-450.;Zero" /> + <posXYZ volume="HFTruckSuppor1" X_Y_Z="-HFT_Decal;RAIL_Ypos-450.;Zero" /> + + <posXYZ volume="HFTExtremityRail1" X_Y_Z="-HFT_Decal;RAIL_Ypos ;Zero" /> + <posXYZ volume="HFTExtremityRail1" X_Y_Z=" HFT_Decal;RAIL_Ypos ;Zero" /> + + <posXYZ volume="HFTubes" X_Y_Z=" Zero;RAIL_Ypos-HFT_RFP ; feePos" rot="0.; 90.;0." /> + <posXYZ volume="HFTubes" X_Y_Z=" Zero;RAIL_Ypos-HFT_RFP ;-feePos" rot="0.; 90.;0." /> + +</composition> + +<composition name="HFTUPorfile1"> + <posXYZ volume="HFTProfiles3" X_Y_Z="Zero;Zero; 3." rot="90.;0.; 55."/> + <posXYZ volume="HFTProfiles4" X_Y_Z="Zero;Zero;-3." rot="90.;0.;-55."/> +</composition> + + +<composition name="HFTruckRail2" > + <posXYZ volume="HFTruckFeet" X_Y_Z=" HFT_Deca ; Zero ; Zero " /> + <posXYZ volume="HFTUPorfile" X_Y_Z=" HFT_Deca ; RAIL_Ypos-HFT_RPR ; feePos" /> + <posXYZ volume="HFTUPorfile" X_Y_Z=" HFT_Deca ; RAIL_Ypos-HFT_RPR ;-feePos" /> + <posXYZ volume="HFTUPorfile1" X_Y_Z=" HFT_Decal+HFT_Deca ; RAIL_Ypos-HFT_RP2 ; Zero" rot="0.; 90.;0." /> + <posXYZ volume="HFTUPorfile1" X_Y_Z="-HFT_Decal+HFT_Deca ; RAIL_Ypos-HFT_RP2 ; Zero" rot="0.; 90.;0." /> + <posXYZ volume="HFTUPorfile1" X_Y_Z=" HFT_Decal+HFT_Deca ; RAIL_Ypos-HFT_RP3 ; Zero" rot="0.; 90.;0." /> + <posXYZ volume="HFTUPorfile1" X_Y_Z="-HFT_Decal+HFT_Deca ; RAIL_Ypos-HFT_RP3 ; Zero" rot="0.; 90.;0." /> + <posXYZ volume="HFTsup2" X_Y_Z=" HFT_Deca ; RAIL_Ypos+Tshape-50 ; feePos-HFT_Deca" rot="0.; 90.;0." /> + <posXYZ volume="HFTsup2" X_Y_Z=" HFT_Deca ; RAIL_Ypos+Tshape-50 ;-feePos+HFT_Deca" rot="0.; 90.;0." /> + <posXYZ volume="HFTube2" X_Y_Z=" HFT_Deca-800 ; RAIL_Ypos+Sup2 ; feePos-HFT_Deca" rot="90.; 90.;0." /> + <posXYZ volume="HFTube2" X_Y_Z=" HFT_Deca+800 ; RAIL_Ypos+Sup2 ; feePos-HFT_Deca" rot="90.; 90.;0." /> + <posXYZ volume="HFTube2" X_Y_Z=" HFT_Deca-800 ; RAIL_Ypos+Sup2 ;-feePos+HFT_Deca" rot="90.; 90.;0." /> + <posXYZ volume="HFTube2" X_Y_Z=" HFT_Deca+800 ; RAIL_Ypos+Sup2 ;-feePos+HFT_Deca" rot="90.; 90.;0." /> +</composition> + +<composition name="HFTruckRail" > + <posXYZ volume="HFTruckRail2" X_Y_Z=" Zero; Zero; ZtruckPos" rot="0.;270.;0." /> + <posXYZ volume="HFTruckRail2" X_Y_Z=" Zero; Zero;-ZtruckPos" rot="0.; 90.;0." /> +</composition> + +</section> + +<section name = "RUN2_Services" + version = "1.0" + date = "September 2014" + author = "Antonios Leisos, Jochen Meyer" + top_volume = "RUN2_Services"> + +<!-- name = Run2 supports section name = "Services" --> + +<var name="BME_ElectronicsBox_Frame_xwid" value="2350."/> <!-- ATLMHS_0114 --> +<var name="BME_ElectronicsBox_Frame_ywid" value=" 100."/> <!-- ATLMHS_0114 --> +<var name="BME_ElectronicsBox_Frame_zwid" value=" 600."/> <!-- ATLMHS_0114 --> +<var name="BME_ElectronicsBox_Frame_width" value=" 50."/> <!-- ATLMHS_0114 --> +<var name="BME_ElectronicsBox_Frame_plate_width" value=" 7."/> <!-- Approximate value --> +<var name="BME_ElectronicsBox_Frame_box_width" value=" 5."/> <!-- Approximate value tuned to the weight --> +<var name="BME_ElectronicsBox_Frame_distance_from_chamber" value="120."/> <!-- Markus Lippert:121mm and a little bit smaller since thery are not parallel --> + +<box name="BME_ElectronicsBox_Outer" material="Aluminium" X_Y_Z="BME_ElectronicsBox_Frame_xwid; BME_ElectronicsBox_Frame_ywid ; BME_ElectronicsBox_Frame_zwid" /> +<box name="BME_ElectronicsBox_Inner" material="Aluminium" X_Y_Z="BME_ElectronicsBox_Frame_xwid-2.*BME_ElectronicsBox_Frame_width; BME_ElectronicsBox_Frame_ywid+10. ; BME_ElectronicsBox_Frame_zwid-2.*BME_ElectronicsBox_Frame_width" /> + +<subtraction name="BME_Electronics_Box" > + <posXYZ volume="BME_ElectronicsBox_Outer" /> + <posXYZ volume="BME_ElectronicsBox_Inner" /> +</subtraction> + +<box name="BME_ElectronicsBox_Plate" material="Aluminium" X_Y_Z="BME_ElectronicsBox_Frame_xwid-2.*BME_ElectronicsBox_Frame_width-2.*GENV_Eps; BME_ElectronicsBox_Frame_plate_width; BME_ElectronicsBox_Frame_zwid-2.*BME_ElectronicsBox_Frame_width-2.*GENV_Eps" /> + +<box name="BME_ElectronicsBox_Box" material="Carbon" X_Y_Z="BME_ElectronicsBox_Frame_xwid-2.*BME_ElectronicsBox_Frame_width-2.*GENV_Eps; BME_ElectronicsBox_Frame_box_width; BME_ElectronicsBox_Frame_zwid-2.*BME_ElectronicsBox_Frame_width-2.*GENV_Eps" /> + +<composition name="BME_Electronics"> + <posXYZ volume="BME_Electronics_Box" /> + <posXYZ volume="BME_ElectronicsBox_Plate" X_Y_Z=" 0.;BME_ElectronicsBox_Frame_ywid*0.5-BME_ElectronicsBox_Frame_plate_width*0.5;0." /> + <posXYZ volume="BME_ElectronicsBox_Box" X_Y_Z=" 0.;BME_ElectronicsBox_Frame_ywid*0.5-BME_ElectronicsBox_Frame_plate_width-BME_ElectronicsBox_Frame_box_width/2.-GENV_Eps;0." /> +</composition> + +<var name="BOEwall_thickness" value="200."/> +<var name="BOEwall_ywid" value="2000."/> +<var name="BOEwall_xwid" value="3400."/> +<var name="BOEwall_zwid" value="2200."/> + +<var name="BOEbox4_xwid" value="BOEwall_xwid-2*BOEwall_thickness"/> +<var name="BOEbox4_ywid" value="BOEwall_ywid"/> +<var name="BOEbox4_zwid" value="BOEwall_thickness"/> +<var name="BOEbox4_xpos" value="0."/> +<var name="BOEbox4_ypos" value="0."/> +<var name="BOEbox4_zpos" value="0."/> + +<var name="BOEbox5_xwid" value="BOEwall_thickness"/> +<var name="BOEbox5_ywid" value="BOEwall_ywid"/> +<var name="BOEbox5_zwid" value="BOEwall_zwid"/> +<var name="BOEbox5_xpos" value="BOEbox4_xwid/2+BOEbox5_xwid/2+GENV_Eps"/> +<var name="BOEbox5_ypos" value="BOEbox4_ypos"/> +<var name="BOEbox5_zpos" value="BOEwall_zwid/2-BOEwall_thickness/2"/> + +<box name="BOEbox4" material="Aluminium" X_Y_Z=" BOEbox4_xwid;BOEbox4_ywid;BOEbox4_zwid" /> +<box name="BOEbox5" material="Aluminium" X_Y_Z=" BOEbox5_xwid;BOEbox5_ywid;BOEbox5_zwid" /> + +<var name="ElavatorSupport_xwid" value=" 200. "/> <!-- approximate value --> +<var name="ElavatorSupport_zwid" value=" 200. "/> <!-- approximate value --> +<var name="ElavatorSupport_ywid" value="BOEwall_ywid"/> +<var name="ElavatorSupport_xpos" value="1000. "/> <!-- approximate value --> +<var name="ElavatorSupport_ypos" value="BOEbox5_ypos"/> +<var name="ElavatorSupport_zpos" value="BOEbox5_zpos"/> + +<var name="ElavatorCross_zwid" value=" 10. "/> <!-- approximate value --> +<var name="ElavatorCross_xwid" value="2.*ElavatorSupport_xpos-ElavatorSupport_xwid-2.*GENV_Eps"/> +<var name="ElavatorCross_ywid" value="1000. "/> <!-- approximate value --> +<var name="ElavatorCross_xpos" value="BOEbox4_xpos"/> +<var name="ElavatorCross_ypos" value="BOEwall_ywid/2.-ElavatorCross_ywid/2."/> +<var name="ElavatorCross_zpos" value="ElavatorSupport_zpos"/> + +<var name="ElavatorTopFrame_xwid" value="BOEbox4_xwid+2.*BOEbox5_xwid"/> +<var name="ElavatorTopFrame_zwid" value="BOEbox5_zwid"/> +<var name="ElavatorTopFrame_ywid" value=" 200. "/> <!-- approximate value --> +<var name="ElavatorTopFrame_xpos" value="BOEbox4_xpos"/> +<var name="ElavatorTopFrame_ypos" value="BOEbox4_ywid/2+ElavatorTopFrame_ywid/2+GENV_Eps"/> +<var name="ElavatorTopFrame_zpos" value="BOEbox5_zpos"/> +<var name="ElavatorTopFrame_thickness" value=" 30. "/> <!-- approximate value --> +<var name="ElavatorTopPlate_xwid" value="ElavatorTopFrame_xwid"/> +<var name="ElavatorTopPlate_zwid" value="ElavatorTopFrame_zwid"/> +<var name="ElavatorTopPlate_ywid" value=" 5. "/> <!-- approximate value --> +<var name="ElavatorTopPlate_xpos" value="BOEbox4_xpos"/> +<var name="ElavatorTopPlate_ypos" value="ElavatorTopFrame_ypos+ElavatorTopFrame_ywid/2+ElavatorTopPlate_ywid/2+GENV_Eps"/> +<var name="ElavatorTopPlate_zpos" value="BOEbox5_zpos"/> + +<box name="ElevatorSupport" material="Aluminium" X_Y_Z=" ElavatorSupport_xwid; ElavatorSupport_ywid; ElavatorSupport_zwid" /> +<box name="ElevatorCross" material="Aluminium" X_Y_Z=" ElavatorCross_xwid; ElavatorCross_ywid; ElavatorCross_zwid" /> +<box name="ElevatorTopFrame_Outer" material="Aluminium" X_Y_Z="ElavatorTopFrame_xwid; ElavatorTopFrame_ywid; ElavatorTopFrame_zwid" /> +<box name="ElevatorTopFrame_Inner" material="Aluminium" X_Y_Z="ElavatorTopFrame_xwid-ElavatorTopFrame_thickness; ElavatorTopFrame_ywid; ElavatorTopFrame_zwid-ElavatorTopFrame_thickness" /> + +<subtraction name="ElevatorTopFrame" > + <posXYZ volume="ElevatorTopFrame_Outer" /> + <posXYZ volume="ElevatorTopFrame_Inner" /> +</subtraction> + +<box name="ElevatorTopPlate" material="Aluminium" X_Y_Z=" ElavatorTopPlate_xwid; ElavatorTopPlate_ywid; ElavatorTopPlate_zwid" /> + +<composition name="BOEwallside" > + <posXYZ volume="BOEbox4" X_Y_Z=" BOEbox4_xpos; BOEbox4_ypos; BOEbox4_zpos" /> + <posXYZ volume="ElevatorSupport" X_Y_Z=" ElavatorSupport_xpos; ElavatorSupport_ypos; ElavatorSupport_zpos" /> + <posXYZ volume="ElevatorCross" X_Y_Z=" ElavatorCross_xpos; ElavatorCross_ypos; ElavatorCross_zpos" /> + <posXYZ volume="ElevatorSupport" X_Y_Z=" -ElavatorSupport_xpos; ElavatorSupport_ypos; ElavatorSupport_zpos" /> + <posXYZ volume="ElevatorTopFrame" X_Y_Z=" ElavatorTopFrame_xpos; ElavatorTopFrame_ypos; ElavatorTopFrame_zpos" /> + <posXYZ volume="ElevatorTopPlate" X_Y_Z=" ElavatorTopPlate_xpos; ElavatorTopPlate_ypos; ElavatorTopPlate_zpos" /> + <posXYZ volume="BOEbox5" X_Y_Z=" BOEbox5_xpos; BOEbox5_ypos; BOEbox5_zpos" /> + <posXYZ volume="BOEbox5" X_Y_Z=" -BOEbox5_xpos; BOEbox5_ypos; BOEbox5_zpos" /> +</composition> + +<composition name="BOEwall"> + <posXYZ volume="BOEwallside" X_Y_Z=" 0.; -12970 ; 6900." rot="0.;180.; 0" /> + <posXYZ volume="BOEwallside" X_Y_Z=" 0.; -12970 ; -7060." rot="0.; 0.; 0" /> +</composition> + +<composition name="RUN2_Services"> + <posXYZ volume="BME_Electronics" X_Y_Z="0.;-7786.6-0.5*229.5;GENV_Eps+7057.8+0.5*BME_ElectronicsBox_Frame_zwid+BME_ElectronicsBox_Frame_distance_from_chamber" /> + <posXYZ volume="BME_Electronics" X_Y_Z="0.;-7786.6-0.5*229.5;-GENV_Eps-7057.8-0.5*BME_ElectronicsBox_Frame_zwid-BME_ElectronicsBox_Frame_distance_from_chamber" /> + <posXYZ volume="BOEwall" X_Y_Z="0.; 0.; 0." rot="-0.708; 0.; 0"/> +</composition> + +</section> + +<section name = "ATLAS Plancher (in french in the text)" + version = "7.0" + date = "22 November 2008" + author = "Laurent" + top_volume = "Plancher"> + +<!-- name = Plancher section name = "Supports" --> +<!-- plan:ATF1 UX 150001 --> +<defaults unit_length="mm"/> + +<box name="box1" material="Iron" X_Y_Z="30000; 5002;27000" /> +<box name="box2" material="Iron" X_Y_Z="30000; 1336; 9000" /> +<box name="box3" material="Iron" X_Y_Z=" 5200;10000;27010" /> <!-- use larger length in z than box1 to not run into issues with volume subtraction --> + +<subtraction name="central" > + <posXYZ volume="box1" X_Y_Z="0; 0;0" /> + <posXYZ volume="box3" X_Y_Z="0;4541;0" /> +</subtraction> + +<composition name="PlancherTilte"> + <posXYZ volume="central" X_Y_Z="0; -13871; 0" /> <!-- the distance between cavern floor and centre of beam axis at IP is 11370mm, cf. atcz____0005-vAC --> + <posXYZ volume="box2" X_Y_Z="0; -15704; 18005" /> + <posXYZ volume="box2" X_Y_Z="0; -15704; -18005" /> +</composition> + +<composition name="Plancher"> + <posXYZ volume="PlancherTilte" X_Y_Z="0;0;0" rot="-0.708;0;0"/> +</composition> + +</section> + +<section name = "ID-EMC-Tile" + version = "7.0" + date = "21 Juin 2010" + author = "Laurent Chevalier" + top_volume = "IDEMTile"> + +<!-- name = Tile Fingers section name = "ID-EM-Tile"--> + +<trd name="TileFinger1" material="Iron1" Xmp_Ymp_Z="420 ; 420 ; 176 ; 130 ; 300 " /> + +<var name="FingerPos" value="6540" /> +<var name="FingerShift" value="210" /> + +<composition name="TileFinger2"> + <posXYZ volume="TileFinger1" X_Y_Z="JDSH_BDRRouRa_RetrunRing_outerRadius-JDReturnL/2. ; 0 ; 0." rot=" 90.; 90.; 270." /> +</composition> + +<composition name="TileFinger3"> + <foreach index="IFing" begin="1" loops="8" > + <posXYZ volume="TileFinger2" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; IFing*45/8 +2.81" /> + </foreach> +</composition> + +<composition name="TileFingersA"> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 270" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 315" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 0" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 45" /> +</composition> +<composition name="TileFingersB"> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 90" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 135" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 180" /> + <posXYZ volume="TileFinger3" X_Y_Z="0 ; 0 ; 0" rot="0.;0.; 225" /> +</composition> + +<composition name="TileFingers"> + <posXYZ volume="TileFingersA" X_Y_Z="0 ; 0 ; FingerPos - FingerShift" /> + <posXYZ volume="TileFingersB" X_Y_Z="0 ; 0 ; FingerPos - FingerShift" /> + <posXYZ volume="TileFingersA" X_Y_Z="0 ; 0 ;-FingerPos + FingerShift" /> + <posXYZ volume="TileFingersB" X_Y_Z="0 ; 0 ;-FingerPos + FingerShift" /> +</composition> + +</section> + +<section name = "ATLAS" + version = "7.0" + date = "22 November 2008" + author = "Laurent" + top_volume = "All"> + +<composition name="Magnets"> + <posXYZ volume="ECT_Toroids" X_Y_Z="0.;0.;0."/> + <posXYZ volume="BAR_Toroid" X_Y_Z="0.;0.;0."/> + <posXYZ volume="Solenoid" X_Y_Z="0.;0.;0."/> +</composition> + +<composition name="Service"> + <posXYZ volume="servicesAtZ0" X_Y_Z="0.;0.;0."/> + <posXYZ volume="pp2" X_Y_Z="0.;0.;0."/> + <posXYZ volume="MBAP_AccessPlatform" X_Y_Z="0.;0.;0."/> + <posXYZ volume="RUN2_Services" X_Y_Z="0.;0.;0."/> +</composition> + +<composition name="Shield"> + <posXYZ volume="JTSH_Shield" X_Y_Z="0.;0.;0."/> + <posXYZ volume="JDSH_Shield" X_Y_Z="0.;0.;0."/> + <posXYZ volume="JFSH_Shield" X_Y_Z="0.;0.;0."/> +</composition> + +<composition name="Supports"> + <posXYZ volume="Feet" X_Y_Z="0.;0.;0."/> + <posXYZ volume="RailAssembly" X_Y_Z="0.;0.;0."/> + <posXYZ volume="HFTruckRail" X_Y_Z="0.;0.;0."/> + <posXYZ volume="SADL_CalorimeterSaddle" X_Y_Z="0.;0.;0."/> + <posXYZ volume="MBWH_BigWheels" X_Y_Z="0.;0.;0."/> + <posXYZ volume="TBWH_BigWheels" X_Y_Z="0.;0.;0."/> + <posXYZ volume="TGC1_BigWheels" X_Y_Z="0.;0.;0."/> + <posXYZ volume="TGC3_BigWheels" X_Y_Z="0.;0.;0."/> + <posXYZ volume="MDTRail" X_Y_Z="0.;0.;0."/> + <posXYZ volume="Plancher" X_Y_Z="0.;0.;0."/> +</composition> + +<composition name="IdEmTile"> + <posXYZ volume="TileFingers" X_Y_Z="0.;0.;0." /> +</composition> + +</section> + +</AGDD> diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/IMuonIdHelperSvc.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/IMuonIdHelperSvc.h index a91e286db8b2d82c0ffea4766a14459b5b899acf..1cfd56d89c0144d7769578ab8e651ac28faaec95 100644 --- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/IMuonIdHelperSvc.h +++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/IMuonIdHelperSvc.h @@ -75,6 +75,9 @@ namespace Muon { /** @brief returns whether this is a sTGC Identifier or not */ virtual bool issTgc( const Identifier& id ) const = 0; + /** @brief returns whether this is a sMDT Identifier or not */ + virtual bool issMdt( const Identifier& id ) const = 0; + /** @brief returns whether this Identifier belongs to an MDT with HPTDC or not */ virtual bool hasHPTDC( const Identifier& id ) const = 0; diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MdtIdHelper.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MdtIdHelper.h index ecbf00980469e470c0016d048ac4678a1c96a7f7..109ceed683f6594c2c770e1f69ede5440cafb960 100644 --- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MdtIdHelper.h +++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MdtIdHelper.h @@ -144,10 +144,10 @@ class MdtIdHelper : public MuonIdHelper int gasGap(const Identifier& id) const; /// always false for MDTs bool measuresPhi(const Identifier& id) const; - /// is this an sMDT chamber - bool isSmallMdt(const Identifier& id) const; /// is this a BMG chamber bool isBMG(const Identifier& id) const; + /// is this a BME chamber + bool isBME(const Identifier& id) const; private: @@ -346,10 +346,10 @@ inline bool MdtIdHelper::measuresPhi(const Identifier& /*id*/) const } -inline bool MdtIdHelper::isSmallMdt(const Identifier& id) const +inline bool MdtIdHelper::isBME(const Identifier& id) const { int index=stationName(id); - if(stationNameIndex("BME")==index || stationNameIndex("BMG")==index) return true; + if(stationNameIndex("BME")==index) return true; else return false; } diff --git a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelperSvc.h b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelperSvc.h index 55630f0a2133a217ce78835df086b1ad19d69d27..f5861aa67b7a7bf83e3c5ef2b88f273a7af6c075 100644 --- a/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelperSvc.h +++ b/MuonSpectrometer/MuonIdHelpers/MuonIdHelpers/MuonIdHelperSvc.h @@ -77,6 +77,9 @@ namespace Muon { /** @brief returns whether this is a sTGC Identifier or not */ virtual bool issTgc( const Identifier& id ) const override; + /** @brief returns whether this is a sMDT Identifier or not */ + virtual bool issMdt( const Identifier& id ) const override; + /** @brief returns whether this Identifier belongs to an MDT with HPTDC or not */ virtual bool hasHPTDC( const Identifier& id ) const override; diff --git a/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelperSvc.cxx b/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelperSvc.cxx index 946e5b55a5f3f19e346b69d0bb295f43c2f6d398..af6cd27a209cbf2a6af1ac858430368e9fc9fef2 100644 --- a/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelperSvc.cxx +++ b/MuonSpectrometer/MuonIdHelpers/src/MuonIdHelperSvc.cxx @@ -199,6 +199,17 @@ namespace Muon { return m_stgcIdHelper->is_stgc(id); } + bool MuonIdHelperSvc::issMdt( const Identifier& id ) const { + if (!m_mdtIdHelper) return false; + else if (!isMdt(id)) return false; + else if (m_mdtIdHelper->isEndcap(id)) return false; // there are no sMDTs in the endcaps + else if (!m_rpcIdHelper) return false; // need RPC helper for the hasHPTDC check + bool sMdt = false; + if (m_mdtIdHelper->isBME(id)) sMdt = true; // all BME chambers are sMDTs + else if (hasHPTDC(id)) sMdt = true; // all chambers with HPTDC are sMDTs + return sMdt; + } + bool MuonIdHelperSvc::hasHPTDC( const Identifier& id ) const { if (!isMdt(id)) return false; else if (!m_rpcIdHelper) return false; // there must be RPCs in the layout diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/MuonStationIntersectSvc/MdtIntersectGeometry.h b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/MuonStationIntersectSvc/MdtIntersectGeometry.h index 5b54539b1adc1235abf162c26426a6893fce8b0b..c464247efaa8083b652d033b4fbed7095fc725e0 100755 --- a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/MuonStationIntersectSvc/MdtIntersectGeometry.h +++ b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/MuonStationIntersectSvc/MdtIntersectGeometry.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 MDTINTERSECTGEOMETRY_H @@ -15,7 +15,6 @@ namespace MuonGM { class MdtReadoutElement; } -class MdtIdHelper; class MdtCondDbData; namespace TrkDriftCircleMath { @@ -23,11 +22,10 @@ namespace TrkDriftCircleMath { } namespace Muon { - + class IMuonIdHelperSvc; class MdtIntersectGeometry : public MuonIntersectGeometry { public: - MdtIntersectGeometry( const Identifier& chid, const MuonGM::MuonDetectorManager* detMgr, const MdtCondDbData* dbData, - MsgStream* msg); + MdtIntersectGeometry(const Identifier& chid, const MuonGM::MuonDetectorManager* detMgr, const MdtCondDbData* dbData, MsgStream* msg, const Muon::IMuonIdHelperSvc* idHelp); MdtIntersectGeometry(const MdtIntersectGeometry &right); MdtIntersectGeometry & operator=(const MdtIntersectGeometry &right); ~MdtIntersectGeometry(); @@ -51,7 +49,7 @@ namespace Muon { const MuonGM::MdtReadoutElement* m_detElMl1; const MuonGM::MuonDetectorManager* m_detMgr; const MdtCondDbData* m_dbData; - const MdtIdHelper* m_mdtIdHelper; + const Muon::IMuonIdHelperSvc* m_idHelperSvc; std::set<Identifier> m_deadTubesML; std::vector<Identifier> m_deadTubes; }; diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MdtIntersectGeometry.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MdtIntersectGeometry.cxx index fbc80277b7f4db6811b3543e6edd1a73515ca106..de72e259b0dcb0952d2a68d3437bd275876337fe 100755 --- a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MdtIntersectGeometry.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MdtIntersectGeometry.cxx @@ -9,19 +9,19 @@ #include "TrkDriftCircleMath/MdtChamberGeometry.h" #include "MuonReadoutGeometry/MdtReadoutElement.h" #include "MuonReadoutGeometry/MuonDetectorManager.h" -#include "MuonIdHelpers/MdtIdHelper.h" +#include "MuonIdHelpers/IMuonIdHelperSvc.h" #include "GeoModelUtilities/GeoGetIds.h" #include "MuonCondData/MdtCondDbData.h" namespace Muon{ - MdtIntersectGeometry::MdtIntersectGeometry(const Identifier& chid, const MuonGM::MuonDetectorManager* detMgr, const MdtCondDbData* dbData, MsgStream* msg) : + MdtIntersectGeometry::MdtIntersectGeometry(const Identifier& chid, const MuonGM::MuonDetectorManager* detMgr, const MdtCondDbData* dbData, MsgStream* msg, const Muon::IMuonIdHelperSvc* idHelp) : m_chid(chid), m_mdtGeometry(nullptr), m_detMgr(detMgr), m_dbData(dbData), - m_mdtIdHelper(nullptr) + m_idHelperSvc(idHelp) { init(msg); } @@ -35,7 +35,7 @@ namespace Muon{ m_detElMl1 = right.m_detElMl1; m_detMgr = right.m_detMgr; m_dbData=right.m_dbData; - m_mdtIdHelper = right.m_mdtIdHelper; + m_idHelperSvc = right.m_idHelperSvc; } MdtIntersectGeometry& MdtIntersectGeometry::operator=(const MdtIntersectGeometry& right) { @@ -48,7 +48,7 @@ namespace Muon{ m_detElMl1 = right.m_detElMl1; m_detMgr = right.m_detMgr; m_dbData=right.m_dbData; - m_mdtIdHelper = right.m_mdtIdHelper; + m_idHelperSvc = right.m_idHelperSvc; } return *this; } @@ -63,7 +63,7 @@ namespace Muon{ MuonStationIntersect intersect; if( !m_mdtGeometry ){ MsgStream log(Athena::getMessageSvc(),"MdtIntersectGeometry"); - log<<MSG::WARNING<<"MdtIntersectGeometry::intersection() - MdtIntersectGeometry not correctly initialized "<< m_mdtIdHelper->print_to_string(m_chid)<<endmsg; + log<<MSG::WARNING<<"MdtIntersectGeometry::intersection() - MdtIntersectGeometry not correctly initialized "<< m_idHelperSvc->mdtIdHelper().print_to_string(m_chid)<<endmsg; return intersect; } @@ -85,8 +85,8 @@ namespace Muon{ for( ; dit!=dit_end;++dit ){ double xint = dxdy*( dit->position().x() - lpos.y() ) + lpos.x(); - Identifier tubeid = m_mdtIdHelper->channelID( m_chid, dit->id().ml()+1, dit->id().lay()+1, dit->id().tube()+1 ); - if( m_deadTubesML.find( m_mdtIdHelper->multilayerID(tubeid) ) != m_deadTubesML.end() ) { + Identifier tubeid = m_idHelperSvc->mdtIdHelper().channelID( m_chid, dit->id().ml()+1, dit->id().lay()+1, dit->id().tube()+1 ); + if( m_deadTubesML.find( m_idHelperSvc->mdtIdHelper().multilayerID(tubeid) ) != m_deadTubesML.end() ) { if( std::find( m_deadTubes.begin(), m_deadTubes.end(), tubeid ) != m_deadTubes.end() ) continue; } @@ -114,8 +114,6 @@ namespace Muon{ void MdtIntersectGeometry::init(MsgStream* msg) { - m_mdtIdHelper = m_detMgr->mdtIdHelper(); - /* calculate chamber geometry it takes as input: distance between the first and second tube in the chamber within a layer along the tube layer (tube distance) @@ -129,15 +127,15 @@ namespace Muon{ */ // get id - int eta = m_mdtIdHelper->stationEta(m_chid); - int phi = m_mdtIdHelper->stationPhi(m_chid); - int name = m_mdtIdHelper->stationName(m_chid); - int isBarrel = m_mdtIdHelper->isBarrel(m_chid); - int isSmallMdt = m_mdtIdHelper->isSmallMdt(m_chid); + int eta = m_idHelperSvc->mdtIdHelper().stationEta(m_chid); + int phi = m_idHelperSvc->mdtIdHelper().stationPhi(m_chid); + int name = m_idHelperSvc->mdtIdHelper().stationName(m_chid); + int isBarrel = m_idHelperSvc->mdtIdHelper().isBarrel(m_chid); + int isSmallMdt = m_idHelperSvc->issMdt(m_chid); TrkDriftCircleMath::MdtStationId stationId( isSmallMdt, isBarrel, name, eta, phi ); // get detEL for first ml (always there) - Identifier firstIdml0 = m_mdtIdHelper->channelID( name,eta,phi,1,1,1 ); + Identifier firstIdml0 = m_idHelperSvc->mdtIdHelper().channelID( name,eta,phi,1,1,1 ); Identifier firstIdml1; m_detElMl0 = m_detMgr->getMdtReadoutElement( firstIdml0 ); @@ -153,7 +151,7 @@ namespace Muon{ // treament of chambers with two ml if( nml == 2 ){ - firstIdml1 = m_mdtIdHelper->channelID( name,eta,phi,2,1,1 ); + firstIdml1 = m_idHelperSvc->mdtIdHelper().channelID( name,eta,phi,2,1,1 ); m_detElMl1 = m_detMgr->getMdtReadoutElement( firstIdml1 ); } @@ -201,14 +199,14 @@ namespace Muon{ TrkDriftCircleMath::LocPos firstTube1( firstTubeMl1.y(), firstTubeMl1.z() ); // position second tube in ml 0 - Identifier secondIdml0 = m_mdtIdHelper->channelID( name,eta,phi,firstMlIndex,1,2 ); + Identifier secondIdml0 = m_idHelperSvc->mdtIdHelper().channelID( name,eta,phi,firstMlIndex,1,2 ); Amg::Vector3D secondTubeMl0 = transform()*(m_detElMl0->tubePos( secondIdml0 )); if(m_detElMl0) fillDeadTubes(m_detElMl0, msg); if(m_detElMl1) fillDeadTubes(m_detElMl1, msg); // position first tube in second layer ml 0 - Identifier firstIdml0lay1 = m_mdtIdHelper->channelID( name,eta,phi,firstMlIndex,2,1 ); + Identifier firstIdml0lay1 = m_idHelperSvc->mdtIdHelper().channelID( name,eta,phi,firstMlIndex,2,1 ); Amg::Vector3D firstTubeMl0lay1 = transform()*(m_detElMl0->tubePos( firstIdml0lay1 )); double tubeDist = (secondTubeMl0 - firstTubeMl0).y(); // distance between tube in a given layer @@ -235,10 +233,10 @@ namespace Muon{ Identifier detElId = mydetEl->identify(); - int name = m_mdtIdHelper->stationName(detElId); - int eta = m_mdtIdHelper->stationEta(detElId); - int phi = m_mdtIdHelper->stationPhi(detElId); - int ml = m_mdtIdHelper->multilayer(detElId); + int name = m_idHelperSvc->mdtIdHelper().stationName(detElId); + int eta = m_idHelperSvc->mdtIdHelper().stationEta(detElId); + int phi = m_idHelperSvc->mdtIdHelper().stationPhi(detElId); + int ml = m_idHelperSvc->mdtIdHelper().multilayer(detElId); std::vector<int>::iterator it = tubes.begin(); for(int layer = 1; layer <= mydetEl->getNLayers(); layer++){ @@ -253,8 +251,8 @@ namespace Muon{ ++it; } else { - Identifier deadTubeId = m_mdtIdHelper->channelID( name, eta, phi, ml, layer, tube ); - Identifier deadTubeMLId = m_mdtIdHelper->multilayerID( deadTubeId ); + Identifier deadTubeId = m_idHelperSvc->mdtIdHelper().channelID( name, eta, phi, ml, layer, tube ); + Identifier deadTubeMLId = m_idHelperSvc->mdtIdHelper().multilayerID( deadTubeId ); m_deadTubes.push_back( deadTubeId ); m_deadTubesML.insert( deadTubeMLId ); if (msg) { diff --git a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MuonStationIntersectSvc.cxx b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MuonStationIntersectSvc.cxx index 897379807cafcdbd9b66e14b289e769785388ace..09173c881daa4e634fb9e7738669e3fadac9a0f4 100755 --- a/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MuonStationIntersectSvc.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonRecUtils/MuonStationIntersectSvc/src/MuonStationIntersectSvc.cxx @@ -48,7 +48,7 @@ const std::vector<std::unique_ptr<Muon::MdtIntersectGeometry> > MuonStationInter continue; } } - stations.push_back(std::unique_ptr<Muon::MdtIntersectGeometry>(new Muon::MdtIntersectGeometry( chId, detMgr,dbData,&this->msgStream()))); + stations.push_back(std::unique_ptr<Muon::MdtIntersectGeometry>(new Muon::MdtIntersectGeometry( chId, detMgr,dbData,&this->msgStream(),m_idHelperSvc.get()))); } return stations; } diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/DCMathSegmentMaker/src/DCMathSegmentMaker.cxx b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/DCMathSegmentMaker/src/DCMathSegmentMaker.cxx index 78911fe942c9d691ce28a9d1962b6e2725a03fe6..d1af1e1313340fa2b5d76430f6bc4154431c9558 100644 --- a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/DCMathSegmentMaker/src/DCMathSegmentMaker.cxx +++ b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/DCMathSegmentMaker/src/DCMathSegmentMaker.cxx @@ -33,7 +33,6 @@ #include "MuonRIO_OnTrack/RpcClusterOnTrack.h" #include "MuonRIO_OnTrack/TgcClusterOnTrack.h" #include "MuonCompetingRIOsOnTrack/CompetingMuonClustersOnTrack.h" -#include "MuonStationIntersectSvc/MdtIntersectGeometry.h" #include "MuonReadoutGeometry/MdtReadoutElement.h" #include "MuonReadoutGeometry/RpcReadoutElement.h" #include "MuonReadoutGeometry/MuonDetectorManager.h" @@ -472,15 +471,6 @@ namespace Muon { std::set<Identifier>::iterator it = chamberSet.begin(); std::set<Identifier>::iterator it_end = chamberSet.end(); for( ;it!=it_end;++it ){ - - // this does not work yet.... - // get geometry of chamber - //const Muon::MuonIntersectGeometry* intersectGeometry = m_intersectSvc->getChamberGeometry( *it ); - - //const MdtIntersectGeometry* mdtGeo = dynamic_cast<const MdtIntersectGeometry*>(intersectGeometry); - //if( !mdtGeo ) continue; - //geos.push_back( *mdtGeo->mdtChamberGeometry() ); - geos.push_back( createChamberGeometry( *it, gToStation ) ); } @@ -1574,19 +1564,18 @@ namespace Muon { int phi = m_idHelperSvc->mdtIdHelper().stationPhi(chid); int name = m_idHelperSvc->mdtIdHelper().stationName(chid); int isBarrel = m_idHelperSvc->mdtIdHelper().isBarrel(chid); - int isSmallMdt = m_idHelperSvc->mdtIdHelper().isSmallMdt(chid); + int isSmallMdt = m_idHelperSvc->issMdt(chid); TrkDriftCircleMath::MdtStationId stationId( isSmallMdt, isBarrel, name, eta, phi ); SG::ReadCondHandle<MuonGM::MuonDetectorManager> DetectorManagerHandle{m_DetectorManagerKey}; const MuonGM::MuonDetectorManager* MuonDetMgr{*DetectorManagerHandle}; if(MuonDetMgr==nullptr){ ATH_MSG_ERROR("Null pointer to the read MuonDetectorManager conditions object"); - // return 0; } // get detEL for first ml (always there) const MuonGM::MdtReadoutElement* detEl1 = MuonDetMgr->getMdtReadoutElement( m_idHelperSvc->mdtIdHelper().channelID( name,eta,phi,1,1,1 ) ); - const MuonGM::MdtReadoutElement* detEl2 = 0; + const MuonGM::MdtReadoutElement* detEl2 = nullptr; int ntube2 = 0; // number of multilayers in chamber int nml = detEl1->nMDTinStation(); diff --git a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h index 50984d9b38695577afbc5157cc3f9549722839ac..4ada05aae45601ddb5716a1a5e002a493ad2d659 100755 --- a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h +++ b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonDetailedTrackTruthMaker.h @@ -1,24 +1,22 @@ /* - 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 MUONDETAILEDTRACKTRUTHMAKER_H #define MUONDETAILEDTRACKTRUTHMAKER_H -#include <string> -#include <vector> - #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" + #include "StoreGate/WriteHandleKeyArray.h" #include "StoreGate/ReadHandleKeyArray.h" - #include "TrkToolInterfaces/IDetailedTrackTruthBuilder.h" - #include "TrkTrack/TrackCollection.h" #include "TrkTruthData/PRD_MultiTruthCollection.h" #include "TrkTruthData/DetailedTrackTruthCollection.h" +#include <string> + /** * This algorithm produces track truth data using Muon PRD truth collections. * Calls a DetailedTrackTruthBuilder tool that does the actual job. @@ -33,7 +31,6 @@ public: virtual StatusCode initialize(); virtual StatusCode execute(); - virtual StatusCode finalize(); private: // PRD truth maps in any order @@ -45,12 +42,11 @@ private: // DetailedTrackTruthCollection output SG::WriteHandleKeyArray<DetailedTrackTruthCollection> m_detailedTrackTruthNames{this,"DetailedTrackTruthNames",{""},"output collections"}; - // Tool Handle for truth tool - ToolHandle<Trk::IDetailedTrackTruthBuilder> m_truthTool; + ToolHandle<Trk::IDetailedTrackTruthBuilder> m_truthTool{this,"TruthTool","Trk::DetailedTrackTruthBuilder"}; - bool m_hasCSC; - bool m_hasSTgc; - bool m_hasMM; + Gaudi::Property<bool> m_hasCSC {this, "HasCSC", true}; + Gaudi::Property<bool> m_hasSTgc {this, "HasSTgc", true}; + Gaudi::Property<bool> m_hasMM {this, "HasMM", true}; }; diff --git a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonPatternCombinationDetailedTrackTruthMaker.h b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonPatternCombinationDetailedTrackTruthMaker.h index c8677ec48de438db18775c872077325ce6a01909..2df3a9bd21fa96cdbaeaa87e5a7d35f2be06667e 100755 --- a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonPatternCombinationDetailedTrackTruthMaker.h +++ b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonPatternCombinationDetailedTrackTruthMaker.h @@ -1,18 +1,18 @@ /* - 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 MUONPATTERNCOMBINATIONDETAILEDTRACKTRUTHMAKER_H #define MUONPATTERNCOMBINATIONDETAILEDTRACKTRUTHMAKER_H -#include <string> -#include <vector> - #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" #include "MuonRecToolInterfaces/IDetailedMuonPatternTruthBuilder.h" +#include <string> +#include <vector> + /** * This algorithm produces track truth data using Muon PRD truth collections. * Calls a DetailedTrackTruthBuilder tool that does the actual job. @@ -27,24 +27,17 @@ public: virtual StatusCode initialize(); virtual StatusCode execute(); - virtual StatusCode finalize(); private: - // PRD truth maps in any order - std::vector<std::string> m_PRD_TruthNames; - - // Track input - std::string m_trackCollectionName; + Gaudi::Property<std::vector<std::string>> m_PRD_TruthNames{this,"PRD_TruthNames",{"CSC_TruthMap","RPC_TruthMap","TGC_TruthMap","MDT_TruthMap"},"PRD truth maps in any order"}; - // Muon pattern combination collection input - std::string m_collection; + Gaudi::Property<std::string> m_trackCollectionName{this,"TrackCollectionName","MooreTracks","Track input"}; - // DetailedTrackTruthCollection output - std::string m_detailedTrackTruthName; + Gaudi::Property<std::string> m_collection{this,"MuonPatternCombinationCollection","MuonHoughPatternCombinations","Muon pattern combination collection input"}; - // Tool Handle for truth tool - ToolHandle<Trk::IDetailedMuonPatternTruthBuilder> m_truthTool; + Gaudi::Property<std::string> m_detailedTrackTruthName{this,"DetailedTrackTruthNames","","DetailedTrackTruthCollection output"}; + ToolHandle<Trk::IDetailedMuonPatternTruthBuilder> m_truthTool{this,"TruthTool","Trk::DetailedMuonPatternTruthBuilder/DetailedMuonPatternTruthBuilder"}; }; #endif/*MUONPATTERNCOMBINATIONDETAILEDTRACKTRUTHMAKER_H*/ diff --git a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonTrackTruthTool.h b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonTrackTruthTool.h index 3876339487e1cf164c3604053c9b5712724df275..c800bb4d8b067c40ce4e808198781b89a12e567a 100644 --- a/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonTrackTruthTool.h +++ b/MuonSpectrometer/MuonTruthAlgs/MuonTruthAlgs/MuonTrackTruthTool.h @@ -16,11 +16,13 @@ #include "MuonSimData/CscSimDataCollection.h" #include "TrackRecord/TrackRecordCollection.h" #include "TrkTrack/TrackCollection.h" +#include "TrkToolInterfaces/ITruthTrajectoryBuilder.h" #include <string> #include <vector> #include <map> #include <utility> +#include <set> class TruthTrajectory; @@ -35,7 +37,6 @@ namespace Muon { namespace Trk { class Track; class MeasurementBase; - class ITruthTrajectoryBuilder; } namespace Muon { @@ -138,21 +139,23 @@ namespace Muon { /// The number of such scatters is returned in the .second. const std::pair<const HepMC::GenParticle*, unsigned int> getInitialPair( const TruthTrajectory& traj, const int barcodeIn ) const; - const MuonGM::MuonDetectorManager* m_detMgr; + const MuonGM::MuonDetectorManager* m_detMgr; - ToolHandle<Muon::MuonEDMPrinterTool> m_printer; ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ToolHandle<Trk::ITruthTrajectoryBuilder> m_truthTrajectoryBuilder; + + ToolHandle<Muon::MuonEDMPrinterTool> m_printer{this,"Printer","Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}; + ToolHandle<Trk::ITruthTrajectoryBuilder> m_truthTrajectoryBuilder{this,"TruthTrajectoryBuilder","Muon::MuonDecayTruthTrajectoryBuilder/MuonDecayTruthTrajectoryBuilder"}; mutable TruthTree m_truthTree; mutable std::vector<TruthTrajectory*> m_truthTrajectoriesToBeDeleted; mutable std::map<int,int> m_barcodeMap; // map used to link barcode of TrackRecord particles/hits to 'final' state barcode - bool m_manipulateBarCode; - bool m_doSummary; - unsigned int m_minHits; - bool m_matchAllParticles; + + Gaudi::Property<bool> m_manipulateBarCode{this,"ManipulateBarCode",false}; + Gaudi::Property<bool> m_doSummary{this,"DoSummary",false}; + Gaudi::Property<bool> m_matchAllParticles{this,"MatchAllParticles",true}; + Gaudi::Property<unsigned int> m_minHits{this,"MinHits",4}; + Gaudi::Property<std::vector<int>> m_pdgsToBeConsidered{this,"ConsideredPDGs",{}}; - IntegerArrayProperty m_pdgsToBeConsidered; std::set<int> m_selectedPdgs; // set storing particle PDG's considered for matching }; diff --git a/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.cxx b/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.cxx index 69e3e795536b96481113e84c2162d2c1f6243c0b..5fea6adda781d26e674832d40cbd1a2d1b5abc55 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.cxx @@ -3,54 +3,42 @@ */ #include "DetailedMuonPatternTruthBuilder.h" + #include "MuonPattern/MuonPattern.h" #include "MuonPattern/MuonPatternCollection.h" #include "MuonPattern/MuonPatternCombination.h" #include "MuonPattern/MuonPatternCombinationCollection.h" #include "MuonPattern/MuonPatternChamberIntersect.h" #include "MuonPattern/DetailedMuonPatternTruthCollection.h" - #include "TrkTruthData/DetailedTrackTruth.h" #include "TrkTruthData/DetailedSegmentTruth.h" #include "TrkTruthData/TruthTrajectory.h" - #include "AtlasHepMC/GenParticle.h" #include "AtlasHepMC/GenVertex.h" - #include "GeneratorObjects/HepMcParticleLink.h" #include "AthContainers/DataVector.h" - #include "TrkTrack/Track.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" #include "TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h" #include "TrkMeasurementBase/MeasurementBase.h" #include "TrkPrepRawData/PrepRawData.h" - -// GROSS MASS INCLUDING ALL PACKAGES #include "MuonSimData/MuonSimData.h" #include "MuonSimData/MuonSimDataCollection.h" #include "MuonSimData/CscSimDataCollection.h" #include "MuonPrepRawData/MdtPrepData.h" #include "MuonPrepRawData/MMPrepData.h" #include "MuonPrepRawData/sTgcPrepData.h" - -// package include -// Trk includes #include "TrkParameters/TrackParameters.h" #include "TrkTrack/Track.h" #include "TrkFitterInterfaces/ITrackFitter.h" #include "TrkExInterfaces/IExtrapolator.h" #include "TrkSurfaces/PerigeeSurface.h" - #include "TrkDetElementBase/TrkDetElementBase.h" - #include "TrkPrepRawData/PrepRawData.h" #include "TrkMeasurementBase/MeasurementBase.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" #include "TrkPseudoMeasurementOnTrack/PseudoMeasurementOnTrack.h" - #include "TrackRecord/TrackRecordCollection.h" - #include "MuonRIO_OnTrack/MdtDriftCircleOnTrack.h" #include "MuonRIO_OnTrack/MuonClusterOnTrack.h" #include "MuonRIO_OnTrack/MMClusterOnTrack.h" @@ -59,7 +47,6 @@ #include "MuonPrepRawData/sTgcPrepData.h" #include "MuonPrepRawData/MuonCluster.h" #include "MuonSegment/MuonSegment.h" -// HepMC #include "AtlasHepMC/GenParticle.h" #include "MuonRecHelperTools/MuonEDMPrinterTool.h" #include "MuonRecHelperTools/IMuonEDMHelperSvc.h" @@ -67,11 +54,8 @@ #include "MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h" #include "MuonRecToolInterfaces/IMuonCompetingClustersOnTrackCreator.h" #include "MuonRecToolInterfaces/IMuonTrackToSegmentTool.h" - #include "MuonTrackMakerUtils/SortMeasurementsByPosition.h" -// END GROSS MASS INCLUDING - #include <map> #include <queue> #include <list> @@ -99,7 +83,6 @@ struct DetectorLayer { }; namespace { - //template<class Map> void printMap(const Map& m); template<class Map> void printMap(const Map& m) { std::cout<<"printMap(): ["; @@ -144,24 +127,17 @@ namespace { namespace Trk { //================================================================ -DetailedMuonPatternTruthBuilder::DetailedMuonPatternTruthBuilder(const std::string& type, const std::string& name, const IInterface* parent) - : AthAlgTool(type,name,parent) - , m_truthTrackBuilder("Trk::ElasticTruthTrajectoryBuilder") - , m_mdtCreator("Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator") - , m_muonClusterCreator("Muon::MuonClusterOnTrackCreator/MuonClusterOnTrackCreator") -{ +DetailedMuonPatternTruthBuilder::DetailedMuonPatternTruthBuilder(const std::string& type, const std::string& name, const IInterface* parent) : + AthAlgTool(type,name,parent) { declareInterface<IDetailedMuonPatternTruthBuilder>(this); - declareProperty("TruthTrajectoryTool", m_truthTrackBuilder); } //================================================================ StatusCode DetailedMuonPatternTruthBuilder::initialize() { - ATH_CHECK(m_truthTrackBuilder.retrieve()); ATH_CHECK(m_idHelperSvc.retrieve()); ATH_CHECK(m_mdtCreator.retrieve()); ATH_CHECK(m_muonClusterCreator.retrieve()); - return StatusCode::SUCCESS; } diff --git a/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.h b/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.h index e9fd93c872cfbabd398498d4b4854a1c463a56c6..ed21b33141d71982c59ec873ab6ce087a4fc2bfe 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.h +++ b/MuonSpectrometer/MuonTruthAlgs/src/DetailedMuonPatternTruthBuilder.h @@ -5,54 +5,46 @@ #ifndef DETAILEDMUONPATTERNTRUTHBUILDER_H #define DETAILEDMUONPATTERNTRUTHBUILDER_H -// Gaudi +#include "MuonRecToolInterfaces/IDetailedMuonPatternTruthBuilder.h" #include "AthenaBaseComps/AthAlgTool.h" -#include "GaudiKernel/ToolHandle.h" #include "GaudiKernel/ServiceHandle.h" +#include "GaudiKernel/ToolHandle.h" #include "AthLinks/ElementLink.h" #include "AtlasDetDescr/AtlasDetectorID.h" #include "TrkTruthData/PRD_MultiTruthCollection.h" #include "TrkEventUtils/InverseMultiMap.h" - -#include "MuonRecToolInterfaces/IDetailedMuonPatternTruthBuilder.h" #include "MuonPattern/MuonPatternCollection.h" #include "MuonPattern/MuonPatternCombination.h" #include "MuonPattern/MuonPatternCombinationCollection.h" #include "MuonPattern/DetailedMuonPatternTruthCollection.h" - #include "TrkToolInterfaces/ITruthTrajectoryBuilder.h" #include "TrkTruthData/DetailedTrackTruth.h" #include "TrkTruthData/DetailedSegmentTruth.h" #include "TrkTruthData/SubDetHitStatistics.h" - #include "TrkTruthData/DetailedTrackTruthCollection.h" #include "TrkTruthData/DetailedTrackTruth.h" #include "TrkTruthData/TruthTrajectory.h" - #include "TrkTrack/Track.h" #include "TrkRIO_OnTrack/RIO_OnTrack.h" #include "TrkCompetingRIOsOnTrack/CompetingRIOsOnTrack.h" #include "TrkMeasurementBase/MeasurementBase.h" #include "TrkPrepRawData/PrepRawData.h" - #include "MuonIdHelpers/IMuonIdHelperSvc.h" - -// Include any other potentially useful packages -// Trk includes #include "MuonSimData/MuonSimDataCollection.h" #include "MuonSimData/CscSimDataCollection.h" #include "TrackRecord/TrackRecord.h" #include "TrkSegment/SegmentCollection.h" #include "TrkParameters/TrackParameters.h" -#include <vector> #include "MuonRecToolInterfaces/IMdtDriftCircleOnTrackCreator.h" #include "MuonRecToolInterfaces/IMuonClusterOnTrackCreator.h" +#include <string> +#include <vector> + namespace Trk { - class DetailedMuonPatternTruthBuilder: virtual public IDetailedMuonPatternTruthBuilder, - public AthAlgTool + class DetailedMuonPatternTruthBuilder: virtual public IDetailedMuonPatternTruthBuilder, public AthAlgTool { public: DetailedMuonPatternTruthBuilder(const std::string& type, const std::string& name, const IInterface* parent); @@ -77,10 +69,9 @@ namespace Trk { ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ToolHandle<Trk::ITruthTrajectoryBuilder> m_truthTrackBuilder; - ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtCreator; - ToolHandle<Muon::IMuonClusterOnTrackCreator> m_muonClusterCreator; - ToolHandle<Muon::IMuonClusterOnTrackCreator > p_IMuonClusterOnTrackCreatorCSCCluster ; + ToolHandle<Trk::ITruthTrajectoryBuilder> m_truthTrackBuilder{this,"TruthTrajectoryTool","Trk::ElasticTruthTrajectoryBuilder"}; + ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtCreator{this,"MdtDriftCircleCreator","Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator"}; + ToolHandle<Muon::IMuonClusterOnTrackCreator> m_muonClusterCreator{this,"MuonClusterCreator","Muon::MuonClusterOnTrackCreator/MuonClusterOnTrackCreator"}; SubDetHitStatistics::SubDetType findSubDetType(Identifier id); diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx index cbd7fdf08f1153d739d8110b80c5333e2d17bd14..dc074373cb75df9b5cfad8392e094a185aa540ec 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonDetailedTrackTruthMaker.cxx @@ -6,17 +6,14 @@ // A. Gaponenko, 2006 #include "MuonTruthAlgs/MuonDetailedTrackTruthMaker.h" + #include <iterator> +#include <vector> //================================================================ MuonDetailedTrackTruthMaker::MuonDetailedTrackTruthMaker(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_truthTool("Trk::DetailedTrackTruthBuilder") -{ - declareProperty("TruthTool", m_truthTool); - declareProperty("HasCSC",m_hasCSC=true); - declareProperty("HasSTgc",m_hasSTgc=true); - declareProperty("HasMM",m_hasMM=true); + AthAlgorithm(name,pSvcLocator) +{ } // Initialize method @@ -52,13 +49,6 @@ StatusCode MuonDetailedTrackTruthMaker::initialize() return StatusCode::SUCCESS; } -// ----------------------------------------------------------------------------------------------------- -StatusCode MuonDetailedTrackTruthMaker::finalize() -{ - ATH_MSG_DEBUG( "MuonDetailedTrackTruthMaker::finalize()"); - return StatusCode::SUCCESS; -} - // ----------------------------------------------------------------------------------------------------- StatusCode MuonDetailedTrackTruthMaker::execute() { ATH_MSG_DEBUG( "MuonDetailedTrackTruthMaker::execute()"); diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonPatternCombinationDetailedTrackTruthMaker.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonPatternCombinationDetailedTrackTruthMaker.cxx index ebd64af9a8525bf16acad7d0699f020f8b020e81..1d71c655f1574c8715f1b4c339b3f32de4690919 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonPatternCombinationDetailedTrackTruthMaker.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonPatternCombinationDetailedTrackTruthMaker.cxx @@ -1,65 +1,31 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ // Algorithm producing truth info for PrepRawData, keeping all MC particles contributed to a PRD. // A. Gaponenko, 2006 #include "MuonTruthAlgs/MuonPatternCombinationDetailedTrackTruthMaker.h" + #include "TrkTruthData/PRD_MultiTruthCollection.h" #include "TrkTruthData/DetailedTrackTruthCollection.h" #include "TrkTrack/TrackCollection.h" -#include <iterator> - #include "MuonPattern/DetailedMuonPatternTruthCollection.h" +#include <iterator> //================================================================ MuonPatternCombinationDetailedTrackTruthMaker::MuonPatternCombinationDetailedTrackTruthMaker(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), -// m_truthTool("Trk::DetailedTrackTruthBuilder") - m_truthTool("Trk::DetailedMuonPatternTruthBuilder/DetailedMuonPatternTruthBuilder") + AthAlgorithm(name,pSvcLocator) { - declareProperty("TruthTool", m_truthTool); - - // Inputs - declareProperty("TrackCollectionName", m_trackCollectionName = "MooreTracks"); - declareProperty("MuonPatternCombinationCollection", m_collection = "MuonHoughPatternCombinations"); - - declareProperty("PRD_TruthNames", m_PRD_TruthNames); - m_PRD_TruthNames.push_back("CSC_TruthMap"); - m_PRD_TruthNames.push_back("RPC_TruthMap"); - m_PRD_TruthNames.push_back("TGC_TruthMap"); - m_PRD_TruthNames.push_back("MDT_TruthMap"); - - - // Output - declareProperty("DetailedTrackTruthNames", m_detailedTrackTruthName); - m_detailedTrackTruthName = (m_trackCollectionName + "Truth"); + if (m_detailedTrackTruthName.empty()) m_detailedTrackTruthName = (m_trackCollectionName + "Truth"); } -// Initialize method // ----------------------------------------------------------------------------------------------------- StatusCode MuonPatternCombinationDetailedTrackTruthMaker::initialize() { ATH_MSG_DEBUG( "MuonPatternCombinationDetailedTrackTruthMaker::initialize()"); - - //---------------- - if ( m_truthTool.retrieve().isFailure() ) { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_truthTool); - return StatusCode::FAILURE; - } else { - ATH_MSG_DEBUG("Retrieved tool " << m_truthTool ); - } - - //---------------- - return StatusCode::SUCCESS; -} - -// ----------------------------------------------------------------------------------------------------- -StatusCode MuonPatternCombinationDetailedTrackTruthMaker::finalize() -{ - ATH_MSG_DEBUG( "MuonPatternCombinationDetailedTrackTruthMaker::finalize()"); + ATH_CHECK(m_truthTool.retrieve()); return StatusCode::SUCCESS; } diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx index 1c494ba3e7cca79452fcccb46fdf016edfd519ef..7577aa796c2b49f1e7efb20ca265199f758776c2 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.cxx @@ -15,11 +15,7 @@ namespace Muon { // Constructor with parameters: MuonSegmentTruthAssociationAlg::MuonSegmentTruthAssociationAlg(const std::string &name, ISvcLocator *pSvcLocator) : - AthAlgorithm(name,pSvcLocator), - m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"), - m_muonTrackTruthTool("Muon::MuonTrackTruthTool/MuonTrackTruthTool") - { - declareProperty("BarcodeOffset", m_barcodeOffset = 1000000 ,"barcode offset for matching truth particles"); + AthAlgorithm(name,pSvcLocator) { } // Initialize method: diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.h b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.h index 3d8c36568bd40d34befbd17e0ae1d736c0d9e66c..d3d0a4979d7d836d085160bdce3cc2db59274a54 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.h +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonSegmentTruthAssociationAlg.h @@ -35,15 +35,19 @@ public: private: ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ToolHandle<Muon::MuonEDMPrinterTool> m_printer; - ToolHandle<Muon::IMuonTrackTruthTool> m_muonTrackTruthTool; - Gaudi::Property<SG::WriteDecorHandleKey<xAOD::MuonSegmentContainer> >m_muonTruthSegmentContainerName{this,"MuonTruthSegmentName","MuonTruthSegments","muon truth segment container name"}; - Gaudi::Property<SG::WriteDecorHandleKey<xAOD::MuonSegmentContainer> >m_muonSegmentCollectionName{this,"MuonSegmentLocation","MuonSegments","muon segment container name"}; + + ToolHandle<Muon::MuonEDMPrinterTool> m_printer{this,"Printer","Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}; + ToolHandle<Muon::IMuonTrackTruthTool> m_muonTrackTruthTool{this,"MuonTrackTruthTool","Muon::MuonTrackTruthTool/MuonTrackTruthTool"}; + + SG::WriteDecorHandleKey<xAOD::MuonSegmentContainer> m_muonTruthSegmentContainerName{this,"MuonTruthSegmentName","MuonTruthSegments","muon truth segment container name"}; + SG::WriteDecorHandleKey<xAOD::MuonSegmentContainer> m_muonSegmentCollectionName{this,"MuonSegmentLocation","MuonSegments","muon segment container name"}; + SG::ReadHandleKey<McEventCollection> m_mcEventColl{this,"McEventCollectionKey","TruthEvent","McEventCollection"}; SG::ReadHandleKeyArray<MuonSimDataCollection> m_muonSimData{this,"MuonSimDataNames",{ "MDT_SDO", "RPC_SDO", "TGC_SDO", "sTGC_SDO", "MM_SDO" },"Muon SDO maps"}; SG::ReadHandleKey<CscSimDataCollection> m_cscSimData{this,"CSC_SDO_Container","CSC_SDO","CSC SDO"}; SG::ReadHandleKey<TrackRecordCollection> m_trackRecord{this,"TrackRecord","MuonEntryLayerFilter","Track Record Collection"}; - int m_barcodeOffset; + + Gaudi::Property<int>m_barcodeOffset{this,"BarcodeOffset",1000000 ,"barcode offset for matching truth particles"}; }; } // namespace Muon diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx index fa7fafc64d4fbf46fc3ae60c688ea7015d5804aa..b256dcb13bb2ded4b988355698aad67bdda24cfe 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTrackTruthTool.cxx @@ -4,46 +4,27 @@ #include "MuonTruthAlgs/MuonTrackTruthTool.h" -#include "TrkToolInterfaces/ITruthTrajectoryBuilder.h" #include "AtlasHepMC/GenEvent.h" #include "AtlasHepMC/GenParticle.h" #include "TrkTruthData/TruthTrajectory.h" - #include "MuonReadoutGeometry/MuonDetectorManager.h" - #include "MuonSimData/MuonSimData.h" #include "MuonRIO_OnTrack/MdtDriftCircleOnTrack.h" #include "MuonSegment/MuonSegment.h" - -#include <iostream> -#include <set> - -#include "MuonIdHelpers/MdtIdHelper.h" -#include "MuonIdHelpers/RpcIdHelper.h" -#include "MuonIdHelpers/CscIdHelper.h" -#include "MuonIdHelpers/TgcIdHelper.h" - #include "MuonCompetingRIOsOnTrack/CompetingMuonClustersOnTrack.h" #include "TrkMeasurementBase/MeasurementBase.h" #include "TrkPseudoMeasurementOnTrack/PseudoMeasurementOnTrack.h" #include "TrkTrack/Track.h" #include "TrkEventUtils/RoT_Extractor.h" +#include <iostream> + namespace Muon { - MuonTrackTruthTool::MuonTrackTruthTool(const std::string& ty,const std::string& na,const IInterface* pa) - : AthAlgTool(ty,na,pa), - m_detMgr(0), - m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"), - m_truthTrajectoryBuilder("Muon::MuonDecayTruthTrajectoryBuilder/MuonDecayTruthTrajectoryBuilder") - { + MuonTrackTruthTool::MuonTrackTruthTool(const std::string& ty,const std::string& na,const IInterface* pa) : + AthAlgTool(ty,na,pa), + m_detMgr(nullptr) { declareInterface<IMuonTrackTruthTool>(this); - - declareProperty("DoSummary", m_doSummary = false ); - declareProperty("ManipulateBarCode", m_manipulateBarCode = false ); - declareProperty("MinHits", m_minHits = 4 ); - declareProperty("MatchAllParticles", m_matchAllParticles = true ); - declareProperty("ConsideredPDGs", m_pdgsToBeConsidered ); } StatusCode MuonTrackTruthTool::initialize() @@ -258,8 +239,6 @@ namespace Muon { ATH_MSG_VERBOSE(" Erasing entry: barcode " << it->second.truthTrack->GetBarCode() << " manip " << manipulateBarCode(it->second.truthTrack->GetBarCode()) << " hits " << nhits); badBarcodes.push_back(it->first); - //m_truthTree.erase(it); - //it = m_truthTree.begin(); }else{ ++ngood; ATH_MSG_VERBOSE(" Keeping entry: barcode " << it->second.truthTrack->GetBarCode() diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.cxx index 0819ef104cdac70818b16297ea0e127390e815e6..5fe49d5908c1a2ae995348cbdc240737ef1691f8 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.cxx @@ -3,6 +3,7 @@ */ #include "MuonTruthDecorationAlg.h" + #include "xAODMuon/MuonSegment.h" #include "xAODMuon/MuonSegmentAuxContainer.h" #include "xAODTruth/TruthParticleContainer.h" @@ -24,30 +25,7 @@ namespace Muon { // Constructor with parameters: MuonTruthDecorationAlg::MuonTruthDecorationAlg(const std::string &name, ISvcLocator *pSvcLocator) : AthAlgorithm(name,pSvcLocator), - m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"), - m_truthClassifier("MCTruthClassifier/MCTruthClassifier"), - m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"), - m_muonMgr(0) - { - - // Get parameter values from jobOptions file - declareProperty("TruthParticleContainerName" , m_truthParticleContainerName = "TruthParticles"); - declareProperty("MuonTruthParticleContainerName", m_muonTruthParticleContainerName = "MuonTruthParticles"); - declareProperty("MuonTruthSegmentName" , m_muonTruthSegmentContainerName = "MuonTruthSegments" ); - declareProperty("TrackRecordCollectionNames" , m_trackRecordCollectionNames={"CaloEntryLayer","MuonEntryLayer","MuonExitLayer"}); - - //remove NSW by default for now, can always be changed in the configuration - declareProperty("PRD_TruthMaps",m_PRD_TruthNames={"CSC_TruthMap","RPC_TruthMap","TGC_TruthMap","MDT_TruthMap"}); - - declareProperty("CSCSDOs", m_CSC_SDO_TruthNames="CSC_SDO"); - //remove NSW by default for now, can always be changed in the configuration - declareProperty("SDOs", m_SDO_TruthNames={"RPC_SDO","TGC_SDO","MDT_SDO"}); - - declareProperty("MCTruthClassifier", m_truthClassifier); - declareProperty("MuonEDMPrinterTool", m_printer); - declareProperty("Extrapolator", m_extrapolator); - declareProperty("CreateTruthSegments", m_createTruthSegment = true ); - declareProperty("BarcodeOffset", m_barcodeOffset = 1000000 ); + m_muonMgr(nullptr) { } // Initialize method: diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.h b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.h index 51d2306de9dd48290a3e8edd159f7cf5291bd59e..ef4044910cf648f5cf7336bcbc76b57eb72f8025 100755 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.h +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthDecorationAlg.h @@ -8,15 +8,11 @@ #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" -#include <string> -#include <map> -#include <vector> #include "MuonIdHelpers/IMuonIdHelperSvc.h" #include "MuonRecToolInterfaces/IMuonTrackTruthTool.h" #include "MuonRecHelperTools/MuonEDMPrinterTool.h" #include "TrkExInterfaces/IExtrapolator.h" - #include "TrackRecord/TrackRecordCollection.h" #include "xAODTruth/TruthParticle.h" #include "xAODTruth/TruthParticleContainer.h" @@ -25,11 +21,14 @@ #include "xAODMuon/MuonSegmentContainer.h" #include "GeneratorObjects/xAODTruthParticleLink.h" #include "MCTruthClassifier/IMCTruthClassifier.h" - #include "StoreGate/ReadHandleKey.h" #include "StoreGate/WriteHandleKey.h" #include "StoreGate/WriteHandleKeyArray.h" +#include <string> +#include <map> +#include <vector> + class MuonSimDataCollection; class CscSimDataCollection; @@ -58,20 +57,25 @@ private: void createSegments( const ElementLink< xAOD::TruthParticleContainer >& truthLink,SG::WriteHandle<xAOD::MuonSegmentContainer> segmentContainer, const MuonTruthDecorationAlg::ChamberIdMap& ids) const; - SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthParticleContainerName; - SG::WriteHandleKey<xAOD::TruthParticleContainer> m_muonTruthParticleContainerName; - SG::WriteHandleKey<xAOD::MuonSegmentContainer> m_muonTruthSegmentContainerName; - SG::ReadHandleKeyArray<TrackRecordCollection> m_trackRecordCollectionNames; - SG::ReadHandleKeyArray<PRD_MultiTruthCollection> m_PRD_TruthNames; - SG::ReadHandleKeyArray<MuonSimDataCollection> m_SDO_TruthNames; - SG::ReadHandleKey<CscSimDataCollection> m_CSC_SDO_TruthNames; + SG::ReadHandleKey<xAOD::TruthParticleContainer> m_truthParticleContainerName{this,"TruthParticleContainerName","TruthParticles"}; + SG::WriteHandleKey<xAOD::TruthParticleContainer> m_muonTruthParticleContainerName{this,"MuonTruthParticleContainerName","MuonTruthParticles"}; + SG::WriteHandleKey<xAOD::MuonSegmentContainer> m_muonTruthSegmentContainerName{this,"MuonTruthSegmentName","MuonTruthSegments"}; + + SG::ReadHandleKeyArray<TrackRecordCollection> m_trackRecordCollectionNames{this,"TrackRecordCollectionNames",{"CaloEntryLayer","MuonEntryLayer","MuonExitLayer"}}; + SG::ReadHandleKeyArray<PRD_MultiTruthCollection> m_PRD_TruthNames{this,"PRD_TruthMaps",{"CSC_TruthMap","RPC_TruthMap","TGC_TruthMap","MDT_TruthMap"},"remove NSW by default for now, can always be changed in the configuration"}; + SG::ReadHandleKeyArray<MuonSimDataCollection> m_SDO_TruthNames{this,"SDOs",{"RPC_SDO","TGC_SDO","MDT_SDO"},"remove NSW by default for now, can always be changed in the configuration"}; + SG::ReadHandleKey<CscSimDataCollection> m_CSC_SDO_TruthNames{this,"CSCSDOs","CSC_SDO"}; + ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; - ToolHandle<Muon::MuonEDMPrinterTool> m_printer; - ToolHandle<IMCTruthClassifier> m_truthClassifier; - ToolHandle<Trk::IExtrapolator> m_extrapolator; + + ToolHandle<Muon::MuonEDMPrinterTool> m_printer{this,"MuonEDMPrinterTool","Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"}; + ToolHandle<IMCTruthClassifier> m_truthClassifier{this,"MCTruthClassifier","MCTruthClassifier/MCTruthClassifier"}; + ToolHandle<Trk::IExtrapolator> m_extrapolator{this,"Extrapolator","Trk::Extrapolator/AtlasExtrapolator"}; + + Gaudi::Property<bool> m_createTruthSegment{this,"CreateTruthSegments",true}; + Gaudi::Property<int> m_barcodeOffset{this,"BarcodeOffset",1000000}; + const MuonGM::MuonDetectorManager* m_muonMgr; - bool m_createTruthSegment; - int m_barcodeOffset; }; } // namespace Muon diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.cxx b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.cxx index 3946501952a397b19a9f8ed27d610ead65379461..cdc3303d7ac89a22e9d59b053a68b6c37045e51e 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.cxx +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.cxx @@ -1,8 +1,7 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ -// MuonTruthAlgs includes #include "MuonTruthSummaryAlg.h" #include "TrkTrack/TrackCollection.h" @@ -10,20 +9,10 @@ #include "MuonSegment/MuonSegment.h" #include "xAODTracking/TrackParticleContainer.h" -MuonTruthSummaryAlg::MuonTruthSummaryAlg( const std::string& name, ISvcLocator* pSvcLocator ) - : - AthAlgorithm( name, pSvcLocator ), - m_truthSummaryTool("MuonTruthSummaryTool"){ - declareProperty("SegmentContainerName" , m_segmentContainerName = "MuonSegments"); - declareProperty("MSTracksContainerName" , m_msTracksContainerName = "MuonSpectrometerTracks"); - declareProperty("MSTrackletsContainerName" , m_msTrackletContainerName = "MSonlyTracklets"); - declareProperty("MuonTruthSummaryTool" , m_truthSummaryTool ); +MuonTruthSummaryAlg::MuonTruthSummaryAlg(const std::string& name, ISvcLocator* pSvcLocator) : + AthAlgorithm( name, pSvcLocator ) { } - -MuonTruthSummaryAlg::~MuonTruthSummaryAlg() {} - - StatusCode MuonTruthSummaryAlg::initialize() { ATH_MSG_INFO ("Initializing " << name() << "..."); if( m_truthSummaryTool.retrieve().isFailure()){ @@ -33,12 +22,6 @@ StatusCode MuonTruthSummaryAlg::initialize() { return StatusCode::SUCCESS; } -StatusCode MuonTruthSummaryAlg::finalize() { - ATH_MSG_INFO ("Finalizing " << name() << "..."); - - return StatusCode::SUCCESS; -} - StatusCode MuonTruthSummaryAlg::execute() { ATH_MSG_DEBUG ("Executing " << name() << "..."); @@ -59,14 +42,6 @@ StatusCode MuonTruthSummaryAlg::execute() { } } -// const xAOD::TrackParticleContainer* trackPs = 0; -// if (evtStore()->retrieve(trackPs, m_msTrackletContainerName).isSuccess()){ -// for (auto trkP : *trackPs) { -// m_truthSummaryTool->add(*trkP,4); -// } -// } - - //ATH_MSG_VERBOSE(m_truthSummaryTool->printSummary()); return StatusCode::SUCCESS; } diff --git a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.h b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.h index e85c560f587cb961c2f8e1d3d6afc2850ff9b1c9..d5c8dc975443ea537e2562926fe5eee78e8b6671 100644 --- a/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.h +++ b/MuonSpectrometer/MuonTruthAlgs/src/MuonTruthSummaryAlg.h @@ -1,30 +1,31 @@ /* - 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 MUONTRUTHALGS_MUONTRUTHSUMMARYALGS_H #define MUONTRUTHALGS_MUONTRUTHSUMMARYALGS_H #include "AthenaBaseComps/AthAlgorithm.h" -#include <string> #include "GaudiKernel/ToolHandle.h" + #include "MuonRecToolInterfaces/IMuonTruthSummaryTool.h" +#include <string> -class MuonTruthSummaryAlg: public ::AthAlgorithm { +class MuonTruthSummaryAlg: public AthAlgorithm { public: MuonTruthSummaryAlg( const std::string& name, ISvcLocator* pSvcLocator ); - virtual ~MuonTruthSummaryAlg(); + virtual ~MuonTruthSummaryAlg()=default; - virtual StatusCode initialize(); - virtual StatusCode execute(); - virtual StatusCode finalize(); + virtual StatusCode initialize(); + virtual StatusCode execute(); private: - std::string m_segmentContainerName; - std::string m_msTracksContainerName; - std::string m_msTrackletContainerName; - ToolHandle<Muon::IMuonTruthSummaryTool> m_truthSummaryTool; + ToolHandle<Muon::IMuonTruthSummaryTool> m_truthSummaryTool{this,"MuonTruthSummaryTool","MuonTruthSummaryTool"}; + + Gaudi::Property<std::string> m_segmentContainerName{this,"SegmentContainerName","MuonSegments"}; + Gaudi::Property<std::string> m_msTracksContainerName{this,"MSTracksContainerName","MuonSpectrometerTracks"}; + Gaudi::Property<std::string> m_msTrackletContainerName{this,"MSTrackletsContainerName","MSonlyTracklets"}; }; #endif //> !MUONTRUTHALGS_MUONTRUTHSUMMARYALGS_H diff --git a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/copyRootTree.cxx b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/copyRootTree.cxx index 15e7f32ad911d61cb0728ee54e21dba94fcb3a8c..bf38fe8c279e45ca3b4e737ca84f7ff7d4083d7e 100644 --- a/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/copyRootTree.cxx +++ b/PhysicsAnalysis/AnalysisCommon/HDF5Utils/util/copyRootTree.cxx @@ -22,6 +22,7 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration #include <memory> #include <regex> #include <iostream> +#include <set> // ______________________________________________________________________ // Variable buffer classes diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthParticles.h b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthParticles.h index 2a6bb9b4e9a49e26d9def94f63911a90507951c3..fb6b6cde2e7069c02c9d1d7c0bbbfff6cf87e618 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthParticles.h +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/CopyTruthParticles.h @@ -10,8 +10,8 @@ #include "xAODTruth/TruthParticleContainer.h" #include "xAODTruth/TruthEventContainer.h" #include "AthContainers/ConstDataVector.h" -#include "StoreGate/ReadHandleKey.h" -#include "StoreGate/WriteHandleKey.h" +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/WriteHandleKey.h" // Do I need IAsgTool? I need AsgTool for the eventStore() class CopyTruthParticles : public IJetExecuteTool, public asg::AsgTool { diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/JetQuarkLabel.h b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/JetQuarkLabel.h index a20f3aafae700b3f1892c781e83e91b050fc437a..4bddc094e79a7c0d9641e90d22f59489cf8d8190 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/JetQuarkLabel.h +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/JetQuarkLabel.h @@ -18,6 +18,7 @@ #ifndef PARTICLEJETTOOLS_JETQUARKLABEL_H #define PARTICLEJETTOOLS_JETQUARKLABEL_H +#include "AsgDataHandles/ReadHandleKey.h" #include "AsgTools/AsgTool.h" #include "ParticleJetTools/IJetTruthMatching.h" #include "EventPrimitives/EventPrimitives.h" diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/ParticleJetDeltaRLabelTool.h b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/ParticleJetDeltaRLabelTool.h index 3238fdf12461ab056044bc9f43835e9968619b78..e4665acc9d5180cea6c0a3ce957b6ee5629ca2a3 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/ParticleJetDeltaRLabelTool.h +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/ParticleJetTools/ParticleJetDeltaRLabelTool.h @@ -5,6 +5,7 @@ #ifndef PARTICLEJETDELTARLABELTOOL_H #define PARTICLEJETDELTARLABELTOOL_H +#include "AsgDataHandles/ReadHandleKey.h" #include "AsgTools/AsgTool.h" #include "JetInterface/IJetModifier.h" #include "xAODTruth/TruthParticle.h" diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx index 4f895354ab28f69b32417111bfd41245f1a9f24d..3cf158009215a96dbe24eaf7233fcc94c214c888 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthJetParticles.cxx @@ -10,6 +10,8 @@ #include "xAODTruth/TruthParticleAuxContainer.h" #include "xAODTruth/TruthEventContainer.h" #include "AthContainers/ConstDataVector.h" +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/WriteHandle.h" #include "AsgTools/Check.h" #ifndef XAOD_STANDALONE @@ -183,10 +185,10 @@ int CopyTruthJetParticles::setBarCodeFromMetaDataCheck() const{ // if m_barcodeFromMetadata is set to 1, the check is performed and a warning is set out // explicitly set out when nothing is foun if(m_barcodeFromMetadata>0){ + // Usage of metadata is only possible in Athena (not supported by dual-use tools yet)... +#ifndef XAOD_STANDALONE bool found = false; // retrieve the value for the current sample from metadata -#ifndef XAOD_STANDALONE - // Usage of metadata is only possible in Athena (not supported by dual-use tools yet)... int barcodeOffset_tmp(0); ATH_MSG_INFO("Look for barcode offset in metadata ... "); diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthParticles.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthParticles.cxx index 4bc0236b822d864f052a007856d0bb4c0cffe2de..dc75e27f179b9c4b53c499ba4059d151c3cff04f 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthParticles.cxx +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/CopyTruthParticles.cxx @@ -6,6 +6,8 @@ #include <memory> #include "TruthUtils/PIDHelpers.h" #include "AsgTools/Check.h" +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/WriteHandle.h" using namespace std; diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetQuarkLabel.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetQuarkLabel.cxx index ef34e98c328ac9ba20c634850a6a23347441ef7d..d0a794bac26c3bb1676e5934e114c91d6a6b5fe0 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetQuarkLabel.cxx +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/JetQuarkLabel.cxx @@ -15,6 +15,7 @@ #include "ParticleJetTools/JetQuarkLabel.h" #include "ParticleJetTools/HadronUtils.h" +#include "AsgDataHandles/ReadHandle.h" #include <algorithm> diff --git a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/ParticleJetDeltaRLabelTool.cxx b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/ParticleJetDeltaRLabelTool.cxx index 4c5f4598a1ff03d4745849755920f31ce173692a..27040971a9f2fa4993b6d715ba22f0a3b4e99a55 100644 --- a/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/ParticleJetDeltaRLabelTool.cxx +++ b/PhysicsAnalysis/AnalysisCommon/ParticleJetTools/Root/ParticleJetDeltaRLabelTool.cxx @@ -5,6 +5,7 @@ #include "ParticleJetTools/ParticleJetDeltaRLabelTool.h" #include "ParticleJetTools/ParticleJetLabelCommon.h" #include "xAODJet/JetContainer.h" +#include "AsgDataHandles/ReadHandle.h" #include "AsgTools/Check.h" using namespace std; diff --git a/PhysicsAnalysis/D3PDMaker/D3PDMakerInterfaces/CMakeLists.txt b/PhysicsAnalysis/D3PDMaker/D3PDMakerInterfaces/CMakeLists.txt index 9be035e427627b0524f5ac5ec087b9db84de5881..f566ec549f1a71807f4f341858c1ceeb656f608e 100644 --- a/PhysicsAnalysis/D3PDMaker/D3PDMakerInterfaces/CMakeLists.txt +++ b/PhysicsAnalysis/D3PDMaker/D3PDMakerInterfaces/CMakeLists.txt @@ -5,10 +5,8 @@ # Declare the package name: atlas_subdir( D3PDMakerInterfaces ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - GaudiKernel ) - -# Install files from the package: -atlas_install_headers( D3PDMakerInterfaces ) - +atlas_add_library( D3PDMakerInterfaces + D3PDMakerInterfaces/*.h + INTERFACE + PUBLIC_HEADERS D3PDMakerInterfaces + LINK_LIBRARIES GaudiKernel ) diff --git a/PhysicsAnalysis/JetTagging/JetTagInfo/JetTagInfo/TrackGrade.h b/PhysicsAnalysis/JetTagging/JetTagInfo/JetTagInfo/TrackGrade.h index 183a6d2d92279fccae687c2f1f7546bed5ef52da..d429057e6e359fd854d08c4b2766a6138cfd0c14 100644 --- a/PhysicsAnalysis/JetTagging/JetTagInfo/JetTagInfo/TrackGrade.h +++ b/PhysicsAnalysis/JetTagging/JetTagInfo/JetTagInfo/TrackGrade.h @@ -16,8 +16,9 @@ class TrackGrade { TrackGrade(int,const std::string&); TrackGrade(const TrackGrade & ); + TrackGrade( TrackGrade && ) noexcept = default; TrackGrade &operator= (const TrackGrade& rhs); - + TrackGrade &operator= ( TrackGrade&& rhs) noexcept = default; bool operator== (const std::string &) const; bool operator== (const int &) const; bool operator== (const TrackGrade& rhs) const; diff --git a/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt b/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt index 88ab830b2d867f08d09ee461ba7d1099f344b437..0b18f944b5edaad0bfd82afeb24f0d0a6c841953 100644 --- a/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt +++ b/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt @@ -5,50 +5,6 @@ # Declare the package name: atlas_subdir( PrimaryDPDMaker ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Calorimeter/CaloEvent - Control/AthenaBaseComps - Control/AthenaKernel - Control/AthLinks - Control/AthContainers - Control/StoreGate - PhysicsAnalysis/DerivationFramework/DerivationFrameworkInterfaces - DetectorDescription/IRegionSelector - DetectorDescription/Identifier - Event/EventKernel - GaudiKernel - InnerDetector/InDetDetDescr/InDetIdentifier - InnerDetector/InDetDetDescr/InDetReadoutGeometry - InnerDetector/InDetDetDescr/TRT_ReadoutGeometry - InnerDetector/InDetRecEvent/InDetPrepRawData - Reconstruction/Particle - Tracking/TrkEvent/TrkTrack - Tracking/TrkTools/TrkToolInterfaces - PRIVATE - DetectorDescription/RoiDescriptor - Event/FourMom - Event/FourMomUtils - Event/NavFourMom - Event/xAOD/xAODEventInfo - Event/xAOD/xAODMuon - Event/xAOD/xAODTracking - InnerDetector/InDetRecEvent/InDetRIO_OnTrack - LArCalorimeter/LArRecEvent - PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerEvent - PhysicsAnalysis/MuonID/MuonSelectorTools - Reconstruction/Jet/JetEvent - Reconstruction/MuonIdentification/muonEvent - Reconstruction/egamma/egammaEvent - Reconstruction/tauEvent - TileCalorimeter/TileEvent - TileCalorimeter/TileIdentifier - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkPseudoMeasurementOnTrack - Tracking/TrkEvent/TrkTrackSummary - Tracking/TrkEvent/VxVertex ) - # External dependencies: find_package( CLHEP ) find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) @@ -60,7 +16,7 @@ atlas_add_library( PrimaryDPDMakerLib INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces StoreGateLib SGtests + LINK_LIBRARIES ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces StoreGateLib SGtests DerivationFrameworkInterfaces PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent MuonSelectorToolsLib JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex ) atlas_add_component( PrimaryDPDMaker diff --git a/Projects/AnalysisBase/package_filters.txt b/Projects/AnalysisBase/package_filters.txt index 38b5904e54252b60343e01862b79e3c5d599b9cc..435110a5c9822d396085e575ba6f8ec6c3009909 100644 --- a/Projects/AnalysisBase/package_filters.txt +++ b/Projects/AnalysisBase/package_filters.txt @@ -14,8 +14,21 @@ - PhysicsAnalysis/ElectronPhotonID/ElectronPhotonFourMomentumCorrection - PhysicsAnalysis/ElectronPhotonID/PhotonVertexSelection - Reconstruction/Jet/JetMomentTools -- Reconstruction/Jet/JetRec -- Reconstruction/Jet/JetSubStructureMomentTools + + + +# these packages existed in 21.2, but no longer exist in master. +# remove these lines if you are confident that these packages have +# been retired. + +#+ External/AtlasPyFwdBwdPorts +#+ ForwardDetectors/ZDC/ZdcNtuple +#+ PhysicsAnalysis/AnalysisCommon/FakeBkgTools +#+ PhysicsAnalysis/BPhys/BPhysTools +#+ PhysicsAnalysis/DerivationFramework/DerivationFrameworkAnalysisTests +#+ Reconstruction/Jet/BoostedJetTaggers +#+ Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection +#+ Trigger/TriggerSimulation/TrigBtagEmulationTool @@ -48,9 +61,7 @@ #+ Event/xAOD/xAODTruthCnv - Event/xAOD/.*Cnv + Event/xAOD/.* -#+ External/AtlasPyFwdBwdPorts + ForwardDetectors/ZDC/ZdcAnalysis -#+ ForwardDetectors/ZDC/ZdcNtuple + Generators/TruthUtils + InnerDetector/InDetRecTools/InDetTrackSelectionTool + InnerDetector/InDetRecTools/TrackVertexAssociationTool @@ -59,7 +70,6 @@ + PhysicsAnalysis/AnalysisCommon/AssociationUtils #+ PhysicsAnalysis/AnalysisCommon/CPAnalysisExamples + PhysicsAnalysis/AnalysisCommon/CutBookkeeperUtils -#+ PhysicsAnalysis/AnalysisCommon/FakeBkgTools + PhysicsAnalysis/AnalysisCommon/FsrUtils + PhysicsAnalysis/AnalysisCommon/HDF5Utils + PhysicsAnalysis/AnalysisCommon/IsolationSelection @@ -68,12 +78,10 @@ + PhysicsAnalysis/AnalysisCommon/PMGOverlapRemovalTools/GammaORTools + PhysicsAnalysis/AnalysisCommon/PMGOverlapRemovalTools/HFORTools + PhysicsAnalysis/AnalysisCommon/PMGTools -#+ PhysicsAnalysis/AnalysisCommon/ParticleJetTools ++ PhysicsAnalysis/AnalysisCommon/ParticleJetTools + PhysicsAnalysis/AnalysisCommon/PileupReweighting + PhysicsAnalysis/AnalysisCommon/ReweightUtils -#+ PhysicsAnalysis/BPhys/BPhysTools + PhysicsAnalysis/D3PDTools/.* -#+ PhysicsAnalysis/DerivationFramework/DerivationFrameworkAnalysisTests - PhysicsAnalysis/ElectronPhotonID/ElectronPhotonTagTools + PhysicsAnalysis/ElectronPhotonID/.* + PhysicsAnalysis/HeavyIonPhys/HIEventUtils @@ -90,7 +98,6 @@ + PhysicsAnalysis/TauID/TauAnalysisTools + PhysicsAnalysis/TrackingID/.* + Reconstruction/EventShapes/EventShapeInterface -#+ Reconstruction/Jet/BoostedJetTaggers - Reconstruction/Jet/JetAnalysisTools/JetAnalysisEDM - Reconstruction/Jet/JetEvent.* - Reconstruction/Jet/JetMonitoring @@ -100,10 +107,10 @@ - Reconstruction/Jet/JetValidation + Reconstruction/Jet/Jet.* + Reconstruction/MET/METInterface -#+ Reconstruction/MET/METUtilities ++ Reconstruction/MET/METUtilities + Reconstruction/MVAUtils + Reconstruction/PFlow/PFlowUtils -#+ Reconstruction/RecoTools/IsolationTool ++ Reconstruction/RecoTools/IsolationTool + Reconstruction/RecoTools/RecoToolInterfaces + Reconstruction/egamma/egammaLayerRecalibTool + Reconstruction/egamma/egammaMVACalib @@ -116,7 +123,6 @@ + Trigger/TrigAnalysis/TrigAnalysisInterfaces + Trigger/TrigAnalysis/TrigBunchCrossingTool #+ Trigger/TrigAnalysis/TrigDecisionTool -#+ Trigger/TrigAnalysis/TrigGlobalEfficiencyCorrection #+ Trigger/TrigAnalysis/TrigTauAnalysis/TrigTauMatching #+ Trigger/TrigAnalysis/TriggerMatchingTool + Trigger/TrigConfiguration/TrigConfBase @@ -131,6 +137,5 @@ + Trigger/TrigEvent/TrigSteeringEvent + Trigger/TrigSteer/TrigCompositeUtils #+ Trigger/TrigValidation/TrigAnalysisTest -#+ Trigger/TriggerSimulation/TrigBtagEmulationTool - .* diff --git a/Reconstruction/Jet/JetEDM/CMakeLists.txt b/Reconstruction/Jet/JetEDM/CMakeLists.txt index 13439771241f350a5b55f8a825e871432e66f9c4..d1741397d97e2bcdbc460d5438ac4a55a042d0be 100644 --- a/Reconstruction/Jet/JetEDM/CMakeLists.txt +++ b/Reconstruction/Jet/JetEDM/CMakeLists.txt @@ -21,7 +21,7 @@ find_package( FastJet ) atlas_add_library( JetEDM Root/*.cxx PUBLIC_HEADERS JetEDM - PRIVATE_INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} + INCLUDE_DIRS ${FASTJET_INCLUDE_DIRS} LINK_LIBRARIES AsgTools xAODBase xAODJet xAODTracking PRIVATE_LINK_LIBRARIES ${FASTJET_LIBRARIES} xAODMuon ) diff --git a/Reconstruction/Jet/JetInterface/CMakeLists.txt b/Reconstruction/Jet/JetInterface/CMakeLists.txt index 17d8b97fc2142cb664dd715fb361f09681e4ef28..75b10d8229ab1b3d7a3460153424e617c85ccc20 100644 --- a/Reconstruction/Jet/JetInterface/CMakeLists.txt +++ b/Reconstruction/Jet/JetInterface/CMakeLists.txt @@ -21,7 +21,7 @@ atlas_depends_on_subdirs( atlas_add_library( JetInterface JetInterface/*.h Root/*.cxx PUBLIC_HEADERS JetInterface - LINK_LIBRARIES AsgTools xAODEventInfo xAODJet xAODTracking xAODBase ) + LINK_LIBRARIES AsgTools AsgDataHandlesLib xAODEventInfo xAODJet xAODTracking xAODBase ) atlas_add_dictionary( JetInterfaceDict JetInterface/JetInterfaceDict.h diff --git a/Reconstruction/Jet/JetInterface/JetInterface/IJetProvider.h b/Reconstruction/Jet/JetInterface/JetInterface/IJetProvider.h index 5d564de9efed672d7731486081dadb42286f7680..ac0d0eab46c424b99b374e2cef128e80ebf371ea 100644 --- a/Reconstruction/Jet/JetInterface/JetInterface/IJetProvider.h +++ b/Reconstruction/Jet/JetInterface/JetInterface/IJetProvider.h @@ -16,9 +16,9 @@ #include <utility> #include <memory> +#include "AsgDataHandles/WriteHandle.h" #include "AsgTools/IAsgTool.h" #include "xAODJet/JetContainer.h" -#include "StoreGate/WriteHandle.h" namespace SG { class IAuxStore; diff --git a/Reconstruction/Jet/JetRec/CMakeLists.txt b/Reconstruction/Jet/JetRec/CMakeLists.txt index a0b25cc6ff22dd4d56324b4c93de985df4fbad74..66d1012f8071ac945cc0ac90665b2e544ecff106 100644 --- a/Reconstruction/Jet/JetRec/CMakeLists.txt +++ b/Reconstruction/Jet/JetRec/CMakeLists.txt @@ -14,7 +14,7 @@ endif() set( mon_deps ) set( mon_lib ) -if( NOT GENERATIONBASE ) +if( NOT GENERATIONBASE AND NOT XAOD_STANDALONE ) set( mon_deps Control/AthenaMonitoringKernel ) set( mon_lib AthenaMonitoringKernelLib ) endif() @@ -54,7 +54,7 @@ atlas_add_library( JetRecLib INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${FASTJET_INCLUDE_DIRS} ${FASTJETCONTRIB_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${FASTJETCONTRIB_LIBRARIES} ${FASTJET_LIBRARIES} AthLinks AthContainers AsgTools xAODCaloEvent xAODJet xAODMuon EventShapeInterface JetEDM - JetInterface ${mon_lib} + JetInterface ${mon_lib} AsgDataHandlesLib PRIVATE_LINK_LIBRARIES CxxUtils xAODBase xAODCore xAODEventInfo xAODTracking ) @@ -77,19 +77,23 @@ atlas_add_test( TestTests INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) +if ( NOT XAOD_STANDALONE ) atlas_add_test(JetTests SOURCES test/JetTest.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) +endif() +if ( NOT XAOD_STANDALONE ) atlas_add_test(PseudoJetContainerOffline SOURCES test/PseudoJetContainerOfflineTest.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) +endif() -if ( NOT GENERATIONBASE ) +if ( NOT GENERATIONBASE AND NOT XAOD_STANDALONE ) atlas_add_test(PseudoJetContainerTrigger SOURCES test/PseudoJetContainerTriggerTest.cxx @@ -97,11 +101,13 @@ atlas_add_test(PseudoJetContainerTrigger LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) endif() +if ( NOT XAOD_STANDALONE ) atlas_add_test(ExtractorUnitTests SOURCES test/ExtractorTest.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) +endif() atlas_add_test(JetClustererTest SOURCES @@ -109,7 +115,7 @@ atlas_add_test(JetClustererTest INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} ${GTEST_LIBRARIES} JetRecLib ) -if ( NOT GENERATIONBASE ) +if ( NOT GENERATIONBASE AND NOT XAOD_STANDALONE ) atlas_add_test(JetRecAlg_Test SCRIPT share/JetRecAlgTestCfg.py ) endif() diff --git a/Reconstruction/Jet/JetRec/JetRec/JetClusterer.h b/Reconstruction/Jet/JetRec/JetRec/JetClusterer.h index 64b71f7bd2e950f6d0c316b40ef139c8b640341b..bee4d61cbcfa1a10af4f45ca8f854fef6669a4ea 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetClusterer.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetClusterer.h @@ -18,11 +18,12 @@ #include "xAODEventInfo/EventInfo.h" -#include "StoreGate/ReadHandleKey.h" -#include "StoreGate/WriteHandleKey.h" +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/WriteHandleKey.h" #include "JetInterface/IJetProvider.h" #include "AsgTools/AsgTool.h" +#include "AsgTools/PropertyWrapper.h" #include "JetRec/PseudoJetContainer.h" #include "JetRec/JetFromPseudojet.h" diff --git a/Reconstruction/Jet/JetRec/JetRec/JetConstitRemover.h b/Reconstruction/Jet/JetRec/JetRec/JetConstitRemover.h index 51d81b92c6d3c6f4b8ef19c538e7a50dc7bfee3f..a1c598a1ee8a333676286b7ffa3943d6880c9e05 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetConstitRemover.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetConstitRemover.h @@ -19,7 +19,7 @@ #include "JetRec/JetModifierBase.h" class JetConstitRemover : public JetModifierBase { - ASG_TOOL_CLASS(JetConstitRemover, IJetModifier); + ASG_TOOL_CLASS(JetConstitRemover, IJetModifier) public: diff --git a/Reconstruction/Jet/JetRec/JetRec/JetCopier.h b/Reconstruction/Jet/JetRec/JetRec/JetCopier.h index 11fe9b4c30309b96ba21605dbfc50778d2e986bd..bc7534bca579c46d1bc190ae24a13f26fd7a4909 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetCopier.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetCopier.h @@ -16,8 +16,9 @@ /// The JetVector key is also a Property of the tool. /// +#include "AsgTools/PropertyWrapper.h" #include "AsgTools/AsgTool.h" -#include "StoreGate/ReadHandleKey.h" +#include "AsgDataHandles/ReadHandleKey.h" #include "JetInterface/IJetProvider.h" #include "xAODJet/JetContainer.h" #include "xAODCore/ShallowAuxContainer.h" diff --git a/Reconstruction/Jet/JetRec/JetRec/JetFinder.h b/Reconstruction/Jet/JetRec/JetRec/JetFinder.h index f87d90fd259e7c383b32b814e95894c56892f7ef..ab6cbdc63e4d8038f1c5e05345dd8bb66dd87e7c 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetFinder.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetFinder.h @@ -20,6 +20,8 @@ #include "AsgTools/ToolHandle.h" #include "JetRec/PseudoJetContainer.h" #include "xAODEventInfo/EventInfo.h" +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/WriteHandleKey.h" namespace fastjet { class ClusterSequence; diff --git a/Reconstruction/Jet/JetRec/JetRec/JetGroomer.h b/Reconstruction/Jet/JetRec/JetRec/JetGroomer.h index 60bca3c63ccdc57afbdca8c32a31ad5505fbdab6..666bb45ff75369d989f0628a4e5e7f6959ef34ce 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetGroomer.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetGroomer.h @@ -18,8 +18,8 @@ #include "AsgTools/AsgTool.h" -#include "StoreGate/ReadHandleKey.h" -#include "StoreGate/WriteHandleKey.h" +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/WriteHandleKey.h" #include "JetInterface/IJetProvider.h" diff --git a/Reconstruction/Jet/JetRec/JetRec/JetPseudojetCopier.h b/Reconstruction/Jet/JetRec/JetRec/JetPseudojetCopier.h index c4a03bcd719ffdf2f763658f9c3b789348f03e80..8a4f854da80d5221b76170d426a91b6c005b2890 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetPseudojetCopier.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetPseudojetCopier.h @@ -33,7 +33,7 @@ class JetPseudojetCopier : virtual public asg::AsgTool, virtual public IJetConsumer { - ASG_TOOL_CLASS(JetPseudojetCopier, IJetConsumer); + ASG_TOOL_CLASS(JetPseudojetCopier, IJetConsumer) public: diff --git a/Reconstruction/Jet/JetRec/JetRec/JetRecTool.h b/Reconstruction/Jet/JetRec/JetRec/JetRecTool.h index 4c4b97e85e2590d6dc05977f1adedc70aefaa968..4b6ea2a453c225621eaca9602fe84d665fb71764 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetRecTool.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetRecTool.h @@ -58,10 +58,11 @@ #include "JetInterface/IJetPseudojetRetriever.h" #include "JetInterface/IJetConsumer.h" #include "TStopwatch.h" -#include "StoreGate/ReadHandleKeyArray.h" +#include "AsgDataHandles/ReadHandleKeyArray.h" +#include "AsgDataHandles/WriteHandleKey.h" #include "JetEDM/PseudoJetVector.h" #include "JetRec/PseudoJetContainer.h" -#ifndef GENERATIONBASE +#if !defined(GENERATIONBASE) && !defined(XAOD_STANDALONE) #include "AthenaMonitoringKernel/GenericMonitoringTool.h" #endif @@ -78,8 +79,17 @@ public: /// Initialization. Check all tools here. StatusCode initialize() override; + // FIX ME: This method is removed in AnalysisBase, because tools + // don't finalize in AnalysisBase. In AnalysisBase tools are + // generally meant to be stateless, so it makes less sense for them + // to be finalized, and that aside there is nobody around that can + // guarantee that `finalize` does get called anyways. If this does + // anything more than print out accounting-info this tool should + // probably be turned into a service (or an algorithm). +#ifndef XAOD_STANDALONE /// Finalization. Write summary report. StatusCode finalize() override; +#endif /// Retrieve inputs with tools and construct new /// jet collection. @@ -121,17 +131,17 @@ private: // Properties. - SG::WriteHandleKey<xAOD::JetContainer> m_outcoll; - SG::ReadHandleKey<xAOD::JetContainer> m_incoll; + SG::WriteHandleKey<xAOD::JetContainer> m_outcoll {this, "OutputContainer", ""}; + SG::ReadHandleKey<xAOD::JetContainer> m_incoll {this, "InputContainer", ""}; // The template argument should become PseudoJetContainer - SG::ReadHandleKeyArray<PseudoJetContainer> m_psjsin; + SG::ReadHandleKeyArray<PseudoJetContainer> m_psjsin {this, "InputPseudoJets", {}}; ToolHandle<IJetExecuteTool> m_intool; ToolHandle<IJetPseudojetRetriever> m_hpjr; ToolHandle<IJetFinder> m_finder; ToolHandle<IJetGroomer> m_groomer; - ToolHandleArray<IJetModifier> m_modifiers; - ToolHandleArray<IJetConsumer> m_consumers; + ToolHandleArray<IJetModifier> m_modifiers {this, "JetModifiers", {}}; + ToolHandleArray<IJetConsumer> m_consumers {this, "JetConsumers", {}}; bool m_trigger; int m_timer; @@ -160,7 +170,7 @@ private: mutable std::vector<TStopwatch> m_modclocks; mutable std::vector<TStopwatch> m_conclocks; -#ifndef GENERATIONBASE +#if !defined (GENERATIONBASE) && !defined (XAOD_STANDALONE) ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; #endif diff --git a/Reconstruction/Jet/JetRec/JetRec/JetToolRunner.h b/Reconstruction/Jet/JetRec/JetRec/JetToolRunner.h index 2cff3918577f88b0dfb8e3908544cac7d9a1f65f..efd865afedef5528a731249aa82f60bdcec7b2fb 100644 --- a/Reconstruction/Jet/JetRec/JetRec/JetToolRunner.h +++ b/Reconstruction/Jet/JetRec/JetRec/JetToolRunner.h @@ -48,8 +48,8 @@ public: private: // Properties. - ToolHandleArray<IEventShapeTool> m_evstools; - ToolHandleArray<IJetExecuteTool> m_exetools; + ToolHandleArray<IEventShapeTool> m_evstools {this, "EventShapeTools", {}}; + ToolHandleArray<IJetExecuteTool> m_exetools {this, "Tools", {}}; int m_timer; // Clocks. diff --git a/Reconstruction/Jet/JetRec/Root/IParticleExtractor.cxx b/Reconstruction/Jet/JetRec/Root/IParticleExtractor.cxx index f1fdd906fd70a2386e92d8d7d2eaab77b37fa1b7..743a27f559d866921c7394e33b1b28c8d5f7411e 100644 --- a/Reconstruction/Jet/JetRec/Root/IParticleExtractor.cxx +++ b/Reconstruction/Jet/JetRec/Root/IParticleExtractor.cxx @@ -7,6 +7,7 @@ #include "JetRec/IParticleExtractor.h" #include "JetRec/LineFormatter.h" // helper class for debug printing #include "xAODBase/IParticle.h" +#include <numeric> #include <vector> IParticleExtractor::IParticleExtractor(const xAOD::IParticleContainer* ips, diff --git a/Reconstruction/Jet/JetRec/Root/JetClusterer.cxx b/Reconstruction/Jet/JetRec/Root/JetClusterer.cxx index 2d0e2b1d462ba752fb02943342a762590175db2d..acad6882e30dce3bb48e9a140bcc405b3336af84 100644 --- a/Reconstruction/Jet/JetRec/Root/JetClusterer.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetClusterer.cxx @@ -3,6 +3,7 @@ */ #include <memory> +#include "AsgDataHandles/ReadHandle.h" #include "JetRec/JetClusterer.h" #include "fastjet/PseudoJet.hh" #include "fastjet/ClusterSequence.hh" @@ -115,7 +116,7 @@ std::pair<std::unique_ptr<xAOD::JetContainer>, std::unique_ptr<SG::IAuxStore> > // Thus the contained PseudoJet will be kept frozen there and we can safely use pointer to them from the xAOD::Jet objects auto pjVector = std::make_unique<PseudoJetVector>(fastjet::sorted_by_pt(clSequence->inclusive_jets(m_ptmin)) ); ATH_MSG_DEBUG("Found jet count: " << pjVector->size()); - if(msgLevel(MSG::VERBOSE)) { + if(msgLvl(MSG::VERBOSE)) { for(const auto& pj : *pjVector) { msg() << " Pseudojet with pt " << std::setprecision(4) << pj.Et()*1e-3 << " has " << pj.constituents().size() << " constituents" << endmsg; } diff --git a/Reconstruction/Jet/JetRec/Root/JetCopier.cxx b/Reconstruction/Jet/JetRec/Root/JetCopier.cxx index b4d808c73cfae74dc62649441563c13f019d7145..f27f31e349387dbebb9d0b139b9773718037c126 100644 --- a/Reconstruction/Jet/JetRec/Root/JetCopier.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetCopier.cxx @@ -4,6 +4,7 @@ #include "JetRec/JetCopier.h" +#include "AsgDataHandles/ReadHandle.h" #include "xAODJet/JetContainer.h" #include "xAODJet/JetAuxContainer.h" #include "xAODBase/IParticleHelpers.h" diff --git a/Reconstruction/Jet/JetRec/Root/JetFinder.cxx b/Reconstruction/Jet/JetRec/Root/JetFinder.cxx index d1472a19d27e061c14df393cf5f47d1952a7ada3..aa6b08f15753ba76e90c4de4d5994b866e192c2d 100644 --- a/Reconstruction/Jet/JetRec/Root/JetFinder.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetFinder.cxx @@ -13,6 +13,8 @@ #ifndef NO_JET_VARIABLER #include "fastjet/contrib/VariableRPlugin.hh" #endif +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/WriteHandle.h" #include "xAODEventInfo/EventInfo.h" #include "JetEDM/FastJetUtils.h" #include "JetEDM/PseudoJetVector.h" diff --git a/Reconstruction/Jet/JetRec/Root/JetGroomer.cxx b/Reconstruction/Jet/JetRec/Root/JetGroomer.cxx index 65138a0b6222fda95d80f2f654a301bcaf3b9164..a54de07cdb9763f74dbe82e9beb8b747ea04eb21 100644 --- a/Reconstruction/Jet/JetRec/Root/JetGroomer.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetGroomer.cxx @@ -4,6 +4,7 @@ #include "JetRec/JetGroomer.h" +#include "AsgDataHandles/ReadHandle.h" #include "fastjet/PseudoJet.hh" #include "JetRec/PseudoJetContainer.h" diff --git a/Reconstruction/Jet/JetRec/Root/JetRecTool.cxx b/Reconstruction/Jet/JetRec/Root/JetRecTool.cxx index 723c7b242bf05ac1128914e72a88b38b700777ec..6de287fc69973822022b2c084f337a22e496a7ba 100644 --- a/Reconstruction/Jet/JetRec/Root/JetRecTool.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetRecTool.cxx @@ -20,9 +20,10 @@ #include "JetRec/PseudoJetContainer.h" #include <algorithm> -#include "StoreGate/ReadHandle.h" +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/WriteHandle.h" -#ifndef GENERATIONBASE +#if !defined (GENERATIONBASE) && !defined (XAOD_STANDALONE) #include "AthenaMonitoringKernel/Monitored.h" #endif @@ -48,22 +49,15 @@ JetRecTool::JetRecTool(std::string myname) #endif m_finder("",this), m_groomer("",this), - m_modifiers(this), - m_consumers(this), m_trigger(false), m_initCount(0), m_find(false), m_groom(false), m_copy(false), m_inputtype(xAOD::JetInput::Uncategorized), m_ppjr(nullptr) { - declareProperty("OutputContainer", m_outcoll); - declareProperty("InputContainer", m_incoll); declareProperty("InputTool", m_intool); - declareProperty("InputPseudoJets", m_psjsin); declareProperty("JetPseudojetRetriever", m_hpjr); declareProperty("JetFinder", m_finder); declareProperty("JetGroomer", m_groomer); - declareProperty("JetModifiers", m_modifiers); - declareProperty("JetConsumers", m_consumers); declareProperty("Trigger", m_trigger); declareProperty("Timer", m_timer =0); } @@ -225,7 +219,7 @@ StatusCode JetRecTool::initialize() { m_conclock.Reset(); m_nevt = 0; -#ifndef GENERATIONBASE +#if !defined (GENERATIONBASE) && !defined (XAOD_STANDALONE) if (!m_monTool.empty()) ATH_CHECK(m_monTool.retrieve()); #endif @@ -235,6 +229,7 @@ StatusCode JetRecTool::initialize() { //********************************************************************** +#ifndef XAOD_STANDALONE StatusCode JetRecTool::finalize() { ATH_MSG_INFO ("Finalizing " << name() << "..."); string tname = ""; @@ -320,6 +315,7 @@ StatusCode JetRecTool::finalize() { if( saveToFile ) outfile.close(); return StatusCode::SUCCESS; } +#endif //********************************************************************** @@ -412,7 +408,7 @@ const JetContainer* JetRecTool::build() const { } -#ifndef GENERATIONBASE +#if !defined (GENERATIONBASE) && !defined (XAOD_STANDALONE) // monitor jet multiplicity and basic jet kinematics auto njets = Monitored::Scalar<int>("nJets"); auto pt = Monitored::Collection("pt", *jetsHandle, [c=m_mevtogev]( const xAOD::Jet* jet ) { return jet->pt()*c; }); diff --git a/Reconstruction/Jet/JetRec/Root/JetToolRunner.cxx b/Reconstruction/Jet/JetRec/Root/JetToolRunner.cxx index bb78502c9c23169adb5c9a6156fc4e6828bad038..ea20cd52222ed9569aea37caaf02d905a2cf13a3 100644 --- a/Reconstruction/Jet/JetRec/Root/JetToolRunner.cxx +++ b/Reconstruction/Jet/JetRec/Root/JetToolRunner.cxx @@ -19,11 +19,7 @@ using std::fixed; //********************************************************************** JetToolRunner::JetToolRunner(const std::string& myname): - AsgTool(myname), - m_evstools(this), - m_exetools(this){ - declareProperty("Tools", m_exetools); - declareProperty("EventShapeTools", m_evstools); + AsgTool(myname){ declareProperty("Timer", m_timer =0); } diff --git a/Reconstruction/Jet/JetRec/Root/setAssocObjectsSummary.cxx b/Reconstruction/Jet/JetRec/Root/setAssocObjectsSummary.cxx index e5640afaadcb16247dbaf38477de2936c78396a0..db12ab60fb169f3ba363b3de371cf75413ce44b9 100644 --- a/Reconstruction/Jet/JetRec/Root/setAssocObjectsSummary.cxx +++ b/Reconstruction/Jet/JetRec/Root/setAssocObjectsSummary.cxx @@ -2,6 +2,7 @@ Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration */ #include "JetRec/setAssocObjectsSummary.h" +#include <numeric> void setAssocObjectsSummary(const std::vector<const xAOD::IParticle*>& constituents, diff --git a/Reconstruction/MET/METUtilities/CMakeLists.txt b/Reconstruction/MET/METUtilities/CMakeLists.txt index 1e55f1340d0988b947002b6b58ae35d26c70c575..87d5220ad7f46bf77598f65880fbefba984a5165 100644 --- a/Reconstruction/MET/METUtilities/CMakeLists.txt +++ b/Reconstruction/MET/METUtilities/CMakeLists.txt @@ -55,7 +55,7 @@ atlas_add_library( METUtilitiesLib INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS} LINK_LIBRARIES ${ROOT_LIBRARIES} AsgTools xAODEgamma xAODJet xAODMissingET xAODMuon xAODTau xAODTracking InDetTrackSelectionToolLib PATInterfaces - METInterface + METInterface AsgDataHandlesLib PRIVATE_LINK_LIBRARIES EventPrimitives FourMomUtils xAODCore PathResolver ) if( NOT XAOD_STANDALONE ) @@ -83,8 +83,11 @@ endif() # Executable(s) in the package: # only compiled in analysis releases if( XAOD_ANALYSIS ) - foreach( utility example_METMaker_METSystematicsTool - example_METMaker_advanced example_rebuildTrackMET ) + # FIX ME: temporarily disabled utilities relying on non-existant code + + # foreach( utility example_METMaker_METSystematicsTool + # example_METMaker_advanced example_rebuildTrackMET ) + foreach( utility example_rebuildTrackMET ) atlas_add_executable( ${utility} util/${utility}.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} diff --git a/Reconstruction/MET/METUtilities/METUtilities/METMaker.h b/Reconstruction/MET/METUtilities/METUtilities/METMaker.h index 5c100b8ed7b8bbfe588af6dad928b4b36eac9423..5d92d554aed9c2fc794f5baac5f93401bab29174 100644 --- a/Reconstruction/MET/METUtilities/METUtilities/METMaker.h +++ b/Reconstruction/MET/METUtilities/METUtilities/METMaker.h @@ -15,9 +15,9 @@ #include <string> // FrameWork includes +#include "AsgDataHandles/ReadHandleKey.h" #include "AsgTools/ToolHandle.h" #include "AsgTools/AsgTool.h" -#include "StoreGate/DataHandle.h" // METInterface includes #include "METInterface/IMETMaker.h" diff --git a/Reconstruction/MET/METUtilities/METUtilities/METRebuilder.h b/Reconstruction/MET/METUtilities/METUtilities/METRebuilder.h index 30594d2c3e8a0fecba493124c1c45ae71341507f..5973a835985dcb060227db572b6b55b85ca8e89d 100644 --- a/Reconstruction/MET/METUtilities/METUtilities/METRebuilder.h +++ b/Reconstruction/MET/METUtilities/METUtilities/METRebuilder.h @@ -15,9 +15,10 @@ #include <string> // FrameWork includes +#include "AsgDataHandles/ReadHandleKey.h" +#include "AsgDataHandles/WriteHandleKey.h" #include "AsgTools/AsgTool.h" #include "AsgTools/ToolHandle.h" -#include "StoreGate/DataHandle.h" // METInterface includes diff --git a/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h b/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h index befa34d398ad1f1d04ca595678283bd548241457..3cd07106f014c39d433285c24ef50c34377a6238 100644 --- a/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h +++ b/Reconstruction/MET/METUtilities/METUtilities/METSystematicsTool.h @@ -16,8 +16,8 @@ class TH2D; class TH1D; #include "METInterface/IMETSystematicsTool.h" +#include "AsgDataHandles/ReadHandleKey.h" #include "AsgTools/AsgTool.h" -#include "StoreGate/DataHandle.h" #include "PATInterfaces/SystematicsTool.h" diff --git a/Reconstruction/MET/METUtilities/Root/METMaker.cxx b/Reconstruction/MET/METUtilities/Root/METMaker.cxx index d2c2182f42a77c94339f58afcc134ec78e14eccc..8cf2a1da64f1dd5277f9e68b3d7a7d7ffbc4a4c6 100644 --- a/Reconstruction/MET/METUtilities/Root/METMaker.cxx +++ b/Reconstruction/MET/METUtilities/Root/METMaker.cxx @@ -36,6 +36,9 @@ #include "xAODEgamma/ElectronContainer.h" #include "xAODEgamma/EgammaxAODHelpers.h" +// framework includes +#include "AsgDataHandles/ReadHandle.h" + namespace met { using std::vector; diff --git a/Reconstruction/MET/METUtilities/Root/METRebuilder.cxx b/Reconstruction/MET/METUtilities/Root/METRebuilder.cxx index 95f7866b4aa8fad7b39d9ad5ee39201b09b41020..330fa6c402898f6f4642322721db19c88852ed61 100644 --- a/Reconstruction/MET/METUtilities/Root/METRebuilder.cxx +++ b/Reconstruction/MET/METUtilities/Root/METRebuilder.cxx @@ -38,6 +38,9 @@ // Track errors #include "EventPrimitives/EventPrimitivesHelpers.h" +#include "AsgDataHandles/ReadHandle.h" +#include "AsgDataHandles/WriteHandle.h" + #ifndef ROOTCORE #include "GaudiKernel/IJobOptionsSvc.h" #endif diff --git a/Reconstruction/MET/METUtilities/Root/METSystematicsTool.cxx b/Reconstruction/MET/METUtilities/Root/METSystematicsTool.cxx index 5a7ffa166be74c7fed9bc04fa13a63e4bae9db70..ae9010d1a523972c459b38562d2ad96006e3f5cd 100644 --- a/Reconstruction/MET/METUtilities/Root/METSystematicsTool.cxx +++ b/Reconstruction/MET/METUtilities/Root/METSystematicsTool.cxx @@ -11,6 +11,7 @@ #include <iostream> // #include <boost/filesystem.hpp> +#include "AsgDataHandles/ReadHandle.h" #include "PathResolver/PathResolver.h" // xAOD includes diff --git a/Reconstruction/MissingETPerformance/CMakeLists.txt b/Reconstruction/MissingETPerformance/CMakeLists.txt index 63ce2de9eba3d330572a588ed2c33457854ebd5c..468d4ff229c017d793096cf226d26c0afbb5130b 100644 --- a/Reconstruction/MissingETPerformance/CMakeLists.txt +++ b/Reconstruction/MissingETPerformance/CMakeLists.txt @@ -5,44 +5,6 @@ # Declare the package name: atlas_subdir( MissingETPerformance ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Calorimeter/CaloConditions - Calorimeter/CaloEvent - Calorimeter/CaloInterface - Control/AthenaBaseComps - Control/SGTools - Control/StoreGate - GaudiKernel - Generators/GeneratorObjects - Generators/AtlasHepMC - LArCalorimeter/LArRecConditions - PhysicsAnalysis/AnalysisCommon/AnalysisTools - PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerEvent - PhysicsAnalysis/TruthParticleID/McParticleEvent - Reconstruction/Jet/JetEvent - Reconstruction/Jet/JetUtils - Reconstruction/MissingETEvent - Reconstruction/MissingETGoodness - Reconstruction/MuonIdentification/muonEvent - Reconstruction/Particle - Reconstruction/egamma/egammaEvent - Trigger/TrigAnalysis/TrigDecisionTool - Trigger/TrigEvent/TrigCaloEvent - Trigger/TrigEvent/TrigInDetEvent - Trigger/TrigEvent/TrigMissingEtEvent - Trigger/TrigEvent/TrigMuonEvent - PRIVATE - Control/AthenaKernel - Calorimeter/CaloGeoHelpers - Event/FourMom - Event/FourMomUtils - Event/xAOD/xAODEventInfo - Generators/GenAnalysisTools/TruthHelper - Reconstruction/tauEvent - Tracking/TrkEvent/VxVertex - Trigger/TrigConfiguration/TrigConfL1Data ) - # External dependencies: find_package( Boost COMPONENTS filesystem thread system ) find_package( CLHEP ) @@ -59,7 +21,7 @@ atlas_add_library( MissingETPerformanceLib INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS} PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} DEFINITIONS ${CLHEP_DEFINITIONS} - LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloConditions CaloEvent AthenaBaseComps SGTools GaudiKernel GeneratorObjects LArRecConditions AnalysisTriggerEvent McParticleEvent JetEvent JetUtils MissingETEvent muonEvent Particle egammaEvent TrigCaloEvent TrigInDetEvent TrigMissingEtEvent TrigMuonEvent StoreGateLib SGtests AthAnalysisToolsLib MissingETGoodnessLib TrigDecisionToolLib + LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloConditions CaloEvent AthenaBaseComps SGTools GaudiKernel GeneratorObjects LArRecConditions AnalysisTriggerEvent McParticleEvent JetEvent JetUtils MissingETEvent muonEvent Particle egammaEvent TrigCaloEvent TrigInDetEvent TrigMissingEtEvent TrigMuonEvent StoreGateLib SGtests AthAnalysisToolsLib MissingETGoodnessLib TrigDecisionToolLib CaloInterfaceLib PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} AtlasHepMCLib AthenaKernel CaloGeoHelpers FourMom FourMomUtils xAODEventInfo TruthHelper tauEvent VxVertex TrigConfL1Data ) atlas_add_component( MissingETPerformance diff --git a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyMeas.h b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyMeas.h index 70420ae31177469eb50c0e494db0a3ef80d1808c..e4806513800fd34531e11ed7ae99c1cda4efec81 100755 --- a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyMeas.h +++ b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyMeas.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 */ /////////////////////////////////////////////////////////////////// @@ -7,7 +7,7 @@ AlgTool to access the energy deposited by a muon in the calorimeters. The energy deposit is estimated according to the active measurements in the traversed calorimeter cells. - + @author Konstantinos.Nikolopoulos@cern.ch, Alan.Poppleton@cern.ch (c) ATLAS Combined Muon software */ @@ -18,14 +18,14 @@ //<<<<<< INCLUDES >>>>>> +#include <atomic> + #include "AthenaBaseComps/AthAlgTool.h" +#include "CaloConditions/CaloNoise.h" +#include "CaloEvent/CaloCellContainer.h" #include "GaudiKernel/ToolHandle.h" #include "MuidInterfaces/IMuidCaloEnergyMeas.h" #include "StoreGate/ReadHandleKey.h" -#include "CaloEvent/CaloCellContainer.h" -#include "CaloConditions/CaloNoise.h" - -#include <atomic> //<<<<<< CLASS DECLARATIONS >>>>>> @@ -35,91 +35,76 @@ class LArEM_ID; class LArHEC_ID; class TileID; -namespace Rec -{ +namespace Rec { - class caloMeas; - class IMuidCaloEnergyParam; +class caloMeas; +class IMuidCaloEnergyParam; -class MuidCaloEnergyMeas: public AthAlgTool, - virtual public IMuidCaloEnergyMeas -{ -public: - MuidCaloEnergyMeas(const std::string& type, - const std::string& name, - const IInterface* parent); - ~MuidCaloEnergyMeas(void); // destructor +class MuidCaloEnergyMeas : public AthAlgTool, virtual public IMuidCaloEnergyMeas { + public: + MuidCaloEnergyMeas(const std::string& type, const std::string& name, const IInterface* parent); + ~MuidCaloEnergyMeas(void); // destructor + + StatusCode initialize(); + StatusCode finalize(); - StatusCode initialize(); - StatusCode finalize(); - /**IMuidCaloEnergyMeas interface: get the muon energy loss measurement from the calorimeter, knowing the track intersection at the em and had cals*/ - CaloMeas* energyMeasurement(double etaEM, - double phiEM, - double etaHad, - double phiHad) const; -private: + CaloMeas* energyMeasurement(double etaEM, double phiEM, double etaHad, double phiHad) const; + + private: // private methods - void energyInCalo(CaloMeas& caloMeas, - const CaloCellContainer* cellContainer, - double eta, - double phi, - int iSubCalo) const; - void isolationEnergy(CaloMeas& caloMeas, - const CaloCellContainer* cellContainer, - double eta, - double phi, - int iSubCalo) const; - double energyInTile(const CaloCellContainer* cellContainer, - double eta, - double phi, - int, - int) const; - double energyInLArHEC(const CaloCellContainer* cellContainer, - double eta, - double phi, - int, - int) const; - double energyInLArEM(const CaloCellContainer* cellContainer, - double eta, - double phi, - int, - int) const; - int cellCounting(const CaloCellContainer* cellContainer, - double eta, - double phi) const; - + void energyInCalo(CaloMeas& caloMeas, const CaloCellContainer* cellContainer, double eta, double phi, + int iSubCalo) const; + void isolationEnergy(CaloMeas& caloMeas, const CaloCellContainer* cellContainer, double eta, double phi, + int iSubCalo) const; + double energyInTile(const CaloCellContainer* cellContainer, double eta, double phi, int, int) const; + double energyInLArHEC(const CaloCellContainer* cellContainer, double eta, double phi, int, int) const; + double energyInLArEM(const CaloCellContainer* cellContainer, double eta, double phi, int, int) const; + int cellCounting(const CaloCellContainer* cellContainer, double eta, double phi) const; + // helpers, managers, tools - SG::ReadCondHandleKey<CaloNoise> m_noiseCDOKey{this,"CaloNoiseKey","totalNoise","SG Key of CaloNoise data object"}; - ToolHandle<IMuidCaloEnergyParam> m_caloParamTool; - - const TileID* m_tileID; - const LArEM_ID* m_emID; - const LArHEC_ID* m_hecID; - SG::ReadHandleKey<CaloCellContainer> m_cellContainerLocation{this,"CellContainerLocation","AllCalo","calo cell container location"}; - - double m_measurementConeTile; - double m_measurementConeLArHEC; - double m_measurementConeLArEM; - double m_isolationConeTile; - double m_isolationConeLArHEC; - double m_isolationConeLArEM; - - double m_sigmasAboveNoise; // The minimum sigmas above the noise tool rms - double m_sigmasAboveNoiseCore; // The minimum sigmas above the noise tool rms - - mutable std::atomic_int m_totalCoreCellsEM; - mutable std::atomic_int m_totalCoreCellsHEC; - mutable std::atomic_int m_totalCoreCellsTile; - mutable std::atomic_int m_totalSelectedEM; - mutable std::atomic_int m_totalSelectedHEC; - mutable std::atomic_int m_totalSelectedTile; + SG::ReadCondHandleKey<CaloNoise> m_noiseCDOKey{ + this, + "CaloNoiseKey", + "totalNoise", + "SG Key of CaloNoise data object", + }; + ToolHandle<IMuidCaloEnergyParam> m_caloParamTool{ + this, + "CaloParamTool", + "", + }; + + const TileID* m_tileID; + const LArEM_ID* m_emID; + const LArHEC_ID* m_hecID; + SG::ReadHandleKey<CaloCellContainer> m_cellContainerLocation{ + this, + "CellContainerLocation", + "AllCalo", + "calo cell container location", + }; + + double m_measurementConeTile; + double m_measurementConeLArHEC; + double m_measurementConeLArEM; + double m_isolationConeTile; + double m_isolationConeLArHEC; + double m_isolationConeLArEM; + + double m_sigmasAboveNoise; // The minimum sigmas above the noise tool rms + double m_sigmasAboveNoiseCore; // The minimum sigmas above the noise tool rms + + mutable std::atomic_int m_totalCoreCellsEM; + mutable std::atomic_int m_totalCoreCellsHEC; + mutable std::atomic_int m_totalCoreCellsTile; + mutable std::atomic_int m_totalSelectedEM; + mutable std::atomic_int m_totalSelectedHEC; + mutable std::atomic_int m_totalSelectedTile; }; -} // end of namespace - -#endif // MUIDCALOENERGYTOOLS_MUIDCALOENERGYMEAS_H - +} // namespace Rec +#endif // MUIDCALOENERGYTOOLS_MUIDCALOENERGYMEAS_H diff --git a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyTool.h b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyTool.h index 16b83ab5884ef9ff28ee4a9eeef229f8f3f91e07..a4ea560f9deeb0bc7978960e25da8db926f354dd 100755 --- a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyTool.h +++ b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/MuidCaloEnergyTools/MuidCaloEnergyTool.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 */ ////////////////////////////////////////////////////////////////////////////// @@ -13,7 +13,7 @@ K. Nikolopoulos, D. Fassouliotis, C. Kourkoumelis, and A. Poppleton, "Event-by-Event Estimate of Muon Energy Loss in ATLAS", IEEE Trans. Nucl. Sci., vol. 54, no. 5, pt. 2, pp. 1792-1796, Oct. 2007. - + @author Konstantinos.Nikolopoulos@cern.ch, Alan.Poppleton@cern.ch (c) ATLAS Combined Muon software */ @@ -24,95 +24,89 @@ //<<<<<< INCLUDES >>>>>> +#include <atomic> + #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" #include "MuidInterfaces/IMuidCaloEnergy.h" - -#include <atomic> +#include "MuidInterfaces/IMuidCaloEnergyParam.h" +#include "MuidInterfaces/IMuidTrackIsolation.h" //<<<<<< CLASS DECLARATIONS >>>>>> -namespace Rec -{ +namespace Rec { class CaloMeas; class IMuidCaloEnergyMeas; class IMuidCaloEnergyParam; class IMuidTrackIsolation; -class MuidCaloEnergyTool: public AthAlgTool, - virtual public IMuidCaloEnergy -{ +class MuidCaloEnergyTool : public AthAlgTool, virtual public IMuidCaloEnergy { + + public: + MuidCaloEnergyTool(const std::string& type, const std::string& name, const IInterface* parent); + ~MuidCaloEnergyTool(void); // destructor -public: - MuidCaloEnergyTool(const std::string& type, - const std::string& name, - const IInterface* parent); - ~MuidCaloEnergyTool(void); // destructor - StatusCode initialize(); StatusCode finalize(); /**IMuidCaloEnergy interface: to get the total energyLoss in the calorimeters */ - CaloEnergy* energyLoss(double trackMomentum, - double eta, - double phi) const; - + CaloEnergy* energyLoss(double trackMomentum, double eta, double phi) const; + /**IMuidCaloEnergy interface: TrackStateOnSurface for parameters and energyLoss at the calorimeter mid-surface */ - const Trk::TrackStateOnSurface* trackStateOnSurface( - const Trk::TrackParameters& middleParameters, - const Trk::TrackParameters* innerParameters, - const Trk::TrackParameters* outerParameters) const; - -private: + const Trk::TrackStateOnSurface* trackStateOnSurface(const Trk::TrackParameters& middleParameters, + const Trk::TrackParameters* innerParameters, + const Trk::TrackParameters* outerParameters) const; + + private: // private methods - CaloEnergy* measurement(double trackMomentum, - double eta, - double phi, - CaloMeas* caloMeas) const; - double muSpecResolParam(double trackMomentum, - double eta) const; - double paramCorrection(double trackMomentum, - double eta, - double MopLoss, - double MopSigma) const; - double landau(double x, - double mpv, - double sigma, - bool norm) const; + CaloEnergy* measurement(double trackMomentum, double eta, double phi, CaloMeas* caloMeas) const; + double muSpecResolParam(double trackMomentum, double eta) const; + double paramCorrection(double trackMomentum, double eta, double MopLoss, double MopSigma) const; + double landau(double x, double mpv, double sigma, bool norm) const; // helpers, managers, tools - ToolHandle<IMuidCaloEnergyMeas> m_caloMeasTool; - ToolHandle<IMuidCaloEnergyParam> m_caloParamTool; - ToolHandle<IMuidTrackIsolation> m_trackIsolationTool; - + ToolHandle<IMuidCaloEnergyMeas> m_caloMeasTool{ + this, + "CaloMeasTool", + "Rec::MuidCaloEnergyMeas/MuidCaloEnergyMeas", + }; + ToolHandle<IMuidCaloEnergyParam> m_caloParamTool{ + this, + "CaloParamTool", + "Rec::MuidCaloEnergyParam/MuidCaloEnergyParam", + }; + ToolHandle<IMuidTrackIsolation> m_trackIsolationTool{ + this, + "TrackIsolationTool", + "Rec::MuidTrackIsolation/MuidTrackIsolation", + }; + // configurable options - bool m_cosmics; - bool m_energyLossMeasurement; - bool m_forceIsolationFailure; - bool m_FSRtreatment; - bool m_MOPparametrization; - bool m_trackIsolation; + bool m_cosmics; + bool m_energyLossMeasurement; + bool m_forceIsolationFailure; + bool m_FSRtreatment; + bool m_MOPparametrization; + bool m_trackIsolation; // thresholds for use of energy measurement - double m_emEtCut; // minimum Et in em for FSR treatment - double m_emF1Cut; // minimum F1 in em for FSR treatment - double m_emMinEnergy; // mininum energy in the EM - double m_hecMinEnergy; // minimum energy in the HEC - int m_maxNTracksIso; // max #tracks in the isolation cone - double m_minFinalEnergy; // minimum measured final energy - double m_minMuonPt; // minimum pt of the muon + double m_emEtCut; // minimum Et in em for FSR treatment + double m_emF1Cut; // minimum F1 in em for FSR treatment + double m_emMinEnergy; // mininum energy in the EM + double m_hecMinEnergy; // minimum energy in the HEC + int m_maxNTracksIso; // max #tracks in the isolation cone + double m_minFinalEnergy; // minimum measured final energy + double m_minMuonPt; // minimum pt of the muon // counters (for finalize) - mutable std::atomic_int m_countMean; //number of tracks using mean - mutable std::atomic_int m_countMeasurement; //number of tracks using measurement - mutable std::atomic_int m_countMop; //number of tracks using mop + mutable std::atomic_int m_countMean; // number of tracks using mean + mutable std::atomic_int m_countMeasurement; // number of tracks using measurement + mutable std::atomic_int m_countMop; // number of tracks using mop }; -} // end of namespace - -#endif // MUIDCALOENERGYTOOLS_MUIDCALOENERGYTOOL_H - +} // namespace Rec +#endif // MUIDCALOENERGYTOOLS_MUIDCALOENERGYTOOL_H diff --git a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyMeas.cxx b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyMeas.cxx index ccc58ff0315acacddd10ff9daec40f58e1275d31..e1798e456c84eb5f9c4cf597e0e27fe9c33ae111 100755 --- a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyMeas.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyMeas.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 */ /////////////////////////////////////////////////////////////////// @@ -13,58 +13,53 @@ //<<<<<< INCLUDES >>>>>> +#include "MuidCaloEnergyTools/MuidCaloEnergyMeas.h" + +#include "AthenaKernel/Units.h" #include "CLHEP/Geometry/Vector3D.h" #include "CaloEvent/CaloCell.h" #include "CaloIdentifier/CaloCell_ID.h" -#include "CaloIdentifier/TileID.h" +#include "CaloIdentifier/CaloID.h" #include "CaloIdentifier/LArEM_ID.h" #include "CaloIdentifier/LArHEC_ID.h" -#include "CaloIdentifier/CaloID.h" +#include "CaloIdentifier/TileID.h" #include "CaloUtils/CaloCellList.h" -#include "MuidCaloEnergyTools/MuidCaloEnergyMeas.h" #include "MuidEvent/CaloMeas.h" #include "MuidInterfaces/IMuidCaloEnergyParam.h" -#include "AthenaKernel/Units.h" //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> namespace Units = Athena::Units; -namespace Rec -{ - -MuidCaloEnergyMeas::MuidCaloEnergyMeas (const std::string& type, - const std::string& name, - const IInterface* parent) - : AthAlgTool (type, name, parent), - m_caloParamTool ("", this), - m_tileID (0), - m_emID (0), - m_hecID (0), - m_sigmasAboveNoise (4.), - m_sigmasAboveNoiseCore (1.5), - m_totalCoreCellsEM (0), - m_totalCoreCellsHEC (0), - m_totalCoreCellsTile (0), - m_totalSelectedEM (0), - m_totalSelectedHEC (0), - m_totalSelectedTile (0) +namespace Rec { + +MuidCaloEnergyMeas::MuidCaloEnergyMeas(const std::string& type, const std::string& name, const IInterface* parent) + : AthAlgTool(type, name, parent), + m_tileID(0), + m_emID(0), + m_hecID(0), + m_sigmasAboveNoise(4.), + m_sigmasAboveNoiseCore(1.5), + m_totalCoreCellsEM(0), + m_totalCoreCellsHEC(0), + m_totalCoreCellsTile(0), + m_totalSelectedEM(0), + m_totalSelectedHEC(0), + m_totalSelectedTile(0) { declareInterface<IMuidCaloEnergyMeas>(this); - declareProperty ("CaloParamTool", m_caloParamTool); - declareProperty ("NoiseThresInSigmas", m_sigmasAboveNoise); - declareProperty ("NoiseThresInSigmasCore", m_sigmasAboveNoiseCore); - - m_measurementConeTile = 0.15; - m_measurementConeLArHEC = 0.15; - m_measurementConeLArEM = 0.075; - m_isolationConeTile = 0.3; - m_isolationConeLArHEC = 0.3; - m_isolationConeLArEM = 0.15; + declareProperty("NoiseThresInSigmas", m_sigmasAboveNoise); + declareProperty("NoiseThresInSigmasCore", m_sigmasAboveNoiseCore); + + m_measurementConeTile = 0.15; + m_measurementConeLArHEC = 0.15; + m_measurementConeLArEM = 0.075; + m_isolationConeTile = 0.3; + m_isolationConeLArHEC = 0.3; + m_isolationConeLArEM = 0.15; } -MuidCaloEnergyMeas::~MuidCaloEnergyMeas (void) -{} +MuidCaloEnergyMeas::~MuidCaloEnergyMeas(void) {} //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> @@ -72,34 +67,31 @@ MuidCaloEnergyMeas::~MuidCaloEnergyMeas (void) StatusCode MuidCaloEnergyMeas::initialize() { - ATH_MSG_INFO( "Initializing MuidCaloEnergyMeas AlgTool" - << " - package version " << PACKAGE_VERSION ); + ATH_MSG_INFO("Initializing MuidCaloEnergyMeas AlgTool" + << " - package version " << PACKAGE_VERSION); // retrieve TileID helper and TileIfno from det store - if (StatusCode::SUCCESS != detStore()->retrieve(m_tileID)) - { - ATH_MSG_FATAL( "Unable to retrieve TileID helper from DetectorStore" ); - return StatusCode::FAILURE; + if (StatusCode::SUCCESS != detStore()->retrieve(m_tileID)) { + ATH_MSG_FATAL("Unable to retrieve TileID helper from DetectorStore"); + return StatusCode::FAILURE; } - ATH_MSG_VERBOSE( "Accessed TileID helper" ); - - // retrieve LArEM helper - if (StatusCode::SUCCESS != detStore()->retrieve(m_emID,"LArEM_ID")) - { - ATH_MSG_FATAL( "Unable to retrieve LArEM_ID helper from DetectorStore" ); - return StatusCode::FAILURE; + ATH_MSG_VERBOSE("Accessed TileID helper"); + + // retrieve LArEM helper + if (StatusCode::SUCCESS != detStore()->retrieve(m_emID, "LArEM_ID")) { + ATH_MSG_FATAL("Unable to retrieve LArEM_ID helper from DetectorStore"); + return StatusCode::FAILURE; } - ATH_MSG_VERBOSE( "Accessed LArEM helper" ); + ATH_MSG_VERBOSE("Accessed LArEM helper"); // retrieve LArHEC helper - if (StatusCode::SUCCESS != detStore()->retrieve(m_hecID,"LArHEC_ID")) - { - ATH_MSG_FATAL( "Unable to retrieve LArHEC_ID helper from DetectorStore" ); - return StatusCode::FAILURE; + if (StatusCode::SUCCESS != detStore()->retrieve(m_hecID, "LArHEC_ID")) { + ATH_MSG_FATAL("Unable to retrieve LArHEC_ID helper from DetectorStore"); + return StatusCode::FAILURE; } - ATH_MSG_VERBOSE( "Accessed LArHEC helper" ); - + ATH_MSG_VERBOSE("Accessed LArHEC helper"); + ATH_CHECK(m_caloParamTool.retrieve()); ATH_CHECK(m_noiseCDOKey.initialize()); ATH_CHECK(m_cellContainerLocation.initialize()); @@ -109,122 +101,99 @@ MuidCaloEnergyMeas::initialize() StatusCode MuidCaloEnergyMeas::finalize() { - ATH_MSG_INFO( "Finalizing MuidCaloEnergyMeas Tool" ); - ATH_MSG_INFO( " EM: selected " << m_totalSelectedEM << " from " - << m_totalCoreCellsEM << " cells in core" ); - - ATH_MSG_INFO( " Tile: selected " << m_totalSelectedTile << " from " - << m_totalCoreCellsTile << " cells in core" ); - - ATH_MSG_INFO( " HEC: selected " << m_totalSelectedHEC << " from " - << m_totalCoreCellsHEC << " cells in core" ); + ATH_MSG_INFO("Finalizing MuidCaloEnergyMeas Tool"); + ATH_MSG_INFO(" EM: selected " << m_totalSelectedEM << " from " << m_totalCoreCellsEM << " cells in core"); + + ATH_MSG_INFO(" Tile: selected " << m_totalSelectedTile << " from " << m_totalCoreCellsTile << " cells in core"); + + ATH_MSG_INFO(" HEC: selected " << m_totalSelectedHEC << " from " << m_totalCoreCellsHEC << " cells in core"); return StatusCode::SUCCESS; } CaloMeas* -MuidCaloEnergyMeas::energyMeasurement (double etaEM, - double phiEM, - double etaHad, - double phiHad) const +MuidCaloEnergyMeas::energyMeasurement(double etaEM, double phiEM, double etaHad, double phiHad) const { - SG::ReadHandle<CaloCellContainer> cellContainer(m_cellContainerLocation); - if(!cellContainer.isPresent()){ - ATH_MSG_DEBUG("No calo cell container "<<m_cellContainerLocation.key()<<", energy measurement is 0"); - return 0; - } - if(!cellContainer.isValid()){ - ATH_MSG_WARNING("Calo cell container "<<m_cellContainerLocation.key()<<" not valid!"); - return 0; - } + SG::ReadHandle<CaloCellContainer> cellContainer(m_cellContainerLocation); + if (!cellContainer.isPresent()) { + ATH_MSG_DEBUG("No calo cell container " << m_cellContainerLocation.key() << ", energy measurement is 0"); + return 0; + } + if (!cellContainer.isValid()) { + ATH_MSG_WARNING("Calo cell container " << m_cellContainerLocation.key() << " not valid!"); + return 0; + } // set measured tile energy, measured sampling fraction and isolation energy into CaloMeas - CaloMeas* caloMeas = new CaloMeas(); - energyInCalo(*caloMeas,cellContainer.cptr(),etaHad,phiHad,0); - isolationEnergy(*caloMeas,cellContainer.cptr(),etaHad,phiHad,0); + CaloMeas* caloMeas = new CaloMeas(); + energyInCalo(*caloMeas, cellContainer.cptr(), etaHad, phiHad, 0); + isolationEnergy(*caloMeas, cellContainer.cptr(), etaHad, phiHad, 0); // similar for LArHEC - energyInCalo(*caloMeas,cellContainer.cptr(),etaHad,phiHad,1); - isolationEnergy(*caloMeas,cellContainer.cptr(),etaHad,phiHad,1); + energyInCalo(*caloMeas, cellContainer.cptr(), etaHad, phiHad, 1); + isolationEnergy(*caloMeas, cellContainer.cptr(), etaHad, phiHad, 1); // and for the em calo - energyInCalo(*caloMeas,cellContainer.cptr(),etaEM,phiEM,2); - isolationEnergy(*caloMeas,cellContainer.cptr(),etaEM,phiEM,2); - - if (msgLvl(MSG::DEBUG)) - { - // int cellsOverThreshold = 0; - // cellsOverThreshold = cellCounting(cellContainer,etaEM,phiEM); - ATH_MSG_DEBUG( std::setiosflags(std::ios::fixed) - << " Tile energy (GeV) :" << std::setw(8) << std::setprecision(3) - << caloMeas->Tile_EnergyMeasured()/Units::GeV - << " Material percent:" << std::setw(4) << std::setprecision(0) - << 100.*caloMeas->Tile_SamplingFraction() - << " ISO :" << std::setw(8) << std::setprecision(3) - << caloMeas->Tile_Isolation()/Units::GeV - << endmsg - << " LArHEC energy (GeV):" << std::setw(8) << std::setprecision(3) - << caloMeas->LArHEC_EnergyMeasured()/Units::GeV - << " Material percent:" << std::setw(4) << std::setprecision(0) - << 100.*caloMeas->LArHEC_SamplingFraction() - << " ISO :" << std::setw(8) << std::setprecision(3) - << caloMeas->LArHEC_Isolation()/Units::GeV - << endmsg - << " EM energy :" << std::setw(8) << std::setprecision(3) - << caloMeas->LArEM_EnergyMeasured()/Units::GeV - << " first compartment:" << std::setw(8) << std::setprecision(3) - << caloMeas->LArEM_FirstCompartmentEnergy()/Units::GeV - << " Material percent:" << std::setw(4) << std::setprecision(0) - << 100.*caloMeas->LArEM_SamplingFraction() - << " ISO :" << std::setw(8) << std::setprecision(3) - << caloMeas->LArEM_Isolation()/Units::GeV); + energyInCalo(*caloMeas, cellContainer.cptr(), etaEM, phiEM, 2); + isolationEnergy(*caloMeas, cellContainer.cptr(), etaEM, phiEM, 2); + + if (msgLvl(MSG::DEBUG)) { + // int cellsOverThreshold = 0; + // cellsOverThreshold = cellCounting(cellContainer,etaEM,phiEM); + ATH_MSG_DEBUG(std::setiosflags(std::ios::fixed) + << " Tile energy (GeV) :" << std::setw(8) << std::setprecision(3) + << caloMeas->Tile_EnergyMeasured() / Units::GeV << " Material percent:" << std::setw(4) + << std::setprecision(0) << 100. * caloMeas->Tile_SamplingFraction() << " ISO :" << std::setw(8) + << std::setprecision(3) << caloMeas->Tile_Isolation() / Units::GeV << endmsg + << " LArHEC energy (GeV):" << std::setw(8) << std::setprecision(3) + << caloMeas->LArHEC_EnergyMeasured() / Units::GeV << " Material percent:" << std::setw(4) + << std::setprecision(0) << 100. * caloMeas->LArHEC_SamplingFraction() << " ISO :" << std::setw(8) + << std::setprecision(3) << caloMeas->LArHEC_Isolation() / Units::GeV << endmsg + << " EM energy :" << std::setw(8) << std::setprecision(3) + << caloMeas->LArEM_EnergyMeasured() / Units::GeV << " first compartment:" << std::setw(8) + << std::setprecision(3) << caloMeas->LArEM_FirstCompartmentEnergy() / Units::GeV + << " Material percent:" << std::setw(4) << std::setprecision(0) + << 100. * caloMeas->LArEM_SamplingFraction() << " ISO :" << std::setw(8) << std::setprecision(3) + << caloMeas->LArEM_Isolation() / Units::GeV); } - + return caloMeas; } //<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> int -MuidCaloEnergyMeas::cellCounting(const CaloCellContainer* cellContainer, - double mu_eta, - double mu_phi) const +MuidCaloEnergyMeas::cellCounting(const CaloCellContainer* cellContainer, double mu_eta, double mu_phi) const { - //int isubcalo = 2; + // int isubcalo = 2; constexpr double lowest_threshold = 4 * 50.; - + SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; + const CaloNoise* noiseCDO = *noiseHdl; CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; - CaloCellList myList(cellContainer,iCalo); // Construct the list - myList.select(mu_eta,mu_phi,0.2,0.2); + CaloCellList myList(cellContainer, iCalo); // Construct the list + myList.select(mu_eta, mu_phi, 0.2, 0.2); - int count = 0; + int count = 0; CaloCellList::list_iterator ilistfirst = myList.begin(); CaloCellList::list_iterator ilistlast = myList.end(); - for(;ilistfirst!=ilistlast;ilistfirst++) - { - const double cellEnergy= (*ilistfirst)->energy(); - const double noise_rms =noiseCDO->getNoise((*ilistfirst)->ID(),(*ilistfirst)->gain()); - - if( cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise ) - { - count+=1; - } + for (; ilistfirst != ilistlast; ilistfirst++) { + const double cellEnergy = (*ilistfirst)->energy(); + const double noise_rms = noiseCDO->getNoise((*ilistfirst)->ID(), (*ilistfirst)->gain()); + + if (cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise) { + count += 1; + } } - ATH_MSG_DEBUG( " counted "<< count - << " cells over threshold out of a total of " << myList.ncells() << " cells" ); + ATH_MSG_DEBUG(" counted " << count << " cells over threshold out of a total of " << myList.ncells() << " cells"); return count; } void -MuidCaloEnergyMeas::energyInCalo (CaloMeas& caloMeas, - const CaloCellContainer* cellContainer, - double muEta, - double muPhi, - int isubcalo) const +MuidCaloEnergyMeas::energyInCalo(CaloMeas& caloMeas, const CaloCellContainer* cellContainer, double muEta, double muPhi, + int isubcalo) const { /* ------------------------------------------- Tile Cal @@ -241,409 +210,288 @@ MuidCaloEnergyMeas::energyInCalo (CaloMeas& caloMeas, 2 --> Sampling 3 3 --> Sampling 4 =========================================== - LarEM calorimeter - sample_number + LarEM calorimeter + sample_number 0 --> Presampler 1 --> Sampling 1 2 --> Sampling 2 3 --> Sampling 3 leadingEnergy is contribution from presampler and first compartment - -------------------------------------------*/ + -------------------------------------------*/ SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; - - double totalEnergy = 0.; - double leadingEnergy = 0.; - CaloCellList* myList = 0; - - if (isubcalo == 0) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta,muPhi,m_measurementConeTile,m_measurementConeTile); - } - else if (isubcalo == 1) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LARHEC; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta,muPhi,m_measurementConeLArHEC,m_measurementConeLArHEC); - } - else if (isubcalo == 2) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta,muPhi,m_measurementConeLArEM,m_measurementConeLArEM); + const CaloNoise* noiseCDO = *noiseHdl; + + double totalEnergy = 0.; + double leadingEnergy = 0.; + CaloCellList* myList = 0; + + if (isubcalo == 0) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_measurementConeTile, m_measurementConeTile); + } else if (isubcalo == 1) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LARHEC; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_measurementConeLArHEC, m_measurementConeLArHEC); + } else if (isubcalo == 2) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_measurementConeLArEM, m_measurementConeLArEM); } - int countCoreCells = 0; - int countSelected = 0; - bool compartment[4] = {false,false,false,false}; - double measuredSamplings = 0.; - - if (myList) - { - // get last cell (as CaloCellList->back() method doesn't work) - const CaloCell* lastCell= 0; - CaloCellList::list_iterator cell = myList->begin(); - for ( ; cell != myList->end(); ++cell) lastCell = *cell; - - // flag core in each sampling - for (int coreSampling = 0; coreSampling != 4; ++coreSampling) - { - const CaloCell* coreCell = 0; - double coreRadius = 0.; - for (cell = myList->begin(); cell != myList->end(); ++cell) - { - int sampling = -1; - if (isubcalo == 0) - { - sampling = m_tileID->sample((**cell).ID()); - } - else if (isubcalo == 1) - { - sampling = m_hecID->sampling((**cell).ID()); - } - else if (isubcalo == 2) - { - sampling = m_emID->sampling((**cell).ID()); - } - if (*cell != lastCell && sampling != coreSampling) continue; - - double deltaEta = (**cell).eta() - muEta; - double deltaPhi = (**cell).phi() - muPhi; - double radius = deltaEta*deltaEta + deltaPhi*deltaPhi; - - if (sampling == coreSampling) - { - if (! coreCell || radius < coreRadius) - { - coreCell = *cell; - coreRadius = radius; - } - } - - if (*cell != lastCell || ! coreCell) continue; - - for (CaloCellList::list_iterator cell2 = myList->begin(); - cell2 != myList->end(); - ++cell2) - { - if (isubcalo == 0) - { - sampling = m_tileID->sample((**cell2).ID()); - } - else if (isubcalo == 1) - { - sampling = m_hecID->sampling((**cell2).ID()); - } - else if (isubcalo == 2) - { - sampling = m_emID->sampling((**cell2).ID()); - } - if (sampling != coreSampling) continue; - - double cellEnergy = (**cell2).energy(); - double noiseRms = noiseCDO->getNoise((**cell2).ID(),(**cell2).gain()); - - // looser selection for core cell where at least mip is expected - bool cellSelected = cellEnergy > m_sigmasAboveNoise * noiseRms; - if (*cell2 == coreCell - && cellEnergy > m_sigmasAboveNoiseCore * noiseRms) cellSelected = true; - - if (cellSelected) - { - ++countSelected; - totalEnergy += cellEnergy; - compartment[coreSampling] = true; - if (coreSampling < 2) - leadingEnergy += cellEnergy; - } - if (*cell2 == coreCell) - { - ++countCoreCells; - if (isubcalo == 0) - { - ++m_totalCoreCellsTile; - if (cellSelected) ++m_totalSelectedTile; - } - else if (isubcalo == 1) - { - ++m_totalCoreCellsHEC; - if (cellSelected) ++m_totalSelectedHEC; - } - else if (isubcalo == 2) - { - ++m_totalCoreCellsEM; - if (cellSelected) ++m_totalSelectedEM; - } - } - if (msgLvl(MSG::DEBUG)) - { - std::string info = ""; - std::string type = " Tile "; - if (isubcalo == 1) - { - type = " LArHEC"; - } - else if (isubcalo == 2) - { - type = " EM "; - } - if (cellSelected && *cell2 == coreCell) - { - info = " selected core cell# "; - } - else if (cellSelected) - { - info = " selected cell# "; - } - else if (*cell2 == coreCell) - { - info = " cell in core NOT selected"; - } - - if (info == "") - { - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) << type - << " Sampling: "<< std::setw(1) - << coreSampling - << " Radius :" - << std::setw(6) << std::setprecision(0) - << (**cell2).caloDDE()->r() - << " Eta : " - << std::setw(6) << std::setprecision(2) - << (**cell2).eta() - << " Phi : " - << std::setw(6) << std::setprecision(2) - << (**cell2).phi() - << " Noise level : " - << std::setw(6) << std::setprecision(0) - << noiseRms - << " Energy : " - << std::setw(7) << std::setprecision(0) - << (**cell2).energy() << info ); - } - else if (cellSelected) - { - ATH_MSG_DEBUG( std::setiosflags(std::ios::fixed) << type - << " Sampling: "<< std::setw(1) - << coreSampling - << " Radius :" - << std::setw(6) << std::setprecision(0) - << (**cell2).caloDDE()->r() - << " Eta : " - << std::setw(6) << std::setprecision(2) - << (**cell2).eta() - << " Phi : " - << std::setw(6) << std::setprecision(2) - << (**cell2).phi() - << " Noise level : " - << std::setw(6) << std::setprecision(0) - << noiseRms - << " Energy : " - << std::setw(7) << std::setprecision(0) - << (**cell2).energy() << info << countSelected); - } - else - { - ATH_MSG_DEBUG( std::setiosflags(std::ios::fixed) << type - << " Sampling: "<< std::setw(1) - << coreSampling - << " Radius :" - << std::setw(6) << std::setprecision(0) - << (**cell2).caloDDE()->r() - << " Eta : " - << std::setw(6) << std::setprecision(2) - << (**cell2).eta() - << " Phi : " - << std::setw(6) << std::setprecision(2) - << (**cell2).phi() - << " Noise level : " - << std::setw(6) << std::setprecision(0) - << noiseRms - << " Energy : " - << std::setw(7) << std::setprecision(0) - << (**cell2).energy() << info ); - } - } - } - } - } - - if (msgLvl(MSG::DEBUG)) - { - std::string info = ""; - std::string type = " Tile "; - if (isubcalo == 1) - { - type = " LArHEC"; - } - else if (isubcalo == 2) - { - type = " EM "; - } - - ATH_MSG_DEBUG ( type << " at eta = " << muEta << " : selected " - << countSelected << " from measured cone with " - << countCoreCells << " cells forming core" ); - } - - delete myList; - - for (int i = 0; i < 4 ; ++i) - if (compartment[i]) measuredSamplings += m_caloParamTool->caloCompartmentDepth(isubcalo,i); - - // store result in caloMeas - if (isubcalo == 0) - { - caloMeas.Tile_EnergyMeasured(totalEnergy); - caloMeas.Tile_SamplingFraction(measuredSamplings); - } - else if (isubcalo == 1) - { - caloMeas.LArHEC_EnergyMeasured(totalEnergy); - caloMeas.LArHEC_SamplingFraction(measuredSamplings); - } - else if (isubcalo == 2) - { - caloMeas.LArEM_EnergyMeasured(totalEnergy); - caloMeas.LArEM_FirstCompartmentEnergy(leadingEnergy); - caloMeas.LArEM_SamplingFraction(measuredSamplings); - } + int countCoreCells = 0; + int countSelected = 0; + bool compartment[4] = {false, false, false, false}; + double measuredSamplings = 0.; + + if (myList) { + // get last cell (as CaloCellList->back() method doesn't work) + const CaloCell* lastCell = 0; + CaloCellList::list_iterator cell = myList->begin(); + for (; cell != myList->end(); ++cell) lastCell = *cell; + + // flag core in each sampling + for (int coreSampling = 0; coreSampling != 4; ++coreSampling) { + const CaloCell* coreCell = 0; + double coreRadius = 0.; + for (cell = myList->begin(); cell != myList->end(); ++cell) { + int sampling = -1; + if (isubcalo == 0) { + sampling = m_tileID->sample((**cell).ID()); + } else if (isubcalo == 1) { + sampling = m_hecID->sampling((**cell).ID()); + } else if (isubcalo == 2) { + sampling = m_emID->sampling((**cell).ID()); + } + if (*cell != lastCell && sampling != coreSampling) continue; + + double deltaEta = (**cell).eta() - muEta; + double deltaPhi = (**cell).phi() - muPhi; + double radius = deltaEta * deltaEta + deltaPhi * deltaPhi; + + if (sampling == coreSampling) { + if (!coreCell || radius < coreRadius) { + coreCell = *cell; + coreRadius = radius; + } + } + + if (*cell != lastCell || !coreCell) continue; + + for (CaloCellList::list_iterator cell2 = myList->begin(); cell2 != myList->end(); ++cell2) { + if (isubcalo == 0) { + sampling = m_tileID->sample((**cell2).ID()); + } else if (isubcalo == 1) { + sampling = m_hecID->sampling((**cell2).ID()); + } else if (isubcalo == 2) { + sampling = m_emID->sampling((**cell2).ID()); + } + if (sampling != coreSampling) continue; + + double cellEnergy = (**cell2).energy(); + double noiseRms = noiseCDO->getNoise((**cell2).ID(), (**cell2).gain()); + + // looser selection for core cell where at least mip is expected + bool cellSelected = cellEnergy > m_sigmasAboveNoise * noiseRms; + if (*cell2 == coreCell && cellEnergy > m_sigmasAboveNoiseCore * noiseRms) cellSelected = true; + + if (cellSelected) { + ++countSelected; + totalEnergy += cellEnergy; + compartment[coreSampling] = true; + if (coreSampling < 2) leadingEnergy += cellEnergy; + } + if (*cell2 == coreCell) { + ++countCoreCells; + if (isubcalo == 0) { + ++m_totalCoreCellsTile; + if (cellSelected) ++m_totalSelectedTile; + } else if (isubcalo == 1) { + ++m_totalCoreCellsHEC; + if (cellSelected) ++m_totalSelectedHEC; + } else if (isubcalo == 2) { + ++m_totalCoreCellsEM; + if (cellSelected) ++m_totalSelectedEM; + } + } + if (msgLvl(MSG::DEBUG)) { + std::string info = ""; + std::string type = " Tile "; + if (isubcalo == 1) { + type = " LArHEC"; + } else if (isubcalo == 2) { + type = " EM "; + } + if (cellSelected && *cell2 == coreCell) { + info = " selected core cell# "; + } else if (cellSelected) { + info = " selected cell# "; + } else if (*cell2 == coreCell) { + info = " cell in core NOT selected"; + } + + if (info == "") { + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) + << type << " Sampling: " << std::setw(1) << coreSampling << " Radius :" + << std::setw(6) << std::setprecision(0) << (**cell2).caloDDE()->r() + << " Eta : " << std::setw(6) << std::setprecision(2) << (**cell2).eta() + << " Phi : " << std::setw(6) << std::setprecision(2) << (**cell2).phi() + << " Noise level : " << std::setw(6) << std::setprecision(0) << noiseRms + << " Energy : " << std::setw(7) << std::setprecision(0) + << (**cell2).energy() << info); + } else if (cellSelected) { + ATH_MSG_DEBUG(std::setiosflags(std::ios::fixed) + << type << " Sampling: " << std::setw(1) << coreSampling << " Radius :" + << std::setw(6) << std::setprecision(0) << (**cell2).caloDDE()->r() + << " Eta : " << std::setw(6) << std::setprecision(2) << (**cell2).eta() + << " Phi : " << std::setw(6) << std::setprecision(2) << (**cell2).phi() + << " Noise level : " << std::setw(6) << std::setprecision(0) << noiseRms + << " Energy : " << std::setw(7) << std::setprecision(0) << (**cell2).energy() + << info << countSelected); + } else { + ATH_MSG_DEBUG(std::setiosflags(std::ios::fixed) + << type << " Sampling: " << std::setw(1) << coreSampling << " Radius :" + << std::setw(6) << std::setprecision(0) << (**cell2).caloDDE()->r() + << " Eta : " << std::setw(6) << std::setprecision(2) << (**cell2).eta() + << " Phi : " << std::setw(6) << std::setprecision(2) << (**cell2).phi() + << " Noise level : " << std::setw(6) << std::setprecision(0) << noiseRms + << " Energy : " << std::setw(7) << std::setprecision(0) << (**cell2).energy() + << info); + } + } + } + } + } + + if (msgLvl(MSG::DEBUG)) { + std::string info = ""; + std::string type = " Tile "; + if (isubcalo == 1) { + type = " LArHEC"; + } else if (isubcalo == 2) { + type = " EM "; + } + + ATH_MSG_DEBUG(type << " at eta = " << muEta << " : selected " << countSelected + << " from measured cone with " << countCoreCells << " cells forming core"); + } + + delete myList; + + for (int i = 0; i < 4; ++i) + if (compartment[i]) measuredSamplings += m_caloParamTool->caloCompartmentDepth(isubcalo, i); + + // store result in caloMeas + if (isubcalo == 0) { + caloMeas.Tile_EnergyMeasured(totalEnergy); + caloMeas.Tile_SamplingFraction(measuredSamplings); + } else if (isubcalo == 1) { + caloMeas.LArHEC_EnergyMeasured(totalEnergy); + caloMeas.LArHEC_SamplingFraction(measuredSamplings); + } else if (isubcalo == 2) { + caloMeas.LArEM_EnergyMeasured(totalEnergy); + caloMeas.LArEM_FirstCompartmentEnergy(leadingEnergy); + caloMeas.LArEM_SamplingFraction(measuredSamplings); + } } } void -MuidCaloEnergyMeas::isolationEnergy (CaloMeas& caloMeas, - const CaloCellContainer* cellContainer, - double muEta, - double muPhi, - int isubcalo) const +MuidCaloEnergyMeas::isolationEnergy(CaloMeas& caloMeas, const CaloCellContainer* cellContainer, double muEta, + double muPhi, int isubcalo) const { - double totalEnergy = 0.; - CaloCellList* myList = 0; + double totalEnergy = 0.; + CaloCellList* myList = 0; - SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; - - if (isubcalo == 0) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta, muPhi, m_isolationConeTile, m_isolationConeTile); - } - else if (isubcalo == 1) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LARHEC; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta, muPhi, m_isolationConeLArHEC, m_isolationConeLArHEC); - } - else if (isubcalo == 2) - { - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; - myList = new CaloCellList(cellContainer,iCalo); - myList->select(muEta, muPhi, m_isolationConeLArEM, m_isolationConeLArEM); + SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; + const CaloNoise* noiseCDO = *noiseHdl; + + if (isubcalo == 0) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_isolationConeTile, m_isolationConeTile); + } else if (isubcalo == 1) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LARHEC; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_isolationConeLArHEC, m_isolationConeLArHEC); + } else if (isubcalo == 2) { + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; + myList = new CaloCellList(cellContainer, iCalo); + myList->select(muEta, muPhi, m_isolationConeLArEM, m_isolationConeLArEM); } - if (myList) - { - // get last cell (as CaloCellList->back() method doesn't work) - const CaloCell* lastCell= 0; - CaloCellList::list_iterator cell = myList->begin(); - for ( ; cell != myList->end(); ++cell) lastCell = *cell; - - // flag core in each sampling - for (int coreSampling = 0; coreSampling != 4; ++coreSampling) - { - const CaloCell* coreCell = 0; - double coreRadius = 0.; - for (cell = myList->begin(); cell != myList->end(); ++cell) - { - int sampling = -1; - if (isubcalo == 0) - { - sampling = m_tileID->sample((**cell).ID()); - } - else if (isubcalo == 1) - { - sampling = m_hecID->sampling((**cell).ID()); - } - else if (isubcalo == 2) - { - sampling = m_emID->sampling((**cell).ID()); - } - if (*cell != lastCell && sampling != coreSampling) continue; - - double deltaEta = (**cell).eta() - muEta; - double deltaPhi = (**cell).phi() - muPhi; - double radius = deltaEta*deltaEta + deltaPhi*deltaPhi; - - if (sampling == coreSampling) - { - if (! coreCell || radius < coreRadius) - { - coreCell = *cell; - coreRadius = radius; - } - } - - if (*cell != lastCell || ! coreCell) continue; - - for (CaloCellList::list_iterator cell2 = myList->begin(); - cell2 != myList->end(); - ++cell2) - { - if (isubcalo == 0) - { - sampling = m_tileID->sample((**cell2).ID()); - } - else if (isubcalo == 1) - { - sampling = m_hecID->sampling((**cell2).ID()); - } - else if (isubcalo == 2) - { - sampling = m_emID->sampling((**cell2).ID()); - } - if (sampling != coreSampling) continue; - - double cellEnergy = (**cell2).energy(); - double noiseRms = noiseCDO->getNoise((**cell2).ID(),(**cell2).gain()); - // looser selection for core cell where at least mip is expected - bool cellSelected = cellEnergy > m_sigmasAboveNoise * noiseRms; - if (*cell2 == coreCell - && cellEnergy > m_sigmasAboveNoiseCore * noiseRms) cellSelected = true; - - if (cellSelected) totalEnergy += cellEnergy; - } - } - } - - // store result in caloMeas - if (isubcalo == 0) - { - caloMeas.Tile_Isolation(totalEnergy); - } - else if (isubcalo == 1) - { - caloMeas.LArHEC_Isolation(totalEnergy); - } - else if (isubcalo == 2) - { - caloMeas.LArEM_Isolation(totalEnergy); - } + if (myList) { + // get last cell (as CaloCellList->back() method doesn't work) + const CaloCell* lastCell = 0; + CaloCellList::list_iterator cell = myList->begin(); + for (; cell != myList->end(); ++cell) lastCell = *cell; + + // flag core in each sampling + for (int coreSampling = 0; coreSampling != 4; ++coreSampling) { + const CaloCell* coreCell = 0; + double coreRadius = 0.; + for (cell = myList->begin(); cell != myList->end(); ++cell) { + int sampling = -1; + if (isubcalo == 0) { + sampling = m_tileID->sample((**cell).ID()); + } else if (isubcalo == 1) { + sampling = m_hecID->sampling((**cell).ID()); + } else if (isubcalo == 2) { + sampling = m_emID->sampling((**cell).ID()); + } + if (*cell != lastCell && sampling != coreSampling) continue; + + double deltaEta = (**cell).eta() - muEta; + double deltaPhi = (**cell).phi() - muPhi; + double radius = deltaEta * deltaEta + deltaPhi * deltaPhi; + + if (sampling == coreSampling) { + if (!coreCell || radius < coreRadius) { + coreCell = *cell; + coreRadius = radius; + } + } + + if (*cell != lastCell || !coreCell) continue; + + for (CaloCellList::list_iterator cell2 = myList->begin(); cell2 != myList->end(); ++cell2) { + if (isubcalo == 0) { + sampling = m_tileID->sample((**cell2).ID()); + } else if (isubcalo == 1) { + sampling = m_hecID->sampling((**cell2).ID()); + } else if (isubcalo == 2) { + sampling = m_emID->sampling((**cell2).ID()); + } + if (sampling != coreSampling) continue; + + double cellEnergy = (**cell2).energy(); + double noiseRms = noiseCDO->getNoise((**cell2).ID(), (**cell2).gain()); + // looser selection for core cell where at least mip is expected + bool cellSelected = cellEnergy > m_sigmasAboveNoise * noiseRms; + if (*cell2 == coreCell && cellEnergy > m_sigmasAboveNoiseCore * noiseRms) cellSelected = true; + + if (cellSelected) totalEnergy += cellEnergy; + } + } + } + + // store result in caloMeas + if (isubcalo == 0) { + caloMeas.Tile_Isolation(totalEnergy); + } else if (isubcalo == 1) { + caloMeas.LArHEC_Isolation(totalEnergy); + } else if (isubcalo == 2) { + caloMeas.LArEM_Isolation(totalEnergy); + } } delete myList; } double -MuidCaloEnergyMeas::energyInTile(const CaloCellContainer* cellContainer, - double mu_eta, - double mu_phi, - int sample, - int cone) const +MuidCaloEnergyMeas::energyInTile(const CaloCellContainer* cellContainer, double mu_eta, double mu_phi, int sample, + int cone) const { // Tile Cal // sample_number @@ -651,72 +499,59 @@ MuidCaloEnergyMeas::energyInTile(const CaloCellContainer* cellContainer, // 1 --> Sampling 2 // 2 --> Sampling 3 // 3 --> ITC - - //int i,j,k; - SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; + // int i,j,k; - double tileTotalEnergy=0.; - double tileTestEnergy=0.; - - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; - CaloCellList myList(cellContainer,iCalo); // Construct the list - if(cone == 1) - { - myList.select(mu_eta,mu_phi,0.15,0.15); - } - else if(cone == 2) - { - myList.select(mu_eta,mu_phi,0.3,0.3); - } - else - { - myList.select(mu_eta,mu_phi,0.,0.); + SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; + const CaloNoise* noiseCDO = *noiseHdl; + + double tileTotalEnergy = 0.; + double tileTestEnergy = 0.; + + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::TILE; + CaloCellList myList(cellContainer, iCalo); // Construct the list + if (cone == 1) { + myList.select(mu_eta, mu_phi, 0.15, 0.15); + } else if (cone == 2) { + myList.select(mu_eta, mu_phi, 0.3, 0.3); + } else { + myList.select(mu_eta, mu_phi, 0., 0.); } - + CaloCellList::list_iterator ilistfirst = myList.begin(); CaloCellList::list_iterator ilistlast = myList.end(); - - int count=0; - double lowest_threshold=0.; - for(;ilistfirst!=ilistlast;ilistfirst++) - { - double cellEnergy= (*ilistfirst)->energy(); - double noise_rms=noiseCDO->getNoise((*ilistfirst)->ID(),(*ilistfirst)->gain()); - - if( cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise - && m_tileID->sample((*ilistfirst)->ID()) == sample) - { - count+=1; - - ATH_MSG_DEBUG( "Energy : " << (*ilistfirst)->energy() - << " Sampling: " << m_tileID->sample((*ilistfirst)->ID()) - << " Radius :" << (*ilistfirst)->caloDDE()->r() - << " Eta : " << (*ilistfirst)->eta() - << " Phi : " << (*ilistfirst)->phi() - << " Noise Level : " << noise_rms ); - - tileTotalEnergy += cellEnergy; - } - else - { - tileTestEnergy += cellEnergy; - } + + int count = 0; + double lowest_threshold = 0.; + for (; ilistfirst != ilistlast; ilistfirst++) { + double cellEnergy = (*ilistfirst)->energy(); + double noise_rms = noiseCDO->getNoise((*ilistfirst)->ID(), (*ilistfirst)->gain()); + + if (cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise + && m_tileID->sample((*ilistfirst)->ID()) == sample) + { + count += 1; + + ATH_MSG_DEBUG("Energy : " << (*ilistfirst)->energy() + << " Sampling: " << m_tileID->sample((*ilistfirst)->ID()) << " Radius :" + << (*ilistfirst)->caloDDE()->r() << " Eta : " << (*ilistfirst)->eta() + << " Phi : " << (*ilistfirst)->phi() << " Noise Level : " << noise_rms); + + tileTotalEnergy += cellEnergy; + } else { + tileTestEnergy += cellEnergy; + } } - - ATH_MSG_DEBUG( " counted " << count << " test energy " << tileTestEnergy ); + + ATH_MSG_DEBUG(" counted " << count << " test energy " << tileTestEnergy); return tileTotalEnergy; } double -MuidCaloEnergyMeas::energyInLArHEC(const CaloCellContainer* cellContainer, - double mu_eta, - double mu_phi, - int sample, - int cone) const -{ +MuidCaloEnergyMeas::energyInLArHEC(const CaloCellContainer* cellContainer, double mu_eta, double mu_phi, int sample, + int cone) const +{ // Look in the LarHEC calorimeter // i.e. loop over its cells /* sample_number @@ -726,134 +561,113 @@ MuidCaloEnergyMeas::energyInLArHEC(const CaloCellContainer* cellContainer, 3 --> Sampling 4 */ - //int i,j,k; + // int i,j,k; SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; - double larhecTotal=0.; - + const CaloNoise* noiseCDO = *noiseHdl; + double larhecTotal = 0.; + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LARHEC; - CaloCellList myList(cellContainer,iCalo); // Construct the list - if(cone == 1) - { - myList.select(mu_eta,mu_phi,0.15,0.15); - } - else if(cone == 2) - { - myList.select(mu_eta,mu_phi,0.3,0.3); + CaloCellList myList(cellContainer, iCalo); // Construct the list + if (cone == 1) { + myList.select(mu_eta, mu_phi, 0.15, 0.15); + } else if (cone == 2) { + myList.select(mu_eta, mu_phi, 0.3, 0.3); + } else { + myList.select(mu_eta, mu_phi, 0., 0.); } - else - { - myList.select(mu_eta,mu_phi,0.,0.); - } - + CaloCellList::list_iterator ilistfirst = myList.begin(); CaloCellList::list_iterator ilistlast = myList.end(); - //std::vector<const CaloCell*> new_cell_list; - int count=0; - constexpr double lowest_threshold = 4.*150.; - - for(;ilistfirst!=ilistlast;ilistfirst++) - { - double cellEnergy= (*ilistfirst)->energy(); - const double noise_rms =noiseCDO->getNoise((*ilistfirst)->ID(),(*ilistfirst)->gain()); - if (cellEnergy > lowest_threshold - && cellEnergy > noise_rms * m_sigmasAboveNoise - && m_hecID->sampling((*ilistfirst)->ID()) == sample) - { - count+=1; - //new_cell_list.push_back(*ilistfirst); - - ATH_MSG_DEBUG( "Energy : " << (*ilistfirst)->energy() - << " Sampling: " << m_hecID->sampling((*ilistfirst)->ID()) - << " z :" << (*ilistfirst)->caloDDE()->z() - << " Eta : " << (*ilistfirst)->eta() - << " Phi : " << (*ilistfirst)->phi() - << " Noise Level : " << noise_rms); - - larhecTotal += (*ilistfirst)->energy(); - } + // std::vector<const CaloCell*> new_cell_list; + int count = 0; + constexpr double lowest_threshold = 4. * 150.; + + for (; ilistfirst != ilistlast; ilistfirst++) { + double cellEnergy = (*ilistfirst)->energy(); + const double noise_rms = noiseCDO->getNoise((*ilistfirst)->ID(), (*ilistfirst)->gain()); + if (cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise + && m_hecID->sampling((*ilistfirst)->ID()) == sample) + { + count += 1; + // new_cell_list.push_back(*ilistfirst); + + ATH_MSG_DEBUG("Energy : " << (*ilistfirst)->energy() + << " Sampling: " << m_hecID->sampling((*ilistfirst)->ID()) + << " z :" << (*ilistfirst)->caloDDE()->z() << " Eta : " << (*ilistfirst)->eta() + << " Phi : " << (*ilistfirst)->phi() << " Noise Level : " << noise_rms); + + larhecTotal += (*ilistfirst)->energy(); + } } - - ATH_MSG_DEBUG( "larhec counted " << count ); - + + ATH_MSG_DEBUG("larhec counted " << count); + return larhecTotal; } double -MuidCaloEnergyMeas::energyInLArEM(const CaloCellContainer* cellContainer, - double mu_eta, - double mu_phi, - int sample, - int cone) const -{ - // Look in the LarEM calorimeter - // i.e. loop over its cells - /* - sample_number +MuidCaloEnergyMeas::energyInLArEM(const CaloCellContainer* cellContainer, double mu_eta, double mu_phi, int sample, + int cone) const +{ + // Look in the LarEM calorimeter + // i.e. loop over its cells + /* + sample_number 0 --> Presampler 1 --> Sampling 1 2 --> Sampling 2 - 3 --> Sampling 3 + 3 --> Sampling 3 */ - //int i,j,k; + // int i,j,k; SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey}; - const CaloNoise* noiseCDO=*noiseHdl; + const CaloNoise* noiseCDO = *noiseHdl; - double emTotalEnergy=0.; + double emTotalEnergy = 0.; - CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; - CaloCellList myList(cellContainer,iCalo); // Construct the list - if(cone == 1) - { - myList.select(mu_eta,mu_phi,0.075,0.075); // 0.1 0.1 - } - else if(cone == 2) - { - myList.select(mu_eta,mu_phi,0.15,0.15); - } - else - { - myList.select(mu_eta,mu_phi,0.,0.); + CaloCell_ID::SUBCALO iCalo = CaloCell_ID::LAREM; + CaloCellList myList(cellContainer, iCalo); // Construct the list + if (cone == 1) { + myList.select(mu_eta, mu_phi, 0.075, 0.075); // 0.1 0.1 + } else if (cone == 2) { + myList.select(mu_eta, mu_phi, 0.15, 0.15); + } else { + myList.select(mu_eta, mu_phi, 0., 0.); } CaloCellList::list_iterator ilistfirst = myList.begin(); CaloCellList::list_iterator ilistlast = myList.end(); - - //std::vector<const CaloCell*> new_cell_list; - int count=0; - - double lowest_threshold = 4.* 50.; - - for(;ilistfirst!=ilistlast;ilistfirst++) - { - double cellEnergy= (*ilistfirst)->energy(); - const double noise_rms =noiseCDO->getNoise((*ilistfirst)->ID(),(*ilistfirst)->gain()); - - if( cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise - && m_emID->sampling((*ilistfirst)->ID()) == sample) - { - count+=1; - //new_cell_list.push_back(*ilistfirst); - - ATH_MSG_DEBUG( "Energy : " << (*ilistfirst)->energy() - << " Sampling: " << m_emID->sampling((*ilistfirst)->ID()) - << " Radius :" << (*ilistfirst)->caloDDE()->r() - << " z :" << (*ilistfirst)->caloDDE()->z() - << " Eta : " << (*ilistfirst)->eta() - << " Phi : " << (*ilistfirst)->phi() - << " Noise Level : " << noise_rms); - - emTotalEnergy+=(*ilistfirst)->energy(); - } + + // std::vector<const CaloCell*> new_cell_list; + int count = 0; + + double lowest_threshold = 4. * 50.; + + for (; ilistfirst != ilistlast; ilistfirst++) { + double cellEnergy = (*ilistfirst)->energy(); + const double noise_rms = noiseCDO->getNoise((*ilistfirst)->ID(), (*ilistfirst)->gain()); + + if (cellEnergy > lowest_threshold && cellEnergy > noise_rms * m_sigmasAboveNoise + && m_emID->sampling((*ilistfirst)->ID()) == sample) + { + count += 1; + // new_cell_list.push_back(*ilistfirst); + + ATH_MSG_DEBUG("Energy : " << (*ilistfirst)->energy() + << " Sampling: " << m_emID->sampling((*ilistfirst)->ID()) + << " Radius :" << (*ilistfirst)->caloDDE()->r() + << " z :" << (*ilistfirst)->caloDDE()->z() << " Eta : " << (*ilistfirst)->eta() + << " Phi : " << (*ilistfirst)->phi() << " Noise Level : " << noise_rms); + + emTotalEnergy += (*ilistfirst)->energy(); + } } - ATH_MSG_DEBUG( "larem counted " << count ); - + ATH_MSG_DEBUG("larem counted " << count); + return emTotalEnergy; } -} // end of namespace - +} // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx index 98bb45031a0d4a6752aa53768e85bbb8b83d3bb3..c146b92a59f7464df60be2ac97c5868f345d95dd 100755 --- a/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloEnergyTools/src/MuidCaloEnergyTool.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 */ ////////////////////////////////////////////////////////////////////////////// @@ -19,8 +19,11 @@ //<<<<<< INCLUDES >>>>>> -#include <cmath> #include "MuidCaloEnergyTools/MuidCaloEnergyTool.h" + +#include <cmath> + +#include "AthenaKernel/Units.h" #include "MuidEvent/CaloMeas.h" #include "MuidInterfaces/IMuidCaloEnergyMeas.h" #include "MuidInterfaces/IMuidCaloEnergyParam.h" @@ -29,122 +32,81 @@ #include "TrkMaterialOnTrack/MaterialEffectsOnTrack.h" #include "TrkTrack/TrackStateOnSurface.h" #include "muonEvent/CaloEnergy.h" -#include "AthenaKernel/Units.h" namespace Units = Athena::Units; //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> -namespace Rec -{ - -MuidCaloEnergyTool::MuidCaloEnergyTool (const std::string&type, - const std::string&name, - const IInterface*parent) - : AthAlgTool (type, name, parent), - m_caloMeasTool ("Rec::MuidCaloEnergyMeas/MuidCaloEnergyMeas", this), - m_caloParamTool ("Rec::MuidCaloEnergyParam/MuidCaloEnergyParam", this), - m_trackIsolationTool ("Rec::MuidTrackIsolation/MuidTrackIsolation", this), - m_cosmics (false), - m_energyLossMeasurement (true), - m_forceIsolationFailure (false), - m_FSRtreatment (true), - m_MOPparametrization (true), - m_trackIsolation (false), - m_emEtCut (2.5*Units::GeV), - m_emF1Cut (0.15), - m_emMinEnergy ( 2.*Units::GeV), - m_hecMinEnergy (10.*Units::GeV), - m_maxNTracksIso (2), - m_minFinalEnergy ( 0.*Units::GeV), - m_minMuonPt (15.*Units::GeV), - m_countMean (0), - m_countMeasurement (0), - m_countMop (0) +namespace Rec { + +MuidCaloEnergyTool::MuidCaloEnergyTool(const std::string& type, const std::string& name, const IInterface* parent) + : AthAlgTool(type, name, parent), + m_cosmics(false), + m_energyLossMeasurement(true), + m_forceIsolationFailure(false), + m_FSRtreatment(true), + m_MOPparametrization(true), + m_trackIsolation(false), + m_emEtCut(2.5 * Units::GeV), + m_emF1Cut(0.15), + m_emMinEnergy(2. * Units::GeV), + m_hecMinEnergy(10. * Units::GeV), + m_maxNTracksIso(2), + m_minFinalEnergy(0. * Units::GeV), + m_minMuonPt(15. * Units::GeV), + m_countMean(0), + m_countMeasurement(0), + m_countMop(0) { declareInterface<IMuidCaloEnergy>(this); - declareProperty ("CaloMeasTool", m_caloMeasTool); - declareProperty ("CaloParamTool", m_caloParamTool); - declareProperty ("TrackIsolationTool", m_trackIsolationTool); - declareProperty ("Cosmics", m_cosmics); - declareProperty ("EnergyLossMeasurement", m_energyLossMeasurement); - declareProperty ("ForceIsolationFailure", m_forceIsolationFailure); - declareProperty ("FSRtreatment", m_FSRtreatment); - declareProperty ("MopParametrization", m_MOPparametrization); - declareProperty ("TrackIsolation", m_trackIsolation); - declareProperty ("EmEtCut", m_emEtCut); - declareProperty ("EmF1Cut", m_emF1Cut); - declareProperty ("EmMinEnergy", m_emMinEnergy); - declareProperty ("HecMinEnergy", m_hecMinEnergy); - declareProperty ("MaxNTracksIso", m_maxNTracksIso); - declareProperty ("MinFinalEnergy", m_minFinalEnergy); - declareProperty ("MinMuonPt", m_minMuonPt); + declareProperty("Cosmics", m_cosmics); + declareProperty("EnergyLossMeasurement", m_energyLossMeasurement); + declareProperty("ForceIsolationFailure", m_forceIsolationFailure); + declareProperty("FSRtreatment", m_FSRtreatment); + declareProperty("MopParametrization", m_MOPparametrization); + declareProperty("TrackIsolation", m_trackIsolation); + declareProperty("EmEtCut", m_emEtCut); + declareProperty("EmF1Cut", m_emF1Cut); + declareProperty("EmMinEnergy", m_emMinEnergy); + declareProperty("HecMinEnergy", m_hecMinEnergy); + declareProperty("MaxNTracksIso", m_maxNTracksIso); + declareProperty("MinFinalEnergy", m_minFinalEnergy); + declareProperty("MinMuonPt", m_minMuonPt); } -MuidCaloEnergyTool::~MuidCaloEnergyTool (void) -{} +MuidCaloEnergyTool::~MuidCaloEnergyTool(void) {} //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> -StatusCode MuidCaloEnergyTool::initialize() +StatusCode +MuidCaloEnergyTool::initialize() { - if (m_energyLossMeasurement) - { - ATH_MSG_INFO( "Initializing MuidCaloEnergyTool" - << " - package version " << PACKAGE_VERSION - << " - measured calorimeter energy deposition " ); - } - else - { - ATH_MSG_INFO( "Initializing MuidCaloEnergyTool" - << " - package version " << PACKAGE_VERSION - << " - parametrized calorimeter energy deposition " ); + if (m_energyLossMeasurement) { + ATH_MSG_INFO("Initializing MuidCaloEnergyTool" + << " - package version " << PACKAGE_VERSION << " - measured calorimeter energy deposition "); + } else { + ATH_MSG_INFO("Initializing MuidCaloEnergyTool" + << " - package version " << PACKAGE_VERSION << " - parametrized calorimeter energy deposition "); } // get the Tools - if (m_caloParamTool.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_caloParamTool ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_caloParamTool ); - } - - if (m_energyLossMeasurement) - { - if (m_caloMeasTool.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_caloMeasTool ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_caloMeasTool ); - } - - if (m_trackIsolation) - { - if (m_trackIsolationTool.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_trackIsolationTool ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_trackIsolationTool ); - } - } - else - { - ATH_MSG_WARNING( " Using energy measurement without trackIsolation " ); - m_trackIsolationTool.disable(); - } - } - else{ - m_trackIsolationTool.disable(); - m_caloMeasTool.disable(); + ATH_CHECK(m_caloParamTool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_caloParamTool); + + if (m_energyLossMeasurement) { + ATH_CHECK(m_caloMeasTool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_caloMeasTool); + + if (m_trackIsolation) { + ATH_CHECK(m_trackIsolationTool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_trackIsolationTool); + } else { + ATH_MSG_WARNING(" Using energy measurement without trackIsolation "); + m_trackIsolationTool.disable(); + } + } else { + m_trackIsolationTool.disable(); + m_caloMeasTool.disable(); } return StatusCode::SUCCESS; @@ -153,89 +115,73 @@ StatusCode MuidCaloEnergyTool::initialize() StatusCode MuidCaloEnergyTool::finalize() { - ATH_MSG_INFO( "Finalizing MuidCaloEnergyTool." - << " Tracks used mean: " << m_countMean - << ", tracks used mop: " << m_countMop - << ", tracks used measurement: " << m_countMeasurement ); - + ATH_MSG_INFO("Finalizing MuidCaloEnergyTool." + << " Tracks used mean: " << m_countMean << ", tracks used mop: " << m_countMop + << ", tracks used measurement: " << m_countMeasurement); + return StatusCode::SUCCESS; } CaloEnergy* -MuidCaloEnergyTool::energyLoss(double trackMomentum, - double eta, - double phi) const +MuidCaloEnergyTool::energyLoss(double trackMomentum, double eta, double phi) const { // debug - ATH_MSG_VERBOSE( "Muon with : p = " << trackMomentum/Units::GeV - << " Phi = " << phi - << " Eta = " << eta ); + ATH_MSG_VERBOSE("Muon with : p = " << trackMomentum / Units::GeV << " Phi = " << phi << " Eta = " << eta); + - CaloEnergy* caloEnergy = 0; - if (m_energyLossMeasurement) - { - // Energy Dep/Iso from calorimeters (projective assumption) - CaloMeas* caloMeas = m_caloMeasTool->energyMeasurement(eta,phi,eta,phi); - if (caloMeas) - { - caloEnergy = measurement(trackMomentum,eta,phi,caloMeas); - delete caloMeas; - } + if (m_energyLossMeasurement) { + // Energy Dep/Iso from calorimeters (projective assumption) + CaloMeas* caloMeas = m_caloMeasTool->energyMeasurement(eta, phi, eta, phi); + if (caloMeas) { + caloEnergy = measurement(trackMomentum, eta, phi, caloMeas); + delete caloMeas; + } } - if (! caloEnergy) - { - if (m_MOPparametrization) - { - ++m_countMop; - caloEnergy = m_caloParamTool->mopParametrizedEnergy(trackMomentum,eta,phi); - ATH_MSG_VERBOSE( "Selected the Mop Parametrization value! ==> " ); - } - else - { - ++m_countMean; - caloEnergy = m_caloParamTool->meanParametrizedEnergy(trackMomentum,eta,phi); - ATH_MSG_VERBOSE( "Selected the Mean Parametrization value! ==> " ); - } + if (!caloEnergy) { + if (m_MOPparametrization) { + ++m_countMop; + caloEnergy = m_caloParamTool->mopParametrizedEnergy(trackMomentum, eta, phi); + ATH_MSG_VERBOSE("Selected the Mop Parametrization value! ==> "); + } else { + ++m_countMean; + caloEnergy = m_caloParamTool->meanParametrizedEnergy(trackMomentum, eta, phi); + ATH_MSG_VERBOSE("Selected the Mean Parametrization value! ==> "); + } } - - if (msgLvl(MSG::DEBUG)) - { - std::string eLossType = " no Calo !!"; - switch (caloEnergy->energyLossType()) - { - case CaloEnergy::Parametrized: - eLossType = "Parametrized"; - break; - case CaloEnergy::NotIsolated: - eLossType = "NotIsolated "; - break; - case CaloEnergy::MOP: - eLossType = "MOP "; - break; - case CaloEnergy::Tail: - eLossType = "Tail "; - break; - case CaloEnergy::FSRcandidate: - eLossType = "FSRcandidate"; - break; - default: - break; - }; - ATH_MSG_DEBUG( std::setiosflags(std::ios::fixed) << " energyLoss with" - << " momentum =" << std::setw(6) << std::setprecision(1) << trackMomentum/Units::GeV - << " phi =" << std::setw(6) << std::setprecision(3) << phi - << " eta =" << std::setw(6) << std::setprecision(3) << eta - << ". CaloEnergy: deltaE = " << std::setw(8) << std::setprecision(3) - << caloEnergy->deltaE()/Units::GeV - << " +" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaPlusDeltaE()/Units::GeV - << " -" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaMinusDeltaE()/Units::GeV - << " (" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaDeltaE()/Units::GeV - << ") GeV, CaloEnergy::Type " << eLossType ); + + if (msgLvl(MSG::DEBUG)) { + std::string eLossType = " no Calo !!"; + switch (caloEnergy->energyLossType()) { + case CaloEnergy::Parametrized: + eLossType = "Parametrized"; + break; + case CaloEnergy::NotIsolated: + eLossType = "NotIsolated "; + break; + case CaloEnergy::MOP: + eLossType = "MOP "; + break; + case CaloEnergy::Tail: + eLossType = "Tail "; + break; + case CaloEnergy::FSRcandidate: + eLossType = "FSRcandidate"; + break; + default: + break; + }; + ATH_MSG_DEBUG(std::setiosflags(std::ios::fixed) + << " energyLoss with" + << " momentum =" << std::setw(6) << std::setprecision(1) << trackMomentum / Units::GeV + << " phi =" << std::setw(6) << std::setprecision(3) << phi << " eta =" << std::setw(6) + << std::setprecision(3) << eta << ". CaloEnergy: deltaE = " << std::setw(8) + << std::setprecision(3) << caloEnergy->deltaE() / Units::GeV << " +" << std::setw(5) + << std::setprecision(3) << caloEnergy->sigmaPlusDeltaE() / Units::GeV << " -" << std::setw(5) + << std::setprecision(3) << caloEnergy->sigmaMinusDeltaE() / Units::GeV << " (" << std::setw(5) + << std::setprecision(3) << caloEnergy->sigmaDeltaE() / Units::GeV << ") GeV, CaloEnergy::Type " + << eLossType); } return caloEnergy; @@ -243,216 +189,182 @@ MuidCaloEnergyTool::energyLoss(double trackMomentum, const Trk::TrackStateOnSurface* MuidCaloEnergyTool::trackStateOnSurface(const Trk::TrackParameters& middleParameters, - const Trk::TrackParameters* innerParameters, - const Trk::TrackParameters* outerParameters) const + const Trk::TrackParameters* innerParameters, + const Trk::TrackParameters* outerParameters) const { - ATH_MSG_VERBOSE( "Muon with : p = " << middleParameters.momentum().mag()/Units::GeV - << " Phi = " << middleParameters.position().phi() - << " Eta = " << middleParameters.position().eta() ); + ATH_MSG_VERBOSE("Muon with : p = " << middleParameters.momentum().mag() / Units::GeV + << " Phi = " << middleParameters.position().phi() + << " Eta = " << middleParameters.position().eta()); CaloEnergy* caloEnergy = 0; - if (m_energyLossMeasurement) - { - // energy deposition according to the calo measurement - double eta = middleParameters.position().eta(); - double phi = middleParameters.position().phi(); - double etaEM = eta; - double phiEM = phi; - double etaHad = eta; - double phiHad = phi; - if (innerParameters) - { - etaEM = innerParameters->position().eta(); - phiEM = innerParameters->position().phi(); - } - if (outerParameters) - { - etaHad = outerParameters->position().eta(); - phiHad = outerParameters->position().phi(); - } - CaloMeas* caloMeas = m_caloMeasTool->energyMeasurement(etaEM,phiEM,etaHad,phiHad); - if (caloMeas) - { - caloEnergy = measurement(middleParameters.momentum().mag(), - eta, - phi, - caloMeas); - delete caloMeas; - } + if (m_energyLossMeasurement) { + // energy deposition according to the calo measurement + double eta = middleParameters.position().eta(); + double phi = middleParameters.position().phi(); + double etaEM = eta; + double phiEM = phi; + double etaHad = eta; + double phiHad = phi; + if (innerParameters) { + etaEM = innerParameters->position().eta(); + phiEM = innerParameters->position().phi(); + } + if (outerParameters) { + etaHad = outerParameters->position().eta(); + phiHad = outerParameters->position().phi(); + } + CaloMeas* caloMeas = m_caloMeasTool->energyMeasurement(etaEM, phiEM, etaHad, phiHad); + if (caloMeas) { + caloEnergy = measurement(middleParameters.momentum().mag(), eta, phi, caloMeas); + delete caloMeas; + } } - - if (! caloEnergy) - { - // parametrized energy deposition - caloEnergy = energyLoss(middleParameters.momentum().mag(), - middleParameters.position().eta(), - middleParameters.position().phi()); - - // WARN in case of anomalously high loss - if (caloEnergy->deltaE() > 8.*Units::GeV && middleParameters.momentum().mag() < 500.*Units::GeV) - ATH_MSG_WARNING(" high parametrized energy loss: " - << caloEnergy->deltaE()/Units::GeV << " GeV" - << " for p " << middleParameters.momentum().mag()/Units::GeV << " GeV" - << " eta " << middleParameters.position().eta() ); + + if (!caloEnergy) { + // parametrized energy deposition + caloEnergy = energyLoss(middleParameters.momentum().mag(), middleParameters.position().eta(), + middleParameters.position().phi()); + + // WARN in case of anomalously high loss + if (caloEnergy->deltaE() > 8. * Units::GeV && middleParameters.momentum().mag() < 500. * Units::GeV) + ATH_MSG_WARNING(" high parametrized energy loss: " + << caloEnergy->deltaE() / Units::GeV << " GeV" + << " for p " << middleParameters.momentum().mag() / Units::GeV << " GeV" + << " eta " << middleParameters.position().eta()); } // create MEOT owning CaloEnergy std::bitset<Trk::MaterialEffectsBase::NumberOfMaterialEffectsTypes> typePattern(0); typePattern.set(Trk::MaterialEffectsBase::EnergyLossEffects); - const Trk::MaterialEffectsOnTrack* materialEffects = - new const Trk::MaterialEffectsOnTrack(0., - caloEnergy, - middleParameters.associatedSurface(), - typePattern); - + const Trk::MaterialEffectsOnTrack* materialEffects = + new const Trk::MaterialEffectsOnTrack(0., caloEnergy, middleParameters.associatedSurface(), typePattern); + // create TSOS - const Trk::FitQualityOnSurface* fitQoS = 0; - const Trk::MeasurementBase* measurementBase = 0; + const Trk::FitQualityOnSurface* fitQoS = 0; + const Trk::MeasurementBase* measurementBase = 0; std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> pattern(0); pattern.set(Trk::TrackStateOnSurface::CaloDeposit); // debugging - if (msgLvl(MSG::DEBUG)) - { - std::string eLossType = " no Calo !!"; - switch (caloEnergy->energyLossType()) - { - case CaloEnergy::Parametrized: - eLossType = "Parametrized"; - break; - case CaloEnergy::NotIsolated: - eLossType = "NotIsolated "; - break; - case CaloEnergy::MOP: - eLossType = "MOP "; - break; - case CaloEnergy::Tail: - eLossType = "Tail "; - break; - case CaloEnergy::FSRcandidate: - eLossType = "FSRcandidate"; - break; - default: - break; - }; - - ATH_MSG_DEBUG( std::setiosflags(std::ios::fixed) << " trackStateOnSurface with" - << " momentum =" << std::setw(6) << std::setprecision(1) - << middleParameters.momentum().mag()/Units::GeV - << " phi =" << std::setw(6) << std::setprecision(3) - << middleParameters.position().phi() - << " eta =" << std::setw(6) << std::setprecision(3) - << middleParameters.position().eta() - << ". CaloEnergy: deltaE = " << std::setw(8) << std::setprecision(3) - << caloEnergy->deltaE()/Units::GeV - << " +" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaPlusDeltaE()/Units::GeV - << " -" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaMinusDeltaE()/Units::GeV - << " (" << std::setw(5) << std::setprecision(3) - << caloEnergy->sigmaDeltaE()/Units::GeV - << ") GeV, CaloEnergy::Type " << eLossType ); - } - - return new const Trk::TrackStateOnSurface(measurementBase, - &middleParameters, - fitQoS, - materialEffects, - pattern); + if (msgLvl(MSG::DEBUG)) { + std::string eLossType = " no Calo !!"; + switch (caloEnergy->energyLossType()) { + case CaloEnergy::Parametrized: + eLossType = "Parametrized"; + break; + case CaloEnergy::NotIsolated: + eLossType = "NotIsolated "; + break; + case CaloEnergy::MOP: + eLossType = "MOP "; + break; + case CaloEnergy::Tail: + eLossType = "Tail "; + break; + case CaloEnergy::FSRcandidate: + eLossType = "FSRcandidate"; + break; + default: + break; + }; + + ATH_MSG_DEBUG(std::setiosflags(std::ios::fixed) + << " trackStateOnSurface with" + << " momentum =" << std::setw(6) << std::setprecision(1) + << middleParameters.momentum().mag() / Units::GeV << " phi =" << std::setw(6) + << std::setprecision(3) << middleParameters.position().phi() << " eta =" << std::setw(6) + << std::setprecision(3) << middleParameters.position().eta() + << ". CaloEnergy: deltaE = " << std::setw(8) << std::setprecision(3) + << caloEnergy->deltaE() / Units::GeV << " +" << std::setw(5) << std::setprecision(3) + << caloEnergy->sigmaPlusDeltaE() / Units::GeV << " -" << std::setw(5) << std::setprecision(3) + << caloEnergy->sigmaMinusDeltaE() / Units::GeV << " (" << std::setw(5) << std::setprecision(3) + << caloEnergy->sigmaDeltaE() / Units::GeV << ") GeV, CaloEnergy::Type " << eLossType); + } + + return new const Trk::TrackStateOnSurface(measurementBase, &middleParameters, fitQoS, materialEffects, pattern); } //<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> CaloEnergy* -MuidCaloEnergyTool::measurement(double trackMomentum, - double eta, - double phi, - CaloMeas* caloMeas) const +MuidCaloEnergyTool::measurement(double trackMomentum, double eta, double phi, CaloMeas* caloMeas) const { // Mean Energy Loss parametrization - CaloEnergy* caloParamMean = m_caloParamTool->meanParametrizedEnergy(trackMomentum,eta,phi); + CaloEnergy* caloParamMean = m_caloParamTool->meanParametrizedEnergy(trackMomentum, eta, phi); // Mop Energy Loss parametrization - CaloEnergy* caloParamMop = m_caloParamTool->mopParametrizedEnergy(trackMomentum,eta,phi); + CaloEnergy* caloParamMop = m_caloParamTool->mopParametrizedEnergy(trackMomentum, eta, phi); // Mip Energy Loss - CaloEnergy* caloParamMip = m_caloParamTool->meanParametrizedEnergy(10.*Units::GeV,eta,phi); + CaloEnergy* caloParamMip = m_caloParamTool->meanParametrizedEnergy(10. * Units::GeV, eta, phi); // Mop Energy Loss peak - CaloEnergy* mopPeak = m_caloParamTool->mopPeakEnergy(trackMomentum,eta,phi); - + CaloEnergy* mopPeak = m_caloParamTool->mopPeakEnergy(trackMomentum, eta, phi); + // // flag upper hemisphere cosmic // bool cosmic = false; // if (caloParamMop->deltaE() < 0.) cosmic = true; // mop energy deposition - double MopLoss = fabs(caloParamMop->deltaE()); + double MopLoss = fabs(caloParamMop->deltaE()); // mop energy deposition uncertainty - double MopError = mopPeak->sigmaDeltaE(); + double MopError = mopPeak->sigmaDeltaE(); // mop energy deposition corrected - double MopLossCorrected = paramCorrection(trackMomentum,eta,MopLoss,MopError); - + double MopLossCorrected = paramCorrection(trackMomentum, eta, MopLoss, MopError); + // percentage of inert material - const double InertMaterial = m_caloParamTool->x0mapInertMaterial(eta); + const double InertMaterial = m_caloParamTool->x0mapInertMaterial(eta); // percentage of em calorimeter material - const double EmMaterial = m_caloParamTool->x0mapEmMaterial(eta); + const double EmMaterial = m_caloParamTool->x0mapEmMaterial(eta); // percentage of hec calorimeter material - const double HECMaterial = m_caloParamTool->x0mapHecMaterial(eta); + const double HECMaterial = m_caloParamTool->x0mapHecMaterial(eta); // correction for the inert material - double MaterialCorrection = InertMaterial * MopLossCorrected; + double MaterialCorrection = InertMaterial * MopLossCorrected; // scale to get mop loss in em calo - double MopLossEm = MopLoss*m_caloParamTool->emMopFraction(eta); + double MopLossEm = MopLoss * m_caloParamTool->emMopFraction(eta); // fraction of Tile used for the measurement - const double TileMeasurementMaterial = caloMeas->Tile_SamplingFraction(); + const double TileMeasurementMaterial = caloMeas->Tile_SamplingFraction(); // fraction of LArHEC used for the measurement - const double LArHECMeasurementMaterial = caloMeas->LArHEC_SamplingFraction(); + const double LArHECMeasurementMaterial = caloMeas->LArHEC_SamplingFraction(); // fraction of LArEM used for the measurement - const double LArEmMeasurementMaterial = caloMeas->LArEM_SamplingFraction(); + const double LArEmMeasurementMaterial = caloMeas->LArEM_SamplingFraction(); // Measured energy deposition in Tile - const double TileEnergy = caloMeas->Tile_EnergyMeasured(); + const double TileEnergy = caloMeas->Tile_EnergyMeasured(); // Measured energy deposition in E/M - const double EmEnergy = caloMeas->LArEM_EnergyMeasured(); + const double EmEnergy = caloMeas->LArEM_EnergyMeasured(); // Correction for forward calorimetry - double ForwardHECCorrection = 0.; - if (fabs(eta)>2. && caloMeas->LArHEC_EnergyMeasured()>100.) - ForwardHECCorrection = (1. - LArHECMeasurementMaterial) * HECMaterial * MopLossCorrected; - const double LArHECEnergy = caloMeas->LArHEC_EnergyMeasured() + ForwardHECCorrection; // Measured energy deposition in LArHEC - - double TotalMeasuredEnergy = TileEnergy + EmEnergy + LArHECEnergy; - - - ATH_MSG_VERBOSE( "Energy Deposition:Tile= " << TileEnergy/Units::GeV - << ",LArHEC= " << LArHECEnergy/Units::GeV - << ",EM= " << EmEnergy/Units::GeV - << " ForwardHECCorrection " << ForwardHECCorrection/Units::GeV - << " HECMaterial " << HECMaterial - << " MopLossCorrected " << MopLossCorrected/Units::GeV ); - - bool bHEC = false; // performed HEC measurement? - bool bEM = false; // performed Em measurement? - + double ForwardHECCorrection = 0.; + if (fabs(eta) > 2. && caloMeas->LArHEC_EnergyMeasured() > 100.) + ForwardHECCorrection = (1. - LArHECMeasurementMaterial) * HECMaterial * MopLossCorrected; + const double LArHECEnergy = + caloMeas->LArHEC_EnergyMeasured() + ForwardHECCorrection; // Measured energy deposition in LArHEC + + double TotalMeasuredEnergy = TileEnergy + EmEnergy + LArHECEnergy; + + + ATH_MSG_VERBOSE("Energy Deposition:Tile= " << TileEnergy / Units::GeV << ",LArHEC= " << LArHECEnergy / Units::GeV + << ",EM= " << EmEnergy / Units::GeV << " ForwardHECCorrection " + << ForwardHECCorrection / Units::GeV << " HECMaterial " << HECMaterial + << " MopLossCorrected " << MopLossCorrected / Units::GeV); + + bool bHEC = false; // performed HEC measurement? + bool bEM = false; // performed Em measurement? + // If muon isolated, and no significant measurement is made then use the mop parameterization, else the mean - if (fabs(eta)<1.4) - { - if (LArHECEnergy + TileEnergy > 0.1 * MopLoss * HECMaterial) bHEC= true; - } - else if (fabs(eta)>1.8) - { - if (LArHECEnergy + TileEnergy > 0.2 * MopLoss * HECMaterial) bHEC= true; - } - else - { - if (LArHECEnergy + TileEnergy > 0.25 * MopLoss * HECMaterial) bHEC= true; + if (fabs(eta) < 1.4) { + if (LArHECEnergy + TileEnergy > 0.1 * MopLoss * HECMaterial) bHEC = true; + } else if (fabs(eta) > 1.8) { + if (LArHECEnergy + TileEnergy > 0.2 * MopLoss * HECMaterial) bHEC = true; + } else { + if (LArHECEnergy + TileEnergy > 0.25 * MopLoss * HECMaterial) bHEC = true; } - if (EmEnergy > 0.5 * MopLoss * EmMaterial) bEM = true; + if (EmEnergy > 0.5 * MopLoss * EmMaterial) bEM = true; - if (!bHEC) - { -// TotalMeasuredEnergy -= TileEnergy + LArHECEnergy; -// MaterialCorrection += HECMaterial * MopLossCorrected; + if (!bHEC) { + // TotalMeasuredEnergy -= TileEnergy + LArHECEnergy; + // MaterialCorrection += HECMaterial * MopLossCorrected; } - if (!bEM) - { -// TotalMeasuredEnergy -= EmEnergy; -// MaterialCorrection += EmMaterial * MopLossCorrected; + if (!bEM) { + // TotalMeasuredEnergy -= EmEnergy; + // MaterialCorrection += EmMaterial * MopLossCorrected; } double MeasCorrected = TotalMeasuredEnergy + MaterialCorrection; @@ -460,221 +372,173 @@ MuidCaloEnergyTool::measurement(double trackMomentum, // Muons of 10 GeV are already in the relativistic rise region // in order to obtain the mip deposition from the mean energy deposition of 10 GeV muons // should divide by approximately 1.4 (Review of Particle Physics Figure 27.3 p.243) - const double IonizationLoss = (1./1.4) * fabs(caloParamMip->deltaE()); - - double eOverMipCorrectionEm = 0.; - double eOverMipCorrectionHEC = 0.; + const double IonizationLoss = (1. / 1.4) * fabs(caloParamMip->deltaE()); + + double eOverMipCorrectionEm = 0.; + double eOverMipCorrectionHEC = 0.; // Etrue = emip * Emeas // -DE = Emeas - Etrue = Etrue ( 1./emip -1.) - if (bEM) - { - const double emipEM = 0.78; - eOverMipCorrectionEm = - (1./emipEM-1.) * IonizationLoss * EmMaterial * LArEmMeasurementMaterial; - if (EmEnergy + eOverMipCorrectionEm<0.)eOverMipCorrectionEm=0.; + if (bEM) { + const double emipEM = 0.78; + eOverMipCorrectionEm = -(1. / emipEM - 1.) * IonizationLoss * EmMaterial * LArEmMeasurementMaterial; + if (EmEnergy + eOverMipCorrectionEm < 0.) eOverMipCorrectionEm = 0.; } - if (bHEC) - { - const double emipTile = 0.86; - const double emipLAr = 0.94; - const double HECEnergy = TileEnergy + LArHECEnergy; - const double eOverMipCorrectionTile = - (1./emipTile-1.) * TileEnergy / HECEnergy * IonizationLoss * HECMaterial * TileMeasurementMaterial; - const double eOverMipCorrectionLAr = - (1./emipLAr-1.) * LArHECEnergy / HECEnergy * IonizationLoss * HECMaterial * LArHECMeasurementMaterial; - eOverMipCorrectionHEC = eOverMipCorrectionTile + eOverMipCorrectionLAr; - if (LArHECEnergy + TileEnergy + eOverMipCorrectionHEC<0.)eOverMipCorrectionHEC=0.; + if (bHEC) { + const double emipTile = 0.86; + const double emipLAr = 0.94; + const double HECEnergy = TileEnergy + LArHECEnergy; + const double eOverMipCorrectionTile = + -(1. / emipTile - 1.) * TileEnergy / HECEnergy * IonizationLoss * HECMaterial * TileMeasurementMaterial; + const double eOverMipCorrectionLAr = + -(1. / emipLAr - 1.) * LArHECEnergy / HECEnergy * IonizationLoss * HECMaterial * LArHECMeasurementMaterial; + eOverMipCorrectionHEC = eOverMipCorrectionTile + eOverMipCorrectionLAr; + if (LArHECEnergy + TileEnergy + eOverMipCorrectionHEC < 0.) eOverMipCorrectionHEC = 0.; } - const double eOverMipCorrection = eOverMipCorrectionEm + eOverMipCorrectionHEC; + const double eOverMipCorrection = eOverMipCorrectionEm + eOverMipCorrectionHEC; + - // additional offset from high-statistics Z->mumu MC (measured by Peter K 30/11/2011) - double fix1FromPeter[26] = { 0.424104 , 0.479637 , 0.483419 , 0.490242 , 0.52806 , - 0.573582 , 0.822098 , 0.767301 , 0.809919 , 0.658745 , - 0.157187 , 0.413214 , 0.771074 , 0.61815 , 0.350113 , - 0.322785 , 0.479294 , 0.806183 , 0.822161 , 0.757731 , - -0.0857186, -0.0992693, -0.0492252, 0.0650174, 0.261538 , - 0.360413 }; + double fix1FromPeter[26] = {0.424104, 0.479637, 0.483419, 0.490242, 0.52806, 0.573582, 0.822098, + 0.767301, 0.809919, 0.658745, 0.157187, 0.413214, 0.771074, 0.61815, + 0.350113, 0.322785, 0.479294, 0.806183, 0.822161, 0.757731, -0.0857186, + -0.0992693, -0.0492252, 0.0650174, 0.261538, 0.360413}; // (update from Peter K 09/12/2011) - double fix2FromPeter[26] = { -0.647703 , -0.303498 , -0.268645 , -0.261292 , -0.260152 , - -0.269253 , -0.266212 , -0.240837 , -0.130172 , -0.111638 , - -0.329423 , -0.321011 , -0.346050 , -0.305592 , -0.313293 , - -0.317111 , -0.428393 , -0.524839 , -0.599547 , -0.464013 , - -0.159663 , -0.140879 , -0.0975618, 0.0225352, 0.0701925, - -0.24778 }; - int ieta = static_cast<int> (fabs(eta)/0.10); - if (ieta > 25) ieta = 25; - double FinalMeasuredEnergy = MeasCorrected + eOverMipCorrection + - (fix1FromPeter[ieta] + fix2FromPeter[ieta])*Units::GeV; - - ATH_MSG_VERBOSE( "Sum of cells " << (TileEnergy + EmEnergy + LArHECEnergy)/Units::GeV - << " Total energy deposition " << TotalMeasuredEnergy/Units::GeV - << " corrected energy deposition " << MeasCorrected/Units::GeV - << " e/mip corre " << FinalMeasuredEnergy/Units::GeV << std::endl - << "\nFinal Energy Measurement = " << FinalMeasuredEnergy /Units::GeV - //<< "\nMean Energy Deposition = " << MeanLoss/Units::GeV - //<< " - " << MeanErrorLeft/Units::GeV << " + "<< MeanErrorRight/Units::GeV - << "\nMop Energy Deposition = " << MopLoss/Units::GeV << " +- " << MopError/Units::GeV - //<< "\nOld parametrization energy= " << m_caloParamOld->deltaE()/Units::GeV - //<< " +- " << m_caloParamOld->sigmaDeltaE()/Units::GeV - //<< "\nTrack Momentum = " << trackMomentum/Units::GeV - //<< " Eta= " << eta << " Phi= " << phi - << std::endl - << "Final Meas = " << FinalMeasuredEnergy / Units::GeV - << " Mop Dep = " << MopLoss/Units::GeV << " +- " << MopError/Units::GeV ); - - const double HECIso = caloMeas->Tile_Isolation() + caloMeas->LArHEC_Isolation(); - const double EmIso = caloMeas->LArEM_Isolation(); - - const double Theta = 2.*atan(exp(-eta)); - const double pT = trackMomentum*sin(Theta)*Units::MeV; - const double EmCut = m_emMinEnergy + (3.-2.)/(100.-15.)*(pT/Units::GeV-15.)*Units::GeV; - const double HECCut = m_hecMinEnergy; - const double pTCut = m_minMuonPt; - bool PassCut = true; - if (m_forceIsolationFailure - || EmIso > EmCut - || HECIso > HECCut - || pT < pTCut - || FinalMeasuredEnergy < m_minFinalEnergy ) PassCut = false; - - int nTracks = 0; + double fix2FromPeter[26] = {-0.647703, -0.303498, -0.268645, -0.261292, -0.260152, -0.269253, -0.266212, + -0.240837, -0.130172, -0.111638, -0.329423, -0.321011, -0.346050, -0.305592, + -0.313293, -0.317111, -0.428393, -0.524839, -0.599547, -0.464013, -0.159663, + -0.140879, -0.0975618, 0.0225352, 0.0701925, -0.24778}; + int ieta = static_cast<int>(fabs(eta) / 0.10); + if (ieta > 25) ieta = 25; + double FinalMeasuredEnergy = + MeasCorrected + eOverMipCorrection + (fix1FromPeter[ieta] + fix2FromPeter[ieta]) * Units::GeV; + + ATH_MSG_VERBOSE("Sum of cells " << (TileEnergy + EmEnergy + LArHECEnergy) / Units::GeV + << " Total energy deposition " << TotalMeasuredEnergy / Units::GeV + << " corrected energy deposition " << MeasCorrected / Units::GeV << " e/mip corre " + << FinalMeasuredEnergy / Units::GeV << std::endl + << "\nFinal Energy Measurement = " + << FinalMeasuredEnergy / Units::GeV + //<< "\nMean Energy Deposition = " << MeanLoss/Units::GeV + //<< " - " << MeanErrorLeft/Units::GeV << " + "<< MeanErrorRight/Units::GeV + << "\nMop Energy Deposition = " << MopLoss / Units::GeV << " +- " + << MopError / Units::GeV + //<< "\nOld parametrization energy= " << m_caloParamOld->deltaE()/Units::GeV + //<< " +- " << m_caloParamOld->sigmaDeltaE()/Units::GeV + //<< "\nTrack Momentum = " << trackMomentum/Units::GeV + //<< " Eta= " << eta << " Phi= " << phi + << std::endl + << "Final Meas = " << FinalMeasuredEnergy / Units::GeV + << " Mop Dep = " << MopLoss / Units::GeV << " +- " << MopError / Units::GeV); + + const double HECIso = caloMeas->Tile_Isolation() + caloMeas->LArHEC_Isolation(); + const double EmIso = caloMeas->LArEM_Isolation(); + + const double Theta = 2. * atan(exp(-eta)); + const double pT = trackMomentum * sin(Theta) * Units::MeV; + const double EmCut = m_emMinEnergy + (3. - 2.) / (100. - 15.) * (pT / Units::GeV - 15.) * Units::GeV; + const double HECCut = m_hecMinEnergy; + const double pTCut = m_minMuonPt; + bool PassCut = true; + if (m_forceIsolationFailure || EmIso > EmCut || HECIso > HECCut || pT < pTCut + || FinalMeasuredEnergy < m_minFinalEnergy) + PassCut = false; + + int nTracks = 0; // double tracksEnergy = 0.; - if (m_trackIsolation) - { - std::pair<int,double> inner = m_trackIsolationTool->trackIsolation(eta,phi); - // double maxP = m_trackIsolationTool->maxP(); - nTracks = inner.first; - // tracksEnergy = inner.second - maxP; - if (pT < 100.*Units::GeV && nTracks > m_maxNTracksIso) PassCut = false; + if (m_trackIsolation) { + std::pair<int, double> inner = m_trackIsolationTool->trackIsolation(eta, phi); + // double maxP = m_trackIsolationTool->maxP(); + nTracks = inner.first; + // tracksEnergy = inner.second - maxP; + if (pT < 100. * Units::GeV && nTracks > m_maxNTracksIso) PassCut = false; } - ATH_MSG_VERBOSE( "pT= " << pT/Units::GeV << ",HECIso= " << HECIso/Units::GeV - << ",EmIso= " <<EmIso/Units::GeV << ", nTracks= "<< nTracks - << ",PassCut= " << PassCut ); + ATH_MSG_VERBOSE("pT= " << pT / Units::GeV << ",HECIso= " << HECIso / Units::GeV << ",EmIso= " << EmIso / Units::GeV + << ", nTracks= " << nTracks << ",PassCut= " << PassCut); + + CaloEnergy::EnergyLossType lossType = CaloEnergy::NotIsolated; + CaloEnergy* caloEnergy = 0; - CaloEnergy::EnergyLossType lossType = CaloEnergy::NotIsolated; - CaloEnergy* caloEnergy = 0; - // choose between lossTypes MOP, Tail, FSR and NotIsolated according // to measured energy, isolation cut and Et in em - if (FinalMeasuredEnergy < MopLoss + 2. * MopError - && FinalMeasuredEnergy > m_minFinalEnergy) - { - ++m_countMop; - caloEnergy = mopPeak; - mopPeak = 0; - } - else if (PassCut) - { - // tail offset from high-statistics Z->mumu MC (measured by Peter K 09/12/2011), - // but next we try to separate any FSR contribution from the Landau tail - double F1 = 0.; - if (caloMeas->LArEM_EnergyMeasured() > m_emEtCut) - F1 = caloMeas->LArEM_FirstCompartmentEnergy()/caloMeas->LArEM_EnergyMeasured(); - ATH_MSG_VERBOSE( " start Tail and FSR treatment: Et in e.m. " << EmEnergy*sin(Theta)/Units::GeV - << " F1 ratio " << F1); - if (! m_FSRtreatment - || EmEnergy*sin(Theta) < m_emEtCut - || F1 < m_emF1Cut) - { - ++m_countMeasurement; - double FinalEnergyErrorMinus= 0.50 * sqrt(FinalMeasuredEnergy/Units::GeV) * Units::GeV; - double FinalEnergyErrorPlus = 0.50 * sqrt(FinalMeasuredEnergy/Units::GeV) * Units::GeV; - - // overall also have 50% resolution in EC rather than the 70% naively expected from LArHEC - if (LArHECEnergy > 1.*Units::GeV) - { - FinalEnergyErrorMinus = 0.50 * sqrt(FinalMeasuredEnergy/Units::GeV) * Units::GeV; - FinalEnergyErrorPlus = 0.50 * sqrt(FinalMeasuredEnergy/Units::GeV) * Units::GeV; - } - double FinalEnergyError = 0.5*(FinalEnergyErrorMinus + FinalEnergyErrorPlus); - lossType = CaloEnergy::Tail; - caloEnergy = new CaloEnergy(FinalMeasuredEnergy, - FinalEnergyError, - FinalEnergyErrorMinus, - FinalEnergyErrorPlus, - lossType); - ATH_MSG_VERBOSE( " CaloEnergy Tail : " << FinalMeasuredEnergy ); + if (FinalMeasuredEnergy < MopLoss + 2. * MopError && FinalMeasuredEnergy > m_minFinalEnergy) { + ++m_countMop; + caloEnergy = mopPeak; + mopPeak = 0; + } else if (PassCut) { + // tail offset from high-statistics Z->mumu MC (measured by Peter K 09/12/2011), + // but next we try to separate any FSR contribution from the Landau tail + double F1 = 0.; + if (caloMeas->LArEM_EnergyMeasured() > m_emEtCut) + F1 = caloMeas->LArEM_FirstCompartmentEnergy() / caloMeas->LArEM_EnergyMeasured(); + ATH_MSG_VERBOSE(" start Tail and FSR treatment: Et in e.m. " << EmEnergy * sin(Theta) / Units::GeV + << " F1 ratio " << F1); + if (!m_FSRtreatment || EmEnergy * sin(Theta) < m_emEtCut || F1 < m_emF1Cut) { + ++m_countMeasurement; + double FinalEnergyErrorMinus = 0.50 * sqrt(FinalMeasuredEnergy / Units::GeV) * Units::GeV; + double FinalEnergyErrorPlus = 0.50 * sqrt(FinalMeasuredEnergy / Units::GeV) * Units::GeV; + + // overall also have 50% resolution in EC rather than the 70% naively expected from LArHEC + if (LArHECEnergy > 1. * Units::GeV) { + FinalEnergyErrorMinus = 0.50 * sqrt(FinalMeasuredEnergy / Units::GeV) * Units::GeV; + FinalEnergyErrorPlus = 0.50 * sqrt(FinalMeasuredEnergy / Units::GeV) * Units::GeV; + } + double FinalEnergyError = 0.5 * (FinalEnergyErrorMinus + FinalEnergyErrorPlus); + lossType = CaloEnergy::Tail; + caloEnergy = new CaloEnergy(FinalMeasuredEnergy, FinalEnergyError, FinalEnergyErrorMinus, + FinalEnergyErrorPlus, lossType); + ATH_MSG_VERBOSE(" CaloEnergy Tail : " << FinalMeasuredEnergy); + } else { + // significant e.m. deposit and high F1 + double MopErrorEm = MopError * m_caloParamTool->emMopFraction(eta); + double FinalMeasuredEnergyNoEm = FinalMeasuredEnergy - EmEnergy + MopLossEm; + // lossType = CaloEnergy::FSRcandidate; + + ATH_MSG_VERBOSE(" CaloEnergy FSR : EmEnergy " + << EmEnergy << " FinalMeasuredEnergy " << FinalMeasuredEnergy << " MopLossEm " + << MopLossEm << " MopErrorEm " << MopErrorEm << " FinalMeasuredEnergyNoEm " + << FinalMeasuredEnergyNoEm); + if (FinalMeasuredEnergyNoEm < MopLoss + 2. * MopError) { + // small hadronic energy deposit: like NotIsolated (MOP or Mean according to configuration) + lossType = CaloEnergy::NotIsolated; + if (m_MOPparametrization) { + ++m_countMop; + caloEnergy = + new CaloEnergy(caloParamMop->deltaE(), caloParamMop->sigmaDeltaE(), + caloParamMop->sigmaMinusDeltaE(), caloParamMop->sigmaPlusDeltaE(), lossType); + } else { + ++m_countMean; + caloEnergy = + new CaloEnergy(caloParamMean->deltaE(), caloParamMean->sigmaDeltaE(), + caloParamMean->sigmaMinusDeltaE(), caloParamMean->sigmaPlusDeltaE(), lossType); + } + ATH_MSG_VERBOSE(" CaloEnergy FSR : Small deposit, FinalMeasuredEnergyNoEm " + << FinalMeasuredEnergyNoEm << " using Eloss " << caloEnergy->deltaE()); + } else { + // significant hadronic energy deposit + ++m_countMeasurement; + lossType = CaloEnergy::FSRcandidate; + double FinalEnergyErrorNoEm = 0.50 * sqrt(FinalMeasuredEnergyNoEm / Units::GeV) * Units::GeV; + FinalEnergyErrorNoEm = sqrt(FinalEnergyErrorNoEm * FinalEnergyErrorNoEm + MopErrorEm * MopErrorEm); + caloEnergy = new CaloEnergy(FinalMeasuredEnergyNoEm, FinalEnergyErrorNoEm, FinalEnergyErrorNoEm, + FinalEnergyErrorNoEm, lossType); + ATH_MSG_VERBOSE(" CaloEnergy FSR : Large deposit, FinalMeasuredEnergyNoEm " << FinalMeasuredEnergyNoEm); + } + } + } else { + // lossType NotIsolated: MOP or Mean according to configuration + if (m_MOPparametrization) { + ++m_countMop; + caloEnergy = new CaloEnergy(caloParamMop->deltaE(), caloParamMop->sigmaDeltaE(), + caloParamMop->sigmaMinusDeltaE(), caloParamMop->sigmaPlusDeltaE(), lossType); + } else { + ++m_countMean; + caloEnergy = new CaloEnergy(caloParamMean->deltaE(), caloParamMean->sigmaDeltaE(), + caloParamMean->sigmaMinusDeltaE(), caloParamMean->sigmaPlusDeltaE(), lossType); } - else - { - // significant e.m. deposit and high F1 - double MopErrorEm = MopError*m_caloParamTool->emMopFraction(eta); - double FinalMeasuredEnergyNoEm = FinalMeasuredEnergy - EmEnergy + MopLossEm; - //lossType = CaloEnergy::FSRcandidate; - - ATH_MSG_VERBOSE( " CaloEnergy FSR : EmEnergy " << EmEnergy - << " FinalMeasuredEnergy " << FinalMeasuredEnergy - << " MopLossEm " << MopLossEm - << " MopErrorEm " << MopErrorEm - << " FinalMeasuredEnergyNoEm " << FinalMeasuredEnergyNoEm ); - if (FinalMeasuredEnergyNoEm < MopLoss + 2.*MopError) - { - // small hadronic energy deposit: like NotIsolated (MOP or Mean according to configuration) - lossType = CaloEnergy::NotIsolated; - if (m_MOPparametrization) - { - ++m_countMop; - caloEnergy = new CaloEnergy(caloParamMop->deltaE(), - caloParamMop->sigmaDeltaE(), - caloParamMop->sigmaMinusDeltaE(), - caloParamMop->sigmaPlusDeltaE(), - lossType); - } - else - { - ++m_countMean; - caloEnergy = new CaloEnergy(caloParamMean->deltaE(), - caloParamMean->sigmaDeltaE(), - caloParamMean->sigmaMinusDeltaE(), - caloParamMean->sigmaPlusDeltaE(), - lossType); - } - ATH_MSG_VERBOSE( " CaloEnergy FSR : Small deposit, FinalMeasuredEnergyNoEm " - << FinalMeasuredEnergyNoEm - << " using Eloss " << caloEnergy->deltaE()); - } - else - { - // significant hadronic energy deposit - ++m_countMeasurement; - lossType = CaloEnergy::FSRcandidate; - double FinalEnergyErrorNoEm = 0.50 * sqrt(FinalMeasuredEnergyNoEm/Units::GeV) * Units::GeV; - FinalEnergyErrorNoEm = sqrt(FinalEnergyErrorNoEm*FinalEnergyErrorNoEm + - MopErrorEm*MopErrorEm); - caloEnergy = new CaloEnergy(FinalMeasuredEnergyNoEm, - FinalEnergyErrorNoEm, - FinalEnergyErrorNoEm, - FinalEnergyErrorNoEm, - lossType); - ATH_MSG_VERBOSE( " CaloEnergy FSR : Large deposit, FinalMeasuredEnergyNoEm " - << FinalMeasuredEnergyNoEm ); - - } - } - } - else - { - // lossType NotIsolated: MOP or Mean according to configuration - if (m_MOPparametrization) - { - ++m_countMop; - caloEnergy = new CaloEnergy(caloParamMop->deltaE(), - caloParamMop->sigmaDeltaE(), - caloParamMop->sigmaMinusDeltaE(), - caloParamMop->sigmaPlusDeltaE(), - lossType); - } - else - { - ++m_countMean; - caloEnergy = new CaloEnergy(caloParamMean->deltaE(), - caloParamMean->sigmaDeltaE(), - caloParamMean->sigmaMinusDeltaE(), - caloParamMean->sigmaPlusDeltaE(), - lossType); - } } - + // delete the various parametrized CaloEnergy's before return delete caloParamMean; delete caloParamMop; @@ -684,57 +548,47 @@ MuidCaloEnergyTool::measurement(double trackMomentum, return caloEnergy; } -double -MuidCaloEnergyTool::muSpecResolParam(double trackMomentum, - double eta) const +double +MuidCaloEnergyTool::muSpecResolParam(double trackMomentum, double eta) const { - const double Theta = 2.*atan(exp(-eta)); - const double pT = trackMomentum*sin(Theta)/Units::GeV; // pt in GeV - double a = 0.; - double b = 0.; - if (fabs(eta)<1.) - { - a = 0.02255; - b = 7.708e-5; - } - else if (fabs(eta)>1. && fabs(eta)<2.) - { - a = 0.04198; - b = 8.912e-5; - } - else - { - a = 0.02181; - b = 7.282e-5; - } - return sqrt(a*a+ (b*pT)*(b*pT)); + const double Theta = 2. * atan(exp(-eta)); + const double pT = trackMomentum * sin(Theta) / Units::GeV; // pt in GeV + double a = 0.; + double b = 0.; + if (fabs(eta) < 1.) { + a = 0.02255; + b = 7.708e-5; + } else if (fabs(eta) > 1. && fabs(eta) < 2.) { + a = 0.04198; + b = 8.912e-5; + } else { + a = 0.02181; + b = 7.282e-5; + } + return sqrt(a * a + (b * pT) * (b * pT)); } -double -MuidCaloEnergyTool::paramCorrection(double trackMomentum, - double eta, - double MopLoss, - double MopLossSigma) const +double +MuidCaloEnergyTool::paramCorrection(double trackMomentum, double eta, double MopLoss, double MopLossSigma) const { - const double Nsigma = 2.; - double MSres = muSpecResolParam(trackMomentum,eta); - double MSsigma = trackMomentum*MSres; - double sigma = sqrt(MSsigma*MSsigma + MopLossSigma*MopLossSigma); - double sum = 0.; - double weight = 0.; - double xlow = MopLoss - Nsigma * sigma; - if (xlow<0.) xlow = 0.; - double xup = MopLoss + Nsigma * sigma; - int Na = 50; - const double inv_Na = 1. / static_cast<double> (Na); - for (int j = 0; j < Na; ++j) - { - double x = xlow + j*(xup-xlow)*inv_Na; - double w = landau(x,MopLoss,MopLossSigma,true); - sum += x*w; - weight += w; - } - double MopStat = sum/weight; + const double Nsigma = 2.; + double MSres = muSpecResolParam(trackMomentum, eta); + double MSsigma = trackMomentum * MSres; + double sigma = sqrt(MSsigma * MSsigma + MopLossSigma * MopLossSigma); + double sum = 0.; + double weight = 0.; + double xlow = MopLoss - Nsigma * sigma; + if (xlow < 0.) xlow = 0.; + double xup = MopLoss + Nsigma * sigma; + int Na = 50; + const double inv_Na = 1. / static_cast<double>(Na); + for (int j = 0; j < Na; ++j) { + double x = xlow + j * (xup - xlow) * inv_Na; + double w = landau(x, MopLoss, MopLossSigma, true); + sum += x * w; + weight += w; + } + double MopStat = sum / weight; return MopStat; } @@ -745,81 +599,65 @@ MuidCaloEnergyTool::landau(double x, double mpv, double sigma, bool norm) const // This function has been adapted from the CERNLIB routine G110 denlan. // If norm=kTRUE (default is kFALSE) the result is divided by sigma - double p1[5] = {0.4259894875,-0.1249762550, 0.03984243700, -0.006298287635, 0.001511162253}; - double q1[5] = {1.0 ,-0.3388260629, 0.09594393323, -0.01608042283, 0.003778942063}; + double p1[5] = {0.4259894875, -0.1249762550, 0.03984243700, -0.006298287635, 0.001511162253}; + double q1[5] = {1.0, -0.3388260629, 0.09594393323, -0.01608042283, 0.003778942063}; - double p2[5] = {0.1788541609, 0.1173957403, 0.01488850518, -0.001394989411, 0.0001283617211}; - double q2[5] = {1.0 , 0.7428795082, 0.3153932961, 0.06694219548, 0.008790609714}; + double p2[5] = {0.1788541609, 0.1173957403, 0.01488850518, -0.001394989411, 0.0001283617211}; + double q2[5] = {1.0, 0.7428795082, 0.3153932961, 0.06694219548, 0.008790609714}; - double p3[5] = {0.1788544503, 0.09359161662,0.006325387654, 0.00006611667319,-0.000002031049101}; - double q3[5] = {1.0 , 0.6097809921, 0.2560616665, 0.04746722384, 0.006957301675}; + double p3[5] = {0.1788544503, 0.09359161662, 0.006325387654, 0.00006611667319, -0.000002031049101}; + double q3[5] = {1.0, 0.6097809921, 0.2560616665, 0.04746722384, 0.006957301675}; - double p4[5] = {0.9874054407, 118.6723273, 849.2794360, -743.7792444, 427.0262186}; - double q4[5] = {1.0 , 106.8615961, 337.6496214, 2016.712389, 1597.063511}; + double p4[5] = {0.9874054407, 118.6723273, 849.2794360, -743.7792444, 427.0262186}; + double q4[5] = {1.0, 106.8615961, 337.6496214, 2016.712389, 1597.063511}; - double p5[5] = {1.003675074, 167.5702434, 4789.711289, 21217.86767, -22324.94910}; - double q5[5] = {1.0 , 156.9424537, 3745.310488, 9834.698876, 66924.28357}; + double p5[5] = {1.003675074, 167.5702434, 4789.711289, 21217.86767, -22324.94910}; + double q5[5] = {1.0, 156.9424537, 3745.310488, 9834.698876, 66924.28357}; - double p6[5] = {1.000827619, 664.9143136, 62972.92665, 475554.6998, -5743609.109}; - double q6[5] = {1.0 , 651.4101098, 56974.73333, 165917.4725, -2815759.939}; + double p6[5] = {1.000827619, 664.9143136, 62972.92665, 475554.6998, -5743609.109}; + double q6[5] = {1.0, 651.4101098, 56974.73333, 165917.4725, -2815759.939}; - double a1[3] = {0.04166666667,-0.01996527778, 0.02709538966}; + double a1[3] = {0.04166666667, -0.01996527778, 0.02709538966}; - double a2[2] = {-1.845568670,-4.284640743}; + double a2[2] = {-1.845568670, -4.284640743}; if (sigma <= 0) return 0.; - double v = (x-mpv)/sigma; + double v = (x - mpv) / sigma; double u, ue, us, den; - if (v < -5.5) - { - u = exp(v+1.0); - if (u < 1e-10) return 0.0; - ue = exp(-1/u); - us = sqrt(u); - den = 0.3989422803*(ue/us)*(1+(a1[0]+(a1[1]+a1[2]*u)*u)*u); - } - else if (v < -1) - { - u = exp(-v-1); - den = exp(-u)*sqrt(u)* - (p1[0]+(p1[1]+(p1[2]+(p1[3]+p1[4]*v)*v)*v)*v)/ - (q1[0]+(q1[1]+(q1[2]+(q1[3]+q1[4]*v)*v)*v)*v); - } - else if (v < 1) - { - den = (p2[0]+(p2[1]+(p2[2]+(p2[3]+p2[4]*v)*v)*v)*v)/ - (q2[0]+(q2[1]+(q2[2]+(q2[3]+q2[4]*v)*v)*v)*v); - } - else if (v < 5) - { - den = (p3[0]+(p3[1]+(p3[2]+(p3[3]+p3[4]*v)*v)*v)*v)/ - (q3[0]+(q3[1]+(q3[2]+(q3[3]+q3[4]*v)*v)*v)*v); - } - else if (v < 12) - { - u = 1/v; - den = u*u*(p4[0]+(p4[1]+(p4[2]+(p4[3]+p4[4]*u)*u)*u)*u)/ - (q4[0]+(q4[1]+(q4[2]+(q4[3]+q4[4]*u)*u)*u)*u); - } - else if (v < 50) - { - u = 1/v; - den = u*u*(p5[0]+(p5[1]+(p5[2]+(p5[3]+p5[4]*u)*u)*u)*u)/ - (q5[0]+(q5[1]+(q5[2]+(q5[3]+q5[4]*u)*u)*u)*u); - } - else if (v < 300) - { - u = 1/v; - den = u*u*(p6[0]+(p6[1]+(p6[2]+(p6[3]+p6[4]*u)*u)*u)*u)/ - (q6[0]+(q6[1]+(q6[2]+(q6[3]+q6[4]*u)*u)*u)*u); - } - else - { - u = 1/(v-v*log(v)/(v+1)); - den = u*u*(1+(a2[0]+a2[1]*u)*u); + if (v < -5.5) { + u = exp(v + 1.0); + if (u < 1e-10) return 0.0; + ue = exp(-1 / u); + us = sqrt(u); + den = 0.3989422803 * (ue / us) * (1 + (a1[0] + (a1[1] + a1[2] * u) * u) * u); + } else if (v < -1) { + u = exp(-v - 1); + den = exp(-u) * sqrt(u) * (p1[0] + (p1[1] + (p1[2] + (p1[3] + p1[4] * v) * v) * v) * v) + / (q1[0] + (q1[1] + (q1[2] + (q1[3] + q1[4] * v) * v) * v) * v); + } else if (v < 1) { + den = (p2[0] + (p2[1] + (p2[2] + (p2[3] + p2[4] * v) * v) * v) * v) + / (q2[0] + (q2[1] + (q2[2] + (q2[3] + q2[4] * v) * v) * v) * v); + } else if (v < 5) { + den = (p3[0] + (p3[1] + (p3[2] + (p3[3] + p3[4] * v) * v) * v) * v) + / (q3[0] + (q3[1] + (q3[2] + (q3[3] + q3[4] * v) * v) * v) * v); + } else if (v < 12) { + u = 1 / v; + den = u * u * (p4[0] + (p4[1] + (p4[2] + (p4[3] + p4[4] * u) * u) * u) * u) + / (q4[0] + (q4[1] + (q4[2] + (q4[3] + q4[4] * u) * u) * u) * u); + } else if (v < 50) { + u = 1 / v; + den = u * u * (p5[0] + (p5[1] + (p5[2] + (p5[3] + p5[4] * u) * u) * u) * u) + / (q5[0] + (q5[1] + (q5[2] + (q5[3] + q5[4] * u) * u) * u) * u); + } else if (v < 300) { + u = 1 / v; + den = u * u * (p6[0] + (p6[1] + (p6[2] + (p6[3] + p6[4] * u) * u) * u) * u) + / (q6[0] + (q6[1] + (q6[2] + (q6[3] + q6[4] * u) * u) * u) * u); + } else { + u = 1 / (v - v * log(v) / (v + 1)); + den = u * u * (1 + (a2[0] + a2[1] * u) * u); } if (!norm) return den; - return den/sigma; + return den / sigma; } -} // end of namespace +} // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloMaterialParam.h b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloMaterialParam.h index 18a452c18204848c66ca37454d6358f121c4085f..c3421cb17aea2f772a4c201b76fcae07f2ebaab0 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloMaterialParam.h +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloMaterialParam.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 */ ////////////////////////////////////////////////////////////////////////////// @@ -13,18 +13,19 @@ taken from an inner and an outer layer. Tabulated info taken from a geantino map - + @author Konstantinos.Nikolopoulos@cern.ch, Alan.Poppleton@cern.ch (c) ATLAS Combined Muon software */ ////////////////////////////////////////////////////////////////////////////// #ifndef MUIDCALOSCATTERINGTOOLS_MUIDCALOMATERIALPARAM_H -# define MUIDCALOSCATTERINGTOOLS_MUIDCALOMATERIALPARAM_H +#define MUIDCALOSCATTERINGTOOLS_MUIDCALOMATERIALPARAM_H //<<<<<< INCLUDES >>>>>> #include <vector> + #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" #include "MuidInterfaces/IMuidCaloMaterialParam.h" @@ -32,68 +33,63 @@ //<<<<<< CLASS DECLARATIONS >>>>>> -namespace Rec -{ +namespace Rec { class CaloLayer; - -class MuidCaloMaterialParam: public AthAlgTool, - virtual public IMuidCaloMaterialParam -{ - -public: - MuidCaloMaterialParam (const std::string& type, - const std::string& name, - const IInterface* parent); - ~MuidCaloMaterialParam (void); // destructor - - StatusCode initialize(); - StatusCode finalize(); + +class MuidCaloMaterialParam : public AthAlgTool, virtual public IMuidCaloMaterialParam { + + public: + MuidCaloMaterialParam(const std::string& type, const std::string& name, const IInterface* parent); + ~MuidCaloMaterialParam(void); // destructor + + StatusCode initialize(); + StatusCode finalize(); /**IMuidCaloMaterialParam interface: return inner/middle/outer surface corresponding to eta value */ - const Trk::Surface* innerSurface (double eta) const; - const Trk::Surface* middleSurface (double eta) const; - const Trk::Surface* outerSurface (double eta) const; - + const Trk::Surface* innerSurface(double eta) const; + const Trk::Surface* middleSurface(double eta) const; + const Trk::Surface* outerSurface(double eta) const; + /**IMuidCaloMaterialParam interface: calorimeter layer radiation thickness corresponding to eta value */ - double radiationThickness (double eta) const; - + double radiationThickness(double eta) const; + /**IMuidCaloMaterialParam interface: TrackStateOnSurface for parameters at a scattering surface */ - const Trk::TrackStateOnSurface* trackStateOnSurface ( - const Trk::TrackParameters* parameters) const; + const Trk::TrackStateOnSurface* trackStateOnSurface(const Trk::TrackParameters* parameters) const; -private: + private: // private methods - Trk::Surface* createSurface (double eta, double r, double z, double cotThetaWidth); - StatusCode defineCaloMaterial (void); - + Trk::Surface* createSurface(double eta, double r, double z, double cotThetaWidth); + StatusCode defineCaloMaterial(void); + // helpers, managers, tools - // ToolHandle<Trk::ITrackingVolumeDisplayer> m_surfaceDisplayTool; - ToolHandle<Trk::IGeometryProcessor> m_surfaceDisplayTool; + ToolHandle<Trk::IGeometryProcessor> m_surfaceDisplayTool { + this, + "SurfaceDisplayTool", + "Trk::TrackingVolumeDisplayer/TrackingVolumeDisplayer", + }; // configuration /** if true (set in jobOptions), use TrackingVolumeDisplayer to produce ROOT output.*/ - bool m_produceSurfacesDisplay; + bool m_produceSurfacesDisplay; // data from geantino map - organized at initialize - double m_binSize; - std::vector<const CaloLayer*> m_caloInnerLayers; - std::vector<const CaloLayer*> m_caloOuterLayers; - std::vector<const Trk::Surface*> m_innerBackwardSurfaces; - std::vector<const Trk::Surface*> m_innerForwardSurfaces; - std::vector<const Trk::Surface*> m_middleBackwardSurfaces; - std::vector<const Trk::Surface*> m_middleForwardSurfaces; - const unsigned m_numberBins; - std::vector<const Trk::Surface*> m_outerBackwardSurfaces; - std::vector<const Trk::Surface*> m_outerForwardSurfaces; - std::vector<double> m_radiationThickness; + double m_binSize; + std::vector<const CaloLayer*> m_caloInnerLayers; + std::vector<const CaloLayer*> m_caloOuterLayers; + std::vector<const Trk::Surface*> m_innerBackwardSurfaces; + std::vector<const Trk::Surface*> m_innerForwardSurfaces; + std::vector<const Trk::Surface*> m_middleBackwardSurfaces; + std::vector<const Trk::Surface*> m_middleForwardSurfaces; + const unsigned m_numberBins; + std::vector<const Trk::Surface*> m_outerBackwardSurfaces; + std::vector<const Trk::Surface*> m_outerForwardSurfaces; + std::vector<double> m_radiationThickness; }; - -} // end of namespace - -#endif // MUIDCALOSCATTERINGTOOLS_MUIDCALOMATERIALPARAM_H +} // namespace Rec +#endif // MUIDCALOSCATTERINGTOOLS_MUIDCALOMATERIALPARAM_H diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h index e5ba69501f5e74437c42fee75aff70365a294c7a..a52c1da685a76ce1799bbcad757c61a80a040aa0 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.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 */ ////////////////////////////////////////////////////////////////////////////// @@ -11,7 +11,7 @@ This tool retrieves the appropriate parametrized scattering centres and hybrid (measured + parametrized) energy deposit evaluation using the IMuidCaloMaterialParam and IMuidCaloEnergy interfaces - + @author Alan.Poppleton@cern.ch (c) ATLAS Combined Muon software */ @@ -24,92 +24,102 @@ #include "AthenaBaseComps/AthAlgTool.h" // For magneticfield -#include "MagFieldConditions/AtlasFieldCacheCondObj.h" -#include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h" +#include <atomic> + #include "GaudiKernel/ServiceHandle.h" #include "GaudiKernel/ToolHandle.h" -#include <atomic> +#include "MagFieldConditions/AtlasFieldCacheCondObj.h" +#include "MuidInterfaces/IMuidCaloEnergy.h" +#include "MuidInterfaces/IMuidCaloMaterialParam.h" +#include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h" +#include "TrkExInterfaces/IPropagator.h" //<<<<<< CLASS DECLARATIONS >>>>>> -namespace Trk -{ - class IPropagator; - class MagneticFieldProperties; -} +namespace Trk { +class MagneticFieldProperties; +} // namespace Trk + +namespace Rec { -namespace Rec -{ -class IMuidCaloEnergy; -class IMuidCaloMaterialParam; +class MuidCaloTrackStateOnSurface : public AthAlgTool, virtual public IMuidCaloTrackStateOnSurface { -class MuidCaloTrackStateOnSurface: public AthAlgTool, - virtual public IMuidCaloTrackStateOnSurface -{ + public: + MuidCaloTrackStateOnSurface(const std::string& type, const std::string& name, const IInterface* parent); + ~MuidCaloTrackStateOnSurface(void); // destructor -public: - MuidCaloTrackStateOnSurface (const std::string& type, - const std::string& name, - const IInterface* parent); - ~MuidCaloTrackStateOnSurface (void); // destructor - - StatusCode initialize(); - StatusCode finalize(); + StatusCode initialize(); + StatusCode finalize(); /**IMuidCaloTrackStateOnSurface interface: to get the 3 scattering and energy deposit TSOS'es representing the calorimeter. The input TrackParameters may be anywhere along the track. */ - std::vector<const Trk::TrackStateOnSurface*>* caloTSOS( - const Trk::TrackParameters& parameters) const; - + std::vector<const Trk::TrackStateOnSurface*>* caloTSOS(const Trk::TrackParameters& parameters) const; + /**IMuidCaloTrackStateOnSurface interface: to get individually the scattering TSOS'es representing the calorimeter. The input TrackParameters may be anywhere along the track. */ - const Trk::TrackStateOnSurface* innerTSOS (const Trk::TrackParameters& parameters) const; - const Trk::TrackStateOnSurface* outerTSOS (const Trk::TrackParameters& parameters) const; - + const Trk::TrackStateOnSurface* innerTSOS(const Trk::TrackParameters& parameters) const; + const Trk::TrackStateOnSurface* outerTSOS(const Trk::TrackParameters& parameters) const; + /**IMuidCaloTrackStateOnSurface interface: to get the energy deposit TSOS representing the calorimeter. The input TrackParameters may be anywhere along the track, but when the inner or outer parameters are provided they must be expressed at the appropriate surface. The return TSOS surface is at the material midpoint. */ - const Trk::TrackStateOnSurface* middleTSOS(const Trk::TrackParameters& middleParameters, - const Trk::TrackParameters* innerParameters, - const Trk::TrackParameters* outerParameters) const; - -private: + const Trk::TrackStateOnSurface* middleTSOS(const Trk::TrackParameters& middleParameters, + const Trk::TrackParameters* innerParameters, + const Trk::TrackParameters* outerParameters) const; + + private: // private methods - const Trk::TrackParameters* innerParameters (const Trk::TrackParameters& parameters) const; - const Trk::TrackParameters* middleParameters (const Trk::TrackParameters& parameters) const; - const Trk::TrackParameters* outerParameters (const Trk::TrackParameters& parameters) const; - bool useEtaPhiFromDirection ( - const Trk::TrackParameters& parameters) const; - + const Trk::TrackParameters* innerParameters(const Trk::TrackParameters& parameters) const; + const Trk::TrackParameters* middleParameters(const Trk::TrackParameters& parameters) const; + const Trk::TrackParameters* outerParameters(const Trk::TrackParameters& parameters) const; + bool useEtaPhiFromDirection(const Trk::TrackParameters& parameters) const; + // helpers, managers, tools - ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyDeposit; - ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam; - ToolHandle<Rec::IMuidCaloMaterialParam> m_caloMaterialParam; - Trk::MagneticFieldProperties* m_magFieldProperties; - ToolHandle<Trk::IPropagator> m_propagator; + ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyDeposit{ + this, + "CaloEnergyDeposit", + "Rec::MuidCaloEnergyTool/MuidCaloEnergyTool", + }; + ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam{ + this, + "CaloEnergyParam", + "Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", + }; + ToolHandle<Rec::IMuidCaloMaterialParam> m_caloMaterialParam{ + this, + "CaloMaterialParam", + "Rec::MuidCaloMaterialParam/MuidCaloMaterialParam", + }; + ToolHandle<Trk::IPropagator> m_propagator{ + this, + "Propagator", + "Trk::IntersectorWrapper/IntersectorWrapper", + }; + + Trk::MagneticFieldProperties* m_magFieldProperties; + // Read handle for conditions object to get the field cache - SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey{ + this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; // configurable cut-off values - double m_minCaloRadius; - double m_minRemainingEnergy; - double m_paramPtCut; - + double m_minCaloRadius; + double m_minRemainingEnergy; + double m_paramPtCut; + // counters (for finalize) - mutable std::atomic_int m_count; - mutable std::atomic_int m_countArbitrarySolution; - mutable std::atomic_int m_countCompleteFailure; - mutable std::atomic_int m_countInnerFailure; - mutable std::atomic_int m_countOuterFailure; + mutable std::atomic_int m_count; + mutable std::atomic_int m_countArbitrarySolution; + mutable std::atomic_int m_countCompleteFailure; + mutable std::atomic_int m_countInnerFailure; + mutable std::atomic_int m_countOuterFailure; }; -} // end of namespace - -#endif // MUIDCALOSCATTERINGTOOLS_MUIDCALOTRACKSTATEONSURFACE_H - +} // namespace Rec +#endif // MUIDCALOSCATTERINGTOOLS_MUIDCALOTRACKSTATEONSURFACE_H diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidMaterialEffectsOnTrackProvider.h b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidMaterialEffectsOnTrackProvider.h index c2a7ab47be2e9db669aa0320029f7eba6c4616bd..d75fa583793dda3c3843258e9e88a474dd97b73e 100644 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidMaterialEffectsOnTrackProvider.h +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/MuidCaloScatteringTools/MuidMaterialEffectsOnTrackProvider.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 */ /////////////////////////////////////////////////////////////////// @@ -11,57 +11,64 @@ // Gaudi #include "AthenaBaseComps/AthAlgTool.h" -#include "TrkDetDescrInterfaces/IMaterialEffectsOnTrackProvider.h" -#include "TrkSurfaces/PlaneSurface.h" - -#include "TrkParameters/TrackParameters.h" +#include "GaudiKernel/ToolHandle.h" #include "MuidInterfaces/IMuidCaloTrackStateOnSurface.h" +#include "TrkDetDescrInterfaces/IMaterialEffectsOnTrackProvider.h" #include "TrkExInterfaces/IMultipleScatteringUpdator.h" - -#include "GaudiKernel/ToolHandle.h" +#include "TrkParameters/TrackParameters.h" +#include "TrkSurfaces/PlaneSurface.h" namespace Trk { - class Surface; +class Surface; } - /** @class MuidMaterialEffectsOnTrackProvider - - @author thijs.cornelissen@cern.ch - */ -namespace Rec{ - class MuidMaterialEffectsOnTrackProvider : public AthAlgTool, - virtual public Trk::IMaterialEffectsOnTrackProvider { - +/** @class MuidMaterialEffectsOnTrackProvider + +@author thijs.cornelissen@cern.ch +*/ +namespace Rec { +class MuidMaterialEffectsOnTrackProvider : public AthAlgTool, virtual public Trk::IMaterialEffectsOnTrackProvider { + public: - - /** AlgTool like constructor */ - MuidMaterialEffectsOnTrackProvider(const std::string&,const std::string&,const IInterface*); - - /**Virtual destructor*/ - virtual ~MuidMaterialEffectsOnTrackProvider(); - - /** AlgTool initailize method.*/ - StatusCode initialize(); - /** AlgTool finalize method */ - StatusCode finalize(); - - /** return all MaterialLayers associated to this track **/ - std::vector< Trk::MaterialEffectsOnTrack > extrapolationSurfacesAndEffects(const Trk::TrackingVolume& , - const Trk::IPropagator& , - const Trk::TrackParameters& , - const Trk::Surface& , - Trk::PropDirection , - - Trk::ParticleHypothesis ) const; - private: - - ToolHandle< Rec::IMuidCaloTrackStateOnSurface > m_calotsos; - ToolHandle< Rec::IMuidCaloTrackStateOnSurface > m_calotsosparam; - ToolHandle< Trk::IMultipleScatteringUpdator > m_scattool; - - - bool m_cosmics; + /** AlgTool like constructor */ + MuidMaterialEffectsOnTrackProvider(const std::string&, const std::string&, const IInterface*); + + /**Virtual destructor*/ + virtual ~MuidMaterialEffectsOnTrackProvider(); + + /** AlgTool initailize method.*/ + StatusCode initialize(); + /** AlgTool finalize method */ + StatusCode finalize(); + + /** return all MaterialLayers associated to this track **/ + std::vector<Trk::MaterialEffectsOnTrack> extrapolationSurfacesAndEffects(const Trk::TrackingVolume&, + const Trk::IPropagator&, + const Trk::TrackParameters&, + const Trk::Surface&, Trk::PropDirection, + + Trk::ParticleHypothesis) const; + + private: + ToolHandle<Rec::IMuidCaloTrackStateOnSurface> m_calotsos{ + this, + "TSOSTool", + "Rec::MuidCaloTrackStateOnSurface/MuidCaloTrackStateOnSurface", + }; + ToolHandle<Rec::IMuidCaloTrackStateOnSurface> m_calotsosparam{ + this, + "TSOSToolParam", + "", + }; + ToolHandle<Trk::IMultipleScatteringUpdator> m_scattool{ + this, + "MultipleScatteringTool", + "Trk::MultipleScatteringUpdator/AtlasMultipleScatteringUpdator", }; - } // end namespace -#endif // MuidMaterialEffectsOnTrackProvider_H + + bool m_cosmics; +}; +} // namespace Rec + +#endif // MuidMaterialEffectsOnTrackProvider_H diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloMaterialParam.cxx b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloMaterialParam.cxx index 608b90f3a496ec2283fede9fff5c9fd955afe033..23e030f7e57e94b33b02e08048c466d95d4aae9a 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloMaterialParam.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloMaterialParam.cxx @@ -7,7 +7,7 @@ // AlgTool containing a calorimeter material parametrization. // This parametrization represents the Coulomb scattering between the InDet // and MuonSpectrometer entrance. -// +// // Parametrized positions and thicknesses (CaloLayers) are stored // as a function of eta assuming any track will 'see' 2 scattering centres, // taken from an inner and an outer layer. @@ -20,12 +20,14 @@ //<<<<<< INCLUDES >>>>>> +#include "MuidCaloScatteringTools/MuidCaloMaterialParam.h" + #include <cmath> #include <iomanip> #include <iostream> + #include "GaudiKernel/SystemOfUnits.h" #include "GeoPrimitives/GeoPrimitives.h" -#include "MuidCaloScatteringTools/MuidCaloMaterialParam.h" #include "MuidEvent/CaloLayer.h" #include "TrkMaterialOnTrack/MaterialEffectsOnTrack.h" #include "TrkSurfaces/CylinderSurface.h" @@ -35,53 +37,35 @@ //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> -namespace Rec -{ - -MuidCaloMaterialParam::MuidCaloMaterialParam (const std::string& type, - const std::string& name, - const IInterface* parent) - : AthAlgTool (type, name, parent), - m_surfaceDisplayTool ("Trk::TrackingVolumeDisplayer/TrackingVolumeDisplayer"), - m_produceSurfacesDisplay (false), - m_binSize (1), - m_numberBins (277) +namespace Rec { + +MuidCaloMaterialParam::MuidCaloMaterialParam(const std::string& type, const std::string& name, const IInterface* parent) + : AthAlgTool(type, name, parent), m_produceSurfacesDisplay(false), m_binSize(1), m_numberBins(277) { declareInterface<IMuidCaloMaterialParam>(this); - declareProperty("SurfaceDisplayTool", m_surfaceDisplayTool); - declareProperty("ProduceSurfacesFile", m_produceSurfacesDisplay); + declareProperty("ProduceSurfacesFile", m_produceSurfacesDisplay); } -MuidCaloMaterialParam::~MuidCaloMaterialParam (void) -{} +MuidCaloMaterialParam::~MuidCaloMaterialParam(void) {} //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> StatusCode MuidCaloMaterialParam::initialize() { - ATH_MSG_INFO( "Initializing MuidCaloMaterialParam" ); + ATH_MSG_INFO("Initializing MuidCaloMaterialParam"); // get the display tool - if (m_produceSurfacesDisplay) - { - if (m_surfaceDisplayTool.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_surfaceDisplayTool ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_surfaceDisplayTool ); - } + if (m_produceSurfacesDisplay) { + ATH_CHECK(m_surfaceDisplayTool.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_surfaceDisplayTool); + } else { + m_surfaceDisplayTool.disable(); } - else{ - m_surfaceDisplayTool.disable(); - } - + // setup up CaloMaterial - m_caloInnerLayers.reserve(2*m_numberBins); - m_caloOuterLayers.reserve(2*m_numberBins); + m_caloInnerLayers.reserve(2 * m_numberBins); + m_caloOuterLayers.reserve(2 * m_numberBins); m_innerBackwardSurfaces.reserve(m_numberBins); m_innerForwardSurfaces.reserve(m_numberBins); m_middleBackwardSurfaces.reserve(m_numberBins); @@ -89,25 +73,21 @@ MuidCaloMaterialParam::initialize() m_outerBackwardSurfaces.reserve(m_numberBins); m_outerForwardSurfaces.reserve(m_numberBins); m_radiationThickness.reserve(m_numberBins); - - if (StatusCode::SUCCESS != defineCaloMaterial()) - { - ATH_MSG_FATAL( " inconsistent eta binning - check setup " ); - return StatusCode::FAILURE; + + if (StatusCode::SUCCESS != defineCaloMaterial()) { + ATH_MSG_FATAL(" inconsistent eta binning - check setup "); + return StatusCode::FAILURE; } - if (msgLvl(MSG::DEBUG)) - { - for (std::vector<const CaloLayer*>::const_iterator lay = m_caloOuterLayers.begin(); - lay != m_caloOuterLayers.end(); - ++lay) - { - //if((**lay).Zmax()>0.) - if ((**lay).Z()>0.) - { - (**lay).print(); - } - } + if (msgLvl(MSG::DEBUG)) { + for (std::vector<const CaloLayer*>::const_iterator lay = m_caloOuterLayers.begin(); + lay != m_caloOuterLayers.end(); ++lay) + { + // if((**lay).Zmax()>0.) + if ((**lay).Z() > 0.) { + (**lay).print(); + } + } } return StatusCode::SUCCESS; @@ -116,346 +96,377 @@ MuidCaloMaterialParam::initialize() StatusCode MuidCaloMaterialParam::finalize() { - ATH_MSG_DEBUG( "Finalizing MuidCaloMaterialParam" ); - + ATH_MSG_DEBUG("Finalizing MuidCaloMaterialParam"); + for (std::vector<const Trk::Surface*>::iterator s = m_innerBackwardSurfaces.begin(); - s != m_innerBackwardSurfaces.end(); - ++s) - delete *s; + s != m_innerBackwardSurfaces.end(); ++s) + delete *s; for (std::vector<const Trk::Surface*>::iterator s = m_innerForwardSurfaces.begin(); - s != m_innerForwardSurfaces.end(); - ++s) - delete *s; + s != m_innerForwardSurfaces.end(); ++s) + delete *s; for (std::vector<const Trk::Surface*>::iterator s = m_middleBackwardSurfaces.begin(); - s != m_middleBackwardSurfaces.end(); - ++s) - delete *s; + s != m_middleBackwardSurfaces.end(); ++s) + delete *s; for (std::vector<const Trk::Surface*>::iterator s = m_middleForwardSurfaces.begin(); - s != m_middleForwardSurfaces.end(); - ++s) - delete *s; + s != m_middleForwardSurfaces.end(); ++s) + delete *s; for (std::vector<const Trk::Surface*>::iterator s = m_outerBackwardSurfaces.begin(); - s != m_outerBackwardSurfaces.end(); - ++s) - delete *s; + s != m_outerBackwardSurfaces.end(); ++s) + delete *s; for (std::vector<const Trk::Surface*>::iterator s = m_outerForwardSurfaces.begin(); - s != m_outerForwardSurfaces.end(); - ++s) - delete *s; - - for (std::vector<const CaloLayer*>::const_iterator lay = m_caloInnerLayers.begin(); - lay != m_caloInnerLayers.end(); - ++lay) - delete *lay; - for (std::vector<const CaloLayer*>::const_iterator lay = m_caloOuterLayers.begin(); - lay != m_caloOuterLayers.end(); - ++lay) - delete *lay; - + s != m_outerForwardSurfaces.end(); ++s) + delete *s; + + for (std::vector<const CaloLayer*>::const_iterator lay = m_caloInnerLayers.begin(); lay != m_caloInnerLayers.end(); + ++lay) + delete *lay; + for (std::vector<const CaloLayer*>::const_iterator lay = m_caloOuterLayers.begin(); lay != m_caloOuterLayers.end(); + ++lay) + delete *lay; + return StatusCode::SUCCESS; } const Trk::Surface* -MuidCaloMaterialParam::innerSurface (double eta) const +MuidCaloMaterialParam::innerSurface(double eta) const { - if (eta < 0.) - { - unsigned bin = static_cast<unsigned>(-eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " backwards bin " << bin ); - return m_innerBackwardSurfaces[bin]; + if (eta < 0.) { + unsigned bin = static_cast<unsigned>(-eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " innerSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " backwards bin " << bin); + return m_innerBackwardSurfaces[bin]; + } else if (eta > 0.) { + unsigned bin = static_cast<unsigned>(eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " innerSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " forward bin " << bin); + return m_innerForwardSurfaces[bin]; } - else if (eta > 0.) - { - unsigned bin = static_cast<unsigned>(eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin " << bin ); - return m_innerForwardSurfaces[bin]; - } - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin 0" ); - + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) + << " innerSurface: eta " << std::setw(7) << std::setprecision(3) << eta << " forward bin 0"); + return m_innerForwardSurfaces[0]; } const Trk::Surface* -MuidCaloMaterialParam::middleSurface (double eta) const +MuidCaloMaterialParam::middleSurface(double eta) const { - if (eta < 0.) - { - unsigned bin = static_cast<unsigned>(-eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " backwards bin " << bin ); - return m_middleBackwardSurfaces[bin]; - } - else if (eta > 0.) - { - unsigned bin = static_cast<unsigned>(eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin " << bin ); - return m_middleForwardSurfaces[bin]; + if (eta < 0.) { + unsigned bin = static_cast<unsigned>(-eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " middleSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " backwards bin " << bin); + return m_middleBackwardSurfaces[bin]; + } else if (eta > 0.) { + unsigned bin = static_cast<unsigned>(eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " middleSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " forward bin " << bin); + return m_middleForwardSurfaces[bin]; } - - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin 0" ); - + + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) + << " middleSurface: eta " << std::setw(7) << std::setprecision(3) << eta << " forward bin 0"); + return m_middleForwardSurfaces[0]; } const Trk::Surface* -MuidCaloMaterialParam::outerSurface (double eta) const +MuidCaloMaterialParam::outerSurface(double eta) const { - if (eta < 0.) - { - unsigned bin = static_cast<unsigned>(-eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " backwards bin " << bin ); - return m_outerBackwardSurfaces[bin]; - } - else if (eta > 0.) - { - unsigned bin = static_cast<unsigned>(eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; - - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin " << bin ); - return m_outerForwardSurfaces[bin]; + if (eta < 0.) { + unsigned bin = static_cast<unsigned>(-eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " outerSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " backwards bin " << bin); + return m_outerBackwardSurfaces[bin]; + } else if (eta > 0.) { + unsigned bin = static_cast<unsigned>(eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; + + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) << " outerSurface: eta " << std::setw(7) + << std::setprecision(3) << eta << " forward bin " << bin); + return m_outerForwardSurfaces[bin]; } - ATH_MSG_VERBOSE( std::setiosflags(std::ios::fixed) - << " outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta - << " forward bin 0" ); - + ATH_MSG_VERBOSE(std::setiosflags(std::ios::fixed) + << " outerSurface: eta " << std::setw(7) << std::setprecision(3) << eta << " forward bin 0"); + return m_outerForwardSurfaces[0]; } double -MuidCaloMaterialParam::radiationThickness (double eta) const +MuidCaloMaterialParam::radiationThickness(double eta) const { - if (eta < 0.) - { - unsigned bin = static_cast<unsigned>(-eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; + if (eta < 0.) { + unsigned bin = static_cast<unsigned>(-eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; - return m_radiationThickness[bin]; - } - else if (eta > 0.) - { - unsigned bin = static_cast<unsigned>(eta/m_binSize); - if (bin >= m_numberBins) bin = m_numberBins - 1; + return m_radiationThickness[bin]; + } else if (eta > 0.) { + unsigned bin = static_cast<unsigned>(eta / m_binSize); + if (bin >= m_numberBins) bin = m_numberBins - 1; - return m_radiationThickness[bin]; + return m_radiationThickness[bin]; } return m_radiationThickness[0]; } const Trk::TrackStateOnSurface* -MuidCaloMaterialParam::trackStateOnSurface (const Trk::TrackParameters* trackParameters) const +MuidCaloMaterialParam::trackStateOnSurface(const Trk::TrackParameters* trackParameters) const { // find radiationThickness corresponding to surface // FIXME: use Surface* look-up method for execution speed - double thickness = radiationThickness(trackParameters->position().eta()); - const Trk::MaterialEffectsBase* materialEffects = - new const Trk::MaterialEffectsOnTrack(thickness,trackParameters->associatedSurface()); - + double thickness = radiationThickness(trackParameters->position().eta()); + const Trk::MaterialEffectsBase* materialEffects = + new const Trk::MaterialEffectsOnTrack(thickness, trackParameters->associatedSurface()); + // create TSOS - const Trk::FitQualityOnSurface* fitQoS = 0; - const Trk::MeasurementBase* measurementBase = 0; + const Trk::FitQualityOnSurface* fitQoS = 0; + const Trk::MeasurementBase* measurementBase = 0; std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> pattern(0); pattern.set(Trk::TrackStateOnSurface::Scatterer); - ATH_MSG_VERBOSE( " trackStateOnSurface::Scatterer with radiationThickness " << thickness ); - - return new const Trk::TrackStateOnSurface(measurementBase, - trackParameters, - fitQoS, - materialEffects, - pattern); + ATH_MSG_VERBOSE(" trackStateOnSurface::Scatterer with radiationThickness " << thickness); + + return new const Trk::TrackStateOnSurface(measurementBase, trackParameters, fitQoS, materialEffects, pattern); } //<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> Trk::Surface* -MuidCaloMaterialParam::createSurface (double eta, double r, double z, double cotThetaWidth) +MuidCaloMaterialParam::createSurface(double eta, double r, double z, double cotThetaWidth) { - Amg::Transform3D* transform = new Amg::Transform3D; + Amg::Transform3D* transform = new Amg::Transform3D; transform->setIdentity(); - (*transform) = Amg::Translation3D(0.,0.,z); - double halfZLength = cotThetaWidth*r; - if (std::abs(eta) < 1.4) - { - Trk::CylinderSurface* surf = new Trk::CylinderSurface(transform,r,halfZLength); - if (m_produceSurfacesDisplay) m_surfaceDisplayTool->process(*surf).ignore(); - return surf; - } - else - { - double halfRLength = halfZLength*r/std::abs(z); - Trk::DiscSurface* surf = new Trk::DiscSurface(transform, r-halfRLength, r+halfRLength); - if (m_produceSurfacesDisplay) m_surfaceDisplayTool->process(*surf).ignore(); - return surf; + (*transform) = Amg::Translation3D(0., 0., z); + double halfZLength = cotThetaWidth * r; + if (std::abs(eta) < 1.4) { + Trk::CylinderSurface* surf = new Trk::CylinderSurface(transform, r, halfZLength); + if (m_produceSurfacesDisplay) m_surfaceDisplayTool->process(*surf).ignore(); + return surf; + } else { + double halfRLength = halfZLength * r / std::abs(z); + Trk::DiscSurface* surf = new Trk::DiscSurface(transform, r - halfRLength, r + halfRLength); + if (m_produceSurfacesDisplay) m_surfaceDisplayTool->process(*surf).ignore(); + return surf; } } StatusCode -MuidCaloMaterialParam::defineCaloMaterial (void) +MuidCaloMaterialParam::defineCaloMaterial(void) { // careful - need const int declaration for array => check consistency - const int N = 277; + const int N = 277; if (static_cast<int>(m_numberBins) != N) return StatusCode::FAILURE; - - // In meters... be careful!!! - //const double mean[N] = {2.90771,2.78248,2.83172,2.7975,2.76139,2.88316,2.83738,2.81438,2.83947,2.87006,2.8278,2.85738,2.86536,2.94242,2.83682,2.96257,2.96406,2.86074,2.89693,2.83767,2.85071,2.99601,3.01353,2.89679,2.90693,2.93785,2.93202,2.93902,2.95558,2.91682,2.96795,3.07245,2.99349,2.98052,3.11216,3.02759,3.12314,2.99859,3.14099,3.04129,3.17957,3.07913,3.20328,3.11009,3.12813,3.24812,3.26814,3.17714,3.16095,3.3125,3.32224,3.19366,3.21848,3.21796,3.25126,3.268,3.31347,3.42457,3.29278,3.33556,3.3819,3.39939,3.51691,3.36272,3.37978,3.39153,3.38534,3.50773,3.61067,3.30092,3.5418,3.49208,3.53835,3.53299,3.60777,3.32772,3.38532,3.48208,3.54515,3.77164,3.71523,3.91961,3.80365,3.84777,3.88416,4.06013,4.1111,3.94053,3.9722,3.96949,4.03478,4.09423,4.14198,4.38723,4.28485,4.33281,4.3333,4.41784,4.43311,4.45871,4.54202,4.64106,4.69047,4.65375,4.77979,4.78705,4.82244,4.883,4.89827,4.94015,4.92729,4.97583,4.97669,4.99448,5.25401,5.29072,5.10841,5.32148,5.22758,5.26328,5.28108,5.49924,5.49748,5.18736,5.18277,5.4169,5.31641,5.33159,5.20546,5.21829,5.21831,5.24387,5.25622,5.26771,5.29139,5.31036,5.33198,5.34383,5.34278,5.33719,5.34692,5.34394,5.34866,5.35532,5.38633,5.35792,5.40507,5.44075,5.43697,5.36688,5.3615,5.34395,5.351,5.33692,5.40554,5.32767,5.30937,5.27858,5.24888,5.22321,5.18993,5.16593,5.15314,5.19365,5.10601,5.09906,5.14761,5.11907,5.09005,5.08759,5.12649,5.09114,5.10094,5.11952,5.14246,5.15773,5.20285,5.23313,5.26284,5.29047,5.31104,5.31609,5.34698,5.32669,5.32644,5.33017,5.32103,5.3161,5.30679,5.29896,5.28471,5.29577,5.28692,5.28526,5.28018,5.25654,5.27276,5.26505,5.25626,5.25022,5.22271,5.23219,5.24233,5.23496,5.22445,5.22157,5.22442,5.21315,5.19474,5.20876,5.20789,5.18328,5.19939,5.19362,5.1882,5.17646,5.18578,5.21858,5.30511,5.28661,5.28584,5.3002,5.29541,5.28864,5.30157,5.28195,5.29587,5.28504,5.29397,5.29198,5.28954,5.28545,5.28473,5.28091,5.27896,5.281,5.28209,5.27643,5.27176,5.28034,5.26778,5.26428,5.27236,5.26271,5.25728,5.20309,5.26363,5.25403,5.26598,5.27713,5.2639,5.34616,5.34954,5.34928,5.34872,5.34628,5.34574,5.3471,5.35188,5.34754,5.34501,5.34445,5.34497,5.34499,5.34479,5.33511,5.34532,5.33912,5.3364,5.34464,5.34311,5.27807,5.31777,5.3388,5.33045,5.32491,5.33117,5.33274}; - - const double mean[N] = {2.90896,2.85532,2.83093,2.8064,2.76147,2.77842,2.84819,2.85462,2.84207,2.8698,2.85196,2.85928,2.86565,2.85887,2.86074,2.86888,2.87614,2.88714,2.89461,2.88509,2.89893,2.90348,2.9149,2.92062,2.93808,2.93909,2.95316,2.96446,2.95808,2.9744,2.98252,2.99579,3.0031,3.00655,3.01533,3.02955,3.0375,3.04185,3.04363,3.06828,3.07989,3.08877,3.10764,3.11947,3.14111,3.14608,3.16545,3.1774,3.19129,3.20832,3.21966,3.2294,3.2477,3.26422,3.28213,3.29407,3.31355,3.31759,3.33572,3.36416,3.38337,3.40047,3.42178,3.44093,3.46112,3.469,3.48594,3.50981,3.49446,3.48858,3.47374,3.5025,3.53872,3.53273,3.47625,3.44053,3.44348,3.49941,3.54464,3.60332,3.71618,3.75569,3.80481,3.84988,3.88482,3.90896,3.93518,3.96212,3.98705,4.03085,4.0863,4.1386,4.18874,4.24235,4.28526,4.33191,4.37922,4.42264,4.47627,4.52819,4.58994,4.64149,4.69026,4.74336,4.78171,4.81408,4.84981,4.88344,4.9096,4.94122,4.96842,4.99079,5.02283,5.06858,5.08828,5.12193,5.15831,5.1959,5.22796,5.26302,5.28034,5.31236,5.30035,5.28938,5.30971,5.30201,5.3224,5.33088,5.27099,5.21831,5.23592,5.24828,5.26303,5.26884,5.29259,5.30454,5.32996,5.34636,5.34636,5.36077,5.36379,5.3704,5.37932,5.38896,5.39967,5.40373,5.41283,5.44188,5.42873,5.43097,5.4239,5.40874,5.41333,5.40596,5.39171,5.37567,5.35638,5.31926,5.29116,5.26111,5.23343,5.20337,5.17801,5.15636,5.14166,5.16448,5.16522,5.13663,5.11057,5.09843,5.14826,5.11023,5.11505,5.13523,5.15454,5.17912,5.21404,5.246,5.27176,5.29481,5.31911,5.33475,5.35133,5.34602,5.33701,5.3328,5.32425,5.32026,5.31533,5.31104,5.30473,5.30016,5.29413,5.28658,5.28047,5.27475,5.2677,5.26156,5.25584,5.24831,5.24262,5.23702,5.23091,5.22422,5.21841,5.21265,5.2077,5.20334,5.19879,5.19395,5.18991,5.18564,5.18073,5.17633,5.17276,5.16907,5.1658,5.29633,5.29401,5.29103,5.29047,5.2896,5.28996,5.2899,5.28791,5.28734,5.28593,5.28437,5.28506,5.28519,5.28436,5.2837,5.28259,5.28195,5.28128,5.28153,5.28072,5.28068,5.28069,5.27997,5.27685,5.27733,5.27693,5.27541,5.27407,5.27409,5.27443,5.27419,5.27407,5.27377,5.27264,5.34869,5.3483,5.34923,5.34963,5.34951,5.34925,5.34931,5.34959,5.34892,5.34872,5.34848,5.34837,5.34681,5.34619,5.34639,5.34711,5.34672,5.34638,5.34594,5.3456,5.34591,5.34566,5.34428,5.33676,5.3333,5.33278}; - - //const double rms[N] = {0.824679,0.782446,0.818811,0.806885,0.803704,0.871136,0.813056,0.788195,0.814913,0.827358,0.803204,0.822611,0.823937,0.856411,0.809335,0.856246,0.863831,0.814316,0.837086,0.816152,0.827546,0.856583,0.868094,0.818259,0.827974,0.836275,0.827927,0.830695,0.841271,0.837476,0.853636,0.887113,0.852725,0.85005,0.889713,0.863394,0.906837,0.858824,0.905646,0.864854,0.916142,0.884857,0.92623,0.890286,0.893136,0.927233,0.93955,0.901352,0.910599,0.946087,0.953492,0.914146,0.919538,0.922878,0.926503,0.92716,0.941653,0.985742,0.947067,0.9437,0.968053,0.97057,1.01549,0.935575,0.936608,0.942302,0.937645,1.00356,1.05201,0.883722,1.04139,1.02598,1.04668,1.0511,1.09945,0.968244,1.01134,1.07265,1.10059,1.18976,1.13585,1.20976,1.17207,1.18968,1.2017,1.27592,1.28886,1.26559,1.28489,1.29385,1.30249,1.30601,1.31771,1.37203,1.34166,1.34777,1.3422,1.36425,1.35728,1.36912,1.38495,1.40415,1.40586,1.40536,1.40853,1.40943,1.4182,1.40153,1.40832,1.40528,1.3878,1.41426,1.39917,1.4051,1.46129,1.46377,1.41189,1.46455,1.44021,1.44527,1.44781,1.51096,1.50057,1.3753,1.34927,1.4508,1.40248,1.38909,1.31386,1.29765,1.29552,1.28221,1.27349,1.25879,1.25227,1.23533,1.22174,1.21283,1.19403,1.18947,1.16907,1.16221,1.14786,1.13494,1.13355,1.10559,1.09656,1.06811,1.06088,1.0577,1.04911,1.05024,1.02118,1.00554,0.989293,0.972336,0.961332,0.954117,0.955509,0.942485,0.927889,0.923071,0.910241,0.906156,0.895033,0.959418,0.948962,0.93796,0.926793,0.899814,0.911334,0.867638,0.867571,0.862463,0.854489,0.857443,0.866902,0.872196,0.86776,0.882162,0.898834,0.898431,0.900525,0.899913,0.892846,0.885463,0.896011,0.897224,0.898276,0.894747,0.891653,0.889951,0.889985,0.890034,0.889848,0.891503,0.881424,0.886063,0.883189,0.887374,0.889464,0.885434,0.880578,0.881069,0.879039,0.880486,0.877794,0.882369,0.879658,0.879052,0.875904,0.882218,0.869874,0.874634,0.873405,0.878323,0.864371,0.936041,0.982519,0.983783,0.984115,0.983673,0.987755,0.987389,0.989652,0.991566,0.982455,0.99419,0.990369,0.991263,0.984783,0.992409,0.994242,0.99489,0.996674,0.995799,0.994068,0.995591,1.00187,0.989916,1.00784,1.00462,1.00311,1.00495,1.00595,0.960289,1.00732,1.01066,1.00818,1.00171,1.01199,0.992116,0.990814,0.994797,0.995172,0.996153,0.996694,0.997064,0.986833,0.994606,0.998802,1.00438,1.00174,1.00119,1.00289,1.00228,1.00238,1.00678,1.00794,1.00604,1.00861,0.963929,1.01359,1.01218,1.01762,1.02796,1.02562,1.02}; - const double rms[N] = {0.823689,0.805241,0.817758,0.805648,0.802719,0.829411,0.808234,0.796944,0.813095,0.826435,0.811776,0.819873,0.823283,0.818004,0.819796,0.820846,0.82749,0.822357,0.818303,0.822916,0.834238,0.821518,0.835878,0.826969,0.83787,0.835485,0.837178,0.842465,0.839582,0.850781,0.847032,0.848794,0.849601,0.85978,0.85481,0.86164,0.866302,0.866074,0.869195,0.874239,0.880656,0.881667,0.888438,0.886809,0.89286,0.892054,0.903708,0.900372,0.904276,0.912044,0.917285,0.92219,0.927522,0.931037,0.935044,0.938616,0.941711,0.946958,0.950666,0.95474,0.967182,0.970128,0.975676,0.97931,0.984179,0.988279,0.995269,1.00143,0.999232,0.998867,0.999908,1.02241,1.0462,1.05131,1.03541,1.02535,1.03805,1.07367,1.09972,1.12079,1.13208,1.15175,1.17083,1.18699,1.20095,1.22169,1.24418,1.26595,1.28708,1.30303,1.31279,1.32175,1.329,1.33418,1.34,1.34675,1.35284,1.36086,1.368,1.37633,1.39387,1.40353,1.40547,1.40902,1.40658,1.40523,1.40309,1.40089,1.40122,1.40212,1.40281,1.40877,1.40972,1.41208,1.41789,1.42165,1.42453,1.42954,1.43856,1.44613,1.44894,1.45408,1.4347,1.41351,1.41201,1.40167,1.39811,1.38846,1.34956,1.29556,1.28353,1.27768,1.26644,1.25752,1.24987,1.23723,1.22353,1.20934,1.19558,1.18253,1.17099,1.15867,1.15074,1.13651,1.12275,1.10774,1.09431,1.06622,1.06609,1.06611,1.06505,1.05314,1.0261,1.00457,0.990423,0.968341,0.964148,0.959084,0.956413,0.943587,0.935617,0.923163,0.913453,0.903224,0.896578,0.925755,0.95124,0.939449,0.925327,0.898027,0.91426,0.875688,0.862338,0.858283,0.857438,0.86037,0.862203,0.870719,0.876149,0.887925,0.895045,0.898852,0.90329,0.895159,0.892505,0.893056,0.900081,0.896356,0.895693,0.891834,0.893339,0.888931,0.888282,0.890026,0.888641,0.886521,0.887356,0.885548,0.882484,0.88512,0.882618,0.88119,0.880995,0.88102,0.88134,0.88315,0.8824,0.880437,0.879697,0.879628,0.878431,0.877552,0.878481,0.878691,0.877373,0.876806,0.875456,0.978556,0.981988,0.985465,0.985556,0.986936,0.984079,0.982189,0.984073,0.984913,0.987486,0.989538,0.987139,0.985936,0.987119,0.988206,0.990297,0.991416,0.992575,0.991251,0.992607,0.992754,0.993668,0.994706,0.996367,0.996439,0.997143,1.0003,1.00234,1.0024,1.00091,1.00194,1.00287,1.00385,1.00475,0.986361,0.988892,0.989372,0.989529,0.989478,0.990144,0.9908,0.990212,0.991309,0.992435,0.993439,0.994017,0.997914,0.99955,0.999073,0.997491,0.99844,0.999279,1.00009,1.00086,1.0004,1.00093,1.00345,1.01321,1.01864,1.0196}; - //const double eta[N] = {0.005,0.015,0.025,0.035,0.045,0.055,0.065,0.075,0.085,0.095,0.105,0.115,0.125,0.135,0.145,0.155,0.165,0.175,0.185,0.195,0.205,0.215,0.225,0.235,0.245,0.255,0.265,0.275,0.285,0.295,0.305,0.315,0.325,0.335,0.345,0.355,0.365,0.375,0.385,0.395,0.405,0.415,0.425,0.435,0.445,0.455,0.465,0.475,0.485,0.495,0.505,0.515,0.525,0.535,0.545,0.555,0.565,0.575,0.585,0.595,0.605,0.615,0.625,0.635,0.645,0.655,0.665,0.675,0.685,0.695,0.705,0.715,0.725,0.735,0.745,0.755,0.765,0.775,0.785,0.795,0.805,0.815,0.825,0.835,0.845,0.855,0.865,0.875,0.885,0.895,0.905,0.915,0.925,0.935,0.945,0.955,0.965,0.975,0.985,0.995,1.005,1.015,1.025,1.035,1.045,1.055,1.065,1.075,1.085,1.095,1.105,1.115,1.125,1.135,1.145,1.155,1.165,1.175,1.185,1.195,1.205,1.215,1.225,1.235,1.245,1.255,1.265,1.275,1.285,1.295,1.305,1.315,1.325,1.335,1.345,1.355,1.365,1.375,1.385,1.395,1.405,1.415,1.425,1.435,1.445,1.455,1.465,1.475,1.485,1.495,1.505,1.515,1.525,1.535,1.545,1.555,1.565,1.575,1.585,1.595,1.605,1.615,1.625,1.635,1.645,1.655,1.665,1.675,1.685,1.695,1.705,1.715,1.725,1.735,1.745,1.755,1.765,1.775,1.785,1.795,1.805,1.815,1.825,1.835,1.845,1.855,1.865,1.875,1.885,1.895,1.905,1.915,1.925,1.935,1.945,1.955,1.965,1.975,1.985,1.995,2.005,2.015,2.025,2.035,2.045,2.055,2.065,2.075,2.085,2.095,2.105,2.115,2.125,2.135,2.145,2.155,2.165,2.175,2.185,2.195,2.205,2.215,2.225,2.235,2.245,2.255,2.265,2.275,2.285,2.295,2.305,2.315,2.325,2.335,2.345,2.355,2.365,2.375,2.385,2.395,2.405,2.415,2.425,2.435,2.445,2.455,2.465,2.475,2.485,2.495,2.505,2.515,2.525,2.535,2.545,2.555,2.565,2.575,2.585,2.595,2.605,2.615,2.625,2.635,2.645,2.655,2.665,2.675,2.685,2.695,2.705,2.715,2.725,2.735,2.745,2.755,2.765,2.775}; - const double eta[N] = {0.005,0.015,0.025,0.035,0.045,0.055,0.065,0.075,0.085,0.095,0.105,0.115,0.125,0.135,0.145,0.155,0.165,0.175,0.185,0.195,0.205,0.215,0.225,0.235,0.245,0.255,0.265,0.275,0.285,0.295,0.305,0.315,0.325,0.335,0.345,0.355,0.365,0.375,0.385,0.395,0.405,0.415,0.425,0.435,0.445,0.455,0.465,0.475,0.485,0.495,0.505,0.515,0.525,0.535,0.545,0.555,0.565,0.575,0.585,0.595,0.605,0.615,0.625,0.635,0.645,0.655,0.665,0.675,0.685,0.695,0.705,0.715,0.725,0.735,0.745,0.755,0.765,0.775,0.785,0.795,0.805,0.815,0.825,0.835,0.845,0.855,0.865,0.875,0.885,0.895,0.905,0.915,0.925,0.935,0.945,0.955,0.965,0.975,0.985,0.995,1.005,1.015,1.025,1.035,1.045,1.055,1.065,1.075,1.085,1.095,1.105,1.115,1.125,1.135,1.145,1.155,1.165,1.175,1.185,1.195,1.205,1.215,1.225,1.235,1.245,1.255,1.265,1.275,1.285,1.295,1.305,1.315,1.325,1.335,1.345,1.355,1.365,1.375,1.385,1.395,1.405,1.415,1.425,1.435,1.445,1.455,1.465,1.475,1.485,1.495,1.505,1.515,1.525,1.535,1.545,1.555,1.565,1.575,1.585,1.595,1.605,1.615,1.625,1.635,1.645,1.655,1.665,1.675,1.685,1.695,1.705,1.715,1.725,1.735,1.745,1.755,1.765,1.775,1.785,1.795,1.805,1.815,1.825,1.835,1.845,1.855,1.865,1.875,1.885,1.895,1.905,1.915,1.925,1.935,1.945,1.955,1.965,1.975,1.985,1.995,2.005,2.015,2.025,2.035,2.045,2.055,2.065,2.075,2.085,2.095,2.105,2.115,2.125,2.135,2.145,2.155,2.165,2.175,2.185,2.195,2.205,2.215,2.225,2.235,2.245,2.255,2.265,2.275,2.285,2.295,2.305,2.315,2.325,2.335,2.345,2.355,2.365,2.375,2.385,2.395,2.405,2.415,2.425,2.435,2.445,2.455,2.465,2.475,2.485,2.495,2.505,2.515,2.525,2.535,2.545,2.555,2.565,2.575,2.585,2.595,2.605,2.615,2.625,2.635,2.645,2.655,2.665,2.675,2.685,2.695,2.705,2.715,2.725,2.735,2.745,2.755,2.765}; + // In meters... be careful!!! + // const double mean[N] = + // {2.90771,2.78248,2.83172,2.7975,2.76139,2.88316,2.83738,2.81438,2.83947,2.87006,2.8278,2.85738,2.86536,2.94242,2.83682,2.96257,2.96406,2.86074,2.89693,2.83767,2.85071,2.99601,3.01353,2.89679,2.90693,2.93785,2.93202,2.93902,2.95558,2.91682,2.96795,3.07245,2.99349,2.98052,3.11216,3.02759,3.12314,2.99859,3.14099,3.04129,3.17957,3.07913,3.20328,3.11009,3.12813,3.24812,3.26814,3.17714,3.16095,3.3125,3.32224,3.19366,3.21848,3.21796,3.25126,3.268,3.31347,3.42457,3.29278,3.33556,3.3819,3.39939,3.51691,3.36272,3.37978,3.39153,3.38534,3.50773,3.61067,3.30092,3.5418,3.49208,3.53835,3.53299,3.60777,3.32772,3.38532,3.48208,3.54515,3.77164,3.71523,3.91961,3.80365,3.84777,3.88416,4.06013,4.1111,3.94053,3.9722,3.96949,4.03478,4.09423,4.14198,4.38723,4.28485,4.33281,4.3333,4.41784,4.43311,4.45871,4.54202,4.64106,4.69047,4.65375,4.77979,4.78705,4.82244,4.883,4.89827,4.94015,4.92729,4.97583,4.97669,4.99448,5.25401,5.29072,5.10841,5.32148,5.22758,5.26328,5.28108,5.49924,5.49748,5.18736,5.18277,5.4169,5.31641,5.33159,5.20546,5.21829,5.21831,5.24387,5.25622,5.26771,5.29139,5.31036,5.33198,5.34383,5.34278,5.33719,5.34692,5.34394,5.34866,5.35532,5.38633,5.35792,5.40507,5.44075,5.43697,5.36688,5.3615,5.34395,5.351,5.33692,5.40554,5.32767,5.30937,5.27858,5.24888,5.22321,5.18993,5.16593,5.15314,5.19365,5.10601,5.09906,5.14761,5.11907,5.09005,5.08759,5.12649,5.09114,5.10094,5.11952,5.14246,5.15773,5.20285,5.23313,5.26284,5.29047,5.31104,5.31609,5.34698,5.32669,5.32644,5.33017,5.32103,5.3161,5.30679,5.29896,5.28471,5.29577,5.28692,5.28526,5.28018,5.25654,5.27276,5.26505,5.25626,5.25022,5.22271,5.23219,5.24233,5.23496,5.22445,5.22157,5.22442,5.21315,5.19474,5.20876,5.20789,5.18328,5.19939,5.19362,5.1882,5.17646,5.18578,5.21858,5.30511,5.28661,5.28584,5.3002,5.29541,5.28864,5.30157,5.28195,5.29587,5.28504,5.29397,5.29198,5.28954,5.28545,5.28473,5.28091,5.27896,5.281,5.28209,5.27643,5.27176,5.28034,5.26778,5.26428,5.27236,5.26271,5.25728,5.20309,5.26363,5.25403,5.26598,5.27713,5.2639,5.34616,5.34954,5.34928,5.34872,5.34628,5.34574,5.3471,5.35188,5.34754,5.34501,5.34445,5.34497,5.34499,5.34479,5.33511,5.34532,5.33912,5.3364,5.34464,5.34311,5.27807,5.31777,5.3388,5.33045,5.32491,5.33117,5.33274}; + + const double mean[N] = { + 2.90896, 2.85532, 2.83093, 2.8064, 2.76147, 2.77842, 2.84819, 2.85462, 2.84207, 2.8698, 2.85196, 2.85928, + 2.86565, 2.85887, 2.86074, 2.86888, 2.87614, 2.88714, 2.89461, 2.88509, 2.89893, 2.90348, 2.9149, 2.92062, + 2.93808, 2.93909, 2.95316, 2.96446, 2.95808, 2.9744, 2.98252, 2.99579, 3.0031, 3.00655, 3.01533, 3.02955, + 3.0375, 3.04185, 3.04363, 3.06828, 3.07989, 3.08877, 3.10764, 3.11947, 3.14111, 3.14608, 3.16545, 3.1774, + 3.19129, 3.20832, 3.21966, 3.2294, 3.2477, 3.26422, 3.28213, 3.29407, 3.31355, 3.31759, 3.33572, 3.36416, + 3.38337, 3.40047, 3.42178, 3.44093, 3.46112, 3.469, 3.48594, 3.50981, 3.49446, 3.48858, 3.47374, 3.5025, + 3.53872, 3.53273, 3.47625, 3.44053, 3.44348, 3.49941, 3.54464, 3.60332, 3.71618, 3.75569, 3.80481, 3.84988, + 3.88482, 3.90896, 3.93518, 3.96212, 3.98705, 4.03085, 4.0863, 4.1386, 4.18874, 4.24235, 4.28526, 4.33191, + 4.37922, 4.42264, 4.47627, 4.52819, 4.58994, 4.64149, 4.69026, 4.74336, 4.78171, 4.81408, 4.84981, 4.88344, + 4.9096, 4.94122, 4.96842, 4.99079, 5.02283, 5.06858, 5.08828, 5.12193, 5.15831, 5.1959, 5.22796, 5.26302, + 5.28034, 5.31236, 5.30035, 5.28938, 5.30971, 5.30201, 5.3224, 5.33088, 5.27099, 5.21831, 5.23592, 5.24828, + 5.26303, 5.26884, 5.29259, 5.30454, 5.32996, 5.34636, 5.34636, 5.36077, 5.36379, 5.3704, 5.37932, 5.38896, + 5.39967, 5.40373, 5.41283, 5.44188, 5.42873, 5.43097, 5.4239, 5.40874, 5.41333, 5.40596, 5.39171, 5.37567, + 5.35638, 5.31926, 5.29116, 5.26111, 5.23343, 5.20337, 5.17801, 5.15636, 5.14166, 5.16448, 5.16522, 5.13663, + 5.11057, 5.09843, 5.14826, 5.11023, 5.11505, 5.13523, 5.15454, 5.17912, 5.21404, 5.246, 5.27176, 5.29481, + 5.31911, 5.33475, 5.35133, 5.34602, 5.33701, 5.3328, 5.32425, 5.32026, 5.31533, 5.31104, 5.30473, 5.30016, + 5.29413, 5.28658, 5.28047, 5.27475, 5.2677, 5.26156, 5.25584, 5.24831, 5.24262, 5.23702, 5.23091, 5.22422, + 5.21841, 5.21265, 5.2077, 5.20334, 5.19879, 5.19395, 5.18991, 5.18564, 5.18073, 5.17633, 5.17276, 5.16907, + 5.1658, 5.29633, 5.29401, 5.29103, 5.29047, 5.2896, 5.28996, 5.2899, 5.28791, 5.28734, 5.28593, 5.28437, + 5.28506, 5.28519, 5.28436, 5.2837, 5.28259, 5.28195, 5.28128, 5.28153, 5.28072, 5.28068, 5.28069, 5.27997, + 5.27685, 5.27733, 5.27693, 5.27541, 5.27407, 5.27409, 5.27443, 5.27419, 5.27407, 5.27377, 5.27264, 5.34869, + 5.3483, 5.34923, 5.34963, 5.34951, 5.34925, 5.34931, 5.34959, 5.34892, 5.34872, 5.34848, 5.34837, 5.34681, + 5.34619, 5.34639, 5.34711, 5.34672, 5.34638, 5.34594, 5.3456, 5.34591, 5.34566, 5.34428, 5.33676, 5.3333, + 5.33278}; + + + // const double rms[N] = + // {0.824679,0.782446,0.818811,0.806885,0.803704,0.871136,0.813056,0.788195,0.814913,0.827358,0.803204,0.822611,0.823937,0.856411,0.809335,0.856246,0.863831,0.814316,0.837086,0.816152,0.827546,0.856583,0.868094,0.818259,0.827974,0.836275,0.827927,0.830695,0.841271,0.837476,0.853636,0.887113,0.852725,0.85005,0.889713,0.863394,0.906837,0.858824,0.905646,0.864854,0.916142,0.884857,0.92623,0.890286,0.893136,0.927233,0.93955,0.901352,0.910599,0.946087,0.953492,0.914146,0.919538,0.922878,0.926503,0.92716,0.941653,0.985742,0.947067,0.9437,0.968053,0.97057,1.01549,0.935575,0.936608,0.942302,0.937645,1.00356,1.05201,0.883722,1.04139,1.02598,1.04668,1.0511,1.09945,0.968244,1.01134,1.07265,1.10059,1.18976,1.13585,1.20976,1.17207,1.18968,1.2017,1.27592,1.28886,1.26559,1.28489,1.29385,1.30249,1.30601,1.31771,1.37203,1.34166,1.34777,1.3422,1.36425,1.35728,1.36912,1.38495,1.40415,1.40586,1.40536,1.40853,1.40943,1.4182,1.40153,1.40832,1.40528,1.3878,1.41426,1.39917,1.4051,1.46129,1.46377,1.41189,1.46455,1.44021,1.44527,1.44781,1.51096,1.50057,1.3753,1.34927,1.4508,1.40248,1.38909,1.31386,1.29765,1.29552,1.28221,1.27349,1.25879,1.25227,1.23533,1.22174,1.21283,1.19403,1.18947,1.16907,1.16221,1.14786,1.13494,1.13355,1.10559,1.09656,1.06811,1.06088,1.0577,1.04911,1.05024,1.02118,1.00554,0.989293,0.972336,0.961332,0.954117,0.955509,0.942485,0.927889,0.923071,0.910241,0.906156,0.895033,0.959418,0.948962,0.93796,0.926793,0.899814,0.911334,0.867638,0.867571,0.862463,0.854489,0.857443,0.866902,0.872196,0.86776,0.882162,0.898834,0.898431,0.900525,0.899913,0.892846,0.885463,0.896011,0.897224,0.898276,0.894747,0.891653,0.889951,0.889985,0.890034,0.889848,0.891503,0.881424,0.886063,0.883189,0.887374,0.889464,0.885434,0.880578,0.881069,0.879039,0.880486,0.877794,0.882369,0.879658,0.879052,0.875904,0.882218,0.869874,0.874634,0.873405,0.878323,0.864371,0.936041,0.982519,0.983783,0.984115,0.983673,0.987755,0.987389,0.989652,0.991566,0.982455,0.99419,0.990369,0.991263,0.984783,0.992409,0.994242,0.99489,0.996674,0.995799,0.994068,0.995591,1.00187,0.989916,1.00784,1.00462,1.00311,1.00495,1.00595,0.960289,1.00732,1.01066,1.00818,1.00171,1.01199,0.992116,0.990814,0.994797,0.995172,0.996153,0.996694,0.997064,0.986833,0.994606,0.998802,1.00438,1.00174,1.00119,1.00289,1.00228,1.00238,1.00678,1.00794,1.00604,1.00861,0.963929,1.01359,1.01218,1.01762,1.02796,1.02562,1.02}; + const double rms[N] = { + 0.823689, 0.805241, 0.817758, 0.805648, 0.802719, 0.829411, 0.808234, 0.796944, 0.813095, 0.826435, 0.811776, + 0.819873, 0.823283, 0.818004, 0.819796, 0.820846, 0.82749, 0.822357, 0.818303, 0.822916, 0.834238, 0.821518, + 0.835878, 0.826969, 0.83787, 0.835485, 0.837178, 0.842465, 0.839582, 0.850781, 0.847032, 0.848794, 0.849601, + 0.85978, 0.85481, 0.86164, 0.866302, 0.866074, 0.869195, 0.874239, 0.880656, 0.881667, 0.888438, 0.886809, + 0.89286, 0.892054, 0.903708, 0.900372, 0.904276, 0.912044, 0.917285, 0.92219, 0.927522, 0.931037, 0.935044, + 0.938616, 0.941711, 0.946958, 0.950666, 0.95474, 0.967182, 0.970128, 0.975676, 0.97931, 0.984179, 0.988279, + 0.995269, 1.00143, 0.999232, 0.998867, 0.999908, 1.02241, 1.0462, 1.05131, 1.03541, 1.02535, 1.03805, + 1.07367, 1.09972, 1.12079, 1.13208, 1.15175, 1.17083, 1.18699, 1.20095, 1.22169, 1.24418, 1.26595, + 1.28708, 1.30303, 1.31279, 1.32175, 1.329, 1.33418, 1.34, 1.34675, 1.35284, 1.36086, 1.368, + 1.37633, 1.39387, 1.40353, 1.40547, 1.40902, 1.40658, 1.40523, 1.40309, 1.40089, 1.40122, 1.40212, + 1.40281, 1.40877, 1.40972, 1.41208, 1.41789, 1.42165, 1.42453, 1.42954, 1.43856, 1.44613, 1.44894, + 1.45408, 1.4347, 1.41351, 1.41201, 1.40167, 1.39811, 1.38846, 1.34956, 1.29556, 1.28353, 1.27768, + 1.26644, 1.25752, 1.24987, 1.23723, 1.22353, 1.20934, 1.19558, 1.18253, 1.17099, 1.15867, 1.15074, + 1.13651, 1.12275, 1.10774, 1.09431, 1.06622, 1.06609, 1.06611, 1.06505, 1.05314, 1.0261, 1.00457, + 0.990423, 0.968341, 0.964148, 0.959084, 0.956413, 0.943587, 0.935617, 0.923163, 0.913453, 0.903224, 0.896578, + 0.925755, 0.95124, 0.939449, 0.925327, 0.898027, 0.91426, 0.875688, 0.862338, 0.858283, 0.857438, 0.86037, + 0.862203, 0.870719, 0.876149, 0.887925, 0.895045, 0.898852, 0.90329, 0.895159, 0.892505, 0.893056, 0.900081, + 0.896356, 0.895693, 0.891834, 0.893339, 0.888931, 0.888282, 0.890026, 0.888641, 0.886521, 0.887356, 0.885548, + 0.882484, 0.88512, 0.882618, 0.88119, 0.880995, 0.88102, 0.88134, 0.88315, 0.8824, 0.880437, 0.879697, + 0.879628, 0.878431, 0.877552, 0.878481, 0.878691, 0.877373, 0.876806, 0.875456, 0.978556, 0.981988, 0.985465, + 0.985556, 0.986936, 0.984079, 0.982189, 0.984073, 0.984913, 0.987486, 0.989538, 0.987139, 0.985936, 0.987119, + 0.988206, 0.990297, 0.991416, 0.992575, 0.991251, 0.992607, 0.992754, 0.993668, 0.994706, 0.996367, 0.996439, + 0.997143, 1.0003, 1.00234, 1.0024, 1.00091, 1.00194, 1.00287, 1.00385, 1.00475, 0.986361, 0.988892, + 0.989372, 0.989529, 0.989478, 0.990144, 0.9908, 0.990212, 0.991309, 0.992435, 0.993439, 0.994017, 0.997914, + 0.99955, 0.999073, 0.997491, 0.99844, 0.999279, 1.00009, 1.00086, 1.0004, 1.00093, 1.00345, 1.01321, + 1.01864, 1.0196}; + // const double eta[N] = + // {0.005,0.015,0.025,0.035,0.045,0.055,0.065,0.075,0.085,0.095,0.105,0.115,0.125,0.135,0.145,0.155,0.165,0.175,0.185,0.195,0.205,0.215,0.225,0.235,0.245,0.255,0.265,0.275,0.285,0.295,0.305,0.315,0.325,0.335,0.345,0.355,0.365,0.375,0.385,0.395,0.405,0.415,0.425,0.435,0.445,0.455,0.465,0.475,0.485,0.495,0.505,0.515,0.525,0.535,0.545,0.555,0.565,0.575,0.585,0.595,0.605,0.615,0.625,0.635,0.645,0.655,0.665,0.675,0.685,0.695,0.705,0.715,0.725,0.735,0.745,0.755,0.765,0.775,0.785,0.795,0.805,0.815,0.825,0.835,0.845,0.855,0.865,0.875,0.885,0.895,0.905,0.915,0.925,0.935,0.945,0.955,0.965,0.975,0.985,0.995,1.005,1.015,1.025,1.035,1.045,1.055,1.065,1.075,1.085,1.095,1.105,1.115,1.125,1.135,1.145,1.155,1.165,1.175,1.185,1.195,1.205,1.215,1.225,1.235,1.245,1.255,1.265,1.275,1.285,1.295,1.305,1.315,1.325,1.335,1.345,1.355,1.365,1.375,1.385,1.395,1.405,1.415,1.425,1.435,1.445,1.455,1.465,1.475,1.485,1.495,1.505,1.515,1.525,1.535,1.545,1.555,1.565,1.575,1.585,1.595,1.605,1.615,1.625,1.635,1.645,1.655,1.665,1.675,1.685,1.695,1.705,1.715,1.725,1.735,1.745,1.755,1.765,1.775,1.785,1.795,1.805,1.815,1.825,1.835,1.845,1.855,1.865,1.875,1.885,1.895,1.905,1.915,1.925,1.935,1.945,1.955,1.965,1.975,1.985,1.995,2.005,2.015,2.025,2.035,2.045,2.055,2.065,2.075,2.085,2.095,2.105,2.115,2.125,2.135,2.145,2.155,2.165,2.175,2.185,2.195,2.205,2.215,2.225,2.235,2.245,2.255,2.265,2.275,2.285,2.295,2.305,2.315,2.325,2.335,2.345,2.355,2.365,2.375,2.385,2.395,2.405,2.415,2.425,2.435,2.445,2.455,2.465,2.475,2.485,2.495,2.505,2.515,2.525,2.535,2.545,2.555,2.565,2.575,2.585,2.595,2.605,2.615,2.625,2.635,2.645,2.655,2.665,2.675,2.685,2.695,2.705,2.715,2.725,2.735,2.745,2.755,2.765,2.775}; + const double eta[N] = { + 0.005, 0.015, 0.025, 0.035, 0.045, 0.055, 0.065, 0.075, 0.085, 0.095, 0.105, 0.115, 0.125, 0.135, 0.145, 0.155, + 0.165, 0.175, 0.185, 0.195, 0.205, 0.215, 0.225, 0.235, 0.245, 0.255, 0.265, 0.275, 0.285, 0.295, 0.305, 0.315, + 0.325, 0.335, 0.345, 0.355, 0.365, 0.375, 0.385, 0.395, 0.405, 0.415, 0.425, 0.435, 0.445, 0.455, 0.465, 0.475, + 0.485, 0.495, 0.505, 0.515, 0.525, 0.535, 0.545, 0.555, 0.565, 0.575, 0.585, 0.595, 0.605, 0.615, 0.625, 0.635, + 0.645, 0.655, 0.665, 0.675, 0.685, 0.695, 0.705, 0.715, 0.725, 0.735, 0.745, 0.755, 0.765, 0.775, 0.785, 0.795, + 0.805, 0.815, 0.825, 0.835, 0.845, 0.855, 0.865, 0.875, 0.885, 0.895, 0.905, 0.915, 0.925, 0.935, 0.945, 0.955, + 0.965, 0.975, 0.985, 0.995, 1.005, 1.015, 1.025, 1.035, 1.045, 1.055, 1.065, 1.075, 1.085, 1.095, 1.105, 1.115, + 1.125, 1.135, 1.145, 1.155, 1.165, 1.175, 1.185, 1.195, 1.205, 1.215, 1.225, 1.235, 1.245, 1.255, 1.265, 1.275, + 1.285, 1.295, 1.305, 1.315, 1.325, 1.335, 1.345, 1.355, 1.365, 1.375, 1.385, 1.395, 1.405, 1.415, 1.425, 1.435, + 1.445, 1.455, 1.465, 1.475, 1.485, 1.495, 1.505, 1.515, 1.525, 1.535, 1.545, 1.555, 1.565, 1.575, 1.585, 1.595, + 1.605, 1.615, 1.625, 1.635, 1.645, 1.655, 1.665, 1.675, 1.685, 1.695, 1.705, 1.715, 1.725, 1.735, 1.745, 1.755, + 1.765, 1.775, 1.785, 1.795, 1.805, 1.815, 1.825, 1.835, 1.845, 1.855, 1.865, 1.875, 1.885, 1.895, 1.905, 1.915, + 1.925, 1.935, 1.945, 1.955, 1.965, 1.975, 1.985, 1.995, 2.005, 2.015, 2.025, 2.035, 2.045, 2.055, 2.065, 2.075, + 2.085, 2.095, 2.105, 2.115, 2.125, 2.135, 2.145, 2.155, 2.165, 2.175, 2.185, 2.195, 2.205, 2.215, 2.225, 2.235, + 2.245, 2.255, 2.265, 2.275, 2.285, 2.295, 2.305, 2.315, 2.325, 2.335, 2.345, 2.355, 2.365, 2.375, 2.385, 2.395, + 2.405, 2.415, 2.425, 2.435, 2.445, 2.455, 2.465, 2.475, 2.485, 2.495, 2.505, 2.515, 2.525, 2.535, 2.545, 2.555, + 2.565, 2.575, 2.585, 2.595, 2.605, 2.615, 2.625, 2.635, 2.645, 2.655, 2.665, 2.675, 2.685, 2.695, 2.705, 2.715, + 2.725, 2.735, 2.745, 2.755, 2.765}; // X0tot/2. - //const double X0CaloLayers[N] = {54.0718,53.6793,51.1026,52.7207,54.3121,54.5799,54.6933,57.3391,55.3929,52.7291,54.9498,54.8578,53.7012,59.4177,53.3716,59.0585,58.9992,54.2931,59.6594,57.9365,55.2779,61.2433,59.3145,55.276,54.9965,56.4419,55.5374,54.9552,57.0007,54.7047,57.678,63.3163,58.3533,55.4158,62.8817,57.7717,63.6192,58.9201,64.8709,58.0192,63.7163,59.1298,63.678,60.302,59.8701,65.7836,64.7294,60.9158,62.8989,66.3413,66.4773,60.4863,60.8472,61.9235,61.3218,62.1608,63.7831,70.1807,64.1836,64.124,64.3934,64.8063,71.6659,62.5457,63.0828,63.2448,62.6003,67.0684,72.1467,57.8225,67.3932,63.7332,63.74,62.1021,64.3551,55.0171,56.196,59.2418,58.633,64.674,55.9855,62.6046,57.0551,57.7426,57.8879,63.9515,62.4365,56.502,55.5581,53.9051,54.201,54.8809,55.8935,66.3435,59.7587,60.5284,59.6337,62.1275,60.5448,61.3072,59.5853,61.4811,62.1179,62.5012,64.0563,66.8948,68.5185,69.5734,71.4861,73.1542,73.3252,77.6957,77.3028,79.1056,90.128,92.1165,84.2486,94.0138,88.9091,90.6579,91.6065,102.636,102.664,88.2848,86.3781,94.2899,88.1281,85.8002,78.7165,77.144,76.019,73.3795,71.3756,69.5571,68.0864,66.248,64.2698,62.5635,61.8486,61.3565,60.0822,59.4924,58.6984,56.8871,54.5453,56.0838,52.6754,50.3197,49.6728,51.8083,50.7692,50.7799,50.0932,50.1331,45.6858,48.7889,48.6627,48.7291,49.0538,49.2277,49.8541,49.9372,49.3862,46.1696,50.63,52.8881,51.5254,52.3118,52.7285,52.5438,54.6988,54.5386,55.3539,57.0784,58.8203,61.5868,62.9939,65.5747,67.574,69.2886,71.3357,73.9579,74.7242,75.5187,75.1089,74.582,74.3894,74.3444,74.5447,74.7789,75.3804,74.2035,74.4863,74.2174,74.193,75.42,74.1402,74.1646,74.8089,74.4747,75.9973,75.1384,74.1878,74.4443,74.9275,74.7224,74.8561,74.693,75.8353,74.5733,74.4269,75.7665,74.5918,74.8829,74.8254,75.2599,74.9678,79.3404,80.8504,82.0182,82.0322,81.0368,81.3742,81.8718,81.3208,82.4715,81.6779,82.3247,81.8919,82.4235,82.3492,82.8106,82.9172,83.0532,83.3448,82.9899,83.4892,83.7382,83.9838,83.1928,84.5102,84.7175,84.3154,84.8548,85.3676,81.9878,85.0532,85.7296,85.0054,84.6196,85.3146,80.0937,80.1703,80.2248,80.288,80.3804,80.4301,80.5178,80.5528,80.6757,80.7319,80.9331,81.0151,80.9382,81.1191,81.7465,81.2769,81.8252,81.8298,81.5847,81.6739,78.9587,83.4391,81.9643,82.5875,82.835,82.5863,82.5761}; - //double X0CaloLayers[N] = {54.0318,57.0076,51.1641,51.9894,54.2876,49.952,53.8047,57.2497,55.2898,52.7514,55.8,54.8088,53.6844,54.3315,54.3281,54.3618,53.9736,55.5616,56.9004,57.4635,55.1762,56.5239,54.5526,56.377,55.1761,56.4038,56.7003,55.9741,56.9054,55.7233,57.0343,57.5817,57.8638,56.6075,58.0273,57.7163,58.1165,59.0785,59.8935,59.0176,58.7498,58.6666,58.3886,59.805,59.6712,60.6292,59.6653,60.9436,61.1729,61.1569,61.3458,61.1481,61.7262,62.1086,62.5146,63.3828,63.7797,64.8631,64.7619,65.4139,64.3393,64.7386,64.9614,65.6181,66.3964,66.1061,66.2985,66.9995,65.645,64.6098,63.1061,63.2137,63.7249,62.1394,59.6448,57.7733,57.1382,58.1615,58.6362,58.5288,56.0052,56.3635,57.0303,57.6919,57.8765,57.0406,56.0918,55.5172,54.763,54.9269,55.8817,56.6677,57.4943,58.3997,59.691,60.5222,61.3415,61.9216,61.8989,62.2833,61.2856,61.4755,62.0896,62.4886,64.0289,65.8034,67.7021,69.5661,71.0834,73.1107,75.0314,77.1124,79.0793,80.3072,82.1783,84.109,85.864,87.4737,88.7524,90.6428,91.6288,93.3277,93.5435,91.7726,91.8272,90.0656,87.8999,85.8715,81.4497,77.1833,75.3942,73.2785,71.9156,69.5589,68.0715,66.4536,64.2158,62.5124,61.4201,60.4425,59.1743,57.9759,56.9582,55.6219,54.3818,53.4652,52.348,50.246,49.5853,48.3385,47.7049,47.4402,46.9385,46.6683,46.3137,46.1782,46.2934,46.54,46.7983,47.1935,47.4539,47.6234,47.8758,48.2112,48.9842,50.2923,50.7137,51.236,51.8725,51.9032,53.3274,53.0254,54.5411,56.0885,57.9211,59.9838,62.3384,64.7229,66.7132,68.802,70.8444,72.5567,74.2853,74.1679,73.9891,74.025,74.0642,73.9976,73.9452,73.903,73.9035,73.9069,73.938,74.0291,74.1017,74.1701,74.2725,74.3826,74.4966,74.6262,74.7497,74.8589,74.9857,75.1326,75.2356,75.3198,75.3945,75.4574,75.5176,75.5841,75.6295,75.6865,75.7506,75.8005,75.8371,75.8714,75.8979,81.4955,81.6415,81.8159,81.9223,82.0275,82.1279,82.4254,82.7708,82.8566,82.8978,82.9502,83.0259,83.1228,83.2364,83.3429,83.4584,83.5643,83.6706,83.7648,83.8748,83.966,84.1007,84.156,84.0657,84.1141,84.2062,84.32,84.4591,84.5376,84.6284,84.6993,84.7651,84.8456,85.002,80.2595,80.3031,80.3048,80.3629,80.4524,80.5409,80.6004,80.6759,80.7758,80.8384,80.913,80.991,81.0944,81.183,81.26,81.3277,81.4144,81.501,81.5922,81.6799,81.754,81.8414,81.9578,82.287,82.469,82.5641}; - - const double X0CaloLayers[N] = {54.1,57.1,51.25,52.1,54.4,50.05,53.9,57.4,55.4,52.9,55.95,54.95,53.85,54.45,54.45,54.5,54.1,55.7,56.7,57.3,54.95,56.3,54.65,56.5,55.25,56.5,56.8,56.05,57,55.8,57.1,57.65,57.95,56.7,58.1,57.85,58.25,59.2,60,59.15,58.85,58.75,58.5,59.9,59.75,60.7,59.75,61.05,61.3,61.3,61.45,61.25,61.85,62.25,62.65,63.5,63.9,65,64.9,65.55,64.5,64.9,65.1,65.75,66.5,66.2,66.4,67.15,65.75,64.7,63.2,63.3,63.85,62.25,59.75,57.9,57.25,58.25,58.75,58.65,56.15,56.7,58.25,59.85,60.9,61,60.8,59.95,58.75,58.45,58.95,59.3,59.9,60.75,61.9,62.65,63.35,63.8,63.7,64,62.9,63.05,63.55,63.85,65.55,67.6,69.65,71.55,72.95,75,76.9,79,81,82.2,84.05,85.95,87.75,89.35,90.65,92.5,93.5,95.15,95.35,93.6,93.65,91.85,89.65,87.65,83.25,78.95,77.2,75.05,73.65,71.3,69.85,68.2,65.95,64.25,63.1,62.15,60.85,59.65,58.55,57.25,56,55.1,53.95,51.85,51.15,49.96,49.29,49.08,48.515,48.24,47.92,47.765,47.875,48.095,48.355,48.78,49.015,49.14,48.98,48.77,49.03,49.515,49.245,49.78,50.45,50.45,51.9,51.65,53.15,54.65,56.5,58.55,60.9,63.3,65.25,67.35,69.4,71.15,72.85,72.75,72.55,72.6,72.6,72.55,72.55,72.5,72.55,72.55,72.6,72.65,72.75,72.8,72.9,73.1,73.25,73.4,73.5,73.65,73.75,73.9,74,74.1,74.2,74.35,74.4,74.45,74.5,74.7,74.95,75,75.05,75.05,75.1,75.1,75.15,75.25,75.2,75.25,75.05,75.05,75.3,75.3,75.3,75.25,75.25,75.25,75.3,75.35,75.4,75.4,75.4,75.4,75.45,75.45,75.5,75.45,75.3,75.3,75.3,75.35,75.4,75.4,75.45,75.45,75.5,75.5,75.6,70.8,70.75,70.7,70.7,70.7,70.75,70.75,70.7,70.75,70.7,70.75,70.85,71.05,71.1,71.1,71.15,71.15,71.2,71.25,71.25,71.25,71.3,71.3,71.6,71.65,71.7}; + // const double X0CaloLayers[N] = + // {54.0718,53.6793,51.1026,52.7207,54.3121,54.5799,54.6933,57.3391,55.3929,52.7291,54.9498,54.8578,53.7012,59.4177,53.3716,59.0585,58.9992,54.2931,59.6594,57.9365,55.2779,61.2433,59.3145,55.276,54.9965,56.4419,55.5374,54.9552,57.0007,54.7047,57.678,63.3163,58.3533,55.4158,62.8817,57.7717,63.6192,58.9201,64.8709,58.0192,63.7163,59.1298,63.678,60.302,59.8701,65.7836,64.7294,60.9158,62.8989,66.3413,66.4773,60.4863,60.8472,61.9235,61.3218,62.1608,63.7831,70.1807,64.1836,64.124,64.3934,64.8063,71.6659,62.5457,63.0828,63.2448,62.6003,67.0684,72.1467,57.8225,67.3932,63.7332,63.74,62.1021,64.3551,55.0171,56.196,59.2418,58.633,64.674,55.9855,62.6046,57.0551,57.7426,57.8879,63.9515,62.4365,56.502,55.5581,53.9051,54.201,54.8809,55.8935,66.3435,59.7587,60.5284,59.6337,62.1275,60.5448,61.3072,59.5853,61.4811,62.1179,62.5012,64.0563,66.8948,68.5185,69.5734,71.4861,73.1542,73.3252,77.6957,77.3028,79.1056,90.128,92.1165,84.2486,94.0138,88.9091,90.6579,91.6065,102.636,102.664,88.2848,86.3781,94.2899,88.1281,85.8002,78.7165,77.144,76.019,73.3795,71.3756,69.5571,68.0864,66.248,64.2698,62.5635,61.8486,61.3565,60.0822,59.4924,58.6984,56.8871,54.5453,56.0838,52.6754,50.3197,49.6728,51.8083,50.7692,50.7799,50.0932,50.1331,45.6858,48.7889,48.6627,48.7291,49.0538,49.2277,49.8541,49.9372,49.3862,46.1696,50.63,52.8881,51.5254,52.3118,52.7285,52.5438,54.6988,54.5386,55.3539,57.0784,58.8203,61.5868,62.9939,65.5747,67.574,69.2886,71.3357,73.9579,74.7242,75.5187,75.1089,74.582,74.3894,74.3444,74.5447,74.7789,75.3804,74.2035,74.4863,74.2174,74.193,75.42,74.1402,74.1646,74.8089,74.4747,75.9973,75.1384,74.1878,74.4443,74.9275,74.7224,74.8561,74.693,75.8353,74.5733,74.4269,75.7665,74.5918,74.8829,74.8254,75.2599,74.9678,79.3404,80.8504,82.0182,82.0322,81.0368,81.3742,81.8718,81.3208,82.4715,81.6779,82.3247,81.8919,82.4235,82.3492,82.8106,82.9172,83.0532,83.3448,82.9899,83.4892,83.7382,83.9838,83.1928,84.5102,84.7175,84.3154,84.8548,85.3676,81.9878,85.0532,85.7296,85.0054,84.6196,85.3146,80.0937,80.1703,80.2248,80.288,80.3804,80.4301,80.5178,80.5528,80.6757,80.7319,80.9331,81.0151,80.9382,81.1191,81.7465,81.2769,81.8252,81.8298,81.5847,81.6739,78.9587,83.4391,81.9643,82.5875,82.835,82.5863,82.5761}; + // double X0CaloLayers[N] = + // {54.0318,57.0076,51.1641,51.9894,54.2876,49.952,53.8047,57.2497,55.2898,52.7514,55.8,54.8088,53.6844,54.3315,54.3281,54.3618,53.9736,55.5616,56.9004,57.4635,55.1762,56.5239,54.5526,56.377,55.1761,56.4038,56.7003,55.9741,56.9054,55.7233,57.0343,57.5817,57.8638,56.6075,58.0273,57.7163,58.1165,59.0785,59.8935,59.0176,58.7498,58.6666,58.3886,59.805,59.6712,60.6292,59.6653,60.9436,61.1729,61.1569,61.3458,61.1481,61.7262,62.1086,62.5146,63.3828,63.7797,64.8631,64.7619,65.4139,64.3393,64.7386,64.9614,65.6181,66.3964,66.1061,66.2985,66.9995,65.645,64.6098,63.1061,63.2137,63.7249,62.1394,59.6448,57.7733,57.1382,58.1615,58.6362,58.5288,56.0052,56.3635,57.0303,57.6919,57.8765,57.0406,56.0918,55.5172,54.763,54.9269,55.8817,56.6677,57.4943,58.3997,59.691,60.5222,61.3415,61.9216,61.8989,62.2833,61.2856,61.4755,62.0896,62.4886,64.0289,65.8034,67.7021,69.5661,71.0834,73.1107,75.0314,77.1124,79.0793,80.3072,82.1783,84.109,85.864,87.4737,88.7524,90.6428,91.6288,93.3277,93.5435,91.7726,91.8272,90.0656,87.8999,85.8715,81.4497,77.1833,75.3942,73.2785,71.9156,69.5589,68.0715,66.4536,64.2158,62.5124,61.4201,60.4425,59.1743,57.9759,56.9582,55.6219,54.3818,53.4652,52.348,50.246,49.5853,48.3385,47.7049,47.4402,46.9385,46.6683,46.3137,46.1782,46.2934,46.54,46.7983,47.1935,47.4539,47.6234,47.8758,48.2112,48.9842,50.2923,50.7137,51.236,51.8725,51.9032,53.3274,53.0254,54.5411,56.0885,57.9211,59.9838,62.3384,64.7229,66.7132,68.802,70.8444,72.5567,74.2853,74.1679,73.9891,74.025,74.0642,73.9976,73.9452,73.903,73.9035,73.9069,73.938,74.0291,74.1017,74.1701,74.2725,74.3826,74.4966,74.6262,74.7497,74.8589,74.9857,75.1326,75.2356,75.3198,75.3945,75.4574,75.5176,75.5841,75.6295,75.6865,75.7506,75.8005,75.8371,75.8714,75.8979,81.4955,81.6415,81.8159,81.9223,82.0275,82.1279,82.4254,82.7708,82.8566,82.8978,82.9502,83.0259,83.1228,83.2364,83.3429,83.4584,83.5643,83.6706,83.7648,83.8748,83.966,84.1007,84.156,84.0657,84.1141,84.2062,84.32,84.4591,84.5376,84.6284,84.6993,84.7651,84.8456,85.002,80.2595,80.3031,80.3048,80.3629,80.4524,80.5409,80.6004,80.6759,80.7758,80.8384,80.913,80.991,81.0944,81.183,81.26,81.3277,81.4144,81.501,81.5922,81.6799,81.754,81.8414,81.9578,82.287,82.469,82.5641}; + + const double X0CaloLayers[N] = { + 54.1, 57.1, 51.25, 52.1, 54.4, 50.05, 53.9, 57.4, 55.4, 52.9, 55.95, 54.95, 53.85, 54.45, 54.45, + 54.5, 54.1, 55.7, 56.7, 57.3, 54.95, 56.3, 54.65, 56.5, 55.25, 56.5, 56.8, 56.05, 57, 55.8, + 57.1, 57.65, 57.95, 56.7, 58.1, 57.85, 58.25, 59.2, 60, 59.15, 58.85, 58.75, 58.5, 59.9, 59.75, + 60.7, 59.75, 61.05, 61.3, 61.3, 61.45, 61.25, 61.85, 62.25, 62.65, 63.5, 63.9, 65, 64.9, 65.55, + 64.5, 64.9, 65.1, 65.75, 66.5, 66.2, 66.4, 67.15, 65.75, 64.7, 63.2, 63.3, 63.85, 62.25, 59.75, + 57.9, 57.25, 58.25, 58.75, 58.65, 56.15, 56.7, 58.25, 59.85, 60.9, 61, 60.8, 59.95, 58.75, 58.45, + 58.95, 59.3, 59.9, 60.75, 61.9, 62.65, 63.35, 63.8, 63.7, 64, 62.9, 63.05, 63.55, 63.85, 65.55, + 67.6, 69.65, 71.55, 72.95, 75, 76.9, 79, 81, 82.2, 84.05, 85.95, 87.75, 89.35, 90.65, 92.5, + 93.5, 95.15, 95.35, 93.6, 93.65, 91.85, 89.65, 87.65, 83.25, 78.95, 77.2, 75.05, 73.65, 71.3, 69.85, + 68.2, 65.95, 64.25, 63.1, 62.15, 60.85, 59.65, 58.55, 57.25, 56, 55.1, 53.95, 51.85, 51.15, 49.96, + 49.29, 49.08, 48.515, 48.24, 47.92, 47.765, 47.875, 48.095, 48.355, 48.78, 49.015, 49.14, 48.98, 48.77, 49.03, + 49.515, 49.245, 49.78, 50.45, 50.45, 51.9, 51.65, 53.15, 54.65, 56.5, 58.55, 60.9, 63.3, 65.25, 67.35, + 69.4, 71.15, 72.85, 72.75, 72.55, 72.6, 72.6, 72.55, 72.55, 72.5, 72.55, 72.55, 72.6, 72.65, 72.75, + 72.8, 72.9, 73.1, 73.25, 73.4, 73.5, 73.65, 73.75, 73.9, 74, 74.1, 74.2, 74.35, 74.4, 74.45, + 74.5, 74.7, 74.95, 75, 75.05, 75.05, 75.1, 75.1, 75.15, 75.25, 75.2, 75.25, 75.05, 75.05, 75.3, + 75.3, 75.3, 75.25, 75.25, 75.25, 75.3, 75.35, 75.4, 75.4, 75.4, 75.4, 75.45, 75.45, 75.5, 75.45, + 75.3, 75.3, 75.3, 75.35, 75.4, 75.4, 75.45, 75.45, 75.5, 75.5, 75.6, 70.8, 70.75, 70.7, 70.7, + 70.7, 70.75, 70.75, 70.7, 70.75, 70.7, 70.75, 70.85, 71.05, 71.1, 71.1, 71.15, 71.15, 71.2, 71.25, + 71.25, 71.25, 71.3, 71.3, 71.6, 71.65, 71.7}; // check regular eta look-up is setup OK - m_binSize = (eta[N-1]-eta[0])/(static_cast<double>(N-1)); - for (unsigned i = 0; i != m_numberBins; ++i) - { - double etaBin = m_binSize*(static_cast<double>(i) + 0.5); - if (std::abs(eta[i] - etaBin) < 0.001*m_binSize) continue; - ATH_MSG_ERROR( " have " << m_numberBins << " eta bins of width " << m_binSize - << endmsg << " for bin " << i << ": expected/found eta " - << etaBin << "/" << eta[i] - ); - - return StatusCode::FAILURE; + m_binSize = (eta[N - 1] - eta[0]) / (static_cast<double>(N - 1)); + for (unsigned i = 0; i != m_numberBins; ++i) { + double etaBin = m_binSize * (static_cast<double>(i) + 0.5); + if (std::abs(eta[i] - etaBin) < 0.001 * m_binSize) continue; + ATH_MSG_ERROR(" have " << m_numberBins << " eta bins of width " << m_binSize << endmsg << " for bin " << i + << ": expected/found eta " << etaBin << "/" << eta[i]); + + return StatusCode::FAILURE; } - + // populate radiationThickness and Trk::Surface vectors - for (int i = 0; i != N; ++i) - { - // radiationThickness - m_radiationThickness.push_back(X0CaloLayers[i]); - - // polar angle of bin centre - double theta = 2.* std::atan(std::exp(-eta[i])); - double cosTheta = std::cos(theta); - double sinTheta = std::sin(theta); - double thetaNext = 2.* std::atan(std::exp(-eta[i]-m_binSize)); - double cotThetaWidth = 1./std::tan(thetaNext) - cosTheta/sinTheta; - - // inner surfaces - double r = sinTheta*(mean[i] - rms[i])*Gaudi::Units::meter; - double z = cosTheta*(mean[i] - rms[i])*Gaudi::Units::meter; - m_innerBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); - m_innerForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); - - // middle surfaces - r = sinTheta*mean[i]*Gaudi::Units::meter; - z = cosTheta*mean[i]*Gaudi::Units::meter; - m_middleBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); - m_middleForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); - - // outer surfaces - r = sinTheta*(mean[i] + rms[i])*Gaudi::Units::meter; - z = cosTheta*(mean[i] + rms[i])*Gaudi::Units::meter; - m_outerBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); - m_outerForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); + for (int i = 0; i != N; ++i) { + // radiationThickness + m_radiationThickness.push_back(X0CaloLayers[i]); + + // polar angle of bin centre + double theta = 2. * std::atan(std::exp(-eta[i])); + double cosTheta = std::cos(theta); + double sinTheta = std::sin(theta); + double thetaNext = 2. * std::atan(std::exp(-eta[i] - m_binSize)); + double cotThetaWidth = 1. / std::tan(thetaNext) - cosTheta / sinTheta; + + // inner surfaces + double r = sinTheta * (mean[i] - rms[i]) * Gaudi::Units::meter; + double z = cosTheta * (mean[i] - rms[i]) * Gaudi::Units::meter; + m_innerBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); + m_innerForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); + + // middle surfaces + r = sinTheta * mean[i] * Gaudi::Units::meter; + z = cosTheta * mean[i] * Gaudi::Units::meter; + m_middleBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); + m_middleForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); + + // outer surfaces + r = sinTheta * (mean[i] + rms[i]) * Gaudi::Units::meter; + z = cosTheta * (mean[i] + rms[i]) * Gaudi::Units::meter; + m_outerBackwardSurfaces.push_back(createSurface(eta[i], r, -z, cotThetaWidth)); + m_outerForwardSurfaces.push_back(createSurface(eta[i], r, z, cotThetaWidth)); } - + // fill Calo Layers with R,Z centre, surface, etc - double innerR[N] = {0.}; - double innerZ[N] = {0.}; - // double middleR[N] = {0.}; + double innerR[N] = {0.}; + double innerZ[N] = {0.}; + // double middleR[N] = {0.}; // double middleZ[N] = {0.}; - double outerR[N] = {0.}; - double outerZ[N] = {0.}; - for (int i = 0; i != N; ++i) - { - double theta = 2.* std::atan(std::exp(-eta[i])); - double cosTheta = std::cos(theta); - double sinTheta = std::sin(theta); - innerR[i] = sinTheta*(mean[i] - rms[i])*Gaudi::Units::meter; - innerZ[i] = cosTheta*(mean[i] - rms[i])*Gaudi::Units::meter; - // middleR[i] = sinTheta*mean[i]*Gaudi::Units::meter; - // middleZ[i] = cosTheta*mean[i]*Gaudi::Units::meter; - outerR[i] = sinTheta*(mean[i] + rms[i])*Gaudi::Units::meter; - outerZ[i] = cosTheta*(mean[i] + rms[i])*Gaudi::Units::meter; - bool barrel = true; - if (eta[i] > 1.4) barrel = false; - - // outer layer - m_caloOuterLayers.push_back(new CaloLayer(outerSurface(-eta[i]), - i, - outerR[i], - -outerZ[i], - X0CaloLayers[i], - barrel)); - m_caloOuterLayers.push_back(new CaloLayer(outerSurface(eta[i]), - i+N, - outerR[i], - outerZ[i], - X0CaloLayers[i], - barrel)); - - // same thing for inner layer - m_caloInnerLayers.push_back(new CaloLayer(innerSurface(-eta[i]), - i, - innerR[i], - -innerZ[i], - X0CaloLayers[i], - barrel)); - m_caloInnerLayers.push_back(new CaloLayer(innerSurface(eta[i]), - i+N, - innerR[i], - innerZ[i], - X0CaloLayers[i], - barrel)); - - // check - const Trk::Surface* surfM = innerSurface(-eta[i]); - if (std::abs(surfM->center().z() + innerZ[i]) > 0.001) - { - ATH_MSG_ERROR( " wrong surface " << i << " at eta " << eta[i] << endmsg - << ": expected/found z " << -innerZ[i] << "/" << surfM->center().z() - ); - return StatusCode::FAILURE; - } - const Trk::Surface* surfP = innerSurface(eta[i]); - if (std::abs(surfP->center().z() - innerZ[i]) > 0.001) - { - ATH_MSG_ERROR( " wrong surface " << i << " at eta " << eta[i] << endmsg - << ": expected/found z " << innerZ[i] << "/" << surfP->center().z() - ); - return StatusCode::FAILURE; - } + double outerR[N] = {0.}; + double outerZ[N] = {0.}; + for (int i = 0; i != N; ++i) { + double theta = 2. * std::atan(std::exp(-eta[i])); + double cosTheta = std::cos(theta); + double sinTheta = std::sin(theta); + innerR[i] = sinTheta * (mean[i] - rms[i]) * Gaudi::Units::meter; + innerZ[i] = cosTheta * (mean[i] - rms[i]) * Gaudi::Units::meter; + // middleR[i] = sinTheta*mean[i]*Gaudi::Units::meter; + // middleZ[i] = cosTheta*mean[i]*Gaudi::Units::meter; + outerR[i] = sinTheta * (mean[i] + rms[i]) * Gaudi::Units::meter; + outerZ[i] = cosTheta * (mean[i] + rms[i]) * Gaudi::Units::meter; + bool barrel = true; + if (eta[i] > 1.4) barrel = false; + + // outer layer + m_caloOuterLayers.push_back( + new CaloLayer(outerSurface(-eta[i]), i, outerR[i], -outerZ[i], X0CaloLayers[i], barrel)); + m_caloOuterLayers.push_back( + new CaloLayer(outerSurface(eta[i]), i + N, outerR[i], outerZ[i], X0CaloLayers[i], barrel)); + + // same thing for inner layer + m_caloInnerLayers.push_back( + new CaloLayer(innerSurface(-eta[i]), i, innerR[i], -innerZ[i], X0CaloLayers[i], barrel)); + m_caloInnerLayers.push_back( + new CaloLayer(innerSurface(eta[i]), i + N, innerR[i], innerZ[i], X0CaloLayers[i], barrel)); + + // check + const Trk::Surface* surfM = innerSurface(-eta[i]); + if (std::abs(surfM->center().z() + innerZ[i]) > 0.001) { + ATH_MSG_ERROR(" wrong surface " << i << " at eta " << eta[i] << endmsg << ": expected/found z " + << -innerZ[i] << "/" << surfM->center().z()); + return StatusCode::FAILURE; + } + const Trk::Surface* surfP = innerSurface(eta[i]); + if (std::abs(surfP->center().z() - innerZ[i]) > 0.001) { + ATH_MSG_ERROR(" wrong surface " << i << " at eta " << eta[i] << endmsg << ": expected/found z " << innerZ[i] + << "/" << surfP->center().z()); + return StatusCode::FAILURE; + } } return StatusCode::SUCCESS; } - -} // end of namespace + +} // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx index 530444413cc199bc85df968883e5a371793ad962..49a36aae0267e9252e6a66855b304244df5c1897 100755 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidCaloTrackStateOnSurface.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 */ ////////////////////////////////////////////////////////////////////////////// @@ -11,20 +11,19 @@ // This tool retrieves the appropriate parametrized scattering centres and // hybrid (measured + parametrized) energy deposit evaluation // using the IMuidCaloMaterialParam and IMuidCaloEnergy interfaces -// +// // (c) ATLAS Combined Muon software ////////////////////////////////////////////////////////////////////////////// //<<<<<< INCLUDES >>>>>> +#include "MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h" + #include <cmath> #include <iomanip> + #include "GaudiKernel/SystemOfUnits.h" #include "GeoPrimitives/GeoPrimitives.h" -#include "MuidCaloScatteringTools/MuidCaloTrackStateOnSurface.h" -#include "MuidInterfaces/IMuidCaloEnergy.h" -#include "MuidInterfaces/IMuidCaloMaterialParam.h" -#include "TrkExInterfaces/IPropagator.h" #include "TrkExUtils/TrackSurfaceIntersection.h" #include "TrkGeometry/MagneticFieldProperties.h" #include "TrkMaterialOnTrack/EnergyLoss.h" @@ -36,459 +35,332 @@ //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> -namespace Rec -{ - -MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface (const std::string& type, - const std::string& name, - const IInterface* parent) - : AthAlgTool (type, name, parent), - m_caloEnergyDeposit ("Rec::MuidCaloEnergyTool/MuidCaloEnergyTool", this), - m_caloEnergyParam ("Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", this), - m_caloMaterialParam ("Rec::MuidCaloMaterialParam/MuidCaloMaterialParam", this), - m_magFieldProperties (0), - m_propagator ("Trk::IntersectorWrapper/IntersectorWrapper", this), - m_minCaloRadius (0.4*Gaudi::Units::meter), - m_minRemainingEnergy (0.5*Gaudi::Units::GeV), - m_paramPtCut (15.0*Gaudi::Units::GeV), - m_count (0), - m_countArbitrarySolution(0), - m_countCompleteFailure (0), - m_countInnerFailure (0), - m_countOuterFailure (0) +namespace Rec { + +MuidCaloTrackStateOnSurface::MuidCaloTrackStateOnSurface(const std::string& type, const std::string& name, + const IInterface* parent) + : AthAlgTool(type, name, parent), + m_magFieldProperties(0), + m_minCaloRadius(0.4 * Gaudi::Units::meter), + m_minRemainingEnergy(0.5 * Gaudi::Units::GeV), + m_paramPtCut(15.0 * Gaudi::Units::GeV), + m_count(0), + m_countArbitrarySolution(0), + m_countCompleteFailure(0), + m_countInnerFailure(0), + m_countOuterFailure(0) { declareInterface<IMuidCaloTrackStateOnSurface>(this); - declareProperty("CaloEnergyDeposit", m_caloEnergyDeposit) ; - declareProperty("CaloEnergyParam", m_caloEnergyParam); - declareProperty("CaloMaterialParam", m_caloMaterialParam); - declareProperty("Propagator", m_propagator); - declareProperty("MinCaloRadius", m_minCaloRadius); - declareProperty("MinRemainingEnergy", m_minRemainingEnergy); - declareProperty("ParamPtCut", m_paramPtCut); + declareProperty("MinCaloRadius", m_minCaloRadius); + declareProperty("MinRemainingEnergy", m_minRemainingEnergy); + declareProperty("ParamPtCut", m_paramPtCut); } -MuidCaloTrackStateOnSurface::~MuidCaloTrackStateOnSurface (void) -{} +MuidCaloTrackStateOnSurface::~MuidCaloTrackStateOnSurface(void) {} //<<<<<< PUBLIC MEMBER FUNCTION DEFINITIONS >>>>>> StatusCode MuidCaloTrackStateOnSurface::initialize() { - ATH_MSG_DEBUG( "Initializing CombinedMuonTrackStateOnSurface" - << " - package version " << PACKAGE_VERSION ); + ATH_MSG_DEBUG("Initializing CombinedMuonTrackStateOnSurface" + << " - package version " << PACKAGE_VERSION); // get the Tools - if (m_caloEnergyDeposit.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_caloEnergyDeposit ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_DEBUG( "Retrieved tool " << m_caloEnergyDeposit ); - } - if (m_caloEnergyParam.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_caloEnergyParam ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_DEBUG( "Retrieved tool " << m_caloEnergyParam ); - } - if (m_caloMaterialParam.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_caloMaterialParam ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_DEBUG( "Retrieved tool " << m_caloMaterialParam ); - } + ATH_CHECK(m_caloEnergyDeposit.retrieve()); + ATH_MSG_DEBUG("Retrieved tool " << m_caloEnergyDeposit); + + ATH_CHECK(m_caloEnergyParam.retrieve()); + ATH_MSG_DEBUG("Retrieved tool " << m_caloEnergyParam); + + ATH_CHECK(m_caloMaterialParam.retrieve()); + ATH_MSG_DEBUG("Retrieved tool " << m_caloMaterialParam); + /// handle to the magnetic field cache - ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); - if (m_propagator.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_propagator ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_DEBUG( "Retrieved tool " << m_propagator ); - } + ATH_CHECK(m_fieldCacheCondObjInputKey.initialize()); + + ATH_CHECK(m_propagator.retrieve()); + ATH_MSG_DEBUG("Retrieved tool " << m_propagator); + + m_magFieldProperties = new Trk::MagneticFieldProperties(Trk::FullField); - m_magFieldProperties = new Trk::MagneticFieldProperties( Trk::FullField ); - return StatusCode::SUCCESS; } StatusCode MuidCaloTrackStateOnSurface::finalize() { - ATH_MSG_INFO( "finalized with " - << m_count << " muons asking for calo association, out of which: " << endmsg - << " " << m_countInnerFailure - << " failed to find the inner calo scattering plane," << endmsg - << " " << m_countOuterFailure - << " failed to find the outer calo scattering plane," << endmsg - << " while another " << m_countCompleteFailure - << " completely failed to intersect the calorimeter." << endmsg - << " " << m_countArbitrarySolution - << " with oscillation resolved by taking an arbitrary solution"); - + ATH_MSG_INFO( + "finalized with " << m_count << " muons asking for calo association, out of which: " << endmsg << " " + << m_countInnerFailure << " failed to find the inner calo scattering plane," << endmsg + << " " << m_countOuterFailure << " failed to find the outer calo scattering plane," + << endmsg << " while another " << m_countCompleteFailure + << " completely failed to intersect the calorimeter." << endmsg << " " + << m_countArbitrarySolution << " with oscillation resolved by taking an arbitrary solution"); + delete m_magFieldProperties; - + return StatusCode::SUCCESS; } std::vector<const Trk::TrackStateOnSurface*>* MuidCaloTrackStateOnSurface::caloTSOS(const Trk::TrackParameters& parameters) const { - const Trk::TrackStateOnSurface* innerTS = 0; - const Trk::TrackStateOnSurface* middleTS = 0; - const Trk::TrackStateOnSurface* outerTS = 0; - const Trk::TrackParameters* innerParams = 0; - const Trk::TrackParameters* middleParams = 0; - const Trk::TrackParameters* outerParams = 0; - - MagField::AtlasFieldCache fieldCache; + const Trk::TrackStateOnSurface* innerTS = 0; + const Trk::TrackStateOnSurface* middleTS = 0; + const Trk::TrackStateOnSurface* outerTS = 0; + const Trk::TrackParameters* innerParams = 0; + const Trk::TrackParameters* middleParams = 0; + const Trk::TrackParameters* outerParams = 0; + + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return nullptr; - } - fieldCondObj->getInitializedCache (fieldCache); - - // track to calo surfaces - first decide in or outwards - bool trackOutwards = true; - if (dynamic_cast<const Trk::PerigeeSurface*>(¶meters.associatedSurface())) - { - if (parameters.associatedSurface().center().perp() > 0.5*Gaudi::Units::meter) trackOutwards = false; - } - else if (std::abs(parameters.position().z()) > 4.0*Gaudi::Units::meter - || parameters.position().perp() > 1.2*Gaudi::Units::meter) - { - trackOutwards = false; + ATH_MSG_ERROR("Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + return nullptr; } + fieldCondObj->getInitializedCache(fieldCache); - if (trackOutwards) // forward tracking - { - innerTS = innerTSOS(parameters); - if (innerTS) - { - innerParams = innerTS->trackParameters(); - if (innerParams->momentum().dot(innerParams->position()) > 0.) - { - middleParams = middleParameters(*innerParams); - } - else - { - ATH_MSG_VERBOSE( " quit as looper " << innerParams ); - } - if (middleParams) - { - // get calo energy deposit - middleTS = m_caloEnergyParam->trackStateOnSurface(*middleParams, - innerParams, - outerParams); - if (! middleTS) - { - delete middleParams; - middleParams = 0; - } - } - if (middleParams) - { - // apply energy deposit to give outgoing middleParams, - // note the iteration required to get optimum energy correction - const Trk::TrackParameters* params = 0; - for (int iterate = 0; iterate !=2; ++iterate) - { - double energyDeposit = 0.; - if (! middleTS) break; - const Trk::MaterialEffectsOnTrack* meot = - dynamic_cast<const Trk::MaterialEffectsOnTrack*> - (middleTS->materialEffectsOnTrack()); - if (meot) energyDeposit = meot->energyLoss()->deltaE(); - middleParams = middleTS->trackParameters(); - Amg::Vector3D momentum = middleParams->momentum(); - double correctedEnergy = innerParams->momentum().mag() - energyDeposit; - - // fail potential loopers - if (fieldCache.toroidOn() - && correctedEnergy < m_minRemainingEnergy) - { - delete middleTS; - middleTS = 0; - ATH_MSG_VERBOSE( " fail tracking outwards: momentum " << momentum.mag()/Gaudi::Units::GeV - << " energyDeposit " << energyDeposit/Gaudi::Units::GeV - << " correctedEnergy " << correctedEnergy/Gaudi::Units::GeV - << " (GeV units)" ); - break; - } - else - { - // toroid off: set floor for remaining energy - if (correctedEnergy < m_minRemainingEnergy) - { - momentum *= m_minRemainingEnergy/momentum.mag(); - } - else - { - momentum *= correctedEnergy/momentum.mag(); - } - - const Trk::CylinderSurface* cylinder = - dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface()); - if (cylinder) - { - params = new const Trk::AtaCylinder(middleParams->position(), - momentum, - middleParams->charge(), - *cylinder); - } - else - { - const Trk::DiscSurface* disc = - dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface()); - if (disc) - { - params = new const Trk::AtaDisc(middleParams->position(), - momentum, - middleParams->charge(), - *disc); - } - else - { - ATH_MSG_WARNING( " caloTSOS: unexpected TrackParameters type " ); - } - } - - // delete middle and outer, - // then recompute with parameters as for backwards tracking - delete middleTS; - if (! params) - { - middleTS = 0; - } - else if (params->momentum().perp() > m_paramPtCut) - { - middleTS = m_caloEnergyDeposit->trackStateOnSurface(*params, - innerParams, - outerParams); - } - else - { - middleTS = m_caloEnergyParam->trackStateOnSurface(*params, - innerParams, - outerParams); - } - } - delete outerTS; - if (middleTS) - { - outerTS = outerTSOS(*params); - } - else - { - delete params; - } - } - } - if (! middleTS) - { - ATH_MSG_VERBOSE( " fail tracking outwards: no intersect at middle surface" ); - } - } - else - { - ATH_MSG_VERBOSE( " fail tracking ouwards: no intersect at inner surface" ); - } - } - else // backward tracking - { - outerTS = outerTSOS(parameters); - if (outerTS) - { - outerParams = outerTS->trackParameters(); - middleParams = middleParameters(*outerParams); - if (middleParams) - { - innerParams = innerParameters(*middleParams); - if (innerParams) - { - // get calo energy deposit - if (middleParams->momentum().perp() > m_paramPtCut) - { - middleTS = m_caloEnergyDeposit->trackStateOnSurface(*middleParams, - innerParams, - outerParams); - } - else - { - middleTS = m_caloEnergyParam->trackStateOnSurface(*middleParams, - innerParams, - outerParams); - } - delete innerParams; // these will be recomputed below - - // apply energy deposit - const Trk::MaterialEffectsOnTrack* meot = 0; - if (middleTS) meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*> - (middleTS->materialEffectsOnTrack()); - double energyDeposit = 0.; - if (meot) energyDeposit = meot->energyLoss()->deltaE(); - Amg::Vector3D momentum = middleParams->momentum(); - double correctedEnergy = momentum.mag() + energyDeposit; - - // fail potential loopers - if (correctedEnergy < 0.5*Gaudi::Units::GeV) - { - delete middleTS; - middleTS = 0; - ATH_MSG_VERBOSE( " fail tracking inwards: momentum " << momentum.mag()/Gaudi::Units::GeV - << " energyDeposit " << energyDeposit/Gaudi::Units::GeV - << " correctedEnergy " << correctedEnergy/Gaudi::Units::GeV - << " (GeV units)" ); - } - else - { - momentum *= 1. + energyDeposit/momentum.mag(); - const Trk::TrackParameters* params = 0; - const Trk::CylinderSurface* cylinder = - dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface()); - AmgSymMatrix(5)* cov = middleParams->covariance() ? new AmgSymMatrix(5)(*middleParams->covariance()) : 0; + // track to calo surfaces - first decide in or outwards + bool trackOutwards = true; + if (dynamic_cast<const Trk::PerigeeSurface*>(¶meters.associatedSurface())) { + if (parameters.associatedSurface().center().perp() > 0.5 * Gaudi::Units::meter) trackOutwards = false; + } else if (std::abs(parameters.position().z()) > 4.0 * Gaudi::Units::meter + || parameters.position().perp() > 1.2 * Gaudi::Units::meter) + { + trackOutwards = false; + } + + if (trackOutwards) // forward tracking + { + innerTS = innerTSOS(parameters); + if (innerTS) { + innerParams = innerTS->trackParameters(); + if (innerParams->momentum().dot(innerParams->position()) > 0.) { + middleParams = middleParameters(*innerParams); + } else { + ATH_MSG_VERBOSE(" quit as looper " << innerParams); + } + if (middleParams) { + // get calo energy deposit + middleTS = m_caloEnergyParam->trackStateOnSurface(*middleParams, innerParams, outerParams); + if (!middleTS) { + delete middleParams; + middleParams = 0; + } + } + if (middleParams) { + // apply energy deposit to give outgoing middleParams, + // note the iteration required to get optimum energy correction + const Trk::TrackParameters* params = 0; + for (int iterate = 0; iterate != 2; ++iterate) { + double energyDeposit = 0.; + if (!middleTS) break; + const Trk::MaterialEffectsOnTrack* meot = + dynamic_cast<const Trk::MaterialEffectsOnTrack*>(middleTS->materialEffectsOnTrack()); + if (meot) energyDeposit = meot->energyLoss()->deltaE(); + middleParams = middleTS->trackParameters(); + Amg::Vector3D momentum = middleParams->momentum(); + double correctedEnergy = innerParams->momentum().mag() - energyDeposit; + + // fail potential loopers + if (fieldCache.toroidOn() && correctedEnergy < m_minRemainingEnergy) { + delete middleTS; + middleTS = 0; + ATH_MSG_VERBOSE(" fail tracking outwards: momentum " + << momentum.mag() / Gaudi::Units::GeV << " energyDeposit " + << energyDeposit / Gaudi::Units::GeV << " correctedEnergy " + << correctedEnergy / Gaudi::Units::GeV << " (GeV units)"); + break; + } else { + // toroid off: set floor for remaining energy + if (correctedEnergy < m_minRemainingEnergy) { + momentum *= m_minRemainingEnergy / momentum.mag(); + } else { + momentum *= correctedEnergy / momentum.mag(); + } + + const Trk::CylinderSurface* cylinder = + dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface()); + if (cylinder) { + params = new const Trk::AtaCylinder(middleParams->position(), momentum, + middleParams->charge(), *cylinder); + } else { + const Trk::DiscSurface* disc = + dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface()); + if (disc) { + params = new const Trk::AtaDisc(middleParams->position(), momentum, + middleParams->charge(), *disc); + } else { + ATH_MSG_WARNING(" caloTSOS: unexpected TrackParameters type "); + } + } + + // delete middle and outer, + // then recompute with parameters as for backwards tracking + delete middleTS; + if (!params) { + middleTS = 0; + } else if (params->momentum().perp() > m_paramPtCut) { + middleTS = m_caloEnergyDeposit->trackStateOnSurface(*params, innerParams, outerParams); + } else { + middleTS = m_caloEnergyParam->trackStateOnSurface(*params, innerParams, outerParams); + } + } + delete outerTS; + if (middleTS) { + outerTS = outerTSOS(*params); + } else { + delete params; + } + } + } + if (!middleTS) { + ATH_MSG_VERBOSE(" fail tracking outwards: no intersect at middle surface"); + } + } else { + ATH_MSG_VERBOSE(" fail tracking ouwards: no intersect at inner surface"); + } + } else // backward tracking + { + outerTS = outerTSOS(parameters); + if (outerTS) { + outerParams = outerTS->trackParameters(); + middleParams = middleParameters(*outerParams); + if (middleParams) { + innerParams = innerParameters(*middleParams); + if (innerParams) { + // get calo energy deposit + if (middleParams->momentum().perp() > m_paramPtCut) { + middleTS = m_caloEnergyDeposit->trackStateOnSurface(*middleParams, innerParams, outerParams); + } else { + middleTS = m_caloEnergyParam->trackStateOnSurface(*middleParams, innerParams, outerParams); + } + delete innerParams; // these will be recomputed below + + // apply energy deposit + const Trk::MaterialEffectsOnTrack* meot = 0; + if (middleTS) + meot = dynamic_cast<const Trk::MaterialEffectsOnTrack*>(middleTS->materialEffectsOnTrack()); + double energyDeposit = 0.; + if (meot) energyDeposit = meot->energyLoss()->deltaE(); + Amg::Vector3D momentum = middleParams->momentum(); + double correctedEnergy = momentum.mag() + energyDeposit; + + // fail potential loopers + if (correctedEnergy < 0.5 * Gaudi::Units::GeV) { + delete middleTS; + middleTS = 0; + ATH_MSG_VERBOSE(" fail tracking inwards: momentum " + << momentum.mag() / Gaudi::Units::GeV << " energyDeposit " + << energyDeposit / Gaudi::Units::GeV << " correctedEnergy " + << correctedEnergy / Gaudi::Units::GeV << " (GeV units)"); + } else { + momentum *= 1. + energyDeposit / momentum.mag(); + const Trk::TrackParameters* params = 0; + const Trk::CylinderSurface* cylinder = + dynamic_cast<const Trk::CylinderSurface*>(&middleParams->associatedSurface()); + AmgSymMatrix(5)* cov = + middleParams->covariance() ? new AmgSymMatrix(5)(*middleParams->covariance()) : 0; bool deleteCov = true; - if (cylinder) - { - params = new const Trk::AtaCylinder(middleParams->position(), - momentum, - middleParams->charge(), - *cylinder, - cov); - deleteCov = false; - } - else - { - const Trk::DiscSurface* disc = - dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface()); - if (disc) - { - params = new const Trk::AtaDisc(middleParams->position(), - momentum, - middleParams->charge(), - *disc, - cov); + if (cylinder) { + params = new const Trk::AtaCylinder(middleParams->position(), momentum, + middleParams->charge(), *cylinder, cov); + deleteCov = false; + } else { + const Trk::DiscSurface* disc = + dynamic_cast<const Trk::DiscSurface*>(&middleParams->associatedSurface()); + if (disc) { + params = new const Trk::AtaDisc(middleParams->position(), momentum, + middleParams->charge(), *disc, cov); deleteCov = false; - } - else - { - ATH_MSG_WARNING( " caloTSOS: unexpected TrackParameters type " ); - } - } - if (params && middleTS) innerTS = innerTSOS(*params); - if(deleteCov) delete cov; - delete params; - } - } - else - { - ATH_MSG_VERBOSE( " fail tracking inwards: no intersect at inner surface" ); - delete middleParams; - } - } - else - { - ATH_MSG_VERBOSE( " fail tracking inwards: no intersect at middle surface" ); - } - } - } - - std::vector<const Trk::TrackStateOnSurface*>* caloTSOS = - new std::vector<const Trk::TrackStateOnSurface*>; + } else { + ATH_MSG_WARNING(" caloTSOS: unexpected TrackParameters type "); + } + } + if (params && middleTS) innerTS = innerTSOS(*params); + if (deleteCov) delete cov; + delete params; + } + } else { + ATH_MSG_VERBOSE(" fail tracking inwards: no intersect at inner surface"); + delete middleParams; + } + } else { + ATH_MSG_VERBOSE(" fail tracking inwards: no intersect at middle surface"); + } + } + } + + std::vector<const Trk::TrackStateOnSurface*>* caloTSOS = new std::vector<const Trk::TrackStateOnSurface*>; caloTSOS->reserve(3); - if (innerTS) caloTSOS->push_back(innerTS); - if (middleTS) caloTSOS->push_back(middleTS); - if (outerTS) caloTSOS->push_back(outerTS); + if (innerTS) caloTSOS->push_back(innerTS); + if (middleTS) caloTSOS->push_back(middleTS); + if (outerTS) caloTSOS->push_back(outerTS); // keep some statistics ++m_count; - if (caloTSOS->size() < 3) - { - if (caloTSOS->size() == 0) - { - ++m_countCompleteFailure; - } - else - { - if (! innerTS) ++m_countInnerFailure; - if (! outerTS) ++m_countOuterFailure; - } - - ATH_MSG_DEBUG( " caloTSOS: only " << caloTSOS->size() << " calo surfaces associated" ); + if (caloTSOS->size() < 3) { + if (caloTSOS->size() == 0) { + ++m_countCompleteFailure; + } else { + if (!innerTS) ++m_countInnerFailure; + if (!outerTS) ++m_countOuterFailure; + } + + ATH_MSG_DEBUG(" caloTSOS: only " << caloTSOS->size() << " calo surfaces associated"); } - + return caloTSOS; } const Trk::TrackStateOnSurface* -MuidCaloTrackStateOnSurface::innerTSOS (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::innerTSOS(const Trk::TrackParameters& parameters) const { - const Trk::TrackParameters* extrapolation = innerParameters(parameters); - if (! extrapolation || extrapolation->position().perp() < m_minCaloRadius) - { - ATH_MSG_DEBUG( " innerTSOS: extrapolation fails " ); - delete extrapolation; - return nullptr; + const Trk::TrackParameters* extrapolation = innerParameters(parameters); + if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) { + ATH_MSG_DEBUG(" innerTSOS: extrapolation fails "); + delete extrapolation; + return nullptr; } return m_caloMaterialParam->trackStateOnSurface(extrapolation); } const Trk::TrackStateOnSurface* -MuidCaloTrackStateOnSurface::outerTSOS (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::outerTSOS(const Trk::TrackParameters& parameters) const { - const Trk::TrackParameters* extrapolation = outerParameters(parameters); - if (! extrapolation || extrapolation->position().perp() < m_minCaloRadius) - { - ATH_MSG_DEBUG( " outerTSOS: extrapolation fails " ); - delete extrapolation; - return nullptr; + const Trk::TrackParameters* extrapolation = outerParameters(parameters); + if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) { + ATH_MSG_DEBUG(" outerTSOS: extrapolation fails "); + delete extrapolation; + return nullptr; } return m_caloMaterialParam->trackStateOnSurface(extrapolation); } const Trk::TrackStateOnSurface* -MuidCaloTrackStateOnSurface::middleTSOS (const Trk::TrackParameters& middleParams, - const Trk::TrackParameters* innerParams, - const Trk::TrackParameters* outerParams) const +MuidCaloTrackStateOnSurface::middleTSOS(const Trk::TrackParameters& middleParams, + const Trk::TrackParameters* innerParams, + const Trk::TrackParameters* outerParams) const { - const Trk::TrackParameters* extrapolation = middleParameters(middleParams); - if (! extrapolation || extrapolation->position().perp() < m_minCaloRadius) - { - ATH_MSG_DEBUG( " middleTSOS: extrapolation fails " ); - delete extrapolation; - return nullptr; + const Trk::TrackParameters* extrapolation = middleParameters(middleParams); + if (!extrapolation || extrapolation->position().perp() < m_minCaloRadius) { + ATH_MSG_DEBUG(" middleTSOS: extrapolation fails "); + delete extrapolation; + return nullptr; } const Trk::TrackStateOnSurface* TSOS = 0; - if (extrapolation->momentum().perp() > m_paramPtCut) - { - TSOS = m_caloEnergyDeposit->trackStateOnSurface(*extrapolation, - innerParams, - outerParams); - } - else - { - TSOS = m_caloEnergyParam->trackStateOnSurface(*extrapolation, - innerParams, - outerParams); + if (extrapolation->momentum().perp() > m_paramPtCut) { + TSOS = m_caloEnergyDeposit->trackStateOnSurface(*extrapolation, innerParams, outerParams); + } else { + TSOS = m_caloEnergyParam->trackStateOnSurface(*extrapolation, innerParams, outerParams); } return TSOS; @@ -497,519 +369,396 @@ MuidCaloTrackStateOnSurface::middleTSOS (const Trk::TrackParameters& middleParam //<<<<<< PRIVATE MEMBER FUNCTION DEFINITIONS >>>>>> const Trk::TrackParameters* -MuidCaloTrackStateOnSurface::innerParameters (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::innerParameters(const Trk::TrackParameters& parameters) const { // will need to know whether forward or back tracking - Trk::PropDirection momentumDirection = Trk::alongMomentum; - Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; - Trk::PropDirection propDirection = Trk::anyDirection; - + Trk::PropDirection momentumDirection = Trk::alongMomentum; + Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; + Trk::PropDirection propDirection = Trk::anyDirection; + // initial surface at track eta - // using position or direction according to distance from origin - double startingPhi = 0.; - const Trk::Surface* surface = 0; - if (useEtaPhiFromDirection(parameters)) - { - startingPhi = parameters.momentum().phi(); - surface = m_caloMaterialParam->innerSurface(parameters.momentum().eta()); - } - else - { - startingPhi = parameters.position().phi(); - surface = m_caloMaterialParam->innerSurface(parameters.position().eta()); - if (parameters.momentum().dot(parameters.position()) < 0.) - { - momentumDirection = Trk::oppositeMomentum; - oppositeDirection = Trk::alongMomentum; - } - } - if (! surface) return nullptr; + double startingPhi = 0.; + const Trk::Surface* surface = 0; + if (useEtaPhiFromDirection(parameters)) { + startingPhi = parameters.momentum().phi(); + surface = m_caloMaterialParam->innerSurface(parameters.momentum().eta()); + } else { + startingPhi = parameters.position().phi(); + surface = m_caloMaterialParam->innerSurface(parameters.position().eta()); + if (parameters.momentum().dot(parameters.position()) < 0.) { + momentumDirection = Trk::oppositeMomentum; + oppositeDirection = Trk::alongMomentum; + } + } + if (!surface) return nullptr; // extrapolate to calo surface (take care to get correct cylinder intersect) - unsigned extrapolations = 0; - const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); - if (cylinder) - { - if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - const Trk::TrackParameters* extrapolation = - m_propagator->propagate(parameters, - *surface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) return nullptr; + unsigned extrapolations = 0; + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); + if (cylinder) { + if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } + const Trk::TrackParameters* extrapolation = + m_propagator->propagate(parameters, *surface, propDirection, false, *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) return nullptr; // phi flip means track has crossed beam-axis (so quit) double deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } // also quit wrong rz-direction in endcap - if (! cylinder) - { - double signRZ = (extrapolation->position().perp() - parameters.position().perp()) * - (extrapolation->position().z() - parameters.position().z()); - if (signRZ*extrapolation->position().z() < 0.) - { - ATH_MSG_VERBOSE( " wrong way in endcap " ); - delete extrapolation; - return nullptr; - } + if (!cylinder) { + double signRZ = (extrapolation->position().perp() - parameters.position().perp()) + * (extrapolation->position().z() - parameters.position().z()); + if (signRZ * extrapolation->position().z() < 0.) { + ATH_MSG_VERBOSE(" wrong way in endcap "); + delete extrapolation; + return nullptr; + } } - + // iterate if extrapolated surface is different - bool restart = false; - const Trk::Surface* oldSurface = surface; - const Trk::Surface* extrapolatedSurface = - m_caloMaterialParam->innerSurface(extrapolation->position().eta()); - while (++extrapolations < 5 - && extrapolatedSurface != oldSurface - && extrapolatedSurface != surface) - { - // take care to get correct solution for cylinder when starting from inside - const Trk::CylinderSurface* cylinder = - dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); - if (cylinder) - { - if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - else - { - propDirection = Trk::anyDirection; - } - - const Trk::TrackParameters* oldParameters = extrapolation; - extrapolation = m_propagator->propagate(*oldParameters, - *extrapolatedSurface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) - { - // restart from input parameters (if not already done) - // trap no solution after restart - if (oldParameters == ¶meters) - { - ATH_MSG_VERBOSE( " innerParameters: extrap fails " ); - return nullptr; - } - if (restart) - { - ATH_MSG_DEBUG( " innerParameters: oscillating => arbitrary solution chosen" ); - ++m_countArbitrarySolution; - extrapolation = oldParameters; - extrapolatedSurface = &extrapolation->associatedSurface(); - surface = extrapolatedSurface; - } - else - { - ATH_MSG_VERBOSE( " innerParameters: restart extrap after " - << extrapolations << " extrapolations" ); - delete oldParameters; - restart = true; - extrapolations -= 2; - extrapolation = ¶meters; - surface = oldSurface; - } - } - else - { - // update surface - if (oldParameters != ¶meters) delete oldParameters; - oldSurface = surface; - surface = extrapolatedSurface; - extrapolatedSurface = m_caloMaterialParam->innerSurface(extrapolation->position().eta()); - } + bool restart = false; + const Trk::Surface* oldSurface = surface; + const Trk::Surface* extrapolatedSurface = m_caloMaterialParam->innerSurface(extrapolation->position().eta()); + while (++extrapolations < 5 && extrapolatedSurface != oldSurface && extrapolatedSurface != surface) { + // take care to get correct solution for cylinder when starting from inside + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); + if (cylinder) { + if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } else { + propDirection = Trk::anyDirection; + } + + const Trk::TrackParameters* oldParameters = extrapolation; + extrapolation = m_propagator->propagate(*oldParameters, *extrapolatedSurface, propDirection, false, + *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) { + // restart from input parameters (if not already done) + // trap no solution after restart + if (oldParameters == ¶meters) { + ATH_MSG_VERBOSE(" innerParameters: extrap fails "); + return nullptr; + } + if (restart) { + ATH_MSG_DEBUG(" innerParameters: oscillating => arbitrary solution chosen"); + ++m_countArbitrarySolution; + extrapolation = oldParameters; + extrapolatedSurface = &extrapolation->associatedSurface(); + surface = extrapolatedSurface; + } else { + ATH_MSG_VERBOSE(" innerParameters: restart extrap after " << extrapolations << " extrapolations"); + delete oldParameters; + restart = true; + extrapolations -= 2; + extrapolation = ¶meters; + surface = oldSurface; + } + } else { + // update surface + if (oldParameters != ¶meters) delete oldParameters; + oldSurface = surface; + surface = extrapolatedSurface; + extrapolatedSurface = m_caloMaterialParam->innerSurface(extrapolation->position().eta()); + } } // final check for phi flip deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } - ATH_MSG_VERBOSE( " innerParameters: success after " - << extrapolations << " extrapolation step(s). " - << std::setiosflags(std::ios::fixed) << " Intersection at: r,phi,z " - << std::setw(7) << std::setprecision(1) << extrapolation->position().perp() - << std::setw(7) << std::setprecision(3) << extrapolation->position().phi() - << std::setw(8) << std::setprecision(1) << extrapolation->position().z() - << " Direction: eta,phi " - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().eta() - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().phi() ); - + ATH_MSG_VERBOSE(" innerParameters: success after " + << extrapolations << " extrapolation step(s). " << std::setiosflags(std::ios::fixed) + << " Intersection at: r,phi,z " << std::setw(7) << std::setprecision(1) + << extrapolation->position().perp() << std::setw(7) << std::setprecision(3) + << extrapolation->position().phi() << std::setw(8) << std::setprecision(1) + << extrapolation->position().z() << " Direction: eta,phi " << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().eta() << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().phi()); + return extrapolation; } const Trk::TrackParameters* -MuidCaloTrackStateOnSurface::middleParameters (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::middleParameters(const Trk::TrackParameters& parameters) const { // will need to know whether forward or back tracking - Trk::PropDirection momentumDirection = Trk::alongMomentum; - Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; - Trk::PropDirection propDirection = Trk::anyDirection; - + Trk::PropDirection momentumDirection = Trk::alongMomentum; + Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; + Trk::PropDirection propDirection = Trk::anyDirection; + // initial surface at track eta - // using position or direction according to distance from origin - double startingPhi = 0.; - const Trk::Surface* surface = 0; - if (useEtaPhiFromDirection(parameters)) - { - startingPhi = parameters.momentum().phi(); - surface = m_caloMaterialParam->middleSurface(parameters.momentum().eta()); - } - else - { - startingPhi = parameters.position().phi(); - surface = m_caloMaterialParam->middleSurface(parameters.position().eta()); - if (parameters.momentum().dot(parameters.position()) < 0.) - { - momentumDirection = Trk::oppositeMomentum; - oppositeDirection = Trk::alongMomentum; - } - } - if (! surface) return nullptr; + double startingPhi = 0.; + const Trk::Surface* surface = 0; + if (useEtaPhiFromDirection(parameters)) { + startingPhi = parameters.momentum().phi(); + surface = m_caloMaterialParam->middleSurface(parameters.momentum().eta()); + } else { + startingPhi = parameters.position().phi(); + surface = m_caloMaterialParam->middleSurface(parameters.position().eta()); + if (parameters.momentum().dot(parameters.position()) < 0.) { + momentumDirection = Trk::oppositeMomentum; + oppositeDirection = Trk::alongMomentum; + } + } + if (!surface) return nullptr; // extrapolate to calo surface (take care to get correct cylinder intersect) - unsigned extrapolations = 0; - const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); - if (cylinder) - { - if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - const Trk::TrackParameters* extrapolation = - m_propagator->propagate(parameters, - *surface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) return nullptr; + unsigned extrapolations = 0; + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); + if (cylinder) { + if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } + const Trk::TrackParameters* extrapolation = + m_propagator->propagate(parameters, *surface, propDirection, false, *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) return nullptr; // phi flip means track has crossed beam-axis (so quit) double deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } // also quit wrong rz-direction in endcap - if (! cylinder) - { - double signRZ = (extrapolation->position().perp() - parameters.position().perp()) * - (extrapolation->position().z() - parameters.position().z()); - if (signRZ*extrapolation->position().z() < 0.) - { - ATH_MSG_VERBOSE( " wrong way in endcap " ); - delete extrapolation; - return nullptr; - } + if (!cylinder) { + double signRZ = (extrapolation->position().perp() - parameters.position().perp()) + * (extrapolation->position().z() - parameters.position().z()); + if (signRZ * extrapolation->position().z() < 0.) { + ATH_MSG_VERBOSE(" wrong way in endcap "); + delete extrapolation; + return nullptr; + } } - + // iterate if extrapolated surface is different - bool restart = false; - const Trk::Surface* oldSurface = surface; - const Trk::Surface* extrapolatedSurface = - m_caloMaterialParam->middleSurface(extrapolation->position().eta()); - while (++extrapolations < 5 - && extrapolatedSurface != oldSurface - && extrapolatedSurface != surface) - { - // take care to get correct solution for cylinder when starting from inside - const Trk::CylinderSurface* cylinder = - dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); - if (cylinder) - { - if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - else - { - propDirection = Trk::anyDirection; - } - - const Trk::TrackParameters* oldParameters = extrapolation; - extrapolation = m_propagator->propagate(*oldParameters, - *extrapolatedSurface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) - { - // restart from input parameters (if not already done) - // trap no solution after restart - if (oldParameters == ¶meters) - { - ATH_MSG_VERBOSE( " middleParameters: extrap fails " ); - return nullptr; - } - // arbitrary choice for oscillating solutions (i.e. following restart) - if (restart) - { - ATH_MSG_DEBUG( " middleParameters: oscillating => arbitrary solution chosen" ); - ++m_countArbitrarySolution; - extrapolation = oldParameters; - extrapolatedSurface = &extrapolation->associatedSurface(); - surface = extrapolatedSurface; - } - else - { - ATH_MSG_VERBOSE( " middleParameters: restart extrap after " - << extrapolations << " extrapolations" ); - delete oldParameters; - restart = true; - extrapolations -= 2; - extrapolation = ¶meters; - surface = oldSurface; - } - } - else - { - // update surface - if (oldParameters != ¶meters) delete oldParameters; - oldSurface = surface; - surface = extrapolatedSurface; - extrapolatedSurface = m_caloMaterialParam->middleSurface(extrapolation->position().eta()); - } + bool restart = false; + const Trk::Surface* oldSurface = surface; + const Trk::Surface* extrapolatedSurface = m_caloMaterialParam->middleSurface(extrapolation->position().eta()); + while (++extrapolations < 5 && extrapolatedSurface != oldSurface && extrapolatedSurface != surface) { + // take care to get correct solution for cylinder when starting from inside + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); + if (cylinder) { + if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } else { + propDirection = Trk::anyDirection; + } + + const Trk::TrackParameters* oldParameters = extrapolation; + extrapolation = m_propagator->propagate(*oldParameters, *extrapolatedSurface, propDirection, false, + *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) { + // restart from input parameters (if not already done) + // trap no solution after restart + if (oldParameters == ¶meters) { + ATH_MSG_VERBOSE(" middleParameters: extrap fails "); + return nullptr; + } + // arbitrary choice for oscillating solutions (i.e. following restart) + if (restart) { + ATH_MSG_DEBUG(" middleParameters: oscillating => arbitrary solution chosen"); + ++m_countArbitrarySolution; + extrapolation = oldParameters; + extrapolatedSurface = &extrapolation->associatedSurface(); + surface = extrapolatedSurface; + } else { + ATH_MSG_VERBOSE(" middleParameters: restart extrap after " << extrapolations << " extrapolations"); + delete oldParameters; + restart = true; + extrapolations -= 2; + extrapolation = ¶meters; + surface = oldSurface; + } + } else { + // update surface + if (oldParameters != ¶meters) delete oldParameters; + oldSurface = surface; + surface = extrapolatedSurface; + extrapolatedSurface = m_caloMaterialParam->middleSurface(extrapolation->position().eta()); + } } // final check for phi flip deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } - ATH_MSG_VERBOSE( " middleParameters: success after " - << extrapolations << " extrapolation step(s). " - << std::setiosflags(std::ios::fixed) << " Intersection at: r,phi,z " - << std::setw(7) << std::setprecision(1) << extrapolation->position().perp() - << std::setw(7) << std::setprecision(3) << extrapolation->position().phi() - << std::setw(8) << std::setprecision(1) << extrapolation->position().z() - << " Direction: eta,phi " - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().eta() - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().phi() ); + ATH_MSG_VERBOSE(" middleParameters: success after " + << extrapolations << " extrapolation step(s). " << std::setiosflags(std::ios::fixed) + << " Intersection at: r,phi,z " << std::setw(7) << std::setprecision(1) + << extrapolation->position().perp() << std::setw(7) << std::setprecision(3) + << extrapolation->position().phi() << std::setw(8) << std::setprecision(1) + << extrapolation->position().z() << " Direction: eta,phi " << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().eta() << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().phi()); return extrapolation; } const Trk::TrackParameters* -MuidCaloTrackStateOnSurface::outerParameters (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::outerParameters(const Trk::TrackParameters& parameters) const { // will need to know whether forward or back tracking - Trk::PropDirection momentumDirection = Trk::alongMomentum; - Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; - Trk::PropDirection propDirection = Trk::anyDirection; - + Trk::PropDirection momentumDirection = Trk::alongMomentum; + Trk::PropDirection oppositeDirection = Trk::oppositeMomentum; + Trk::PropDirection propDirection = Trk::anyDirection; + // initial surface at track eta - // using position or direction according to distance from origin - double startingPhi = 0.; - const Trk::Surface* surface = 0; - if (useEtaPhiFromDirection(parameters)) - { - startingPhi = parameters.momentum().phi(); - surface = m_caloMaterialParam->outerSurface(parameters.momentum().eta()); - } - else - { - startingPhi = parameters.position().phi(); - surface = m_caloMaterialParam->outerSurface(parameters.position().eta()); - if (parameters.momentum().dot(parameters.position()) < 0.) - { - momentumDirection = Trk::oppositeMomentum; - oppositeDirection = Trk::alongMomentum; - } - } - if (! surface) return nullptr; + double startingPhi = 0.; + const Trk::Surface* surface = 0; + if (useEtaPhiFromDirection(parameters)) { + startingPhi = parameters.momentum().phi(); + surface = m_caloMaterialParam->outerSurface(parameters.momentum().eta()); + } else { + startingPhi = parameters.position().phi(); + surface = m_caloMaterialParam->outerSurface(parameters.position().eta()); + if (parameters.momentum().dot(parameters.position()) < 0.) { + momentumDirection = Trk::oppositeMomentum; + oppositeDirection = Trk::alongMomentum; + } + } + if (!surface) return nullptr; // extrapolate to calo surface (take care to get correct cylinder intersect) - unsigned extrapolations = 0; - const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); - if (cylinder) - { - if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - const Trk::TrackParameters* extrapolation = - m_propagator->propagate(parameters, - *surface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) return nullptr; + unsigned extrapolations = 0; + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(surface); + if (cylinder) { + if (parameters.position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } + const Trk::TrackParameters* extrapolation = + m_propagator->propagate(parameters, *surface, propDirection, false, *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) return nullptr; // phi flip means track has crossed beam-axis (so quit) double deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } - + // also quit wrong rz-direction in endcap - if (! cylinder) - { - double signRZ = (extrapolation->position().perp() - parameters.position().perp()) * - (extrapolation->position().z() - parameters.position().z()); - if (signRZ*extrapolation->position().z() < 0.) - { - ATH_MSG_VERBOSE( " wrong way in endcap " ); - delete extrapolation; - return nullptr; - } + if (!cylinder) { + double signRZ = (extrapolation->position().perp() - parameters.position().perp()) + * (extrapolation->position().z() - parameters.position().z()); + if (signRZ * extrapolation->position().z() < 0.) { + ATH_MSG_VERBOSE(" wrong way in endcap "); + delete extrapolation; + return nullptr; + } } - + // iterate if extrapolated surface is different - bool restart = false; - const Trk::Surface* oldSurface = surface; - const Trk::Surface* extrapolatedSurface = - m_caloMaterialParam->outerSurface(extrapolation->position().eta()); - while (++extrapolations < 5 - && extrapolatedSurface != oldSurface - && extrapolatedSurface != surface) - { - // take care to get correct solution for cylinder when starting from inside - const Trk::CylinderSurface* cylinder = - dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); - if (cylinder) - { - if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) - { - propDirection = momentumDirection; - } - else - { - propDirection = oppositeDirection; - } - } - else - { - propDirection = Trk::anyDirection; - } - - const Trk::TrackParameters* oldParameters = extrapolation; - extrapolation = m_propagator->propagate(*oldParameters, - *extrapolatedSurface, - propDirection, - false, - *m_magFieldProperties, - Trk::nonInteracting); - if (! extrapolation) - { - // restart from input parameters (if not already done) - // trap no solution after restart - if (oldParameters == ¶meters) - { - ATH_MSG_VERBOSE( " outerParameters: extrap fails " ); - return nullptr; - } - // arbitrary choice for oscillating solutions (i.e. following restart) - if (restart) - { - ATH_MSG_DEBUG( " outerParameters: oscillating => arbitrary solution chosen" ); - ++m_countArbitrarySolution; - extrapolation = oldParameters; - extrapolatedSurface = &extrapolation->associatedSurface(); - surface = extrapolatedSurface; - } - else - { - ATH_MSG_VERBOSE( " outerParameters: restart extrap after " - << extrapolations << " extrapolations" ); - delete oldParameters; - restart = true; - extrapolations -= 2; - extrapolation = ¶meters; - surface = oldSurface; - } - } - else - { - // update surface - if (oldParameters != ¶meters) delete oldParameters; - oldSurface = surface; - surface = extrapolatedSurface; - extrapolatedSurface = m_caloMaterialParam->outerSurface(extrapolation->position().eta()); - } + bool restart = false; + const Trk::Surface* oldSurface = surface; + const Trk::Surface* extrapolatedSurface = m_caloMaterialParam->outerSurface(extrapolation->position().eta()); + while (++extrapolations < 5 && extrapolatedSurface != oldSurface && extrapolatedSurface != surface) { + // take care to get correct solution for cylinder when starting from inside + const Trk::CylinderSurface* cylinder = dynamic_cast<const Trk::CylinderSurface*>(extrapolatedSurface); + if (cylinder) { + if (extrapolation->position().perp() < cylinder->globalReferencePoint().perp()) { + propDirection = momentumDirection; + } else { + propDirection = oppositeDirection; + } + } else { + propDirection = Trk::anyDirection; + } + + const Trk::TrackParameters* oldParameters = extrapolation; + extrapolation = m_propagator->propagate(*oldParameters, *extrapolatedSurface, propDirection, false, + *m_magFieldProperties, Trk::nonInteracting); + if (!extrapolation) { + // restart from input parameters (if not already done) + // trap no solution after restart + if (oldParameters == ¶meters) { + ATH_MSG_VERBOSE(" outerParameters: extrap fails "); + return nullptr; + } + // arbitrary choice for oscillating solutions (i.e. following restart) + if (restart) { + ATH_MSG_DEBUG(" outerParameters: oscillating => arbitrary solution chosen"); + ++m_countArbitrarySolution; + extrapolation = oldParameters; + extrapolatedSurface = &extrapolation->associatedSurface(); + surface = extrapolatedSurface; + } else { + ATH_MSG_VERBOSE(" outerParameters: restart extrap after " << extrapolations << " extrapolations"); + delete oldParameters; + restart = true; + extrapolations -= 2; + extrapolation = ¶meters; + surface = oldSurface; + } + } else { + // update surface + if (oldParameters != ¶meters) delete oldParameters; + oldSurface = surface; + surface = extrapolatedSurface; + extrapolatedSurface = m_caloMaterialParam->outerSurface(extrapolation->position().eta()); + } } // final check for phi flip deltaPhi = std::abs(extrapolation->position().phi() - startingPhi); - if (deltaPhi > 0.5*M_PI && deltaPhi < 1.5*M_PI) - { - delete extrapolation; - return nullptr; + if (deltaPhi > 0.5 * M_PI && deltaPhi < 1.5 * M_PI) { + delete extrapolation; + return nullptr; } - ATH_MSG_VERBOSE( " outerParameters: success after " - << extrapolations << " extrapolation step(s). " - << std::setiosflags(std::ios::fixed) << " Intersection at: r,phi,z " - << std::setw(7) << std::setprecision(1) << extrapolation->position().perp() - << std::setw(7) << std::setprecision(3) << extrapolation->position().phi() - << std::setw(8) << std::setprecision(1) << extrapolation->position().z() - << " Direction: eta,phi " - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().eta() - << std::setw(7) << std::setprecision(3) << extrapolation->momentum().phi() ); - + ATH_MSG_VERBOSE(" outerParameters: success after " + << extrapolations << " extrapolation step(s). " << std::setiosflags(std::ios::fixed) + << " Intersection at: r,phi,z " << std::setw(7) << std::setprecision(1) + << extrapolation->position().perp() << std::setw(7) << std::setprecision(3) + << extrapolation->position().phi() << std::setw(8) << std::setprecision(1) + << extrapolation->position().z() << " Direction: eta,phi " << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().eta() << std::setw(7) << std::setprecision(3) + << extrapolation->momentum().phi()); + return extrapolation; } bool -MuidCaloTrackStateOnSurface::useEtaPhiFromDirection (const Trk::TrackParameters& parameters) const +MuidCaloTrackStateOnSurface::useEtaPhiFromDirection(const Trk::TrackParameters& parameters) const { - // estimate eta,phi for the track intersect with the calo from the track direction when the + // estimate eta,phi for the track intersect with the calo from the track direction when the // parameters are expressed near the beam-line, further out it's better to use the track position - double parameterDistance = parameters.position().mag(); + double parameterDistance = parameters.position().mag(); if (dynamic_cast<const Trk::PerigeeSurface*>(¶meters.associatedSurface())) - parameterDistance = parameters.associatedSurface().center().perp(); - - if (parameterDistance < 0.5*Gaudi::Units::meter) return true; + parameterDistance = parameters.associatedSurface().center().perp(); + + if (parameterDistance < 0.5 * Gaudi::Units::meter) return true; return false; } -} // end of namespace +} // namespace Rec diff --git a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidMaterialEffectsOnTrackProvider.cxx b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidMaterialEffectsOnTrackProvider.cxx index 2163443c04da9841f251c458d71b572e2420b7e1..efe6628c48c347dda38b7fcf1b6869a6ef64cda3 100644 --- a/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidMaterialEffectsOnTrackProvider.cxx +++ b/Reconstruction/MuonIdentification/MuidCaloScatteringTools/src/MuidMaterialEffectsOnTrackProvider.cxx @@ -1,13 +1,14 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration */ /////////////////////////////////////////////////////////////////// // MuidMaterialEffectsOnTrackProvider.cxx, (c) ATLAS Detector software /////////////////////////////////////////////////////////////////// -#include "GeoPrimitives/GeoPrimitives.h" #include "MuidCaloScatteringTools/MuidMaterialEffectsOnTrackProvider.h" + +#include "GeoPrimitives/GeoPrimitives.h" #include "TrkGeometry/CylinderLayer.h" #include "TrkGeometry/DiscLayer.h" // #include "TrkGeometry/HomogenousLayerMaterial.h" @@ -23,56 +24,34 @@ #include "muonEvent/CaloEnergy.h" // constructor -Rec::MuidMaterialEffectsOnTrackProvider::MuidMaterialEffectsOnTrackProvider( - const std::string& t, const std::string& n, const IInterface* p) - : AthAlgTool(t,n,p), - m_calotsos("Rec::MuidCaloTrackStateOnSurface/MuidCaloTrackStateOnSurface"), - m_calotsosparam(""), - m_scattool("Trk::MultipleScatteringUpdator/AtlasMultipleScatteringUpdator") +Rec::MuidMaterialEffectsOnTrackProvider::MuidMaterialEffectsOnTrackProvider(const std::string& t, const std::string& n, + const IInterface* p) + : AthAlgTool(t, n, p) { - m_cosmics=false; - declareProperty("Cosmics",m_cosmics); - declareProperty("TSOSTool",m_calotsos); - declareProperty("TSOSToolParam",m_calotsosparam); - declareProperty("MultipleScatteringTool",m_scattool); + m_cosmics = false; + declareProperty("Cosmics", m_cosmics); declareInterface<IMaterialEffectsOnTrackProvider>(this); - } // destructor -Rec::MuidMaterialEffectsOnTrackProvider::~MuidMaterialEffectsOnTrackProvider() -{} +Rec::MuidMaterialEffectsOnTrackProvider::~MuidMaterialEffectsOnTrackProvider() {} // Athena standard methods // initialize StatusCode Rec::MuidMaterialEffectsOnTrackProvider::initialize() { - if (!m_cosmics){ - if (m_calotsos.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_calotsos.name() ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_calotsos.name() ); - } - if (!m_calotsosparam.empty()) { - if (m_calotsosparam.retrieve().isFailure()) - { - ATH_MSG_FATAL( "Failed to retrieve tool " << m_calotsosparam.name() ); - return StatusCode::FAILURE; - } - else - { - ATH_MSG_INFO( "Retrieved tool " << m_calotsosparam.name() ); - } - } - if (m_scattool.retrieve().isFailure()) { - ATH_MSG_FATAL( "Could not get " << m_scattool.type() ); - return StatusCode::FAILURE; - } + if (!m_cosmics) { + + ATH_CHECK(m_calotsos.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_calotsos.name()); + + if (!m_calotsosparam.empty()) { + ATH_CHECK(m_calotsosparam.retrieve()); + ATH_MSG_INFO("Retrieved tool " << m_calotsosparam.name()); + } + + ATH_CHECK(m_scattool.retrieve()); } return StatusCode::SUCCESS; } @@ -81,88 +60,89 @@ Rec::MuidMaterialEffectsOnTrackProvider::initialize() StatusCode Rec::MuidMaterialEffectsOnTrackProvider::finalize() { - ATH_MSG_DEBUG( name() << " finalize() successful" ); + ATH_MSG_DEBUG(name() << " finalize() successful"); return StatusCode::SUCCESS; } -std::vector< Trk::MaterialEffectsOnTrack> -Rec::MuidMaterialEffectsOnTrackProvider::extrapolationSurfacesAndEffects ( - const Trk::TrackingVolume& /*vol*/, - const Trk::IPropagator& /*prop*/, - const Trk::TrackParameters& parm, - const Trk::Surface& /*surf*/, - Trk::PropDirection /*dir*/, - Trk::ParticleHypothesis /*mateffects*/) const +std::vector<Trk::MaterialEffectsOnTrack> +Rec::MuidMaterialEffectsOnTrackProvider::extrapolationSurfacesAndEffects( + const Trk::TrackingVolume& /*vol*/, const Trk::IPropagator& /*prop*/, const Trk::TrackParameters& parm, + const Trk::Surface& /*surf*/, Trk::PropDirection /*dir*/, Trk::ParticleHypothesis /*mateffects*/) const { std::vector<Trk::MaterialEffectsOnTrack> meots; - if (m_cosmics){ - Amg::Vector3D position(0,-3700,0); - - - double X0outer=60; - double X0inner=60; - - Trk::CylinderSurface outersurf(3700,5000); - Trk::CylinderSurface innersurf(2000,5000); - Trk::CylinderSurface middlesurf(2850,5000); - - std::pair<double,double> energy; - - energy.first=-3000; - energy.second=500; // ??? + if (m_cosmics) { + Amg::Vector3D position(0, -3700, 0); + + + double X0outer = 60; + double X0inner = 60; + + Trk::CylinderSurface outersurf(3700, 5000); + Trk::CylinderSurface innersurf(2000, 5000); + Trk::CylinderSurface middlesurf(2850, 5000); + + std::pair<double, double> energy; + + energy.first = -3000; + energy.second = 500; // ??? // log << MSG::DEBUG << " returning " << matLayers->size() << " materialLayers " << endmsg; - ATH_MSG_DEBUG( "first x0: " << X0inner << " second x0: " << X0outer << " eloss: " << energy.first << " sigma: " << energy.second ); - - Trk::MaterialProperties matprop(X0outer,1.,0.,0.,0.,0.); - double sigmascat=std::sqrt(m_scattool->sigmaSquare(matprop,std::abs(1./parm.parameters()[Trk::qOverP]),1.,Trk::muon)); + ATH_MSG_DEBUG("first x0: " << X0inner << " second x0: " << X0outer << " eloss: " << energy.first + << " sigma: " << energy.second); + + Trk::MaterialProperties matprop(X0outer, 1., 0., 0., 0., 0.); + double sigmascat = + std::sqrt(m_scattool->sigmaSquare(matprop, std::abs(1. / parm.parameters()[Trk::qOverP]), 1., Trk::muon)); - Trk::ScatteringAngles *newsa=new Trk::ScatteringAngles(0,0,sigmascat/std::sin(parm.parameters()[Trk::theta]),sigmascat); - Trk::ScatteringAngles *newsa2=new Trk::ScatteringAngles(0,0,sigmascat/std::sin(parm.parameters()[Trk::theta]),sigmascat); + Trk::ScatteringAngles* newsa = + new Trk::ScatteringAngles(0, 0, sigmascat / std::sin(parm.parameters()[Trk::theta]), sigmascat); + Trk::ScatteringAngles* newsa2 = + new Trk::ScatteringAngles(0, 0, sigmascat / std::sin(parm.parameters()[Trk::theta]), sigmascat); - - meots.push_back(Trk::MaterialEffectsOnTrack(X0inner,newsa,innersurf)); - meots.push_back(Trk::MaterialEffectsOnTrack(0,new Trk::EnergyLoss(energy.first,energy.second),middlesurf,Trk::MaterialEffectsBase::EnergyLossEffects)); - meots.push_back(Trk::MaterialEffectsOnTrack(X0outer,newsa2,outersurf)); - for (int i=0;i<3;i++){ - //std::cout << "meot: " << meots[i] << std::endl; + meots.push_back(Trk::MaterialEffectsOnTrack(X0inner, newsa, innersurf)); + meots.push_back(Trk::MaterialEffectsOnTrack(0, new Trk::EnergyLoss(energy.first, energy.second), middlesurf, + Trk::MaterialEffectsBase::EnergyLossEffects)); + meots.push_back(Trk::MaterialEffectsOnTrack(X0outer, newsa2, outersurf)); + for (int i = 0; i < 3; i++) { + // std::cout << "meot: " << meots[i] << std::endl; } - } - else{ - std::vector<const Trk::TrackStateOnSurface*>* tsosvec=m_calotsos->caloTSOS(parm); - if ((!tsosvec || tsosvec->size()!=3) && !m_calotsosparam.empty()) { - if (tsosvec) { - for (int i=0;i< (int)tsosvec->size() ;i++) delete (*tsosvec)[i]; - } - delete tsosvec; - tsosvec=m_calotsosparam->caloTSOS(parm); + } else { + std::vector<const Trk::TrackStateOnSurface*>* tsosvec = m_calotsos->caloTSOS(parm); + if ((!tsosvec || tsosvec->size() != 3) && !m_calotsosparam.empty()) { + if (tsosvec) { + for (int i = 0; i < (int)tsosvec->size(); i++) delete (*tsosvec)[i]; + } + delete tsosvec; + tsosvec = m_calotsosparam->caloTSOS(parm); } - for (int i=0;i< (tsosvec ? (int)tsosvec->size() : 0) ;i++){ - const Trk::MaterialEffectsOnTrack *meot=dynamic_cast<const Trk::MaterialEffectsOnTrack *>((*tsosvec)[i]->materialEffectsOnTrack()); - if(!meot) continue; - double sintheta=std::sin((*tsosvec)[i]->trackParameters()->parameters()[Trk::theta]); - double qoverp=(*tsosvec)[i]->trackParameters()->parameters()[Trk::qOverP]; - const CaloEnergy *eloss=0; - if (meot) eloss=dynamic_cast<const CaloEnergy *>(meot->energyLoss()); - - Trk::EnergyLoss *neweloss=0; - Trk::ScatteringAngles *newsa=0; - if (eloss) neweloss = new CaloEnergy(*eloss); + for (int i = 0; i < (tsosvec ? (int)tsosvec->size() : 0); i++) { + const Trk::MaterialEffectsOnTrack* meot = + dynamic_cast<const Trk::MaterialEffectsOnTrack*>((*tsosvec)[i]->materialEffectsOnTrack()); + if (!meot) continue; + double sintheta = std::sin((*tsosvec)[i]->trackParameters()->parameters()[Trk::theta]); + double qoverp = (*tsosvec)[i]->trackParameters()->parameters()[Trk::qOverP]; + const CaloEnergy* eloss = 0; + if (meot) eloss = dynamic_cast<const CaloEnergy*>(meot->energyLoss()); + + Trk::EnergyLoss* neweloss = 0; + Trk::ScatteringAngles* newsa = 0; + if (eloss) + neweloss = new CaloEnergy(*eloss); else { - Trk::MaterialProperties matprop(meot->thicknessInX0(),1.,0.,0.,0.,0.); - double sigmascat=std::sqrt(m_scattool->sigmaSquare(matprop,std::abs(1./qoverp),1.,Trk::muon)); - newsa=new Trk::ScatteringAngles(0,0,sigmascat/sintheta,sigmascat); + Trk::MaterialProperties matprop(meot->thicknessInX0(), 1., 0., 0., 0., 0.); + double sigmascat = std::sqrt(m_scattool->sigmaSquare(matprop, std::abs(1. / qoverp), 1., Trk::muon)); + newsa = new Trk::ScatteringAngles(0, 0, sigmascat / sintheta, sigmascat); } - Trk::MaterialEffectsOnTrack newmeot(meot->thicknessInX0(),newsa,neweloss,(*tsosvec)[i]->trackParameters()->associatedSurface()); - meots.push_back(newmeot); + Trk::MaterialEffectsOnTrack newmeot(meot->thicknessInX0(), newsa, neweloss, + (*tsosvec)[i]->trackParameters()->associatedSurface()); + meots.push_back(newmeot); delete (*tsosvec)[i]; - } - delete tsosvec; - } - if (meots.size()<3) meots.clear(); + } + delete tsosvec; + } + if (meots.size() < 3) meots.clear(); return meots; } - diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h index 2d12aad72c002a73ca54badba1c58afa9f67bc4a..a2da5f38073357ab4383fa9c88722009d7de30cf 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/MuidTrackBuilder/CombinedMuonTrackBuilder.h @@ -98,13 +98,13 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon Trk::Track* fit(Trk::Track& track, const Trk::RunOutlierRemoval runOutlier = false, const Trk::ParticleHypothesis particleHypothesis = Trk::muon) const; - /** + /** fit a set of MeasurementBase objects with starting value for perigeeParameters */ Trk::Track* fit(const Trk::MeasurementSet& /*measurementSet*/, const Trk::TrackParameters& /*perigeeStartValue*/, const Trk::RunOutlierRemoval /*runOutlier*/, const Trk::ParticleHypothesis /*particleHypothesis*/) const; - /** + /** combined muon fit */ Trk::Track* fit(const Trk::Track& indetTrack, Trk::Track& extrapolatedTrack, const Trk::RunOutlierRemoval runOutlier = false, @@ -171,29 +171,103 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon bool checkTrack(std::string txt, Trk::Track* newTrack, Trk::Track* track) const; // helpers, managers, tools - ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam; - ToolHandle<Rec::IMuidCaloTrackStateOnSurface> m_caloTSOS; - ToolHandle<Muon::IMuonTrackCleaner> m_cleaner; - ToolHandle<Muon::IMuonClusterOnTrackCreator> m_cscRotCreator; - ToolHandle<Trk::IExtrapolator> m_extrapolator; - ToolHandle<Trk::ITrackFitter> m_fitter; // curved track fitter - ToolHandle<Trk::ITrackFitter> m_fitterSL; // straight line fitter - ToolHandle<Trk::IIntersector> m_intersector; - ToolHandle<Trk::IMaterialAllocator> m_materialAllocator; - ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtRotCreator; - ToolHandle<Muon::IMuonErrorOptimisationTool> m_muonErrorOptimizer; - ToolHandle<Muon::IMuonHoleRecoveryTool> m_muonHoleRecovery; - ToolHandle<Trk::IPropagator> m_propagator; - ToolHandle<Trk::IPropagator> m_propagatorSL; - ToolHandle<Muon::MuonEDMPrinterTool> m_printer; - ToolHandle<Rec::IMuonTrackQuery> m_trackQuery; - ToolHandle<Trk::ITrackSummaryTool> m_trackSummary; - ToolHandle<Trk::ITrkMaterialProviderTool> m_materialUpdator; - - ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; + ToolHandle<Rec::IMuidCaloEnergy> m_caloEnergyParam{ + this, + "CaloEnergyParam", + "Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", + }; + ToolHandle<Rec::IMuidCaloTrackStateOnSurface> m_caloTSOS{ + this, + "CaloTSOS", + "Rec::MuidCaloTrackStateOnSurface/MuidCaloTrackStateOnSurface", + }; + ToolHandle<Muon::IMuonTrackCleaner> m_cleaner{ + this, + "Cleaner", + "Muon::MuonTrackCleaner/MuidTrackCleaner", + }; + ToolHandle<Muon::IMuonClusterOnTrackCreator> m_cscRotCreator{ + this, + "CscRotCreator", + "", + }; + ToolHandle<Trk::IExtrapolator> m_extrapolator{ + this, + "Extrapolator", + "Trk::Extrapolator/AtlasExtrapolator", + }; + ToolHandle<Trk::ITrackFitter> m_fitter{ + this, + "Fitter", + "Trk::iPatFitter/iPatFitter", + }; // curved track fitter + ToolHandle<Trk::ITrackFitter> m_fitterSL{ + this, + "SLFitter", + "Trk::iPatFitter/iPatSLFitter", + }; // straight line fitter + ToolHandle<Trk::IIntersector> m_intersector{ + this, + "Intersector", + "Trk::RungeKuttaIntersector/RungeKuttaIntersector", + }; + ToolHandle<Trk::IMaterialAllocator> m_materialAllocator{ + this, + "MaterialAllocator", + "", + }; + ToolHandle<Muon::IMdtDriftCircleOnTrackCreator> m_mdtRotCreator{ + this, + "MdtRotCreator", + "", + }; + ToolHandle<Muon::IMuonErrorOptimisationTool> m_muonErrorOptimizer{ + this, + "MuonErrorOptimizer", + "Muon::MuonErrorOptimisationTool/MuidErrorOptimisationTool", + }; + ToolHandle<Muon::IMuonHoleRecoveryTool> m_muonHoleRecovery{ + this, + "MuonHoleRecovery", + "Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool", + }; + ToolHandle<Trk::IPropagator> m_propagator{ + this, + "Propagator", + "Trk::IntersectorWrapper/IntersectorWrapper", + }; + ToolHandle<Trk::IPropagator> m_propagatorSL{ + this, + "SLPropagator", + "Trk::StraightLinePropagator/MuonStraightLinePropagator", + }; + ToolHandle<Muon::MuonEDMPrinterTool> m_printer{ + this, + "Printer", + "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool", + }; + ToolHandle<Rec::IMuonTrackQuery> m_trackQuery{ + this, + "TrackQuery", + "Rec::MuonTrackQuery/MuonTrackQuery", + }; + ToolHandle<Trk::ITrackSummaryTool> m_trackSummary{ + this, + "TrackSummaryTool", + "Trk::TrackSummaryTool/MuidTrackSummaryTool", + }; + ToolHandle<Trk::ITrkMaterialProviderTool> m_materialUpdator{ + this, + "CaloMaterialProvider", + "Trk::TrkMaterialProviderTool/TrkMaterialProviderTool", + }; + + ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", + "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}; // Read handle for conditions object to get the field cache - SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; + SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCacheCondObjInputKey{ + this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"}; ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc; // init with callback ServiceHandle<Trk::ITrackingVolumesSvc> m_trackingVolumesSvc; @@ -231,8 +305,8 @@ class CombinedMuonTrackBuilder : public AthAlgTool, virtual public ICombinedMuon bool m_inputSlimming; // constants - const Trk::Volume* m_calorimeterVolume; - const Trk::Volume* m_indetVolume; + const Trk::Volume* m_calorimeterVolume; + const Trk::Volume* m_indetVolume; const Trk::TrackingVolume* m_spectrometerEntrance; // vertex region and phi modularity for pseudo-measurement constraints diff --git a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx index bf23fea72aea1662a1191fa558f8cdc6d7c0e772..0cc8a195bbb3241a5ec9bf782cdfeb8f5ed3694d 100755 --- a/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx +++ b/Reconstruction/MuonIdentification/MuidTrackBuilder/src/CombinedMuonTrackBuilder.cxx @@ -18,7 +18,6 @@ #include <iomanip> #include <memory> - #include "AthenaKernel/Units.h" #include "EventPrimitives/EventPrimitivesHelpers.h" #include "EventPrimitives/EventPrimitivesToStringConverter.h" @@ -59,24 +58,6 @@ namespace Rec { CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, const std::string& name, const IInterface* parent) : AthAlgTool(type, name, parent), - m_caloEnergyParam("Rec::MuidCaloEnergyTool/MuidCaloEnergyToolParam", this), - m_caloTSOS("Rec::MuidCaloTrackStateOnSurface/MuidCaloTrackStateOnSurface", this), - m_cleaner("Muon::MuonTrackCleaner/MuidTrackCleaner", this), - m_cscRotCreator("", this), - m_extrapolator("Trk::Extrapolator/AtlasExtrapolator", this), - m_fitter("Trk::iPatFitter/iPatFitter", this), - m_fitterSL("Trk::iPatFitter/iPatSLFitter", this), - m_intersector("Trk::RungeKuttaIntersector/RungeKuttaIntersector", this), - m_materialAllocator("", this), - m_mdtRotCreator("", this), - m_muonErrorOptimizer("Muon::MuonErrorOptimisationTool/MuidErrorOptimisationTool", this), - m_muonHoleRecovery("Muon::MuonChamberHoleRecoveryTool/MuonChamberHoleRecoveryTool", this), - m_propagator("Trk::IntersectorWrapper/IntersectorWrapper", this), - m_propagatorSL("Trk::StraightLinePropagator/MuonStraightLinePropagator", this), - m_printer("Muon::MuonEDMPrinterTool/MuonEDMPrinterTool", this), - m_trackQuery("Rec::MuonTrackQuery/MuonTrackQuery", this), - m_trackSummary("Trk::TrackSummaryTool/MuidTrackSummaryTool", this), - m_materialUpdator("Trk::TrkMaterialProviderTool/TrkMaterialProviderTool", this), m_trackingGeometrySvc("TrackingGeometrySvc/AtlasTrackingGeometrySvc", name), m_trackingVolumesSvc("TrackingVolumesSvc/TrackingVolumesSvc", name), m_magFieldProperties(Trk::FullField), @@ -132,22 +113,7 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons m_messageHelper = new MessageHelper(*this); declareInterface<ICombinedMuonTrackBuilder>(this); - declareProperty("CaloEnergyParam", m_caloEnergyParam); - declareProperty("CaloTSOS", m_caloTSOS); - declareProperty("Cleaner", m_cleaner); - declareProperty("CscRotCreator", m_cscRotCreator); - declareProperty("Extrapolator", m_extrapolator); - declareProperty("Fitter", m_fitter); - declareProperty("SLFitter", m_fitterSL); - declareProperty("Intersector", m_intersector); - declareProperty("MaterialAllocator", m_materialAllocator); - declareProperty("MdtRotCreator", m_mdtRotCreator); - declareProperty("MuonErrorOptimizer", m_muonErrorOptimizer); - declareProperty("MuonHoleRecovery", m_muonHoleRecovery); - declareProperty("Propagator", m_propagator); - declareProperty("SLPropagator", m_propagatorSL); declareProperty("TrackingVolumesSvc", m_trackingVolumesSvc); - declareProperty("TrackSummaryTool", m_trackSummary); declareProperty("AllowCleanerVeto", m_allowCleanerVeto); declareProperty("CleanCombined", m_cleanCombined); declareProperty("CleanStandalone", m_cleanStandalone); @@ -178,14 +144,12 @@ CombinedMuonTrackBuilder::CombinedMuonTrackBuilder(const std::string& type, cons declareProperty("UpdateWithCaloTG", m_updateWithCaloTG); declareProperty("UseCaloTG", m_useCaloTG); - declareProperty("CaloMaterialProvider", m_materialUpdator); declareProperty("IterateCombinedTrackFit", m_iterateCombinedTrackFit); declareProperty("RefineELossCombinedTrackFit", m_refineELossCombinedTrackFit); declareProperty("RefineELossStandAloneTrackFit", m_refineELossStandAloneTrackFit); declareProperty("AddElossID", m_addElossID); declareProperty("AddIDMSerrors", m_addIDMSerrors); declareProperty("UseRefitTrackError", m_useRefitTrackError); - declareProperty("TrackQuery", m_trackQuery); } @@ -294,7 +258,7 @@ CombinedMuonTrackBuilder::initialize() ATH_CHECK(m_intersector.retrieve()); ATH_MSG_DEBUG("Retrieved tool " << m_intersector); /// handle to the magnetic field cache - ATH_CHECK( m_fieldCacheCondObjInputKey.initialize() ); + ATH_CHECK(m_fieldCacheCondObjInputKey.initialize()); ATH_MSG_DEBUG("Setup handle for key " << m_fieldCacheCondObjInputKey); if (!m_materialAllocator.empty()) { @@ -371,8 +335,8 @@ CombinedMuonTrackBuilder::initialize() // missing TrackingGeometrySvc - no perigee will be added at MS entrance m_messageHelper->printWarning(41); } else { - const Trk::TrackingGeometry* trkGeo = m_trackingGeometrySvc->trackingGeometry(); - if (trkGeo) m_spectrometerEntrance = trkGeo->trackingVolume("MuonSpectrometerEntrance"); + const Trk::TrackingGeometry* trkGeo = m_trackingGeometrySvc->trackingGeometry(); + if (trkGeo) m_spectrometerEntrance = trkGeo->trackingVolume("MuonSpectrometerEntrance"); } return StatusCode::SUCCESS; @@ -449,18 +413,19 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T // match extrapolated indet track to inner calorimeter scattering surface // provided momentum defined (solenoid on) - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return nullptr; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return nullptr; } - fieldCondObj->getInitializedCache (fieldCache); - + fieldCondObj->getInitializedCache(fieldCache); + if (surface && fieldCache.solenoidOn() && !m_updateWithCaloTG) { const Trk::TrackStateOnSurface* innerTSOS = nullptr; @@ -517,14 +482,15 @@ CombinedMuonTrackBuilder::combinedFit(const Trk::Track& indetTrack, const Trk::T // such as need to replace calorimeter material or presence of pseudomeasurements if (!surface) { // extrapolate outwards to associate calorimeter material effects ATH_MSG_VERBOSE("Calling createMuonTrack from " << __func__ << " at line " << __LINE__); - muonTrack = createMuonTrack( - extrapolatedTrack, indetTrack.perigeeParameters(), nullptr, extrapolatedTrack.trackStateOnSurfaces()->begin(), - extrapolatedTrack.trackStateOnSurfaces()->end(), extrapolatedTrack.trackStateOnSurfaces()->size()); - } else if (m_trackQuery->numberPseudoMeasurements(extrapolatedTrack) > 1) { // remove pseudo meas - ATH_MSG_VERBOSE("Calling createMuonTrack from " << __func__ << " at line " << __LINE__); - muonTrack = createMuonTrack(extrapolatedTrack, nullptr, nullptr, extrapolatedTrack.trackStateOnSurfaces()->begin(), + muonTrack = createMuonTrack(extrapolatedTrack, indetTrack.perigeeParameters(), nullptr, + extrapolatedTrack.trackStateOnSurfaces()->begin(), extrapolatedTrack.trackStateOnSurfaces()->end(), extrapolatedTrack.trackStateOnSurfaces()->size()); + } else if (m_trackQuery->numberPseudoMeasurements(extrapolatedTrack) > 1) { // remove pseudo meas + ATH_MSG_VERBOSE("Calling createMuonTrack from " << __func__ << " at line " << __LINE__); + muonTrack = createMuonTrack( + extrapolatedTrack, nullptr, nullptr, extrapolatedTrack.trackStateOnSurfaces()->begin(), + extrapolatedTrack.trackStateOnSurfaces()->end(), extrapolatedTrack.trackStateOnSurfaces()->size()); } else { // otherwise can just copy the extrapolated track ATH_MSG_VERBOSE("Calling createMuonTrack from " << __func__ << " at line " << __LINE__); muonTrack = createMuonTrack(extrapolatedTrack, extrapolatedTrack.perigeeParameters(), nullptr, @@ -809,18 +775,19 @@ CombinedMuonTrackBuilder::indetExtension(const Trk::Track& indetTrack, // fail when solenoid off and toroid on (as extrapolation from ID is not the correct strategy) ToolHandle<Trk::IPropagator> propagator = m_propagatorSL; - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); - + fieldCondObj->getInitializedCache(fieldCache); + if (fieldCache.toroidOn()) { // fail when solenoid off and toroid on - as extrapolation from ID is not the correct strategy // for material effects, fit starting value etc @@ -975,17 +942,18 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack float bs_x, float bs_y, float bs_z) const { - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); // no SA fit with vertex constraint for Toroid off data if (m_trackQuery->isLineFit(inputSpectrometerTrack) && !fieldCache.toroidOn()) { @@ -1179,14 +1147,14 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack (beamAxisCovariance)(0, 0) = m_vertex2DSigmaRPhi * m_vertex2DSigmaRPhi; (beamAxisCovariance)(1, 1) = m_vertex2DSigmaRPhi * m_vertex2DSigmaRPhi; (beamAxisCovariance)(2, 2) = m_vertex2DSigmaZ * m_vertex2DSigmaZ; - mbeamAxis = std::make_unique<Trk::RecVertex>(origin, beamAxisCovariance); + mbeamAxis = std::make_unique<Trk::RecVertex>(origin, beamAxisCovariance); AmgSymMatrix(3) vertexRegionCovariance; vertexRegionCovariance.setZero(); (vertexRegionCovariance)(0, 0) = m_vertex3DSigmaRPhi * m_vertex3DSigmaRPhi; (vertexRegionCovariance)(1, 1) = m_vertex3DSigmaRPhi * m_vertex3DSigmaRPhi; (vertexRegionCovariance)(2, 2) = m_vertex3DSigmaZ * m_vertex3DSigmaZ; - mvertex = std::make_unique<Trk::RecVertex>(origin, vertexRegionCovariance); + mvertex = std::make_unique<Trk::RecVertex>(origin, vertexRegionCovariance); } parameters = @@ -1417,7 +1385,8 @@ CombinedMuonTrackBuilder::standaloneFit(const Trk::Track& inputSpectrometerTrack type.set(Trk::TrackStateOnSurface::Outlier); } - *t = new const Trk::TrackStateOnSurface(updatedRot, (**t).trackParameters()->clone(), nullptr, nullptr, type); + *t = new const Trk::TrackStateOnSurface(updatedRot, (**t).trackParameters()->clone(), nullptr, nullptr, + type); delete tsos; } } @@ -1716,18 +1685,19 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float countAEOTs(&combinedTrack, " in standalone Refit input combinedTrack "); - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); - + fieldCondObj->getInitializedCache(fieldCache); + if (!fieldCache.toroidOn()) { // no standalone refit for Toroid off return nullptr; @@ -2052,7 +2022,8 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> type; type.set(Trk::TrackStateOnSurface::Measurement); - trackStateOnSurfaces->push_back(new const Trk::TrackStateOnSurface(vertexInFit, nullptr, nullptr, nullptr, type)); + trackStateOnSurfaces->push_back( + new const Trk::TrackStateOnSurface(vertexInFit, nullptr, nullptr, nullptr, type)); } @@ -2212,13 +2183,13 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float return nullptr; } - //eventually this whole tool will use unique_ptrs - //in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them + // eventually this whole tool will use unique_ptrs + // in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them std::unique_ptr<Trk::Track> refittedTrackUnique(refittedTrack); if (refittedTrackUnique) { if (!refittedTrackUnique->fitQuality()) { - delete vertex; - return nullptr; + delete vertex; + return nullptr; } if (!m_trackQuery->isCaloAssociated(*refittedTrackUnique)) { @@ -2237,19 +2208,20 @@ CombinedMuonTrackBuilder::standaloneRefit(const Trk::Track& combinedTrack, float { ATH_MSG_VERBOSE(" perform spectrometer error optimization after cleaning "); - std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(refittedTrackUnique.get()); + std::unique_ptr<Trk::Track> optimizedTrack = + m_muonErrorOptimizer->optimiseErrors(refittedTrackUnique.get()); if (optimizedTrack) { - if (checkTrack("standaloneRefitOpt", optimizedTrack.get(), refittedTrackUnique.get())) { - refittedTrackUnique.swap(optimizedTrack); - countAEOTs(refittedTrackUnique.get(), " standaloneRefit alignment errors Track "); - } + if (checkTrack("standaloneRefitOpt", optimizedTrack.get(), refittedTrackUnique.get())) { + refittedTrackUnique.swap(optimizedTrack); + countAEOTs(refittedTrackUnique.get(), " standaloneRefit alignment errors Track "); + } } } } delete vertex; - //have to release it until the whole tool is migrated to unique_ptr + // have to release it until the whole tool is migrated to unique_ptr return refittedTrackUnique.release(); } @@ -2273,17 +2245,18 @@ CombinedMuonTrackBuilder::fit(Trk::Track& track, const Trk::RunOutlierRemoval ru bool isCombined = m_trackQuery->isCombined(track); // select straightLine fitter when magnets downstream of leading measurement are off ToolHandle<Trk::ITrackFitter> fitter = m_fitter; - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); if (!fieldCache.toroidOn() && !(isCombined && fieldCache.solenoidOn())) { @@ -2380,25 +2353,25 @@ CombinedMuonTrackBuilder::fit(Trk::Track& track, const Trk::RunOutlierRemoval ru return nullptr; } - //eventually this whole tool will use unique_ptrs - //in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them + // eventually this whole tool will use unique_ptrs + // in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them std::unique_ptr<Trk::Track> fittedTrackUnique(fittedTrack); // track cleaning if (runOutlier) { - // fit with optimized spectrometer errors + // fit with optimized spectrometer errors if (!m_muonErrorOptimizer.empty() && !fittedTrackUnique->info().trackProperties(Trk::TrackInfo::StraightTrack) && optimizeErrors(fittedTrackUnique.get())) { ATH_MSG_VERBOSE(" perform spectrometer error optimization after cleaning "); - std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); + std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); if (optimizedTrack) { - if (checkTrack("fitInterface1Opt", optimizedTrack.get(), fittedTrackUnique.get())) { - fittedTrackUnique.swap(optimizedTrack); - countAEOTs(fittedTrackUnique.get(), " re fit scaled errors Track "); - } + if (checkTrack("fitInterface1Opt", optimizedTrack.get(), fittedTrackUnique.get())) { + fittedTrackUnique.swap(optimizedTrack); + countAEOTs(fittedTrackUnique.get(), " re fit scaled errors Track "); + } } } @@ -2423,7 +2396,7 @@ CombinedMuonTrackBuilder::fit(Trk::Track& track, const Trk::RunOutlierRemoval ru if (m_allowCleanerVeto && chi2Before > m_badFitChi2) { ATH_MSG_DEBUG(" cleaner veto A "); ++m_countStandaloneCleanerVeto; - fittedTrackUnique.reset(); + fittedTrackUnique.reset(); } else { ATH_MSG_DEBUG(" keep original standalone track despite cleaner veto "); } @@ -2432,7 +2405,7 @@ CombinedMuonTrackBuilder::fit(Trk::Track& track, const Trk::RunOutlierRemoval ru if (chi2After < m_badFitChi2 || chi2After < chi2Before) { ATH_MSG_VERBOSE(" found and removed spectrometer outlier(s) "); - fittedTrackUnique.swap(cleanTrack); + fittedTrackUnique.swap(cleanTrack); } else { ATH_MSG_VERBOSE(" keep original track despite cleaning "); } @@ -2445,11 +2418,11 @@ CombinedMuonTrackBuilder::fit(Trk::Track& track, const Trk::RunOutlierRemoval ru } } - //have to use release until the whole tool uses unique_ptr + // have to use release until the whole tool uses unique_ptr return fittedTrackUnique.release(); } -/** +/** fit a set of MeasurementBase objects with starting value for perigeeParameters */ Trk::Track* CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const Trk::TrackParameters& perigeeStartValue, @@ -2466,17 +2439,18 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T } // select straightLine fitter when magnets downstream of leading measurement are off - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); ToolHandle<Trk::ITrackFitter> fitter = m_fitter; if (!fieldCache.toroidOn() || std::abs(perigeeStartValue.position().z()) > m_zECToroid) { @@ -2516,8 +2490,8 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T return nullptr; } - //eventually this whole tool will use unique_ptrs - //in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them + // eventually this whole tool will use unique_ptrs + // in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them std::unique_ptr<Trk::Track> fittedTrackUnique(fittedTrack); // track cleaning if (runOutlier) { @@ -2528,12 +2502,12 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T { ATH_MSG_VERBOSE(" perform spectrometer error optimization after cleaning "); - std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); + std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); if (optimizedTrack) { - if (checkTrack("fitInterface2Opt", optimizedTrack.get(), fittedTrackUnique.get())) { - fittedTrackUnique.swap(optimizedTrack); - countAEOTs(fittedTrackUnique.get(), " fit mstSet scaled errors Track "); - } + if (checkTrack("fitInterface2Opt", optimizedTrack.get(), fittedTrackUnique.get())) { + fittedTrackUnique.swap(optimizedTrack); + countAEOTs(fittedTrackUnique.get(), " fit mstSet scaled errors Track "); + } } } @@ -2557,7 +2531,7 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T if (m_allowCleanerVeto && chi2Before > m_badFitChi2) { ATH_MSG_DEBUG(" cleaner veto B"); ++m_countExtensionCleanerVeto; - fittedTrackUnique.reset(); + fittedTrackUnique.reset(); } else { ATH_MSG_DEBUG(" keep original extension track despite cleaner veto "); } @@ -2565,7 +2539,7 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T double chi2After = normalizedChi2(*cleanTrack); if (chi2After < m_badFitChi2 || chi2After < chi2Before) { ATH_MSG_VERBOSE(" found and removed spectrometer outlier(s) "); - fittedTrackUnique.swap(cleanTrack); + fittedTrackUnique.swap(cleanTrack); } else { ATH_MSG_VERBOSE(" keep original track despite cleaning "); } @@ -2574,7 +2548,7 @@ CombinedMuonTrackBuilder::fit(const Trk::MeasurementSet& measurementSet, const T // FIXME: provide indet cleaner ATH_MSG_VERBOSE(" finished cleaning"); } - //have to use release until the whole code uses unique_ptr + // have to use release until the whole code uses unique_ptr return fittedTrackUnique.release(); } @@ -2596,17 +2570,18 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol // select straightLine fitter when solenoid and toroid are off ToolHandle<Trk::ITrackFitter> fitter = m_fitter; - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); - return 0; + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); + return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); if (!fieldCache.toroidOn() && !fieldCache.solenoidOn()) { @@ -2637,8 +2612,8 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol if (!fittedTrack) return nullptr; - //eventually this whole tool will use unique_ptrs - //in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them + // eventually this whole tool will use unique_ptrs + // in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them std::unique_ptr<Trk::Track> fittedTrackUnique(fittedTrack); // track cleaning @@ -2649,11 +2624,11 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol && optimizeErrors(fittedTrackUnique.get())) { ATH_MSG_VERBOSE(" perform spectrometer error optimization after cleaning "); - std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); + std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(fittedTrackUnique.get()); if (optimizedTrack) { - fittedTrackUnique.swap(optimizedTrack); - countAEOTs(fittedTrackUnique.get(), " cbfit scaled errors Track "); + fittedTrackUnique.swap(optimizedTrack); + countAEOTs(fittedTrackUnique.get(), " cbfit scaled errors Track "); } } @@ -2665,7 +2640,7 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol << m_printer->printStations(*fittedTrackUnique)); if (fittedTrackUnique) { - countAEOTs(fittedTrackUnique.get(), " cb before clean Track "); + countAEOTs(fittedTrackUnique.get(), " cb before clean Track "); } std::unique_ptr<Trk::Track> cleanTrack = m_cleaner->clean(*fittedTrackUnique); if (cleanTrack) { @@ -2676,7 +2651,7 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol if (m_allowCleanerVeto && chi2Before > m_badFitChi2) { ATH_MSG_DEBUG(" cleaner veto C"); ++m_countCombinedCleanerVeto; - fittedTrackUnique.reset(); + fittedTrackUnique.reset(); } else { ATH_MSG_DEBUG(" keep original combined track despite cleaner veto "); } @@ -2684,7 +2659,7 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol double chi2After = normalizedChi2(*cleanTrack); if (chi2After < m_badFitChi2 || chi2After < chi2Before) { ATH_MSG_VERBOSE(" found and removed spectrometer outlier(s) "); - fittedTrackUnique.swap(cleanTrack); + fittedTrackUnique.swap(cleanTrack); } else { ATH_MSG_VERBOSE(" keep original track despite cleaning "); } @@ -2693,7 +2668,7 @@ CombinedMuonTrackBuilder::fit(const Trk::Track& indetTrack, Trk::Track& extrapol // FIXME: provide indet cleaner ATH_MSG_VERBOSE(" finished cleaning"); } - //have to use release until the whole code uses unique_ptr + // have to use release until the whole code uses unique_ptr return fittedTrackUnique.release(); } @@ -3247,17 +3222,18 @@ CombinedMuonTrackBuilder::createExtrapolatedTrack(const Trk::Track& sp // if association OK, create perigee surface and back-track to it if (caloAssociated) { - MagField::AtlasFieldCache fieldCache; + MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); if (fieldCache.toroidOn()) { const Trk::TrackParameters* oldParameters = caloTSOS->front()->trackParameters(); @@ -3411,7 +3387,8 @@ CombinedMuonTrackBuilder::createExtrapolatedTrack(const Trk::Track& sp std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> type; type.set(Trk::TrackStateOnSurface::Measurement); - trackStateOnSurfaces->push_back(new const Trk::TrackStateOnSurface(vertexInFit, nullptr, nullptr, nullptr, type)); + trackStateOnSurfaces->push_back( + new const Trk::TrackStateOnSurface(vertexInFit, nullptr, nullptr, nullptr, type)); } } @@ -3925,7 +3902,7 @@ CombinedMuonTrackBuilder::entrancePerigee(const Trk::TrackParameters* parameters if (!entranceParameters) return nullptr; - Trk::PerigeeSurface surface(entranceParameters->position()); + Trk::PerigeeSurface surface(entranceParameters->position()); const Trk::TrackParameters* trackParameters = m_extrapolator->extrapolateDirectly(*entranceParameters, surface); delete entranceParameters; @@ -3993,15 +3970,16 @@ CombinedMuonTrackBuilder::extrapolatedParameters(bool& badlyDeterminedCurvature, ToolHandle<Trk::IPropagator> propagator = m_propagator; MagField::AtlasFieldCache fieldCache; // Get field cache object - EventContext ctx = Gaudi::Hive::currentContext(); + EventContext ctx = Gaudi::Hive::currentContext(); SG::ReadCondHandle<AtlasFieldCacheCondObj> readHandle{m_fieldCacheCondObjInputKey, ctx}; - const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; - + const AtlasFieldCacheCondObj* fieldCondObj{*readHandle}; + if (fieldCondObj == nullptr) { - ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " << m_fieldCacheCondObjInputKey.key()); + ATH_MSG_ERROR("SCTSiLorentzAngleCondAlg : Failed to retrieve AtlasFieldCacheCondObj with key " + << m_fieldCacheCondObjInputKey.key()); return 0; } - fieldCondObj->getInitializedCache (fieldCache); + fieldCondObj->getInitializedCache(fieldCache); if (!fieldCache.toroidOn()) { curvatureOK = true; propagator = m_propagatorSL; @@ -4277,25 +4255,25 @@ CombinedMuonTrackBuilder::finalTrackBuild(Trk::Track*& track) const ATH_MSG_VERBOSE(" finished hole recovery procedure "); } - //eventually this whole tool will use unique_ptrs - //in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them + // eventually this whole tool will use unique_ptrs + // in the meantime, this allows the MuonErrorOptimisationTool and MuonRefitTool to use them std::unique_ptr<Trk::Track> trackUnique(track); // final fit with optimized spectrometer errors if (!m_muonErrorOptimizer.empty() && !trackUnique->info().trackProperties(Trk::TrackInfo::StraightTrack) && countAEOTs(trackUnique.get(), " before optimize ") == 0) { ATH_MSG_VERBOSE(" perform spectrometer error optimization... "); - std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(trackUnique.get()); + std::unique_ptr<Trk::Track> optimizedTrack = m_muonErrorOptimizer->optimiseErrors(trackUnique.get()); if (optimizedTrack && checkTrack("finalTrackBuild2", optimizedTrack.get(), trackUnique.get())) { - trackUnique.swap(optimizedTrack); - countAEOTs(track, " finalTrackBuilt alignment errors Track "); + trackUnique.swap(optimizedTrack); + countAEOTs(track, " finalTrackBuilt alignment errors Track "); } } // add the track summary m_trackSummary->updateTrack(*trackUnique); - //have to use release until the whole code uses unique_ptr - track=trackUnique.release(); + // have to use release until the whole code uses unique_ptr + track = trackUnique.release(); } Trk::Track* diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.cxx b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.cxx index 25b15081294990e388e06a1029ec0c814b494e50..5d6a2e988d98cffcd5c40ff9f56770d298fc7d12 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.cxx @@ -1,72 +1,74 @@ /* - 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 "MuonCombinedInDetCandidateAlg.h" -//#include "MuonCombinedToolInterfaces/IInDetCandidateTool.h" #include "MuonLayerEvent/MuonSystemExtension.h" #include "xAODTruth/TruthParticleContainer.h" using namespace MuonCombined; -MuonCombinedInDetCandidateAlg::MuonCombinedInDetCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator): - AthAlgorithm(name,pSvcLocator), - m_doSiliconForwardMuons(false) -{ - declareProperty("TrackParticleLocation",m_indetTrackParticleLocation = {"InDetTrackParticles"}); - declareProperty("ForwardParticleLocation",m_indetForwardTrackParticleLocation = "InDetForwardTrackParticles"); - declareProperty("InDetCandidateLocation", m_candidateCollectionName = "InDetCandidates"); - declareProperty("DoSiliconAssocForwardMuons", m_doSiliconForwardMuons = false); - declareProperty("ExtensionPtThreshold",m_extThreshold=2500); +MuonCombinedInDetCandidateAlg::MuonCombinedInDetCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator) + : AthAlgorithm(name, pSvcLocator), m_doSiliconForwardMuons(false) +{ + declareProperty("TrackParticleLocation", m_indetTrackParticleLocation = {"InDetTrackParticles"}); + declareProperty("ForwardParticleLocation", m_indetForwardTrackParticleLocation = "InDetForwardTrackParticles"); + declareProperty("InDetCandidateLocation", m_candidateCollectionName = "InDetCandidates"); + declareProperty("DoSiliconAssocForwardMuons", m_doSiliconForwardMuons = false); + declareProperty("ExtensionPtThreshold", m_extThreshold = 2500); } -MuonCombinedInDetCandidateAlg::~MuonCombinedInDetCandidateAlg(){} +MuonCombinedInDetCandidateAlg::~MuonCombinedInDetCandidateAlg() {} -StatusCode MuonCombinedInDetCandidateAlg::initialize() +StatusCode +MuonCombinedInDetCandidateAlg::initialize() { - ATH_CHECK(m_trackSelector.retrieve()); - ATH_CHECK(m_muonSystemExtensionTool.retrieve()); - ATH_CHECK(m_indetTrackParticleLocation.initialize()); - ATH_CHECK(m_indetForwardTrackParticleLocation.initialize()); - ATH_CHECK(m_candidateCollectionName.initialize()); - - ATH_CHECK(m_forwardTrackSelector.retrieve( DisableTool{!m_doSiliconForwardMuons} )); - - return StatusCode::SUCCESS; + ATH_CHECK(m_trackSelector.retrieve()); + ATH_CHECK(m_muonSystemExtensionTool.retrieve()); + ATH_CHECK(m_indetTrackParticleLocation.initialize()); + ATH_CHECK(m_indetForwardTrackParticleLocation.initialize()); + ATH_CHECK(m_candidateCollectionName.initialize()); + + ATH_CHECK(m_forwardTrackSelector.retrieve(DisableTool{!m_doSiliconForwardMuons})); + + return StatusCode::SUCCESS; } -StatusCode MuonCombinedInDetCandidateAlg::execute() +StatusCode +MuonCombinedInDetCandidateAlg::execute() { - auto collection = std::make_unique<InDetCandidateCollection>(SG::OWN_ELEMENTS); - - m_currentTrackSelector = m_trackSelector; - for(auto location : m_indetTrackParticleLocation){ - if(create(location, collection).isFailure()){ - ATH_MSG_FATAL("Could not create InDetCandidateCollection"); - return StatusCode::FAILURE; + auto collection = std::make_unique<InDetCandidateCollection>(SG::OWN_ELEMENTS); + + m_currentTrackSelector = m_trackSelector; + for (auto location : m_indetTrackParticleLocation) { + if (create(location, collection).isFailure()) { + ATH_MSG_FATAL("Could not create InDetCandidateCollection"); + return StatusCode::FAILURE; + } } - } - if(m_doSiliconForwardMuons){ - m_currentTrackSelector = m_forwardTrackSelector; - if(create(m_indetForwardTrackParticleLocation, collection, true).isFailure()){ - ATH_MSG_FATAL("Could not create InDetForwardCandidateCollection"); - return StatusCode::FAILURE; + if (m_doSiliconForwardMuons) { + m_currentTrackSelector = m_forwardTrackSelector; + if (create(m_indetForwardTrackParticleLocation, collection, true).isFailure()) { + ATH_MSG_FATAL("Could not create InDetForwardCandidateCollection"); + return StatusCode::FAILURE; + } } - } - SG::WriteHandle<InDetCandidateCollection> indetCandidateCollection(m_candidateCollectionName); - ATH_CHECK(indetCandidateCollection.record(std::move(collection))); + SG::WriteHandle<InDetCandidateCollection> indetCandidateCollection(m_candidateCollectionName); + ATH_CHECK(indetCandidateCollection.record(std::move(collection))); - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } -StatusCode MuonCombinedInDetCandidateAlg::create(const SG::ReadHandleKey<xAOD::TrackParticleContainer>& location, - std::unique_ptr<InDetCandidateCollection>& collection, - bool flagCandidateAsSiAssociate) const { +StatusCode +MuonCombinedInDetCandidateAlg::create(const SG::ReadHandleKey<xAOD::TrackParticleContainer>& location, + std::unique_ptr<InDetCandidateCollection>& collection, + bool flagCandidateAsSiAssociate) const +{ SG::ReadHandle<xAOD::TrackParticleContainer> indetTrackParticles(location); - if(!indetTrackParticles.isValid()){ - ATH_MSG_ERROR("Could not read "<< location); - return StatusCode::FAILURE; + if (!indetTrackParticles.isValid()) { + ATH_MSG_ERROR("Could not read " << location); + return StatusCode::FAILURE; } InDetCandidateCollection* tempCandidates = new InDetCandidateCollection(SG::VIEW_ELEMENTS); create(*indetTrackParticles, *tempCandidates, flagCandidateAsSiAssociate); @@ -75,82 +77,91 @@ StatusCode MuonCombinedInDetCandidateAlg::create(const SG::ReadHandleKey<xAOD::T return StatusCode::SUCCESS; } -void MuonCombinedInDetCandidateAlg::create( const xAOD::TrackParticleContainer& indetTrackParticles, - InDetCandidateCollection& outputContainer, - bool flagCandidateAsSiAssociated) const { - - ATH_MSG_DEBUG("Producing InDetCandidates for " << indetTrackParticles.size() ); - unsigned int ntracks = 0; - int trackIndex = -1; - - for(auto* tp : indetTrackParticles){ - ++trackIndex; - if(!isValidTrackParticle(tp)) - continue; - - ElementLink<xAOD::TrackParticleContainer> link(indetTrackParticles, trackIndex); - if(!link.isValid()){ - ATH_MSG_WARNING("Bad element link "); - } - else{ - if(*link != tp) { - ATH_MSG_WARNING("Dereferenced Link not equal to TrackParticle, skipping track "); - continue; - } +void +MuonCombinedInDetCandidateAlg::create(const xAOD::TrackParticleContainer& indetTrackParticles, + InDetCandidateCollection& outputContainer, bool flagCandidateAsSiAssociated) const +{ + + ATH_MSG_DEBUG("Producing InDetCandidates for " << indetTrackParticles.size()); + unsigned int ntracks = 0; + int trackIndex = -1; + + for (auto* tp : indetTrackParticles) { + ++trackIndex; + if (!isValidTrackParticle(tp)) continue; + + ElementLink<xAOD::TrackParticleContainer> link(indetTrackParticles, trackIndex); + if (!link.isValid()) { + ATH_MSG_WARNING("Bad element link "); + } else { + if (*link != tp) { + ATH_MSG_WARNING("Dereferenced Link not equal to TrackParticle, skipping track "); + continue; + } + } + link.toPersistent(); + printTrackParticleInfo(tp, "Creating"); + + if (msgLvl(MSG::VERBOSE) && tp->isAvailable<ElementLink<xAOD::TruthParticleContainer> >("truthParticleLink")) { + ElementLink<xAOD::TruthParticleContainer> truthLink = + tp->auxdata<ElementLink<xAOD::TruthParticleContainer> >("truthParticleLink"); + if (truthLink.isValid()) { + ATH_MSG_VERBOSE(" Truth particle: pdgId " + << (*truthLink)->pdgId() << " type " << tp->auxdata<int>("truthType") << " origin " + << tp->auxdata<int>("truthOrigin") << " pt " << (*truthLink)->pt() << " eta " + << (*truthLink)->eta() << " phi " << (*truthLink)->phi()); + } + } + InDetCandidate* candidate = new InDetCandidate(link); + if (flagCandidateAsSiAssociated) + candidate->setSiliconAssociated(true); // Si-associated candidates don't need these + else if (tp->pt() > m_extThreshold) { // MuGirl only operates on ID tracks with pt at least this high + const Muon::MuonSystemExtension* muonSystemExtension = 0; + m_muonSystemExtensionTool->muonSystemExtension(candidate->indetTrackParticle(), muonSystemExtension); + candidate->setExtension(muonSystemExtension); + } + ++ntracks; + outputContainer.push_back(candidate); } - link.toPersistent(); - printTrackParticleInfo(tp, "Creating"); - - if(msgLvl(MSG::VERBOSE) && tp->isAvailable<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink")){ - ElementLink< xAOD::TruthParticleContainer > truthLink = tp->auxdata<ElementLink< xAOD::TruthParticleContainer > >("truthParticleLink"); - if(truthLink.isValid()){ - ATH_MSG_VERBOSE(" Truth particle: pdgId " << (*truthLink)->pdgId() << " type " << tp->auxdata< int >("truthType") - << " origin " << tp->auxdata< int >("truthOrigin") << " pt " - << (*truthLink)->pt() << " eta " << (*truthLink)->eta() << " phi " << (*truthLink)->phi() ); - } + ATH_MSG_DEBUG("InDetCandidates selected " << ntracks); +} + +bool +MuonCombinedInDetCandidateAlg::isValidTrackParticle(const xAOD::TrackParticle* const tp) const +{ + if (!tp->perigeeParameters().covariance()) { + ATH_MSG_WARNING("InDet TrackParticle without perigee! "); + return false; } - InDetCandidate* candidate = new InDetCandidate(link); - if (flagCandidateAsSiAssociated) - candidate->setSiliconAssociated(true); //Si-associated candidates don't need these - else if(tp->pt()>m_extThreshold){ //MuGirl only operates on ID tracks with pt at least this high - const Muon::MuonSystemExtension* muonSystemExtension = 0; - m_muonSystemExtensionTool->muonSystemExtension( candidate->indetTrackParticle(), muonSystemExtension ); - candidate->setExtension(muonSystemExtension); + + if (!m_currentTrackSelector->decision(*tp)) { + if (msgLvl(MSG::VERBOSE) && tp->pt() > 5000.) printTrackParticleInfo(tp, "Discarding"); + return false; } - ++ntracks; - outputContainer.push_back(candidate); - } - ATH_MSG_DEBUG("InDetCandidates selected " << ntracks); -} -bool MuonCombinedInDetCandidateAlg::isValidTrackParticle(const xAOD::TrackParticle* const tp) const{ - if(!tp->perigeeParameters().covariance()) { - ATH_MSG_WARNING("InDet TrackParticle without perigee! "); - return false; - } - - if(!m_currentTrackSelector->decision(*tp)) { - if(msgLvl(MSG::VERBOSE) && tp->pt() > 5000.) - printTrackParticleInfo(tp, "Discarding"); - return false; - } - - return true; + return true; } -void MuonCombinedInDetCandidateAlg::printTrackParticleInfo(const xAOD::TrackParticle* const tp, const std::string& what) const{ - ATH_MSG_DEBUG(what << " InDet TrackParticle: pt " << tp->pt() << " eta " << tp->eta() << " phi " << tp->phi() - << " Pixel " << getCount(*tp,xAOD::numberOfInnermostPixelLayerHits ) + getCount(*tp,xAOD::numberOfPixelHits ) - << " SCT " << getCount(*tp,xAOD::numberOfSCTHits ) << " TRT " << getCount(*tp, xAOD::numberOfTRTHits ) ); +void +MuonCombinedInDetCandidateAlg::printTrackParticleInfo(const xAOD::TrackParticle* const tp, + const std::string& what) const +{ + ATH_MSG_DEBUG( + what << " InDet TrackParticle: pt " << tp->pt() << " eta " << tp->eta() << " phi " << tp->phi() << " Pixel " + << getCount(*tp, xAOD::numberOfInnermostPixelLayerHits) + getCount(*tp, xAOD::numberOfPixelHits) << " SCT " + << getCount(*tp, xAOD::numberOfSCTHits) << " TRT " << getCount(*tp, xAOD::numberOfTRTHits)); } -int MuonCombinedInDetCandidateAlg::getCount(const xAOD::TrackParticle& tp, xAOD::SummaryType type) const{ - uint8_t val; - if( !tp.summaryValue(val,type) ) - return 0; - return static_cast<int>(val); +int +MuonCombinedInDetCandidateAlg::getCount(const xAOD::TrackParticle& tp, xAOD::SummaryType type) const +{ + uint8_t val; + if (!tp.summaryValue(val, type)) return 0; + return static_cast<int>(val); } -StatusCode MuonCombinedInDetCandidateAlg::finalize(){ - return StatusCode::SUCCESS; +StatusCode +MuonCombinedInDetCandidateAlg::finalize() +{ + return StatusCode::SUCCESS; } diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.h b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.h index 69da8f73696335fab2bae16e5f9b88862ec9a846..fcf4672a02354080f7b6aaad6bc82f9dcc2c8403 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.h +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetCandidateAlg.h @@ -1,62 +1,68 @@ /* - 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 MUONCOMBINEDALGS_MUONCOMBINEDINDETCANDIDATEALG_H #define MUONCOMBINEDALGS_MUONCOMBINEDINDETCANDIDATEALG_H +#include <string> + #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" +#include "MuonCombinedEvent/InDetCandidateCollection.h" +#include "MuonRecToolInterfaces/IMuonSystemExtensionTool.h" #include "StoreGate/ReadHandleKey.h" #include "StoreGate/WriteHandleKey.h" -#include "xAODTracking/TrackParticleContainer.h" -#include "MuonCombinedEvent/InDetCandidateCollection.h" #include "TrkToolInterfaces/ITrackSelectorTool.h" -#include "MuonRecToolInterfaces/IMuonSystemExtensionTool.h" -#include <string> +#include "xAODTracking/TrackParticleContainer.h" namespace Trk { - class ITrackSelectorTool; +class ITrackSelectorTool; } namespace Muon { - class IMuonSystemExtensionTool; +class IMuonSystemExtensionTool; } -class MuonCombinedInDetCandidateAlg : public AthAlgorithm -{ - public: - MuonCombinedInDetCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator); - ~MuonCombinedInDetCandidateAlg(); - - StatusCode initialize(); - StatusCode execute(); - StatusCode finalize(); - - private: - bool m_doSiliconForwardMuons; - - float m_extThreshold; - - SG::ReadHandleKeyArray<xAOD::TrackParticleContainer> m_indetTrackParticleLocation; - SG::ReadHandleKey<xAOD::TrackParticleContainer> m_indetForwardTrackParticleLocation; - SG::WriteHandleKey<InDetCandidateCollection> m_candidateCollectionName; - ToolHandle <Trk::ITrackSelectorTool> m_trackSelector {this, "TrackSelector", "InDet::InDetDetailedTrackSelectorTool/MuonCombinedInDetDetailedTrackSelectorTool", "Track selector tool"}; - ToolHandle <Trk::ITrackSelectorTool> m_forwardTrackSelector {this, "InDetForwardTrackSelector", "InDet::InDetDetailedTrackSelectorTool/MuonCombinedInDetDetailedForwardTrackSelectorTool", "Forward track selector tool"}; - ToolHandle <Trk::ITrackSelectorTool> m_currentTrackSelector; - ToolHandle <Muon::IMuonSystemExtensionTool> m_muonSystemExtensionTool {this, "MuonSystemExtensionTool", "Muon::MuonSystemExtensionTool/MuonSystemExtensionTool", "Muon system extension tool"}; - - void create(const xAOD::TrackParticleContainer& indetTrackParticles, - InDetCandidateCollection& outputContainer, - bool flagCandidateAsSiAssociated=false) const; - StatusCode create(const SG::ReadHandleKey<xAOD::TrackParticleContainer>& location, - std::unique_ptr<InDetCandidateCollection>& collection, - bool flagCandidateAsSiAssociate=false) const; - - bool isValidTrackParticle(const xAOD::TrackParticle* const tp) const; - void printTrackParticleInfo(const xAOD::TrackParticle* const tp, const std::string& what) const; - - int getCount(const xAOD::TrackParticle& tp, xAOD::SummaryType type) const; +class MuonCombinedInDetCandidateAlg : public AthAlgorithm { + public: + MuonCombinedInDetCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator); + ~MuonCombinedInDetCandidateAlg(); + + StatusCode initialize(); + StatusCode execute(); + StatusCode finalize(); + + private: + bool m_doSiliconForwardMuons; + + float m_extThreshold; + + SG::ReadHandleKeyArray<xAOD::TrackParticleContainer> m_indetTrackParticleLocation; + SG::ReadHandleKey<xAOD::TrackParticleContainer> m_indetForwardTrackParticleLocation; + SG::WriteHandleKey<InDetCandidateCollection> m_candidateCollectionName; + ToolHandle<Trk::ITrackSelectorTool> m_trackSelector{ + this, "TrackSelector", "InDet::InDetDetailedTrackSelectorTool/MuonCombinedInDetDetailedTrackSelectorTool", + "Track selector tool"}; + ToolHandle<Trk::ITrackSelectorTool> m_forwardTrackSelector{ + this, "InDetForwardTrackSelector", + "InDet::InDetDetailedTrackSelectorTool/MuonCombinedInDetDetailedForwardTrackSelectorTool", + "Forward track selector tool"}; + ToolHandle<Trk::ITrackSelectorTool> m_currentTrackSelector; + ToolHandle<Muon::IMuonSystemExtensionTool> m_muonSystemExtensionTool{ + this, "MuonSystemExtensionTool", "Muon::MuonSystemExtensionTool/MuonSystemExtensionTool", + "Muon system extension tool"}; + + void create(const xAOD::TrackParticleContainer& indetTrackParticles, InDetCandidateCollection& outputContainer, + bool flagCandidateAsSiAssociated = false) const; + StatusCode create(const SG::ReadHandleKey<xAOD::TrackParticleContainer>& location, + std::unique_ptr<InDetCandidateCollection>& collection, + bool flagCandidateAsSiAssociate = false) const; + + bool isValidTrackParticle(const xAOD::TrackParticle* const tp) const; + void printTrackParticleInfo(const xAOD::TrackParticle* const tp, const std::string& what) const; + + int getCount(const xAOD::TrackParticle& tp, xAOD::SummaryType type) const; }; diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx index 98c0f12dffd72edae391df40e16b8016abfa5365..57abd92da146e1a130b8d92e93be1b261d7b8abb 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.cxx @@ -1,110 +1,115 @@ /* - 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 "MuonCombinedInDetExtensionAlg.h" -#include "MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h" + #include "MuonCombinedEvent/MuonCandidateCollection.h" +#include "MuonCombinedToolInterfaces/IMuonCombinedInDetExtensionTool.h" -MuonCombinedInDetExtensionAlg::MuonCombinedInDetExtensionAlg(const std::string& name, ISvcLocator* pSvcLocator): - AthAlgorithm(name,pSvcLocator) -{ - declareProperty("MuonCombinedInDetExtensionTools",m_muonCombinedInDetExtensionTools); - declareProperty("usePRDs",m_usePRDs=false); - declareProperty("HasCSC", m_hasCSC=true); - declareProperty("HasSTgc", m_hasSTGC=true); - declareProperty("HasMM", m_hasMM=true); +MuonCombinedInDetExtensionAlg::MuonCombinedInDetExtensionAlg(const std::string& name, ISvcLocator* pSvcLocator) + : AthAlgorithm(name, pSvcLocator) +{ + declareProperty("MuonCombinedInDetExtensionTools", m_muonCombinedInDetExtensionTools); + declareProperty("usePRDs", m_usePRDs = false); + declareProperty("HasCSC", m_hasCSC = true); + declareProperty("HasSTgc", m_hasSTGC = true); + declareProperty("HasMM", m_hasMM = true); } -MuonCombinedInDetExtensionAlg::~MuonCombinedInDetExtensionAlg(){} +MuonCombinedInDetExtensionAlg::~MuonCombinedInDetExtensionAlg() {} -StatusCode MuonCombinedInDetExtensionAlg::initialize() +StatusCode +MuonCombinedInDetExtensionAlg::initialize() { - ATH_MSG_VERBOSE(" usePRDs = "<< m_usePRDs); - ATH_CHECK(m_muonCombinedInDetExtensionTools.retrieve()); - ATH_CHECK(m_indetCandidateCollectionName.initialize()); - ATH_CHECK(m_MDT_ContainerName.initialize(m_usePRDs)); - ATH_CHECK(m_RPC_ContainerName.initialize(m_usePRDs)); - ATH_CHECK(m_TGC_ContainerName.initialize(m_usePRDs)); - ATH_CHECK(m_CSC_ContainerName.initialize(m_usePRDs && m_hasCSC)); - ATH_CHECK(m_sTGC_ContainerName.initialize(m_usePRDs && m_hasSTGC)); - ATH_CHECK(m_MM_ContainerName.initialize(m_usePRDs && m_hasMM)); - ATH_CHECK(m_tagMap.initialize()); - ATH_CHECK(m_combTracks.initialize(m_combTracks.key()!="")); - ATH_CHECK(m_METracks.initialize(m_METracks.key()!="")); - ATH_CHECK(m_segments.initialize(m_segments.key()!="")); - - return StatusCode::SUCCESS; + ATH_MSG_VERBOSE(" usePRDs = " << m_usePRDs); + ATH_CHECK(m_muonCombinedInDetExtensionTools.retrieve()); + ATH_CHECK(m_indetCandidateCollectionName.initialize()); + ATH_CHECK(m_MDT_ContainerName.initialize(m_usePRDs)); + ATH_CHECK(m_RPC_ContainerName.initialize(m_usePRDs)); + ATH_CHECK(m_TGC_ContainerName.initialize(m_usePRDs)); + ATH_CHECK(m_CSC_ContainerName.initialize(m_usePRDs && m_hasCSC)); + ATH_CHECK(m_sTGC_ContainerName.initialize(m_usePRDs && m_hasSTGC)); + ATH_CHECK(m_MM_ContainerName.initialize(m_usePRDs && m_hasMM)); + ATH_CHECK(m_tagMap.initialize()); + ATH_CHECK(m_combTracks.initialize(m_combTracks.key() != "")); + ATH_CHECK(m_METracks.initialize(m_METracks.key() != "")); + ATH_CHECK(m_segments.initialize(m_segments.key() != "")); + + return StatusCode::SUCCESS; } -StatusCode MuonCombinedInDetExtensionAlg::execute() +StatusCode +MuonCombinedInDetExtensionAlg::execute() { - SG::ReadHandle<InDetCandidateCollection> indetCandidateCollection(m_indetCandidateCollectionName); - if(!indetCandidateCollection.isValid()){ - ATH_MSG_ERROR("Could not read "<< m_indetCandidateCollectionName); - return StatusCode::FAILURE; - } - - ATH_MSG_VERBOSE("Loaded InDetCandidateCollection "<<m_indetCandidateCollectionName<< " with "<<indetCandidateCollection->size()<<" elements."); - for ( const MuonCombined::InDetCandidate* candidate : *indetCandidateCollection ) - ATH_MSG_VERBOSE(candidate->toString()); - - SG::WriteHandle<MuonCombined::InDetCandidateToTagMap> tagMap(m_tagMap); - ATH_CHECK( tagMap.record (std::make_unique<MuonCombined::InDetCandidateToTagMap>()) ); - - TrackCollection* combTracks=nullptr; - TrackCollection* meTracks=nullptr; - Trk::SegmentCollection* segments=nullptr; - - if(m_combTracks.key()!=""){ - SG::WriteHandle<TrackCollection> wh_combTracks(m_combTracks); - ATH_CHECK(wh_combTracks.record(std::make_unique<TrackCollection>())); - combTracks=wh_combTracks.ptr(); - } - if(m_METracks.key()!=""){ - SG::WriteHandle<TrackCollection> wh_meTracks(m_METracks); - ATH_CHECK(wh_meTracks.record(std::make_unique<TrackCollection>())); - meTracks=wh_meTracks.ptr(); - } - - if(m_segments.key()!=""){ - SG::WriteHandle<Trk::SegmentCollection> wh_segs(m_segments); - ATH_CHECK(wh_segs.record(std::make_unique<Trk::SegmentCollection>())); - segments=wh_segs.ptr(); - } - - if(m_usePRDs){ - MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData prdData; - SG::ReadHandle<Muon::MdtPrepDataContainer> mdtPRDContainer(m_MDT_ContainerName); - prdData.mdtPrds=mdtPRDContainer.cptr(); - if(m_hasCSC){ - SG::ReadHandle<Muon::CscPrepDataContainer> cscPRDContainer(m_CSC_ContainerName); - prdData.cscPrds=cscPRDContainer.cptr(); + SG::ReadHandle<InDetCandidateCollection> indetCandidateCollection(m_indetCandidateCollectionName); + if (!indetCandidateCollection.isValid()) { + ATH_MSG_ERROR("Could not read " << m_indetCandidateCollectionName); + return StatusCode::FAILURE; } - if(m_hasSTGC&&m_hasMM) { - SG::ReadHandle<Muon::sTgcPrepDataContainer> stgcPRDContainer(m_sTGC_ContainerName); - SG::ReadHandle<Muon::MMPrepDataContainer> mmPRDContainer(m_MM_ContainerName); - prdData.stgcPrds=stgcPRDContainer.cptr(); - prdData.mmPrds=mmPRDContainer.cptr(); + + ATH_MSG_VERBOSE("Loaded InDetCandidateCollection " << m_indetCandidateCollectionName << " with " + << indetCandidateCollection->size() << " elements."); + for (const MuonCombined::InDetCandidate* candidate : *indetCandidateCollection) + ATH_MSG_VERBOSE(candidate->toString()); + + SG::WriteHandle<MuonCombined::InDetCandidateToTagMap> tagMap(m_tagMap); + ATH_CHECK(tagMap.record(std::make_unique<MuonCombined::InDetCandidateToTagMap>())); + + TrackCollection* combTracks = nullptr; + TrackCollection* meTracks = nullptr; + Trk::SegmentCollection* segments = nullptr; + + if (m_combTracks.key() != "") { + SG::WriteHandle<TrackCollection> wh_combTracks(m_combTracks); + ATH_CHECK(wh_combTracks.record(std::make_unique<TrackCollection>())); + combTracks = wh_combTracks.ptr(); + } + if (m_METracks.key() != "") { + SG::WriteHandle<TrackCollection> wh_meTracks(m_METracks); + ATH_CHECK(wh_meTracks.record(std::make_unique<TrackCollection>())); + meTracks = wh_meTracks.ptr(); + } + + if (m_segments.key() != "") { + SG::WriteHandle<Trk::SegmentCollection> wh_segs(m_segments); + ATH_CHECK(wh_segs.record(std::make_unique<Trk::SegmentCollection>())); + segments = wh_segs.ptr(); } - SG::ReadHandle<Muon::RpcPrepDataContainer> rpcPRDContainer(m_RPC_ContainerName); - prdData.rpcPrds=rpcPRDContainer.cptr(); - SG::ReadHandle<Muon::TgcPrepDataContainer> tgcPRDContainer(m_TGC_ContainerName); - prdData.tgcPrds=tgcPRDContainer.cptr(); - for(auto& tool : m_muonCombinedInDetExtensionTools) - tool->extendWithPRDs(*indetCandidateCollection,tagMap.ptr(),prdData,combTracks,meTracks,segments); - } else{ - for(auto& tool : m_muonCombinedInDetExtensionTools) - tool->extend(*indetCandidateCollection,tagMap.ptr(),combTracks,meTracks,segments); - } - - return StatusCode::SUCCESS; + + if (m_usePRDs) { + MuonCombined::IMuonCombinedInDetExtensionTool::MuonPrdData prdData; + SG::ReadHandle<Muon::MdtPrepDataContainer> mdtPRDContainer(m_MDT_ContainerName); + prdData.mdtPrds = mdtPRDContainer.cptr(); + if (m_hasCSC) { + SG::ReadHandle<Muon::CscPrepDataContainer> cscPRDContainer(m_CSC_ContainerName); + prdData.cscPrds = cscPRDContainer.cptr(); + } + if (m_hasSTGC && m_hasMM) { + SG::ReadHandle<Muon::sTgcPrepDataContainer> stgcPRDContainer(m_sTGC_ContainerName); + SG::ReadHandle<Muon::MMPrepDataContainer> mmPRDContainer(m_MM_ContainerName); + prdData.stgcPrds = stgcPRDContainer.cptr(); + prdData.mmPrds = mmPRDContainer.cptr(); + } + SG::ReadHandle<Muon::RpcPrepDataContainer> rpcPRDContainer(m_RPC_ContainerName); + prdData.rpcPrds = rpcPRDContainer.cptr(); + SG::ReadHandle<Muon::TgcPrepDataContainer> tgcPRDContainer(m_TGC_ContainerName); + prdData.tgcPrds = tgcPRDContainer.cptr(); + for (auto& tool : m_muonCombinedInDetExtensionTools) + tool->extendWithPRDs(*indetCandidateCollection, tagMap.ptr(), prdData, combTracks, meTracks, segments); + } else { + for (auto& tool : m_muonCombinedInDetExtensionTools) + tool->extend(*indetCandidateCollection, tagMap.ptr(), combTracks, meTracks, segments); + } + + return StatusCode::SUCCESS; } -StatusCode MuonCombinedInDetExtensionAlg::finalize() +StatusCode +MuonCombinedInDetExtensionAlg::finalize() { - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.h b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.h index 16af30cefbfb2d1a83ab7f35fe45fac8df0a9f81..082e5ceef49b3a322961076d2769530607be2883 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.h +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedInDetExtensionAlg.h @@ -1,55 +1,110 @@ /* - 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 MUONCOMBINEDALGS_MUONCOMBINEDINDETEXTENSIONALG_H #define MUONCOMBINEDALGS_MUONCOMBINEDINDETEXTENSIONALG_H +#include <string> + #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" -#include "StoreGate/ReadHandleKey.h" #include "MuonCombinedEvent/InDetCandidateCollection.h" #include "MuonCombinedEvent/InDetCandidateToTagMap.h" -#include "MuonPrepRawData/MuonPrepDataContainer.h" #include "MuonPrepRawData/MMPrepDataContainer.h" +#include "MuonPrepRawData/MuonPrepDataContainer.h" #include "MuonPrepRawData/sTgcPrepDataContainer.h" -#include "TrkTrack/TrackCollection.h" +#include "StoreGate/ReadHandleKey.h" #include "TrkSegment/SegmentCollection.h" -#include <string> +#include "TrkTrack/TrackCollection.h" namespace MuonCombined { - class IMuonCombinedInDetExtensionTool; +class IMuonCombinedInDetExtensionTool; } -class MuonCombinedInDetExtensionAlg : public AthAlgorithm -{ - public: - MuonCombinedInDetExtensionAlg(const std::string& name, ISvcLocator* pSvcLocator); - - ~MuonCombinedInDetExtensionAlg(); - - StatusCode initialize(); - StatusCode execute(); - StatusCode finalize(); - - private: - ToolHandleArray<MuonCombined::IMuonCombinedInDetExtensionTool> m_muonCombinedInDetExtensionTools; - SG::ReadHandleKey<InDetCandidateCollection> m_indetCandidateCollectionName{this,"InDetCandidateLocation","InDetCandidates","ID candidates"}; - SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_MDT_ContainerName{this,"MDTPrepDataLocation","MDT_DriftCircles","MDT prep data"}; - SG::ReadHandleKey<Muon::CscPrepDataContainer> m_CSC_ContainerName{this,"CSCPrepDataLocation","CSC_Clusters","CSC prep data"}; - SG::ReadHandleKey<Muon::RpcPrepDataContainer> m_RPC_ContainerName{this,"RPCPrepDataLocation","RPC_Measurements","RPC prep data"}; - SG::ReadHandleKey<Muon::TgcPrepDataContainer> m_TGC_ContainerName{this,"TGCPrepDataLocation","TGC_Measurements","TGC prep data"}; - SG::ReadHandleKey<Muon::sTgcPrepDataContainer> m_sTGC_ContainerName{this,"sTGCPrepDataLocation","STGC_Measurements","sTGC prep data"}; - SG::ReadHandleKey<Muon::MMPrepDataContainer> m_MM_ContainerName{this,"MMPrepDataLocation","MM_Measurements","MM prep data"}; - SG::WriteHandleKey<MuonCombined::InDetCandidateToTagMap> m_tagMap{this,"TagMap","muGirlTagMap","tag map"}; - SG::WriteHandleKey<TrackCollection> m_combTracks{this,"CombinedTrackCollection","MuGirlCombinedTracks","combined track collection"}; - SG::WriteHandleKey<TrackCollection> m_METracks{this,"METrackCollection","MuGirlMETracks","ME track collection"}; - SG::WriteHandleKey<Trk::SegmentCollection> m_segments{this,"SegmentCollection","MuGirlSegments","Segment collection"}; - - bool m_usePRDs; - bool m_hasCSC; - bool m_hasSTGC; - bool m_hasMM; +class MuonCombinedInDetExtensionAlg : public AthAlgorithm { + public: + MuonCombinedInDetExtensionAlg(const std::string& name, ISvcLocator* pSvcLocator); + + ~MuonCombinedInDetExtensionAlg(); + + StatusCode initialize(); + StatusCode execute(); + StatusCode finalize(); + + private: + ToolHandleArray<MuonCombined::IMuonCombinedInDetExtensionTool> m_muonCombinedInDetExtensionTools; + SG::ReadHandleKey<InDetCandidateCollection> m_indetCandidateCollectionName{ + this, + "InDetCandidateLocation", + "InDetCandidates", + "ID candidates", + }; + SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_MDT_ContainerName{ + this, + "MDTPrepDataLocation", + "MDT_DriftCircles", + "MDT prep data", + }; + SG::ReadHandleKey<Muon::CscPrepDataContainer> m_CSC_ContainerName{ + this, + "CSCPrepDataLocation", + "CSC_Clusters", + "CSC prep data", + }; + SG::ReadHandleKey<Muon::RpcPrepDataContainer> m_RPC_ContainerName{ + this, + "RPCPrepDataLocation", + "RPC_Measurements", + "RPC prep data", + }; + SG::ReadHandleKey<Muon::TgcPrepDataContainer> m_TGC_ContainerName{ + this, + "TGCPrepDataLocation", + "TGC_Measurements", + "TGC prep data", + }; + SG::ReadHandleKey<Muon::sTgcPrepDataContainer> m_sTGC_ContainerName{ + this, + "sTGCPrepDataLocation", + "STGC_Measurements", + "sTGC prep data", + }; + SG::ReadHandleKey<Muon::MMPrepDataContainer> m_MM_ContainerName{ + this, + "MMPrepDataLocation", + "MM_Measurements", + "MM prep data", + }; + SG::WriteHandleKey<MuonCombined::InDetCandidateToTagMap> m_tagMap{ + this, + "TagMap", + "muGirlTagMap", + "tag map", + }; + SG::WriteHandleKey<TrackCollection> m_combTracks{ + this, + "CombinedTrackCollection", + "MuGirlCombinedTracks", + "combined track collection", + }; + SG::WriteHandleKey<TrackCollection> m_METracks{ + this, + "METrackCollection", + "MuGirlMETracks", + "ME track collection", + }; + SG::WriteHandleKey<Trk::SegmentCollection> m_segments{ + this, + "SegmentCollection", + "MuGirlSegments", + "Segment collection", + }; + + bool m_usePRDs; + bool m_hasCSC; + bool m_hasSTGC; + bool m_hasMM; }; diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.cxx b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.cxx index 060d710d458b4f460993a2e2f3a667d5d38abd01..43f0ebe5ad331a8b7676cf5ea47357bd41dac6b0 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.cxx @@ -4,38 +4,38 @@ #include "MuonCombinedMuonCandidateAlg.h" -MuonCombinedMuonCandidateAlg::MuonCombinedMuonCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator): - AthAlgorithm(name,pSvcLocator), - m_muonCandidateTool("MuonCombined::MuonCandidateTool/MuonCandidateTool", this) +MuonCombinedMuonCandidateAlg::MuonCombinedMuonCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator) + : AthAlgorithm(name, pSvcLocator) { - declareProperty("MuonCandidateTool", m_muonCandidateTool); } -StatusCode MuonCombinedMuonCandidateAlg::initialize() +StatusCode +MuonCombinedMuonCandidateAlg::initialize() { - ATH_CHECK(m_muonCandidateTool.retrieve()); - ATH_CHECK(m_muonTrackParticleLocation.initialize()); - ATH_CHECK(m_candidateCollectionName.initialize()); - ATH_CHECK(m_msOnlyTracks.initialize()); - return StatusCode::SUCCESS; + ATH_CHECK(m_muonCandidateTool.retrieve()); + ATH_CHECK(m_muonTrackParticleLocation.initialize()); + ATH_CHECK(m_candidateCollectionName.initialize()); + ATH_CHECK(m_msOnlyTracks.initialize()); + return StatusCode::SUCCESS; } -StatusCode MuonCombinedMuonCandidateAlg::execute() +StatusCode +MuonCombinedMuonCandidateAlg::execute() { - // retrieve MuonSpectrometer tracks - SG::ReadHandle<xAOD::TrackParticleContainer> muonTrackParticles(m_muonTrackParticleLocation); - if(!muonTrackParticles.isValid()){ - ATH_MSG_ERROR("Could not read "<<m_muonTrackParticleLocation); - return StatusCode::FAILURE; - } - if(!muonTrackParticles.isPresent()){ - ATH_MSG_WARNING(m_muonTrackParticleLocation<<" not present"); + // retrieve MuonSpectrometer tracks + SG::ReadHandle<xAOD::TrackParticleContainer> muonTrackParticles(m_muonTrackParticleLocation); + if (!muonTrackParticles.isValid()) { + ATH_MSG_ERROR("Could not read " << m_muonTrackParticleLocation); + return StatusCode::FAILURE; + } + if (!muonTrackParticles.isPresent()) { + ATH_MSG_WARNING(m_muonTrackParticleLocation << " not present"); + return StatusCode::SUCCESS; + } + SG::WriteHandle<MuonCandidateCollection> muonCandidates(m_candidateCollectionName); + ATH_CHECK(muonCandidates.record(std::make_unique<MuonCandidateCollection>())); + SG::WriteHandle<TrackCollection> msOnlyTracks(m_msOnlyTracks); + ATH_CHECK(msOnlyTracks.record(std::make_unique<TrackCollection>())); + m_muonCandidateTool->create(*muonTrackParticles, *muonCandidates, *msOnlyTracks); return StatusCode::SUCCESS; - } - SG::WriteHandle<MuonCandidateCollection> muonCandidates(m_candidateCollectionName); - ATH_CHECK(muonCandidates.record(std::make_unique<MuonCandidateCollection>())); - SG::WriteHandle<TrackCollection> msOnlyTracks(m_msOnlyTracks); - ATH_CHECK(msOnlyTracks.record(std::make_unique<TrackCollection>())); - m_muonCandidateTool->create(*muonTrackParticles,*muonCandidates,*msOnlyTracks); - return StatusCode::SUCCESS; } diff --git a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.h b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.h index 9b87317b46b117ce78d4ba5f97702b2ca4f71194..79e65f61efda7d286c1cd381e9771420b72d187d 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.h +++ b/Reconstruction/MuonIdentification/MuonCombinedAlgs/src/MuonCombinedMuonCandidateAlg.h @@ -5,32 +5,50 @@ #ifndef MUONCOMBINEDALGS_MUONCOMBINEDMUONCANDIDATEALG_H #define MUONCOMBINEDALGS_MUONCOMBINEDMUONCANDIDATEALG_H +#include <string> + #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" -#include "StoreGate/ReadHandleKey.h" -#include "StoreGate/WriteHandleKey.h" -#include "xAODTracking/TrackParticleContainer.h" #include "MuonCombinedEvent/MuonCandidateCollection.h" #include "MuonCombinedToolInterfaces/IMuonCandidateTool.h" +#include "StoreGate/ReadHandleKey.h" +#include "StoreGate/WriteHandleKey.h" #include "TrkTrack/TrackCollection.h" +#include "xAODTracking/TrackParticleContainer.h" -#include <string> - -class MuonCombinedMuonCandidateAlg : public AthAlgorithm -{ - public: - MuonCombinedMuonCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator); - - ~MuonCombinedMuonCandidateAlg()=default; - - StatusCode initialize(); - StatusCode execute(); - - private: - ToolHandle<MuonCombined::IMuonCandidateTool> m_muonCandidateTool; - SG::ReadHandleKey<xAOD::TrackParticleContainer> m_muonTrackParticleLocation{this,"MuonSpectrometerTrackParticleLocation","MuonSpectrometerTrackParticles","MS Track Particle collection"}; - SG::WriteHandleKey<MuonCandidateCollection> m_candidateCollectionName{this,"MuonCandidateLocation","MuonCandidates","Muon candidate collection"}; - SG::WriteHandleKey<TrackCollection> m_msOnlyTracks{this,"MSOnlyExtrapolatedTrackLocation","MSOnlyExtrapolatedTracks","MS extrapolated muon tracks"}; +class MuonCombinedMuonCandidateAlg : public AthAlgorithm { + public: + MuonCombinedMuonCandidateAlg(const std::string& name, ISvcLocator* pSvcLocator); + + ~MuonCombinedMuonCandidateAlg() = default; + + StatusCode initialize(); + StatusCode execute(); + + private: + ToolHandle<MuonCombined::IMuonCandidateTool> m_muonCandidateTool{ + this, + "MuonCandidateTool", + "MuonCombined::MuonCandidateTool/MuonCandidateTool", + }; + SG::ReadHandleKey<xAOD::TrackParticleContainer> m_muonTrackParticleLocation{ + this, + "MuonSpectrometerTrackParticleLocation", + "MuonSpectrometerTrackParticles", + "MS Track Particle collection", + }; + SG::WriteHandleKey<MuonCandidateCollection> m_candidateCollectionName{ + this, + "MuonCandidateLocation", + "MuonCandidates", + "Muon candidate collection", + }; + SG::WriteHandleKey<TrackCollection> m_msOnlyTracks{ + this, + "MSOnlyExtrapolatedTrackLocation", + "MSOnlyExtrapolatedTracks", + "MS extrapolated muon tracks", + }; }; diff --git a/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.cxx index b54fdd21c05a0f9a03eb448b91c338f379ed9945..36724f80a97030c80f3fca6e18c9ab94dbb2e392 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.cxx @@ -2,291 +2,313 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -#include "GaudiKernel/MsgStream.h" -#include "TrkTrack/Track.h" -#include "TrkParameters/TrackParameters.h" #include "MuonTrackTagTestTool.h" -#include "TrkSurfaces/StraightLineSurface.h" -#include "TrkSurfaces/CylinderSurface.h" -#include "TrkSurfaces/DiscSurface.h" -#include "TrkMeasurementBase/MeasurementBase.h" -#include "TrkGeometry/TrackingVolume.h" -#include "TrkGeometry/TrackingGeometry.h" +#include "GaudiKernel/MsgStream.h" #include "InDetRIO_OnTrack/PixelClusterOnTrack.h" #include "InDetRIO_OnTrack/TRT_DriftCircleOnTrack.h" +#include "TrkGeometry/TrackingGeometry.h" +#include "TrkGeometry/TrackingVolume.h" +#include "TrkMeasurementBase/MeasurementBase.h" +#include "TrkParameters/TrackParameters.h" +#include "TrkSurfaces/CylinderSurface.h" +#include "TrkSurfaces/DiscSurface.h" +#include "TrkSurfaces/StraightLineSurface.h" +#include "TrkTrack/Track.h" #ifdef MUONCOMBDEBUG -#include "TrkTruthData/TrackTruth.h" +#include "AtlasHepMC/GenParticle.h" +#include "TrkTruthData/TrackTruth.h" #include "TrkTruthData/TrackTruthCollection.h" -#include "AtlasHepMC/GenParticle.h" #endif using namespace MuonCombined; - -MuonTrackTagTestTool::MuonTrackTagTestTool(const std::string& type, const std::string& name, const IInterface* parent) : - AthAlgTool(type, name, parent), - m_extrapolator("Trk::Extrapolator/AtlasExtrapolator", this), - m_trackingGeometrySvc("AtlasTrackingGeometrySvc",name) + +MuonTrackTagTestTool::MuonTrackTagTestTool(const std::string &type, const std::string &name, const IInterface *parent) + : AthAlgTool(type, name, parent), m_trackingGeometrySvc("AtlasTrackingGeometrySvc", name) { - - declareInterface<IMuonTrackTagTool>(this); - declareProperty("Chi2Cut", m_chi2cut=50.); - declareProperty("ExtrapolatorTool",m_extrapolator); - declareProperty("TrackingGeometrySvc", m_trackingGeometrySvc); + declareInterface<IMuonTrackTagTool>(this); + declareProperty("Chi2Cut", m_chi2cut = 50.); + declareProperty("TrackingGeometrySvc", m_trackingGeometrySvc); #ifdef MUONCOMBDEBUG - declareProperty("Truth", m_truth=false); + declareProperty("Truth", m_truth = false); #endif - m_msEntrance=0; - m_trackingGeometry=0; - + m_msEntrance = 0; + m_trackingGeometry = 0; } -StatusCode MuonTrackTagTestTool::initialize() { +StatusCode +MuonTrackTagTestTool::initialize() +{ + ATH_CHECK(m_extrapolator.retrieve()); - StatusCode sc=m_extrapolator.retrieve(); - if (sc==StatusCode::FAILURE){ - msg(MSG::FATAL) << "Could not retrieve extrapolator tool" << endmsg; - return sc; + if (!m_trackingGeometrySvc.empty()) { + ATH_CHECK(m_trackingGeometrySvc.retrieve()); + msg(MSG::INFO) << " geometry Svc " << m_trackingGeometrySvc << " retrieved " << endmsg; + } - } + msg(MSG::INFO) << "Initialized successfully" << endmsg; - if(!m_trackingGeometrySvc.empty()){ - sc = m_trackingGeometrySvc.retrieve(); - if( sc.isFailure() ){ - msg(MSG::ERROR) << " failed to retrieve geometry Svc " << m_trackingGeometrySvc << endmsg; - return StatusCode::FAILURE; - } - msg(MSG::INFO) << " geometry Svc " << m_trackingGeometrySvc << " retrieved " << endmsg; - } - - msg(MSG::INFO) << "Initialized successfully" << endmsg; - - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } -StatusCode MuonTrackTagTestTool::finalize() { - - msg(MSG::INFO) << "Finalized successfully" << endmsg; - - - return StatusCode::SUCCESS; +StatusCode +MuonTrackTagTestTool::finalize() +{ + + msg(MSG::INFO) << "Finalized successfully" << endmsg; + + + return StatusCode::SUCCESS; } -double MuonTrackTagTestTool::chi2(const Trk::Track& idTrack, const Trk::Track& msTrack) const { - std::call_once(m_trackingOnceFlag, [&](){ - m_trackingGeometry = m_trackingGeometrySvc->trackingGeometry(); - if (m_trackingGeometry) m_msEntrance = m_trackingGeometry->trackingVolume("MuonSpectrometerEntrance"); - if (!m_msEntrance) msg(MSG::ERROR) << "MS entrance not available" << endmsg; - }); - - if(idTrack.perigeeParameters()==0) { - msg(MSG::WARNING) << "Skipping track combination - no perigee parameters for ID track" << endmsg; - return 1e15; - } - if(msTrack.perigeeParameters()==0) { - msg(MSG::WARNING) << "Skipping track combination - no perigee parameters for MS track" << endmsg; - return 1e5; - } - // skip tracks from backtracking - if (dynamic_cast<const Trk::StraightLineSurface*>(&(**idTrack.measurementsOnTrack()->begin()).associatedSurface())) return 0; - if (idTrack.measurementsOnTrack()->size()<7 || dynamic_cast<const Trk::StraightLineSurface*>(&(*idTrack.measurementsOnTrack())[6]->associatedSurface()) || !dynamic_cast<const InDet::PixelClusterOnTrack*>(*idTrack.measurementsOnTrack()->begin()) ) return 0; - DataVector<const Trk::TrackStateOnSurface>::const_iterator itStates = idTrack.trackStateOnSurfaces()->begin(); - DataVector<const Trk::TrackStateOnSurface>::const_iterator endState = idTrack.trackStateOnSurfaces()->end(); - int noutl=0,ntrt=0; - for (;itStates!=endState;++itStates){ - if ((**itStates).measurementOnTrack()) { - const InDet::TRT_DriftCircleOnTrack *trthit=dynamic_cast<const InDet::TRT_DriftCircleOnTrack *>((**itStates).measurementOnTrack()); - if (trthit) { - if ((**itStates).type(Trk::TrackStateOnSurface::Outlier)) noutl++; - else ntrt++; - } +double +MuonTrackTagTestTool::chi2(const Trk::Track &idTrack, const Trk::Track &msTrack) const +{ + std::call_once(m_trackingOnceFlag, [&]() { + m_trackingGeometry = m_trackingGeometrySvc->trackingGeometry(); + if (m_trackingGeometry) m_msEntrance = m_trackingGeometry->trackingVolume("MuonSpectrometerEntrance"); + if (!m_msEntrance) msg(MSG::ERROR) << "MS entrance not available" << endmsg; + }); + + if (idTrack.perigeeParameters() == 0) { + msg(MSG::WARNING) << "Skipping track combination - no perigee parameters for ID track" << endmsg; + return 1e15; } - } - //std::cout << "noutl: " << noutl << std::endl; - double eta=idTrack.perigeeParameters()->eta(); - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ntrt: " << ntrt << " ntrtoutl: " << noutl << " eta: " << eta << endmsg; - if (noutl>=15 || (ntrt==0 && std::abs(eta)>.1 && std::abs(eta)<1.9)) return 0; - - // skip tracks below 2.5 GeV - double idqoverp=idTrack.perigeeParameters()->parameters()[Trk::qOverP]; - if (idqoverp!=0 && fabs(1/idqoverp)<2500) return 0; - - const Trk::TrackParameters *muonpar=msTrack.trackParameters()->front(); - - bool checkphiflip=false,muonisstraight=false; - /* double p_ms= (!idqoverp) ? 1.e9 : fabs(1/idqoverp)-4*GeV; - if (p_ms<.5*GeV) p_ms=.5*GeV; - double deltatheta=.3e3*10/p_ms; - if (idTrack.perigeeParameters()->parameters()[Trk::theta]+deltatheta>M_PI || idTrack.perigeeParameters()->parameters()[Trk::theta]-deltatheta<0) checkphiflip=true; - */ - if (std::abs(muonpar->parameters()[Trk::qOverP])<1.e-9) checkphiflip=muonisstraight=true; - - double phiID=(**idTrack.trackParameters()->rbegin()).parameters()[Trk::phi], phiMS=muonpar->position().phi(); - double thetaID=(**idTrack.trackParameters()->rbegin()).parameters()[Trk::theta], thetaMS=muonpar->parameters()[Trk::theta]; - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "phi ID: " << phiID << " phi MS: " << phiMS << " diff: " << phiID-phiMS << " pt ID: " << idTrack.perigeeParameters()->pT() << " pt ms: " << muonpar->pT() << endmsg; - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "theta ID: " << thetaID << " theta MS: " << thetaMS << " diff: " << thetaID-thetaMS << endmsg; - double phidiff=fabs(phiID-phiMS); - if (fabs(phidiff-2*M_PI)<phidiff) phidiff=2*M_PI-phidiff; - if (checkphiflip && fabs(phidiff-M_PI)<phidiff) phidiff=fabs(M_PI-phidiff); - double thetalimit=.6,philimit=.8; - if (muonisstraight) { - thetalimit=1.; - philimit=2; - } - if (!(fabs(thetaID-thetaMS)<thetalimit && fabs(phidiff)< philimit)) return 0; - - const Trk::TrackParameters *lastmeasidpar=0; - int index=(int)idTrack.trackParameters()->size(); - while (!lastmeasidpar && index>0){ - index--; - lastmeasidpar = (*idTrack.trackParameters())[index]->covariance() ? (*idTrack.trackParameters())[index] : 0; - } - if (!lastmeasidpar) { - msg(MSG::WARNING) << "ID track parameters don't have error matrix!" << endmsg; - return 0; - } - - const Trk::TrackParameters *mspar=0; - DataVector<const Trk::TrackStateOnSurface>::const_iterator tsosit=msTrack.trackStateOnSurfaces()->begin(); - - while (tsosit!=msTrack.trackStateOnSurfaces()->end() && !mspar) { - if ((**tsosit).type(Trk::TrackStateOnSurface::Measurement) && !(**tsosit).type(Trk::TrackStateOnSurface::Outlier)) { - mspar=(**tsosit).trackParameters(); + if (msTrack.perigeeParameters() == 0) { + msg(MSG::WARNING) << "Skipping track combination - no perigee parameters for MS track" << endmsg; + return 1e5; } - tsosit++; - } - - if (!mspar) { - msg(MSG::WARNING) << "Could not find muon track parameters!" << endmsg; - return 0; - } - - std::unique_ptr<const Trk::TrackParameters> idextrapolatedpar = - std::unique_ptr<const Trk::TrackParameters> - ( m_extrapolator->extrapolateToVolume(*lastmeasidpar,*m_msEntrance,Trk::alongMomentum,Trk::muon) ); - - if (!idextrapolatedpar && lastmeasidpar->parameters()[Trk::qOverP]!=0 && std::abs(1./lastmeasidpar->parameters()[Trk::qOverP])<5.*CLHEP::GeV) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Extrapolating with p=5 GeV" << endmsg; - AmgVector(5) params=lastmeasidpar->parameters(); - double sign= (params[Trk::qOverP]>0) ? 1 : -1; - double newqoverp=sign/(5.*CLHEP::GeV); - params[Trk::qOverP]=newqoverp; - std::unique_ptr<const Trk::TrackParameters> newlastidpar = - std::unique_ptr<const Trk::TrackParameters> - ( lastmeasidpar->associatedSurface().createTrackParameters(params[0],params[1],params[2],params[3],params[4],new AmgSymMatrix(5)(*lastmeasidpar->covariance())) ); - if(newlastidpar) { - idextrapolatedpar = - std::unique_ptr<const Trk::TrackParameters> - ( m_extrapolator->extrapolateToVolume(*newlastidpar,*m_msEntrance,Trk::alongMomentum,Trk::muon) ); + // skip tracks from backtracking + if (dynamic_cast<const Trk::StraightLineSurface *>(&(**idTrack.measurementsOnTrack()->begin()).associatedSurface())) + return 0; + if (idTrack.measurementsOnTrack()->size() < 7 + || dynamic_cast<const Trk::StraightLineSurface *>(&(*idTrack.measurementsOnTrack())[6]->associatedSurface()) + || !dynamic_cast<const InDet::PixelClusterOnTrack *>(*idTrack.measurementsOnTrack()->begin())) + return 0; + DataVector<const Trk::TrackStateOnSurface>::const_iterator itStates = idTrack.trackStateOnSurfaces()->begin(); + DataVector<const Trk::TrackStateOnSurface>::const_iterator endState = idTrack.trackStateOnSurfaces()->end(); + int noutl = 0, ntrt = 0; + for (; itStates != endState; ++itStates) { + if ((**itStates).measurementOnTrack()) { + const InDet::TRT_DriftCircleOnTrack *trthit = + dynamic_cast<const InDet::TRT_DriftCircleOnTrack *>((**itStates).measurementOnTrack()); + if (trthit) { + if ((**itStates).type(Trk::TrackStateOnSurface::Outlier)) + noutl++; + else + ntrt++; + } + } } - } - - if (!idextrapolatedpar || !idextrapolatedpar->covariance()) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ID extrapolated par null or missing error matrix, par: " << idextrapolatedpar.get() << endmsg; - return 0; - } - const Trk::TrackParameters *msparforextrapolator=mspar; - std::unique_ptr<const Trk::TrackParameters> created_mspar; - if (muonisstraight){ - const AmgSymMatrix(5) &idcovmat=*idextrapolatedpar->covariance(); - AmgVector(5) params=mspar->parameters(); - params[Trk::qOverP]=idextrapolatedpar->parameters()[Trk::qOverP]; - if(!mspar->covariance()){ - ATH_MSG_DEBUG( "Muons parameters missing Error matrix: " << mspar); - return 1e5; // Sometimes it's 0, sometimes 1e15. Maybe for comparison of chi2? Just in case, will copy this value from earlier check on ms track. EJWM. - } - AmgSymMatrix(5) *newcovmat=new AmgSymMatrix(5)(*mspar->covariance()); - for (int i=0;i<5;i++) (*newcovmat)(i,4)=idcovmat(i,4); - created_mspar = - std::unique_ptr<const Trk::TrackParameters> - ( msparforextrapolator->associatedSurface().createTrackParameters(params[0],params[1],params[2],params[3],params[4],newcovmat) ); - msparforextrapolator = created_mspar.get(); - } - Trk::PropDirection propdir=Trk::oppositeMomentum; - Trk::DistanceSolution distsol=idextrapolatedpar->associatedSurface().straightLineDistanceEstimate(msparforextrapolator->position(),msparforextrapolator->momentum().unit()); - double distance=0; - if (distsol.numberOfSolutions()==1) distance=distsol.first(); - else if (distsol.numberOfSolutions()==2) { - distance= (std::abs(distsol.first())<std::abs(distsol.second())) ? distsol.first() : distsol.second(); - } - //std::cout << "distance: " << distance << std::endl; - if (distance>0 && distsol.numberOfSolutions()>0) propdir=Trk::alongMomentum; - - std::unique_ptr<const Trk::TrackParameters> msextrapolatedpar = - std::unique_ptr<const Trk::TrackParameters> - ( m_extrapolator->extrapolate(*msparforextrapolator,idextrapolatedpar->associatedSurface(),propdir,false,Trk::muon) ); - - if (muonisstraight){ - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Muon track is straight line" << endmsg; - } - //std::cout << "idpar: " << measidpar << " mspar: " << measmspar << std::endl; - - if ((!msextrapolatedpar && !muonisstraight)){ - msg(MSG::DEBUG) << "extrapolation failed, id:" << idextrapolatedpar.get() << " ms: " << msextrapolatedpar.get() << endmsg; - - return 0; - } - double mychi2=1e15; - if (msextrapolatedpar) mychi2=chi2(*idextrapolatedpar,*msextrapolatedpar); - if (muonisstraight) { - std::unique_ptr<const Trk::TrackParameters> idpar_firsthit = - std::unique_ptr<const Trk::TrackParameters> - ( m_extrapolator->extrapolate(*idextrapolatedpar,mspar->associatedSurface(),Trk::alongMomentum,false,Trk::muon) ); - if (idpar_firsthit) { - double chi2_2=chi2(*idpar_firsthit,*mspar); - if (chi2_2<mychi2) mychi2=chi2_2; + // std::cout << "noutl: " << noutl << std::endl; + double eta = idTrack.perigeeParameters()->eta(); + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "ntrt: " << ntrt << " ntrtoutl: " << noutl << " eta: " << eta << endmsg; + if (noutl >= 15 || (ntrt == 0 && std::abs(eta) > .1 && std::abs(eta) < 1.9)) return 0; + + // skip tracks below 2.5 GeV + double idqoverp = idTrack.perigeeParameters()->parameters()[Trk::qOverP]; + if (idqoverp != 0 && fabs(1 / idqoverp) < 2500) return 0; + + const Trk::TrackParameters *muonpar = msTrack.trackParameters()->front(); + + bool checkphiflip = false, muonisstraight = false; + /* double p_ms= (!idqoverp) ? 1.e9 : fabs(1/idqoverp)-4*GeV; + if (p_ms<.5*GeV) p_ms=.5*GeV; + double deltatheta=.3e3*10/p_ms; + if (idTrack.perigeeParameters()->parameters()[Trk::theta]+deltatheta>M_PI || + idTrack.perigeeParameters()->parameters()[Trk::theta]-deltatheta<0) checkphiflip=true; + */ + if (std::abs(muonpar->parameters()[Trk::qOverP]) < 1.e-9) checkphiflip = muonisstraight = true; + + double phiID = (**idTrack.trackParameters()->rbegin()).parameters()[Trk::phi], phiMS = muonpar->position().phi(); + double thetaID = (**idTrack.trackParameters()->rbegin()).parameters()[Trk::theta], + thetaMS = muonpar->parameters()[Trk::theta]; + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << "phi ID: " << phiID << " phi MS: " << phiMS << " diff: " << phiID - phiMS + << " pt ID: " << idTrack.perigeeParameters()->pT() << " pt ms: " << muonpar->pT() << endmsg; + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << "theta ID: " << thetaID << " theta MS: " << thetaMS << " diff: " << thetaID - thetaMS + << endmsg; + double phidiff = fabs(phiID - phiMS); + if (fabs(phidiff - 2 * M_PI) < phidiff) phidiff = 2 * M_PI - phidiff; + if (checkphiflip && fabs(phidiff - M_PI) < phidiff) phidiff = fabs(M_PI - phidiff); + double thetalimit = .6, philimit = .8; + if (muonisstraight) { + thetalimit = 1.; + philimit = 2; } - } - return mychi2; -} + if (!(fabs(thetaID - thetaMS) < thetalimit && fabs(phidiff) < philimit)) return 0; + + const Trk::TrackParameters *lastmeasidpar = 0; + int index = (int)idTrack.trackParameters()->size(); + while (!lastmeasidpar && index > 0) { + index--; + lastmeasidpar = (*idTrack.trackParameters())[index]->covariance() ? (*idTrack.trackParameters())[index] : 0; + } + if (!lastmeasidpar) { + msg(MSG::WARNING) << "ID track parameters don't have error matrix!" << endmsg; + return 0; + } + + const Trk::TrackParameters * mspar = 0; + DataVector<const Trk::TrackStateOnSurface>::const_iterator tsosit = msTrack.trackStateOnSurfaces()->begin(); + + while (tsosit != msTrack.trackStateOnSurfaces()->end() && !mspar) { + if ((**tsosit).type(Trk::TrackStateOnSurface::Measurement) + && !(**tsosit).type(Trk::TrackStateOnSurface::Outlier)) { + mspar = (**tsosit).trackParameters(); + } + tsosit++; + } + + if (!mspar) { + msg(MSG::WARNING) << "Could not find muon track parameters!" << endmsg; + return 0; + } + + std::unique_ptr<const Trk::TrackParameters> idextrapolatedpar = std::unique_ptr<const Trk::TrackParameters>( + m_extrapolator->extrapolateToVolume(*lastmeasidpar, *m_msEntrance, Trk::alongMomentum, Trk::muon)); + + if (!idextrapolatedpar && lastmeasidpar->parameters()[Trk::qOverP] != 0 + && std::abs(1. / lastmeasidpar->parameters()[Trk::qOverP]) < 5. * CLHEP::GeV) + { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Extrapolating with p=5 GeV" << endmsg; + AmgVector(5) params = lastmeasidpar->parameters(); + double sign = (params[Trk::qOverP] > 0) ? 1 : -1; + double newqoverp = sign / (5. * CLHEP::GeV); + params[Trk::qOverP] = newqoverp; + std::unique_ptr<const Trk::TrackParameters> newlastidpar = + std::unique_ptr<const Trk::TrackParameters>(lastmeasidpar->associatedSurface().createTrackParameters( + params[0], params[1], params[2], params[3], params[4], + new AmgSymMatrix(5)(*lastmeasidpar->covariance()))); + if (newlastidpar) { + idextrapolatedpar = std::unique_ptr<const Trk::TrackParameters>( + m_extrapolator->extrapolateToVolume(*newlastidpar, *m_msEntrance, Trk::alongMomentum, Trk::muon)); + } + } + + if (!idextrapolatedpar || !idextrapolatedpar->covariance()) { + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << "ID extrapolated par null or missing error matrix, par: " << idextrapolatedpar.get() + << endmsg; + return 0; + } + const Trk::TrackParameters * msparforextrapolator = mspar; + std::unique_ptr<const Trk::TrackParameters> created_mspar; + if (muonisstraight) { + const AmgSymMatrix(5) &idcovmat = *idextrapolatedpar->covariance(); + AmgVector(5) params = mspar->parameters(); + params[Trk::qOverP] = idextrapolatedpar->parameters()[Trk::qOverP]; + if (!mspar->covariance()) { + ATH_MSG_DEBUG("Muons parameters missing Error matrix: " << mspar); + return 1e5; // Sometimes it's 0, sometimes 1e15. Maybe for comparison of chi2? Just in case, will copy this + // value from earlier check on ms track. EJWM. + } + AmgSymMatrix(5) *newcovmat = new AmgSymMatrix(5)(*mspar->covariance()); + for (int i = 0; i < 5; i++) (*newcovmat)(i, 4) = idcovmat(i, 4); + created_mspar = + std::unique_ptr<const Trk::TrackParameters>(msparforextrapolator->associatedSurface().createTrackParameters( + params[0], params[1], params[2], params[3], params[4], newcovmat)); + msparforextrapolator = created_mspar.get(); + } + Trk::PropDirection propdir = Trk::oppositeMomentum; + Trk::DistanceSolution distsol = idextrapolatedpar->associatedSurface().straightLineDistanceEstimate( + msparforextrapolator->position(), msparforextrapolator->momentum().unit()); + double distance = 0; + if (distsol.numberOfSolutions() == 1) + distance = distsol.first(); + else if (distsol.numberOfSolutions() == 2) { + distance = (std::abs(distsol.first()) < std::abs(distsol.second())) ? distsol.first() : distsol.second(); + } + // std::cout << "distance: " << distance << std::endl; + if (distance > 0 && distsol.numberOfSolutions() > 0) propdir = Trk::alongMomentum; + std::unique_ptr<const Trk::TrackParameters> msextrapolatedpar = + std::unique_ptr<const Trk::TrackParameters>(m_extrapolator->extrapolate( + *msparforextrapolator, idextrapolatedpar->associatedSurface(), propdir, false, Trk::muon)); + if (muonisstraight) { + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Muon track is straight line" << endmsg; + } + // std::cout << "idpar: " << measidpar << " mspar: " << measmspar << std::endl; -double MuonTrackTagTestTool::chi2(const Trk::TrackParameters& idextrapolatedpar,const Trk::TrackParameters& msextrapolatedpar) const{ - double loc1ID=idextrapolatedpar.parameters()[Trk::loc1]; - double loc2ID=idextrapolatedpar.parameters()[Trk::loc2]; - double phiID=idextrapolatedpar.parameters()[Trk::phi]; - double thetaID=idextrapolatedpar.parameters()[Trk::theta]; - - double loc1MS=msextrapolatedpar.parameters()[Trk::loc1]; - double loc2MS=msextrapolatedpar.parameters()[Trk::loc2]; - double phiMS=msextrapolatedpar.parameters()[Trk::phi]; - double thetaMS=msextrapolatedpar.parameters()[Trk::theta]; - //std::cout << "idpar: " << *idpar << " mspar: " << *mspar << std::endl; - if (!idextrapolatedpar.covariance() || !msextrapolatedpar.covariance()) { - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "track parameters don't have error matrix! id: " << idextrapolatedpar.covariance() << " ms: " << msextrapolatedpar.covariance() << endmsg; - return 1e15; - } - const AmgSymMatrix(5) &idcovmat=*idextrapolatedpar.covariance(); - const AmgSymMatrix(5) &mscovmat=*msextrapolatedpar.covariance(); - //std::cout << "idpar: " << *idextrapolatedpar << " pos: " << idextrapolatedpar.position() << " mspar: " << *msextrapolatedpar << " position: " << msextrapolatedpar.position() << std::endl; - double loc1diff=fabs(loc1ID-loc1MS); - double loc2diff=fabs(loc2ID-loc2MS); - const Trk::CylinderSurface *cylsurf=dynamic_cast<const Trk::CylinderSurface *>(&idextrapolatedpar.associatedSurface()); - const Trk::DiscSurface *discsurf=dynamic_cast<const Trk::DiscSurface *>(&idextrapolatedpar.associatedSurface()); - - if (cylsurf){ - double length=2*M_PI*cylsurf->bounds().r(); - if (fabs(loc1diff-length )<loc1diff) loc1diff=length-loc1diff; - } - if (discsurf){ - if (fabs(loc2diff-2*M_PI)<loc2diff) loc2diff=2*M_PI-loc2diff; - } - double phidiff=fabs(phiID-phiMS); - if (fabs(phidiff-2*M_PI)<phidiff) phidiff=2*M_PI-phidiff; - if (fabs(phidiff-M_PI)<phidiff) phidiff-=M_PI; // catch singularity in phi near theta=0 - - double thetadiff=thetaID-thetaMS; - //std::cout << "loc1diff: " << loc1diff << " loc2diff: " << loc2diff << " phidiff: " << phidiff << " thetadiff: " << thetadiff << " idcov: " << idcovmat << " mscov: " << mscovmat << " idcovmat+mscovmat: " << idcovmat+mscovmat << std::endl; - double chi2=loc1diff*loc1diff/(idcovmat(0,0)+mscovmat(0,0))+loc2diff*loc2diff/(idcovmat(1,1)+mscovmat(1,1))+phidiff*phidiff/(idcovmat(2,2)+mscovmat(2,2))+thetadiff*thetadiff/(idcovmat(3,3)+mscovmat(3,3)); - chi2=std::abs(chi2); - //if (goodmatch) std::cout << "chi2 " << chi2 << std::endl; - if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " chi2: " << chi2 << endmsg; - return chi2; + if ((!msextrapolatedpar && !muonisstraight)) { + msg(MSG::DEBUG) << "extrapolation failed, id:" << idextrapolatedpar.get() << " ms: " << msextrapolatedpar.get() + << endmsg; + + return 0; + } + double mychi2 = 1e15; + if (msextrapolatedpar) mychi2 = chi2(*idextrapolatedpar, *msextrapolatedpar); + if (muonisstraight) { + std::unique_ptr<const Trk::TrackParameters> idpar_firsthit = + std::unique_ptr<const Trk::TrackParameters>(m_extrapolator->extrapolate( + *idextrapolatedpar, mspar->associatedSurface(), Trk::alongMomentum, false, Trk::muon)); + if (idpar_firsthit) { + double chi2_2 = chi2(*idpar_firsthit, *mspar); + if (chi2_2 < mychi2) mychi2 = chi2_2; + } + } + return mychi2; } + +double +MuonTrackTagTestTool::chi2(const Trk::TrackParameters &idextrapolatedpar, + const Trk::TrackParameters &msextrapolatedpar) const +{ + double loc1ID = idextrapolatedpar.parameters()[Trk::loc1]; + double loc2ID = idextrapolatedpar.parameters()[Trk::loc2]; + double phiID = idextrapolatedpar.parameters()[Trk::phi]; + double thetaID = idextrapolatedpar.parameters()[Trk::theta]; + + double loc1MS = msextrapolatedpar.parameters()[Trk::loc1]; + double loc2MS = msextrapolatedpar.parameters()[Trk::loc2]; + double phiMS = msextrapolatedpar.parameters()[Trk::phi]; + double thetaMS = msextrapolatedpar.parameters()[Trk::theta]; + // std::cout << "idpar: " << *idpar << " mspar: " << *mspar << std::endl; + if (!idextrapolatedpar.covariance() || !msextrapolatedpar.covariance()) { + if (msgLvl(MSG::DEBUG)) + msg(MSG::DEBUG) << "track parameters don't have error matrix! id: " << idextrapolatedpar.covariance() + << " ms: " << msextrapolatedpar.covariance() << endmsg; + return 1e15; + } + const AmgSymMatrix(5) &idcovmat = *idextrapolatedpar.covariance(); + const AmgSymMatrix(5) &mscovmat = *msextrapolatedpar.covariance(); + // std::cout << "idpar: " << *idextrapolatedpar << " pos: " << idextrapolatedpar.position() << " mspar: " << + // *msextrapolatedpar << " position: " << msextrapolatedpar.position() << std::endl; + double loc1diff = fabs(loc1ID - loc1MS); + double loc2diff = fabs(loc2ID - loc2MS); + const Trk::CylinderSurface *cylsurf = + dynamic_cast<const Trk::CylinderSurface *>(&idextrapolatedpar.associatedSurface()); + const Trk::DiscSurface *discsurf = dynamic_cast<const Trk::DiscSurface *>(&idextrapolatedpar.associatedSurface()); + + if (cylsurf) { + double length = 2 * M_PI * cylsurf->bounds().r(); + if (fabs(loc1diff - length) < loc1diff) loc1diff = length - loc1diff; + } + if (discsurf) { + if (fabs(loc2diff - 2 * M_PI) < loc2diff) loc2diff = 2 * M_PI - loc2diff; + } + double phidiff = fabs(phiID - phiMS); + if (fabs(phidiff - 2 * M_PI) < phidiff) phidiff = 2 * M_PI - phidiff; + if (fabs(phidiff - M_PI) < phidiff) phidiff -= M_PI; // catch singularity in phi near theta=0 + + double thetadiff = thetaID - thetaMS; + // std::cout << "loc1diff: " << loc1diff << " loc2diff: " << loc2diff << " phidiff: " << phidiff << " thetadiff: " + // << thetadiff << " idcov: " << idcovmat << " mscov: " << mscovmat << " idcovmat+mscovmat: " << idcovmat+mscovmat + // << std::endl; + double chi2 = loc1diff * loc1diff / (idcovmat(0, 0) + mscovmat(0, 0)) + + loc2diff * loc2diff / (idcovmat(1, 1) + mscovmat(1, 1)) + + phidiff * phidiff / (idcovmat(2, 2) + mscovmat(2, 2)) + + thetadiff * thetadiff / (idcovmat(3, 3) + mscovmat(3, 3)); + chi2 = std::abs(chi2); + // if (goodmatch) std::cout << "chi2 " << chi2 << std::endl; + if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " chi2: " << chi2 << endmsg; + return chi2; +} diff --git a/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.h b/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.h index f1fc3039c4cc9d87c5106d8f777e6202f06e4672..c80d624db14473f20824d5c1f9adc3ae0c65f7db 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedTestTools/src/MuonTrackTagTestTool.h @@ -7,51 +7,56 @@ //#define MUONCOMBDEBUG +#include <mutex> +#include <string> + #include "AthenaBaseComps/AthAlgTool.h" #include "GaudiKernel/ToolHandle.h" -#include <string> -#include <mutex> -#include "TrkExInterfaces/IExtrapolator.h" +#include "MuonCombinedToolInterfaces/IMuonTrackTagTool.h" #include "TrkDetDescrInterfaces/ITrackingGeometrySvc.h" +#include "TrkExInterfaces/IExtrapolator.h" #include "TrkParameters/TrackParameters.h" -#include "MuonCombinedToolInterfaces/IMuonTrackTagTool.h" -namespace Trk{ - class TrackingGeometry; - class TrackingVolume; -} +namespace Trk { +class TrackingGeometry; +class TrackingVolume; +} // namespace Trk namespace MuonCombined { - - class MuonTrackTagTestTool : public AthAlgTool, virtual public IMuonTrackTagTool { - + +class MuonTrackTagTestTool : public AthAlgTool, virtual public IMuonTrackTagTool { + public: - - MuonTrackTagTestTool(const std::string& type,const std::string& name, const IInterface* parent); + MuonTrackTagTestTool(const std::string& type, const std::string& name, const IInterface* parent); ~MuonTrackTagTestTool() {} - + StatusCode initialize(); StatusCode finalize(); - - double chi2(const Trk::TrackParameters& idParsAtEntry,const Trk::TrackParameters& msParsAtEntry) const; + + double chi2(const Trk::TrackParameters& idParsAtEntry, const Trk::TrackParameters& msParsAtEntry) const; double chi2(const Trk::Track& id, const Trk::Track& ms) const; private: + ToolHandle<Trk::IExtrapolator> m_extrapolator{ + this, + "ExtrapolatorTool", + "Trk::Extrapolator/AtlasExtrapolator", + }; + mutable ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc + ATLAS_THREAD_SAFE; // Services are assumed to be thread-safe + mutable const Trk::TrackingGeometry* m_trackingGeometry + ATLAS_THREAD_SAFE; // Initialized with call_once, then used read-only + mutable const Trk::TrackingVolume* m_msEntrance + ATLAS_THREAD_SAFE; // Initialized with call_once, then used read-only + mutable std::once_flag m_trackingOnceFlag ATLAS_THREAD_SAFE; - ToolHandle<Trk::IExtrapolator> m_extrapolator; - mutable ServiceHandle<Trk::ITrackingGeometrySvc> m_trackingGeometrySvc ATLAS_THREAD_SAFE; // Services are assumed to be thread-safe - mutable const Trk::TrackingGeometry* m_trackingGeometry ATLAS_THREAD_SAFE; // Initialized with call_once, then used read-only - mutable const Trk::TrackingVolume* m_msEntrance ATLAS_THREAD_SAFE; // Initialized with call_once, then used read-only - mutable std::once_flag m_trackingOnceFlag ATLAS_THREAD_SAFE; - double m_chi2cut; #ifdef MUONCOMBDEBUG bool m_truth; #endif - - }; +}; -} +} // namespace MuonCombined #endif diff --git a/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.cxx b/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.cxx index 7a5df34b905a6eaa5a8b22397c34b5740e17610e..ec1dde08a28333ed7594fc215c03ee8a7a78d0f4 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.cxx +++ b/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.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 */ /////////////////////////////////////////////////////////////////// @@ -7,250 +7,235 @@ /////////////////////////////////////////////////////////////////// #include "MuonCombinedTimingTool.h" -#include "TrkToolInterfaces/ITrackTimingTool.h" + #include "TrkSpaceTimePoint/SpaceTimePoint.h" + //================ Constructor ================================================= -Rec::MuonCombinedTimingTool::MuonCombinedTimingTool(const std::string& t, - const std::string& n, - const IInterface* p ) - : - AthAlgTool(t,n,p), - m_trtTimingTool("InDet::TRT_TrackTimingTool/TRT_TrackTimingTool"), - m_caloTimingTool("Rec::TrackInCaloTimingTool/TrackInCaloTimingTool"), - m_mdtSegmentTimingTool("Muon::SegmentTimingTool/SegmentTimingTool"), - m_rpcTimingTool("") +Rec::MuonCombinedTimingTool::MuonCombinedTimingTool(const std::string& t, const std::string& n, const IInterface* p) + : AthAlgTool(t, n, p) { - declareInterface<IMuonCombinedTimingTool>(this); - declareProperty("InDetTimingTool",m_trtTimingTool); - declareProperty("CaloTimingTool",m_caloTimingTool); - declareProperty("MDT_TimingTool",m_mdtSegmentTimingTool); - declareProperty("RPC_TimingTool",m_rpcTimingTool); + declareInterface<IMuonCombinedTimingTool>(this); } //================ Destructor ================================================= -Rec::MuonCombinedTimingTool::~MuonCombinedTimingTool() -{} +Rec::MuonCombinedTimingTool::~MuonCombinedTimingTool() {} //================ Initialisation ================================================= -StatusCode Rec::MuonCombinedTimingTool::initialize() +StatusCode +Rec::MuonCombinedTimingTool::initialize() { - - StatusCode sc = AlgTool::initialize(); - if (sc.isFailure()) return sc; - if (!m_trtTimingTool.empty()) { - if (m_trtTimingTool.retrieve().isFailure()) { - ATH_MSG_ERROR ("Could not retrieve "<<m_trtTimingTool.name()); - return StatusCode::FAILURE; - } else ATH_MSG_DEBUG ("Retrieved " << m_trtTimingTool.name()); - } - if (!m_caloTimingTool.empty()) { - if (m_caloTimingTool.retrieve().isFailure()) { - ATH_MSG_ERROR ("Could not retrieve "<<m_caloTimingTool.name()); + StatusCode sc = AlgTool::initialize(); + if (sc.isFailure()) return sc; + + if (!m_trtTimingTool.empty()) { + ATH_CHECK(m_trtTimingTool.retrieve()); + ATH_MSG_DEBUG("Retrieved " << m_trtTimingTool.name()); + } + if (!m_caloTimingTool.empty()) { + ATH_CHECK(m_caloTimingTool.retrieve()); + ATH_MSG_DEBUG("Retrieved " << m_caloTimingTool.name()); + } + if (!m_mdtSegmentTimingTool.empty()) { + ATH_CHECK(m_mdtSegmentTimingTool.retrieve()); + ATH_MSG_DEBUG("Retrieved " << m_mdtSegmentTimingTool.name()); + } + if (!m_rpcTimingTool.empty()) { + ATH_CHECK(m_rpcTimingTool.retrieve()); + ATH_MSG_DEBUG("Retrieved " << m_rpcTimingTool.name()); + } + + /* + if (!m_cscTimingTool.empty()) { + if (m_cscTimingTool.retrieve().isFailure()) { + ATH_MSG_ERROR ("Could not retrieve "<<m_cscTimingTool.name()); return StatusCode::FAILURE; - } else ATH_MSG_DEBUG ("Retrieved " << m_caloTimingTool.name()); - } - if (!m_mdtSegmentTimingTool.empty()) { - if (m_mdtSegmentTimingTool.retrieve().isFailure()) { - ATH_MSG_ERROR ("Could not retrieve "<<m_mdtSegmentTimingTool.name()); - return StatusCode::FAILURE; - } else ATH_MSG_DEBUG ("Retrieved " << m_mdtSegmentTimingTool.name()); - } - if (!m_rpcTimingTool.empty()) { - if (m_rpcTimingTool.retrieve().isFailure()) { - ATH_MSG_ERROR ("Could not retrieve "<<m_rpcTimingTool.name()); - return StatusCode::FAILURE; - } else ATH_MSG_DEBUG ("Retrieved " << m_rpcTimingTool.name()); - } - - /* - if (!m_cscTimingTool.empty()) { - if (m_cscTimingTool.retrieve().isFailure()) { - ATH_MSG_ERROR ("Could not retrieve "<<m_cscTimingTool.name()); - return StatusCode::FAILURE; - } else ATH_MSG_DEBUG ("Retrieved " << m_cscTimingTool.name()); - } */ - - ATH_MSG_DEBUG ("initialize() successful in " << name()); - return StatusCode::SUCCESS; + } else ATH_MSG_DEBUG ("Retrieved " << m_cscTimingTool.name()); + } */ + + ATH_MSG_DEBUG("initialize() successful in " << name()); + return StatusCode::SUCCESS; } //================ Finalisation ================================================= -StatusCode Rec::MuonCombinedTimingTool::finalize() +StatusCode +Rec::MuonCombinedTimingTool::finalize() { - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } //============================================================================================ -std::vector<Trk::SpaceTimePoint*> Rec::MuonCombinedTimingTool::timeMeasurements(const xAOD::Muon& ) const +std::vector<Trk::SpaceTimePoint*> +Rec::MuonCombinedTimingTool::timeMeasurements(const xAOD::Muon&) const { - std::vector<Trk::SpaceTimePoint*> spaceTimePoints; // empty vector - ATH_MSG_WARNING("This tool is not migrated to xAOD yet, please volunteer to update it if you need the information filled"); -// // return empty vector in case no segment container was associated to the muon -// if (!getSegmentContainer(muon)) return spaceTimePoints; - -// // *** -// // *** first choice: primary author combined muon or MuGirl refitted -// // *** -// if (muon.hasCombinedMuonTrackParticle() ) { -// // || muon.hasInnerExtrapolatedTrackParticle() ) // analysis will be based on MuGirl segments - -// const Rec::TrackParticle* muonParticle = muon.hasCombinedMuonTrackParticle() ? -// muon.combinedMuonTrackParticle() : muon.innerExtrapolatedTrackParticle(); - -// const Trk::Track* combinedTrack = muonParticle ? muonParticle->originalTrack() : NULL; - -// if (combinedTrack==NULL) return spaceTimePoints; - -// const Trk::Track* inDetTrack = muon.inDetTrkTrack(); -// if (!m_trtTimingTool.empty() && inDetTrack!= NULL) { -// // in case a refit is attempted, better give only the ID track to the tool. -// std::vector<Trk::SpaceTimePoint*> v1 -// = m_trtTimingTool->timeMeasurements(*inDetTrack); -// if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); -// } - -// if (!m_caloTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*combinedTrack); -// if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); -// } - -// if (!m_mdtSegmentTimingTool.empty()) { -// const Trk::SegmentCollection* segments = getSegmentContainer(muon); -// std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*combinedTrack, segments); -// if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); -// // if at some point consider passing tracks, in case t0 determined on the fly -// // std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*combinedTrack); -// // if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); -// } -// if (!m_rpcTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(*combinedTrack); -// if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); -// } -// return spaceTimePoints; -// } - -// // *** -// // *** second choice: primary author segment-tagger -// // *** -// if ( (muon.hasInDetTrackParticle() || muon.hasInnerExtrapolatedTrackParticle()) && !muon.isCaloMuonId()) { -// const Rec::TrackParticle* idParticle = muon.inDetTrackParticle(); -// const Trk::Track* idTrack = idParticle ? idParticle->originalTrack() : NULL; -// if (idTrack==NULL) return spaceTimePoints; -// if (!m_trtTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v1 = m_trtTimingTool->timeMeasurements(*idTrack); -// if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); -// } -// if (!m_caloTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*idTrack); -// if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); -// } -// if (!m_mdtSegmentTimingTool.empty() || !m_rpcTimingTool.empty()) { -// std::vector<const Trk::Segment*> segments; -// unsigned int nSeg = muon.numberOfSegments(); -// segments.reserve(nSeg); -// for( unsigned int si=0;si<nSeg;++si ) { -// const Trk::Segment* seg = muon.muonSegment(si); -// if( seg ) segments.push_back(seg); -// } -// if (!m_mdtSegmentTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(segments); -// if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); -// } -// if (!m_rpcTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(segments); -// if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); -// } -// } -// return spaceTimePoints; -// } - -// // *** -// // *** third choice: standalone muon -// // *** -// if (muon.hasMuonExtrapolatedTrackParticle()){ -// const Rec::TrackParticle* muonParticle = muon.muonExtrapolatedTrackParticle(); -// const Trk::Track* msTrack = muonParticle ? muonParticle->originalTrack() : NULL; -// if (msTrack==NULL) { -// ATH_MSG_WARNING ("No muon track or segments associated to SA muon !?"); -// return spaceTimePoints; -// } -// if (!m_caloTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*msTrack); -// if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); -// } -// if (!m_mdtSegmentTimingTool.empty()) { -// const Trk::SegmentCollection* segments = getSegmentContainer(muon); -// std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*msTrack, segments); -// if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); -// } -// if (!m_rpcTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(*msTrack); -// if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); -// } -// return spaceTimePoints; -// } - -// // *** -// // *** fourth choice: calo tagged muon -// // *** -// if (muon.hasInDetTrackParticle() && muon.isCaloMuonId()){ -// const Rec::TrackParticle* idParticle = muon.inDetTrackParticle(); -// const Trk::Track* idTrack = idParticle ? idParticle->originalTrack() : NULL; -// if (idTrack==NULL) return spaceTimePoints; -// if (!m_trtTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v1 = m_trtTimingTool->timeMeasurements(*idTrack); -// if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); -// } -// if (!m_caloTimingTool.empty()) { -// std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*idTrack); -// if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); -// } -// return spaceTimePoints; -// } - - return spaceTimePoints; + std::vector<Trk::SpaceTimePoint*> spaceTimePoints; // empty vector + ATH_MSG_WARNING( + "This tool is not migrated to xAOD yet, please volunteer to update it if you need the information filled"); + // // return empty vector in case no segment container was associated to the muon + // if (!getSegmentContainer(muon)) return spaceTimePoints; + + // // *** + // // *** first choice: primary author combined muon or MuGirl refitted + // // *** + // if (muon.hasCombinedMuonTrackParticle() ) { + // // || muon.hasInnerExtrapolatedTrackParticle() ) // analysis will be based on MuGirl segments + + // const Rec::TrackParticle* muonParticle = muon.hasCombinedMuonTrackParticle() ? + // muon.combinedMuonTrackParticle() : muon.innerExtrapolatedTrackParticle(); + + // const Trk::Track* combinedTrack = muonParticle ? muonParticle->originalTrack() : NULL; + + // if (combinedTrack==NULL) return spaceTimePoints; + + // const Trk::Track* inDetTrack = muon.inDetTrkTrack(); + // if (!m_trtTimingTool.empty() && inDetTrack!= NULL) { + // // in case a refit is attempted, better give only the ID track to the tool. + // std::vector<Trk::SpaceTimePoint*> v1 + // = m_trtTimingTool->timeMeasurements(*inDetTrack); + // if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); + // } + + // if (!m_caloTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*combinedTrack); + // if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); + // } + + // if (!m_mdtSegmentTimingTool.empty()) { + // const Trk::SegmentCollection* segments = getSegmentContainer(muon); + // std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*combinedTrack, segments); + // if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); + // // if at some point consider passing tracks, in case t0 determined on the fly + // // std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*combinedTrack); + // // if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); + // } + // if (!m_rpcTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(*combinedTrack); + // if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); + // } + // return spaceTimePoints; + // } + + // // *** + // // *** second choice: primary author segment-tagger + // // *** + // if ( (muon.hasInDetTrackParticle() || muon.hasInnerExtrapolatedTrackParticle()) && !muon.isCaloMuonId()) { + // const Rec::TrackParticle* idParticle = muon.inDetTrackParticle(); + // const Trk::Track* idTrack = idParticle ? idParticle->originalTrack() : NULL; + // if (idTrack==NULL) return spaceTimePoints; + // if (!m_trtTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v1 = m_trtTimingTool->timeMeasurements(*idTrack); + // if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); + // } + // if (!m_caloTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*idTrack); + // if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); + // } + // if (!m_mdtSegmentTimingTool.empty() || !m_rpcTimingTool.empty()) { + // std::vector<const Trk::Segment*> segments; + // unsigned int nSeg = muon.numberOfSegments(); + // segments.reserve(nSeg); + // for( unsigned int si=0;si<nSeg;++si ) { + // const Trk::Segment* seg = muon.muonSegment(si); + // if( seg ) segments.push_back(seg); + // } + // if (!m_mdtSegmentTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(segments); + // if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); + // } + // if (!m_rpcTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(segments); + // if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); + // } + // } + // return spaceTimePoints; + // } + + // // *** + // // *** third choice: standalone muon + // // *** + // if (muon.hasMuonExtrapolatedTrackParticle()){ + // const Rec::TrackParticle* muonParticle = muon.muonExtrapolatedTrackParticle(); + // const Trk::Track* msTrack = muonParticle ? muonParticle->originalTrack() : NULL; + // if (msTrack==NULL) { + // ATH_MSG_WARNING ("No muon track or segments associated to SA muon !?"); + // return spaceTimePoints; + // } + // if (!m_caloTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*msTrack); + // if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); + // } + // if (!m_mdtSegmentTimingTool.empty()) { + // const Trk::SegmentCollection* segments = getSegmentContainer(muon); + // std::vector<Trk::SpaceTimePoint*> v3 = m_mdtSegmentTimingTool->timeMeasurements(*msTrack, segments); + // if (!v3.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v3.begin(), v3.end()); + // } + // if (!m_rpcTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v4 = m_rpcTimingTool->timeMeasurements(*msTrack); + // if (!v4.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v4.begin(), v4.end()); + // } + // return spaceTimePoints; + // } + + // // *** + // // *** fourth choice: calo tagged muon + // // *** + // if (muon.hasInDetTrackParticle() && muon.isCaloMuonId()){ + // const Rec::TrackParticle* idParticle = muon.inDetTrackParticle(); + // const Trk::Track* idTrack = idParticle ? idParticle->originalTrack() : NULL; + // if (idTrack==NULL) return spaceTimePoints; + // if (!m_trtTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v1 = m_trtTimingTool->timeMeasurements(*idTrack); + // if (!v1.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v1.begin(), v1.end()); + // } + // if (!m_caloTimingTool.empty()) { + // std::vector<Trk::SpaceTimePoint*> v2 = m_caloTimingTool->timeMeasurements(*idTrack); + // if (!v2.empty()) spaceTimePoints.insert( spaceTimePoints.end(), v2.begin(), v2.end()); + // } + // return spaceTimePoints; + // } + + return spaceTimePoints; } // Helper function to figure out which is the appropriate segment container to retrieve -// Based on the muon's author -const Trk::SegmentCollection* Rec::MuonCombinedTimingTool::getSegmentContainer(const xAOD::Muon& ) const{ -// std::string containerName = ""; - -// MuonParameters::Author auth = muon.author(); - -// // FIXME At the moment, space-time points are constructed only for muid. -// // TODO In the future, 3rd muon chain has to be treated as well. -// //First check if muon is Muonboy/STACO -// // if(auth == MuonParameters::MuonboySP || auth == MuonParameters::Muonboy || -// // auth == MuonParameters::STACO) {// MuonboySP or Muonboy or STACO -// // containerName = "ConvertedMBoySegments"; -// // } else -// if (auth == MuonParameters::MOORE || auth == MuonParameters::MuidSA || -// auth == MuonParameters::MuidCo) { //MOORE or MuidSA or MuidCo -// containerName = "MooreSegments"; -// } - -// if( evtStore()->contains<Trk::SegmentCollection>(containerName) ){ -// const Trk::SegmentCollection* segs = NULL; - -// if( evtStore()->retrieve(segs, containerName).isFailure() ){ -// ATH_MSG_DEBUG("Could not find segment container"); -// }else{ -// ATH_MSG_DEBUG("Successfully retrieved segment container"); - -// return segs; -// } -// } - - return NULL; - - +// Based on the muon's author +const Trk::SegmentCollection* +Rec::MuonCombinedTimingTool::getSegmentContainer(const xAOD::Muon&) const +{ + // std::string containerName = ""; + + // MuonParameters::Author auth = muon.author(); + + // // FIXME At the moment, space-time points are constructed only for muid. + // // TODO In the future, 3rd muon chain has to be treated as well. + // //First check if muon is Muonboy/STACO + // // if(auth == MuonParameters::MuonboySP || auth == MuonParameters::Muonboy || + // // auth == MuonParameters::STACO) {// MuonboySP or Muonboy or STACO + // // containerName = "ConvertedMBoySegments"; + // // } else + // if (auth == MuonParameters::MOORE || auth == MuonParameters::MuidSA || + // auth == MuonParameters::MuidCo) { //MOORE or MuidSA or MuidCo + // containerName = "MooreSegments"; + // } + + // if( evtStore()->contains<Trk::SegmentCollection>(containerName) ){ + // const Trk::SegmentCollection* segs = NULL; + + // if( evtStore()->retrieve(segs, containerName).isFailure() ){ + // ATH_MSG_DEBUG("Could not find segment container"); + // }else{ + // ATH_MSG_DEBUG("Successfully retrieved segment container"); + + // return segs; + // } + // } + + return NULL; } diff --git a/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.h b/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.h index e29c626aa42fba89373f27be33b7c3c13d58787b..7ed265021db3d76450064a87a847a3ba2b7b9468 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.h +++ b/Reconstruction/MuonIdentification/MuonCombinedTimingTools/src/MuonCombinedTimingTool.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 */ /////////////////////////////////////////////////////////////////// @@ -10,55 +10,71 @@ #define RECMUONCOMBINEDTIMINGTOOL_H #include "AthenaBaseComps/AthAlgTool.h" -#include "MuonCombinedToolInterfaces/IMuonCombinedTimingTool.h" #include "GaudiKernel/ToolHandle.h" +#include "MuonCombinedToolInterfaces/IMuonCombinedTimingTool.h" #include "TrkSegment/SegmentCollection.h" +#include "TrkToolInterfaces/ITrackTimingTool.h" #include "xAODMuon/Muon.h" -namespace Trk { class ITrackTimingTool; } +namespace Trk { +class ITrackTimingTool; +} // namespace Muon { class ISegmentTimingTool; } -namespace Rec -{ - class IMuonPropertiesTool; +namespace Rec { +class IMuonPropertiesTool; + +/** @class MuonCombinedTimingTool + + Tool to coordinate time-of-flight calculation for various types + of muons. It analyses the type of measurements contributing to + the muon and calls the appropriate detector tools. + + @author Wolfgang Liebig <-> +*/ - /** @class MuonCombinedTimingTool +class MuonCombinedTimingTool : virtual public IMuonCombinedTimingTool, public AthAlgTool { + public: + MuonCombinedTimingTool(const std::string&, const std::string&, const IInterface*); - Tool to coordinate time-of-flight calculation for various types - of muons. It analyses the type of measurements contributing to - the muon and calls the appropriate detector tools. - - @author Wolfgang Liebig <-> - */ + /** default destructor */ + virtual ~MuonCombinedTimingTool(); - class MuonCombinedTimingTool : virtual public IMuonCombinedTimingTool, public AthAlgTool - { - public: - MuonCombinedTimingTool(const std::string&,const std::string&,const IInterface*); + /** standard Athena-Algorithm method */ + virtual StatusCode initialize(); + /** standard Athena-Algorithm method */ + virtual StatusCode finalize(); - /** default destructor */ - virtual ~MuonCombinedTimingTool (); - - /** standard Athena-Algorithm method */ - virtual StatusCode initialize(); - /** standard Athena-Algorithm method */ - virtual StatusCode finalize (); + virtual std::vector<Trk::SpaceTimePoint*> timeMeasurements(const xAOD::Muon& muon) const; - virtual std::vector<Trk::SpaceTimePoint*> timeMeasurements(const xAOD::Muon& muon) const; - - private: - - //! time calculation in subdetector responsibility: inner detector - ToolHandle<Trk::ITrackTimingTool> m_trtTimingTool; - //! time calculation in subdetector responsibility: calorimeter - ToolHandle<Trk::ITrackTimingTool> m_caloTimingTool; - //! time calculation in subdetector responsibility: muon spectrometer (T0 fit) for MDT and CSC - ToolHandle<Trk::ITrackTimingTool> m_mdtSegmentTimingTool; - //! time calculation in subdetector responsibility: muon spectrometer (RPC timing) - ToolHandle<Trk::ITrackTimingTool> m_rpcTimingTool; + private: + //! time calculation in subdetector responsibility: inner detector + ToolHandle<Trk::ITrackTimingTool> m_trtTimingTool{ + this, + "InDetTimingTool", + "InDet::TRT_TrackTimingTool/TRT_TrackTimingTool", + }; + //! time calculation in subdetector responsibility: calorimeter + ToolHandle<Trk::ITrackTimingTool> m_caloTimingTool{ + this, + "CaloTimingTool", + "Rec::TrackInCaloTimingTool/TrackInCaloTimingTool", + }; + //! time calculation in subdetector responsibility: muon spectrometer (T0 fit) for MDT and CSC + ToolHandle<Trk::ITrackTimingTool> m_mdtSegmentTimingTool{ + this, + "MDT_TimingTool", + "Muon::SegmentTimingTool/SegmentTimingTool", + }; + //! time calculation in subdetector responsibility: muon spectrometer (RPC timing) + ToolHandle<Trk::ITrackTimingTool> m_rpcTimingTool{ + this, + "RPC_TimingTool", + "", + }; - virtual const Trk::SegmentCollection* getSegmentContainer(const xAOD::Muon& muon) const; - }; -} // end of namespace + virtual const Trk::SegmentCollection* getSegmentContainer(const xAOD::Muon& muon) const; +}; +} // namespace Rec -#endif +#endif diff --git a/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h b/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h index cfb5bcdb4cc5ec8b2ac9f8d9208132c96b4a0c54..9623048b73082067e3651f54fd6c31f7ef717f9f 100644 --- a/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h +++ b/Reconstruction/RecoTools/IsolationTool/IsolationTool/CaloIsolationTool.h @@ -6,6 +6,7 @@ #define ISOLATIONTOOL_CALOISOLATIONTOOL_H #include "AsgTools/AsgTool.h" +#include "AsgTools/PropertyWrapper.h" #include "AsgTools/ToolHandle.h" #include "AsgDataHandles/ReadHandleKey.h" diff --git a/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h b/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h index 2fd543bc011fecd5e6aa8786fdca8267c1d0559e..f494ff171566c6f4394402b214c9809988c3e46e 100644 --- a/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h +++ b/Reconstruction/RecoTools/IsolationTool/IsolationTool/TrackIsolationTool.h @@ -6,6 +6,7 @@ #define ISOLATIONTOOL_TRACKISOLATIONTOOL_H #include "AsgTools/AsgTool.h" +#include "AsgTools/PropertyWrapper.h" #include "AsgTools/ToolHandle.h" #include "AsgDataHandles/ReadHandleKey.h" #include "RecoToolInterfaces/ITrackIsolationTool.h" diff --git a/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx b/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx index 5061bcef0593931cc7b3609bba493cd19eb02f8f..09b79dc0fc888e104a4861cd1531d16600c5a11f 100644 --- a/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx +++ b/Reconstruction/RecoTools/IsolationTool/Root/CaloIsolationTool.cxx @@ -132,6 +132,11 @@ namespace xAOD { CaloCorrection corrlist, const CaloCellContainer* container) const { #ifdef XAOD_ANALYSIS + (void) result; + (void) particle; + (void) cones; + (void) corrlist; + (void) container; return false; #else // XAOD_ANALYSIS derefMap_t derefMap; diff --git a/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx b/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx index 222499de9dcbf22157c13a403eb9de19c1c86203..db4daaa00cb3acf53360a1285bb6708fa9a62816 100644 --- a/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx +++ b/Reconstruction/RecoTools/IsolationTool/Root/TrackIsolationTool.cxx @@ -9,6 +9,7 @@ ////////////////////////////////////////////////////////////////////////////// //<<<<<< INCLUDES >>>>>> +#include "AsgDataHandles/ReadHandle.h" #include "IsolationTool/TrackIsolationTool.h" // #include "InDetTrackSelectionTool/IInDetTrackSelectionTool.h" #include "xAODTracking/VertexContainer.h" diff --git a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py index 8155a366e6b12aa2c8031d04fca86d7787bf7ea4..2e6e1e4f2b3e1bd63aedb1fec557c813941b30da 100644 --- a/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py +++ b/Simulation/G4Atlas/G4AtlasApps/python/SimConfigFlags.py @@ -77,7 +77,7 @@ def createSimConfigFlags(): # For ISF scf.addFlag("Sim.ISFRun",False) - scf.addFlag("Sim.ISF.HITSMergingRequired", True) + scf.addFlag("Sim.ISF.HITSMergingRequired", {'ID':True, 'CALO':True, 'MUON':True}) scf.addFlag("Sim.ISF.Simulator", "ATLFASTII") scf.addFlag("Sim.ISF.DoTimeMonitoring", True) # bool: run time monitoring scf.addFlag("Sim.ISF.DoMemoryMonitoring", True) # bool: run time monitoring diff --git a/Simulation/ISF/ISF_Config/python/FlagSetters.py b/Simulation/ISF/ISF_Config/python/FlagSetters.py index b3922c80ef86d013f4fd46961b7d91b99f669650..348a9d8109c3cc6e9466b490c236e99f8e5cc0f0 100644 --- a/Simulation/ISF/ISF_Config/python/FlagSetters.py +++ b/Simulation/ISF/ISF_Config/python/FlagSetters.py @@ -46,7 +46,8 @@ def configureFlagsBase(): def configureFlagsFullG4(): from G4AtlasApps.SimFlags import simFlags simFlags.SimulationFlavour = "FullG4" - ISF_Flags.HITSMergingRequired = False + mergeDict = {'ID':False, 'CALO':False, 'MUON':False} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) ISF_Flags.ParticleBroker = "ISF_ParticleBrokerSvcNoOrdering" return @@ -126,6 +127,8 @@ def configureFlagsATLFASTII(): simFlags.SimulationFlavour = "AtlfastII" # TODO: can we rename this to "ATLFASTII" ? from ISF_Config.ISF_jobProperties import ISF_Flags ISF_Flags.UsingGeant4 = True + mergeDict = {'ID':False, 'CALO':True, 'MUON':False} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) ISF_Flags.ParticleBroker = "ISF_AFIIParticleBrokerSvc" return @@ -179,6 +182,9 @@ def configureFlagsATLFASTIIF(): from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags TrkDetFlags.MaterialVersion=21 TrkDetFlags.TRT_BuildStrawLayers=True + from ISF_Config.ISF_jobProperties import ISF_Flags + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) return def configureFlagsATLFASTIIFMT(): @@ -212,6 +218,9 @@ def configureFlagsG4HS_FastPileup(): from TrkDetDescrSvc.TrkDetDescrJobProperties import TrkDetFlags TrkDetFlags.MaterialVersion=21 TrkDetFlags.TRT_BuildStrawLayers=True + from ISF_Config.ISF_jobProperties import ISF_Flags + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) return def configureFlagsATLFASTIIF_IDOnly(): @@ -244,6 +253,8 @@ def configureFlagsATLFASTIIF_G4MS(): def configureFlagsMultiSimTest(): from ISF_Config.ISF_jobProperties import ISF_Flags ISF_Flags.UsingGeant4 = True + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) return def configureFlagsG4GammaCones(): diff --git a/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py b/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py index 1dd7c0fb9c9481c45fd0f67e73139d26bae26ac2..5878594eb542d7ea8febca1018377b2541e7fdef 100644 --- a/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py +++ b/Simulation/ISF/ISF_Config/python/ISF_jobProperties.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration ## @file ISF_Config/python/ISF_jobProperties.py ## @brief Python module to hold common flags to configure JobOptions @@ -109,8 +109,13 @@ class Simulator(JobProperty): class HITSMergingRequired(JobProperty): """The configured set of simulators requires merging of HITS collections""" statusOn = True - allowedTypes = ['bool'] - StoredValue = True + allowedTypes = ['dict'] + StoredValue = {'ID':True, 'CALO':True, 'MUON':True} + def anyOn(self): + if self.statusOn: + return (True in self.StoredValue.values()) + else: + return False class UsingGeant4(JobProperty): """Will this job be using Geant4?""" diff --git a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py index 6ad25b64c2cea50038562810c651915b1b0f77bc..053b60a529b3974e9f9ad4804058e9cb6445497f 100644 --- a/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py +++ b/Simulation/ISF/ISF_Config/share/ISF_ConfigJobInclude.py @@ -168,7 +168,7 @@ from ISF_Example.ISF_Metadata import createSimulationParametersMetadata, configu createSimulationParametersMetadata() configureRunNumberOverrides() -if ISF_Flags.HITSMergingRequired(): +if ISF_Flags.HITSMergingRequired.anyOn(): topSequence += collection_merger_alg #-------------------------------------------------------------- diff --git a/Simulation/ISF/ISF_Config/test/test_Sim_tf_configuration.py b/Simulation/ISF/ISF_Config/test/test_Sim_tf_configuration.py index 71b59344e23ac403d75e670d0a7314323a37a17e..c2f2f9c6cc71411071939061b268533c0a321a60 100755 --- a/Simulation/ISF/ISF_Config/test/test_Sim_tf_configuration.py +++ b/Simulation/ISF/ISF_Config/test/test_Sim_tf_configuration.py @@ -65,19 +65,19 @@ class TestATLFASTII(unittest.TestCase): actual_last_ath_alg_sequence_entry) def test___ISF_Collection_merger_InputBCMHits_contains_only_G4_collection(self): - expected_input_hits = ['BCMHits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputBCMHits', expected_input_hits) def test___ISF_Collection_merger_InputBLMHits_contains_only_G4_collection(self): - expected_input_hits = ['BLMHits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputBLMHits', expected_input_hits) def test___ISF_Collection_merger_InputCSCHits_contains_only_G4_collection(self): - expected_input_hits = ['CSC_Hits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputCSCHits', expected_input_hits) @@ -113,37 +113,37 @@ class TestATLFASTII(unittest.TestCase): expected_input_hits) def test___ISF_Collection_merger_InputMDTHits_contains_only_G4_collection(self): - expected_input_hits = ['MDT_Hits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputMDTHits', expected_input_hits) def test___ISF_Collection_merger_InputPixelHits_contains_only_G4_collection(self): - expected_input_hits = ['PixelHits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputPixelHits', expected_input_hits) def test___ISF_Collection_merger_InputRPCHits_contains_only_G4_collection(self): - expected_input_hits = ['RPC_Hits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputRPCHits', expected_input_hits) def test___ISF_Collection_merger_InputSCTHits_contains_only_G4_collection(self): - expected_input_hits = ['SCT_Hits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputSCTHits', expected_input_hits) def test___ISF_Collection_merger_InputTGCHits_contains_only_G4_collection(self): - expected_input_hits = ['TGC_Hits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputTGCHits', expected_input_hits) def test___ISF_Collection_merger_InputTRTUncompressedHits_contains_only_G4_collection(self): - expected_input_hits = ['TRTUncompressedHits_G4'] + expected_input_hits = [] self._assert_ISF_CollectionMerger_property_unordered_equal( 'InputTRTUncompressedHits', expected_input_hits) diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py index 7335385ccf145dc2a9579644c607a35cc0e2a929..7f558ad10f2bb69c09b9eae8f7b7263e7feb2dd9 100644 --- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py +++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpers.py @@ -6,7 +6,8 @@ from AthenaCommon.AthenaCommonFlags import athenaCommonFlags def generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property): + merger_input_property, + region): """ Generates and returns a collection name that is also registered to the ISF CollectionMerger algorithm. @@ -19,7 +20,7 @@ def generate_mergeable_collection_name(bare_collection_name, CollectionMerger algorithm to add the mergeable collection to. """ hardscatterSG = "OriginalEvent_SG+" - if simFlags.ISFRun() and ISF_Flags.HITSMergingRequired(): + if simFlags.ISFRun() and ISF_Flags.HITSMergingRequired.get_Value().get(region,True): mergeable_collection = '{bare}{suffix}'.format( bare=bare_collection_name, suffix=mergeable_collection_suffix diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpersNew.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpersNew.py index 3756a6a0de370a7592b09fabeeea74a3eed66b57..c9934f5f5621b168a6230130e6a2181de908bf80 100644 --- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpersNew.py +++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/collection_merger_helpersNew.py @@ -1,15 +1,17 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from __future__ import print_function from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator -def CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property): +def CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region): """Generates and returns a collection name that is also registered to the ISF CollectionMerger algorithm. - + :param bare_collection_name: name of the collection if no merging is taking place. :param mergeable_collection_suffix: suffix to the collection in @@ -18,18 +20,18 @@ def CollectionMergerCfg(ConfigFlags, bare_collection_name, CollectionMerger algorithm to add the mergeable collection to.""" result = ComponentAccumulator() - if ConfigFlags.Sim.ISFRun and ConfigFlags.Sim.ISF.HITSMergingRequired: + if ConfigFlags.Sim.ISFRun and ConfigFlags.Sim.ISF.HITSMergingRequired.get(region,True): mergeable_collection = '{bare}{suffix}'.format( bare=bare_collection_name, suffix=mergeable_collection_suffix) - + from ISF_Algorithms.CollectionMergerConfig import ISFCollectionMergerCfg algo=ISFCollectionMergerCfg(ConfigFlags) result.addEventAlgo(algo) input_attribute_name = 'Input{merger_input_property}'.format( merger_input_property=merger_input_property) - + merger_input_collections = getattr(algo,input_attribute_name) #empty list always? merger_input_collections.append(mergeable_collection) diff --git a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/test/test_collection_merger_helpers.py b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/test/test_collection_merger_helpers.py index c7c2a069759840ad5f36892d205e940594b087d2..41854bf88efab457a1b28fb5aa08f3398abe3f9e 100755 --- a/Simulation/ISF/ISF_Core/ISF_Algorithms/python/test/test_collection_merger_helpers.py +++ b/Simulation/ISF/ISF_Core/ISF_Algorithms/python/test/test_collection_merger_helpers.py @@ -22,28 +22,34 @@ class Test_generate_mergeable_collection_name(unittest.TestCase): def test_isISFRunAndHITSMergingRequired_expectBareNameWithSuffixReturned(self): simFlags.ISFRun.set_Value(True) - ISF_Flags.HITSMergingRequired.set_Value(True) + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) expected_collection_name = 'aTestCollection_TESTSUFFIX' self.assertEqual(expected_collection_name, actual_collection_name) def test_isISFRunAndHITSMergingRequiredWithEmptyCollectionMergerAlgorithm_expectCollectionAddedToCollectionMergerAlgorithm(self): simFlags.ISFRun.set_Value(True) - ISF_Flags.HITSMergingRequired.set_Value(True) + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) collection_merger = getAlgorithm('ISF_CollectionMerger') actual_collection_merger_input = collection_merger.InputPixelHits @@ -54,28 +60,34 @@ class Test_generate_mergeable_collection_name(unittest.TestCase): def test_isISFRunAndNoHITSMergingRequired_expectBareCollectionNameReturned(self): simFlags.ISFRun.set_Value(True) - ISF_Flags.HITSMergingRequired.set_Value(False) + mergeDict = {'ID':False, 'CALO':True, 'MUON':False} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) expected_collection_name = 'aTestCollection' self.assertEqual(expected_collection_name, actual_collection_name) def test_isISFRunAndNoHITSMergingRequiredWithEmptyCollectionMergerAlgorithm_expectCollectionMergerAlgorithmUntouched(self): simFlags.ISFRun.set_Value(True) - ISF_Flags.HITSMergingRequired.set_Value(False) + mergeDict = {'ID':False, 'CALO':True, 'MUON':False} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) collection_merger = getAlgorithm('ISF_CollectionMerger') actual_collection_merger_input = collection_merger.InputPixelHits @@ -86,42 +98,51 @@ class Test_generate_mergeable_collection_name(unittest.TestCase): def test_isNotISFRunAndNoHITSMergingRequired_expectBareCollectioNameReturned(self): simFlags.ISFRun.set_Value(False) - ISF_Flags.HITSMergingRequired.set_Value(False) + mergeDict = {'ID':False, 'CALO':True, 'MUON':False} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) expected_collection_name = 'aTestCollection' self.assertEqual(expected_collection_name, actual_collection_name) def test_isNotISFRunAndHITSMergingRequired_expectBareCollectioNameReturned(self): simFlags.ISFRun.set_Value(False) - ISF_Flags.HITSMergingRequired.set_Value(True) + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) expected_collection_name = 'aTestCollection' self.assertEqual(expected_collection_name, actual_collection_name) def test_isNotISFRunAndNoHITSMergingRequired_expectCollectionMergerAlgorithmUntouched(self): simFlags.ISFRun.set_Value(False) - ISF_Flags.HITSMergingRequired.set_Value(False) + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) collection_merger = getAlgorithm('ISF_CollectionMerger') actual_collection_merger_input = collection_merger.InputPixelHits @@ -132,14 +153,17 @@ class Test_generate_mergeable_collection_name(unittest.TestCase): def test_isNotISFRunAndHITSMergingRequired_expectCollectionMergerAlgorithmUntouched(self): simFlags.ISFRun.set_Value(False) - ISF_Flags.HITSMergingRequired.set_Value(True) + mergeDict = {'ID':True, 'CALO':True, 'MUON':True} + ISF_Flags.HITSMergingRequired.get_Value().update(mergeDict) bare_collection_name = 'aTestCollection' collection_suffix = '_TESTSUFFIX' merger_input_property = 'PixelHits' + region = 'ID' actual_collection_name = generate_mergeable_collection_name(bare_collection_name, collection_suffix, - merger_input_property) + merger_input_property, + region) collection_merger = getAlgorithm('ISF_CollectionMerger') actual_collection_merger_input = collection_merger.InputPixelHits diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt index 97f8b0901d8964b7b1d44d4403fa9bfa61f8731d..d1ad92ba48afef60852c598beca6efca677e9181 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/CMakeLists.txt @@ -34,7 +34,8 @@ atlas_add_root_dictionary( ISF_FastCaloSimEvent _dictSource ISF_FastCaloSimEvent/TFCS2DFunction.h ISF_FastCaloSimEvent/TFCS2DFunctionHistogram.h ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h - ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h + ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h + ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h ISF_FastCaloSimEvent/TFCSParametrizationBase.h ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h ISF_FastCaloSimEvent/TFCSParametrization.h diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h index 503cdc8a1af64a32745dfa43edb768c02256acff..421d8da598c07621ed55be4056e23254db031f91 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/LinkDef.h @@ -19,6 +19,7 @@ #include "ISF_FastCaloSimEvent/TFCS2DFunctionHistogram.h" #include "ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h" #include "ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h" +#include "ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h" #include "ISF_FastCaloSimEvent/TFCSParametrizationBase.h" #include "ISF_FastCaloSimEvent/TFCSParametrizationPlaceholder.h" @@ -42,6 +43,9 @@ #include "ISF_FastCaloSimEvent/TFCSEnergyAndHitGAN.h" #include "ISF_FastCaloSimEvent/TFCSLateralShapeParametrization.h" +#include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeGausLogWeight.h" +#include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeGausLogWeightHitAndMiss.h" + #include "ISF_FastCaloSimEvent/TFCSLateralShapeParametrizationHitBase.h" #include "ISF_FastCaloSimEvent/TFCSLateralShapeParametrizationHitChain.h" #include "ISF_FastCaloSimEvent/TFCSLateralShapeParametrizationFluctChain.h" @@ -51,9 +55,7 @@ #include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeParametrizationFCal.h" #include "ISF_FastCaloSimEvent/TFCS2DFunctionLateralShapeParametrization.h" #include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeWeight.h" -#include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeGausLogWeight.h" #include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeWeightHitAndMiss.h" -#include "ISF_FastCaloSimEvent/TFCSHistoLateralShapeGausLogWeightHitAndMiss.h" #include "ISF_FastCaloSimEvent/TFCSLateralShapeParametrizationHitNumberFromE.h" #include "ISF_FastCaloSimEvent/TFCSHitCellMapping.h" #include "ISF_FastCaloSimEvent/TFCSHitCellMappingFCal.h" @@ -142,21 +144,56 @@ #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; #pragma link C++ class TFCS2DFunctionInt8Int8Int8Histogram+; #pragma link C++ class TFCS2DFunctionInt8Int8Int16Histogram+; #pragma link C++ class TFCS2DFunctionInt8Int8Int32Histogram+; - #pragma link C++ class TFCS2DFunctionInt8Int16Int8Histogram+; #pragma link C++ class TFCS2DFunctionInt8Int16Int16Histogram+; #pragma link C++ class TFCS2DFunctionInt8Int16Int32Histogram+; - +#pragma link C++ class TFCS2DFunctionInt8Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int32Histogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int8Histogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int16Histogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int32Histogram+; + #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; @@ -164,21 +201,87 @@ #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; #pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; + + +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; + #pragma link C++ class TFCS2DFunctionInt8Int8Int8InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt8Int8Int16InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt8Int8Int32InterpolationHistogram+; - #pragma link C++ class TFCS2DFunctionInt8Int16Int8InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt8Int16Int16InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt8Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int32InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int8InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int16InterpolationHistogram+; #pragma link C++ class TFCS2DFunctionInt16Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int32InterpolationHistogram+; + +#pragma link C++ class TFCS2DFunctionInt32Int8Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int32InterpolationHistogram+; ///End Linkdefs needed for template based histograms diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateHelpers.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateHelpers.h index 1a3c17024ee514df5e8b960e83b5e7771a6b4367..9f81d9a123e2ed9b393447d310779dc1c3a37ac8 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateHelpers.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateHelpers.h @@ -251,15 +251,31 @@ template<typename T,typename Trandom=float> class TFCS1DFunction_HistogramBinEdg return (1-drnd)*m_array[pos] + drnd*m_array[pos+1]; }; - ///return interpolated position for bin pos, such that histograming the position gives a linear slope m, + ///return linearly interpolated position for bin pos, such that histograming the position gives a linear slope m, ///where m is in units of the bin width for bin pos. Interpolation is done with a random value in the range [0,1] - inline T position(size_t pos,Trandom m,const Trandom& drnd) const { + inline T position_lin(size_t pos,Trandom m,const Trandom& drnd) const { if(m>2) m=2; if(m<-2) m=-2; Trandom x=fabs(m)>0.001 ? (0.5*std::sqrt(m*(m+8*drnd-4)+4)-1)/m+0.5 : drnd; return (1-x)*m_array[pos] + x*m_array[pos+1]; }; + ///return exponetially interpolated position for bin pos, such that histograming the position gives a linear slope m, + ///where m is in units of the bin width for bin pos. Interpolation is done with a random value in the range [0,1] + inline T position_exp(size_t pos,Trandom beta,const Trandom& drnd) const { + Trandom z = drnd;///(m_array[pos+1] - m_array[pos]); + T pos1=GetBinLowEdge(pos); + T pos2=GetBinLowEdge(pos+1); + if(fabs(beta) < 1.0e-8) return (1-z)*pos1 + z*pos2; + else + { T deltax = m_array[pos+1] - m_array[pos]; + if(deltax == 0) return m_array[pos]; + else{ z = 1/beta*log( 1.0 + drnd*(exp(beta*deltax) - 1.0) )/deltax; } + } + + return (1-z)*pos1 + z*pos2; + }; + private: TFCS1DFunction_Array<T> m_array; inline size_t size() const {return m_array.size();}; @@ -353,7 +369,11 @@ template<typename T,typename Tint,typename Trandom=float> class TFCS1DFunction_H ///return interpolated position for bin pos, such that histograming the position gives a linear slope m, ///where m is in units of the bin width for bin pos. Interpolation is done with a random value in the range [0,1] - inline T position(size_t pos,Trandom m,const Trandom& drnd) const { + + + ///return linearly interpolated position for bin pos, such that histograming the position gives a linear slope m, + ///where m is in units of the bin width for bin pos. Interpolation is done with a random value in the range [0,1] + inline T position_lin(size_t pos,Trandom m,const Trandom& drnd) const { if(m>2) m=2; if(m<-2) m=-2; Trandom x=fabs(m)>0.001 ? (0.5*std::sqrt(m*(m+8*drnd-4)+4)-1)/m+0.5 : drnd; @@ -361,6 +381,23 @@ template<typename T,typename Tint,typename Trandom=float> class TFCS1DFunction_H T pos2=GetBinLowEdge(pos+1); return (1-x)*pos1 + x*pos2; }; + + ///return exponentially interpolated position for bin pos, such that histograming the position gives a linear slope m, + ///where m is in units of the bin width for bin pos. Interpolation is done with a random value in the range [0,1] + inline T position_exp(size_t pos,Trandom beta,const Trandom& drnd) const { + Trandom z = drnd;///(m_array[pos+1] - m_array[pos]); + T pos1=GetBinLowEdge(pos); + T pos2=GetBinLowEdge(pos+1); + if(fabs(beta) < 1.0e-8) return (1-z)*pos1 + z*pos2; + else + { T deltax = m_array[pos+1] - m_array[pos]; + if(deltax == 0) return m_array[pos]; + else{ z = 1/beta*log( 1.0 + drnd*(exp(beta*deltax) - 1.0) )/deltax; } + } + + return (1-z)*pos1 + z*pos2; + }; + private: TFCS1DFunction_Array<Tint> m_array; @@ -395,4 +432,42 @@ class TFCS1DFunction_HistogramInt32BinEdges: public TFCS1DFunction_HistogramComp ClassDefNV(TFCS1DFunction_HistogramInt32BinEdges,1) //TFCS1DFunction_HistogramInt32BinEdges }; + +#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__) +#pragma link C++ class TFCS1DFunction_Numeric<uint8_t,float>+; +#pragma link C++ class TFCS1DFunction_Numeric<uint16_t,float>+; +#pragma link C++ class TFCS1DFunction_Numeric<uint32_t,float>+; +#pragma link C++ class TFCS1DFunction_Numeric<float,float>+; +#pragma link C++ class TFCS1DFunction_Numeric<double,float>+; +#pragma link C++ class TFCS1DFunction_Numeric<double,double>+; + +#pragma link C++ class TFCS1DFunction_Array<float>-; +#pragma link C++ class TFCS1DFunction_Array<double>-; +#pragma link C++ class TFCS1DFunction_Array<uint8_t>-; +#pragma link C++ class TFCS1DFunction_Array<uint16_t>-; +#pragma link C++ class TFCS1DFunction_Array<uint32_t>-; + +#pragma link C++ class TFCS1DFunction_HistogramContent<float,float>+; +#pragma link C++ class TFCS1DFunction_HistogramContent<double,float>+; +#pragma link C++ class TFCS1DFunction_HistogramContent<double,double>+; +#pragma link C++ class TFCS1DFunction_HistogramContent<uint8_t,float>+; +#pragma link C++ class TFCS1DFunction_HistogramContent<uint16_t,float>+; +#pragma link C++ class TFCS1DFunction_HistogramContent<uint32_t,float>+; + +#pragma link C++ class TFCS1DFunction_HistogramBinEdges<float,float>+; +#pragma link C++ class TFCS1DFunction_HistogramBinEdges<double,float>+; +#pragma link C++ class TFCS1DFunction_HistogramBinEdges<double,double>+; + +#pragma link C++ class TFCS1DFunction_HistogramCompactBinEdges<float,uint8_t,float>+; +#pragma link C++ class TFCS1DFunction_HistogramCompactBinEdges<float,uint16_t,float>+; +#pragma link C++ class TFCS1DFunction_HistogramCompactBinEdges<float,uint32_t,float>+; + +#pragma link C++ class TFCS1DFunction_HistogramInt8BinEdges+; +#pragma link C++ class TFCS1DFunction_HistogramInt16BinEdges+; +#pragma link C++ class TFCS1DFunction_HistogramInt32BinEdges+; +#pragma link C++ class TFCS1DFunction_HistogramFloatBinEdges+; +#pragma link C++ class TFCS1DFunction_HistogramDoubleBinEdges+; + +#endif + #endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateInterpolationHistogram.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateInterpolationHistogram.h index 98d77ee14e086c46008314cd038edb64cb42f7f7..35494d350c116fe5a82c8269b95ec4f479682a73 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateInterpolationHistogram.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS1DFunctionTemplateInterpolationHistogram.h @@ -73,7 +73,7 @@ template <typename Txvec, typename Ty,typename Trandom=float> class TFCS1DFuncti } else m=0; //std::cout<<"fbin="<<ibin<<" fx="<<m_HistoBorders.GetBinLowEdge(ibin)<<" frac="<<m_HistoContents.get_fraction(ibin)<<" dfracprev="<<dfracprev<<" dfrac="<<dfrac<<" dfracnext="<<dfracnext<<" dfracprev-dfrac="<<dfracprev-dfrac<<" dfracnext-dfrac="<<dfracnext-dfrac<<" m="<<m<<" residual_rnd="<<residual_rnd<<std::endl; - return m_HistoBorders.position(ibin,m,residual_rnd); + return m_HistoBorders.position_lin(ibin,m,residual_rnd); } ClassDef(TFCS1DFunctionTemplateInterpolationHistogram,1) //TFCS1DFunctionTemplateInterpolationHistogram @@ -111,4 +111,18 @@ class TFCS1DFunctionInt16Int32InterpolationHistogram: public TFCS1DFunctionTempl ClassDef(TFCS1DFunctionInt16Int32InterpolationHistogram,1) //TFCS1DFunctionInt16Int32InterpolationHistogram }; + +#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__) +#pragma link C++ class TFCS1DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>+; +#pragma link C++ class TFCS1DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>+; +#pragma link C++ class TFCS1DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>+; +#pragma link C++ class TFCS1DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>+; + +#pragma link C++ class TFCS1DFunctionInt8Int8InterpolationHistogram+; +#pragma link C++ class TFCS1DFunctionInt8Int16InterpolationHistogram+; +#pragma link C++ class TFCS1DFunctionInt16Int16InterpolationHistogram+; +#pragma link C++ class TFCS1DFunctionInt16Int32InterpolationHistogram+; + +#endif + #endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h index 9fb4dbbe2592b6b141e6a184bd538113250bf2ad..a081d5f045a4e5be6a20a61b9165324610d24ce2 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h @@ -205,9 +205,6 @@ class TFCS2DFunctionInt8Int8Int32Histogram: public TFCS2DFunctionTemplateHistogr ClassDef(TFCS2DFunctionInt8Int8Int32Histogram,1) //TFCS2DFunctionInt8Int8Int32Histogram }; - - - class TFCS2DFunctionInt8Int16Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> { public: @@ -231,9 +228,54 @@ class TFCS2DFunctionInt8Int16Int32Histogram: public TFCS2DFunctionTemplateHistog ClassDef(TFCS2DFunctionInt8Int16Int32Histogram,1) //TFCS2DFunctionInt8Int16Int32Histogram }; +class TFCS2DFunctionInt8Int32Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int8Histogram,1) //TFCS2DFunctionInt8Int32Int8Histogram +}; +class TFCS2DFunctionInt8Int32Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int16Histogram,1) //TFCS2DFunctionInt8Int32Int16Histogram +}; +class TFCS2DFunctionInt8Int32Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int32Histogram,1) //TFCS2DFunctionInt8Int32Int32Histogram +}; + + + +class TFCS2DFunctionInt16Int8Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int8Histogram,1) //TFCS2DFunctionInt16Int8Int8Histogram +}; +class TFCS2DFunctionInt16Int8Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + ClassDef(TFCS2DFunctionInt16Int8Int16Histogram,1) //TFCS2DFunctionInt16Int8Int16Histogram +}; + +class TFCS2DFunctionInt16Int8Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int32Histogram,1) //TFCS2DFunctionInt16Int8Int32Histogram +}; class TFCS2DFunctionInt16Int16Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> { public: @@ -257,5 +299,163 @@ class TFCS2DFunctionInt16Int16Int32Histogram: public TFCS2DFunctionTemplateHisto ClassDef(TFCS2DFunctionInt16Int16Int32Histogram,1) //TFCS2DFunctionInt16Int16Int32Histogram }; +class TFCS2DFunctionInt16Int32Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int8Histogram,1) //TFCS2DFunctionInt16Int32Int8Histogram +}; +class TFCS2DFunctionInt16Int32Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int16Histogram,1) //TFCS2DFunctionInt16Int32Int16Histogram +}; +class TFCS2DFunctionInt16Int32Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int32Histogram,1) //TFCS2DFunctionInt16Int32Int32Histogram +}; + + + + +class TFCS2DFunctionInt32Int8Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int8Histogram,1) //TFCS2DFunctionInt32Int8Int8Histogram +}; + +class TFCS2DFunctionInt32Int8Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int16Histogram,1) //TFCS2DFunctionInt32Int8Int16Histogram +}; + +class TFCS2DFunctionInt32Int8Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int32Histogram,1) //TFCS2DFunctionInt32Int8Int32Histogram +}; +class TFCS2DFunctionInt32Int16Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int8Histogram,1) //TFCS2DFunctionInt32Int16Int8Histogram +}; + +class TFCS2DFunctionInt32Int16Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int16Histogram,1) //TFCS2DFunctionInt32Int16Int16Histogram +}; + +class TFCS2DFunctionInt32Int16Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int32Histogram,1) //TFCS2DFunctionInt32Int16Int32Histogram +}; +class TFCS2DFunctionInt32Int32Int8Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int8Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int8Histogram,1) //TFCS2DFunctionInt32Int32Int8Histogram +}; +class TFCS2DFunctionInt32Int32Int16Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int16Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int16Histogram,1) //TFCS2DFunctionInt32Int32Int16Histogram +}; +class TFCS2DFunctionInt32Int32Int32Histogram: public TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int32Histogram(TH2* h=nullptr):TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int32Histogram,1) //TFCS2DFunctionInt32Int32Int32Histogram +}; + + + + + +#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__) +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; + +#pragma link C++ class TFCS2DFunctionInt8Int8Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int32Histogram+; + +#pragma link C++ class TFCS2DFunctionInt16Int8Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int32Histogram+; + +#pragma link C++ class TFCS2DFunctionInt32Int8Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int32Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int8Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int16Histogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int32Histogram+; + + +#endif #endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h new file mode 100644 index 0000000000000000000000000000000000000000..937d276143b2ae7e63fe7ecfd9572d12651b6023 --- /dev/null +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h @@ -0,0 +1,390 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#ifndef ISF_FASTCALOSIMEVENT_TFCS2DFunctionTemplateInterpolationExpHistogram_h +#define ISF_FASTCALOSIMEVENT_TFCS2DFunctionTemplateInterpolationExpHistogram_h + +#include "TFCS2DFunction.h" +#include "ISF_FastCaloSimEvent/TFCS2DFunctionTemplateHistogram.h" +#include "TH1.h" +#include "TH2.h" +#include "TBuffer.h" + +#include <iostream> + +template <typename Txvec, typename Tyvec, typename Tz ,typename Trandom=float> class TFCS2DFunctionTemplateInterpolationExpHistogram:public TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom> +{ + public: + TFCS2DFunctionTemplateInterpolationExpHistogram(TH2* hist=nullptr):TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>(hist) {}; + + using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::rnd_to_fct; + using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::get_nbins; + using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::m_HistoContents; + using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::m_HistoBordersx; + using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::m_HistoBordersy; + + ///Function gets random number rnd in the range [0,1) as argument + ///and returns function value according to a histogram distribution. + ///An exponential interpolation is done within each bin + + + virtual void rnd_to_fct(float& valuex,float& valuey,float rnd, float rnd2) const { + size_t nbins=get_nbins(); + if(nbins==0) {valuex = 0.0; valuey = 0.0; return;} + Trandom residual_rnd; + size_t ibin=m_HistoContents.get_bin(rnd,residual_rnd); + + Trandom frac=m_HistoContents.get_fraction(ibin); + + size_t ibiny = ibin % m_HistoBordersy.get_nbins(); //printf("%d ", m_HistoBordersy.get_nbins() ); + size_t ibinx = ibin / m_HistoBordersy.get_nbins(); + //size_t nbinsx = m_HistoBordersx.get_nbins(); + size_t nbinsy = m_HistoBordersy.get_nbins(); + + Trandom dfrac = 0.0; + auto l=m_HistoBordersy.GetBinLength(ibiny); + Trandom dfracprev = 0.0; + Trandom ldfrac = 0.0; + auto lprev=l; + if(ibiny>0) { + Trandom fracprev=m_HistoContents.get_fraction(ibin-1); + dfrac=frac-fracprev; + if(ibiny>1) { + dfracprev=fracprev-m_HistoContents.get_fraction(ibin-2); + } else { + dfracprev=fracprev; + if(ibinx>0) dfracprev-=m_HistoContents.get_fraction(ibin-2); + } + lprev=m_HistoBordersy.GetBinLength(ibiny-1); + } else { + dfrac=frac; + if(ibinx>0) dfrac-=m_HistoContents.get_fraction(ibin-1); + dfracprev=dfrac; + } + + + if(dfrac > 0.0 && dfracprev > 0.0 ) + {ldfrac =log(dfrac/l) - log(dfracprev/lprev);} + + Trandom dfracnext = 0.0; + Trandom ldfracnext = 0.0; + auto lnext=l; + if(ibiny<nbinsy-1) { + dfracnext=m_HistoContents.get_fraction(ibin+1)-frac; + lnext=m_HistoBordersy.GetBinLength(ibiny+1); + } else { + dfracnext=dfrac; + } + + + if(dfrac > 0.0 && dfracnext > 0.0 ) + {ldfracnext=log(dfracnext/lnext) - log(dfrac/l);} + + Trandom beta=0.0, betaprev=0.0, betanext=0.0; + betanext=ldfracnext/(lnext+l)/0.5; + betaprev=ldfrac/(lprev+l)/0.5; + beta = 0.5*(betaprev + betanext); + //printf("betaprev=%13.5e betanext=%13.5e beta=%13.5e\n", betaprev, betanext, beta); + //printf("l=%13.5e lnext=%13.5e\n", l, lnext); + //printf("log=%13.5e lognext=%13.5e logprev=%13.5e\n", log(dfrac/l), log(dfracnext/lnext), log(dfracprev/lprev) ); + //printf("ldfrac=%13.5e ldfracnext=%13.5e\n", ldfrac, ldfracnext ); + + valuey = m_HistoBordersy.position_exp(ibiny,beta,residual_rnd); + valuex = m_HistoBordersx.position(ibinx, rnd2); + + } + + + + + + ClassDef(TFCS2DFunctionTemplateInterpolationExpHistogram,1) //TFCS1DFunctionTemplateInterpolationExpHistogram +}; + +class TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram +}; + +//// + +class TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram +}; + + +class TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram +}; + + + + + + +class TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram +}; + +//// + +class TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram +}; + + +class TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram +}; + + + + + + +class TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram +}; + +//// + +class TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram +}; + + +class TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram +}; +class TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram: public TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram,1) //TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram +}; + + + + + + + + + + +#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__) +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationExpHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; + +#pragma link C++ class TFCS2DFunctionInt8Int8Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int32InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int8InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int16InterpolationExpHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int32InterpolationExpHistogram+; + +#endif + +#endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h index f85abf429c35dd871575bac92f5aaa9012b21fd1..1f0e3f3a2c7703817918e8a3dd64faa9fe9aa589 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationHistogram.h @@ -25,6 +25,11 @@ template <typename Txvec, typename Tyvec, typename Tz ,typename Trandom=float> c using TFCS2DFunctionTemplateHistogram<Txvec,Tyvec,Tz,Trandom>::m_HistoBordersy; ///Function gets random number rnd in the range [0,1) as argument + ///and returns function value according to a histogram distribution. + ///An exponential interpolation is done within each bin + + +///Function gets random number rnd in the range [0,1) as argument ///and returns function value according to a histogram distribution. ///A linear interpolation is done within each bin virtual void rnd_to_fct(float& valuex,float& valuey,float rnd, float rnd2) const { @@ -78,10 +83,13 @@ template <typename Txvec, typename Tyvec, typename Tz ,typename Trandom=float> c m=(mnext+mprev)*l*l/dfrac; } else m=0; - valuey = m_HistoBordersy.position(ibiny,m,residual_rnd); + valuey = m_HistoBordersy.position_lin(ibiny,m,residual_rnd); valuex = m_HistoBordersx.position(ibinx, rnd2); } + + + ClassDef(TFCS2DFunctionTemplateInterpolationHistogram,1) //TFCS1DFunctionTemplateInterpolationHistogram }; @@ -92,7 +100,6 @@ class TFCS2DFunctionInt8Int8Int8InterpolationHistogram: public TFCS2DFunctionTem ClassDef(TFCS2DFunctionInt8Int8Int8InterpolationHistogram,1) //TFCS2DFunctionInt8Int8Int8InterpolationHistogram }; - class TFCS2DFunctionInt8Int8Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> { public: @@ -100,7 +107,6 @@ class TFCS2DFunctionInt8Int8Int16InterpolationHistogram: public TFCS2DFunctionTe ClassDef(TFCS2DFunctionInt8Int8Int16InterpolationHistogram,1) //TFCS2DFunctionInt8Int8Int16InterpolationHistogram }; - class TFCS2DFunctionInt8Int8Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> { public: @@ -109,7 +115,7 @@ class TFCS2DFunctionInt8Int8Int32InterpolationHistogram: public TFCS2DFunctionTe ClassDef(TFCS2DFunctionInt8Int8Int32InterpolationHistogram,1) //TFCS2DFunctionInt8Int8Int32InterpolationHistogram }; - +//// class TFCS2DFunctionInt8Int16Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> { @@ -118,7 +124,6 @@ class TFCS2DFunctionInt8Int16Int8InterpolationHistogram: public TFCS2DFunctionTe ClassDef(TFCS2DFunctionInt8Int16Int8InterpolationHistogram,1) //TFCS2DFunctionInt8Int16Int8InterpolationHistogram }; - class TFCS2DFunctionInt8Int16Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> { public: @@ -126,7 +131,6 @@ class TFCS2DFunctionInt8Int16Int16InterpolationHistogram: public TFCS2DFunctionT ClassDef(TFCS2DFunctionInt8Int16Int16InterpolationHistogram,1) //TFCS2DFunctionInt8Int16Int16InterpolationHistogram }; - class TFCS2DFunctionInt8Int16Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> { public: @@ -136,6 +140,56 @@ class TFCS2DFunctionInt8Int16Int32InterpolationHistogram: public TFCS2DFunctionT }; +class TFCS2DFunctionInt8Int32Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int8InterpolationHistogram,1) //TFCS2DFunctionInt8Int32Int8InterpolationHistogram +}; +class TFCS2DFunctionInt8Int32Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int16InterpolationHistogram,1) //TFCS2DFunctionInt8Int32Int16InterpolationHistogram +}; +class TFCS2DFunctionInt8Int32Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt8Int32Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt8Int32Int32InterpolationHistogram,1) //TFCS2DFunctionInt8Int32Int32InterpolationHistogram +}; + + + + + + +class TFCS2DFunctionInt16Int8Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int8InterpolationHistogram,1) //TFCS2DFunctionInt16Int8Int8InterpolationHistogram +}; +class TFCS2DFunctionInt16Int8Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int16InterpolationHistogram,1) //TFCS2DFunctionInt16Int8Int16InterpolationHistogram +}; +class TFCS2DFunctionInt16Int8Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int8Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int8Int32InterpolationHistogram,1) //TFCS2DFunctionInt16Int8Int32InterpolationHistogram +}; + +//// class TFCS2DFunctionInt16Int16Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> { @@ -144,7 +198,6 @@ class TFCS2DFunctionInt16Int16Int8InterpolationHistogram: public TFCS2DFunctionT ClassDef(TFCS2DFunctionInt16Int16Int8InterpolationHistogram,1) //TFCS2DFunctionInt16Int16Int8InterpolationHistogram }; - class TFCS2DFunctionInt16Int16Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> { public: @@ -152,7 +205,6 @@ class TFCS2DFunctionInt16Int16Int16InterpolationHistogram: public TFCS2DFunction ClassDef(TFCS2DFunctionInt16Int16Int16InterpolationHistogram,1) //TFCS2DFunctionInt16Int16Int16InterpolationHistogram }; - class TFCS2DFunctionInt16Int16Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> { public: @@ -161,4 +213,169 @@ class TFCS2DFunctionInt16Int16Int32InterpolationHistogram: public TFCS2DFunction ClassDef(TFCS2DFunctionInt16Int16Int32InterpolationHistogram,1) //TFCS2DFunctionInt16Int16Int32InterpolationHistogram }; + +class TFCS2DFunctionInt16Int32Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int8InterpolationHistogram,1) //TFCS2DFunctionInt16Int32Int8InterpolationHistogram +}; +class TFCS2DFunctionInt16Int32Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int16InterpolationHistogram,1) //TFCS2DFunctionInt16Int32Int16InterpolationHistogram +}; +class TFCS2DFunctionInt16Int32Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt16Int32Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt16Int32Int32InterpolationHistogram,1) //TFCS2DFunctionInt16Int32Int32InterpolationHistogram +}; + + + + + + +class TFCS2DFunctionInt32Int8Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int8InterpolationHistogram,1) //TFCS2DFunctionInt32Int8Int8InterpolationHistogram +}; +class TFCS2DFunctionInt32Int8Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int16InterpolationHistogram,1) //TFCS2DFunctionInt32Int8Int16InterpolationHistogram +}; +class TFCS2DFunctionInt32Int8Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int8Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt8BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int8Int32InterpolationHistogram,1) //TFCS2DFunctionInt32Int8Int32InterpolationHistogram +}; + +//// + +class TFCS2DFunctionInt32Int16Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int8InterpolationHistogram,1) //TFCS2DFunctionInt32Int16Int8InterpolationHistogram +}; +class TFCS2DFunctionInt32Int16Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int16InterpolationHistogram,1) //TFCS2DFunctionInt32Int16Int16InterpolationHistogram +}; +class TFCS2DFunctionInt32Int16Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int16Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt16BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int16Int32InterpolationHistogram,1) //TFCS2DFunctionInt32Int16Int32InterpolationHistogram +}; + + +class TFCS2DFunctionInt32Int32Int8InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int8InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint8_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int8InterpolationHistogram,1) //TFCS2DFunctionInt32Int32Int8InterpolationHistogram +}; +class TFCS2DFunctionInt32Int32Int16InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int16InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint16_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int16InterpolationHistogram,1) //TFCS2DFunctionInt32Int32Int16InterpolationHistogram +}; +class TFCS2DFunctionInt32Int32Int32InterpolationHistogram: public TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float> +{ + public: + TFCS2DFunctionInt32Int32Int32InterpolationHistogram(TH2* h=nullptr):TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges,TFCS1DFunction_HistogramInt32BinEdges,uint32_t,float>(h) {}; + + ClassDef(TFCS2DFunctionInt32Int32Int32InterpolationHistogram,1) //TFCS2DFunctionInt32Int32Int32InterpolationHistogram +}; + + + + + + + + + + +#if defined(__ROOTCLING__) && defined(__FastCaloSimStandAlone__) +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt8BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt16BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt8BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt16BinEdges, uint32_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint8_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint16_t,float>+; +#pragma link C++ class TFCS2DFunctionTemplateInterpolationHistogram<TFCS1DFunction_HistogramInt32BinEdges, TFCS1DFunction_HistogramInt32BinEdges, uint32_t,float>+; + +#pragma link C++ class TFCS2DFunctionInt8Int8Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int8Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt8Int32Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int8Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt16Int32Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int8Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int16Int32InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int8InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int16InterpolationHistogram+; +#pragma link C++ class TFCS2DFunctionInt32Int32Int32InterpolationHistogram+; + +#endif + #endif diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCS2DFunctionTemplateInterpolationExpHistogram.cxx b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCS2DFunctionTemplateInterpolationExpHistogram.cxx new file mode 100644 index 0000000000000000000000000000000000000000..4bfd3a34dc8389bf577e98234303532221f6922f --- /dev/null +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimEvent/src/TFCS2DFunctionTemplateInterpolationExpHistogram.cxx @@ -0,0 +1,10 @@ +/* + Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +*/ + +#include "ISF_FastCaloSimEvent/TFCS2DFunctionTemplateInterpolationExpHistogram.h" + +//============================================= +//======= TFCS2DFunctionTemplateInterpolationExpHistogram ========= +//============================================= + diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/Identifier/Identifier.h b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/Identifier/Identifier.h index ff56f0913a01891c8638402cf2213cd392d2bd0b..78d33066452f005500fec88f4848925048c06306 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/Identifier/Identifier.h +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/Identifier/Identifier.h @@ -23,7 +23,7 @@ class Identifier } max_value_type; Identifier():m_id(max_value) {}; - Identifier(const Identifier& value):m_id(value.m_id) {}; + Identifier(const Identifier& value):m_id(value.m_id) = default; Identifier(value_type value):m_id(value) {}; operator value_type() const { return m_id; } diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py index 965d5cf9833a3259fa3bb23b2fa4e25524ae468f..b3377782370c9d963c60001b53ebbdf96b8dc58b 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/AdditionalConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ Tools configurations for ISF_FastCaloSimServices @@ -801,41 +801,47 @@ def getPileupFastShowerCellBuilderTool(name="ISF_PileupFastShowerCellBuilderTool def getFastHitConvertTool(name="ISF_FastHitConvertTool", **kwargs): mergeable_collection_suffix = "_FastCaloSim" + region = "CALO" EMB_hits_bare_collection_name = "LArHitEMB" EMB_hits_merger_input_property = "LArEMBHits" EMB_hits_collection_name = generate_mergeable_collection_name( EMB_hits_bare_collection_name, mergeable_collection_suffix, - EMB_hits_merger_input_property) + EMB_hits_merger_input_property, + region) EMEC_hits_bare_collection_name = "LArHitEMEC" EMEC_hits_merger_input_property = "LArEMECHits" EMEC_hits_collection_name = generate_mergeable_collection_name( EMEC_hits_bare_collection_name, mergeable_collection_suffix, - EMEC_hits_merger_input_property) + EMEC_hits_merger_input_property, + region) FCAL_hits_bare_collection_name = "LArHitFCAL" FCAL_hits_merger_input_property = "LArFCALHits" FCAL_hits_collection_name = generate_mergeable_collection_name( FCAL_hits_bare_collection_name, mergeable_collection_suffix, - FCAL_hits_merger_input_property) + FCAL_hits_merger_input_property, + region) HEC_hits_bare_collection_name = "LArHitHEC" HEC_hits_merger_input_property = "LArHECHits" HEC_hits_collection_name = generate_mergeable_collection_name( HEC_hits_bare_collection_name, mergeable_collection_suffix, - HEC_hits_merger_input_property) + HEC_hits_merger_input_property, + region) tile_hits_bare_collection_name = "TileHitVec" tile_hits_merger_input_property = "TileHits" tile_hits_collection_name = generate_mergeable_collection_name( tile_hits_bare_collection_name, mergeable_collection_suffix, - tile_hits_merger_input_property) + tile_hits_merger_input_property, + region) kwargs.setdefault('embHitContainername', EMB_hits_collection_name) kwargs.setdefault('emecHitContainername', EMEC_hits_collection_name) diff --git a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py index a7b7b92c50daa7b38c6713c3e83536925d575f4d..f4ae1166ab9bc980e076dddd7ca66daa5875874c 100644 --- a/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py +++ b/Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimServices/python/ISF_FastCaloSimServicesConfigNew.py @@ -111,6 +111,7 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): acc = ComponentAccumulator() mergeable_collection_suffix = "_FastCaloSim" + region = "CALO" EMB_hits_bare_collection_name = "LArHitEMB" EMB_hits_merger_input_property = "LArEMBHits" @@ -118,7 +119,8 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): flags, EMB_hits_bare_collection_name, mergeable_collection_suffix, - EMB_hits_merger_input_property) + EMB_hits_merger_input_property, + region) acc.merge(acc1) EMEC_hits_bare_collection_name = "LArHitEMEC" @@ -127,7 +129,8 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): flags, EMEC_hits_bare_collection_name, mergeable_collection_suffix, - EMEC_hits_merger_input_property) + EMEC_hits_merger_input_property, + region) acc.merge(acc2) FCAL_hits_bare_collection_name = "LArHitFCAL" @@ -136,7 +139,8 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): flags, FCAL_hits_bare_collection_name, mergeable_collection_suffix, - FCAL_hits_merger_input_property) + FCAL_hits_merger_input_property, + region) acc.merge(acc3) HEC_hits_bare_collection_name = "LArHitHEC" @@ -145,7 +149,8 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): flags, HEC_hits_bare_collection_name, mergeable_collection_suffix, - HEC_hits_merger_input_property) + HEC_hits_merger_input_property, + region) acc.merge(acc4) tile_hits_bare_collection_name = "TileHitVec" @@ -154,7 +159,8 @@ def FastHitConvertToolCfg(flags, name="ISF_FastHitConvertTool", **kwargs): flags, tile_hits_bare_collection_name, mergeable_collection_suffix, - tile_hits_merger_input_property) + tile_hits_merger_input_property, + region) acc.merge(acc5) kwargs.setdefault("embHitContainername", EMB_hits_collection_name) diff --git a/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasServicesConfig.py b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasServicesConfig.py index 88d3c195bc7c78979b699a1ec3cfadd93947bc40..e705869167ef6917e505012318933df652a12edb 100644 --- a/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasServicesConfig.py +++ b/Simulation/ISF/ISF_Fatras/ISF_FatrasServices/python/ISF_FatrasServicesConfig.py @@ -530,9 +530,11 @@ def getFatrasHitCreatorPixel(name="ISF_FatrasHitCreatorPixel", **kwargs): bare_collection_name = "PixelHits" mergeable_collection_suffix = "_Fatras" merger_input_property = "PixelHits" + region = 'ID' hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) from G4AtlasApps.SimFlags import simFlags kwargs.setdefault("RandomNumberService" , simFlags.RandomSvc() ) @@ -549,9 +551,11 @@ def getFatrasHitCreatorSCT(name="ISF_FatrasHitCreatorSCT", **kwargs): bare_collection_name = "SCT_Hits" mergeable_collection_suffix = "_Fatras" merger_input_property = "SCTHits" + region = 'ID' hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) from G4AtlasApps.SimFlags import simFlags kwargs.setdefault("RandomNumberService" , simFlags.RandomSvc() ) kwargs.setdefault("RandomStreamName" , ISF_FatrasFlags.RandomStreamName()) @@ -566,9 +570,11 @@ def getFatrasHitCreatorTRT(name="ISF_FatrasHitCreatorTRT", **kwargs): bare_collection_name = "TRTUncompressedHits" mergeable_collection_suffix = "_Fatras" merger_input_property = "TRTUncompressedHits" + region = 'ID' hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) from G4AtlasApps.SimFlags import simFlags kwargs.setdefault("RandomNumberService" , simFlags.RandomSvc() ) kwargs.setdefault("RandomStreamName" , ISF_FatrasFlags.RandomStreamName()) @@ -609,27 +615,32 @@ def getFatrasPileupSimHitCreatorID(name="ISF_FatrasPileupSimHitCreatorID", **kwa def getFatrasSimHitCreatorMS(name="ISF_FatrasSimHitCreatorMS", **kwargs): mergeable_collection_suffix = "_Fatras" + region = 'MUON' mdt_bare_collection_name = "MDT_Hits" mdt_merger_input_property = "MDTHits" mdt_hits_collection_name = generate_mergeable_collection_name(mdt_bare_collection_name, mergeable_collection_suffix, - mdt_merger_input_property) + mdt_merger_input_property, + region) rpc_bare_collection_name = "RPC_Hits" rpc_merger_input_property = "RPCHits" rpc_hits_collection_name = generate_mergeable_collection_name(rpc_bare_collection_name, mergeable_collection_suffix, - rpc_merger_input_property) + rpc_merger_input_property, + region) tgc_bare_collection_name = "TGC_Hits" tgc_merger_input_property = "TGCHits" tgc_hits_collection_name = generate_mergeable_collection_name(tgc_bare_collection_name, mergeable_collection_suffix, - tgc_merger_input_property) + tgc_merger_input_property, + region) csc_bare_collection_name = "CSC_Hits" csc_merger_input_property = "CSCHits" csc_hits_collection_name = generate_mergeable_collection_name(csc_bare_collection_name, mergeable_collection_suffix, - csc_merger_input_property) + csc_merger_input_property, + region) from G4AtlasApps.SimFlags import simFlags kwargs.setdefault("RandomNumberService" , simFlags.RandomSvc() ) diff --git a/Simulation/Overlay/OverlayByteStreamUtils/CMakeLists.txt b/Simulation/Overlay/OverlayByteStreamUtils/CMakeLists.txt index 87f203488952884b690643986e501b54cbbd52ca..9ddead6f5fdfa888855d06e66ea15280ca8a0ecc 100644 --- a/Simulation/Overlay/OverlayByteStreamUtils/CMakeLists.txt +++ b/Simulation/Overlay/OverlayByteStreamUtils/CMakeLists.txt @@ -11,4 +11,12 @@ atlas_add_component( OverlayByteStreamUtils src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel ByteStreamCnvSvcLib GaudiKernel StoreGateLib TrigConfHLTData TrigConfInterfaces TrigSteeringEvent TrigT1Result ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaKernel ByteStreamCnvSvcLib GaudiKernel StoreGateLib TrigConfHLTData TrigConfInterfaces TrigSteeringEvent TrigT1Result ) + +# Utility scripts +atlas_install_runtime( scripts/*.py ) +atlas_install_runtime( scripts/*.sh ) + +atlas_add_executable (LB_analyze util/LB_analyze.cxx + INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} ) diff --git a/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_AnalMapSplitter.py b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_AnalMapSplitter.py new file mode 100755 index 0000000000000000000000000000000000000000..6c451453b651ddf57b485e916a9705e0605ec719 --- /dev/null +++ b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_AnalMapSplitter.py @@ -0,0 +1,120 @@ +#!/bin/env python +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function + +import sys + +# get the list of special run,lbn with more than 1 file +special_run_lbn = {} +with open("runs_lbn_files.txt") as f: + for line in f: + # print line + if not line.startswith("root"): + print("WARNING: line doesn't start with 'root'") + print(line) + continue + fileName = line.rstrip() + print(fileName) + finfo = fileName.split(".") + run = finfo[3] + lbi = 4 # index of the lbn info + while "_lb" not in finfo[lbi] and lbi < 20: + lbi += 1 + if lbi >= 20: + print(finfo[lbi] + " doesnt contain _lb") + exit(1) + lbn = finfo[lbi].replace("_lb", "") + print(run+"_"+lbn) + if run+"_"+lbn in special_run_lbn: + if fileName in special_run_lbn[run+"_"+lbn]: + print("%s already in map for %s %s" % (fileName, run, lbn)) + else: + special_run_lbn[run+"_"+lbn].append(fileName) + else: + special_run_lbn[run+"_"+lbn] = [fileName] + for key in special_run_lbn.keys(): + pass + print("done with special_run_lbn") + +# do the work +maxstream = int(sys.argv[1]) +print("maxstream=%d" % maxstream) +for s in range(0, maxstream+1): # 50 + with open("lbn_anal_map_stream"+str(s)+".txt") as f: + tot = 0 + nfile = 1 + of = open("output_stream"+str(s) + + "/lbn_anal_map_"+str(nfile)+".txt", "w") + of2 = open("output_stream"+str(s)+"/filelist_"+str(nfile)+".txt", "w") + for line in f: + linfo = line.split(" ") + tot += int(linfo[16]) + run = linfo[3].replace(",", "").zfill(8) + lbn = linfo[5].replace(",", "").zfill(4) + if tot > 100: + # replace last bit of line and also write it to the new file + extra = tot-100 + forthisone = int(linfo[16])-extra + rline = line.replace( + linfo[16]+" wanted", str(forthisone)+" wanted") + of.write(rline) + if run+"_"+lbn in special_run_lbn: + for f in special_run_lbn[run+"_"+lbn]: + if of2.tell() > 0: + of2.write(",") + of2.write(f) + else: + print("%s %s not in files map!" % (run, lbn)) + + of.close() + of2.close() + nfile += 1 + of = open("output_stream"+str(s) + + "/lbn_anal_map_"+str(nfile)+".txt", "w") + of2 = open("output_stream"+str(s) + + "/filelist_"+str(nfile)+".txt", "w") + tot = extra # the number left over from the last set + + rline = line.replace(linfo[16]+" wanted", str(extra)+" wanted") + of.write(rline) + if run+"_"+lbn in special_run_lbn: + for f in special_run_lbn[run+"_"+lbn]: + if of2.tell() > 0: + of2.write(",") + of2.write(f) + else: + print("%s %s not in files map!" % (run, lbn)) + + elif tot == 100: + of.write(line) + if run+"_"+lbn in special_run_lbn: + for f in special_run_lbn[run+"_"+lbn]: + if of2.tell() > 0: + of2.write(",") + of2.write(f) + else: + print("%s %s not in files map!" % (run, lbn)) + + of.close() + of2.close() + nfile += 1 + of = open("output_stream"+str(s) + + "/lbn_anal_map_"+str(nfile)+".txt", "w") + of2 = open("output_stream"+str(s) + + "/filelist_"+str(nfile)+".txt", "w") + tot = 0 + else: + of.write(line) + if run+"_"+lbn in special_run_lbn: + for f in special_run_lbn[run+"_"+lbn]: + if of2.tell() > 0: + of2.write(",") + of2.write(f) + else: + print("%s %s not in files map!" % (run, lbn)) + + print("done %d" % s) + of.close() + of2.close() diff --git a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/GetNEventsLB.py b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_GetNEvents.py old mode 100644 new mode 100755 similarity index 71% rename from Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/GetNEventsLB.py rename to Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_GetNEvents.py index 7a6c072b853efa900bbe6d695fc10c112b1851f6..cf47e1421f29902b7694a4dff932abb57ab80b00 --- a/Event/EventOverlay/EventOverlayJobTransforms/scripts/0biasselection/GetNEventsLB.py +++ b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_GetNEvents.py @@ -1,6 +1,6 @@ #!/bin/env python # -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # ---------------------------------------------------------------- # Script : GetNEventsLB.py # Purpose: Utility to retrieve number of events per LB from SFO DB @@ -8,6 +8,8 @@ # Created: Aug 17, 2011 # ---------------------------------------------------------------- +from __future__ import print_function + import sys, getopt def GetSFO_LBNEvents( cursor, runno, streamname ): @@ -26,12 +28,12 @@ def OpenSFOConnection(): return cx_Oracle.connect("ATLAS_SFO_T0_R/readmesfotz2008@atlr") def usage(): - print ' ' - print 'Usage: python %s [options]' % sys.argv[0] - print ' -r | --run : run number (REQUIRED)' - print ' -s | --stream : full stream name (REQUIRED)' - print ' -h | --help : print this usage message' - print ' ' + print(' ') + print('Usage: %s [options]' % sys.argv[0]) + print(' -r | --run : run number (REQUIRED)') + print(' -s | --stream : full stream name (REQUIRED)') + print(' -h | --help : print this usage message') + print(' ') exit(1) def main(): @@ -43,7 +45,7 @@ def main(): except getopt.GetoptError: # print help information and exit: - print >> sys.stderr, 'ERROR: unknown options in argument %s' % sys.argv[1:] + print('ERROR: unknown options in argument %s' % sys.argv[1:], file=sys.stderr) usage() runno = None @@ -62,17 +64,17 @@ def main(): connection = OpenSFOConnection() cursor = connection.cursor() - print 'Results for run: %i, stream: "%s"' % (runno, stream) + print('Results for run: %i, stream: "%s"' % (runno, stream)) # min/max LB number for given run/stream # --> this command is slow... don't know why # minLB, maxLB = GetSFO_LBs( cursor, runno ) # print 'LB range: %i -- %i' % (minLB, maxLB) - # list with + # list with lblist = GetSFO_LBNEvents( cursor, runno, stream ) - print 'First non-zero LB: ',lblist[0][1] - print 'Last non-zero LB: ',lblist[-1][1] + print('First non-zero LB: ' + str(lblist[0][1])) + print('Last non-zero LB: ' + str(lblist[-1][1])) # access to all LBs sumnev = 0 @@ -80,18 +82,17 @@ def main(): sumfsize = 0 for (nev,lb,nfiles,fsize) in lblist: fsize /= 1.e6 - print ' ... Run %i, LB %i has %i events, %i RAW files and %f MB' % (runno,lb,nev,nfiles,fsize) + print(' ... Run %i, LB %i has %i events, %i RAW files and %f MB' % (runno,lb,nev,nfiles,fsize)) sumnev += nev sumnfiles += nfiles sumfsize += fsize - print '--------------------------------------------------' - print 'Total #events : ', sumnev - print 'Total #files : ', sumnfiles - print 'Total RAW size: ', sumfsize/1000.0, ' GB' - + print('--------------------------------------------------') + print('Total #events : ', sumnev) + print('Total #files : ', sumnfiles) + print('Total RAW size: ', sumfsize/1000.0, ' GB') + cursor.close() connection.close() if __name__ == '__main__': main() - diff --git a/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query.sh b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query.sh new file mode 100755 index 0000000000000000000000000000000000000000..fea8dac1e906ab02b3b996adbfaf9cd9cbadeca6 --- /dev/null +++ b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query.sh @@ -0,0 +1,152 @@ +#!/bin/bash +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# NOTE: Rucio setup is required + +set -e + +# use GRL, from: http://atlasdqm.web.cern.ch/atlasdqm/grlgen/All_Good/?C=M;O=D +# consult: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/GoodRunListsForAnalysisRun2 +# and: https://twiki.cern.ch/twiki/bin/view/AtlasProtected/DataMCForAnalysis + +# TODO: read from args +#sstream="physics_ZeroBias" #pp or UPC +sstream="physics_MinBiasOverlay" #HI +pref="data18_hi" +#suf="merge" +suf="daq" +# just a name to tag this set of files +out_name=data18_hi_1 + +# TODO: read from args +dq="http://atlasdqm.web.cern.ch/atlasdqm/grlgen/HeavyIons/All_Good/data18_hi.periodS_DetStatus-v104-pro22-08_Unknown_PHYS_HeavyIonP_All_Good.xml" +wget -nc "$dq" + +# Can just go here: https://atlas-lumicalc.cern.ch/ ... note use --online lumi tag for HI, unless a better one is available +# and request --verbose output and use physics trigger HLT_noalg_zb_L1ZB, +# then wget "Raw iLimuiCalc output", and "mv output.txt lbn_2015; ln -s lbn_2015 lbn" + +# if you want to redo this: +# rm -f lbn +if [ ! -f "lbn" ]; then + # iLumiCalc -t L1_ZB -V -x "$dq" --livetrigger=L1_EM12 > lbn + iLumiCalc -t L1_ZB --lumitag OflLumi-HI-009 -V -x "$dq" --livetrigger=L1_EM12 | tee lbn +fi +grep ": Total" lbn ; echo + +# get info on number of events and files per lumi block in each run +# if you want to redo this: +# rm -f lbnevents* +# rm -f runs_lbn_files.txt + +rm -f runs_temp.txt +runs=$(grep "subchild node value" lbn|cut -f 3 -d : |sed 's/[\x01-\x1F\x7F]//g'|sed 's%\[0m%%g'|sed 's%\[34m%%g'|sed ':a;N;$!ba;s/\n/ /g') +# loop over all runs +for runn in $runs; do + # Only works on lxplus now! + # if [[ ! -f "lbnevents_${runn}.txt" ]]; then + # echo "Getting Nevent info for run $runn " + # LB_GetNEvents.py -r "$runn" -s "$sstream" | grep "... Run" | tee "lbnevents_${runn}.txt" + # fi + rm -f runs_temp_temp.txt + touch runs_temp_temp.txt + if [[ ! -f "runs_lbn_files.txt" ]]; then + echo "Getting file info for run $runn " + file=$(rucio list-file-replicas "${pref}.00${runn}.${sstream}.${suf}.RAW" || true) + # dataset=$(rucio list-dataset-replicas "${pref}.00${runn}.${sstream}.${suf}.RAW") + set +e + rsefound=$(echo "$file" | grep -c "CERN-PROD_TZDISK") + if [[ ! $rsefound -eq 0 ]]; then + echo "$file" | (grep "CERN-PROD_TZDISK" || true) | cut -d '|' -f 6 | sed "s% CERN-PROD_TZDISK: gsiftp://eosatlassftp.cern.ch:2811/%root://eosatlas.cern.ch//%" | sed -r 's/\s+//g' | grep "_lb" > runs_temp_temp.txt + cat runs_temp_temp.txt >> runs_temp.txt + # echo -n "Replicated? : "; (echo "$dataset" | grep CERN-PROD_TZDISK) || echo "false" + fi + nfound=$(grep -c data runs_temp_temp.txt) + echo "Found $nfound files on TZDISK" + set -e + if [ "$nfound" -eq 0 ]; then + # look also on DATADISK if not found on TZDISK + set +e + rsefound=$(echo "$file" | grep -c "CERN-PROD_DATADISK") + if [[ ! $rsefound -eq 0 ]]; then + echo "$file" | grep "CERN-PROD_DATADISK" | cut -d '|' -f 6 | sed "s% CERN-PROD_DATADISK: gsiftp://eosatlassftp.cern.ch:2811/%root://eosatlas.cern.ch//%" | sed -r 's/\s+//g' | grep "_lb" > runs_temp_temp.txt + cat runs_temp_temp.txt >> runs_temp.txt + # echo -n "Replicated? : "; (echo "$dataset" | grep CERN-PROD_DATADISK) || echo "false" + fi + nfound=$(grep -c data runs_temp_temp.txt) + echo "Found $nfound files on DATADISK" + set -e + fi + if [ "$nfound" -eq 0 ]; then + # look also on RAW if not found on DATADISK + set +e + rsefound=$(echo "$file" | grep -c "CERN-PROD_RAW") + if [[ ! $rsefound -eq 0 ]]; then + echo "$file" | grep "CERN-PROD_RAW" | cut -d '|' -f 6 | sed "s% CERN-PROD_RAW: %%" | sed -r 's/\s+//g' | grep "_lb" > runs_temp_temp.txt + cat runs_temp_temp.txt >> runs_temp.txt + # echo -n "Replicated? : "; (echo "$dataset" | grep CERN-PROD_RAW) || echo "false" + fi + nfound=$(grep -c data runs_temp_temp.txt) + echo "Found $nfound files on RAW" + set -e + fi + if [ "$nfound" -eq 0 ]; then + echo "No files found!" + fi + fi +done +rm runs_temp_temp.txt + +if [[ ! -f runs_lbn_files.txt ]]; then mv runs_temp.txt runs_lbn_files.txt ; fi + +# if you want to redo this: +# rm -f lbn_anal_map.txt +if [[ ! -f lbn_anal_map.txt ]]; then LB_analyze | tee log_lbn_analyze.txt ; fi + +# Only works on lxplus now! +# echo -n "Total events in dataset before GRL: " +# cat lbnevents_*.txt | tr -s ' ' | cut -d ' ' -f 8 | awk '{total = total + $1}END{print total}' +echo -n "Total events in dataset from log_lbn_analyze.txt: " +grep "stream 0" log_lbn_analyze.txt | cut -d ' ' -f 6 | awk '{total = total + $1}END{print total}' +echo -n "Total events in dataset from lbn_anal_map: " +grep "stream 1," lbn_anal_map.txt | cut -d ' ' -f 8 | awk '{total = total + $1}END{print total}' +echo -n "Selected events per stream: " +grep "stream 8," lbn_anal_map.txt | cut -d ' ' -f 17 | awk '{total = total + $1}END{print total}' + +maxstream=19 #0 up to 49 - 19 does 1M events +#split into all the desired streams +for s in $(seq 0 $maxstream); do + grep "stream ${s}," lbn_anal_map.txt | grep -v "and 0 wanted" > "lbn_anal_map_stream${s}.txt" + mkdir -p "output_stream${s}" +done + +# split into jobs for each stream and make filelist and lbn_anal_map files +rm -f output_stream*/filelist_*.txt output_stream*/lbn_anal_map_*.txt +LB_AnalMapSplitter.py $maxstream | tee log_lbn_anal_map_splitter.txt +rm output_stream*/*501.txt +if grep "doesnt contain" log_lbn_anal_map_splitter.txt; then exit; fi +set +e +count=$(grep -c "not in files map" log_lbn_anal_map_splitter.txt) +set -e +echo "$count files not found in map..." + +for s in $(seq 1 $maxstream); do + echo "renaming stream $s to 0" + for f in {1..500}; do sed -i -e "s%stream $s,%stream 0,%g" "output_stream${s}/lbn_anal_map_${f}.txt"; done +done + +for s in $(seq 0 $maxstream); do cd "output_stream${s}"; tar cfz "stream${s}_${out_name}.tar.gz" *.txt; cd ..; done +mkdir -p lists +mv -v output_stream*/stream*_${out_name}.tar.gz lists/ + +#to check the events in each map: +for s in $(seq 0 $maxstream); do + echo -n "files with 100 events in stream $s :" + for f in {1..500}; do cat "output_stream${s}/lbn_anal_map_$f.txt" | cut -d ' ' -f 17 | awk '{total = total + $1}END{print total}'; done | grep -c 100 +done + +#to show number of files in each filelist: +echo ; echo "files in each filelist (in stream 0)..." ; for f in output_stream0/filelist_*.txt; do echo -n $(grep -o "$sstream" "$f" | wc -l); echo " : $f"; done | sort -n + +echo "DONE" diff --git a/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query_DBonly.sh b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query_DBonly.sh new file mode 100755 index 0000000000000000000000000000000000000000..435a1c453b1ee29fb02b496717ce8bcf89648f08 --- /dev/null +++ b/Simulation/Overlay/OverlayByteStreamUtils/scripts/LB_query_DBonly.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# Only works on lxplus now! + +set -e + +# TODO: read from args +#sstream="physics_ZeroBias" #pp or UPC +sstream="physics_MinBiasOverlay" #HI + +runs=$(grep "subchild node value" lbn | cut -f 3 -d : | sed 's/[\x01-\x1F\x7F]//g' | sed 's%\[0m%%g' | sed 's%\[34m%%g' | sed ':a;N;$!ba;s/\n/ /g') +# loop over all runs +for runn in $runs; do + if [[ ! -f "lbnevents_${runn}.txt" ]]; then + echo "Getting Nevent info for run $runn " + LB_GetNEvents.py -r "$runn" -s "$sstream" | grep "... Run" | tee "lbnevents_${runn}.txt" + fi +done diff --git a/Simulation/Overlay/OverlayByteStreamUtils/util/LB_analyze.cxx b/Simulation/Overlay/OverlayByteStreamUtils/util/LB_analyze.cxx new file mode 100644 index 0000000000000000000000000000000000000000..c0ef551c92dbc20679d12ca1ad548749666085fe --- /dev/null +++ b/Simulation/Overlay/OverlayByteStreamUtils/util/LB_analyze.cxx @@ -0,0 +1,271 @@ +/* + Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +*/ + +#include <map> +#include <TRandom3.h> + + +struct lbn_info +{ + int nevt{}; + float intlumi{}; + int nevtwanted{}; +}; + +struct run_info +{ + int nevt{}; + float intlumi{}; + std::map<int, lbn_info> lbnmap; + int nevtwanted{}; +}; + + +int readeventcounts(int run, + std::map<int, int> &eventcounts) +{ + eventcounts.clear(); + char buf[50]; + sprintf(buf, "lbnevents_%d.txt", run); + printf("Opening %s, eventcounts size is %lu\n", buf, eventcounts.size()); + FILE *fp = fopen(buf, "r"); + if (!fp) { + fprintf(stderr, "Failed to open %s!!!\n", buf); + return 1; + } + + char *line = new char[500]; + while (fgets(line, 480, fp)) { + int lbn, ne, nf, runn; + float mb; + int s = sscanf(&line[0], " ... Run %d, LB %d has %d events, %d RAW files and %f MB", &runn, &lbn, &ne, &nf, &mb); + if (s > 4) { + if (run != runn) { + return 20; + } + printf("run %d lbn %d has %d events\n", run, lbn, ne); + eventcounts[lbn] = ne; + } else { + fprintf(stderr, "s=%d, bad read?\n", s); + return 20; + } + } + delete[] line; + + printf("Closing %s, eventcounts size is %lu\n", buf, eventcounts.size()); + fclose(fp); + + return 0; +} + +int lbn_analyze(int stream, + int nwanted, + FILE *outfile) +{ + FILE *fp = fopen("lbn", "r"); + if (!fp) { + fprintf(stderr, "Failed to open lbn input file!!!\n"); + return 1; + } + + char *line = new char[500]; + int run, lbn, L1Acc, beforeps, afterps, valid; + int liveL1, livebp, liveap; + float instlumi, dt, avevtperbx, live, L1p, HLTp, LARp; + int grun{}; + float gtotaltotallumi{}, gtotaltotallumiprescaled{}; + float gtotallumi{}, gtotallumiprescaled{}; + + TRandom myrand; + myrand.SetSeed(0); + printf("- myrand seed is %u\n", myrand.GetSeed()); + myrand.SetSeed(myrand.Integer(10000000) + stream); + printf("- myrand seed is now %u\n", myrand.GetSeed()); + + std::map<int, run_info> runmap; + std::map<int, int> eventcounts; + while (fgets(line, 480, fp)) { + if (line[0] != '-') { + continue; + } + + int s = sscanf(&line[0], + "--- LumiCalculator : %d[%d]: L1Acc: %d, Livetime trigger L1Acc: %d, InstLumi: %f, deltaT: %f, AvEvtsPerBX: %f, BeforePrescale: %d, AfterPrescale: %d, Livetime trigger BeforePrescale: %d Livetime trigger AfterPrescale: %d, Livefrac: %f, L1Presc: %f, HLTPresc: %f, Valid: %d, LAr ready fraction: %f", + &run, &lbn, &L1Acc, &liveL1, &instlumi, &dt, &avevtperbx, &beforeps, &afterps, &livebp, &liveap, &live, &L1p, &HLTp, &valid, &LARp); + + if (s > 8) { + printf("Got %d values : run=%d, lbn=%d, L1Acc=%d, instlumi=%f, L1p=%f, dt=%f, live=%f, afterps=%d \n", s, run, lbn, L1Acc, instlumi, L1p, dt, live, afterps); + + if (run != grun) { + if (grun > 0) { //change of run + runmap[grun].intlumi = gtotallumi; + printf("Setting lumi for run %d to %f\n", grun, gtotallumi); + gtotaltotallumi += gtotallumi; + gtotaltotallumiprescaled += gtotallumiprescaled; + // reset the int lumi calculation for this run + gtotallumi = 0; + gtotallumiprescaled = 0; + } + + grun = run; //save the run number + printf("Setting grun to %d\n", run); + + // read in event counts from runquery file for run + int status = readeventcounts(run, eventcounts); + if (status != 0) { + return status; + } + } //new run + + if (L1p < 0) { + runmap[run].lbnmap[lbn].nevt = 0; + if (eventcounts[lbn] !=0 ) { + printf("For lbn %d, L1p<0 but eventcounts is %d\n",lbn,eventcounts[lbn]); + } + } else { + int ne = L1Acc;//afterps + if (ne != eventcounts[lbn]) { + if (stream == 0) { + printf("For lbn %d, ne from lumicalc is %d but we will trust runquery value of %d\n", lbn, ne, eventcounts[lbn]); + } + ne = eventcounts[lbn]; + } + if (ne == 0) { + dt = 0; + printf("For lbn %d, setting lumi to 0 since 0 events were recorded\n", lbn); + } + runmap[run].lbnmap[lbn].nevt = ne; + runmap[run].lbnmap[lbn].intlumi = instlumi * dt * live; + runmap[run].nevt += ne; + gtotallumiprescaled += instlumi * dt * live / L1p; + gtotallumi += instlumi * dt * live; + } + printf("grun=%d, gtotallumi=%f, gtotallumiprescaled=%f\n", grun, gtotallumi, gtotallumiprescaled); + } //good line + } //loop over lines in file + delete[] line; + + // after last run + runmap[grun].intlumi = gtotallumi; + printf("Setting lumi for run %d to %f\n", grun, gtotallumi); + gtotaltotallumi += gtotallumi; + gtotaltotallumiprescaled += gtotallumiprescaled; + + fclose(fp); + + printf("- %lu runs, gtotaltotallumi=%f, gtotaltotallumiprescaled=%f\n", runmap.size(), gtotaltotallumi, gtotaltotallumiprescaled); + + if (runmap.size() < 1) { + printf("- runmap size is %lu, quitting!\n", runmap.size()); + return 0; + } + + //check the total lumi... + double tempr{}; + for (const auto &[r, info] : runmap) { + tempr += info.intlumi; + } + if (fabs(tempr - gtotaltotallumi) / tempr > 0.001) { + fprintf(stderr, "tempr=%f and gtotaltotallumi=%f\n", tempr, gtotaltotallumi); + return 3; + } + + for (int e = 0; e < nwanted; ++e) { + // pick a random run, proportional to intlumi + double rnd = myrand.Uniform(tempr); + run = -1; + for (const auto &[r, info] : runmap) { + if (rnd < info.intlumi) { + run = r; + break; + } + rnd -= info.intlumi; + } + if (run < 0) { // error + return 4; + } + + // check the total run lumi... + double tempt{}; + for (const auto &[l, info] : runmap[run].lbnmap) { + tempt += info.intlumi; + } + if (fabs(tempt - runmap[run].intlumi) / tempt > 0.001) { + fprintf(stderr, "tempt=%f and runmap[%d].intlumi=%f\n", tempt, run, runmap[run].intlumi); + return 5; + } + + //p ick a random lbn, proportional to intlumi + rnd = myrand.Uniform(tempt); + lbn = -1; + for (const auto &[l, info] : runmap[run].lbnmap) { + if (rnd < info.intlumi) { + lbn = l; + break; + } + rnd -= info.intlumi; + } + if (lbn < 0) { // error + return 6; + } + + runmap[run].nevtwanted++; + runmap[run].lbnmap[lbn].nevtwanted++; + printf("- stream %d, run %d, lbn %d, choose %d of out %d\n", stream, run, lbn, runmap[run].lbnmap[lbn].nevtwanted, runmap[run].lbnmap[lbn].nevt); + } //loop over nwanted + + for (const auto &[r, rinfo] : runmap) { + int totnevt{}; + float totintlumi{}; + printf("stream %d, run %d, has %d events and %f/ub, %f intlumi of total, and %d wanted\n", stream, + r, rinfo.nevt, rinfo.intlumi, rinfo.intlumi / gtotaltotallumi, rinfo.nevtwanted); + for (const auto &[l, linfo] : rinfo.lbnmap) { + fprintf(outfile, "stream %d, run %d, lbn %d, has %d events and %f/ub, %f intlumi of run, and %d wanted", stream, r, + l, linfo.nevt, linfo.intlumi, linfo.intlumi / rinfo.intlumi, linfo.nevtwanted); + if (linfo.nevtwanted > linfo.nevt) { + fprintf(outfile, " : WARNING, more than available, will be duplicates!\n"); + } else { + fprintf(outfile,"\n"); + } + totnevt += linfo.nevt; + totintlumi += linfo.intlumi; + } + if (totnevt != rinfo.nevt) { + fprintf(stderr, " XXX events do not agree !!! \n"); + } + if (totintlumi > 0.0 && fabs(totintlumi - rinfo.intlumi) / totintlumi > .001) { + fprintf(stderr, " XXX intlumi does not agree !!! %f %f \n", totintlumi, rinfo.intlumi); + } + } + + printf("--\n\n"); + + return 0; +} + +int main(int argc, const char* argv[]) +{ + int Nstreams{50}; // number of zerobias streams to make + int Nwanted{50000}; // number of events per zerobias stream + + if (argc == 3) { + Nstreams = std::atoi(argv[1]); + Nwanted = std::atoi(argv[2]); + } + + printf("Nstreams=%d, Nwanted=%d\n\n", Nstreams, Nwanted); + + FILE *outfile = fopen("lbn_anal_map.txt", "w"); + + for (int i = 0; i < Nstreams; ++i) { + int status = lbn_analyze(i, Nwanted, outfile); + if (status != 0) { + return status; + } + } + + fclose(outfile); + + return 0; +} diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpers.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpers.py new file mode 100644 index 0000000000000000000000000000000000000000..4abd2753b694bc80cf2a4f3abf0f69e1c10a1979 --- /dev/null +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpers.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +"""Overlay configuration helpers + +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +""" + +from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator +from AthenaConfiguration.ComponentFactory import CompFactory + + +def OverlayMessageSvcCfg(flags): + """MessageSvc for overlay""" + MessageSvc = CompFactory.MessageSvc + acc = ComponentAccumulator() + acc.addService(MessageSvc(setError=["HepMcParticleLink"])) + return acc + + +def setupOverlayDetectorFlags(configFlags, detectors): + """Setup Overlay detector flags""" + if not detectors or 'BCM' in detectors or 'ID' in detectors: + configFlags.Detector.OverlayBCM = True + if not detectors or 'DBM' in detectors or 'ID' in detectors: + configFlags.Detector.OverlayDBM = True + if not detectors or 'Pixel' in detectors or 'ID' in detectors: + configFlags.Detector.OverlayPixel = True + if not detectors or 'SCT' in detectors or 'ID' in detectors: + configFlags.Detector.OverlaySCT = True + if not detectors or 'TRT' in detectors or 'ID' in detectors: + configFlags.Detector.OverlayTRT = True + if not detectors or 'LAr' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: + configFlags.Detector.OverlayLAr = True + if not detectors or 'Tile' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: + configFlags.Detector.OverlayTile = True + if not detectors or 'L1Calo' in detectors: + configFlags.Detector.OverlayL1Calo = not configFlags.Overlay.DataOverlay + if not detectors or 'CSC' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlayCSC = True + if not detectors or 'MDT' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlayMDT = True + if not detectors or 'RPC' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlayRPC = True + if not detectors or 'TGC' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlayTGC = True + if not detectors or 'sTGC' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlaysTGC = True + if not detectors or 'MM' in detectors or 'Muon' in detectors: + configFlags.Detector.OverlayMM = True + + +def accFromFragment(acc_string, flags): + """Return initialized accumulator from post include fragment.""" + parts = acc_string.split('.') + if len(parts) < 3: + raise ValueError('Post include should be of the form Package.Module.Function') + + function = parts[-1] + module = '.'.join(parts[:-1]) + + from importlib import import_module + loaded_module = import_module(module) + function_def = getattr(loaded_module, function) + + return function_def(flags) diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpersLegacy.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpersLegacy.py new file mode 100644 index 0000000000000000000000000000000000000000..d49cbdf69cf8160819f4dae74bd8bb67eda82453 --- /dev/null +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayHelpersLegacy.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +"""Overlay legacy configuration helpers + +Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +""" + + +def setupOverlayLegacyDetectorFlags(detectors): + """Setup Overlay legacy detector flags""" + from AthenaCommon.DetFlags import DetFlags + if not detectors: + DetFlags.all_setOn() + DetFlags.bpipe_setOff() + DetFlags.FTK_setOff() + return DetFlags + + # Truth is always on + DetFlags.Truth_setOn() + + # Other subdetectors + if not detectors or 'BCM' in detectors or 'ID' in detectors: + DetFlags.BCM_setOn() + if not detectors or 'DBM' in detectors or 'ID' in detectors: + DetFlags.DBM_setOn() + if not detectors or 'Pixel' in detectors or 'ID' in detectors: + DetFlags.pixel_setOn() + if not detectors or 'SCT' in detectors or 'ID' in detectors: + DetFlags.SCT_setOn() + if not detectors or 'TRT' in detectors or 'ID' in detectors: + DetFlags.TRT_setOn() + if not detectors or 'LAr' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: + DetFlags.LAr_setOn() + if not detectors or 'Tile' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: + DetFlags.Tile_setOn() + if not detectors or 'L1Calo' in detectors: + DetFlags.LVL1_setOn() + if not detectors or 'CSC' in detectors or 'Muon' in detectors: + DetFlags.CSC_setOn() + if not detectors or 'MDT' in detectors or 'Muon' in detectors: + DetFlags.MDT_setOn() + if not detectors or 'RPC' in detectors or 'Muon' in detectors: + DetFlags.RPC_setOn() + if not detectors or 'TGC' in detectors or 'Muon' in detectors: + DetFlags.TGC_setOn() + if not detectors or 'sTGC' in detectors or 'Muon' in detectors: + DetFlags.sTGC_setOn() + if not detectors or 'MM' in detectors or 'Muon' in detectors: + DetFlags.Micromegas_setOn() + + return DetFlags diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py b/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py new file mode 100644 index 0000000000000000000000000000000000000000..6f9ab978101427544a379c302555435ec9d27409 --- /dev/null +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlaySkeleton.py @@ -0,0 +1,125 @@ +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +import sys + +from PyJobTransforms.CommonRunArgsToFlags import commonRunArgsToFlags +from OverlayConfiguration.OverlayHelpers import setupOverlayDetectorFlags, OverlayMessageSvcCfg + + +def defaultOverlayFlags(configFlags, detectors): + """Fill default overlay flags""" + # TODO: how to autoconfigure those + configFlags.GeoModel.Align.Dynamic = False + configFlags.Digitization.DoCaloNoise = False + configFlags.Digitization.DoInnerDetectorNoise = False + configFlags.Digitization.DoDigiTruth = False + configFlags.LAr.OFCShapeFolder = "4samples1phase" + configFlags.LAr.ROD.DoOFCPileupOptimization = True + configFlags.LAr.ROD.nSamples = 4 + configFlags.LAr.ROD.NumberOfCollisions = 20 + configFlags.LAr.ROD.UseHighestGainAutoCorr = True + configFlags.Tile.BestPhaseFromCOOL = False + configFlags.Tile.correctTime = False + configFlags.Tile.zeroAmplitudeWithoutDigits = False + + setupOverlayDetectorFlags(configFlags, detectors) + + +def fromRunArgs(runArgs): + from AthenaCommon.Configurable import Configurable + Configurable.configurableRun3Behavior = True + + from AthenaCommon.Logging import logging + logOverlay = logging.getLogger('Overlay') + logOverlay.info('****************** STARTING OVERLAY *****************') + + logOverlay.info('**** Transformation run arguments') + logOverlay.info(str(runArgs)) + + logOverlay.info('**** Setting-up configuration flags') + from AthenaConfiguration.AllConfigFlags import ConfigFlags + commonRunArgsToFlags(runArgs, ConfigFlags) + + hasRDO_BKGInput = hasattr(runArgs, 'inputRDO_BKGFile') + hasBS_SKIMInput = hasattr(runArgs, 'inputBS_SKIMFile') + + if not hasattr(runArgs, 'inputHITSFile'): + raise RuntimeError('No input HITS file defined') + + if hasRDO_BKGInput and hasBS_SKIMInput: + raise RuntimeError('Both RDO_BKG and BS_SKIM are defined') + if not hasRDO_BKGInput and not hasBS_SKIMInput: + raise RuntimeError('Define one of RDO_BKG and BS_SKIM file types') + + if hasRDO_BKGInput: + logOverlay.info('Running MC+MC overlay') + ConfigFlags.Overlay.DataOverlay = False + ConfigFlags.Input.isMC = True + ConfigFlags.Input.Files = runArgs.inputRDO_BKGFile + ConfigFlags.Input.SecondaryFiles = runArgs.inputHITSFile + else: + logOverlay.info('Running MC+data overlay') + ConfigFlags.Overlay.DataOverlay = True + ConfigFlags.Input.isMC = False + ConfigFlags.Input.Files = runArgs.inputHITSFile + ConfigFlags.Input.SecondaryFiles = runArgs.inputBS_SKIMFile + + if hasattr(runArgs, 'outputRDOFile'): + if runArgs.outputRDOFile == 'None': + ConfigFlags.Output.RDOFileName = '' + else: + ConfigFlags.Output.RDOFileName = runArgs.outputRDOFile + else: + raise RuntimeError('No output RDO file defined') + + if hasattr(runArgs, 'outputRDO_SGNLFile'): + ConfigFlags.Output.RDO_SGNLFileName = runArgs.outputRDO_SGNLFile + + # Autoconfigure enabled subdetectors + if hasattr(runArgs, 'detectors'): + detectors = runArgs.detectors + else: + detectors = None + + # Setup digitization flags + from Digitization.DigitizationConfigFlags import digitizationRunArgsToFlags + digitizationRunArgsToFlags(runArgs, ConfigFlags) + + # Setup common overlay flags + defaultOverlayFlags(ConfigFlags, detectors) + + # Pre-exec + if hasattr(runArgs, 'preExec') and runArgs.preExec != 'NONE' and runArgs.preExec: + for cmd in runArgs.preExec: + exec(cmd) + + # Pre-include + if hasattr(runArgs, 'preInclude') and runArgs.preInclude: + raise ValueError('preInclude not supported') + + # TODO not parsed yet: + # '--fSampltag' + # '--triggerConfig' + + # Lock flags + ConfigFlags.lock() + + # Main overlay steering + from OverlayConfiguration.OverlaySteering import OverlayMainCfg + acc = OverlayMainCfg(ConfigFlags) + acc.merge(OverlayMessageSvcCfg(ConfigFlags)) + + # Post-include + if hasattr(runArgs, 'postInclude') and runArgs.postInclude: + from OverlayConfiguration.OverlayHelpers import accFromFragment + for fragment in runArgs.postInclude: + acc.merge(accFromFragment(fragment, ConfigFlags)) + + # Post-exec + if hasattr(runArgs, 'postExec') and runArgs.postExec != 'NONE' and runArgs.postExec: + for cmd in runArgs.postExec: + exec(cmd) + + # Run the final accumulator + sc = acc.run() + sys.exit(not sc.isSuccess()) diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py index 73bc0dff6b12920d0d472cc3197a9bdd8038b124..9c7db234860a37a1804c9a7fba374c21c3fdceae 100644 --- a/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayTestHelpers.py @@ -8,6 +8,7 @@ from argparse import ArgumentParser from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentFactory import CompFactory +from OverlayConfiguration.OverlayHelpers import setupOverlayDetectorFlags def JobOptsDumperCfg(flags): @@ -18,14 +19,6 @@ def JobOptsDumperCfg(flags): return acc -def TestMessageSvcCfg(flags): - """MessageSvc for overlay""" - MessageSvc = CompFactory.MessageSvc - acc = ComponentAccumulator() - acc.addService(MessageSvc(setError=["HepMcParticleLink"])) - return acc - - def CommonTestArgumentParser(prog): """Common overlay test argument parser""" parser = ArgumentParser(prog=prog) @@ -46,38 +39,6 @@ def CommonTestArgumentParser(prog): return parser -def setupOverlayTestDetectorFlags(configFlags, detectors): - """Setup Overlay detector flags""" - if not detectors or 'BCM' in detectors or 'ID' in detectors: - configFlags.Detector.OverlayBCM = True - if not detectors or 'DBM' in detectors or 'ID' in detectors: - configFlags.Detector.OverlayDBM = True - if not detectors or 'Pixel' in detectors or 'ID' in detectors: - configFlags.Detector.OverlayPixel = True - if not detectors or 'SCT' in detectors or 'ID' in detectors: - configFlags.Detector.OverlaySCT = True - if not detectors or 'TRT' in detectors or 'ID' in detectors: - configFlags.Detector.OverlayTRT = True - if not detectors or 'LAr' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: - configFlags.Detector.OverlayLAr = True - if not detectors or 'Tile' in detectors or 'Calo' in detectors or 'L1Calo' in detectors: - configFlags.Detector.OverlayTile = True - if not detectors or 'L1Calo' in detectors: - configFlags.Detector.OverlayL1Calo = not configFlags.Overlay.DataOverlay - if not detectors or 'CSC' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlayCSC = True - if not detectors or 'MDT' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlayMDT = True - if not detectors or 'RPC' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlayRPC = True - if not detectors or 'TGC' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlayTGC = True - if not detectors or 'sTGC' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlaysTGC = True - if not detectors or 'MM' in detectors or 'Muon' in detectors: - configFlags.Detector.OverlayMM = True - - def defaultTestFlags(configFlags, args): """Fill default overlay flags for testing""" configFlags.GeoModel.Align.Dynamic = False @@ -118,7 +79,7 @@ def defaultTestFlags(configFlags, args): if args.outputSig: configFlags.Output.RDO_SGNLFileName = args.outputSig - setupOverlayTestDetectorFlags(configFlags, args.detectors if 'detectors' in args else None) + setupOverlayDetectorFlags(configFlags, args.detectors if 'detectors' in args else None) def postprocessAndLockFlags(configFlags, args): diff --git a/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py b/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py index a0cbaa1dd8b956ac2641c07a5409d3106f326141..f2634eaeb230eba93270599cdbf8260e6431ab2b 100644 --- a/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py +++ b/Simulation/Overlay/OverlayConfiguration/python/OverlayTransformHelpers.py @@ -3,13 +3,17 @@ Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration """ -from PyJobTransforms.trfArgClasses import argBSFile, argFactory, argRDOFile, argSubstep +from PyJobTransforms.trfArgClasses import argBSFile, argFactory, argRDOFile, argString, argSubstep from PyJobTransforms.trfExe import athenaExecutor def addOverlayTrfArgs(parser): """Add common overlay command-line parser arguments.""" parser.defineArgGroup('Overlay', 'Common Overlay Options') + parser.add_argument('--detectors', + type=argFactory(argString), + help='Detectors autoconfiguration string', + group='Overlay') parser.add_argument('--outputRDO_SGNLFile', nargs='+', type=argFactory(argRDOFile, io='output'), help='The output RDO file of the MC signal alone', @@ -52,6 +56,7 @@ def addOverlayArguments(parser): def addOverlaySubstep(executor_set, in_reco_chain=False): executor = athenaExecutor(name='Overlay', skeletonFile='OverlayConfiguration/skeleton_LegacyOverlay.py', + skeletonCA='OverlayConfiguration.OverlaySkeleton', substep='overlay', tryDropAndReload=False, perfMonFile='ntuple.pmon.gz', diff --git a/Simulation/Overlay/OverlayConfiguration/scripts/Overlay_tf.py b/Simulation/Overlay/OverlayConfiguration/scripts/Overlay_tf.py index 6723fc838a045fdde52d251f15698767296ffb01..73db14e41a8541511e7ddd935866425f9fd17d98 100755 --- a/Simulation/Overlay/OverlayConfiguration/scripts/Overlay_tf.py +++ b/Simulation/Overlay/OverlayConfiguration/scripts/Overlay_tf.py @@ -19,7 +19,7 @@ msg.info('logging set in %s', sys.argv[0]) # Prodsys hack... -ListOfDefaultPositionalKeys = ['--AMIConfig', '--AMITag', '--AddCaloDigi', '--CA', '--DBRelease', '--PileUpPremixing', '--argJSON', '--asetup', '--athena', '--athenaMPEventsBeforeFork', '--athenaMPMergeTargetSize', '--athenaMPStrategy', '--athenaMPUseEventOrders', '--athenaopts', '--attempt', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--digiSteeringConf', '--doAllNoise', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--eventService', '--execOnly', '--fSampltag', '--fileValidation', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', +ListOfDefaultPositionalKeys = ['--AMIConfig', '--AMITag', '--AddCaloDigi', '--CA', '--DBRelease', '--PileUpPremixing', '--argJSON', '--asetup', '--athena', '--athenaMPEventsBeforeFork', '--athenaMPMergeTargetSize', '--athenaMPStrategy', '--athenaMPUseEventOrders', '--athenaopts', '--attempt', '--beamType', '--checkEventCount', '--command', '--conditionsTag', '--detectors', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--digiSteeringConf', '--doAllNoise', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--eventService', '--execOnly', '--fSampltag', '--fileValidation', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputBS_SKIMFile', '--inputFileValidation', '--inputHITSFile', '--inputRDO_BKGFile', '--jobid', '--maxEvents', '--multiprocess', '--multithreaded', '--outputFileValidation', '--outputRDOFile', '--outputRDO_FILTFile', '--outputRDO_SGNLFile', '--parallelFileValidation', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--sharedWriter', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--steering', '--taskid', '--tcmalloc', '--triggerConfig', '--valgrind', '--valgrindDefaultOpts', '--valgrindExtraOpts'] diff --git a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py index 39a6f8798a1053050875b7c53efd0f3c54a354d9..63e701386fde33fdd259143f59aef15558d26407 100644 --- a/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py +++ b/Simulation/Overlay/OverlayConfiguration/share/skeleton_LegacyOverlay.py @@ -46,8 +46,11 @@ if not hasRDO_BKGInput and not hasBS_SKIMInput: # Set overlay specifics globalflags.isOverlay.set_Value_and_Lock(True) +# Force MT mode +overlayFlags.isOverlayMT.set_Value_and_Lock(True) if hasRDO_BKGInput: logOverlay.info('Running MC+MC overlay') + overlayFlags.isDataOverlay.set_Value_and_Lock(False) globalflags.DataSource.set_Value_and_Lock('geant4') else: logOverlay.info('Running MC+data overlay') @@ -59,10 +62,6 @@ else: from AthenaCommon.BeamFlags import jobproperties jobproperties.Beam.beamType.set_Value_and_Lock('collisions') -overlayFlags.isDataOverlay.set_Value_and_Lock(False) -# TODO: temporarily force MT -overlayFlags.isOverlayMT.set_Value_and_Lock(True) - # Common athena flags if hasattr(overlayArgs, 'skipEvents'): athenaCommonFlags.SkipEvents.set_Value_and_Lock(overlayArgs.skipEvents) @@ -95,6 +94,10 @@ if hasattr(overlayArgs, 'geometryVersion'): globalflags.DetDescrVersion.set_Value_and_Lock(overlayArgs.geometryVersion) if hasattr(overlayArgs, 'conditionsTag'): globalflags.ConditionsTag.set_Value_and_Lock(overlayArgs.conditionsTag) +if hasattr(overlayArgs, 'detectors'): + overlayDetectors = overlayArgs.detectors +else: + overlayDetectors = None # Digitization flags if hasattr(overlayArgs, 'digiSeedOffset1'): @@ -132,17 +135,13 @@ if 'DetFlags' in dir(): logOverlay.warning( 'DetFlags already defined! This means DetFlags should have been fully configured already..') else: - from AthenaCommon.DetFlags import DetFlags - DetFlags.all_setOn() - DetFlags.bpipe_setOff() - DetFlags.FTK_setOff() + from OverlayConfiguration.OverlayHelpersLegacy import setupOverlayLegacyDetectorFlags + DetFlags = setupOverlayLegacyDetectorFlags(overlayDetectors) - if hasattr(overlayArgs, 'triggerConfig') and overlayArgs.triggerConfig == 'NONE': - DetFlags.LVL1_setOff() - else: - DetFlags.LVL1_setOn() +if hasattr(overlayArgs, 'triggerConfig') and overlayArgs.triggerConfig == 'NONE': + DetFlags.LVL1_setOff() - DetFlags.digitize.LVL1_setOff() +DetFlags.digitize.LVL1_setOff() from AtlasGeoModel.MuonGMJobProperties import MuonGeometryFlags if not MuonGeometryFlags.hasCSC(): diff --git a/Simulation/Overlay/OverlayConfiguration/test/OverlayTest.py b/Simulation/Overlay/OverlayConfiguration/test/OverlayTest.py index a238ed6196ae245853029745a33043f45a1329ac..e166ed0bed144ea0d06ab78fd9407b98fd3a42fc 100755 --- a/Simulation/Overlay/OverlayConfiguration/test/OverlayTest.py +++ b/Simulation/Overlay/OverlayConfiguration/test/OverlayTest.py @@ -10,9 +10,10 @@ import sys from AthenaCommon.Configurable import Configurable from AthenaConfiguration.AllConfigFlags import ConfigFlags +from OverlayConfiguration.OverlayHelpers import OverlayMessageSvcCfg from OverlayConfiguration.OverlaySteering import OverlayMainCfg from OverlayConfiguration.OverlayTestHelpers import \ - CommonTestArgumentParser, JobOptsDumperCfg, TestMessageSvcCfg, \ + CommonTestArgumentParser, JobOptsDumperCfg, \ defaultTestFlags, postprocessAndLockFlags, printAndRun # Set up logging and new style config @@ -49,7 +50,7 @@ if args.profile: from PerfMonVTune.PerfMonVTuneConfig import VTuneProfilerServiceCfg acc.merge(VTuneProfilerServiceCfg(ConfigFlags)) acc.merge(JobOptsDumperCfg(ConfigFlags)) -acc.merge(TestMessageSvcCfg(ConfigFlags)) +acc.merge(OverlayMessageSvcCfg(ConfigFlags)) # dump pickle with open("ConfigOverlay.pkl", "wb") as f: diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar.sh index c1d908125d5f34263a55f9b14360069f2ed7ee6c..b1480bdc49eb5da6da9eacc10dd5995992313b17 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -40,14 +40,26 @@ Overlay_tf.py \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_BCM.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_BCM.sh index 53e048a0258154c4ecd585e0366f51002232a570..8fa0c0abbb7086cfcd5405be1c5f0fcf5b91e27b 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_BCM.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_BCM.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors BCM \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.BCMOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors BCM \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.BCMOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py BCM -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors BCM \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_L1Calo.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_L1Calo.sh index 4523f071ca8b7c4a6a2779be7b4c8c226e63e139..6772d7efc6a58cce88bd6864003b981457ac7f5e 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_L1Calo.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_L1Calo.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors L1Calo \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:EventOverlayJobTransforms/preInclude.L1CaloOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors L1Calo \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:EventOverlayJobTransforms/preInclude.L1CaloOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py L1Calo -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors L1Calo \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_LAr.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_LAr.sh index 78047794dd903a1cee9ecaaefb17f6b35bff0950..b238fddc3d554ddb28de9abd8afbd99c6a49f497 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_LAr.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_LAr.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors LAr \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.LArOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors LAr \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.LArOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py LAr -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors LAr \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Muon.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Muon.sh index 7690e142d31afd85f9193f968cf91d82a2affa04..5f5ee538b521f78e7a64841e49940fd9e23b27bd 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Muon.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Muon.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors Muon \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.MuonOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors Muon \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.MuonOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py Muon -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors Muon \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Pixel.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Pixel.sh index 1a02f0bb8e5393c2e33a72c1ec406284d52f663d..50fa523c851510d1f14c6292b6f8815cbf367732 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Pixel.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Pixel.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors Pixel \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.PixelOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors Pixel \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.PixelOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py Pixel -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors Pixel \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_SCT.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_SCT.sh index 2bd7e73d2fee296bbde3677a6c1576538aef5f20..0f9faa41e4167e45e33ce96de171208b18dfe6b0 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_SCT.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_SCT.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors SCT \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.SCTOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors SCT \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.SCTOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py SCT -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors SCT \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_TRT.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_TRT.sh index 1d06f36adcde9a386e4f29477927628adb74a58c..22aeb9c17279d98dc3660ce36e9039bfd40db4a8 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_TRT.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_TRT.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors TRT \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TRTOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors TRT \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TRTOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py TRT -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors TRT \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh index e65aa301c9c236b63a6b7a4254442f13d93abeb9..67a83e5458d0decac72300207aee46f557291508 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Tile.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors Tile \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors Tile \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TileOnlyConfig.py,SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py Tile -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors Tile \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Truth.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Truth.sh index 220f7eccf2490a7bc539570a493daf7439ab32c0..ca0198b67ee7cd38959f6f46131f36b1f8dcf3ce 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Truth.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_Truth.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # art-description: MC+MC Overlay with MT support, config test # art-type: grid @@ -18,6 +18,7 @@ set -o pipefail events=2 Overlay_tf.py \ +--detectors Truth \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -25,11 +26,11 @@ Overlay_tf.py \ --conditionsTag OFLCOND-MC16-SDR-20 \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False \ --athenaopts '"--config-only=ConfigLegacy.pkl"' Overlay_tf.py \ +--detectors Truth \ --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/Tier0ChainTests/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ --outputRDOFile legacyMcOverlayRDO.pool.root \ @@ -38,18 +39,30 @@ Overlay_tf.py \ --geometryVersion ATLAS-R2-2016-01-00-01 \ --preExec 'from LArROD.LArRODFlags import larRODFlags;larRODFlags.NumberOfCollisions.set_Value_and_Lock(20);larRODFlags.nSamples.set_Value_and_Lock(4);larRODFlags.doOFCPileupOptimization.set_Value_and_Lock(True);larRODFlags.firstSample.set_Value_and_Lock(0);larRODFlags.useHighestGainAutoCorr.set_Value_and_Lock(True); from LArDigitization.LArDigitizationFlags import jobproperties;jobproperties.LArDigitizationFlags.useEmecIwHighGain.set_Value_and_Lock(False);' \ --postExec 'job+=CfgMgr.JobOptsDumperAlg(FileName="OverlayLegacyConfig.txt");' \ ---preInclude 'Overlay:SimulationJobOptions/preInclude.TruthOnlyConfig.py' \ --imf False rc=$? -echo "art-result: $rc configLegacy" mv log.Overlay log.OverlayLegacy +echo "art-result: $rc configLegacy" rc2=-9999 if [ $rc -eq 0 ] then - OverlayTest.py Truth -t 1 -n $events 2>&1 | tee log.OverlayTest + Overlay_tf.py \ + --CA \ + --detectors Truth \ + --inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ + --inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ + --outputRDOFile mcOverlayRDO.pool.root \ + --maxEvents $events \ + --conditionsTag OFLCOND-MC16-SDR-20 \ + --geometryVersion ATLAS-R2-2016-01-00-01 \ + --postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ + --postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ + --imf False \ + --athenaopts="--threads=1" rc2=$? + mv log.Overlay log.OverlayTest fi echo "art-result: $rc2 configNew" diff --git a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_sequential.sh b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_sequential.sh index 771c1e3c28e769939aa61c30b53bc51f79a97489..0a4ea5eb980baced36e86e182178d36a43579180 100755 --- a/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_sequential.sh +++ b/Simulation/Tests/OverlayTests/test/test_MCOverlay_ConfigTest_ttbar_sequential.sh @@ -12,9 +12,17 @@ # art-output: *.pkl # art-output: *Config.txt -set -o pipefail - -OverlayTest.py -n 10 -t 0 2>&1 | tee log.OverlayTest +Overlay_tf.py \ +--CA \ +--inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ +--inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ +--outputRDOFile mcOverlayRDO.pool.root \ +--maxEvents 10 \ +--conditionsTag OFLCOND-MC16-SDR-20 \ +--geometryVersion ATLAS-R2-2016-01-00-01 \ +--postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ +--postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ +--imf False rc=$? echo "art-result: $rc overlay" diff --git a/Simulation/Tests/OverlayTestsMT/test/test_MCOverlay_MT_ttbar_8threads_NewConfig.sh b/Simulation/Tests/OverlayTestsMT/test/test_MCOverlay_MT_ttbar_8threads_NewConfig.sh index bdfc98b342b9c9aa1343a8f0cd5ebec4e7ad7581..4f690fbb616d971e5896bdb42ad7892ee7169b9c 100755 --- a/Simulation/Tests/OverlayTestsMT/test/test_MCOverlay_MT_ttbar_8threads_NewConfig.sh +++ b/Simulation/Tests/OverlayTestsMT/test/test_MCOverlay_MT_ttbar_8threads_NewConfig.sh @@ -13,9 +13,20 @@ # art-output: *.pkl # art-output: *Config.txt -set -o pipefail +export ATHENA_CORE_NUMBER=8 -OverlayTest.py -n 100 -t 8 2>&1 | tee log.OverlayTest +Overlay_tf.py \ +--CA \ +--multithreaded \ +--inputHITSFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.simul.HITS.e4993_s3091/HITS.10504490._000425.pool.root.1 \ +--inputRDO_BKGFile /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/OverlayMonitoringRTT/PileupPremixing/22.0/v4/RDO.merged-pileup-MT.100events.pool.root \ +--outputRDOFile MC_plus_MC.RDO.pool.root \ +--maxEvents 50 --skipEvents 10 --digiSeedOffset1 511 --digiSeedOffset2 727 \ +--conditionsTag OFLCOND-MC16-SDR-20 \ +--geometryVersion ATLAS-R2-2016-01-00-01 \ +--postInclude 'OverlayConfiguration.OverlayTestHelpers.JobOptsDumperCfg' \ +--postExec 'with open("ConfigOverlay.pkl", "wb") as f: acc.store(f)' \ +--imf False rc=$? echo "art-result: $rc overlay" diff --git a/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorConfig.py b/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorConfig.py index ad1193366c7515a9eccc907a2ceb3f79d01a4d7f..5701f69bd18fdd2e6fdbec1a711ff55a9b1e560c 100644 --- a/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorConfig.py +++ b/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr @@ -9,9 +9,11 @@ def getMinBiasScintillatorSD(name="MinBiasScintillatorSD", **kwargs): bare_collection_name = "MBTSHits" mergeable_collection_suffix = "_G4" merger_input_property = "MBTSHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["LArMgr::MBTS1", "LArMgr::MBTS2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) from G4AtlasApps.SimFlags import simFlags diff --git a/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorToolConfig.py b/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorToolConfig.py index eff199174cf5f14e6795d01c110d7538fd0e3a21..def341b6f0a31aa02be9a41b9b72ead2b9d30505 100644 --- a/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorToolConfig.py +++ b/TileCalorimeter/TileG4/TileAncillary/MinBiasScintillator/python/MinBiasScintillatorToolConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from ISF_Algorithms.collection_merger_helpersNew import CollectionMergerCfg from AthenaConfiguration.ComponentFactory import CompFactory @@ -9,10 +9,13 @@ def MinBiasScintillatorSDCfg(ConfigFlags, name="MinBiasScintillatorSD", **kwargs bare_collection_name = "MBTSHits" mergeable_collection_suffix = "_G4" merger_input_property = "MBTSHits" + region = "CALO" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, - mergeable_collection_suffix, - merger_input_property) + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, + bare_collection_name, + mergeable_collection_suffix, + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["LArMgr::MBTS1", "LArMgr::MBTS2"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) @@ -20,6 +23,6 @@ def MinBiasScintillatorSDCfg(ConfigFlags, name="MinBiasScintillatorSD", **kwargs kwargs.setdefault("DeltaTHit", [1]) kwargs.setdefault("DoTOFCorrection", False) - result.setPrivateTools( MinBiasScintillatorSDTool(name, **kwargs) ) + result.setPrivateTools( MinBiasScintillatorSDTool(name, **kwargs) ) return result diff --git a/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDConfig.py b/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDConfig.py index 9f53ee840cdeee5d3fd02d8ac8543b2777f4d2a8..6fcc691780e44629fb9180f162efba3133e60721 100644 --- a/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDConfig.py +++ b/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDConfig.py @@ -1,4 +1,4 @@ -# Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration from AthenaCommon import CfgMgr @@ -9,9 +9,11 @@ def getTileGeoG4SD(name="TileGeoG4SD", **kwargs): bare_collection_name = "TileHitVec" mergeable_collection_suffix = "_G4" merger_input_property = "TileHits" + region = "CALO" hits_collection_name = generate_mergeable_collection_name(bare_collection_name, mergeable_collection_suffix, - merger_input_property) + merger_input_property, + region) kwargs.setdefault("LogicalVolumeNames", ["Tile::Scintillator"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) return CfgMgr.TileGeoG4SDTool(name, **kwargs) diff --git a/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDToolConfig.py b/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDToolConfig.py index 95a634d93bfadc6bcf092d1f5385b8579db07a38..44a5949671bd7a0a2914de93053baaf2e15d515d 100644 --- a/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDToolConfig.py +++ b/TileCalorimeter/TileG4/TileGeoG4SD/python/TileGeoG4SDToolConfig.py @@ -10,11 +10,15 @@ def TileGeoG4SDCfg(ConfigFlags, name="TileGeoG4SD", **kwargs): bare_collection_name = "TileHitVec" mergeable_collection_suffix = "_G4" merger_input_property = "TileHits" + region = "CALO" - result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, mergeable_collection_suffix, merger_input_property) + result, hits_collection_name = CollectionMergerCfg(ConfigFlags, bare_collection_name, mergeable_collection_suffix, merger_input_property, region) kwargs.setdefault("LogicalVolumeNames", ["Tile::Scintillator"]) kwargs.setdefault("OutputCollectionNames", [hits_collection_name]) + result.merge(TileGeoG4SDCalcCfg(ConfigFlags)) + kwargs.setdefault("TileCalculator", result.getService("TileGeoG4SDCalc") ) + result.setPrivateTools( TileGeoG4SDTool(name, **kwargs) ) return result @@ -23,7 +27,7 @@ def TileCTBGeoG4SDCfg(ConfigFlags, name="TileCTBGeoG4SD", **kwargs): kwargs.setdefault("LogicalVolumeNames", ["Tile::Scintillator"]) kwargs.setdefault("OutputCollectionNames", ["TileHitVec"]) - result = TileGeoG4SDCalcCfg(ConfigFlags) + result = TileCTBGeoG4SDCalcCfg(ConfigFlags) kwargs.setdefault("TileCalculator", result.getService("TileCTBGeoG4SDCalc") ) result.setPrivateTools( TileGeoG4SDTool(name, **kwargs) ) diff --git a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py index 95c9dfcea82efc97fc3a814627e06e82ecb3cc58..6967fe25bc837d94634ec513a3f63773369b93f7 100644 --- a/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py +++ b/Tools/FullChainTransforms/share/FastChainSkeleton.EVGENtoRDO.py @@ -831,7 +831,7 @@ collection_merger_alg = CfgGetter.getAlgorithm('ISF_CollectionMerger') SimKernel = CfgGetter.getAlgorithm(ISF_Flags.Simulator.KernelName()) -if ISF_Flags.HITSMergingRequired(): +if ISF_Flags.HITSMergingRequired.anyOn(): topSequence += collection_merger_alg #-------------------------------------------------------------- diff --git a/Tools/PROCTools/data/master_q431_AOD_digest.ref b/Tools/PROCTools/data/master_q431_AOD_digest.ref index 83524e312f5e124fb56c41ca175df124a9e61386..a32d623da9412ea1d858ef3d3a7ab8d7e6334e2a 100644 --- a/Tools/PROCTools/data/master_q431_AOD_digest.ref +++ b/Tools/PROCTools/data/master_q431_AOD_digest.ref @@ -1,23 +1,23 @@ run event nTopo nIdTracks nJets nMuons 330470 1183722158 1 0 0 0 330470 1183722342 394 415 18 0 - 330470 1183727953 532 569 11 4 - 330470 1183732647 467 452 12 1 - 330470 1183733040 381 285 6 1 + 330470 1183727953 532 570 13 4 + 330470 1183732647 467 453 12 1 + 330470 1183733040 381 286 6 1 330470 1183734651 361 363 14 3 - 330470 1183735332 406 372 9 1 - 330470 1183736475 741 654 15 2 + 330470 1183735332 406 372 10 1 + 330470 1183736475 741 654 15 3 330470 1183738728 1 0 0 0 - 330470 1183738949 368 420 9 1 + 330470 1183738949 368 421 9 1 330470 1183742489 152 125 2 1 330470 1183743040 285 305 5 0 - 330470 1183746343 492 465 14 0 + 330470 1183746343 492 465 12 0 330470 1183746710 6 0 0 0 330470 1183751782 239 235 4 0 330470 1183752624 347 342 8 2 330470 1183753006 357 377 11 3 330470 1183754806 470 406 15 0 - 330470 1183769295 342 317 8 1 + 330470 1183769295 342 318 8 1 330470 1183769939 348 340 11 3 330470 1183773832 307 198 7 0 330470 1183775209 57 0 0 0 diff --git a/Tracking/TrkAlignment/TrkAlignEvent/TrkAlignEvent/Residual.h b/Tracking/TrkAlignment/TrkAlignEvent/TrkAlignEvent/Residual.h index 0dc53fab27fff0be634848a8efe1de52993fef4a..4e68009c6cc404a5ef273d4a7cb16dcbc05f8d47 100644 --- a/Tracking/TrkAlignment/TrkAlignEvent/TrkAlignEvent/Residual.h +++ b/Tracking/TrkAlignment/TrkAlignEvent/TrkAlignEvent/Residual.h @@ -25,7 +25,7 @@ namespace Trk { public: Residual(AlignResidualType resType, AlignMesType mesType, ParamDefs param, double residual, double errSq); - ~Residual(); + ~Residual() = default; /** returns residual type */ AlignResidualType residualType() const; diff --git a/Tracking/TrkAlignment/TrkAlignEvent/src/Residual.cxx b/Tracking/TrkAlignment/TrkAlignEvent/src/Residual.cxx index 93732b234606a4ed139c3b70efaa2bb290d57c6c..79a23f8c02b3b54545c1875e4b8bc78c657b9793 100644 --- a/Tracking/TrkAlignment/TrkAlignEvent/src/Residual.cxx +++ b/Tracking/TrkAlignment/TrkAlignEvent/src/Residual.cxx @@ -16,10 +16,4 @@ namespace Trk { { } - - Residual::~Residual() - { - - } - } diff --git a/Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h b/Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h index b9c120e2cb2b1862c74d6acd515689562349652c..8391f11f04ee60efbf61e495aa6914efcd6bfa11 100755 --- a/Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h +++ b/Tracking/TrkEvent/TrkSpacePoint/TrkSpacePoint/SpacePoint.h @@ -38,10 +38,10 @@ namespace Trk{ public: // public because of DataPool SpacePoint(); - SpacePoint(const SpacePoint &); - SpacePoint &operator=(const SpacePoint &); + SpacePoint(const SpacePoint &) = default; + SpacePoint &operator=(const SpacePoint &) = default; // Destructor: - virtual ~SpacePoint(); + virtual ~SpacePoint() = default; /////////////////////////////////////////////////////////////////// // Const methods: @@ -89,7 +89,7 @@ namespace Trk{ virtual std::ostream& dump( std::ostream& out ) const override=0 ; protected: - const std::pair<const PrepRawData*, const PrepRawData*> *m_clusList; + std::pair<const PrepRawData*, const PrepRawData*> m_clusList; std::pair<IdentifierHash, IdentifierHash> m_elemIdList; Amg::Vector3D m_position; Amg::MatrixX m_globalCovariance; @@ -117,8 +117,7 @@ namespace Trk{ inline const std::pair<const PrepRawData*, const PrepRawData*>& SpacePoint::clusterList() const { - assert(m_clusList!=0); - return *m_clusList; + return m_clusList; } inline double SpacePoint::eta(double z0) const diff --git a/Tracking/TrkEvent/TrkSpacePoint/src/SpacePoint.cxx b/Tracking/TrkEvent/TrkSpacePoint/src/SpacePoint.cxx index 5df5034ef909f7302c0b91548502b8004cf5fb90..429d9a6b8b02424c028f8c7b8bc14ac442db9061 100755 --- a/Tracking/TrkEvent/TrkSpacePoint/src/SpacePoint.cxx +++ b/Tracking/TrkEvent/TrkSpacePoint/src/SpacePoint.cxx @@ -23,18 +23,13 @@ namespace Trk { - // Destructor: - SpacePoint::~SpacePoint() - { - delete m_clusList; - } // ------------------------------------------------------------------ // Default constructor SpacePoint::SpacePoint() : - m_clusList(nullptr), + m_clusList(nullptr, nullptr), m_elemIdList(0,0), m_position(), m_globalCovariance() @@ -43,42 +38,6 @@ namespace Trk // ------------------------------------------------------------------ - // copy constructor - SpacePoint::SpacePoint(const SpacePoint & SP) : - Trk::MeasurementBase(SP) - { - m_elemIdList = SP.m_elemIdList; - m_position = SP.m_position; - if (SP.m_clusList){ - m_clusList = new std::pair<const PrepRawData*, const PrepRawData*>(*SP.m_clusList); - } else { - m_clusList=nullptr; - } - m_globalCovariance = SP.m_globalCovariance; - } - - // ------------------------------------------------------------------ - - //assignment operator - SpacePoint& SpacePoint::operator=(const SpacePoint& SP) - { - if (&SP !=this) - { - Trk::MeasurementBase::operator=(SP); - delete m_clusList; - m_elemIdList = SP.m_elemIdList; - m_position = SP.m_position; - if (SP.m_clusList){ - m_clusList = new std::pair<const PrepRawData*, const PrepRawData*>(*SP.m_clusList); - } else { - m_clusList=nullptr; - } - m_globalCovariance = SP.m_globalCovariance; - } - return *this; - } - - // ------------------------------------------------------------------ /**Overload of << operator for both, MsgStream and std::ostream for debug output*/ MsgStream& operator << ( MsgStream& sl, const Trk::SpacePoint& spacePoint) @@ -113,8 +72,8 @@ namespace Trk const Surface& SpacePoint::associatedSurface() const { - assert(m_clusList->first->detectorElement()); - return m_clusList->first->detectorElement()->surface(); + assert(m_clusList.first->detectorElement()); + return m_clusList.first->detectorElement()->surface(); } } // end of namespace diff --git a/Tracking/TrkExtrapolation/TrkExInterfaces/TrkExInterfaces/IMaterialEffectsUpdator.h b/Tracking/TrkExtrapolation/TrkExInterfaces/TrkExInterfaces/IMaterialEffectsUpdator.h index a2aae99c34fe19c8d37adbeaedcda384411df0a2..3d8fb19346f4d44a1af9c806780780403bab3e37 100755 --- a/Tracking/TrkExtrapolation/TrkExInterfaces/TrkExInterfaces/IMaterialEffectsUpdator.h +++ b/Tracking/TrkExtrapolation/TrkExInterfaces/TrkExInterfaces/IMaterialEffectsUpdator.h @@ -84,8 +84,8 @@ public: virtual std::unique_ptr<ICache> getCache() const = 0; /** Updator interface (full update for a layer): - The parameters are given as a pointer, they are delete inside the update - method. Layer-based material update + The parameters are given as a pointer owned by the caller. + The returned ptr is owned by the caller. */ virtual const TrackParameters* update( ICache& icache, @@ -132,8 +132,8 @@ public: MaterialUpdateMode matupmode = addNoise) const = 0; /** Updator interface: - The parameters are given as a pointer, they are delete inside the update - method. MaterialProperties based material update + The parameters are given as a pointer owned by the caller. + The returned ptr is owned by the caller - used by all Layer-based methods */ virtual TrackParameters* update( @@ -169,8 +169,6 @@ public: ParticleHypothesis particle = pion, MaterialUpdateMode matupmode = addNoise) const = 0; /** Updator interface (pre-update for a layer): - The parameters are given as a pointer, they are delete inside the update - method. Layer-based material update */ virtual TrackParameters* preUpdate( const TrackParameters* param, @@ -181,7 +179,6 @@ public: /** Updator interface (pre-update for a layer): */ - virtual TrackParameters* postUpdate( const TrackParameters& param, const Layer& sf, diff --git a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h index cdb1f7d0798affc183ee71384e95709cf0ad88fb..c72b54ef836332e85b4d6a165db5741c5739e342 100755 --- a/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h +++ b/Tracking/TrkExtrapolation/TrkExTools/TrkExTools/MaterialEffectsUpdator.h @@ -102,9 +102,7 @@ class MaterialEffectsUpdator : public AthAlgTool, } /** Updator interface (full update for a layer) - ---> ALWAYS the same pointer is returned - the pointer to the same TrackParameters object is returned, - it is manipulated (if sf.fullUpdateMaterial()) + ---> ALWAYS pointer to new TrackParameters is returned */ virtual TrackParameters* update(ICache& icache, const TrackParameters* parm, const Layer& sf, @@ -121,9 +119,7 @@ class MaterialEffectsUpdator : public AthAlgTool, } /** Updator interface (full update for a layer) according to user input through MaterialEffectsOnTrack - ---> ALWAYS the same pointer is returned - the pointer to the same TrackParameters object is returned, - it is manipulated + ---> ALWAYS pointer to new TrackParameters is returned */ virtual TrackParameters* update(ICache& icache, const TrackParameters* parm, @@ -142,9 +138,7 @@ class MaterialEffectsUpdator : public AthAlgTool, } /** Updator interface (pre-update for a layer): - ---> ALWAYS the same pointer is returned - the pointer to the same TrackParametes object is returned, - it is manipulated (if.preUpdateMaterial()) + ---> ALWAYS pointer to new TrackParameters is returned */ virtual TrackParameters* preUpdate(ICache& icache, const TrackParameters* parm, @@ -163,8 +157,8 @@ class MaterialEffectsUpdator : public AthAlgTool, } /** Updator interface (post-update for a layer): - ---> ALWAYS pointer to new TrackParameters are returned - if no postUpdate is to be done : return 0 + ---> ALWAYS pointer to new TrackParameters is returned + if no postUpdate is to be done : return nullptr */ virtual TrackParameters* postUpdate( ICache& icache, diff --git a/Tracking/TrkExtrapolation/TrkExTools/src/Extrapolator.cxx b/Tracking/TrkExtrapolation/TrkExTools/src/Extrapolator.cxx index 6fd0d925e5a5ba6b0e527b822066d92ff420c1ab..9379d5da54406c6c9ea5af9b906600a168b676a8 100755 --- a/Tracking/TrkExtrapolation/TrkExTools/src/Extrapolator.cxx +++ b/Tracking/TrkExtrapolation/TrkExTools/src/Extrapolator.cxx @@ -718,14 +718,14 @@ Trk::Extrapolator::extrapolateToNextMaterialLayer(const EventContext& ctx, cache.m_lastMaterialLayer = nullptr; } if (!cache.m_highestVolume) { - cache.m_highestVolume = m_navigator->highestVolume(); + cache.m_highestVolume = m_navigator->highestVolume(ctx); } // resolve current position Amg::Vector3D gp = parm->position(); if (vol && vol->inside(gp, m_tolerance)) { staticVol = vol; } else { - staticVol = m_navigator->trackingGeometry()->lowestStaticTrackingVolume(gp); + staticVol = m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume(gp); const Trk::TrackingVolume* nextStatVol = nullptr; if (m_navigator->atVolumeBoundary(currPar.get(), staticVol, dir, nextStatVol, m_tolerance) && nextStatVol != staticVol) { @@ -997,7 +997,7 @@ Trk::Extrapolator::extrapolateToNextMaterialLayer(const EventContext& ctx, gp = currPar->position(); std::vector<const Trk::DetachedTrackingVolume*>* detVols = - m_navigator->trackingGeometry()->lowestDetachedTrackingVolumes(gp); + m_navigator->trackingGeometry(ctx)->lowestDetachedTrackingVolumes(gp); std::vector<const Trk::DetachedTrackingVolume*>::iterator dIter = detVols->begin(); for (; dIter != detVols->end(); ++dIter) { const Trk::Layer* layR = (*dIter)->layerRepresentation(); @@ -1417,7 +1417,7 @@ Trk::Extrapolator::extrapolateToNextMaterialLayer(const EventContext& ctx, m_tolerance))) { ATH_MSG_DEBUG(" [!] WARNING: wrongly assigned static volume ?" << cache.m_currentStatic->volumeName() << "->" << nextVol->volumeName()); - nextVol = m_navigator->trackingGeometry()->lowestStaticTrackingVolume( + nextVol = m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume( nextPar->position() + 0.01 * nextPar->momentum().normalized()); if (nextVol) { ATH_MSG_DEBUG(" new search yields: " << nextVol->volumeName()); @@ -1757,7 +1757,7 @@ Trk::Extrapolator::extrapolateInAlignableTV(const EventContext& ctx, // double tol = 0.001; // double path = 0.; if (!cache.m_highestVolume) { - cache.m_highestVolume = m_navigator->highestVolume(); + cache.m_highestVolume = m_navigator->highestVolume(ctx); } // verify current position @@ -1765,7 +1765,7 @@ Trk::Extrapolator::extrapolateInAlignableTV(const EventContext& ctx, if (vol && vol->inside(gp, m_tolerance)) { staticVol = vol; } else { - currVol = m_navigator->trackingGeometry()->lowestStaticTrackingVolume(gp); + currVol = m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume(gp); const Trk::TrackingVolume* nextStatVol = nullptr; if (m_navigator->atVolumeBoundary(currPar.get(), currVol, dir, nextStatVol, m_tolerance) && nextStatVol != currVol) { @@ -1926,7 +1926,7 @@ Trk::Extrapolator::extrapolateInAlignableTV(const EventContext& ctx, m_tolerance))) { ATH_MSG_DEBUG(" [!] WARNING: wrongly assigned static volume ?" << cache.m_currentStatic->volumeName() << "->" << nextVol->volumeName()); - nextVol = m_navigator->trackingGeometry()->lowestStaticTrackingVolume( + nextVol = m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume( nextPar->position() + 0.01 * nextPar->momentum().normalized()); if (nextVol) { ATH_MSG_DEBUG(" new search yields: " << nextVol->volumeName()); @@ -2190,13 +2190,13 @@ Trk::Extrapolator::extrapolate(const EventContext& ctx, if (closestTrackParameters) { return (extrapolate( ctx, *closestTrackParameters, sf, dir, bcheck, particle, matupmode, extrapolationCache)); - } + } closestTrackParameters = *(trk.trackParameters()->begin()); if (closestTrackParameters) { return (extrapolate( ctx, *closestTrackParameters, sf, dir, bcheck, particle, matupmode, extrapolationCache)); } - + return nullptr; } @@ -2759,11 +2759,11 @@ Trk::Extrapolator::extrapolateImpl(const EventContext& ctx, fallback = true; // break it break; - } + } // set the punch-through to true punchThroughDone = true; ATH_MSG_DEBUG(" [!] One time punch-through a volume done."); - + } // ------------------- the output interpretationn of the extrapolateToVolumeBoundary // (3) NAVIGATION BREAK : no nextVolume found - but not in extrapolateBlindly() mode @@ -3112,7 +3112,7 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, // arbitrary surface or destination layer ? // bool loopOverLayers = false; const Trk::Layer* destinationLayer = - m_navigator->trackingGeometry()->associatedLayer(sf.center()); + m_navigator->trackingGeometry(ctx)->associatedLayer(sf.center()); // if ( destinationLayer ) loopOverLayers = true; // initial distance to surface @@ -3137,7 +3137,7 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, if (fwd) { return fwd; - } + } Trk::PropDirection oppDir = (dir != Trk::oppositeMomentum) ? Trk::oppositeMomentum : Trk::alongMomentum; // return prop.propagate(*nextParameters,sf,oppDir,bcheck,*currVol,particle); @@ -3145,7 +3145,7 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, nextParameters, prop.propagate( ctx, *nextParameters, sf, oppDir, bcheck, m_fieldProperties, particle, false, currVol)); - + } if (fabs(dist) < m_tolerance) { @@ -3157,7 +3157,7 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, nextParameters, prop.propagate( ctx, *nextParameters, sf, dir, bcheck, m_fieldProperties, particle, false, currVol)); - } + } Trk::PropDirection oppDir = (dir != Trk::oppositeMomentum) ? Trk::oppositeMomentum : Trk::alongMomentum; // return prop.propagate(*nextParameters,sf,oppDir,bcheck,*currVol,particle); @@ -3165,7 +3165,7 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, nextParameters, prop.propagate( ctx, *nextParameters, sf, oppDir, bcheck, m_fieldProperties, particle, false, currVol)); - + } if (dist < 0.) { ATH_MSG_DEBUG(" [!] Initial 3D-distance to the surface negative (" << dist << ") -> skip extrapolation."); @@ -3209,9 +3209,9 @@ Trk::Extrapolator::extrapolateWithinDetachedVolumes(const EventContext& ctx, return cParms; } return onNextLayer; - } + } return ManagedTrackParmPtr(); - + } } else { // world boundary ? @@ -4328,7 +4328,7 @@ Trk::Extrapolator::initializeNavigation(const EventContext& ctx, ++m_startThroughGlobalSearch; // non-perigee surface resetRecallInformation(cache); - associatedVolume = m_navigator->volume(parm->position()); + associatedVolume = m_navigator->volume(ctx,parm->position()); associatedLayer = (associatedVolume) ? associatedVolume->associatedLayer(parm->position()) : nullptr; @@ -4338,7 +4338,7 @@ Trk::Extrapolator::initializeNavigation(const EventContext& ctx, // ---------------------------------- ASSOCIATED STATIC VOLUME // -------------------------------------- this is not necessary for ( association & recall ) const Trk::TrackingVolume* lowestStaticVol = - m_navigator->trackingGeometry()->lowestStaticTrackingVolume(parm->position()); + m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume(parm->position()); if (lowestStaticVol && lowestStaticVol != associatedVolume) { associatedVolume = lowestStaticVol; @@ -4427,14 +4427,14 @@ Trk::Extrapolator::initializeNavigation(const EventContext& ctx, } // get the destination Volume if (refParameters) { - destVolume = m_navigator->volume(refParameters->position()); + destVolume = m_navigator->volume(ctx,refParameters->position()); } // ------ the last chance : associate to the globalReferencePoint // std::cout << "destVolume: " << destVolume << " ref par: " << refParameters << " // associatedVolume: " // << associatedVolume << std::endl; if (!destVolume) { - destVolume = m_navigator->volume(sf.globalReferencePoint()); + destVolume = m_navigator->volume(ctx,sf.globalReferencePoint()); } } ATH_MSG_VERBOSE(" [I] Destination Information gathered through : " << destinationSearchType @@ -4718,9 +4718,9 @@ Trk::Extrapolator::checkCache(Cache& cache, const std::string& txt) const ATH_MSG_DEBUG(txt << " PROBLEM Eloss cache pointer overwritten " << cache.m_cacheEloss << " from extrapolationCache " << cache.m_extrapolationCache->eloss()); return false; - } + } return true; - + } const std::vector<std::pair<const Trk::TrackParameters*, int>>* @@ -4885,7 +4885,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, cache.m_lastMaterialLayer = nullptr; } if (!cache.m_highestVolume) { - cache.m_highestVolume = m_navigator->highestVolume(); + cache.m_highestVolume = m_navigator->highestVolume(ctx); } // navigation surfaces @@ -4897,7 +4897,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, // target volume may not be part of tracking geometry if (destVol) { const Trk::TrackingVolume* tgVol = - m_navigator->trackingGeometry()->trackingVolume(destVol->volumeName()); + m_navigator->trackingGeometry(ctx)->trackingVolume(destVol->volumeName()); if (!tgVol || tgVol != destVol) { const std::vector<SharedObject<const BoundarySurface<TrackingVolume>>>& bounds = destVol->boundarySurfaces(); @@ -4913,7 +4913,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, bool updateStatic = false; Amg::Vector3D gp = parm->position(); if (!cache.m_currentStatic || !cache.m_currentStatic->inside(gp, m_tolerance)) { - cache.m_currentStatic = m_navigator->trackingGeometry()->lowestStaticTrackingVolume(gp); + cache.m_currentStatic = m_navigator->trackingGeometry(ctx)->lowestStaticTrackingVolume(gp); updateStatic = true; } @@ -4961,9 +4961,9 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, if (nextPar) { return extrapolateToVolumeWithPathLimit( ctx, cache, nextPar.index(), pathLim, dir, particle, destVol, matupmod); - } + } return ManagedTrackParmPtr(); - + } } @@ -5073,7 +5073,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, gp = currPar->position(); std::vector<const Trk::DetachedTrackingVolume*>* detVols = - m_navigator->trackingGeometry()->lowestDetachedTrackingVolumes(gp); + m_navigator->trackingGeometry(ctx)->lowestDetachedTrackingVolumes(gp); std::vector<const Trk::DetachedTrackingVolume*>::iterator dIter = detVols->begin(); for (; dIter != detVols->end(); ++dIter) { const Trk::Layer* layR = (*dIter)->layerRepresentation(); @@ -5447,7 +5447,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, dir, particle); } - + } } @@ -5530,7 +5530,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, ATH_MSG_VERBOSE(" Pre-update energy loss:" << nextPar->momentum().mag() - pIn << "at position:" << nextPar->position() << ", current momentum:" << nextPar->momentum()); - + } // active surface intersections ( Fatras hits ...) if (cache.m_parametersOnDetElements && particle != Trk::neutron) { @@ -5573,7 +5573,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, ATH_MSG_VERBOSE(" Post-update energy loss:" << nextPar->momentum().mag() - pIn << "at position:" << nextPar->position()); - + } } else { double pIn = nextPar->momentum().mag(); @@ -5589,7 +5589,7 @@ Trk::Extrapolator::extrapolateToVolumeWithPathLimit(const EventContext& ctx, } // the MEOT will be saved at the end ATH_MSG_VERBOSE(" Update energy loss:" << nextPar->momentum().mag() - pIn << "at position:" << nextPar->position()); - + } if (cache.m_matstates) { addMaterialEffectsOnTrack(ctx, diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h index cb7ae7b385e7b537672ace9385e00bf358d59389..21d9d1935d379f7060c8a75e274c6e2bcce2a08a 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/KLGaussianMixtureReduction.h @@ -109,6 +109,10 @@ struct triangularToIJ /** * @brief Merge the componentsIn and return * which componets got merged + * + * The input component array is assumed to be + * GSFUtils::alignment aligned. + * */ std::vector<std::pair<int32_t, int32_t>> findMerges(Component1D* componentsIn, @@ -128,10 +132,6 @@ findMinimumIndex(const float* distancesIn, const int32_t n); __attribute__((target("sse4.1"))) int32_t findMinimumIndex(const float* distancesIn, const int32_t n); - -__attribute__((target("sse2"))) -int32_t -findMinimumIndex(const float* distancesIn, const int32_t n); #endif // x86_64 specific targets __attribute__((target("default"))) diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx index c684643aacc647afc6d353779f55505b220f261b..e1fbde56c08150c846c8843ec5a25da2cd4206f7 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMaterialMixtureConvolution.cxx @@ -274,10 +274,10 @@ Trk::GsfMaterialMixtureConvolution::update( // Store component weight caches[i].weights[j] *= inputState[i].second; // Ensure weight of component is not too small to save us from potential - // FPE's Value chosen to be sufficiently small so that the final state - // will not be impacted - if (caches[i].weights[j] < 1e-12) { - caches[i].weights[j] = 1e-12; + // FPE's Value. Weights are double so the min of float should + // be small enough and should be handled + if (caches[i].weights[j] < std::numeric_limits<float>::min()) { + caches[i].weights[j] = std::numeric_limits<float>::min(); } } n += caches[i].weights.size(); diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx index bc984b9e41c1d7bffaa5494379372e1f5a46fc4d..f678263f6fed227949a8ab3b6683ce93d684e71c 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GsfMeasurementUpdator.cxx @@ -218,39 +218,33 @@ Trk::GsfMeasurementUpdator::calculateFilterStep( std::abs(component.first->parameters()[Trk::qOverP]) > 0.033333) { continue; } - auto componentFitQuality = std::make_unique<Trk::FitQualityOnSurface>(); + Trk::FitQualityOnSurface componentFitQuality; /// Update the component in place bool updateSuccess = m_updator.filterStep(*(component.first), - *componentFitQuality, + componentFitQuality, measurement.localParameters(), measurement.localCovariance(), 1); if (!updateSuccess) { - if (componentFitQuality) { - componentFitQuality.reset(); - } continue; } if (invalidComponent(component.first.get())) { - componentFitQuality.reset(); continue; } - if (!componentFitQuality || componentFitQuality->chiSquared() <= 0.) { - componentFitQuality.reset(); + if (componentFitQuality.chiSquared() <= 0.) { continue; } - double componentChi2 = componentFitQuality->chiSquared(); + double componentChi2 = componentFitQuality.chiSquared(); chiSquared += component.second * componentChi2; // The same measurement is included in each update // so we can update the degree of freedom only if (degreesOfFreedom == 0.0) { - degreesOfFreedom = componentFitQuality->numberDoF(); + degreesOfFreedom = componentFitQuality.numberDoF(); } - componentFitQuality.reset(); // Add component to state being prepared for assembly MultiComponentStateAssembler::addComponent(cache, std::move(component)); diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx index 96ccf1db1608fa3d43931583e2d10a005e346da6..3918298c7ff61cbc4ad6ab7b81356efc2012f6c4 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/KLGaussianMixtureReduction.cxx @@ -103,6 +103,7 @@ recalculateDistances(const Component1D* componentsIn, { const Component1D* components = static_cast<const Component1D*>( __builtin_assume_aligned(componentsIn, alignment)); + float* distances = static_cast<float*>(__builtin_assume_aligned(distancesIn, alignment)); @@ -147,6 +148,7 @@ calculateAllDistances(const Component1D* componentsIn, __builtin_assume_aligned(componentsIn, alignment)); float* distances = static_cast<float*>(__builtin_assume_aligned(distancesIn, alignment)); + for (int32_t i = 1; i < n; ++i) { const int32_t indexConst = (i - 1) * i / 2; const Component1D componentI = components[i]; @@ -183,7 +185,7 @@ namespace GSFUtils { /** * Merge the componentsIn and return - * which componets got merged + * which componets got merged. */ std::vector<std::pair<int32_t, int32_t>> findMerges(Component1D* componentsIn, @@ -196,19 +198,17 @@ findMerges(Component1D* componentsIn, const int32_t n = inputSize; const int32_t nn = n * (n - 1) / 2; // Create a trianular mapping for the pairwise distances - std::vector<triangularToIJ> convert; - convert.reserve(nn); - + // We now that the size is nn + std::vector<triangularToIJ> convert(nn); for (int32_t i = 1; i < n; ++i) { const int indexConst = (i - 1) * i / 2; for (int32_t j = 0; j < i; ++j) { - int32_t index = indexConst + j; - convert[index] = { i, j }; + convert[indexConst + j] = { i, j }; } } - // We need to work with multiple of 8, in principle this is a requirement - // of aligned_alloc (although not in POSIX ) i.e allocation should be multiple - // of the requested size. + // We work with a multiple of 8*floats (32 bytes). + // Ensures also that the size parameter passed to aligned alloc + // is an integral multiple of alignment (32 bytes). const int32_t nn2 = (nn & 7) == 0 ? nn : nn + (8 - (nn & 7)); AlignedDynArray<float, alignment> distances( nn2, std::numeric_limits<float>::max()); @@ -242,11 +242,25 @@ findMerges(Component1D* componentsIn, /** * findMinimumIndex - * For FindMinimumIndex at x86_64 we have - * AVX2,SSE4.1,SSE2 versions - * These assume that the number of elements is a multiple - * of 8 and are to be used for sizeable inputs. - * We also provide a default "scalar" implementation + * Assume that the number of elements is a multiple + * of 8 and is to be used for sizeable inputs. + * + * It uses the CxxUtils:vec class which provides + * a degree of portability. + * + * avx2 gives us lanes 8 float wide + * SSE4.1 gives us efficient blend + * so we employ function multiversioning + * + * For non-sizeable inputs + * std::distance(array, std::min_element(array, array + n)) + * can be good enough instead of calling this function. + * + * Note than the above "STL" code in gcc + * (up to 10.2 at least) this emits + * a cmov which make it considerable slower + * than the clang when the branch can + * be well predicted. */ #if HAVE_FUNCTION_MULTIVERSIONING #if defined(__x86_64__) @@ -335,10 +349,9 @@ findMinimumIndex(const float* distancesIn, const int n) } return minIndex; } -/* - * SSE2 does not have a blend/select instruction. - */ -__attribute__((target("sse2"))) +#endif // end of x86_64 versions +__attribute__((target("default"))) +#endif // HAVE_FUNCTION_MULTIVERSIONING int32_t findMinimumIndex(const float* distancesIn, const int n) { @@ -388,23 +401,5 @@ findMinimumIndex(const float* distancesIn, const int n) } return minIndex; } -#endif // end of x86_64 versions -// Always fall back to a simple default version with no intrinsics -__attribute__((target("default"))) -#endif // HAVE_FUNCTION_MULTIVERSIONING -int32_t -findMinimumIndex(const float* distancesIn, const int n) -{ - float* array = (float*)__builtin_assume_aligned(distancesIn, alignment); - float minDistance = array[0]; - int32_t minIndex = 0; - for (int i = 0; i < n; ++i) { - const float value = array[i]; - if (value < minDistance) { - minIndex = i; - minDistance = value; - } - } - return minIndex; -} + } // end namespace GSFUtils diff --git a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/CMakeLists.txt b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/CMakeLists.txt index 64b3821107d739fa78540bd3947c81270c3915b7..f2f4f6e68dcf8c717fdbe6ea19bf44a4bd5d0169 100644 --- a/Tracking/TrkVertexFitter/TrkVertexFitterUtils/CMakeLists.txt +++ b/Tracking/TrkVertexFitter/TrkVertexFitterUtils/CMakeLists.txt @@ -5,41 +5,25 @@ # Declare the package name: atlas_subdir( TrkVertexFitterUtils ) -# Declare the package's dependencies: -atlas_depends_on_subdirs( PUBLIC - Control/AthenaBaseComps - Event/xAOD/xAODTracking - GaudiKernel - MagneticField/MagFieldConditions # exposed by FullLinearizedTrackFactory.h - Tracking/TrkEvent/TrkParameters - Tracking/TrkEvent/TrkParametersBase - Tracking/TrkVertexFitter/TrkVertexFitterInterfaces - PRIVATE - AtlasTest/TestTools - MagneticField/MagFieldElements - Tracking/TrkDetDescr/TrkSurfaces - Tracking/TrkEvent/TrkEventPrimitives - Tracking/TrkEvent/TrkNeutralParameters - Tracking/TrkEvent/TrkParticleBase - Tracking/TrkEvent/TrkTrack - Tracking/TrkEvent/TrkTrackLink - Tracking/TrkEvent/VxVertex - Tracking/TrkExtrapolation/TrkExInterfaces - Tracking/TrkExtrapolation/TrkExUtils - Tools/PathResolver ) - # External dependencies: find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread ) +find_package( CLHEP ) + +atlas_add_library( TrkVertexFitterUtilsLib + TrkVertexFitterUtils/*.h + INTERFACE + PUBLIC_HEADERS TrkVertexFitterUtils + INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} + LINK_LIBRARIES TrkVertexFitterInterfaces AthenaBaseComps xAODTracking GaudiKernel TrkParametersBase TrkParameters MagFieldConditions ${CLHEP_LIBRARIES} ) # Component(s) in the package: atlas_add_component( TrkVertexFitterUtils src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps xAODTracking GaudiKernel TrkParameters TrkParametersBase TrkVertexFitterInterfaces MagFieldConditions MagFieldElements TrkSurfaces TrkEventPrimitives TrkNeutralParameters TrkParticleBase TrkTrack VxVertex TrkExInterfaces TrkExUtils ) + LINK_LIBRARIES ${ROOT_LIBRARIES} MagFieldElements TrkSurfaces TrkEventPrimitives TrkNeutralParameters TrkParticleBase TrkTrack VxVertex TrkExInterfaces TrkExUtils TrkVertexFitterUtilsLib ) # Install files from the package: -atlas_install_headers( TrkVertexFitterUtils ) atlas_install_joboptions( share/*.txt ) diff --git a/Trigger/TrigAccel/TrigInDetAccel/TrigInDetAccelerationTool/CMakeLists.txt b/Trigger/TrigAccel/TrigInDetAccel/TrigInDetAccelerationTool/CMakeLists.txt index 094c19a9393dd872daf9cadcba66fca847894635..9f0cd3eb0cd97bef6d51c698c0f46f711d129cce 100644 --- a/Trigger/TrigAccel/TrigInDetAccel/TrigInDetAccelerationTool/CMakeLists.txt +++ b/Trigger/TrigAccel/TrigInDetAccel/TrigInDetAccelerationTool/CMakeLists.txt @@ -11,7 +11,6 @@ atlas_subdir( TrigInDetAccelerationTool ) atlas_add_library( TrigInDetAccelerationToolLib src/*.cxx - INTERFACE PUBLIC_HEADERS TrigInDetAccelerationTool LINK_LIBRARIES AthenaBaseComps GaudiKernel InDetIdentifier TrigInDetEvent TrigSteeringEvent TrigInDetPattRecoTools AthenaBaseComps InDetIdentifier TrigInDetPattRecoEvent TrigAccelEvent TrigInDetAccelerationServiceLib) diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/IT2VertexBeamSpotTool.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/IT2VertexBeamSpotTool.h deleted file mode 100644 index 19887b59eb5da0e516b7691bfd2c10cb5c0acc40..0000000000000000000000000000000000000000 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/IT2VertexBeamSpotTool.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -*/ -#ifndef TRIGT2BEAMSPOT_IT2VERTEXBEAMSPOTTOOL_H -#define TRIGT2BEAMSPOT_IT2VERTEXBEAMSPOTTOOL_H -/// Local tools -#include "../src/T2Track.h" -#include "../src/T2Vertex.h" -//Athena tools -#include "AthContainers/DataVector.h" -#include "AthContainers/ConstDataVector.h" -#include "TrkTrack/TrackCollection.h" -#include <string> -#include <vector> -#include "GaudiKernel/IAlgTool.h" - -class TrigVertexCollection; - -/// Event statistics -// When this changes, adjust T2VertexBeamSpotMonitoring.py: EventStatistics histogram -enum Statistics -{ - allInput = 0, - hasTE = 1, - hasROI = 2, - hasTracks = 3, - hasSeedTrack = 4, - enoughTracks = 5, - hasCluster = 6, - hasVertex = 7, - hasGoodVertex = 8, - numStatistics /// Leave this entry at the end -}; - - - -namespace PESA { - class T2TrackClusterer; - - class IT2VertexBeamSpotTool : virtual public IAlgTool { - public: - DeclareInterfaceID (IT2VertexBeamSpotTool, 1, 0); - - virtual bool isGoodTrack ( const T2Track & track ) const = 0; - - - virtual bool isGoodVertex ( const T2Vertex& vertex ) const = 0; - - - virtual bool isGoodVertexBCID( const T2Vertex& vertex ) const =0; - - - virtual bool isHighPTTrack( unsigned &nTracks ) const =0; - - - virtual bool notEnoughTracks(unsigned &nTracks) const =0; - - - virtual void selectTracks( const TrackCollection* trackCollection, - ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) = 0; - - virtual void reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - TrigVertexCollection& myVertexCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections) = 0; - - virtual void reconstructSplitVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections, T2TrackClusterer& trackClusterer ) = 0; - - - virtual void resetMonitoredVariables() = 0; - - //Monitoring variables, need to be reset every event in resetMonitored variables - std::vector<bool> m_eventStageFlag; - std::vector<unsigned> m_eventStage; - - //Event info variables - unsigned int m_EventID = 0; - - //This might not have to be a member of the tool at all - //But need this in the tool as it is used in both tool and the alg - virtual bool eventStage( Statistics stage ) = 0; - - //Keep the track of how many vertices passed the selection - unsigned int m_NvtxPass; - - std::string m_vertexCollName; - - - bool m_passNpvTrigCuts; - - std::vector<T2Vertex> m_vertex; - - - }; - -} // end namespace - -#endif diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h index 66b394a62deeba81b0bb3d02faea843e8a6e215b..dbcc132a6552c64ea12f016b9c41ebd12d89003a 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpot.h @@ -29,7 +29,7 @@ /// trigger EDM #include "TrigInterfaces/AllTEAlgo.h" //Interface for the beam spot tool -#include "IT2VertexBeamSpotTool.h" +#include "T2VertexBeamSpotTool.h" namespace HLT { class TriggerElement; @@ -86,6 +86,11 @@ namespace PESA { /** Function which attaches splitted vertex collections to the trigger element output */ HLT::ErrorCode attachFeatureSplitVertex(DataVector< TrigVertexCollection > &mySplitVertexCollections, HLT::TEVec &allTEs, unsigned int type_out ); + //Until HLT::Algo inherits from AthReentrantAlgorithm or we can drop Run-2 setup + virtual bool isClonable() const override { return true; } + virtual unsigned int cardinality() const override { return 0; }//Mark as re-entrant + + //Only for Run2 settings bool m_activateTE; /*If true to be added */ bool m_activateAllTE;/*If true to be added */ @@ -116,7 +121,7 @@ namespace PESA { SG::ReadHandleKey<xAOD::EventInfo> m_eventInfoKey { this, "EventInfo", "EventInfo", "" }; //Tools - ToolHandle<IT2VertexBeamSpotTool> m_beamSpotTool {this, "BeamSpotTool", "PESA::T2VertexBeamSpotTool/T2VertexBeamSpotTool" }; + ToolHandle<T2VertexBeamSpotTool> m_beamSpotTool {this, "BeamSpotTool", "PESA::T2VertexBeamSpotTool/T2VertexBeamSpotTool" }; ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h index af8af7b0e92847c79c1d5b2108bccd8f93e19a08..795429cd4fc27921dedd86e053b3c34e002778ff 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/TrigT2BeamSpot/T2VertexBeamSpotTool.h @@ -27,6 +27,7 @@ #include <memory> // Local tools #include "../src/T2TrackManager.h" +#include "../src/T2Track.h" #include "../src/T2BeamSpot.h" #include "../src/T2SplitVertex.h" //Athena tools @@ -37,8 +38,6 @@ //Tracking #include "TrkTrack/TrackCollection.h" #include "TrigInDetToolInterfaces/ITrigPrimaryVertexFitter.h" -//BeamSpotTool interface -#include "IT2VertexBeamSpotTool.h" //Data handles #include "StoreGate/ReadCondHandleKey.h" //Beam data @@ -68,7 +67,7 @@ namespace PESA { * @author David W. Miller <David.W.Miller@cern.ch> * */ - class T2VertexBeamSpotTool : public AthAlgTool, virtual public IT2VertexBeamSpotTool{ + class T2VertexBeamSpotTool : public AthAlgTool { public: T2VertexBeamSpotTool( const std::string& type, const std::string& name, const IInterface* parent ); @@ -100,20 +99,14 @@ namespace PESA { void selectTracks( const TrackCollection* trackCollection, - ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ); - - void reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - TrigVertexCollection& myVertexCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections ); + ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) const; + unsigned int reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, + TrigVertexCollection& myVertexCollection, + DataVector< TrigVertexCollection >& mySplitVertexCollections, const EventContext& ) const; void reconstructSplitVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections, T2TrackClusterer& trackClusterer ); - - - bool eventStage( Statistics stage ); - - void resetMonitoredVariables(); + DataVector< TrigVertexCollection >& mySplitVertexCollections, T2TrackClusterer& trackClusterer, const EventContext& ) const; bool m_passNpvTrigCuts; @@ -170,20 +163,24 @@ namespace PESA { unsigned int m_maxNpvTrigger; /* Monitor track parameters */ - void monitor_tracks(std::string prefix, std::string suffix, std::vector<const T2Track*> tracks ); + void monitor_tracks(const std::string& prefix, const std::string& suffix, const std::vector<T2Track>& tracks ) const; /* Monitor cluster parameters */ - void monitor_cluster( const T2TrackClusterer& clusterer ); + void monitor_cluster( const T2TrackClusterer& clusterer ) const; /* Monitor parameters of tracks inside the cluster */ - void monitor_cluster_tracks(T2TrackClusterer& clusterer, const Trk::Track & track ); + void monitor_cluster_tracks(T2TrackClusterer& clusterer, const Trk::Track & track ) const; /* Monitor vertex parameters */ - void monitor_vertex(std::string prefix, std::string suffix, const T2Vertex &vertex ); + void monitor_vertex(const std::string& prefix, const std::string& suffix, const T2Vertex &vertex ) const; + + std::string m_vertexCollName; private: ToolHandle<GenericMonitoringTool> m_monTool{this,"MonTool","","Monitoring tool"}; + + }; diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.cxx index 61fff1f119d36e2a0e744dc78e3ccaf4f8924340..7dd0bfef22f3514c6eb390438247220bfe06f838 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.cxx @@ -12,19 +12,6 @@ namespace PESA { - double trackChi2Prob( const T2Track& track ) - { - // FIXME: unify with vertexChi2Prob() - double chi2Prob = 0.; - const int ndf = track.NDF(); - const double chi2 = track.Qual() * track.NDF(); - if ( ndf > 0 && chi2 > 0. && ! std::isinf( chi2 ) ) - { - chi2Prob = TMath::Prob(chi2,ndf); - } - return chi2Prob; - } - std::ostream& operator<<( std::ostream& os, const T2Track& track ) { diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.h index 082d937fd6abb97c33785160956f005362ba51f1..08a9f9f9e50189e5a69f3ff7caff93b6acc2e2fe 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2Track.h @@ -16,7 +16,7 @@ #ifndef TRIGT2BEAMSPOT_T2TRACK_H #define TRIGT2BEAMSPOT_T2TRACK_H /// Externals -#include "TrkTrack/Track.h" +#include "TrkTrack/Track.h" #include "TrkTrackSummary/TrackSummary.h" #include "TrigInterfaces/IMonitoredAlgo.h" #include "GaudiKernel/SystemOfUnits.h" @@ -26,86 +26,87 @@ #include <vector> #include <cmath> #include <iostream> - +#include "TMath.h" namespace PESA { class T2Track; - double trackChi2Prob( const T2Track& track ); - class T2Track { public: // Constructor T2Track( const Trk::Track& track ) - : m_Chi2Prob( -1. ) // lazy evaluation - { - - const Trk::TrackParameters* trackPars = track.perigeeParameters(); - if (trackPars) { - m_D0 = trackPars->parameters()[Trk::d0]; - m_Z0 = trackPars->parameters()[Trk::z0]; - if (trackPars->covariance()) { - m_D0err = Amg::error(*(trackPars->covariance()),Trk::d0); - m_Z0err = Amg::error(*(trackPars->covariance()),Trk::z0); + { + + const Trk::TrackParameters* trackPars = track.perigeeParameters(); + if (trackPars) { + m_D0 = trackPars->parameters()[Trk::d0]; + m_Z0 = trackPars->parameters()[Trk::z0]; + if (trackPars->covariance()) { + m_D0err = Amg::error(*(trackPars->covariance()),Trk::d0); + m_Z0err = Amg::error(*(trackPars->covariance()),Trk::z0); + } + m_Phi = trackPars->parameters()[Trk::phi0]; + float theta = trackPars->parameters()[Trk::theta]; + m_Eta = -log(tan(0.5*theta)); + float qOverP = trackPars->parameters()[Trk::qOverP]; + m_Pt = std::abs(std::sin(theta)/qOverP)/Gaudi::Units::GeV; + + const Trk::FitQuality* fq = track.fitQuality(); + m_Qual = 1e8; + if (fq) { + if(fq->numberDoF()!=0) { + m_Qual = fq->chiSquared()/fq->numberDoF(); } - m_Phi = trackPars->parameters()[Trk::phi0]; - float theta = trackPars->parameters()[Trk::theta]; - m_Eta = -log(tan(0.5*theta)); - float qOverP = trackPars->parameters()[Trk::qOverP]; - m_Pt = std::abs(std::sin(theta)/qOverP)/Gaudi::Units::GeV; - - const Trk::FitQuality* fq = track.fitQuality(); - m_Qual = 1e8; - //m_NDF = 0; - if (fq) { - if(fq->numberDoF()!=0) { - m_Qual = fq->chiSquared()/fq->numberDoF(); - //m_NDF = fq->numberDoF() - 5;//Remove 5 helix parameters + } + int nPix=0; + int nSct=0; + if( track.trackSummary() != nullptr){ + nPix = track.trackSummary()->get(Trk::numberOfPixelHits); + nSct = track.trackSummary()->get(Trk::numberOfSCTHits); + } else { + for(auto tSOS = track.trackStateOnSurfaces()->begin(); + tSOS!=track.trackStateOnSurfaces()->end(); ++tSOS) { + if ((*tSOS)->type(Trk::TrackStateOnSurface::Perigee) == false) { + const Trk::FitQualityOnSurface* fq = (*tSOS)->fitQualityOnSurface(); + if(!fq) continue; + int nd = fq->numberDoF(); + if(nd==2) nPix++; + if(nd==1) nSct++; } } - int nPix=0; - int nSct=0; - if( track.trackSummary() != nullptr){ - nPix = track.trackSummary()->get(Trk::numberOfPixelHits); - nSct = track.trackSummary()->get(Trk::numberOfSCTHits); - } else { - for(auto tSOS = track.trackStateOnSurfaces()->begin(); - tSOS!=track.trackStateOnSurfaces()->end(); ++tSOS) { - if ((*tSOS)->type(Trk::TrackStateOnSurface::Perigee) == false) { - const Trk::FitQualityOnSurface* fq = (*tSOS)->fitQualityOnSurface(); - if(!fq) continue; - int nd = fq->numberDoF(); - if(nd==2) nPix++; - if(nd==1) nSct++; - } - } - } - m_PIXHits = nPix; - m_SCTHits = nSct/2; - m_SiHits = m_PIXHits + m_SCTHits; - m_NDF = (m_PIXHits + m_SCTHits)*2 - 5; - m_TRTHits = 0; //for now: FTF tracks have no TRT extension in any case } + m_PIXHits = nPix; + m_SCTHits = nSct/2; + m_SiHits = m_PIXHits + m_SCTHits; + m_NDF = (m_PIXHits + m_SCTHits)*2 - 5; + m_TRTHits = 0; //for now: FTF tracks have no TRT extension in any case } + m_Chi2Prob = -1; + const double chi2 = m_Qual * m_NDF; + if ( m_NDF > 0 && chi2 > 0. && ! std::isinf( chi2 ) ) + { + m_Chi2Prob = TMath::Prob(chi2,m_NDF); + } + } // Accessors - double Pt () const { return m_Pt ; } - double Eta () const { return m_Eta ; } - double Phi () const { return m_Phi ; } - double Z0 () const { return m_Z0 ; } - double D0 () const { return m_D0 ; } - double Z0err () const { return m_Z0err ; } - double D0err () const { return m_D0err ; } - double NDF () const { return m_NDF ; } - double Qual () const { return m_Qual ; } - double Chi2Prob() const { if ( m_Chi2Prob < 0. ) m_Chi2Prob = trackChi2Prob( *this ); return m_Chi2Prob ; } - int SiHits () const { return m_SiHits ; } - int PIXHits () const { return m_PIXHits; } - int SCTHits () const { return m_SCTHits; } - int TRTHits () const { return m_TRTHits; } + double Pt () const { return m_Pt ; } + double Eta () const { return m_Eta ; } + double Phi () const { return m_Phi ; } + double Z0 () const { return m_Z0 ; } + double D0 () const { return m_D0 ; } + double Z0err () const { return m_Z0err ; } + double D0err () const { return m_D0err ; } + double NDF () const { return m_NDF ; } + double Qual () const { return m_Qual ; } + double Chi2Prob() const { return m_Chi2Prob; } + int SiHits () const { return m_SiHits ; } + int PIXHits () const { return m_PIXHits ; } + int SCTHits () const { return m_SCTHits ; } + int TRTHits () const { return m_TRTHits ; } private: // Data members @@ -118,7 +119,7 @@ namespace PESA { double m_D0err; double m_NDF; double m_Qual; - mutable std::atomic<double> m_Chi2Prob; + double m_Chi2Prob; int m_SiHits; int m_PIXHits; int m_SCTHits; @@ -147,8 +148,8 @@ namespace PESA { m_D0 .push_back( track.D0 () ); m_Z0err .push_back( track.Z0err () ); m_D0err .push_back( track.D0err () ); - m_NDF .push_back( track.NDF () ); - m_Qual .push_back( track.Qual () ); + m_NDF .push_back( track.NDF () ); + m_Qual .push_back( track.Qual () ); m_Chi2Prob.push_back( track.Chi2Prob() ); m_SiHits .push_back( track.SiHits () ); m_PIXHits .push_back( track.PIXHits () ); diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.cxx index eb52dabe40b5318365c5743b929fa09e02244f43..f4d3d44de7d12a53da2810551dcfa9985dee898a 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.cxx @@ -29,26 +29,11 @@ using std::abs; using namespace PESA; -// Not much to do here now, will eventually init the config parameters -T2TrackManager::T2TrackManager( int nSplit, Algorithm alg ) - // Fill the defaults - : m_nSplit ( nSplit ) - , m_alg ( alg ) - , m_altKey ( -1 ) - //, m_ordKey ( 0 ) -{ -} - - -// Will have to clean up after myself here -T2TrackManager::~T2TrackManager() -{ -} - // The meat of the class, return a vector of split clusters std::vector< ConstDataVector<TrackCollection> > -T2TrackManager::split( const TrackCollection& cluster ) +T2TrackManager::split( const TrackCollection& cluster, const EventContext& ctx ) const { + int key = ctx.eventID().event_number() %2 -1; const int nEntries = cluster.size(); //std::cout << "Reserve space" << std::endl; @@ -69,9 +54,9 @@ T2TrackManager::split( const TrackCollection& cluster ) // tracks in the 1st collection int nPos = 0; if (m_alg == Alternating) - nPos = alternatingSplit(); + nPos = alternatingSplit(key); else if (m_alg == Pt) - nPos = orderedSplit(nEntries); + nPos = orderedSplit(key, nEntries); // Add the track to the appropriate collection trackCollections[nPos].push_back(*c_itr); @@ -82,18 +67,16 @@ T2TrackManager::split( const TrackCollection& cluster ) } -int -T2TrackManager::alternatingSplit() +constexpr int T2TrackManager::alternatingSplit(int key) const { - ++m_altKey; - m_altKey %= m_nSplit; - return m_altKey; + ++key; + key %= m_nSplit; + return key; } -int -T2TrackManager::orderedSplit(const int nEntries) +constexpr int T2TrackManager::orderedSplit(int key, const int nEntries) const { - ++m_altKey; - return m_altKey * m_nSplit / nEntries; + ++key; + return key * m_nSplit / nEntries; } diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.h b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.h index 1a2c44aa5a8d5813ebb5c0736216a50cf5c45857..d7a238629b9087652050809e440ebaeb479e2a11 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.h +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2TrackManager.h @@ -37,34 +37,18 @@ namespace PESA // List of the splitter algorithms enum Algorithm { Alternating, Pt, Phi, NorthSouth, Charge }; - // Constructor/Destructor - T2TrackManager( int nSplit = 2, Algorithm alg = Alternating ); - - ~T2TrackManager(); - // Return a vector of sub-clusters - std::vector< ConstDataVector<TrackCollection> > split( const TrackCollection& cluster); + std::vector< ConstDataVector<TrackCollection> > split(const TrackCollection& cluster, const EventContext& ctx) const; - // Get and Set parameters - // int GetNSplit() {return m_nSplit;} - // int GetAlg() {return m_alg;} - // void SetNSplit(int nSplit) {m_nSplit = nSplit;} - // void SetAlg(int alg) {m_alg = alg;} - void ResetKey(int key = -1) { m_altKey = key;} - private: // The splitter algorithms - int alternatingSplit(); // 1 for me, 1 for you, 2 for me, ... - int orderedSplit(int nEntries); // 1, 2, 3 for me, 1, 2, 3 for you ... + constexpr int alternatingSplit(int key) const; // 1 for me, 1 for you, 2 for me, ... + constexpr int orderedSplit(int key, int nEntries) const; // 1, 2, 3 for me, 1, 2, 3 for you ... /// Data members - int m_nSplit; // How many output clusters - int m_alg; // Which algorithm to use - - /// Algorithm helper objects - int m_altKey; // Alternating split key - //int m_ordKey; // Ordered split key + int m_nSplit = 2; // How many output clusters + int m_alg = Alternating; // Which algorithm to use }; } //PESA diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx index b64d686df2874d185416c142e3618648d6e94e9c..0ed455d0a96ba7c7a161ba52530945b532a66198 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpot.cxx @@ -104,19 +104,14 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, // Start the overall timer auto tTotal = Monitored::Timer("TIME_TotalTime"); - //Reset monitored variables from previous event - m_beamSpotTool->resetMonitoredVariables(); - // Initialize booleans for event stats - m_beamSpotTool->m_eventStageFlag = std::vector<bool>( numStatistics, false ); - m_beamSpotTool->eventStage( allInput ); - // Initialize vertex collections TrigVertexCollection myVertexCollection; DataVector< TrigVertexCollection > mySplitVertexCollections; // Be optimistic HLT::ErrorCode errorCode = HLT::OK; - + unsigned int nPassVtx = 0; + const EventContext& ctx = Algorithm::getContext(); // Process event - break to do cleanup before returning do { @@ -128,8 +123,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, } else ATH_MSG_DEBUG( "Number of input TEs = " << tes_in.size() ); - m_beamSpotTool->eventStage( hasTE ); - //----------------- // Track selection @@ -225,20 +218,16 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, - m_beamSpotTool->eventStage( hasSeedTrack ); - // Check for the total number of available tracks if( m_beamSpotTool->notEnoughTracks( nSelectedTracks ) ){ ATH_MSG_DEBUG( " Not enough total passed tracks to vertex"); break; } - m_beamSpotTool->eventStage( enoughTracks ); - //----------------------- // Vertex reconstruction // Cluster tracks in z around seed track and reconstruct vertices - m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, myVertexCollection, mySplitVertexCollections ); + nPassVtx = m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, myVertexCollection, mySplitVertexCollections, ctx ); } while (false); @@ -258,9 +247,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, HLT::TEVec allTEs = getAllTEs(tes_in); ATH_MSG_DEBUG( "n of all TEs: " << allTEs.size() ); - //Check how many vertices passed the selection - unsigned int nPassedVtx = m_beamSpotTool->m_NvtxPass; - //Save all events, or only those events which pass the Npv cuts (if activated)! if ( m_activateAllTE ) { ATH_MSG_DEBUG( "Activate all TEs" ); @@ -270,10 +256,10 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, } - if ( ! m_activateAllTE && m_activateTE && nPassedVtx > 0 ) { - ATH_MSG_DEBUG( "Activate TE with "<< nPassedVtx << " vertices" ); + if ( ! m_activateAllTE && m_activateTE && nPassVtx > 0 ) { + ATH_MSG_DEBUG( "Activate TE with "<< nPassVtx << " vertices" ); // FIXME: Why do we need one TE per vertex? - for ( unsigned i=0; i < nPassedVtx; ++i ) { + for ( unsigned i=0; i < nPassVtx; ++i ) { // Create an output TE seeded by the inputs HLT::TriggerElement* outputTE = config()->getNavigation()->addNode(allTEs, type_out); outputTE->setActiveState(true); @@ -299,10 +285,6 @@ HLT::ErrorCode T2VertexBeamSpot::hltExecute( std::vector< HLT::TEVec >& tes_in, - //Monitoring eventStatistics - auto eventStatistics = Monitored::Collection("EventStatistics", m_beamSpotTool->m_eventStage ); - auto mon = Monitored::Group(m_monTool, eventStatistics, timeToCreateOutput ); - // Return cause you're done! return errorCode; } @@ -418,25 +400,10 @@ StatusCode T2VertexBeamSpot::execute(){ ATH_MSG_DEBUG( "Beam spot algorithm execute method" ); - - - //Reset monitored variables from previous event - m_beamSpotTool->resetMonitoredVariables(); - // Initialize booleans for event stats - m_beamSpotTool->m_eventStageFlag = std::vector<bool>( numStatistics, false ); - m_beamSpotTool->eventStage( allInput ); - const EventContext& ctx = Algorithm::getContext(); - ATH_MSG_DEBUG( "Run: " << ctx.eventID().run_number() << - " Event Number: " << ctx.eventID().event_number() << - " Lumi Block: " << ctx.eventID().lumi_block() << - " Bunch Crossing ID " << ctx.eventID().bunch_crossing_id() ); - - //Pass event ID for vertex splitting alg, TODO: need to revisit - m_beamSpotTool->m_EventID = ctx.eventID().event_number() ; //// Initialize vertex collections - SG::WriteHandle<TrigVertexCollection> myVertexCollection(m_outputVertexCollectionKey); + SG::WriteHandle<TrigVertexCollection> myVertexCollection(m_outputVertexCollectionKey, ctx); myVertexCollection = std::make_unique<TrigVertexCollection>(); //Need to convert to the write handles @@ -452,7 +419,6 @@ StatusCode T2VertexBeamSpot::execute(){ unsigned nHighPtTracks = 0; ATH_MSG_DEBUG( "Selecting tracks" ); - //Loop over trackCollections { //Monitor how long does it take to loop over all collections auto tSelectingTracks = Monitored::Timer("TIME_SelectingTracks"); @@ -462,7 +428,7 @@ StatusCode T2VertexBeamSpot::execute(){ auto nTotalPassedTracks = Monitored::Scalar<unsigned>("nTotalPassedTracks"); auto nTotalHighPTTracks = Monitored::Scalar<unsigned>("nTotalHighPTTracks"); //Loop over track collections and select tracks - SG::ReadHandle<TrackCollection> trackCollection (m_trackCollectionKey); + SG::ReadHandle<TrackCollection> trackCollection (m_trackCollectionKey, ctx); ATH_CHECK(trackCollection.isValid()); //Dereference tracks @@ -494,37 +460,28 @@ StatusCode T2VertexBeamSpot::execute(){ return StatusCode::SUCCESS; } - m_beamSpotTool->eventStage( hasSeedTrack ); - // Check for the total number of available tracks if ( ( m_beamSpotTool->notEnoughTracks(nSelectedTracks)) ) { ATH_MSG_DEBUG( "Not enough total passed tracks to vertex"); return StatusCode::SUCCESS; } - m_beamSpotTool->eventStage( enoughTracks ); - ATH_MSG_DEBUG( "Reconstruct vertices" ); //Reconstruct vertices if passed track selection { //Monitor how long does it take to loop over all collections auto tReconstructVertices = Monitored::Timer("TIME_ReconstructVertices"); - m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, *myVertexCollection, mySplitVertexCollections ); + m_beamSpotTool->reconstructVertices( mySelectedTrackCollection, *myVertexCollection, mySplitVertexCollections, ctx ); //Monitor total number of tracks auto monitor = Monitored::Group(m_monTool, tReconstructVertices); } - //Do i want to call createOutputTEs even if the conditions are not fulfilled? ATH_MSG_DEBUG( "Number of track collection containers: " << mySelectedTrackCollection.size() ); //What should go as an output? SelectedTrackCollection and Vertices? //Atm just try add vertex //TODO: adding split vertices as well, will need an array - - //Monitoring eventStatistics - auto eventStatistics = Monitored::Collection("EventStatistics", m_beamSpotTool->m_eventStage ); - auto monitor = Monitored::Group(m_monTool, eventStatistics, tTotal); return StatusCode::SUCCESS; } diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx index e0e9a225143bfc6df2a9cb1e4f4dbde114558186..81e8fda7e0e0204d5b6cb99acfb800d5167c2ee1 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/T2VertexBeamSpotTool.cxx @@ -42,16 +42,6 @@ using std::abs; using namespace PESA; -//Delete a vector of dynamically created objects -template<typename T> -void deleteVector(std::vector<T*> &v){ - while(!v.empty()){ - delete v.back(); - v.pop_back(); - } - v.clear(); -} - namespace Beamspot { class TrackPTSort{ @@ -81,7 +71,6 @@ PESA::T2VertexBeamSpotTool::T2VertexBeamSpotTool( const std::string& type, const : AthAlgTool( type, name, parent), m_primaryVertexFitterTool("TrigInDetToolInterfaces/ITrigPrimaryVertexFitter", this){ - declareInterface<IT2VertexBeamSpotTool>(this); //Declare properties in here declareProperty( "BeamSpotData", m_beamSpotKey ); declareProperty( "PrimaryVertexFitter", m_primaryVertexFitterTool); @@ -165,7 +154,7 @@ StatusCode T2VertexBeamSpotTool::initialize(){ * Detailed description of the select track function ***********************************************/ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, - ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) { + ConstDataVector<TrackCollection>& mySelectedTrackCollection, std::vector<unsigned> &trackCounter ) const { ATH_MSG_DEBUG( "Selecting tracks for the beamSpot algorithm" ); @@ -177,7 +166,7 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, auto nHiPTTracksPassedPerROI = Monitored::Scalar<unsigned>("SelectedHiPTTracksPerROI", 0); //T2Track with easily accesable parameters - std::vector<const T2Track*> myTracks; myTracks.reserve(trackCollection->size() ); + std::vector<T2Track> myTracks; myTracks.reserve(trackCollection->size() ); // Loop over all tracks in the given track collections for ( TrackCollection::const_iterator trackIter = trackCollection->begin(); @@ -186,13 +175,12 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, const Trk::Track& track = **trackIter; // Make sure that the event has tracks - eventStage( hasTracks ); //Counter for all input tracks nTracksPerROI++; - const T2Track *myTrack = new T2Track( track ); + T2Track myTrack( track ); // Check for passed track - if ( isGoodTrack( *myTrack ) ) { + if ( isGoodTrack( myTrack ) ) { // Add this track to the set used to find a vertex mySelectedTrackCollection.push_back( *trackIter ); @@ -203,22 +191,22 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, nTracksPassedPerROI++; // Check for high-pT track - if ( myTrack->Pt() > m_trackSeedPt ){ + if ( myTrack.Pt() > m_trackSeedPt ){ //Counter for high pT tracks nHiPTTracksPassedPerROI++; } - else ATH_MSG_DEBUG( "Track->pt: " << myTrack->Pt()*GeV ); + else ATH_MSG_DEBUG( "Track.pt: " << myTrack.Pt()*GeV ); } else { - ATH_MSG_DEBUG( "Track->failed selection: d0: " << myTrack->D0() << - " z0: " << myTrack->Z0() << - " phi0: " << myTrack->Phi() << - " eta: " << myTrack->Eta() << - " pT: " << myTrack->Pt()*GeV << - " chi2: " << myTrack->Qual() << - " NpixSPs: " << myTrack->PIXHits() << - " NsctSPs: " << myTrack->SCTHits() << - " NstrawHits: " << myTrack->TRTHits() ); + ATH_MSG_DEBUG( "Track.failed selection: d0: " << myTrack.D0() << + " z0: " << myTrack.Z0() << + " phi0: " << myTrack.Phi() << + " eta: " << myTrack.Eta() << + " pT: " << myTrack.Pt()*GeV << + " chi2: " << myTrack.Qual() << + " NpixSPs: " << myTrack.PIXHits() << + " NsctSPs: " << myTrack.SCTHits() << + " NstrawHits: " << myTrack.TRTHits() ); } } //end for loop over tracks in a collection @@ -236,14 +224,12 @@ void T2VertexBeamSpotTool::selectTracks( const TrackCollection* trackCollection, //Monitor counters per track collection and time to select tracks auto mon = Monitored::Group(m_monTool, nTracksPerROI, nTracksPassedPerROI, nHiPTTracksPassedPerROI, timerTrackSelection ); //timers - //clear tracks - deleteVector( myTracks ); } -void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, +unsigned int T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection>& mySelectedTrackCollection, TrigVertexCollection& myVertexCollection, - DataVector< TrigVertexCollection >& mySplitVertexCollections) { + DataVector< TrigVertexCollection >& mySplitVertexCollections, const EventContext& ctx) const { ATH_MSG_DEBUG( "Reconstructing vertices" ); //Monitoring counters and timers @@ -309,7 +295,6 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> } // Event has a good cluster - eventStage( hasCluster ); nClusters++; // Monitor properties of of the cluster @@ -339,14 +324,11 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> continue; } - // Event has a vertex! - eventStage( hasVertex ); - // Update vertex counter nVtx++; // Extract beam spot parameters - SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey }; + SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx }; T2BeamSpot beamSpot(*beamSpotHandle); @@ -369,10 +351,7 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> // Add primary vertex to collection myVertexCollection.push_back( primaryVertex ); // passes ownership to vertex collection - // Event has good vertex - eventStage( hasGoodVertex ); - - //Monito parameters of the passed vertex + //Monitor parameters of the passed vertex monitor_vertex( "Vertex", "Pass", myVertex ); //Update good vertex counter @@ -405,7 +384,7 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> { // Split, optinally re-cluster, and fit separate vertices ATH_MSG_DEBUG( "Reconstruct split vertices"); - reconstructSplitVertices( mySplitTrackCollection, mySplitVertexCollections, trackClusterer ); + reconstructSplitVertices( mySplitTrackCollection, mySplitVertexCollections, trackClusterer, ctx ); } // Alternative 3: Split all the tracks and iterate with the remaining tracks // mySplitTrackCollection = mySelectedTrackCollection; @@ -426,19 +405,15 @@ void T2VertexBeamSpotTool::reconstructVertices( ConstDataVector<TrackCollection> }//End looping over tracks - //Store flag whether the nvtx passed trig cuts - m_passNpvTrigCuts = (m_minNpvTrigger <= nPassVtx) && (nPassVtx <= m_maxNpvTrigger); - //Keep the track of how many vertices passed the selection - m_NvtxPass = nPassVtx; - //monitor number of (passed) vertices, clusters, etc auto mon = Monitored::Group(m_monTool, nVtx, nPassVtx, nPassBCIDVtx, nClusters, timerVertexRec ); + return static_cast<unsigned int>(nPassVtx); } void T2VertexBeamSpotTool::reconstructSplitVertices( ConstDataVector<TrackCollection>& myFullTrackCollection, DataVector< TrigVertexCollection >& mySplitVertexCollections, - T2TrackClusterer& trackClusterer ) { + T2TrackClusterer& trackClusterer, const EventContext& ctx ) const { auto timerVertexRec = Monitored::Timer("TIME_SplitVertexReconstruction"); @@ -449,10 +424,8 @@ void T2VertexBeamSpotTool::reconstructSplitVertices( ConstDataVector<TrackCollec auto mon = Monitored::Group(m_monTool, timeToSortTracks ); } - // Split the track collection (typically into halves) // This returns m_nSplitVertices (ideally) or fewer (if clustering fails) track collections - m_trackManager.ResetKey( m_EventID % 2 - 1 ); - vector< ConstDataVector<TrackCollection> > splitTrackCollections = m_trackManager.split( *myFullTrackCollection.asDataVector() ); + vector< ConstDataVector<TrackCollection> > splitTrackCollections = m_trackManager.split( *myFullTrackCollection.asDataVector(), ctx ); // Add a new track collection for the split vertices corresponding to this primary vertex // There can be anywhere between zero and m_nSplitVertices entries in the collection @@ -582,38 +555,29 @@ bool T2VertexBeamSpotTool::isGoodVertexBCID( const T2Vertex& vertex ) const { ); } -void T2VertexBeamSpotTool::resetMonitoredVariables() { - if(m_eventStageFlag.size() != 0 ) m_eventStageFlag.clear(); - if(m_eventStage.size() != 0 ) m_eventStage.clear(); - //Reset all variables just in case - m_NvtxPass = 0; - m_passNpvTrigCuts = false; - -} - //Monitoring track variables -void T2VertexBeamSpotTool::monitor_tracks(std::string prefix, std::string suffix, std::vector<const T2Track*> tracks ){ - auto trackPt = Monitored::Collection( prefix + "Pt" + suffix, tracks, [](const T2Track *t){ return t->Pt() ;}); - auto trackEta = Monitored::Collection( prefix + "Eta" + suffix, tracks, [](const T2Track *t){ return t->Eta() ;}); - auto trackPhi = Monitored::Collection( prefix + "Phi" + suffix, tracks, [](const T2Track *t){ return t->Phi() ;}); - auto trackZ0 = Monitored::Collection( prefix + "Z0" + suffix, tracks, [](const T2Track *t){ return t->Z0() ;}); - auto trackD0 = Monitored::Collection( prefix + "D0" + suffix, tracks, [](const T2Track *t){ return t->D0() ;}); - auto trackZ0err = Monitored::Collection( prefix + "Z0err" + suffix, tracks, [](const T2Track *t){ return t->Z0err() ;}); - auto trackD0err = Monitored::Collection( prefix + "D0err" + suffix, tracks, [](const T2Track *t){ return t->D0err() ;}); - auto trackNDF = Monitored::Collection( prefix + "NDF" + suffix, tracks, [](const T2Track *t){ return t->NDF() ;}); - auto trackQual = Monitored::Collection( prefix + "Qual" + suffix, tracks, [](const T2Track *t){ return t->Qual() ;}); - auto trackChi2Prob= Monitored::Collection( prefix + "Chi2Prob" + suffix, tracks, [](const T2Track *t){ return t->Chi2Prob();}); - auto trackSiHits = Monitored::Collection( prefix + "SiHits" + suffix, tracks, [](const T2Track *t){ return t->SiHits() ;}); - auto trackPiHits = Monitored::Collection( prefix + "PIXHits" + suffix, tracks, [](const T2Track *t){ return t->PIXHits() ;}); - auto trackSCTHits = Monitored::Collection( prefix + "SCTHits" + suffix, tracks, [](const T2Track *t){ return t->SCTHits() ;}); - auto trackTRTHits = Monitored::Collection( prefix + "TRTHits" + suffix, tracks, [](const T2Track *t){ return t->TRTHits() ;}); +void T2VertexBeamSpotTool::monitor_tracks(const std::string& prefix, const std::string& suffix, const std::vector<T2Track>& tracks ) const { + auto trackPt = Monitored::Collection( prefix + "Pt" + suffix, tracks, [](const T2Track t){ return t.Pt() ;}); + auto trackEta = Monitored::Collection( prefix + "Eta" + suffix, tracks, [](const T2Track t){ return t.Eta() ;}); + auto trackPhi = Monitored::Collection( prefix + "Phi" + suffix, tracks, [](const T2Track t){ return t.Phi() ;}); + auto trackZ0 = Monitored::Collection( prefix + "Z0" + suffix, tracks, [](const T2Track t){ return t.Z0() ;}); + auto trackD0 = Monitored::Collection( prefix + "D0" + suffix, tracks, [](const T2Track t){ return t.D0() ;}); + auto trackZ0err = Monitored::Collection( prefix + "Z0err" + suffix, tracks, [](const T2Track t){ return t.Z0err() ;}); + auto trackD0err = Monitored::Collection( prefix + "D0err" + suffix, tracks, [](const T2Track t){ return t.D0err() ;}); + auto trackNDF = Monitored::Collection( prefix + "NDF" + suffix, tracks, [](const T2Track t){ return t.NDF() ;}); + auto trackQual = Monitored::Collection( prefix + "Qual" + suffix, tracks, [](const T2Track t){ return t.Qual() ;}); + auto trackChi2Prob= Monitored::Collection( prefix + "Chi2Prob" + suffix, tracks, [](const T2Track t){ return t.Chi2Prob();}); + auto trackSiHits = Monitored::Collection( prefix + "SiHits" + suffix, tracks, [](const T2Track t){ return t.SiHits() ;}); + auto trackPiHits = Monitored::Collection( prefix + "PIXHits" + suffix, tracks, [](const T2Track t){ return t.PIXHits() ;}); + auto trackSCTHits = Monitored::Collection( prefix + "SCTHits" + suffix, tracks, [](const T2Track t){ return t.SCTHits() ;}); + auto trackTRTHits = Monitored::Collection( prefix + "TRTHits" + suffix, tracks, [](const T2Track t){ return t.TRTHits() ;}); auto mon = Monitored::Group(m_monTool, trackPt, trackEta, trackPhi, trackZ0, trackD0, trackZ0err, trackD0err, trackNDF, trackQual, trackChi2Prob, trackSiHits, trackPiHits, trackSCTHits, trackTRTHits ); } -void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ){ +void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ) const { auto clusterZ = Monitored::Scalar<double>("ClusterZ", clusterer.seedZ0() ); auto clusterNtracks = Monitored::Scalar<int>("ClusterZ", clusterer.cluster().size() ); auto clusterNUnusedTracks = Monitored::Scalar<int>("ClusterZ", clusterer.unusedTracks().size() ); @@ -622,7 +586,7 @@ void T2VertexBeamSpotTool::monitor_cluster( const T2TrackClusterer& clusterer ) } -void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, const Trk::Track &track ){ +void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, const Trk::Track &track ) const { const double deltaZ0 = track.perigeeParameters()->parameters()[Trk::z0] - clusterer.seedZ0(); const AmgSymMatrix(5)& perigeeCov = *track.perigeeParameters()->covariance(); const double z0Error = std::sqrt(perigeeCov(Trk::z0,Trk::z0)); @@ -635,7 +599,7 @@ void T2VertexBeamSpotTool::monitor_cluster_tracks(T2TrackClusterer &clusterer, c -void T2VertexBeamSpotTool::monitor_vertex(std::string prefix, std::string suffix, const T2Vertex &vertex ){ +void T2VertexBeamSpotTool::monitor_vertex(const std::string& prefix, const std::string& suffix, const T2Vertex &vertex ) const { auto ntrk = Monitored::Scalar<int> ( prefix + "NTrks" + suffix, vertex.NTrks() ); auto sumpt = Monitored::Scalar<double>( prefix + "SumPt" + suffix, vertex.SumPt() ); @@ -662,13 +626,4 @@ void T2VertexBeamSpotTool::monitor_vertex(std::string prefix, std::string suffix -bool T2VertexBeamSpotTool::eventStage( Statistics stage ) { - if ( ! m_eventStageFlag[ stage ] ) - { - m_eventStageFlag[ stage ] = true; - m_eventStage.push_back( stage ); - return true; - } - return false; -} diff --git a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/components/TrigT2BeamSpot_entries.cxx b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/components/TrigT2BeamSpot_entries.cxx index 37ef18d64c355899d1e85bd409ef5ee4980ceb3f..e096e800861ba4ff758ff19abf5026221f0d2ddf 100644 --- a/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/components/TrigT2BeamSpot_entries.cxx +++ b/Trigger/TrigAlgorithms/TrigT2BeamSpot/src/components/TrigT2BeamSpot_entries.cxx @@ -1,4 +1,3 @@ -#include "TrigT2BeamSpot/IT2VertexBeamSpotTool.h" #include "TrigT2BeamSpot/T2VertexBeamSpotTool.h" #include "TrigT2BeamSpot/T2VertexBeamSpot.h" diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py b/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py index 77db9d229e7cc80f05a2e5d31c9cc77973f3a990..57d1afa11ea9e9da000b41948e2f28265533bd90 100644 --- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py +++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/share/testDataAccessService.py @@ -39,10 +39,6 @@ if TriggerFlags.doCalo: - #topSequence += algo - #from TrigUpgradeTest.TestUtils import L1DecoderTest - #l1DecoderTest=L1DecoderTest() - #topSequence+=l1DecoderTest from L1Decoder.L1DecoderConfig import mapThresholdToL1RoICollection diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_only_build.sh b/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_only_build.sh index 7ab73ae454100ac33f7d6ca1e861c557e74d710f..06075bbc812ed91331814585f362b9007b4a3080 100755 --- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_only_build.sh +++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_only_build.sh @@ -1,17 +1,6 @@ #!/bin/bash -# art-description: athenaMT trigger test with only calo algorithms -# art-type: build -# art-include: master/Athena -# Skipping art-output which has no effect for build tests. -# If you create a grid version, check art-output in existing grid tests. -export EVENTS=20 -export THREADS=1 -export SLOTS=1 -export JOBOPTION="TrigT2CaloCommon/Calo.py" +# athena.py --imf --evtMax 20 --threads 1 --concurrent-events 1 --filesInput /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00360026.physics_EnhancedBias.merge.RAW._lb0151._SFO-1._0001.1 TrigT2CaloCommon/Calo.py -# Skip dumping chain counts because this test doesn't produce the histogram including them -export SKIP_CHAIN_DUMP=1 - -source exec_TrigUpgradeTest_art_athenaMT.sh -source exec_TrigUpgradeTest_art_post.sh +# uncomment the line above and remove this message to restore the test after the job opts are fixed +echo "test disabled temporarily" diff --git a/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_ringer_only_build.sh b/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_ringer_only_build.sh index 1de726f2d480b1e0fb965ac05fae709753098312..f67fd889774b30163f5e64c863ce351c72ed6a70 100755 --- a/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_ringer_only_build.sh +++ b/Trigger/TrigAlgorithms/TrigT2CaloCommon/test/test_t2calo_ringer_only_build.sh @@ -1,17 +1,6 @@ #!/bin/bash -# art-description: athenaMT trigger test running only ringer -# art-type: build -# art-include: master/Athena -# Skipping art-output which has no effect for build tests. -# If you create a grid version, check art-output in existing grid tests. -export EVENTS=20 -export THREADS=1 -export SLOTS=1 -export JOBOPTION="TrigT2CaloCommon/CaloRinger.py" +# athena.py --imf --evtMax 20 --threads 1 --concurrent-events 1 --filesInput /cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00360026.physics_EnhancedBias.merge.RAW._lb0151._SFO-1._0001.1 TrigT2CaloCommon/CaloRinger.py -# Skip dumping chain counts because this test doesn't produce the histogram including them -export SKIP_CHAIN_DUMP=1 - -source exec_TrigUpgradeTest_art_athenaMT.sh -source exec_TrigUpgradeTest_art_post.sh +# uncomment the line above and remove this message to restore the test after the job opts are fixed +echo "test disabled temporarily" diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat index af653dea2a8bd78b78d1fb1f5b97e4984eed9a53..647b7c9e1142b9216bd7be09d91c5ffa4cf9be69 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat @@ -15,9 +15,13 @@ testChains = { "HLT_e5_etcut_L1EM3:HLT_IDTrack_Electron_IDTrig", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF", + "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF:HLT_Roi_TauCore", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauIso_FTF", + "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauIso_FTF:HLT_Roi_TauIso", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_FTF", + "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_FTF:HLT_TAURoI", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_IDTrig", + "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_IDTrig:HLT_TAURoI", "HLT_j45_ftf_subjesgscIS_boffperf_split_L1J20:HLT_IDTrack_Bjet_FTF", "HLT_j45_ftf_subjesgscIS_boffperf_split_L1J20:HLT_IDTrack_Bjet_IDTrig", diff --git a/Trigger/TrigConfiguration/TrigConfigSvc/src/TrigConfJobOptionsSvc.cxx b/Trigger/TrigConfiguration/TrigConfigSvc/src/TrigConfJobOptionsSvc.cxx index c8e05bdd091ce426e82e6ee174f8526ce82daa74..bdde244e657e12f7d9adde501dedb8775c157078 100644 --- a/Trigger/TrigConfiguration/TrigConfigSvc/src/TrigConfJobOptionsSvc.cxx +++ b/Trigger/TrigConfiguration/TrigConfigSvc/src/TrigConfJobOptionsSvc.cxx @@ -31,7 +31,8 @@ StatusCode TrigConf::JobOptionsSvc::initialize() // m_optsvc = serviceLocator()->getOptsSvc(); ATH_CHECK(m_optsvc.retrieve()); - m_optsvc->set( this->name() + ".TYPE" , "NONE" ); + SmartIF<IService> josvc = &*m_josvc; + m_optsvc->set( josvc->name() + ".TYPE" , "NONE" ); if (m_sourceType == "FILE") { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXFexConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXFexConfig.py index f53a76aec22254e21323a0dc756a9b3619b39417..8754b10dd60e042354b20f0a5b93f8678deec09e 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXFexConfig.py +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXFexConfig.py @@ -204,16 +204,6 @@ class EFBMuMuXFex_allModes (EFBMuMuXFex_1): self.AthenaMonTools = [ validation, online, time ] -class EFBMuMuXFex_FTK (EFBMuMuXFex_1): - __slots__ = [] - def __init__(self, name = "EFBMuMuXFex_FTK"): - EFBMuMuXFex_1.__init__(self, name ) - - # FTK - self.DoFTK = True - self.TrackCollection = "InDetTrigTrackingxAODCnv_BeamSpot_FTK" - - class EFBMuMuXFex_allModes_tightBc (EFBMuMuXFex_allModes): __slots__ = [] diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXHypoConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXHypoConfig.py index 8784be00206c211493bffe3d5985b6dee134f113..949f046e76ab4332153bed5ab2b3538beff97e1c 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXHypoConfig.py +++ b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigEFBMuMuXHypoConfig.py @@ -90,12 +90,6 @@ class EFBMuMuXHypo_allModes (EFBMuMuXHypo_1): self.AcceptLb = True self.AcceptBc = True -class EFBMuMuXHypo_FTK (EFBMuMuXHypo_1): - __slots__ = [] - def __init__(self, name = "EFBMuMuXHypo_FTK"): - EFBMuMuXHypo_1.__init__(self, name ) - - class EFBMuMuXHypo_allModes_tightBc (EFBMuMuXHypo_allModes): __slots__ = [] def __init__(self, name = "EFBMuMuXHypo_allModes_tightBc"): diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexConfig.py deleted file mode 100644 index 7b395b99b5cf9da58c281627edf3e2fce6412649..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexConfig.py +++ /dev/null @@ -1,304 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -from TrigBphysHypo.TrigBphysHypoConf import TrigL2TrkMassFex -from TrigVertexFitter.TrigVertexFitterConf import TrigL2VertexFitter -from TrigVertexFitter.TrigVertexFitterConf import TrigVertexFitter -from TrigVertexFitter.TrigVertexFitterConf import TrigVertexingTool - -L2VFitTool = TrigL2VertexFitter() -VFitTool = TrigVertexFitter() -VertexTool = TrigVertexingTool() - -from __main__ import ToolSvc - -ToolSvc += L2VFitTool -ToolSvc += VFitTool -ToolSvc += VertexTool - - -# basic cut -class L2TrkMassFex_Jpsimumu (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.TrackPTthr = 4000 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 2850. - self.Mass_high_cut = 3350. - self.doVertexFit = True - self.DaughterMass = 105.658357 - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_RoI - validation = TrigL2TrkMassFexValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_RoI - online = TrigL2TrkMassFexOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -# pass all -class L2TrkMassFex_Jpsimumu_passL2 (L2TrkMassFex_Jpsimumu): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_passL2"): - super( L2TrkMassFex_Jpsimumu_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# loose cut -class L2TrkMassFex_Jpsimumu_loose (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_loose"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.OppositeCharge = False - self.TrackPTthr = 3500 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 2600. - self.Mass_high_cut = 3600. - self.doVertexFit = True - self.DaughterMass = 105.658357 - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_RoI - validation = TrigL2TrkMassFexValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_RoI - online = TrigL2TrkMassFexOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -# pass all -class L2TrkMassFex_Jpsimumu_loose_passL2 (L2TrkMassFex_Jpsimumu_loose): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_loose_passL2"): - super( L2TrkMassFex_Jpsimumu_loose_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# looser cut -class L2TrkMassFex_Jpsimumu_looser (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_looser"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.OppositeCharge = False - self.TrackPTthr = 2000. - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 2600. - self.Mass_high_cut = 3600. - self.doVertexFit = True - self.DaughterMass = 105.658357 - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_RoI - validation = TrigL2TrkMassFexValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_RoI - online = TrigL2TrkMassFexOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -# pass all -class L2TrkMassFex_Jpsimumu_looser_passL2 (L2TrkMassFex_Jpsimumu_looser): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_looser_passL2"): - super( L2TrkMassFex_Jpsimumu_looser_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# basic cut -class L2TrkMassFex_Jpsimumu_FS (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_FS"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.TrackPTthr = 4000 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 2850. - self.Mass_high_cut = 3350. - self.DaughterMass = 105.658357 - self.doVertexFit = True - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_FS - validation = TrigL2TrkMassFexValidationMonitoring_FS() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_FS - online = TrigL2TrkMassFexOnlineMonitoring_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -# pass all -class L2TrkMassFex_Jpsimumu_FS_passL2 (L2TrkMassFex_Jpsimumu_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_FS_passL2"): - super( L2TrkMassFex_Jpsimumu_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# FS loose cut -class L2TrkMassFex_Jpsimumu_loose_FS (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_loose_FS"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.OppositeCharge = False - self.TrackPTthr = 3000 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 2500. - self.Mass_high_cut = 4000. - self.DaughterMass = 105.658357 - self.doVertexFit = True - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_FS - validation = TrigL2TrkMassFexValidationMonitoring_FS() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_FS - online = TrigL2TrkMassFexOnlineMonitoring_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -class L2TrkMassFex_Jpsimumu_loose_FS_passL2 (L2TrkMassFex_Jpsimumu_loose_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Jpsimumu_loose_FS_passL2"): - super(L2TrkMassFex_Jpsimumu_loose_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# Upsi FS basic cut -class L2TrkMassFex_Upsimumu_FS (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Upsimumu_FS"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.TrackPTthr = 4000 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 8000. - self.Mass_high_cut = 12000. - self.DaughterMass = 105.658357 - self.doVertexFit = True - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_Upsi_FS - validation = TrigL2TrkMassFexValidationMonitoring_Upsi_FS() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_Upsi_FS - online = TrigL2TrkMassFexOnlineMonitoring_Upsi_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -class L2TrkMassFex_Upsimumu_FS_passL2 (L2TrkMassFex_Upsimumu_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Upsimumu_FS_passL2"): - super(L2TrkMassFex_Upsimumu_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# FS loose cut -class L2TrkMassFex_Upsimumu_loose_FS (TrigL2TrkMassFex): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Upsimumu_loose_FS"): - super( TrigL2TrkMassFex, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - # L2 TrkMass cuts - self.OppositeCharge = False - self.TrackPTthr = 3000 - self.dEtaTrackRoI = 0.1 - self.dPhiTrackRoI = 0.1 - self.Mass_low_cut = 8000. - self.Mass_high_cut = 12000. - self.DaughterMass = 105.658357 - self.doVertexFit = True - self.TrigL2VertexFitter = L2VFitTool - self.TrigVertexFitter = VFitTool - self.TrigVertexingTool = VertexTool - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexValidationMonitoring_Upsi_FS - validation = TrigL2TrkMassFexValidationMonitoring_Upsi_FS() - - from TrigBphysHypo.TrigL2TrkMassFexMonitoring import TrigL2TrkMassFexOnlineMonitoring_Upsi_FS - online = TrigL2TrkMassFexOnlineMonitoring_Upsi_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -class L2TrkMassFex_Upsimumu_loose_FS_passL2 (L2TrkMassFex_Upsimumu_loose_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassFex_Upsimumu_loose_FS_passL2"): - super(L2TrkMassFex_Upsimumu_loose_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexMonitoring.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexMonitoring.py deleted file mode 100644 index f9548d2ced5a3d7a3b2eca58caa7fccf4a640df2..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassFexMonitoring.py +++ /dev/null @@ -1,760 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig - -ERROR_labels = ' No_EventInfo : No_RoI : No_TrackColl : No_CombMuon : More_TrackColl : AddTrack_Fails : Unique_AddTrack_Fails : CalcInvMass_Fails : CalcMother_Fails : CalcMassPull_Fails : BphysColl_Fails ' -ERROR_number = 10 - -ACCEPTANCE_labels = ' Input : AcceptAll : Got_RoI : Got_TrackColl : Full_TrackColl : Single_TrackColl : Full_IDTracks : Mu1_Chi2_Cut : Mu1_pT_Cut : Mu1_Chi2Pt_Cuts : Mu1_dEta_Cut : Mu1_dPhi_Cut : Mu1_dR_Cut : Mu2_Chi2_Cut : Mu2_pT_Cut : Mu2_Chi2Pt_Cuts : Opp_Charge : InvMass_Cut : AddTrack_Test : Vertexing : CalcInvMass : CalcMother : Vertex_not_NULL : : BphysColl_not_Empty : : Each_Mu1_Chi2_Cut : Each_Mu1_pT_Cut : Each_Mu1_Chi2Pt_Cuts : Each_Mu1_dEta_Cut : Each_Mu1_dPhi_Cut : Each_Mu1_dR_Cut : : Each_Mu2_Chi2_Cut : Each_Mu2_pT_Cut : Each_Mu2_Chi2Pt_Cuts : Each_Opp_Charge : Each_InvMass_Cut : Each_AddTrack_Test : Each_Vertexing : Each_CalcInvMass : Each_CalcMother : Each_Vertex_not_NULL ' -ACCEPTANCE_number = 43 - -class TrigL2TrkMassFexValidationMonitoring_RoI(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexValidation_RoI"): - super(TrigL2TrkMassFexValidationMonitoring_RoI, self).__init__(name) - self.defineTarget("Validation") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 50, xmin = 0., xmax = 50., - ybins = 50, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 25, xmin = 1., xmax = 6., - ybins = 25, ymin = 1., ymax = 6. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', - title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', - title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50., - ybins = 100, ymin = 0., ymax = 50. ) ] - -class TrigL2TrkMassFexOnlineMonitoring_RoI(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexOnline_RoI"): - super(TrigL2TrkMassFexOnlineMonitoring_RoI, self).__init__(name) - self.defineTarget("Online") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 50, xmin = 0., xmax = 50., - ybins = 50, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 25, xmin = 1., xmax = 6., - ybins = 25, ymin = 1., ymax = 6. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', -# title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', -# title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', -# title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50., -# ybins = 100, ymin = 0., ymax = 50. ) ] - -class TrigL2TrkMassFexValidationMonitoring_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexValidation_FS"): - super(TrigL2TrkMassFexValidationMonitoring_FS, self).__init__(name) - self.defineTarget("Validation") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 25, xmin = 1., xmax = 6., - ybins = 25, ymin = 1., ymax = 6. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', - title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', - title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50., - ybins = 100, ymin = 0., ymax = 50. ) ] - -class TrigL2TrkMassFexOnlineMonitoring_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexOnline_FS"): - super(TrigL2TrkMassFexOnlineMonitoring_FS, self).__init__(name) - self.defineTarget("Online") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 1., xmax = 6. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 25, xmin = 1., xmax = 6., - ybins = 25, ymin = 1., ymax = 6. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', -# title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', -# title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', -# title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50., -# ybins = 100, ymin = 0., ymax = 50. ) ] - -class TrigL2TrkMassFexValidationMonitoring_Upsi_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexValidation_Upsi_FS"): - super(TrigL2TrkMassFexValidationMonitoring_Upsi_FS, self).__init__(name) - self.defineTarget("Validation") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 28, xmin = 1., xmax = 15., - ybins = 28, ymin = 1., ymax = 15. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', - title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50. ) ] - self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', - title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', - xbins = 100, xmin = 0., xmax = 50., - ybins = 100, ymin = 0., ymax = 50. ) ] - -class TrigL2TrkMassFexOnlineMonitoring_Upsi_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="L2TrkMassFexOnline_Upsi_FS"): - super(TrigL2TrkMassFexOnlineMonitoring_Upsi_FS, self).__init__(name) - self.defineTarget("Online") - self.Histograms = [ defineHistogram ( 'Errors', type = 'TH1F', - title = 'L2TrkMassFex - Algorithm errors ; ; # Events / Candidates', - xbins = ERROR_number , xmin = -0.5, xmax = ERROR_number - 0.5, - labels = ERROR_labels ) ] - self.Histograms += [ defineHistogram ( 'Acceptance', type = 'TH1F', - title = 'L2TrkMassFex - Reached steps - acceptance ; ; # Events / Candidates', - xbins = ACCEPTANCE_number , xmin = -0.5, xmax = ACCEPTANCE_number - 0.5, - labels = ACCEPTANCE_labels ) ] - self.Histograms += [ defineHistogram ( 'ROIEta, ROIPhi', type = 'TH2F', - title = 'L2TrkMassFex - ROI direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'nTracks', type = 'TH1F', - title = 'L2TrkMassFex - Number of ID tracks ; # Tracks ; # Events', - xbins = 101, xmin = -1.5, xmax = 99.5 ) ] - self.Histograms += [ defineHistogram ( 'TrkPt', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} - low range ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'TrkPt_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - ID tracks p_{T} ; p_{T} [GeV] ; # Tracks', - xbins = 100, xmin = 0., xmax = 200. ) ] - self.Histograms += [ defineHistogram ( 'TrkEta, TrkPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track direction ; #eta ; #phi ; # Events', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta, TrkROIdPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdEta', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'TrkROIdR', type = 'TH1F', - title = 'L2TrkMassFex - Track-ROI #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'InvMassNoTrkPtCut_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - p_{T#mu2} > 2 GeV ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'InvMass', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'InvMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Invariant mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Pt, Trk2Pt', type = 'TH2F', - title = 'L2TrkMassFex - Tracks p_{T} correlation ; p_{T#mu1} [GeV] ; p_{T#mu2} [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'Trk1Eta, Trk2Eta', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #eta correlation ; #eta_{#mu1} ; #eta_{#mu2} ; # Candidates', - xbins = 30, xmin = -3.0, xmax = 3.0, - ybins = 30, ymin = -3.0, ymax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Phi, Trk2Phi', type = 'TH2F', - title = 'L2TrkMassFex - Tracks #phi correlation ; #phi_{#mu1} ; #phi_{#mu2} ; # Candidates', - xbins = 32, xmin = -3.2, xmax = 3.2, - ybins = 32, ymin = -3.2, ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta, Trk1Trk2dPhi', type = 'TH2F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta#Delta#phi difference ; #Delta#eta ; #Delta#phi ; # Candidates', - xbins = 30, xmin = 0., xmax = 3.0, - ybins = 32, ymin = 0., ymax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dEta', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#eta difference ; #Delta#eta ; # Tracks', - xbins = 30, xmin = 0., xmax = 3.0 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dPhi', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #Delta#phi difference ; #Delta#phi ; # Tracks', - xbins = 32, xmin = 0., xmax = 3.2 ) ] - self.Histograms += [ defineHistogram ( 'Trk1Trk2dR', type = 'TH1F', - title = 'L2TrkMassFex - Track1-Track2 #DeltaR difference ; #DeltaR ; # Tracks', - xbins = 50, xmin = 0., xmax = 5. ) ] - self.Histograms += [ defineHistogram ( 'SumPtTrk12', type = 'TH1F', - title = 'L2TrkMassFex - Track1+Track2 p_{T} ; p_{T#mu1}+p_{T#mu2} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass - low range ; Mass [GeV] ; # Candidates', - xbins = 140, xmin = 1., xmax = 15. ) ] - self.Histograms += [ defineHistogram ( 'FitMass_wideRange', type = 'TH1F', - title = 'L2TrkMassFex - Fitted mass ; Mass [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitMass, InvMass_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Before vs. after vertex fit invariant mass ; Fitted mass [GeV] ; Invariant mass [GeV] ; # Candidates', - xbins = 28, xmin = 1., xmax = 15., - ybins = 28, ymin = 1., ymax = 15. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoF', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF} ; #chi^{2}/_{NDoF} ; # Candidates', - xbins = 100, xmin = 0., xmax = 25. ) ] - self.Histograms += [ defineHistogram ( 'Chi2toNDoFProb', type = 'TH1F', - title = 'L2TrkMassFex - Vertex fit #chi^{2}/_{NDoF}-probability ; prob(#chi^{2}/_{NDoF}) ; # Candidates', - xbins = 100, xmin = 0., xmax = 1. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt', type = 'TH1F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} ; p_{T} [GeV] ; # Candidates', - xbins = 100, xmin = 0., xmax = 100. ) ] - self.Histograms += [ defineHistogram ( 'FitTotalPt, SumPtTrk12_okFit', type = 'TH2F', - title = 'L2TrkMassFex - Fitted di-muon p_{T} vs. track1+track2 p_{T} ; p_{T} [GeV] ; (p_{T#mu1}+p_{T#mu2}) [GeV] ; # Candidates', - xbins = 25, xmin = 0., xmax = 50., - ybins = 25, ymin = 0., ymax = 50. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxR', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex R-position ; R [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 10. ) ] - self.Histograms += [ defineHistogram ( 'FitVtxZ', type = 'TH1F', - title = 'L2TrkMassFex - Fitted vertex Z-position ; Z [mm] ; # Candidates', - xbins = 100, xmin = 0., xmax = 500. ) ] - self.Histograms += [ defineHistogram ( 'nBphys', type = 'TH1F', - title = 'L2TrkMassFex - Number of di-muon candidates ; # di-muons ; # Events', - xbins = 50, xmin = -0.5, xmax = 49.5 ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime', type = 'TH1F', -# title = 'L2TrkMassFex - Total processing time ; t_{tot} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'VertexingTime', type = 'TH1F', -# title = 'L2TrkMassFex - Vertex fit processing time ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50. ) ] -# self.Histograms += [ defineHistogram ( 'TotalRunTime, VertexingTime', type = 'TH2F', -# title = 'L2TrkMassFex - Total vs. vertex fit processing time ; t_{tot} [ms] ; t_{vtx} [ms] ; # Events', -# xbins = 100, xmin = 0., xmax = 50., -# ybins = 100, ymin = 0., ymax = 50. ) ] - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoConfig.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoConfig.py deleted file mode 100644 index b30d1a8e199c4b222785a1be7dc62beeee4d8259..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoConfig.py +++ /dev/null @@ -1,205 +0,0 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration - -from TrigBphysHypo.TrigBphysHypoConf import TrigL2TrkMassHypo - -# Jpsi -class L2TrkMassHypo_Jpsimumu (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - # mass cuts - self.AcceptAll = False - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_RoI - validation = TrigL2TrkMassHypoValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_RoI - online = TrigL2TrkMassHypoOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -# Jpsi passL2 -class L2TrkMassHypo_Jpsimumu_passL2 (L2TrkMassHypo_Jpsimumu): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_passL2"): - super( L2TrkMassHypo_Jpsimumu_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - - -# Jpsi FS -class L2TrkMassHypo_Jpsimumu_FS (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_FS"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_FS - validation = TrigL2TrkMassHypoValidationMonitoring_FS() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_FS - online = TrigL2TrkMassHypoOnlineMonitoring_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -# Jpsi passL2 -class L2TrkMassHypo_Jpsimumu_FS_passL2 (L2TrkMassHypo_Jpsimumu_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_FS_passL2"): - super( L2TrkMassHypo_Jpsimumu_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - - -# Jpsi loose -class L2TrkMassHypo_Jpsimumu_loose (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_loose"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - # mass cuts - self.AcceptAll = False - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_RoI - validation = TrigL2TrkMassHypoValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_RoI - online = TrigL2TrkMassHypoOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -# Jpsi loose passL2 -class L2TrkMassHypo_Jpsimumu_loose_passL2 (L2TrkMassHypo_Jpsimumu_loose): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_loose_passL2"): - super( L2TrkMassHypo_Jpsimumu_loose_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# Jpsi loose -class L2TrkMassHypo_Jpsimumu_looser (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_looser"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - # mass cuts - self.AcceptAll = False - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_RoI - validation = TrigL2TrkMassHypoValidationMonitoring_RoI() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_RoI - online = TrigL2TrkMassHypoOnlineMonitoring_RoI() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - -# Jpsi loose passL2 -class L2TrkMassHypo_Jpsimumu_looser_passL2 (L2TrkMassHypo_Jpsimumu_looser): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_looser_passL2"): - super( L2TrkMassHypo_Jpsimumu_looser_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# Jpsi FS loose -class L2TrkMassHypo_Jpsimumu_loose_FS (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_loose_FS"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_FS - validation = TrigL2TrkMassHypoValidationMonitoring_FS() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_FS - online = TrigL2TrkMassHypoOnlineMonitoring_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -class L2TrkMassHypo_Jpsimumu_loose_FS_passL2 (L2TrkMassHypo_Jpsimumu_loose_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Jpsimumu_loose_FS_passL2"): - super( L2TrkMassHypo_Jpsimumu_loose_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# Upsi FS -class L2TrkMassHypo_Upsimumu_FS (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Upsimumu_FS"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_Upsi_FS - validation = TrigL2TrkMassHypoValidationMonitoring_Upsi_FS() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS - online = TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -class L2TrkMassHypo_Upsimumu_FS_passL2 (L2TrkMassHypo_Upsimumu_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Upsimumu_FS_passL2"): - super( L2TrkMassHypo_Upsimumu_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - -# Upsi FS loose -class L2TrkMassHypo_Upsimumu_loose_FS (TrigL2TrkMassHypo): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Upsimumu_loose_FS"): - super( TrigL2TrkMassHypo, self ).__init__( name ) - - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = False - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoValidationMonitoring_Upsi_FS - validation = TrigL2TrkMassHypoValidationMonitoring_Upsi_FS() - - from TrigBphysHypo.TrigL2TrkMassHypoMonitoring import TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS - online = TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS() - - from TrigTimeMonitor.TrigTimeHistToolConfig import TrigTimeHistToolConfig - time = TrigTimeHistToolConfig("Time") - - self.AthenaMonTools = [ validation, online, time ] - - -class L2TrkMassHypo_Upsimumu_loose_FS_passL2 (L2TrkMassHypo_Upsimumu_loose_FS): - __slots__ = [] - def __init__(self, name = "L2TrkMassHypo_Upsimumu_loose_FS_passL2"): - super( L2TrkMassHypo_Upsimumu_loose_FS_passL2, self ).__init__( name ) - # AcceptAll flag: if true take events regardless of cuts - self.AcceptAll = True - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoMonitoring.py b/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoMonitoring.py deleted file mode 100644 index 4c749c1e232ef5bf2e8af63214e240319ad93eeb..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/python/TrigL2TrkMassHypoMonitoring.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -from TrigMonitorBase.TrigGenericMonitoringToolConfig import defineHistogram, TrigGenericMonitoringToolConfig - -class TrigL2TrkMassHypoValidationMonitoring_RoI(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoValidationMonitoring_RoI"): - super(TrigL2TrkMassHypoValidationMonitoring_RoI, self).__init__(name) - self.defineTarget("Validation") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_RoI; Mass[GeV]", - xbins=100, xmin=1., xmax=10.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - -class TrigL2TrkMassHypoOnlineMonitoring_RoI(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoOnlineMonitoring_RoI"): - super(TrigL2TrkMassHypoOnlineMonitoring_RoI, self).__init__(name) - self.defineTarget("Online") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_RoI; Mass[GeV]", - xbins=100, xmin=1., xmax=10.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - - -class TrigL2TrkMassHypoValidationMonitoring_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoValidationMonitoring_FS"): - super(TrigL2TrkMassHypoValidationMonitoring_FS, self).__init__(name) - self.defineTarget("Validation") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_FS; Mass[GeV]", - xbins=100, xmin=1., xmax=10.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - -class TrigL2TrkMassHypoOnlineMonitoring_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoOnlineMonitoring_FS"): - super(TrigL2TrkMassHypoOnlineMonitoring_FS, self).__init__(name) - self.defineTarget("Online") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_FS; Mass[GeV]", - xbins=100, xmin=1., xmax=10.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - -class TrigL2TrkMassHypoValidationMonitoring_Upsi_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoValidationMonitoring_Upsi_FS"): - super(TrigL2TrkMassHypoValidationMonitoring_Upsi_FS, self).__init__(name) - self.defineTarget("Validation") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_FS; Mass[GeV]", - xbins=140, xmin=1., xmax=15.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - -class TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS(TrigGenericMonitoringToolConfig): - def __init__ (self, name="TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS"): - super(TrigL2TrkMassHypoOnlineMonitoring_Upsi_FS, self).__init__(name) - self.defineTarget("Online") - self.Histograms += [ defineHistogram('CutCounter', type='TH1F', title="cut info", - xbins=10, xmin=-1.5, xmax=8.5) ] - self.Histograms += [ defineHistogram('Mass', type='TH1F', title="L2TrkMassHypo Mass_FS; Mass[GeV]", - xbins=140, xmin=1., xmax=15.) ] -# self.Histograms += [ defineHistogram('FitMass', type='TH1F', title="L2TrkMassFex FitMass; FitMass[MeV]", -# xbins=100, xmin=1000., xmax=5000.) ] -# self.Histograms += [ defineHistogram('Chi2', type='TH1F', title="L2TrkMassFex Chi2; Chi2", -# xbins=100, xmin=0., xmax=10.) ] -# self.Histograms += [ defineHistogram('Chi2Prob', type='TH1F', title="L2TrkMassFex Chi2Prob; Chi2Prob", -# xbins=100, xmin=0., xmax=1.) ] - self.Histograms += [ defineHistogram('NBphys', type='TH1F', title="L2TrkMassHypo NBphys created", - xbins=50, xmin=0.0, xmax=50.0) ] - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx index 71246290460602babd506785a1698dfd4f916f52..6bc093f11960ab9be30f0d6e2fdaa5bbe3c7581a 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.cxx @@ -5,43 +5,7 @@ #include "BtrigUtils.h" #include <math.h> -#include <vector> - -#include "TrigInDetEvent/TrigInDetTrack.h" -#include "TrigInDetEvent/TrigInDetTrackFitPar.h" - -#include "TrigSteeringEvent/Enums.h" - -#include "xAODMuon/Muon.h" -#include "xAODTracking/TrackParticle.h" - -#include <exception> - - -//---------------------------------------------- -// pT calculation using Trk::Track. -//---------------------------------------------- -/* -double PtVal(const std::vector<const Trk::Track*> & tracks) { - - std::vector<const Trk::Track*>::const_iterator trkItr = tracks.begin(); - std::vector<const Trk::Track*>::const_iterator trkItrEnd = tracks.end(); - - double px_sum = 0; - double py_sum = 0; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - px_sum += fabs((*trkItr)->perigeeParameters()->pT()) * cos((*trkItr)->perigeeParameters()->parameters()[Trk::phi0]); - py_sum += fabs((*trkItr)->perigeeParameters()->pT()) * sin((*trkItr)->perigeeParameters()->parameters()[Trk::phi0]); - } - - double pt2 = px_sum*px_sum + py_sum*py_sum; - - if ( pt2 < 0 ) return 0; - else return sqrt(pt2); -} -*/ //---------------------------------------------- // pT calculation using xAOD::TrackParticle. //---------------------------------------------- @@ -55,8 +19,8 @@ double PtVal(const std::vector<const xAOD::TrackParticle*> & tracks) { double py_sum = 0; for ( ; trkItr!=trkItrEnd; trkItr++ ) { - px_sum += fabs((*trkItr)->pt()) * cos((*trkItr)->phi()); - py_sum += fabs((*trkItr)->pt()) * sin((*trkItr)->phi()); + px_sum += std::abs((*trkItr)->pt()) * cos((*trkItr)->phi()); + py_sum += std::abs((*trkItr)->pt()) * sin((*trkItr)->phi()); } double pt2 = px_sum*px_sum + py_sum*py_sum; @@ -69,13 +33,13 @@ double PtVal(const std::vector<const xAOD::TrackParticle*> & tracks) { // L_xy calculation using Trk::Track and two vertex positions. //------------------------------------------------------------ -double LxyVal(const double px, const double py, const Amg::Vector3D Vertex0, const Amg::Vector3D Vertex1) { +double LxyVal(const double px, const double py, const Amg::Vector3D &Vertex0, const Amg::Vector3D &Vertex1) { double rdx = Vertex1[0] - Vertex0[0]; double rdy = Vertex1[1] - Vertex0[1]; - double pt = sqrt(px*px+py*py); - double rxy = sqrt(rdx*rdx+rdy*rdy); + double pt = std::sqrt(px*px+py*py); + double rxy = std::sqrt(rdx*rdx+rdy*rdy); double cosxy = 0.; if ( rxy != 0. ) cosxy = (px*rdx+py*rdy)/rxy/pt; @@ -83,151 +47,3 @@ double LxyVal(const double px, const double py, const Amg::Vector3D Vertex0, con return rxy*cosxy; } -//-------------------------------------------------------------------- -// Base invariant mass calculation using px,py,pz and mass-hypothesis. -//-------------------------------------------------------------------- - -double InvMass(const std::vector<double> & px, const std::vector<double> & py, - const std::vector<double> & pz, const std::vector<double> & massHypo) { - - double px_sum = 0; - double py_sum = 0; - double pz_sum = 0; - double e_sum = 0; - - for ( unsigned int i=0; i<massHypo.size(); i++ ) { - px_sum += px[i]; - py_sum += py[i]; - pz_sum += pz[i]; - e_sum += sqrt(massHypo[i]*massHypo[i] + px[i]*px[i] + py[i]*py[i] + pz[i]*pz[i]); - } - - double m2 = e_sum*e_sum - px_sum*px_sum - py_sum*py_sum - pz_sum*pz_sum; - - if ( m2 < 0 ) return 0; - else return sqrt(m2); -} - - - -//-------------------------------------------------- -// Invariant mass calculations using TrigInDetTrack. -//-------------------------------------------------- - -double InvMass(const std::vector<const TrigInDetTrack*> &tracks, const std::vector<double> & massHypo) { - - std::vector<const TrigInDetTrack*>::const_iterator trkItr = tracks.begin(); - std::vector<const TrigInDetTrack*>::const_iterator trkItrEnd = tracks.end(); - - std::vector<double> px, py, pz; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - double theta = 2. * atan(exp(-1.0*((*trkItr)->param()->eta()))); - px.push_back( fabs((*trkItr)->param()->pT()) * cos((*trkItr)->param()->phi0()) ); - py.push_back( fabs((*trkItr)->param()->pT()) * sin((*trkItr)->param()->phi0()) ); - pz.push_back( fabs((*trkItr)->param()->pT()) / tan(theta) ); - } - - return InvMass(px, py, pz, massHypo); -} - - - -//-------------------------------------------------------- -// Invariant mass calculations using TrigInDetTrackFitPar. -//-------------------------------------------------------- - -double InvMass(const std::vector<const TrigInDetTrackFitPar*> & tracks, const std::vector<double> & massHypo) { - - std::vector<const TrigInDetTrackFitPar*>::const_iterator trkItr = tracks.begin(); - std::vector<const TrigInDetTrackFitPar*>::const_iterator trkItrEnd = tracks.end(); - - std::vector<double> px, py, pz; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - double theta = 2. * atan(exp(-1.0*((*trkItr)->eta()))); - px.push_back( fabs((*trkItr)->pT()) * cos((*trkItr)->phi0()) ); - py.push_back( fabs((*trkItr)->pT()) * sin((*trkItr)->phi0()) ); - pz.push_back( fabs((*trkItr)->pT()) / tan(theta) ); - } - - return InvMass(px, py, pz, massHypo); -} - - - -//-------------------------------------------------------- -// Invariant mass calculations using Trk::MeasuredPerigee. -//-------------------------------------------------------- -/* -double InvMass(const std::vector<const Trk::TrackParameters*> & tracks, const std::vector<double> & massHypo) { - - std::vector<const Trk::TrackParameters*>::const_iterator trkItr = tracks.begin(); - std::vector<const Trk::TrackParameters*>::const_iterator trkItrEnd = tracks.end(); - - std::vector<double> px, py, pz; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - px.push_back( (*trkItr)->momentum()[Trk::px] ); - py.push_back( (*trkItr)->momentum()[Trk::py] ); - pz.push_back( (*trkItr)->momentum()[Trk::pz] ); - } - - return InvMass(px, py, pz, massHypo); -} -*/ -//-------------------------------------------------------- -// Invariant mass calculations using Trk::Perigee. -//-------------------------------------------------------- - -double InvMass(const std::vector<const Trk::Perigee*> & tracks, const std::vector<double> & massHypo) { - auto trkItr = tracks.begin(); - auto trkItrEnd = tracks.end(); - - std::vector<double> px, py, pz; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - px.push_back( (*trkItr)->momentum()[Trk::px] ); - py.push_back( (*trkItr)->momentum()[Trk::py] ); - pz.push_back( (*trkItr)->momentum()[Trk::pz] ); - } - - return InvMass(px, py, pz, massHypo); -} - - -//---------------------------------------------- -// Invariant mass calculations using Trk::Track. -//---------------------------------------------- -/* -double InvMass(const std::vector<const Trk::Track*> & tracks, const std::vector<double> & massHypo) { - - std::vector<const Trk::Track*>::const_iterator trkItr = tracks.begin(); - std::vector<const Trk::Track*>::const_iterator trkItrEnd = tracks.end(); - - std::vector<double> px, py, pz; - - for ( ; trkItr!=trkItrEnd; trkItr++ ) { - // JW EDM - // px.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * ((*trkItr)->perigeeParameters()->cosPhi()) ); - // py.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * ((*trkItr)->perigeeParameters()->sinPhi()) ); - // pz.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * ((*trkItr)->perigeeParameters()->cotTheta()) ); - px.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * cos((*trkItr)->perigeeParameters()->parameters()[Trk::phi0])); - py.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * sin((*trkItr)->perigeeParameters()->parameters()[Trk::phi0])); - pz.push_back( fabs((*trkItr)->perigeeParameters()->pT()) * 1./tan((*trkItr)->perigeeParameters()->parameters()[Trk::theta])); - - } - - return InvMass(px, py, pz, massHypo); -} -*/ -double fabsDeltaPhi(double phi1, double phi2) { - double dPhi=fabs(phi1 - phi2); - if (dPhi > M_PI) dPhi = 2.*M_PI - dPhi; - return dPhi; -} - -double fabsDeltaEta(double eta1, double eta2) { - return fabs( eta1 - eta2); -} - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h index b6f86ffc01764f14d9e3aa4a1a06c20afa56e8e8..22c4b168f4c08ee3469702ed40b8380977520836 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/BtrigUtils.h @@ -6,30 +6,11 @@ #define BTRIGUTILS_H #include <vector> +#include "xAODTracking/TrackParticle.h" +#include "GeoPrimitives/GeoPrimitives.h" // for Vector3D -#include "TrigInDetEvent/TrigInDetTrack.h" -#include "TrigInDetEvent/TrigInDetTrackFitPar.h" -//#include "TrigMuonEvent/TrigMuonEFInfoContainer.h" -#include "TrigSteeringEvent/Enums.h" - - -// xAOD edm -#include "xAODMuon/MuonContainer.h" - -//double PtVal(const std::vector<const Trk::Track*>&); double PtVal(const std::vector<const xAOD::TrackParticle*>&); -double LxyVal(const double, const double, const Amg::Vector3D, const Amg::Vector3D); - -double InvMass(const std::vector<const TrigInDetTrack*> & , const std::vector<double>&); -double InvMass(const std::vector<const TrigInDetTrackFitPar*>&, const std::vector<double>&); -double InvMass(const std::vector<const Trk::TrackParameters*>&, const std::vector<double>&); -//double InvMass(const std::vector<const Trk::Track*> &, const std::vector<double>&); -double InvMass(const std::vector<const Trk::Perigee*> &, const std::vector<double>&); - -// JW new methods to help simplify the algorithms - -double fabsDeltaPhi(double phi1, double phi2); //! absolute delta phi - correcting for 2pi -double fabsDeltaEta(double eta1, double eta2); //! absolute delta eta +double LxyVal(const double, const double, const Amg::Vector3D&, const Amg::Vector3D&); #endif // BTRIGUTILS_H diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h index 6dd0ecca41e76ab16a267b51b8aaf6df23492c01..475f4edba579422b55cdadefac156d2bdfb78b40 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/Constants.h @@ -5,32 +5,31 @@ #ifndef TRIGBPHYSHYPO_CONSTANTS_H #define TRIGBPHYSHYPO_CONSTANTS_H -const double EPSILON = 1.0E-6; -const double PROTONMASS = 938.272; //MeV -const double EMASS = 0.511003;//MeV -const double MUMASS = 105.65837; //MeV -const double PIMASS = 139.57; //MeV -const double JPSIMASS = 3096.916; //MeV -const double KMASS = 493.677; //MeV -const double PHIMASS = 1020.; //MeV -const double DSMASS = 1968.2; //MeV -const double KPLUSMASS = 493.67700; //MeV -const double BPLUSMASS = 5279.13; //MeV -const double BSMASS = 5369.3; //MeV -const double KSTARMASS = 891.66; //MeV -const double BDMASS = 5279.5; //MeV -const double LAMBDAMASS = 1115.683; //MeV -const double LAMBDABMASS = 5620.2; //MeV -const double BCMASS = 6277.0; //MeV +constexpr double EPSILON = 1.0E-6; +constexpr double PROTONMASS = 938.272; //MeV +constexpr double EMASS = 0.511003;//MeV +constexpr double MUMASS = 105.65837; //MeV +constexpr double PIMASS = 139.57; //MeV +constexpr double JPSIMASS = 3096.916; //MeV +constexpr double KMASS = 493.677; //MeV +constexpr double PHIMASS = 1020.; //MeV +constexpr double DSMASS = 1968.2; //MeV +constexpr double KPLUSMASS = 493.67700; //MeV +constexpr double BPLUSMASS = 5279.13; //MeV +constexpr double BSMASS = 5369.3; //MeV +constexpr double KSTARMASS = 891.66; //MeV +constexpr double BDMASS = 5279.5; //MeV +constexpr double LAMBDAMASS = 1115.683; //MeV +constexpr double LAMBDABMASS = 5620.2; //MeV +constexpr double BCMASS = 6277.0; //MeV -/// list of decay constants BMuMuX -const int di_to_muons = 0; -const int b_to_K = 1; // to recognize type of decay B+/- ->K+/- mu+ mu- -const int bD_to_Kstar = 2; // to recognize type of decay Bd ->K*(K+Pi-) mu+ mu- -const int bS_to_Phi = 3; // to recognize type of decay Bs ->Phi(K+K-) mu+ mu- -const int lB_to_L = 4; // to recognize type of decay Lb ->L(PPi-) mu+ mu- -const int bC_to_PiPi = 5; // to recognize type of decay Bc ->D+(K-pi+pi+) mu+ mu- -//const int bP_to_Kstar = 5; // to recognize type of decay B+ ->K*+ mu+ mu- -const int di_to_electrons = 6; +/// list of decay constexprants BMuMuX +constexpr int di_to_muons = 0; +constexpr int b_to_K = 1; // to recognize type of decay B+/- ->K+/- mu+ mu- +constexpr int bD_to_Kstar = 2; // to recognize type of decay Bd ->K*(K+Pi-) mu+ mu- +constexpr int bS_to_Phi = 3; // to recognize type of decay Bs ->Phi(K+K-) mu+ mu- +constexpr int lB_to_L = 4; // to recognize type of decay Lb ->L(PPi-) mu+ mu- +constexpr int bC_to_PiPi = 5; // to recognize type of decay Bc ->D+(K-pi+pi+) mu+ mu- +constexpr int di_to_electrons = 6; #endif diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.cxx index f4622c27d565b02aeb7b8420c2123e5f86ea88cc..1b5661332416dbe45a08c0d1436f3510d48be46e 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.cxx @@ -17,9 +17,7 @@ #include "TrigBphysElectronCounter.h" #include "xAODEgamma/ElectronContainer.h" -#include "TrigTimeAlgs/TrigTimerSvc.h" -#include "FourMomUtils/P4Helpers.h" - +#include "TrigTimeAlgs/TrigTimer.h" // for TrigTimer // Define the bins for acceptance-monitoring histogram #define ACCEPT_hltExecute 0 @@ -202,7 +200,7 @@ HLT::ErrorCode TrigBphysElectronCounter::hltExecute(std::vector<std::vector<HLT: xAOD::TrackParticleAuxContainer outputTrackCollAuxCont; outputTrackColl->setStore( &outputTrackCollAuxCont ); outputTrackColl->reserve(m_nEfElectron); - for( auto elec : efelectrons ){ + for( const auto& elec : efelectrons ){ xAOD::TrackParticle *trk1 = new xAOD::TrackParticle(); trk1->makePrivateStore( (*elec)->trackParticle()); outputTrackColl->push_back(trk1); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.h index ab36be4fd711da2bd80931db6735d7913587dd2f..eb481292c9d6ff40d9985f262e0e0eef13d99eff 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysElectronCounter.h @@ -99,17 +99,14 @@ template<class Tin, class Tout> int TrigBphysElectronCounter::passNObjects(int n ElementLinkVector<Tin> inVecColl; outVec.clear(); std::vector<float> pts; - std::vector<unsigned int> isEMs; - std::vector<bool> isLHAcceptTrigs; float mindR2 = mindR*mindR; bool useLumiTool=false; - double mu = 0.; double avg_mu = 0.; if(m_useAthElectronLHIDSelector && m_lumiBlockMuTool){ useLumiTool=true; - mu = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID) + double mu = m_lumiBlockMuTool->actualInteractionsPerCrossing(); // (retrieve mu for the current BCID) avg_mu = m_lumiBlockMuTool->averageInteractionsPerCrossing(); ATH_MSG_DEBUG("REGTEST: Retrieved Mu Value : " << mu << ", Average Mu Value : " << avg_mu); } @@ -205,7 +202,6 @@ template<class Tin, class Tout> int TrigBphysElectronCounter::passNObjects(int n } // now check pts cuts - //std::sort(isEMs.begin(), isEMs.end(), [&pts](size_t i, size_t j) {return pts[i] > pts[j];}); std::sort(pts.begin(), pts.end(), std::greater<float>()); //== check that electrons have correct pts and isEM diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.cxx index 8fcabff24e5b5660bae38756b6e5a43b107cb938..b1a4a4fe510a7d3620c1644f5601c3ada713ae19 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.cxx @@ -29,7 +29,7 @@ TrigBphysHelperUtilsTool::TrigBphysHelperUtilsTool( const std::string& type, const std::string& name, const IInterface* parent ) : ::AthAlgTool ( type, name, parent ) -, m_fitterSvc("Trk::TrkVKalVrtFitter/VertexFitterTool",this) +, m_fitterSvc("Trk::TrkVKalVrtFitter/VertexFitterTool",this), m_VKVFitter(nullptr) { declareInterface< TrigBphysHelperUtilsTool >(this); // @@ -101,32 +101,6 @@ double TrigBphysHelperUtilsTool::deltaR(double deta, double dphi) const { } -void TrigBphysHelperUtilsTool::addUnique(std::vector<const Trk::Track*>& tracks, const Trk::Track* trkIn) const { - // from the the original run-1 code - if (!trkIn) return; - std::vector<const Trk::Track*>::iterator tItr = tracks.begin(); - std::vector<const Trk::Track*>::iterator tItr_end = tracks.end(); - - double phi = trkIn->perigeeParameters()->parameters()[Trk::phi]; - double eta = (*tItr)->perigeeParameters()->eta(); - double pT = fabs(trkIn->perigeeParameters()->pT()); - - for (;tItr != tItr_end; ++tItr) { - if (trkIn == *tItr) continue; // don't consider if already included - // match on eta and phi - double dphi = absDeltaPhi((*tItr)->perigeeParameters()->parameters()[Trk::phi], phi); - double deta = absDeltaEta((*tItr)->perigeeParameters()->eta(), eta); - double dpt = fabs(fabs((*tItr)->perigeeParameters()->pT()) - pT); - - if (dphi < 0.005 && - deta < 0.005 && - dpt < 10.) return; // found a matching track, so return out of the function - } // for - - // if here then track is added to list - tracks.push_back(trkIn); -} - bool TrigBphysHelperUtilsTool::areUnique(const xAOD::TrackParticle* t0, const xAOD::TrackParticle* t1, double dEtaCut , double dPhiCut, double dPtCut) const { if (!t0 || !t1) { ATH_MSG_DEBUG("nullptr for inputs " << t0 << " " << t1 ); @@ -291,7 +265,6 @@ StatusCode TrigBphysHelperUtilsTool::buildDiMu(const std::vector<ElementLink<xAO ATH_MSG_DEBUG("Fit not allowed, Problems with TP1" ); } - //const Trk::Vertex startingPoint(Amg::Vector3D(0.,0.,0.)); // #FIXME use beamline for starting point? const Amg::Vector3D startingPoint(0.,0.,0.); std::vector<const xAOD::TrackParticle*> trks; trks.push_back(*particles[0]); @@ -313,9 +286,7 @@ StatusCode TrigBphysHelperUtilsTool::buildDiMu(const std::vector<ElementLink<xAO result->setFitz (-9999); } else { - //std::vector<int> trkIndices(particles.size(),1); double invariantMass(0.), invariantMassError(0.); // #FIXME what about the input masses? - //if (!(m_VKVFitter->VKalGetMassError(trkIndices,invariantMass,invariantMassError).isSuccess())) { if (!(m_VKVFitter->VKalGetMassError(invariantMass,invariantMassError,*state).isSuccess())) { ATH_MSG_DEBUG("Warning from VKaVrt - cannot calculate uncertainties!"); } // if @@ -380,7 +351,7 @@ StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result, bool doFit(true); // set false if problematic TP std::vector<const xAOD::TrackParticle*> trks; - for ( auto ptlEL : particles) { + for ( const auto& ptlEL : particles) { if (!ptlEL.isValid()) { ATH_MSG_DEBUG("Non valid TPEL" ); doFit = false; @@ -414,7 +385,6 @@ StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result, } else { //std::vector<int> trkIndices(particles.size(),1); double invariantMass(0.), invariantMassError(0.); // #FIXME what about the input masses? - //if (!(m_VKVFitter->VKalGetMassError(trkIndices,invariantMass,invariantMassError).isSuccess())) { if (!(m_VKVFitter->VKalGetMassError(invariantMass,invariantMassError,istate).isSuccess())) { ATH_MSG_DEBUG("Warning from VKaVrt - cannot calculate uncertainties!"); invariantMass = -9999.; @@ -449,7 +419,7 @@ StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result, "fity: " << result->fity() << "\n\t " << "fitz: " << result->fitz() << "\n\t " ); - for ( auto ptlEL : particles) { + for ( const auto& ptlEL : particles) { result->addTrackParticleLink(ptlEL); } return StatusCode::SUCCESS; @@ -492,7 +462,6 @@ StatusCode TrigBphysHelperUtilsTool::vertexFit(xAOD::TrigBphys * result, } else { std::vector<int> trkIndices(trks.size(),1); double invariantMass(0.), invariantMassError(0.); // #FIXME what about the input masses? - //if (!(m_VKVFitter->VKalGetMassError(trkIndices,invariantMass,invariantMassError).isSuccess())) { if (!(m_VKVFitter->VKalGetMassError(invariantMass,invariantMassError,*state).isSuccess())) { ATH_MSG_DEBUG("Warning from VKaVrt - cannot calculate uncertainties!"); invariantMass = -9999.; @@ -541,42 +510,15 @@ double TrigBphysHelperUtilsTool::invariantMass(const xAOD::TrackParticle *p1, co static_assert(!std::is_base_of<xAOD::TrackParticle, xAOD::L2StandAloneMuon>::value, "Types have become ambiguous, units may be wrong" ); assert(p1!=nullptr); assert(p2!=nullptr); - double px(0.),py(0.),pz(0.),E(0.); - - - { - const auto &pv1 = p1->p4(); - px += pv1.Px(); - py += pv1.Py(); - pz += pv1.Pz(); - E += sqrt(mi1*mi1 + - pv1.Px()*pv1.Px() + - pv1.Py()*pv1.Py() + - pv1.Pz()*pv1.Pz() - ); - } - { - const auto &pv2 = p2->p4(); - px += pv2.Px(); - py += pv2.Py(); - pz += pv2.Pz(); - E += sqrt(mi2*mi2 + - pv2.Px()*pv2.Px() + - pv2.Py()*pv2.Py() + - pv2.Pz()*pv2.Pz() - ); - } - double m2 = E*E - px*px - py*py -pz*pz; - if (m2 < 0) return 0.; - else return sqrt(m2); + const std::array<const xAOD::TrackParticle*, 2> &tracks{p1, p2}; + const std::array<double, 2> &masses{mi1, mi2}; + return invariantMassInternal(tracks.data(), masses.data(), 2); } // invariantMass double TrigBphysHelperUtilsTool::invariantMass(const std::vector<const xAOD::TrackParticle*>&ptls, const std::vector<double> & masses) const { - // 're-cast the vector in terms of the iparticle' - std::vector<const xAOD::IParticle*> i_ptls; - for ( auto tp : ptls) i_ptls.push_back(tp); - return invariantMassIP(i_ptls,masses); + assert(ptls.size() == masses.size()); + return invariantMassInternal(ptls.data(), masses.data(), masses.size()); } @@ -627,15 +569,6 @@ void TrigBphysHelperUtilsTool::fillTrigObjectKinematics(xAOD::TrigBphys* bphys, return; } - // if (ptls.size() != masses.size()) { - // if ( msg().level() <= MSG::WARNING ) { - // msg() << MSG::WARNING << "Nptls != nMasses; no information will be populated." ); - // } - // return; - // } // if invalid prequesits - - - xAOD::TrackParticle::FourMom_t fourMom; for (const auto& ptl : ptls) { @@ -707,6 +640,25 @@ void TrigBphysHelperUtilsTool::setBeamlineDisplacement(xAOD::TrigBphys* bphys, bphys->setTauError(BsTauError); } // setBeamlineDisplacement +double TrigBphysHelperUtilsTool::invariantMassInternal(const xAOD::TrackParticle* const* tracks, const double* masses, size_t N) +{ + double px(0.),py(0.),pz(0.),E(0.); + for(size_t i=0; i<N; i++){ + const auto &pv1 = tracks[i]->p4(); + double mi1 = masses[i]; + px += pv1.Px(); + py += pv1.Py(); + pz += pv1.Pz(); + E += sqrt(mi1*mi1 + + pv1.Px()*pv1.Px() + + pv1.Py()*pv1.Py() + + pv1.Pz()*pv1.Pz() + ); + } + double m2 = E*E - px*px - py*py -pz*pz; + if (m2 < 0) return 0.; + else return std::sqrt(m2); +} std::unique_ptr<Trk::IVKalState> TrigBphysHelperUtilsTool::makeVKalState() const diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.h index 3bb9958f82141793952187b4e96335f6b49d2dd4..8ce0f2412f18e623fd9919ffc657237a63cf7f95 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysHelperUtilsTool.h @@ -77,8 +77,6 @@ class TrigBphysHelperUtilsTool: virtual public ::AthAlgTool /////////////////////////////////////////////////////////////////// // Non-const methods: /////////////////////////////////////////////////////////////////// - void addUnique(std::vector<const Trk::Track*>& tracks, const Trk::Track* trkIn) const; /// Copy of the default method in main code - void addUnique(const xAOD::Muon* muon, std::vector<const xAOD::Muon*> & output, double dEtaCut = 0.005, double dPhiCut=0.005, double dPtCut =-1, xAOD::Muon::TrackParticleType ptype= xAOD::Muon::InnerDetectorTrackParticle) const; /// @@ -131,7 +129,7 @@ class TrigBphysHelperUtilsTool: virtual public ::AthAlgTool // Private data: /////////////////////////////////////////////////////////////////// private: - + static double invariantMassInternal(const xAOD::TrackParticle* const* tracks , const double* masses , size_t N); /// Default constructor: TrigBphysHelperUtilsTool(); @@ -153,22 +151,7 @@ class TrigBphysHelperUtilsTool: virtual public ::AthAlgTool template<size_t N> double TrigBphysHelperUtilsTool::invariantMass(const std::array<const xAOD::TrackParticle*, N> &tracks, const std::array<double, N> &masses){ - double px(0.),py(0.),pz(0.),E(0.); - for(size_t i=0; i<N; i++){ - const auto &pv1 = tracks[i]->p4(); - double mi1 = masses[i]; - px += pv1.Px(); - py += pv1.Py(); - pz += pv1.Pz(); - E += sqrt(mi1*mi1 + - pv1.Px()*pv1.Px() + - pv1.Py()*pv1.Py() + - pv1.Pz()*pv1.Pz() - ); - } - double m2 = E*E - px*px - py*py -pz*pz; - if (m2 < 0) return 0.; - else return std::sqrt(m2); + return invariantMassInternal(tracks.data(), masses.data(), N); } diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx index bac752349938a5a062261bb99d565541f6634ea6..566f41056a765563c57bb91a1ebf6207fad4ade9 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.cxx @@ -15,10 +15,8 @@ **************************************************************************/ #include "TrigBphysMuonCounter.h" - +#include "TrigTimeAlgs/TrigTimer.h" // for TrigTimer #include "xAODMuon/MuonContainer.h" -#include "TrigTimeAlgs/TrigTimerSvc.h" -#include "FourMomUtils/P4Helpers.h" // Define the bins for acceptance-monitoring histogram diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h index 4e892a89f8a0c21a4a538bd4a19963a1f21d1d1b..727f6ab0085f46f57717863ba83d50ed6a5a93d6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysMuonCounter.h @@ -20,8 +20,6 @@ // standard stuff #include <string> -#include <map> -#include <cmath> #include <algorithm> #include "TrigInterfaces/AllTEAlgo.h" diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysTrackRoiMaker.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysTrackRoiMaker.h index 768817fcad09cf34a7adf6f480657f0015e783ee..a8dbc49067a7d0e0c277a401adc65c99c65a16ab 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysTrackRoiMaker.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigBphysTrackRoiMaker.h @@ -17,9 +17,8 @@ #include "TrigInterfaces/FexAlgo.h" #include <string> -// edm classes -#include "xAODBase/IParticle.h" -#include "xAODTracking/TrackParticle.h" +#include <vector> // for vector +#include "TrigSteeringEvent/Enums.h" // for ErrorCode // fwd declare TrigRoiDescriptor class class TrigRoiDescriptor; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx index cd07c6b8f41a2ad1b7afe587a085a71114a47ee7..e180b07e4c626c32f3085e33839d28ae534edcce 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.cxx @@ -26,8 +26,8 @@ #include "TrigTimeAlgs/TrigTimerSvc.h" #include "AthenaKernel/Timeout.h" - - +#include "Constants.h" // for BSMASS +#include "TrigSteeringEvent/TrigRoiDescriptor.h" // for TrigRoiDescriptor // additions of xAOD objects #include "xAODEventInfo/EventInfo.h" #include <memory> @@ -35,15 +35,12 @@ /*----------------------------------------------------------------------------*/ TrigEFBEEXFex::TrigEFBEEXFex(const std::string & name, ISvcLocator* pSvcLocator): HLT::ComboAlgo(name, pSvcLocator) -,m_fitterSvc("Trk::TrkVKalVrtFitter/VertexFitterTool",this) ,m_bphysHelperTool("TrigBphysHelperUtilsTool") ,m_TrigBphysColl_b(NULL) ,m_TrigBphysColl_X(NULL) ,m_TotTimer(0) ,m_VtxFitTimer(0) -,m_VKVFitter(0) - // counters ,m_lastEvent(-1) ,m_lastEventPassed(-1) @@ -56,8 +53,6 @@ HLT::ComboAlgo(name, pSvcLocator) ,m_lastEventPassedBd(-1) ,m_lastEventPassedBs(-1) ,m_countPassedEventsBplus(0) -,m_countPassedEventsBs(0) -,m_countPassedEventsBd(0) ,m_countPassedEEID(0) ,m_countPassedEEOS(0) @@ -89,7 +84,6 @@ HLT::ComboAlgo(name, pSvcLocator) { declareProperty("TrigBphysHelperTool", m_bphysHelperTool); - declareProperty("VertexFitterTool", m_fitterSvc); declareProperty("bphysCollectionKey", m_bphysCollectionKey = "EFBEEXFex" ); declareProperty("AcceptAll", m_acceptAll=true); // Should we just accept all events @@ -138,10 +132,6 @@ HLT::ComboAlgo(name, pSvcLocator) declareProperty("MaxBsToStore", m_maxBsToStore = -1); - // FTK Flag - declareProperty("DoFTK", m_FTK=false); // Are we using FTK?? - - // Monitoring variables // General declareMonitoredStdContainer("Errors", m_mon_Errors, AutoClear); @@ -229,7 +219,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltInitialize() ATH_MSG_DEBUG("Initialization completed successfully:" ); ATH_MSG_DEBUG("AcceptAll = " << (m_acceptAll==true ? "True" : "False") ); - ATH_MSG_DEBUG("DoFTK = " << (m_FTK==true ? "True" : "False") ); ATH_MSG_DEBUG("MaxNcombinations = " << m_maxNcombinations ); ATH_MSG_DEBUG("Activated decays:" ); @@ -245,15 +234,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltInitialize() m_VtxFitTimer = addTimer("EFBEEXFexVtxFit"); } - // retrieving the vertex fitting tool - if (m_fitterSvc.retrieve().isFailure()) { - ATH_MSG_ERROR("Can't find Trk::TrkVKalVrtFitter" ); - return HLT::OK; - } else { - ATH_MSG_DEBUG("Trk::TrkVKalVrtFitter found" ); - m_VKVFitter = dynamic_cast< Trk::TrkVKalVrtFitter* > (&(*m_fitterSvc)); - } - // retrieving BphysHelperUtilsTool if (m_bphysHelperTool.retrieve().isFailure()) { ATH_MSG_ERROR("Can't find TrigBphysHelperUtilsTool" ); @@ -273,12 +253,8 @@ HLT::ErrorCode TrigEFBEEXFex::hltInitialize() m_lastEventPassedBplus=-1; m_lastEventPassedBd=-1; m_lastEventPassedBs=-1; - m_lastEventPassedLb=-1; m_countPassedEventsBplus=0; - m_countPassedEventsBs=0; - m_countPassedEventsBd=0; - m_countPassedEventsLb=0; m_countPassedEEID=0; m_countPassedEEOS=0; @@ -303,9 +279,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltInitialize() m_countPassedPhi1020VtxChi2=0; m_countPassedBsVtx=0; m_countPassedBsVtxChi2=0; - - - return HLT::OK; } @@ -320,8 +293,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltFinalize() ATH_MSG_INFO("Run on events/RoIs " << m_countTotalEvents << "/" << m_countTotalRoI ); ATH_MSG_INFO("Passed events/RoIs " << m_countPassedEvents << "/" << m_countPassedRoIs ); ATH_MSG_INFO("Evts Passed B+: " << m_countPassedEventsBplus ); - ATH_MSG_INFO("Evts Passed Bd: " << m_countPassedEventsBd ); - ATH_MSG_INFO("Evts Passed Bs: " << m_countPassedEventsBs ); ATH_MSG_INFO(std::endl ); ATH_MSG_INFO("PassedEEID: " << m_countPassedEEID ); ATH_MSG_INFO("PassedEEOS: " << m_countPassedEEOS ); @@ -393,7 +364,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE ATH_MSG_WARNING("Failed to get xAOD::EventInfo " ); }else { // found the xAOD event info ATH_MSG_DEBUG(" Run " << evtInfo->runNumber() << " Event " << evtInfo->eventNumber() << " using algo m_lepAlgo" ); -// IdRun = evtInfo->runNumber(); IdEvent = evtInfo->eventNumber(); } // get event info @@ -401,27 +371,13 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE //Check that we got 2 input TEs int lep1_TE=-1; int lep2_TE=-1; - if (!m_FTK) { - if ( inputTE.size() != 2 ) { - ATH_MSG_DEBUG("Got different than 2 number of input TEs: " << inputTE.size() ); - //m_mon_Errors.push_back(ERROR_Not_2_InputTEs); - //if ( timerSvc() ) m_TotTimer->stop(); - //return HLT::BAD_JOB_SETUP; - lep1_TE=0; - lep2_TE=0; - }else{ - lep1_TE=0; - lep2_TE=1; - } - } else { - if ( inputTE.size() != 3 ) { - ATH_MSG_ERROR("FTK mode expect 3 input TEs, got : " << inputTE.size() ); - m_mon_Errors.push_back(ERROR_Not_2_InputTEs); - if ( timerSvc() ) m_TotTimer->stop(); - return HLT::BAD_JOB_SETUP; - } - lep1_TE=1; - lep2_TE=2; + if ( inputTE.size() != 2 ) { + ATH_MSG_DEBUG("Got different than 2 number of input TEs: " << inputTE.size() ); + lep1_TE=0; + lep2_TE=0; + }else{ + lep1_TE=0; + lep2_TE=1; } @@ -445,7 +401,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE //Retrieve ROIs const TrigRoiDescriptor *roiDescriptor1(0); const TrigRoiDescriptor *roiDescriptor2(0); - const TrigRoiDescriptor *roiDescriptorTrk(0); // for FTK chain // get them from the navigation @@ -471,24 +426,10 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE return HLT::NAV_ERROR; } - if (m_FTK) { - if ( getFeature(inputTE[0], roiDescriptorTrk) != HLT::OK ) { - ATH_MSG_ERROR("Navigation error while getting RoI descriptor Trk" ); - m_mon_Errors.push_back(ERROR_No_RoIs); - if ( timerSvc() ) m_TotTimer->stop(); - return HLT::NAV_ERROR; - } - } - - - - ATH_MSG_DEBUG("Using inputTEs: "<< inputTE[lep1_TE] << " and " << inputTE[lep2_TE] << " with Ids " << inputTE[lep1_TE]->getId()<< " AND "<< inputTE[lep2_TE]->getId()); + ATH_MSG_DEBUG("Using inputTEs: "<< inputTE[lep1_TE] << " and " << inputTE[lep2_TE] << " with Ids " << inputTE[lep1_TE]->getId()<< " AND "<< inputTE[lep2_TE]->getId()); ATH_MSG_DEBUG("; RoI IDs = " << roiDescriptor1->roiId()<< " AND " <<roiDescriptor2->roiId()); ATH_MSG_DEBUG(": Eta1 = " << roiDescriptor1->eta() << " Eta2= " <<roiDescriptor2->eta() << ", Phi1 = " << roiDescriptor1->phi() << " Phi2= " <<roiDescriptor2->phi()); - if (m_FTK) { - ATH_MSG_DEBUG("Using inputTE for tracks: "<< inputTE[0] << " " << inputTE[0]->getId() - << "; RoI IDs = " << roiDescriptorTrk->roiId() << ": EtaTrk = " << roiDescriptorTrk->eta() << ", PhiTrk = " << roiDescriptorTrk->phi() ); - } + // Fill RoIs monitoring containers m_mon_RoI_RoI1Eta.push_back(roiDescriptor1->eta()); @@ -519,7 +460,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE // OI : here we probably should check that electron object has passed identification at the previous step - for ( const auto muel : lepContainerEF1 ) { + for ( const auto& muel : lepContainerEF1 ) { //if ( (*muel)->lepType() != xAOD::Lep::Combined && (*muel)->lepType() != xAOD::Lep::SegmentTagged) { // ATH_MSG_DEBUG("Lep from roi1 is neither Combined or SegmentTagged - reject" ); @@ -556,7 +497,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE } ATH_MSG_DEBUG("Found LepContainer, Got LepEF (2) Feature, size = " << lepContainerEF2.size()); - for ( const auto muel : lepContainerEF2 ) { + for ( const auto& muel : lepContainerEF2 ) { //if ( (*muel)->lepType() != xAOD::Electron::Combined && (*muel)->lepType() != xAOD::Electron::SegmentTagged) { // ATH_MSG_DEBUG("Lep from roi2 is neither Combined or SegmentTagged - reject" ); // continue; @@ -578,14 +519,14 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE // build a map of the tracks and corresponding leps std::map<const xAOD::TrackParticle*, ElementLink<xAOD::ElectronContainer> > mapTrkToLeps; - for (const auto mu : lepContainerEF1) { + for (const auto& mu : lepContainerEF1) { auto idtp = (*mu)->trackParticleLink(); if (!idtp.isValid()) continue; if (!*idtp) continue; //if (!(*idtp)->track()) continue; mapTrkToLeps[(*idtp)] = mu; } // lepContainerEF1 - for (const auto mu : lepContainerEF2) { + for (const auto& mu : lepContainerEF2) { auto idtp = (*mu)->trackParticleLink(); if (!idtp.isValid()) continue; if (!*idtp) continue; @@ -596,21 +537,17 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE if(msgLvl() <= MSG::DEBUG){ msg() << MSG::DEBUG << "lepContainerEF1.size()= " << lepContainerEF1.size() << "lepContainerEF2.size()= " << lepContainerEF2.size() << "lepTPELtracks1.size()= " << lepTPELtracks1.size() << "lepTPELtracks2.size()= " << lepTPELtracks2.size() << "lepTPELtracksMerged.size()= " << lepTPELtracksMerged.size()<< endmsg; - for (auto muel: lepTPELtracks1) { + for (const auto& muel: lepTPELtracks1) { msg() << MSG::DEBUG << "lepTPELtracks1: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } - for (auto muel: lepTPELtracks2) { + for (const auto& muel: lepTPELtracks2) { msg() << MSG::DEBUG << "lepTPELtracks2: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } - for (auto muel: lepTPELtracksMerged) { + for (const auto& muel: lepTPELtracksMerged) { msg() << MSG::DEBUG << "lepTPELtracksMerged: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } } // if debug - // TrigEFBphys* trigPartBEEX (NULL); - // FIXME - remove these 'new's - //m_trigBphysColl_b = new TrigEFBphysContainer(); - //m_trigBphysColl_X = new TrigEFBphysContainer(); m_TrigBphysColl_b = new xAOD::TrigBphysContainer(); xAOD::TrigBphysAuxContainer xAODTrigBphysAuxColl_b; @@ -774,7 +711,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE std::map<const xAOD::TrackParticle*, ElementLink<xAOD::TrackParticleContainer> > mapTrackToEL; int idCounter(0); - for (auto trk: tracksRoiI1) { + for (const auto& trk: tracksRoiI1) { // merged_tracks.push_back(trk); addUnique(merged_tracks,*trk); ElIndex tmp; @@ -785,7 +722,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE ++idCounter; } idCounter = 0; - for (auto trk: tracksRoiI2) { + for (const auto& trk: tracksRoiI2) { // merged_tracks.push_back(trk); addUnique(merged_tracks,*trk); ElIndex tmp; @@ -842,10 +779,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE ELlep2.resetWithKeyAndIndex(trkmuit->second.dataID(),trkmuit->second.index()); Found2Track = true; } // if - // ELlep1.resetWithKeyAndIndex(pTp->dataID(),pTp->index()); - // Found1Track = true; - // ELlep2.resetWithKeyAndIndex(mTp->dataID(),mTp->index()); - // Found2Track = true; ATH_MSG_DEBUG("Matching summary: " << Found1Track<<Found2Track << ", Now loop over TrackParticles to find tracks " ); // xAOD::TrackParticleContainer::const_iterator trkIt = merged_tracks.begin(); @@ -862,13 +795,8 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE for (int itrk1=0 ; trkIt1 != lastTrkIt; itrk1++, trkIt1++) { - //const Trk::Track* track1 = (*trkIt1)->track(); const xAOD::TrackParticle* track1 = (*trkIt1); -// ElementLink<xAOD::TrackParticleContainer> trackEL3( mapTrackToIndex[*trkIt1].roi == 1 ? tracksRoiI1[0].dataID() : tracksRoiI2[0].dataID(), mapTrackToIndex[*trkIt1].index); -// ElementLink<xAOD::IParticleContainer> ItrackEL3; -// ItrackEL3.resetWithKeyAndIndex(mapTrackToIndex[*trkIt1].roi == 1 ? tracksRoiI1[0].dataID() : tracksRoiI2[0].dataID(), mapTrackToIndex[*trkIt1].index); - ElementLink<xAOD::TrackParticleContainer> & trackEL3 = mapTrackToIndex[*trkIt1].elLink; ElementLink<xAOD::IParticleContainer> ItrackEL3; ItrackEL3.resetWithKeyAndIndex(trackEL3.dataID(), trackEL3.index()); @@ -961,7 +889,6 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE } if(m_doBd_KstarEEDecay || m_doBs_Phi1020EEDecay ) { - //const Trk::Track* track2 = (*trkIt2)->track(); const xAOD::TrackParticle* track2 = (*trkIt2); // Sergey S. @@ -1203,7 +1130,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE ATH_MSG_WARNING("Failed to getFeaturesLinks trigBphys_X Collection in outputTE" ); } else { if(msgLvl() <= MSG::DEBUG) - for ( const auto eltp: ELvecTBPh) { + for ( const auto& eltp: ELvecTBPh) { msg() << MSG::DEBUG << " ===== TrigBphys Container ElementLinks : " << " index: " << eltp.index() << " sgkey: " << eltp.dataID() @@ -1220,7 +1147,7 @@ HLT::ErrorCode TrigEFBEEXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::TriggerE ElementLink<xAOD::TrigBphysContainer> secEL; // secEL.resetWithKeyAndIndex(KEY,(*BPobj)->secondaryDecayLink().index()); // match transient secondary decay ELs with those from persistified container - for(auto persistentSecEL : ELvecTBPh ) { + for(const auto& persistentSecEL : ELvecTBPh ) { if(*persistentSecEL == *(*BPobj)->secondaryDecayLink()) secEL = persistentSecEL; } @@ -1334,7 +1261,7 @@ xAOD::TrigBphys* TrigEFBEEXFex::checkBplusEEKplus(const ElementLink<xAOD::TrackP } // if m_doB_KEEVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { result->addTrackParticleLink(tpel); } } @@ -1521,7 +1448,7 @@ xAOD::TrigBphys* TrigEFBEEXFex::checkBEE2X(const ElementLink<xAOD::TrackParticle } // do2XVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -1547,7 +1474,7 @@ xAOD::TrigBphys* TrigEFBEEXFex::checkBEE2X(const ElementLink<xAOD::TrackParticle } // doBEE2XVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -1558,30 +1485,6 @@ xAOD::TrigBphys* TrigEFBEEXFex::checkBEE2X(const ElementLink<xAOD::TrackParticle } // checkBEE2X - -/*----------------------------------------------------------------------------*/ -void TrigEFBEEXFex::addUnique(std::vector<const Trk::Track*>& tracks, const Trk::Track* trkIn) -{ - // std::cout<<" in addUnique : trkIn pT= "<<trkIn->perigeeParameters()->pT()<<std::endl; - std::vector<const Trk::Track*>::iterator tItr; - for( tItr = tracks.begin(); tItr != tracks.end(); tItr++) - { - double dPhi=fabs((*tItr)->perigeeParameters()->parameters()[Trk::phi] - - trkIn->perigeeParameters()->parameters()[Trk::phi]); - if (dPhi > M_PI) dPhi = 2.*M_PI - dPhi; - - if( fabs(dPhi) < 0.02 && - fabs((*tItr)->perigeeParameters()->eta() - - trkIn->perigeeParameters()->eta()) < 0.02 ) - { //std::cout<<" TrigEFBEEFex addUnique: the SAME tracks! pT= "<< - //trkIn->perigeeParameters()->pT()<<" and "<< - //(*tItr)->perigeeParameters()->pT()<<std::endl; - return; - } - } - tracks.push_back(trkIn); -} - /*----------------------------------------------------------------------------*/ void TrigEFBEEXFex::addUnique(std::vector<const xAOD::TrackParticle*>& tps, const xAOD::TrackParticle* tpIn) { @@ -1644,149 +1547,93 @@ bool TrigEFBEEXFex::isUnique(const xAOD::TrackParticle* id1, const xAOD::Track double TrigEFBEEXFex::XMass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, int decay) { /// checking the mass - std::vector<double> massHypo; - massHypo.clear(); + std::array<double, 2> massHypo; if(decay == di_to_electrons){ - massHypo.push_back(EMASS); - massHypo.push_back(EMASS); + massHypo[0] = EMASS; + massHypo[1] = EMASS; } - if(decay == bD_to_Kstar){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); + else if(decay == bD_to_Kstar){ + massHypo[0] = KPLUSMASS; + massHypo[1] = PIMASS; + } + else if(decay == bS_to_Phi){ + massHypo[0] = KPLUSMASS; + massHypo[1] = KPLUSMASS; } - if(decay == bS_to_Phi){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); + else if(decay == bC_to_PiPi){ + massHypo[0] = PIMASS; + massHypo[1] = PIMASS; } - if(decay == bC_to_PiPi){ - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); + else if(decay == lB_to_L){ + massHypo[0] = PROTONMASS; + massHypo[1] = PIMASS; } - if(decay == lB_to_L){ - massHypo.push_back(PROTONMASS); - massHypo.push_back(PIMASS); + else{ + throw std::runtime_error("unknown decay TrigEFBEEXFex::XEEMass"); } - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); + const std::array<const xAOD::TrackParticle*, 2> bTracks{particle1, particle2}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::X3Mass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static const std::array<double, 3> massHypo{KPLUSMASS, KPLUSMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 3> bTracks{particle1, particle2, particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::XKPiPiMass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static const std::array<double, 3> massHypo{ KPLUSMASS, PIMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 3> bTracks{ particle1, particle2, particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::KEEMass( const xAOD::TrackParticle* lep1, const xAOD::TrackParticle* lep2, const xAOD::TrackParticle* kaon) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(EMASS); - massHypo.push_back(EMASS); - massHypo.push_back(KPLUSMASS); //K - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(lep1); - bTracks.push_back(lep2); - bTracks.push_back(kaon); + static const std::array<double, 3> massHypo{ EMASS, EMASS, KPLUSMASS}; + const std::array<const xAOD::TrackParticle*, 3> bTracks{lep1, lep2, kaon}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::XEEMass(const xAOD::TrackParticle* lep1, const xAOD::TrackParticle* lep2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, int decay){ - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(EMASS); - massHypo.push_back(EMASS); + std::array<double, 4> massHypo; + massHypo[0] = EMASS; + massHypo[1] = EMASS; if(decay == bD_to_Kstar){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); + massHypo[2] = KPLUSMASS; + massHypo[3] = PIMASS; } - if(decay == bS_to_Phi){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); + else if(decay == bS_to_Phi){ + massHypo[2] = KPLUSMASS; + massHypo[3] = KPLUSMASS; } - if(decay == bC_to_PiPi){ - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); + else if(decay == bC_to_PiPi){ + massHypo[2] = PIMASS; + massHypo[3] = PIMASS; } - if(decay == lB_to_L){ - massHypo.push_back(PROTONMASS); - massHypo.push_back(PIMASS); + else if(decay == lB_to_L){ + massHypo[2] = PROTONMASS; + massHypo[3] = PIMASS; + }else{ + throw std::runtime_error("unknown decay TrigEFBEEXFex::XEEMass"); } - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(lep1); - bTracks.push_back(lep2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); + std::array<const xAOD::TrackParticle*, 4> bTracks{ lep1, lep2, particle1, particle2 }; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::X3EEMass(const xAOD::TrackParticle* lep1, const xAOD::TrackParticle* lep2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(EMASS); - massHypo.push_back(EMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(lep1); - bTracks.push_back(lep2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 5> massHypo{ EMASS, EMASS, KPLUSMASS, KPLUSMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 5> bTracks{lep1, lep2, particle1, particle2, particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBEEXFex::XKPiPiEEMass(const xAOD::TrackParticle* lep1, const xAOD::TrackParticle* lep2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(EMASS); - massHypo.push_back(EMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(lep1); - bTracks.push_back(lep2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 5> massHypo{EMASS, EMASS, KPLUSMASS, PIMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 5> bTracks{ lep1, lep2, particle1, particle2, particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); - } diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.h index 9fde079ee80583e01c42a9a0efbf9f74155fb279..d093122e281cdf551dce1998949016086b6bc3cd 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBEEXFex.h @@ -24,11 +24,7 @@ #include <string> // trigger includes #include "TrigInterfaces/ComboAlgo.h" -#include "TrigSteeringEvent/TrigRoiDescriptor.h" -#include "TrkVKalVrtFitter/TrkVKalVrtFitter.h" -#include "Constants.h" -#include "BtrigUtils.h" #include "TrigBphysHelperUtilsTool.h" #include "xAODEventInfo/EventInfo.h" @@ -53,8 +49,6 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { private: - ToolHandle < Trk::IVertexFitter > m_fitterSvc; - ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; // container inputs names @@ -99,11 +93,6 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { float m_bSVtxChi2Cut; int m_maxBsToStore; - - - // FTK Flag - bool m_FTK; - // Monitoring variables and containers // General std::vector<int> m_mon_Errors; @@ -179,10 +168,6 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { // to set Accept-All mode: should be done with force-accept when possible bool m_acceptAll; - - // TrigEFBphysContainer* m_trigBphysColl_b; - // TrigEFBphysContainer* m_trigBphysColl_X; - xAOD::TrigBphysContainer * m_TrigBphysColl_b; xAOD::TrigBphysContainer * m_TrigBphysColl_X; @@ -190,8 +175,6 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { TrigTimer* m_TotTimer; TrigTimer* m_VtxFitTimer; - Trk::TrkVKalVrtFitter* m_VKVFitter; - //Counters int m_lastEvent; int m_lastEventPassed; @@ -203,11 +186,7 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { int m_lastEventPassedBplus; int m_lastEventPassedBd; int m_lastEventPassedBs; - int m_lastEventPassedLb; unsigned int m_countPassedEventsBplus; - unsigned int m_countPassedEventsBs; - unsigned int m_countPassedEventsBd; - unsigned int m_countPassedEventsLb; unsigned int m_countPassedEEID; unsigned int m_countPassedEEOS; @@ -238,7 +217,6 @@ class TrigEFBEEXFex: public HLT::ComboAlgo { - void addUnique(std::vector<const Trk::Track*>&, const Trk::Track*); void addUnique(std::vector<const xAOD::TrackParticle*>&, const xAOD::TrackParticle*); void addUnique(std::vector<ElementLink<xAOD::TrackParticleContainer> >&, const ElementLink<xAOD::TrackParticleContainer>&); bool isUnique(const xAOD::TrackParticle* id1, const xAOD::TrackParticle* id2) const; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx index f0190d1a12f4f73a30345f86837f0de8c9566625..ba3b44411cc3e39be7b3ba4141746a329cf116da 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.cxx @@ -13,16 +13,12 @@ **************************************************************************/ #include "TrigEFBMuMuFex.h" -#include "BtrigUtils.h" #include "TrigBphysHelperUtilsTool.h" #include "TrigTimeAlgs/TrigTimerSvc.h" -#include <iostream> -//class ISvcLocator; // additions of xAOD objects -#include "xAODEventInfo/EventInfo.h" #include "xAODMuon/MuonContainer.h" #include "xAODTracking/TrackParticle.h" #include "xAODTracking/TrackParticleContainer.h" @@ -32,11 +28,7 @@ TrigEFBMuMuFex::TrigEFBMuMuFex(const std::string & name, ISvcLocator* pSvcLocator): HLT::ComboAlgo(name, pSvcLocator) -// m_fitterSvc("Trk::TrkVKalVrtFitter/VertexFitterTool",this), ,m_bphysHelperTool("TrigBphysHelperUtilsTool") -//m_trigBphysColl(NULL), -//m_xAODTrigBphysColl(NULL), -//m_xAODTrigBphysAuxColl(NULL) ,m_BmmHypTot(0),m_BmmHypVtx(0) ,m_expectNumberOfInputTE(2) ,m_massMuon(105.6583715) @@ -80,7 +72,6 @@ HLT::ComboAlgo(name, pSvcLocator) declareProperty("LowerMassCut", m_lowerMassCut=2000.0); declareProperty("UpperMassCut", m_upperMassCut=10000.0); declareProperty("ApplyUpperMassCut", m_ApplyupperMassCut=true); - //declareProperty("VertexFitterTool", m_fitterSvc); declareProperty("MuonAlgo" , m_muonAlgo="TrigMuSuperEF"); declareProperty("ExtrapolatedTrackParticleContName", m_SAMuonLabel="MuonEFInfo_ExtrapTrackParticles"); declareProperty("noId" , m_noId = false); @@ -335,7 +326,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass // loop over the vector of muon containers msg() << MSG::DEBUG << "MuonContainer, Got MuonEF " << ic << " Feature, size = " << muelv.size() << endmsg; int i(0); - for ( const auto muel: muelv) { + for ( const auto& muel: muelv) { msg() << MSG::DEBUG << "ELLink: " << i++ << " index: " << muel.index() << " sgkey: " << muel.dataID() @@ -363,7 +354,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass for ( const auto& tpelv : vec_elv_tps) { msg() << MSG::DEBUG << "SATrackParticleContainer, Got MUSA " << ic << " Feature, size = " << tpelv.size() << endmsg; int i(0); - for ( const auto tpel: tpelv) { + for ( const auto& tpel: tpelv) { msg() << MSG::DEBUG << "ELLink: " << i++ << " index: " << tpel.index() << " sgkey: " << tpel.dataID() @@ -378,7 +369,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass // for each of the two roi's make muons selection (not roi2 has m_noID complexity) std::vector<const xAOD::Muon*> muons0, muons1, muonsAll; - for (const auto muel: vec_elv_muons[0]){ + for (const auto& muel: vec_elv_muons[0]){ if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) { ATH_MSG_DEBUG("Muon from roi1 is neither Combined or SegmentTagged - reject" ); continue; @@ -388,7 +379,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass m_bphysHelperTool->addUnique(*muel, muonsAll,0.005,0.005,10, m_muonParticleType); } // roi1 if(vec_elv_muons.size() > 1) { - for (const auto muel: vec_elv_muons[1]){ + for (const auto& muel: vec_elv_muons[1]){ // special case if noId set if (m_noId) { // no check needed for the noID @@ -437,7 +428,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass xAOD::TrigBphys * bphys = m_resultsHolder.back(); ElementLink<xAOD::IParticleContainer> ptl1EL,ptl2EL; bool foundMu0(false), foundMu1(false); - for ( const auto muel: vec_elv_muons[0] ) { + for ( const auto& muel: vec_elv_muons[0] ) { if ( *muel == mu0) { ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index()); foundMu0 = true; @@ -449,7 +440,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass if (foundMu0 && foundMu1) break; // found both links } if(vec_elv_muons.size() > 1) { - for ( const auto muel: vec_elv_muons[1] ) { + for ( const auto& muel: vec_elv_muons[1] ) { if ( *muel == mu0) { ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index()); foundMu0 = true; @@ -490,7 +481,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass xAOD::TrigBphys * bphys = m_resultsHolder.back(); ElementLink<xAOD::IParticleContainer> ptl1EL,ptl2EL; bool foundMu0(false), foundMu1(false); - for ( const auto muel: vec_elv_muons[0] ) { + for ( const auto& muel: vec_elv_muons[0] ) { if ( *muel == mu0) { ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index()); foundMu0 = true; @@ -502,7 +493,7 @@ HLT::ErrorCode TrigEFBMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass if (foundMu0 && foundMu1) break; // found both links } if(vec_elv_muons.size() > 1) { - for ( const auto muel: vec_elv_muons[1] ) { + for ( const auto& muel: vec_elv_muons[1] ) { if ( *muel == mu0) { ptl1EL.resetWithKeyAndIndex(muel.dataID(),muel.index()); foundMu0 = true; @@ -584,10 +575,8 @@ void TrigEFBMuMuFex::buildCombination(const xAOD::Muon *mu0, const xAOD::Muon *m const xAOD::TrackParticle* tp1 = mu1->trackParticle(m_noId ? xAOD::Muon::MuonSpectrometerTrackParticle : m_muonParticleType); if (!tp0) return; if (!tp1) return; - const Trk::Track * trk0 = tp0->track(); - const Trk::Track * trk1 = tp1->track(); - if (trk1 && (trk1 == trk0)) { - ATH_MSG_DEBUG("Same Trk::Track pointers" ); + if (tp0 == tp1) { + ATH_MSG_DEBUG("Same xAOD::TrackParticle pointers" ); return; } // if tracks the same @@ -597,8 +586,8 @@ void TrigEFBMuMuFex::buildCombination(const xAOD::Muon *mu0, const xAOD::Muon *m } // track uniqueness m_mon_Acceptance.push_back( ACCEPT_MuMu_Unique ); // opposite charge requirement - ATH_MSG_VERBOSE("Charges combination: " << mu0 << ": " << mu0->charge() << " " << tp0->qOverP() << " " << (trk0 ? trk0->perigeeParameters()->charge() : -99) - << " , " << mu1 << ": " << mu1->charge() << " " << tp1->qOverP() << " " << (trk1 ? trk1->perigeeParameters()->charge() : -99)); + ATH_MSG_VERBOSE("Charges combination: " << mu0 << ": " << mu0->charge() << " " << tp0->qOverP() << " " << tp0->charge() + << " , " << mu1 << ": " << mu1->charge() << " " << tp1->qOverP() << " " << tp1->charge()); if (m_oppositeCharge && (tp0->charge() * tp1->charge() > 0)) { ATH_MSG_DEBUG("Reject permutation due to opposite charge requirement: " << mu0->charge() << " " << mu1->charge() ); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.h index f27dbd8252d336a016e221c96b862faa838059d6..394e87a74198454d05637d3d73459a2f15973468 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuFex.h @@ -21,13 +21,10 @@ // standard stuff #include <string> -#include <map> -#include <cmath> // general athena stuff //// trigger includes #include "TrigInterfaces/ComboAlgo.h" #include "xAODMuon/Muon.h" -#include "AthLinks/ElementLink.h" // forward includes class TrigBphysHelperUtilsTool; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.cxx index 54fe1e0ba407ca3341b356726ee2817e9efb216d..76bdfc96cee05d0546b4369b35493fcc0e7ebd32 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.cxx @@ -18,23 +18,17 @@ ** **************************************************************************/ -//#include "TrigMuonEvent/CombinedMuonFeature.h" - #include "TrigEFBMuMuHypo.h" #include <math.h> #include "xAODTrigger/TrigPassBits.h" -#include "TrigNavigation/Navigation.h" // additions of xAOD objects #include "xAODEventInfo/EventInfo.h" #include "xAODTracking/TrackParticle.h" -#include "xAODMuon/Muon.h" -#include "xAODMuon/MuonContainer.h" #include "xAODTrigBphys/TrigBphys.h" #include "xAODTrigBphys/TrigBphysContainer.h" -//#include "xAODTrigBphys/TrigBphysAuxContainer.h" class ISvcLocator; @@ -149,12 +143,8 @@ HLT::ErrorCode TrigEFBMuMuHypo::hltExecute(const HLT::TriggerElement* outputTE, ATH_MSG_DEBUG("AcceptAll is set to : " << (m_acceptAll ? "True, taking all events " : "False, applying selection" )); // create vector for TrigEFBphys particles - // const TrigEFBphysContainer* trigBphysColl = 0; const xAOD::TrigBphysContainer* trigBphysColl(0); -// const TrigEFBContainer* trigBphysColl = 0; -// const VxContainer* VertexColl; - HLT::ErrorCode status = getFeature(outputTE, trigBphysColl, "EFBMuMuFex"); if ( status != HLT::OK ) { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.h index ce88e25bb429f6e57d9166bbb2f7d3f05eb301a9..f8c69638592de7738bf2ac38f0ed505577df90c6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuHypo.h @@ -25,7 +25,6 @@ #include "TrigInterfaces/HypoAlgo.h" #include "BeamSpotConditionsData/BeamSpotData.h" -#include "Constants.h" class TrigEFBMuMuHypo: public HLT::HypoAlgo { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx index 26b31d7a149ed650cc3c8311380422a72b45ca60..afd2b59da5e88cc9ef43893cfdaab35975b33f41 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.cxx @@ -320,10 +320,6 @@ HLT::ComboAlgo(name, pSvcLocator) declareProperty("BcD0VtxChi2Cut", m_bCD0VtxChi2Cut = 120.); // default = 120.0 declareProperty("MaxBcD0ToStore", m_maxBcD0ToStore = -1); - // FTK Flag - declareProperty("DoFTK", m_FTK=false); // Are we using FTK?? - - // Monitoring variables // General declareMonitoredStdContainer("Errors", m_mon_Errors, AutoClear); @@ -510,7 +506,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltInitialize() ATH_MSG_DEBUG("Initialization completed successfully:" ); ATH_MSG_DEBUG("AcceptAll = " << (m_acceptAll==true ? "True" : "False") ); - ATH_MSG_DEBUG("DoFTK = " << (m_FTK==true ? "True" : "False") ); ATH_MSG_DEBUG("MaxNcombinations = " << m_maxNcombinations ); ATH_MSG_DEBUG("Activated decays:" ); ATH_MSG_DEBUG(" B+ -> mu mu K+ : " << (m_doB_KMuMuDecay==true ? "True" : "False") ); @@ -778,28 +773,15 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge //Check that we got 2 input TEs int mu1_TE=-1; int mu2_TE=-1; - if (!m_FTK) { - if ( inputTE.size() != 2 ) { - ATH_MSG_DEBUG("Got different than 2 number of input TEs: " << inputTE.size() ); - //m_mon_Errors.push_back(ERROR_Not_2_InputTEs); - //if ( timerSvc() ) m_TotTimer->stop(); - //return HLT::BAD_JOB_SETUP; - mu1_TE=0; - mu2_TE=0; - }else{ - mu1_TE=0; - mu2_TE=1; - } - } else { - if ( inputTE.size() != 3 ) { - ATH_MSG_ERROR("FTK mode expect 3 input TEs, got : " << inputTE.size() ); - m_mon_Errors.push_back(ERROR_Not_2_InputTEs); - if ( timerSvc() ) m_TotTimer->stop(); - return HLT::BAD_JOB_SETUP; - } - mu1_TE=1; - mu2_TE=2; + if ( inputTE.size() != 2 ) { + ATH_MSG_DEBUG("Got different than 2 number of input TEs: " << inputTE.size() ); + mu1_TE=0; + mu2_TE=0; + }else{ + mu1_TE=0; + mu2_TE=1; } + if(IdEvent!=m_lastEvent) { @@ -824,7 +806,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge //Retrieve ROIs const TrigRoiDescriptor *roiDescriptor1(0); const TrigRoiDescriptor *roiDescriptor2(0); - const TrigRoiDescriptor *roiDescriptorTrk(0); // for FTK chain // get them from the navigation @@ -850,22 +831,10 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge return HLT::NAV_ERROR; } - if (m_FTK) { - if ( getFeature(inputTE[0], roiDescriptorTrk) != HLT::OK ) { - ATH_MSG_ERROR("Navigation error while getting RoI descriptor Trk" ); - m_mon_Errors.push_back(ERROR_No_RoIs); - if ( timerSvc() ) m_TotTimer->stop(); - return HLT::NAV_ERROR; - } - } ATH_MSG_DEBUG("Using inputTEs: "<< inputTE[mu1_TE] << " and " << inputTE[mu2_TE] << " with Ids " << inputTE[mu1_TE]->getId()<< " AND "<< inputTE[mu2_TE]->getId() << "; RoI IDs = " << roiDescriptor1->roiId()<< " AND " <<roiDescriptor2->roiId() << ": Eta1 = " << roiDescriptor1->eta() << " Eta2= " <<roiDescriptor2->eta() << ", Phi1 = " << roiDescriptor1->phi() << " Phi2= " <<roiDescriptor2->phi() ); - if (m_FTK) { - ATH_MSG_DEBUG("Using inputTE for tracks: "<< inputTE[0] << " " << inputTE[0]->getId() - << "; RoI IDs = " << roiDescriptorTrk->roiId() << ": EtaTrk = " << roiDescriptorTrk->eta() << ", PhiTrk = " << roiDescriptorTrk->phi()); - } // Fill RoIs monitoring containers m_mon_RoI_RoI1Eta.push_back(roiDescriptor1->eta()); @@ -879,8 +848,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge m_mon_RoI_dPhiRoI.push_back( fabs(tmp_RoI_dPhiRoI) ); // Retrieve muons - //std::vector<const Trk::Track*> muidIDtracks1; - //std::vector<const Trk::Track*> muidIDtracks2; //JW std::vector<ElementLink<xAOD::TrackParticleContainer> > muonTPELtracks1; std::vector<ElementLink<xAOD::TrackParticleContainer> > muonTPELtracks2; @@ -903,7 +870,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge } ATH_MSG_DEBUG("Found MuonContainer, Got MuonEF (1) Feature, size = " << muonContainerEF1.size()); - for ( const auto muel : muonContainerEF1 ) { + for ( const auto& muel : muonContainerEF1 ) { if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) { ATH_MSG_DEBUG("Muon from roi1 is neither Combined or SegmentTagged - reject" ); continue; @@ -917,12 +884,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge ATH_MSG_DEBUG("No innerdetector muon1 TrackParticle found" ); continue; } - //const Trk::Track* indetTrack = idtp->track(); - //if ( !indetTrack ) { - // ATH_MSG_DEBUG("No id muon1 id Trk::Track found" ); - // continue; - //} - //addUnique(muidIDtracks1, indetTrack); addUnique(muonTPELtracks1,idtpEl); addUnique(muonTPELtracksMerged,idtpEl); @@ -944,7 +905,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge } ATH_MSG_DEBUG("Found MuonContainer, Got MuonEF (2) Feature, size = " << muonContainerEF2.size()); - for ( const auto muel : muonContainerEF2 ) { + for ( const auto& muel : muonContainerEF2 ) { if ( (*muel)->muonType() != xAOD::Muon::Combined && (*muel)->muonType() != xAOD::Muon::SegmentTagged) { ATH_MSG_DEBUG("Muon from roi2 is neither Combined or SegmentTagged - reject" ); continue; @@ -958,12 +919,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge ATH_MSG_DEBUG("No innerdetector muon2 TrackParticle found" ); continue; } - // const Trk::Track* indetTrack = idtp->track(); - // if ( !indetTrack ) { - // ATH_MSG_DEBUG("No id muon2 id Trk::Track found" ); - // continue; - // } - //addUnique(muidIDtracks2, indetTrack); addUnique(muonTPELtracks2,idtpEl); addUnique(muonTPELtracksMerged,idtpEl); ATH_MSG_DEBUG("Comb muon 1 pt/eta/phi " << idtp->pt() << " / " << idtp->eta() << " / " << idtp->phi()); @@ -973,7 +928,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge // build a map of the tracks and corresponding muons std::map<const xAOD::TrackParticle*, ElementLink<xAOD::MuonContainer> > mapTrkToMuons; //for (auto& muCont: muonContainerEF1) { - for (const auto mu : muonContainerEF1) { + for (const auto& mu : muonContainerEF1) { auto idtp = (*mu)->inDetTrackParticleLink(); if (!idtp.isValid()) continue; if (!*idtp) continue; @@ -982,7 +937,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge } // muCont //} // muonContainerEF1 //for (auto& muCont: muonContainerEF2) { - for (const auto mu : muonContainerEF2) { + for (const auto& mu : muonContainerEF2) { auto idtp = (*mu)->inDetTrackParticleLink(); if (!idtp.isValid()) continue; if (!*idtp) continue; @@ -995,23 +950,17 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge msg() << MSG::DEBUG << "muonContainerEF1.size()= " << muonContainerEF1.size()<< " muonContainerEF2.size()= " << muonContainerEF2.size() << " uonTPELtracks1.size()= " << muonTPELtracks1.size() << " muonTPELtracks2.size()= " << muonTPELtracks2.size() << " muonTPELtracksMerged.size()= " << muonTPELtracksMerged.size() <<endmsg; - for (auto muel: muonTPELtracks1) { + for (const auto& muel: muonTPELtracks1) { msg() << MSG::DEBUG << "muonTPELtracks1: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } - for (auto muel: muonTPELtracks2) { + for (const auto& muel: muonTPELtracks2) { msg() << MSG::DEBUG << "muonTPELtracks2: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } - for (auto muel: muonTPELtracksMerged) { + for (const auto& muel: muonTPELtracksMerged) { msg() << MSG::DEBUG << "muonTPELtracksMerged: " << *muel << " " << (*muel)->pt() << " , " << (*muel)->eta() << " , " << (*muel)->phi() << " , " << (*muel)->charge() << endmsg; } } // if debug - - // TrigEFBphys* trigPartBMuMuX (NULL); - // FIXME - remove these 'new's - //m_trigBphysColl_b = new TrigEFBphysContainer(); - //m_trigBphysColl_X = new TrigEFBphysContainer(); - m_TrigBphysColl_b = new xAOD::TrigBphysContainer(); xAOD::TrigBphysAuxContainer xAODTrigBphysAuxColl_b; m_TrigBphysColl_b->setStore(&xAODTrigBphysAuxColl_b); @@ -1038,17 +987,10 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge } else { // Loop over muons - //std::vector<ElementLink<xAOD::TrackParticleContainer> >::iterator pElItr=muonTPELtracks1.begin(); - //std::vector<ElementLink<xAOD::TrackParticleContainer> >::iterator mElItr=muonTPELtracks2.begin(); - std::vector<ElementLink<xAOD::TrackParticleContainer> >::iterator pElItr=muonTPELtracksMerged.begin(); - std::vector<ElementLink<xAOD::TrackParticleContainer> >::iterator mElItr=muonTPELtracksMerged.begin(); - - // for(pElItr=muonTPELtracks1.begin(); pElItr != muonTPELtracks1.end(); pElItr++) { - // for(mElItr=muonTPELtracks2.begin(); mElItr != muonTPELtracks2.end(); mElItr++) { const Amg::Vector3D beamspot = m_bphysHelperTool->getBeamSpot(Gaudi::Hive::currentContext()); - for(pElItr=muonTPELtracksMerged.begin(); pElItr != muonTPELtracksMerged.end(); ++pElItr) { - for(mElItr=pElItr+1; mElItr != muonTPELtracksMerged.end(); ++mElItr) { + for(auto pElItr=muonTPELtracksMerged.begin(); pElItr != muonTPELtracksMerged.end(); ++pElItr) { + for(auto mElItr=pElItr+1; mElItr != muonTPELtracksMerged.end(); ++mElItr) { auto pTp = **pElItr; auto mTp = **mElItr; ATH_MSG_DEBUG("Try to build muon pair from mu1 " << *(*pElItr) << ", mu2 " << *(*mElItr) ); @@ -1193,7 +1135,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge std::map<const xAOD::TrackParticle*, ElementLink<xAOD::TrackParticleContainer> > mapTrackToEL; int idCounter(0); - for (auto trk: tracksRoiI1) { + for (const auto& trk: tracksRoiI1) { // merged_tracks.push_back(trk); addUnique(merged_tracks,*trk); ElIndex tmp; @@ -1204,7 +1146,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge ++idCounter; } idCounter = 0; - for (auto trk: tracksRoiI2) { + for (const auto& trk: tracksRoiI2) { // merged_tracks.push_back(trk); addUnique(merged_tracks,*trk); ElIndex tmp; @@ -1284,7 +1226,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge for (int itrk1=0 ; trkIt1 != lastTrkIt; itrk1++, trkIt1++) { - //const Trk::Track* track1 = (*trkIt1)->track(); const xAOD::TrackParticle* track1 = (*trkIt1); // ElementLink<xAOD::TrackParticleContainer> trackEL3( mapTrackToIndex[*trkIt1].roi == 1 ? tracksRoiI1[0].dataID() : tracksRoiI2[0].dataID(), mapTrackToIndex[*trkIt1].index); @@ -1381,7 +1322,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge } if(m_doBd_KstarMuMuDecay || m_doBs_Phi1020MuMuDecay || m_doLb_LambdaMuMuDecay || m_doBc_DsMuMuDecay || m_doBc_DplusMuMuDecay || m_doBc_DstarMuMuDecay || m_doBc_D0MuMuDecay) { - //const Trk::Track* track2 = (*trkIt2)->track(); const xAOD::TrackParticle* track2 = (*trkIt2); // Sergey S. @@ -1747,7 +1687,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge for (int itrk3=0 ; trkIt3 != lastTrkIt; itrk3++, trkIt3++) { - //const Trk::Track* track3 = (*trkIt3)->track(); const xAOD::TrackParticle* track3 = *trkIt3; // looping over all tracks, so expect to same tracks, but should skip those combinations @@ -1888,7 +1827,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge for (int itrk3=0 ; trkIt3 != lastTrkIt; itrk3++, trkIt3++) { - //const Trk::Track* track3 = (*trkIt3)->track(); const xAOD::TrackParticle* track3 = *trkIt3; // looping over all tracks, so expect to same tracks, but should skip those combinations @@ -2040,7 +1978,6 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge for (int itrk3=0 ; trkIt3 != lastTrkIt; itrk3++, trkIt3++) { - //const Trk::Track* track3 = (*trkIt3)->track(); const xAOD::TrackParticle* track3 = *trkIt3; // looping over all tracks, so expect to same tracks, but should skip those combinations @@ -2286,7 +2223,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge ATH_MSG_WARNING( "Failed to getFeaturesLinks trigBphys_X Collection in outputTE" ); } else { if(msgLvl() <= MSG::DEBUG){ - for ( const auto eltp: ELvecTBPh) { + for ( const auto& eltp: ELvecTBPh) { msg() << MSG::DEBUG << " ===== TrigBphys Container ElementLinks : " << " index: " << eltp.index() << " sgkey: " << eltp.dataID() @@ -2304,7 +2241,7 @@ HLT::ErrorCode TrigEFBMuMuXFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigge ElementLink<xAOD::TrigBphysContainer> secEL; // secEL.resetWithKeyAndIndex(KEY,(*BPobj)->secondaryDecayLink().index()); // match transient secondary decay ELs with those from persistified container - for(auto persistentSecEL : ELvecTBPh ) { + for(const auto& persistentSecEL : ELvecTBPh ) { if(*persistentSecEL == *(*BPobj)->secondaryDecayLink()) secEL = persistentSecEL; } @@ -2422,7 +2359,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBplusMuMuKplus(const ElementLink<xAOD::Tr } // if m_doB_KMuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { result->addTrackParticleLink(tpel); } } @@ -2521,7 +2458,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDs(const ElementLink<xAOD::TrackPar } // m_doDs_Vertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -2644,7 +2581,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDs(const ElementLink<xAOD::TrackPar m_mon_BcMuMuDs_Chi2_Bc.push_back(chi2XMuMu); // manually attach the track links to fitVtx - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } @@ -2687,7 +2624,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDs(const ElementLink<xAOD::TrackPar } //m_doBc_DsMuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -2786,7 +2723,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDplus(const ElementLink<xAOD::Track } // m_doDplus_Vertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -2912,7 +2849,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDplus(const ElementLink<xAOD::Track m_mon_BcMuMuDplus_Chi2_Bc.push_back(chi2XMuMu); // manually attach the track links to fitVtx - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } @@ -2955,7 +2892,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDplus(const ElementLink<xAOD::Track } //m_doBc_DplusMuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -2982,7 +2919,6 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track xAOD::TrigBphys * fitVtx(nullptr); std::vector<double> massHypoD0 = {KPLUSMASS,PIMASS}; - std::vector<double> massHypoX = {KPLUSMASS,PIMASS,PIMASS}; std::vector<double> massHypo = {MUMASS,MUMASS,KPLUSMASS,PIMASS,PIMASS}; float massX; float massXMuMu; @@ -3025,12 +2961,10 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track xAOD::TrigBphys::BCDSTMUMU, massXMuMu, xAOD::TrigBphys::EF); std::vector<ElementLink<xAOD::TrackParticleContainer> > vec_tracksD0; - std::vector<ElementLink<xAOD::TrackParticleContainer> > vec_tracksX; std::vector<ElementLink<xAOD::TrackParticleContainer> > vec_tracks; if ( ((*eltrack1)->charge())*((*eltrack3)->charge()) < 0 ) { vec_tracksD0 = {eltrack1,eltrack2}; - vec_tracksX = {eltrack1,eltrack2,eltrack3}; vec_tracks = {elmu1,elmu2,eltrack1,eltrack2,eltrack3}; m_mon_BcMuMuDstar_Pt_K.push_back ((*eltrack1)->pt()*0.001); @@ -3041,7 +2975,6 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track m_mon_BcMuMuDstar_Phi_pi.push_back((*eltrack2)->phi()); } else { vec_tracksD0 = {eltrack2,eltrack1}; - vec_tracksX = {eltrack2,eltrack1,eltrack3}; vec_tracks = {elmu1,elmu2,eltrack2,eltrack1,eltrack3}; m_mon_BcMuMuDstar_Pt_K.push_back ((*eltrack2)->pt()*0.001); @@ -3087,7 +3020,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track } // m_doDplus_Vertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksD0) { + for(const auto& tpel : vec_tracksD0) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -3227,7 +3160,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track m_mon_BcMuMuDstar_Chi2_Bc.push_back(chi2XMuMu); // manually attach the track links to fitVtx - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } @@ -3268,7 +3201,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuDstar(const ElementLink<xAOD::Track } //m_doBc_DstarMuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -3385,7 +3318,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuD0(const ElementLink<xAOD::TrackPar } // m_doDplus_Vertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -3513,7 +3446,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuD0(const ElementLink<xAOD::TrackPar m_mon_BcMuMuD0_Chi2_Bc.push_back(chi2XMuMu); // manually attach the track links to fitVtx - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } @@ -3554,7 +3487,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBcMuMuD0(const ElementLink<xAOD::TrackPar } //m_doBc_D0MuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -3651,7 +3584,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkLbMuMuLambda(const ElementLink<xAOD::Trac } // m_doDplus_Vertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -3796,7 +3729,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkLbMuMuLambda(const ElementLink<xAOD::Trac m_mon_LbMuMuLambda_FinMass_Lb.push_back(massXMuMu/1000.); // manually attach the track links to fitVtx - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } @@ -3839,7 +3772,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkLbMuMuLambda(const ElementLink<xAOD::Trac } //m_doLb_LambdaMuMuVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -4064,7 +3997,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBMuMu2X(const ElementLink<xAOD::TrackPart } // do2XVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracksX) { + for(const auto& tpel : vec_tracksX) { fitVtx_X->addTrackParticleLink(tpel); } } @@ -4090,7 +4023,7 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBMuMu2X(const ElementLink<xAOD::TrackPart } // doBMuMu2XVertexing else { // if vertexting is not done - just attach trackParticle links - for(auto tpel : vec_tracks) { + for(const auto& tpel : vec_tracks) { fitVtx->addTrackParticleLink(tpel); } } @@ -4102,29 +4035,6 @@ xAOD::TrigBphys* TrigEFBMuMuXFex::checkBMuMu2X(const ElementLink<xAOD::TrackPart -/*----------------------------------------------------------------------------*/ -void TrigEFBMuMuXFex::addUnique(std::vector<const Trk::Track*>& tracks, const Trk::Track* trkIn) -{ - // std::cout<<" in addUnique : trkIn pT= "<<trkIn->perigeeParameters()->pT()<<std::endl; - std::vector<const Trk::Track*>::iterator tItr; - for( tItr = tracks.begin(); tItr != tracks.end(); tItr++) - { - double dPhi=fabs((*tItr)->perigeeParameters()->parameters()[Trk::phi] - - trkIn->perigeeParameters()->parameters()[Trk::phi]); - if (dPhi > M_PI) dPhi = 2.*M_PI - dPhi; - - if( fabs(dPhi) < 0.02 && - fabs((*tItr)->perigeeParameters()->eta() - - trkIn->perigeeParameters()->eta()) < 0.02 ) - { //std::cout<<" TrigEFBMuMuFex addUnique: the SAME tracks! pT= "<< - //trkIn->perigeeParameters()->pT()<<" and "<< - //(*tItr)->perigeeParameters()->pT()<<std::endl; - return; - } - } - tracks.push_back(trkIn); -} - /*----------------------------------------------------------------------------*/ void TrigEFBMuMuXFex::addUnique(std::vector<const xAOD::TrackParticle*>& tps, const xAOD::TrackParticle* tpIn) { @@ -4192,149 +4102,94 @@ bool TrigEFBMuMuXFex::isUnique(const xAOD::TrackParticle* id1, const xAOD::Tra double TrigEFBMuMuXFex::XMass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, int decay) { /// checking the mass - std::vector<double> massHypo; - massHypo.clear(); + std::array<double, 2> massHypo; if(decay == di_to_muons){ - massHypo.push_back(MUMASS); - massHypo.push_back(MUMASS); - } - if(decay == bD_to_Kstar){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); + massHypo[0] = (MUMASS); + massHypo[1] = (MUMASS); } - if(decay == bS_to_Phi){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); + else if(decay == bD_to_Kstar){ + massHypo[0] = (KPLUSMASS); + massHypo[1] = (PIMASS); } - if(decay == bC_to_PiPi){ - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); + else if(decay == bS_to_Phi){ + massHypo[0] = (KPLUSMASS); + massHypo[1] = (KPLUSMASS); } - if(decay == lB_to_L){ - massHypo.push_back(PROTONMASS); - massHypo.push_back(PIMASS); + else if(decay == bC_to_PiPi){ + massHypo[0] = (PIMASS); + massHypo[1] = (PIMASS); } - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); + else if(decay == lB_to_L){ + massHypo[0] = (PROTONMASS); + massHypo[1] = (PIMASS); + }else{ + throw std::runtime_error("unknown decay TrigEFBMuMuXFex::XMass"); + } + std::array<const xAOD::TrackParticle*, 2> bTracks{particle1, particle2}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::X3Mass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 3> massHypo{KPLUSMASS, KPLUSMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 3> bTracks{ particle1, particle2, particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::XKPiPiMass(const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 3> massHypo{KPLUSMASS, PIMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 3> bTracks{particle1,particle2,particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::KMuMuMass( const xAOD::TrackParticle* mu1, const xAOD::TrackParticle* mu2, const xAOD::TrackParticle* kaon) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(MUMASS); - massHypo.push_back(MUMASS); - massHypo.push_back(KPLUSMASS); //K - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(mu1); - bTracks.push_back(mu2); - bTracks.push_back(kaon); + static constexpr std::array<double, 3> massHypo{MUMASS, MUMASS, KPLUSMASS}; //K + const std::array<const xAOD::TrackParticle*, 3> bTracks{mu1, mu2, kaon}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::XMuMuMass(const xAOD::TrackParticle* mu1, const xAOD::TrackParticle* mu2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, int decay){ - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(MUMASS); - massHypo.push_back(MUMASS); + std::array<double, 4> massHypo; + massHypo[0] = MUMASS; + massHypo[1] = MUMASS; if(decay == bD_to_Kstar){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - } - if(decay == bS_to_Phi){ - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); + massHypo[2] = KPLUSMASS; + massHypo[3] = PIMASS; } - if(decay == bC_to_PiPi){ - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); + else if(decay == bS_to_Phi){ + massHypo[2] = KPLUSMASS; + massHypo[3] = KPLUSMASS; } - if(decay == lB_to_L){ - massHypo.push_back(PROTONMASS); - massHypo.push_back(PIMASS); + else if(decay == bC_to_PiPi){ + massHypo[2] = PIMASS; + massHypo[3] = PIMASS; } - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(mu1); - bTracks.push_back(mu2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); + else if(decay == lB_to_L){ + massHypo[2] = PROTONMASS; + massHypo[3] = PIMASS; + }else{ + throw std::runtime_error("unknown decay TrigEFBMuMuXFex::XMuMuMass"); + } + const std::array<const xAOD::TrackParticle*, 4> bTracks{mu1,mu2,particle1,particle2}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::X3MuMuMass(const xAOD::TrackParticle* mu1, const xAOD::TrackParticle* mu2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(MUMASS); - massHypo.push_back(MUMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(mu1); - bTracks.push_back(mu2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 5> massHypo{MUMASS, MUMASS, KPLUSMASS, KPLUSMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 5> bTracks{mu1,mu2,particle1,particle2,particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } double TrigEFBMuMuXFex::XKPiPiMuMuMass(const xAOD::TrackParticle* mu1, const xAOD::TrackParticle* mu2, const xAOD::TrackParticle* particle1, const xAOD::TrackParticle* particle2, const xAOD::TrackParticle* particle3 ) { - std::vector<double> massHypo; - massHypo.clear(); - massHypo.push_back(MUMASS); - massHypo.push_back(MUMASS); - massHypo.push_back(KPLUSMASS); - massHypo.push_back(PIMASS); - massHypo.push_back(PIMASS); - std::vector<const xAOD::TrackParticle*> bTracks; - bTracks.clear(); - bTracks.push_back(mu1); - bTracks.push_back(mu2); - bTracks.push_back(particle1); - bTracks.push_back(particle2); - bTracks.push_back(particle3); + static constexpr std::array<double, 5> massHypo{MUMASS, MUMASS, KPLUSMASS, PIMASS, PIMASS}; + const std::array<const xAOD::TrackParticle*, 5> bTracks{mu1,mu2,particle1,particle2,particle3}; return m_bphysHelperTool->invariantMass(bTracks, massHypo); } diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.h index 37fefad3c983b49926b00583d68c7567a911b55f..13a7e317b6aa86ae94484da287d92558a13a8e7c 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXFex.h @@ -202,9 +202,6 @@ class TrigEFBMuMuXFex: public HLT::ComboAlgo { float m_bCD0VtxChi2Cut; int m_maxBcD0ToStore; - // FTK Flag - bool m_FTK; - // Monitoring variables and containers // General std::vector<int> m_mon_Errors; @@ -379,10 +376,6 @@ class TrigEFBMuMuXFex: public HLT::ComboAlgo { // to set Accept-All mode: should be done with force-accept when possible bool m_acceptAll; - - // TrigEFBphysContainer* m_trigBphysColl_b; - // TrigEFBphysContainer* m_trigBphysColl_X; - xAOD::TrigBphysContainer * m_TrigBphysColl_b; xAOD::TrigBphysContainer * m_TrigBphysColl_X; @@ -493,7 +486,6 @@ class TrigEFBMuMuXFex: public HLT::ComboAlgo { unsigned int m_countPassedBcD0Lxy; int m_countBcD0ToStore; - void addUnique(std::vector<const Trk::Track*>&, const Trk::Track*); void addUnique(std::vector<const xAOD::TrackParticle*>&, const xAOD::TrackParticle*); void addUnique(std::vector<ElementLink<xAOD::TrackParticleContainer> >&, const ElementLink<xAOD::TrackParticleContainer>&); // double invariantMass(const TrigMuonEF* , const TrigMuonEF* ); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.cxx index 9bc75c8d0905cfe37ba4c414dd28459368e447a5..2799601e2a71ab49288561bdf06b5542e27a77c6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.cxx @@ -29,9 +29,9 @@ // additions of xAOD objects #include "xAODEventInfo/EventInfo.h" - -//#include "TrigVKalFitter/TrigVKalFitter.h" -//#include "TrigVKalFitter/VKalVrtAtlas.h" +#include "xAODTrigBphys/TrigBphys.h" +#include "xAODTrigBphys/TrigBphysContainer.h" +#include "xAODTrigBphys/TrigBphysAuxContainer.h" class ISvcLocator; @@ -216,7 +216,6 @@ HLT::ErrorCode TrigEFBMuMuXHypo::hltExecute(const HLT::TriggerElement* outputTE, // create vector for TrigEFBphys particles - // const TrigEFBphysContainer* trigBphysColl = 0; const xAOD::TrigBphysContainer * xAODTrigBphysColl(0); // get vector of TrigEFBphys particles from outputTE diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.h index d083329d9419ba779b9b6620ef58425191711af5..dbaf6e240db5a21a54caa257015bf67e88fe816f 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFBMuMuXHypo.h @@ -26,14 +26,6 @@ #include <string> // general athena stuff #include "TrigInterfaces/HypoAlgo.h" -#include "TrigInDetEvent/TrigVertexCollection.h" - -#include "Constants.h" - -#include "xAODTrigBphys/TrigBphys.h" -#include "xAODTrigBphys/TrigBphysContainer.h" -#include "xAODTrigBphys/TrigBphysAuxContainer.h" - class TrigEFBMuMuXHypo: public HLT::HypoAlgo { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx index 4cc889324b06e87bffc999a5db30467673dad2ac..9aaa4601d8cd83dae5ce3852d284b489f3799765 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.cxx @@ -17,8 +17,7 @@ #include "xAODTracking/TrackParticle.h" #include "xAODMuon/MuonContainer.h" -#include "TrigTimeAlgs/TrigTimerSvc.h" - +#include "TrigTimeAlgs/TrigTimer.h" // for TrigTimer TrigEFMultiMuFex::TrigEFMultiMuFex(const std::string & name, ISvcLocator* pSvcLocator): HLT::ComboAlgo(name, pSvcLocator) @@ -260,7 +259,7 @@ void TrigEFMultiMuFex::processTriMuon(HLT::TEConstVec& inputTE, xAOD::TrigBphysC // loop over the vector of muon containers msg() << MSG::DEBUG << "MuonContainer, Got MuonEF " << ic << " Feature, size = " << muelv.size() << endmsg; int i(0); - for ( const auto muel: muelv) { + for ( const auto& muel: muelv) { msg() << MSG::DEBUG << "ELLink: " << i++ << " index: " << muel.index() << " sgkey: " << muel.dataID() @@ -290,7 +289,7 @@ void TrigEFMultiMuFex::processTriMuon(HLT::TEConstVec& inputTE, xAOD::TrigBphysC std::vector<const xAOD::Muon*> uniqueMuons; // add all the unique muons into a single container for ( const auto& muelv : vec_elv_muons) { - for ( const auto muel : muelv ) { + for ( const auto& muel : muelv ) { m_bphysHelperTool->addUnique( *muel, uniqueMuons, 0.005,0.005,10,xAOD::Muon::InnerDetectorTrackParticle); } // loop over muonEL in each roi } // loop over rois diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.h index 220b51e18664a848890e4f03c52f4f76f713c6a0..c782afaccee0ce9c1eccec8059e590917b22cbdd 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuFex.h @@ -21,8 +21,6 @@ // standard stuff #include <string> -#include <map> -#include <cmath> #include "TrigInterfaces/ComboAlgo.h" #include "xAODMuon/Muon.h" diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.cxx index 32866c609f2f62b6d28f4ad8e92df290d3c8ab59..39ec9f87ceee10d48b2b3695a2b55cccd45c1ab0 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.cxx @@ -15,18 +15,13 @@ ** **************************************************************************/ -//#include "TrigMuonEvent/CombinedMuonFeature.h" - #include "TrigEFMultiMuHypo.h" -#include <math.h> #include "xAODTrigger/TrigPassBits.h" // additions of xAOD objects #include "xAODEventInfo/EventInfo.h" -#include "xAODMuon/Muon.h" -#include "xAODTracking/TrackParticle.h" #include "xAODTrigBphys/TrigBphys.h" #include "xAODTrigBphys/TrigBphysContainer.h" @@ -141,12 +136,8 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltExecute(const HLT::TriggerElement* outputTE ATH_MSG_DEBUG("AcceptAll is set to : " << (m_acceptAll ? "True, taking all events " : "False, applying selection" )); // create vector for TrigEFBphys particles - //const TrigEFBphysContainer* trigBphysColl = 0; const xAOD::TrigBphysContainer* trigBphysColl = 0; -// const TrigEFBContainer* trigBphysColl = 0; -// const VxContainer* VertexColl; - HLT::ErrorCode status = getFeature(outputTE, trigBphysColl, m_bphysCollectionKey ); if ( status != HLT::OK ) { @@ -176,7 +167,6 @@ HLT::ErrorCode TrigEFMultiMuHypo::hltExecute(const HLT::TriggerElement* outputTE std::unique_ptr<xAOD::TrigPassBits> xBits = xAOD::makeTrigPassBits<xAOD::TrigBphysContainer>(trigBphysColl); // now loop over Bphys particles to see if one passes cuts - // for (TrigEFBphysContainer::const_iterator bphysIter = trigBphysColl->begin(); bphysIter != trigBphysColl->end(); ++bphysIter) { for (xAOD::TrigBphysContainer::const_iterator bphysIter = trigBphysColl->begin(); bphysIter != trigBphysColl->end(); ++bphysIter) { if ((*bphysIter)->particleType() == xAOD::TrigBphys::MULTIMU ) { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.h index 423b7cdc43640ac798cd531feb103b5baabdbff3..afa7bd675390b6a3d4a5bb6326527f21e3caf589 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFMultiMuHypo.h @@ -24,8 +24,6 @@ // general athena stuff #include "TrigInterfaces/HypoAlgo.h" -#include "Constants.h" - class TrigEFMultiMuHypo: public HLT::HypoAlgo { diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx index b93443bbb91902d00bceb50ea11e12f4811938ce..10e6bd6c1351e6c89c3729fa0d2d7a5e89859da8 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.cxx @@ -10,23 +10,19 @@ // ******************************************************************** #include "TrigEFTrkMassFex.h" -#include "BtrigUtils.h" #include "TrigBphysHelperUtilsTool.h" #include "xAODTrigBphys/TrigBphysAuxContainer.h" // additions of xAOD objects -#include "xAODEventInfo/EventInfo.h" #include "xAODMuon/MuonContainer.h" -#include <algorithm> #include <math.h> -#include "TrigTimeAlgs/TrigTimerSvc.h" #include "TrigSteeringEvent/TrigRoiDescriptor.h" - +#include "CLHEP/Units/SystemOfUnits.h" #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" - +#include "TrigTimeAlgs/TrigTimer.h" // for TrigTimer class ISvcLocator; @@ -44,7 +40,6 @@ HLT::FexAlgo(name, pSvcLocator) // Read cuts declareProperty( "AcceptAll", m_acceptAll = false ); declareProperty( "OppositeCharge", m_oppositeCharge = true ); - declareProperty("m_matchL1", m_matchL1 = false); declareProperty("MuonPTthr", m_muonPtthr=4.); declareProperty("TrackPTthr", m_trackPtthr=1.4); declareProperty("dEtaTrackRoI", m_dEta_cut=0.1); @@ -127,10 +122,6 @@ HLT::ErrorCode TrigEFTrkMassFex::hltInitialize() ATH_MSG_DEBUG("TrigBphysHelperUtilsTool found" ); } - if (m_matchL1) { - ATH_MSG_DEBUG("matchL1 not yet re-implemented." ); - return HLT::BAD_JOB_SETUP; - } ATH_MSG_INFO("AcceptAll = "<< (m_acceptAll==true ? "True" : "False") ); ATH_MSG_INFO("Apply opposite sign cut = " << (m_oppositeCharge==true ? "True" : "False") ); @@ -302,7 +293,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement* inputTE } if(msgLvl() <= MSG::DEBUG) { // print debug msg() << MSG::DEBUG << "Found MuonContainer, Got MuonEF size = " << elvmuon.size() << endmsg; - for ( const auto muel: elvmuon) { + for ( const auto& muel: elvmuon) { msg() << MSG::DEBUG << "ELLink: " << " index: " << muel.index() << " sgkey: " << muel.dataID() @@ -311,7 +302,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement* inputTE << " ptr: " << (muel.isValid() ? *muel : nullptr) << endmsg; } - for ( const auto muel: elvmuon) { + for ( const auto& muel: elvmuon) { if (!muel.isValid()) continue; msg() << MSG::DEBUG << "Muon: " << " pt: " << (*muel)->pt() @@ -352,7 +343,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement* inputTE if(msgLvl() <= MSG::DEBUG) { // print debug msg() << MSG::DEBUG << "Found TrackParticleContainer, size: " << elvtps.size() << endmsg; - for ( const auto eltp: elvtps) { + for ( const auto& eltp: elvtps) { msg() << MSG::DEBUG << "ELLink: " << " index: " << eltp.index() << " sgkey: " << eltp.dataID() @@ -393,7 +384,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement* inputTE //#FIXME - remember to implement the scenario of (tracks matched to roi + tracks) std::vector<ElementLink<xAOD::MuonContainer> > muons; std::vector<ElementLink<xAOD::TrackParticleContainer> > tracks; - for (auto muel: elvmuon) { + for (const auto& muel: elvmuon) { if (!muel.isValid()) continue; const xAOD::TrackParticle * mutrk = (*muel)->trackParticle(xAOD::Muon::InnerDetectorTrackParticle); if (!mutrk) continue; @@ -436,7 +427,7 @@ HLT::ErrorCode TrigEFTrkMassFex::hltExecute(const HLT::TriggerElement* inputTE muons.push_back(muel); } // optimize? addUnique? - for (auto trkel: elvtps) { + for (const auto& trkel: elvtps) { const xAOD::TrackParticle * trk = *trkel; if (!trk) continue; if (trk->definingParametersCovMatrixVec().size() == 0) { @@ -528,7 +519,7 @@ void TrigEFTrkMassFex::buildMuTrkPairs(const TrigRoiDescriptor * roi, return; } - for (auto muel: muons) { + for (const auto& muel: muons) { if (!muel.isValid()) continue; const xAOD::Muon * muon = *muel; if (!muon) continue; @@ -536,7 +527,7 @@ void TrigEFTrkMassFex::buildMuTrkPairs(const TrigRoiDescriptor * roi, const ElementLink<xAOD::TrackParticleContainer> & mutrkel = muon->trackParticleLink(xAOD::Muon::InnerDetectorTrackParticle); if (!mutrk) continue; - for (auto trkel: tracks) { + for (const auto& trkel: tracks) { if (!trkel.isValid()) continue; const xAOD::TrackParticle * trk = *trkel; if (!trk) continue; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.h index 4e74d78a8a0e1713ff29bad746a1d4cfd7c7847e..4deff4ef0b2181410f9f21ffa60711264e5a1ae1 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassFex.h @@ -58,7 +58,6 @@ class TrigEFTrkMassFex: public HLT::FexAlgo { // container inputs names std::string m_input_trackCollectionKey; //! list of tracks to search for second leg - float m_matchL1; float m_trackPtthr; float m_muonPtthr; float m_dEta_cut; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.cxx index 9e1cbed9a0bc64dea88c9fdd4ac816c5ec0bef08..b69f2ff3dc04b8fd6a24c42312d867f02a0dc793 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.cxx @@ -23,8 +23,6 @@ #include "TrigEFTrkMassHypo.h" -#include <math.h> -//#include "TrigSteeringEvent/TrigPassBits.h" #include "xAODTrigger/TrigPassBits.h" // additions of xAOD objects @@ -118,7 +116,6 @@ HLT::ErrorCode TrigEFTrkMassHypo::hltExecute(const HLT::TriggerElement* outputTE // for now pass all events - JK changed to false 9/2/10 pass=false; // create vector for TrigEFBphys particles - //const TrigEFBphysContainer* trigBphysColl = 0; const xAOD::TrigBphysContainer * xAODTrigBphysColl(0); HLT::ErrorCode status = getFeature(outputTE, xAODTrigBphysColl, "EFTrackMass"); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.h index e659b78e51922e8ed8849639cd512303c275508d..198ba8c12b83859af5b232ed21d34a142e3c6935 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigEFTrkMassHypo.h @@ -7,7 +7,6 @@ #define TRIGEFTRKMASSHYPO_H #include "TrigInterfaces/HypoAlgo.h" -#include "Constants.h" class TriggerElement; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx index 84c4d7aac4d65549b23e3b3946aa202cff217168..91e67cfed12d86ef3a00e439064a3b35edb1dbce 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.cxx @@ -23,12 +23,12 @@ #include "TrigInDetToolInterfaces/ITrigVertexingTool.h" #include "TrigInDetEvent/TrigL2Vertex.h" - +#include "TrigInDetEvent/TrigVertex.h" // for TrigVertex +#include "xAODTrigBphys/TrigBphysAuxContainer.h" // for TrigBphysAu... +#include "xAODTrigBphys/TrigBphysContainer.h" // for TrigBphysCo... #include "Constants.h" -#include "BtrigUtils.h" // additions of xAOD objects -#include "xAODEventInfo/EventInfo.h" #include "xAODTracking/TrackParticle.h" #include "xAODTracking/TrackParticleContainer.h" #include "xAODTrigMuon/L2StandAloneMuon.h" @@ -132,20 +132,13 @@ m_massMuon(105.6583715) // declareMonitoredStdContainer("InvMass_stand" , m_mon_InvMass_stand , AutoClear); // declareMonitoredStdContainer("InvMass_stand_wideRange", m_mon_InvMass_stand_wideRange , AutoClear); - // Initialize the collections - // m_trigBphysColl = NULL; - m_VertexColl = NULL; } /*------------------------------*/ TrigL2BMuMuFex::~TrigL2BMuMuFex() /*------------------------------*/ { - // TODO: Delete the collections ? - //delete m_trigBphysColl; - //delete m_VertexColl; } - /*-------------------------------------------*/ HLT::ErrorCode TrigL2BMuMuFex::hltInitialize() /*-------------------------------------------*/ @@ -859,7 +852,7 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass } else { ATH_MSG_DEBUG("Comb muon container: " << muonContainerComb1.size() ); } - for (auto el: muonContainerComb1) { + for (const auto& el: muonContainerComb1) { ATH_MSG_DEBUG("Comb muon container: " << el.dataID() << " " << el.index() ); } if (HLT::OK != getFeaturesLinks<xAOD::L2CombinedMuonContainer,xAOD::L2CombinedMuonContainer>(inputTE[1],muonContainerComb2,m_combinedMuonKey)) { @@ -867,7 +860,7 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass } else { ATH_MSG_DEBUG("Comb muon container: " << muonContainerComb2.size() ); } - for (auto el: muonContainerComb2) { + for (const auto& el: muonContainerComb2) { ATH_MSG_DEBUG("Comb muon container: " << el.dataID() << " " << el.index() ); } ElementLink<xAOD::IParticleContainer> ptl1EL = remap_container(muonXEL[0],muonContainerComb1); @@ -996,11 +989,7 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass ATH_MSG_DEBUG("REGTEST: Chi2 vtx fit = " << p_mumuV->chi2() ); ATH_MSG_DEBUG("SigmaX = SigmaY = SigmaZ = " << sqrt(p_mumuV->cov()[0]) << " " << sqrt(p_mumuV->cov()[2]) << " " << sqrt(p_mumuV->cov()[5]) ); - m_VertexColl = new TrigVertexCollection(); - m_VertexColl->push_back(p_mumuV); - // JK 28/4/08 changes for ElementLinks - ElementLink<TrigVertexCollection> BMuMuVertexEL(*m_VertexColl,0); // trigPartBmumu->pVertex(p_mumuV); // 14-05-08 trigPartBmumu->pVertex(BMuMuVertexEL); @@ -1051,7 +1040,6 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass pass = true; if ( vtxpass ) { m_countPassedVtxFit++; - delete m_VertexColl; } if ( mumuIDpass ) m_countPassedmumuPairs++; m_countPassedRoIs++; @@ -1059,7 +1047,6 @@ HLT::ErrorCode TrigL2BMuMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pass m_countPassedEvents++; m_lastEventPassed = IdEvent; } - m_VertexColl = 0; if ( timerSvc() ) { m_BmmHypTot->stop(); @@ -1139,7 +1126,7 @@ ElementLink<xAOD::TrackParticleContainer> TrigL2BMuMuFex::remap_container(const if (!oldElink.isValid()) return oldElink; const auto tp = *oldElink; - for (auto elink : newContainer) { + for (const auto& elink : newContainer) { if (!elink.isValid()) continue; const auto el = *elink; @@ -1176,7 +1163,7 @@ ElementLink<xAOD::IParticleContainer> TrigL2BMuMuFex::remap_container(const Elem if (!oldElink.isValid()) return iptlELold; const auto tp = *oldElink; - for (auto elink : newContainer) { + for (const auto& elink : newContainer) { if (!elink.isValid()) continue; const auto el = *elink; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.h index 82b5ec43b369dae8f550d1b2e2202609ed1beef9..d42c15955dffd4b7c97965d792255225cd337e88 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuFex.h @@ -17,8 +17,6 @@ #include "TrigInterfaces/ComboAlgo.h" -#include "TrigInDetEvent/TrigVertexCollection.h" -#include "TrigInDetToolInterfaces/ITrigVertexFitter.h" #include "TrigInDetToolInterfaces/ITrigL2VertexFitter.h" //#include "TrigParticle/TrigL2BphysContainer.h" @@ -29,10 +27,6 @@ #include "TrigTimeAlgs/TrigTimerSvc.h" -class TriggerElement; -//class CombinedMuonFeature; - -class ITrigVertexFitter; class ITrigL2VertexFitter; class ITrigVertexingTool; @@ -53,11 +47,6 @@ class TrigL2BMuMuFex: public HLT::ComboAlgo { private: ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; - // Invariant mass helper calculators (TODO: move to InvMass.cxx tool-box) - // double invariantMass(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2); - // double invariantMass(const CombinedMuonFeature* mu1, const MuonFeature* mu2); - - //bool isUnique(const TrigInDetTrack* id1, const TrigInDetTrack* id2); bool isUnique(const xAOD::TrackParticle* id1, const xAOD::TrackParticle* id2) const; ElementLink<xAOD::TrackParticleContainer> remap_container(const ElementLink<xAOD::TrackParticleContainer> & oldElink,const ElementLinkVector<xAOD::TrackParticleContainer> &newContainer) const; // ElementLink<xAOD::IParticleContainer> remap_container(const ElementLink<xAOD::IParticleContainer> & oldElink,const ElementLinkVector<xAOD::IParticleContainer> &newContainer) const; @@ -105,8 +94,6 @@ class TrigL2BMuMuFex: public HLT::ComboAlgo { unsigned int m_countPassedVtxFit; // Output collections - //TrigL2BphysContainer* m_trigBphysColl; - TrigVertexCollection* m_VertexColl; std::vector<xAOD::TrigBphys*> m_resultHolder; /// Hold results between accept and execute diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.cxx index d1c0281157e57ad6f6ec866f2dc19e43ca4a22d2..3e0924144c6d1f8b11454769783f95f3c5973444 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.cxx @@ -20,9 +20,7 @@ #include "TrigL2BMuMuHypo.h" -#include <math.h> #include "xAODTrigger/TrigPassBits.h" -#include "TrigNavigation/Navigation.h" #include "TrigBphysHelperUtilsTool.h" #include "xAODTrigBphys/TrigBphys.h" diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.h index 4c5ba40fd230424c4f69cd9a2e8261511077fbc7..4f7d363085eaab034193e892e734e8e3e1e63907 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuHypo.h @@ -24,13 +24,6 @@ // general athena stuff #include "TrigInterfaces/HypoAlgo.h" -//#include "TrigTimeAlgs/TrigTimerSvc.h" -//#include "TrigInDetEvent/TrigVertexCollection.h" -//#include "TrigParticle/TrigL2Bphys.h" -//#include "TrigParticle/TrigL2BphysContainer.h" - -#include "Constants.h" - class TrigBphysHelperUtilsTool; @@ -72,9 +65,6 @@ class TrigL2BMuMuHypo: public HLT::HypoAlgo { unsigned int m_countPassedBsMass; unsigned int m_countPassedChi2Cut; - // TrigL2BphysContainer* m_trigBphysColl; - // TrigVertexCollection* m_VertexColl; - /* monitored variables */ int m_mon_cutCounter; std::vector<float> m_mon_MuMumass; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.cxx index ad614f39898ab5397d7f854509d9e001726c2133..a08a88b5ce86746bd7af01be737f55e371f8b00e 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.cxx @@ -34,7 +34,6 @@ #include "TrigSteeringEvent/TrigRoiDescriptor.h" -#include "TrigInDetEvent/TrigInDetTrackCollection.h" #include "TrigInDetToolInterfaces/ITrigL2VertexFitter.h" #include "TrigInDetEvent/TrigL2Vertex.h" @@ -42,7 +41,7 @@ // additions of xAOD objects #include "xAODEventInfo/EventInfo.h" #include "TrigBphysHelperUtilsTool.h" - +#include "TrigInDetEvent/TrigVertex.h" #include <math.h> @@ -401,7 +400,6 @@ TrigL2BMuMuXFex::TrigL2BMuMuXFex(const std::string & name, ISvcLocator* pSvcLoca ////////////////////////////// Declaration of output collections /////////////////////////////////////////// m_trigBphysColl_b = NULL; m_trigBphysColl_bxAOD = NULL; - m_VertexColl = NULL; // temporary m_trigBphysColl_kStarxAOD = NULL; m_trigBphysColl_phixAOD = NULL; @@ -414,7 +412,6 @@ TrigL2BMuMuXFex::TrigL2BMuMuXFex(const std::string & name, ISvcLocator* pSvcLoca /*----------------------------------------*/ TrigL2BMuMuXFex::~TrigL2BMuMuXFex() { - if(m_VertexColl!=NULL) delete m_VertexColl; // if(m_trigBphysColl_kSplus) delete m_trigBphysColl_kSplus; } @@ -541,14 +538,7 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltInitialize() } ///////////////////////////// end of add timers //////////////////////////////// -// /////////////////////////////// choose tracking algo /////////////////////////// -// std::string inDetAlgo = m_inDetAlgo; -// -// if(inDetAlgo=="IDSCAN") m_inDetAlgoId = TrigInDetTrack::IDSCANID; -// else if(inDetAlgo=="SITRACK") m_inDetAlgoId = TrigInDetTrack::SITRACKID; -// else m_inDetAlgoId = TrigInDetTrack::IDSCANID; -// ///////////////////////////// end of choose tracking algo ////////////////////// - + return HLT::OK; } ///////// end of HLT - Errorcode - TrigL2BMuMuXFex - hltInitialize//////////// @@ -815,7 +805,7 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg if ( !pCombinedMuonFeature1->idTrack()) { ATH_MSG_DEBUG("Muon candidate1: no id track!"); - auto idlink = pCombinedMuonFeature1->idTrackLink(); + const auto& idlink = pCombinedMuonFeature1->idTrackLink(); ATH_MSG_DEBUG("Muon elementlink has "<< idlink.dataID() << " " << idlink.index() << " " << idlink.isValid() ); if(timerSvc()) { m_TotTimer->stop(); @@ -829,7 +819,7 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg if ( !pCombinedMuonFeature2->idTrack()) { ATH_MSG_DEBUG("Muon candidate2: no id track!"); - auto idlink = pCombinedMuonFeature2->idTrackLink(); + const auto& idlink = pCombinedMuonFeature2->idTrackLink(); ATH_MSG_DEBUG("Muon elementlink has "<< idlink.dataID() << " " << idlink.index() << " " << idlink.isValid() ); if(timerSvc()) { m_TotTimer->stop(); @@ -860,38 +850,7 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg /////////////////////////// loop over TE's//////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// - /* - std::vector<const TrigInDetTrackCollection*> vectorOfTrackCollections1; - std::vector<const TrigInDetTrackCollection*> vectorOfTrackCollections2; - //std::vector<const TrackCollection*> vectorOfTrackCollections1; - //std::vector<const TrackCollection*> vectorOfTrackCollections2; - - std::vector<const HLT::TriggerElement*>::const_iterator iTE = inputTEs.begin(); - ////////////////////////////// other particle candidates ////////////////////////////// - status = getFeatures(*iTE, vectorOfTrackCollections1); - //status = getFeatures(*iTE, vectorOfTrackCollections1,"TrigFastTrackFinder_TrigInDetTrack_Muon"); - //status = getFeatures(*iTE, vectorOfTrackCollections1); - if (status!=HLT::OK) { ATH_MSG_ERROR("XX1: ");return HLT::NAV_ERROR;} - std::vector<const TrigInDetTrackCollection*> vectorOfTrackCollections1a; - std::vector<const TrackCollection*> vectorOfTrackCollections1b; - std::vector<const TrackCollection*> vectorOfTrackCollections1c; - status = getFeatures(*iTE, vectorOfTrackCollections1a,"TrigFastTrackFinder_TrigInDetTrack_Muon"); - if (status!=HLT::OK) { ATH_MSG_ERROR("XX1a: ");return HLT::NAV_ERROR;} - status = getFeatures(*iTE, vectorOfTrackCollections1b); - if (status!=HLT::OK) { ATH_MSG_ERROR("XX1b: ");return HLT::NAV_ERROR;} - status = getFeatures(*iTE, vectorOfTrackCollections1c,"TrigFastTrackFinder_Muon"); - if (status!=HLT::OK) { ATH_MSG_ERROR("XX1c: ");return HLT::NAV_ERROR;} - ATH_MSG_INFO(" found: " - << vectorOfTrackCollections1.size() << " " - << vectorOfTrackCollections1a.size() << " " - << vectorOfTrackCollections1b.size() << " " - << vectorOfTrackCollections1c.size() << " "); - - for (auto x: vectorOfTrackCollections1 ) { if (!x) continue; ATH_MSG_INFO(" 1 : " << x->size());} - for (auto x: vectorOfTrackCollections1a) { if (!x) continue; ATH_MSG_INFO(" 1a: " << x->size());} - for (auto x: vectorOfTrackCollections1b) { if (!x) continue; ATH_MSG_INFO(" 1b: " << x->size());} - for (auto x: vectorOfTrackCollections1c) { if (!x) continue; ATH_MSG_INFO(" 1c: " << x->size());} - */ + std::vector<const xAOD::TrackParticleContainer*> vectorOfTrackCollections1; std::vector<const xAOD::TrackParticleContainer*> vectorOfTrackCollections2; std::vector<const HLT::TriggerElement*>::const_iterator iTE = inputTEs.begin(); @@ -913,7 +872,6 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg } m_mon_Acceptance.push_back( ACCEPT_First_TrackColl ); ++iTE; // next trigger element, no more or less than two, checked by acceptInputs!! - //status = getFeatures(*iTE, vectorOfTrackCollections2,"TrigFastTrackFinder_TrigInDetTrack_Muon"); status = getFeatures(*iTE, vectorOfTrackCollections2); //status = getFeatures(*iTE, vectorOfTrackCollections2); //status = getFeatures( *iTE, vectorOfTrackCollections); @@ -1075,24 +1033,15 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg ////////////////////////// end of muons part /////////////////////////////// //////////////////// merge of vectorOfTrackCollections ///////////////////// -// std::vector<const TrigInDetTrackCollection*> vectorOfTrackCollections= merge_no_dupl(vectorOfTrackCollections1, vectorOfTrackCollections2); std::vector<const xAOD::TrackParticleContainer*> vectorOfTrackCollections= merge_no_dupl(vectorOfTrackCollections1, vectorOfTrackCollections2); /////////////////////////////////////////////////////////////////////////////// ////////////////////////// output trigger element ///////////////////////////// // create vector for TrigL2Bphys particles - // m_trigBphysColl_b = new TrigL2BphysContainer(); - // m_VertexColl = new TrigVertexCollection(); - // //temporary - // m_trigBphysColl_kStar = new TrigL2BphysContainer(); - // m_trigBphysColl_phi = new TrigL2BphysContainer(); - // m_trigBphysColl_lambda = new TrigL2BphysContainer(); - // m_trigBphysColl_ds = new TrigL2BphysContainer(); - // //m_trigBphysColl_kSplus = new TrigL2BphysContainer(); + m_trigBphysColl_bxAOD = new xAOD::TrigBphysContainer(); xAOD::TrigBphysAuxContainer trigBphysAuxColl_bxAOD; m_trigBphysColl_bxAOD->setStore(&trigBphysAuxColl_bxAOD); - m_VertexColl = new TrigVertexCollection(); //temporary m_trigBphysColl_kStarxAOD = new xAOD::TrigBphysContainer(); xAOD::TrigBphysAuxContainer trigBphysAuxColl_kStarxAOD; @@ -1214,7 +1163,6 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg nTriedCombinations++; } //end of B->KMuMu decay - if(iTrack2 != lastiTrack2) { // Protection if(nTriedCombinations > m_maxNcombinations) { ATH_MSG_DEBUG("Too many track combinations: "); @@ -1299,7 +1247,6 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg << *iTrack3 << " = " << (*iTrack3)->charge()); } } // end of loop over iTrack3 (internal) - } } // end of loop over iTrack2 (external) } //////////////// end of loop over InDetTrackCollections ////////////////// @@ -1349,8 +1296,6 @@ HLT::ErrorCode TrigL2BMuMuXFex::hltExecute(HLT::TEConstVec& inputTEs, HLT::Trigg delete m_trigBphysColl_dsxAOD; } m_trigBphysColl_bxAOD=NULL; - delete m_VertexColl; - m_VertexColl=NULL; // try add other collections to delete them!! // delete m_trigBphysColl_lambda; m_trigBphysColl_lambdaxAOD = NULL; @@ -1385,20 +1330,15 @@ void TrigL2BMuMuXFex::checkBMuMuK(const xAOD::L2CombinedMuon* mu1, const xAOD::L trigPartBmumuKplus->initialise(0., 0., 0., xAOD::TrigBphys::BKMUMU, kMuMumass,xAOD::TrigBphys::L2); ATH_MSG_DEBUG(" Create B+ Bphys particle with roIId - more RoIs => 0" << trigPartBmumuKplus->roiId() << " mass " << kMuMumass << " phi, eta - more RoIs => 0" << trigPartBmumuKplus->phi() << " " << trigPartBmumuKplus->eta() << " vertex type " << trigPartBmumuKplus->particleType()); - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuKplus; - ElementLink<xAOD::TrackParticleContainer> track1EL = mu1->idTrackLink(); - ElementLink<xAOD::TrackParticleContainer> track2EL = mu2->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track1EL = mu1->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track2EL = mu2->idTrackLink(); ElementLink<xAOD::TrackParticleContainer> track3EL(*trkCollection, iTrk3); ATH_MSG_VERBOSE("Just check track links... "); ATH_MSG_VERBOSE("Muon 1 pT " << (*track1EL)->pt() << " eta: " << (*track1EL)->eta() << " phi: " << (*track1EL)->phi()); ATH_MSG_VERBOSE("Muon 2 pT " << (*track2EL)->pt() << " eta: " << (*track2EL)->eta() << " phi: " << (*track2EL)->phi()); ATH_MSG_VERBOSE("Track 1 pT " << (*track3EL)->pt() << " eta: " << (*track3EL)->eta() << " phi: " << (*track3EL)->phi()); - - trackVectorBmumuKplus.push_back(track1EL); // temp - trackVectorBmumuKplus.push_back(track2EL); // temp - trackVectorBmumuKplus.push_back(track3EL); // temp - + trigPartBmumuKplus->addTrackParticleLink(track1EL); trigPartBmumuKplus->addTrackParticleLink(track2EL); trigPartBmumuKplus->addTrackParticleLink(track3EL); @@ -1514,7 +1454,6 @@ void TrigL2BMuMuXFex::checkBMuMuK(const xAOD::L2CombinedMuon* mu1, const xAOD::L <<", ndof = " <<baplusVtx->ndof()); // perferct -> Bphys particle was stored in Collection - m_VertexColl->push_back(mother_BplusVtx); m_trigBphysColl_bxAOD->push_back(trigPartBmumuKplus); ATH_MSG_DEBUG(" Added B vertex to vertex collection"); @@ -1532,7 +1471,6 @@ void TrigL2BMuMuXFex::checkBMuMuK(const xAOD::L2CombinedMuon* mu1, const xAOD::L }else{ ATH_MSG_DEBUG(" B rejected by mass or chi2 cuts after vertex fit!" << ", chi2= " << baplusVtx->chi2()); - vertex = false; delete mother_BplusVtx; delete trigPartBmumuKplus; } @@ -1594,18 +1532,14 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA << " phi, eta - more RoIs => " << trigPartBmumuKstar->phi() << " " << trigPartBmumuKstar->eta() << " vertex type " << trigPartBmumuKstar->particleType()); // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuKstar; + ElementLink<xAOD::TrackParticleContainer> track3EL(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4EL(*trkCollection, iTrk4); - // ElementLink<TrigInDetTrackCollection> track3EL(*(*iTrackCollection), itrk); - // ElementLink<TrigInDetTrackCollection> track4EL(*(*iTrackCollection), jtrk); ATH_MSG_VERBOSE("Just check track links... "); ATH_MSG_VERBOSE("Track 1 pT " << (*track3EL)->pt() << " eta: " << (*track3EL)->eta() << " phi: " << (*track3EL)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4EL)->pt() << " eta: " << (*track4EL)->eta() << " phi: " << (*track4EL)->phi()); - trackVectorBmumuKstar.push_back(track3EL); // temp - trackVectorBmumuKstar.push_back(track4EL); // temp - + trigPartBmumuKstar->addTrackParticleLink(track3EL); trigPartBmumuKstar->addTrackParticleLink(track4EL); // end of initial addon @@ -1702,11 +1636,6 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA << ", chi2= " << kaStarVtx->chi2() <<", ndof = " <<kaStarVtx->ndof()); goodKstar = true; - // GREAT -> store daughter particle info - m_VertexColl->push_back(mother_KstarVtx); - ATH_MSG_DEBUG(" Added Kstar vertex to vertex collection"); - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> KstarVertexEL(*m_VertexColl,index); // monitoring m_mon_BdMuMuKs_VtxMassBd_Ks.push_back((kaStarVtx->mass())*0.001); @@ -1726,12 +1655,9 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA ATH_MSG_DEBUG(" B0 rejected by mass or chi2 cuts after vertex fit!" << ", chi2= " << kaStarVtx->chi2()); if(timerSvc()) m_VtxFitTimer->pause(); //continue; // for performance test not continue - vertex = false; delete mother_KstarVtx; } } // end of successful fit condition "mother" - //int index = m_VertexColl->size()-1; - //ElementLink<TrigVertexCollection> BplusVertexEL(*m_VertexColl,index); delete kaStarVtx; } // end of successful fit condition initial vertex if(timerSvc()) m_VtxFitTimer->pause(); @@ -1837,7 +1763,6 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA << ", chi2= " << baDVtx->chi2() <<", ndof = " <<baDVtx->ndof()); // PERFECT -> Bphys particle was stored in collection - m_VertexColl->push_back(mother_BdVtx); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBd); ATH_MSG_DEBUG(" Added Bd vertex to vertex collection"); @@ -1865,8 +1790,6 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA } } // end of successful fit condition "mother" if (vertex){ - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> BdVertexEL(*m_VertexColl,index); } else { delete mother_BdVtx; } @@ -1881,9 +1804,9 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA if ((xMuMuMass > m_lowerBd_KstarMuMuMassCutVtxOff && xMuMuMass < m_upperBd_KstarMuMuMassCutVtxOff)) { // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuBd; - ElementLink<xAOD::TrackParticleContainer> track1ELBd = mu1->idTrackLink(); - ElementLink<xAOD::TrackParticleContainer> track2ELBd = mu2->idTrackLink(); + + const ElementLink<xAOD::TrackParticleContainer>& track1ELBd = mu1->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track2ELBd = mu2->idTrackLink(); ElementLink<xAOD::TrackParticleContainer> track3ELBd(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4ELBd(*trkCollection, iTrk4); @@ -1893,15 +1816,8 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA ATH_MSG_VERBOSE("Track 1 pT " << (*track3ELBd)->pt() << " eta: " << (*track3ELBd)->eta() << " phi: " << (*track3ELBd)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4ELBd)->pt() << " eta: " << (*track4ELBd)->eta() << " phi: " << (*track4ELBd)->phi()); - trackVectorBmumuBd.push_back(track1ELBd); // temp - trackVectorBmumuBd.push_back(track2ELBd); // temp - trackVectorBmumuBd.push_back(track3ELBd); // temp - trackVectorBmumuBd.push_back(track4ELBd); // temp - - - // if(m_doKstar_KaonPionVertexFit){ ElementLink<xAOD::TrigBphysContainer> trigPartBdEL(*m_trigBphysColl_kStarxAOD,KstarIndex); - //TrigL2Bphys* trigPartBmumuBd = new TrigL2Bphys(0.0, 0.0, 0.0, TrigL2Bphys::BDKSTMUMU, xMuMuMass, trigPartBdEL); + xAOD::TrigBphys * trigPartBmumuBd = new xAOD::TrigBphys(); trigPartBmumuBd->makePrivateStore(); trigPartBmumuBd->initialise(0.0, 0.0, 0.0, xAOD::TrigBphys::BDKSTMUMU, xMuMuMass,trigPartBdEL, xAOD::TrigBphys::L2); @@ -1911,15 +1827,7 @@ void TrigL2BMuMuXFex::checkBdMuMuKstar(const xAOD::L2CombinedMuon* mu1, const xA trigPartBmumuBd->addTrackParticleLink(track3ELBd); trigPartBmumuBd->addTrackParticleLink(track4ELBd); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBd); - // }else{ - // ElementLink<TrigL2BphysContainer> trigPartBdEL(*m_trigBphysColl_kStar,KstarIndex); - // TrigL2Bphys* trigPartBmumuBd = new TrigL2Bphys(0., 0., 0., TrigL2Bphys::BDKSTMUMU, xMuMuMass, trigPartBdEL); - // trigPartBmumuBd->addTrack(track1ELBd); - // trigPartBmumuBd->addTrack(track2ELBd); - // trigPartBmumuBd->addTrack(track3ELBd); - // trigPartBmumuBd->addTrack(track4ELBd); - // m_trigBphysColl_b->push_back(trigPartBmumuBd); - // } + ATH_MSG_DEBUG(" Kstar's Pion and Kaon Candidates accepted with K* mass: " << xMass << "MeV" << " and with Bd mass : " << xMuMuMass << "MeV" << " kaon particle with pt: "<< trk3->pt() << " pion charged particle with pt: "<< trk4->pt()); @@ -1967,7 +1875,7 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD << " phi, eta - more RoIs => " << trigPartBmumuPhi->phi() << " " << trigPartBmumuPhi->eta() << " vertex type " << trigPartBmumuPhi->particleType()); // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuPhi; + ElementLink<xAOD::TrackParticleContainer> track3EL(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4EL(*trkCollection, iTrk4); @@ -1975,9 +1883,6 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD ATH_MSG_VERBOSE("Track 1 pT " << (*track3EL)->pt() << " eta: " << (*track3EL)->eta() << " phi: " << (*track3EL)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4EL)->pt() << " eta: " << (*track4EL)->eta() << " phi: " << (*track4EL)->phi()); - trackVectorBmumuPhi.push_back(track3EL); // temp - trackVectorBmumuPhi.push_back(track4EL); // temp - trigPartBmumuPhi->addTrackParticleLink(track3EL); trigPartBmumuPhi->addTrackParticleLink(track4EL); // end of initial addon @@ -2090,10 +1995,7 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD goodPhi = true; // GREAT -> store daughter particle info - m_VertexColl->push_back(mother_PhiVtx); ATH_MSG_DEBUG(" Added Phi vertex to vertex collection"); - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> PhiVertexEL(*m_VertexColl,index); // monitoring m_mon_BsMuMuPhi_VtxMassBs_Phi.push_back((phia1020Vtx->mass())*0.001); @@ -2119,12 +2021,9 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD ATH_MSG_DEBUG(" Phi rejected by mass or chi2 cuts after vertex fit!" << ", chi2= " << phia1020Vtx->chi2()); if(timerSvc()) m_VtxFitTimer->pause(); //continue; // for performance test not continue - vertex = false; delete mother_PhiVtx; } } // end of successful fit condition "mother" - //int index = m_VertexColl->size()-1; - //ElementLink<TrigVertexCollection> BplusVertexEL(*m_VertexColl,index); delete phia1020Vtx; } // end of successful fit condition initial vertex if(timerSvc()) m_VtxFitTimer->pause(); @@ -2233,7 +2132,6 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD << ", chi2= " << baSVtx->chi2() <<", ndof = " <<baSVtx->ndof()); // PERFECT -> Bphys particle was stored in collection - m_VertexColl->push_back(mother_BsVtx); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBs); ATH_MSG_DEBUG(" Added Bs vertex to vertex collection"); // monitoring of successfuly stored particles @@ -2266,8 +2164,6 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD } } // end of successful fit condition "mother" if(vertex) { - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> BsVertexEL(*m_VertexColl,index); } else { delete mother_BsVtx; } @@ -2282,9 +2178,8 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD if ((xMuMuMass > m_lowerBs_Phi1020MuMuMassCutVtxOff && xMuMuMass < m_upperBs_Phi1020MuMuMassCutVtxOff)) { // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuBs; - ElementLink<xAOD::TrackParticleContainer> track1ELBs = mu1->idTrackLink(); - ElementLink<xAOD::TrackParticleContainer> track2ELBs = mu2->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track1ELBs = mu1->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track2ELBs = mu2->idTrackLink(); ElementLink<xAOD::TrackParticleContainer> track3ELBs(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4ELBs(*trkCollection, iTrk4); @@ -2294,15 +2189,8 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD ATH_MSG_VERBOSE("Track 1 pT " << (*track3ELBs)->pt() << " eta: " << (*track3ELBs)->eta() << " phi: " << (*track3ELBs)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4ELBs)->pt() << " eta: " << (*track4ELBs)->eta() << " phi: " << (*track4ELBs)->phi()); - trackVectorBmumuBs.push_back(track1ELBs); // temp - trackVectorBmumuBs.push_back(track2ELBs); // temp - trackVectorBmumuBs.push_back(track3ELBs); // temp - trackVectorBmumuBs.push_back(track4ELBs); // temp - - - // if(m_doPhi1020_KaonKaonVertexFit){ - // ElementLink<TrigL2BphysContainer> trigPartBsEL(*m_trigBphysColl_phi,PhiIndex); - //TrigL2Bphys* trigPartBmumuBs = new TrigL2Bphys(0.0, 0.0, 0.0, TrigL2Bphys::BSPHIMUMU, xMuMuMass, trigPartBsEL); + + ElementLink<xAOD::TrigBphysContainer> trigPartBsEL(*m_trigBphysColl_phixAOD,PhiIndex); xAOD::TrigBphys *trigPartBmumuBs = new xAOD::TrigBphys(); trigPartBmumuBs->makePrivateStore(); @@ -2313,18 +2201,7 @@ void TrigL2BMuMuXFex::checkBsMuMuPhi(const xAOD::L2CombinedMuon* mu1, const xAOD trigPartBmumuBs->addTrackParticleLink(track3ELBs); trigPartBmumuBs->addTrackParticleLink(track4ELBs); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBs); - // }else{ - // // m_trigBphysColl_phi->push_back(trigPartBmumuPhi); - // // int PhiIndex = m_trigBphysColl_phi->size() - 1; - // // ElementLink<TrigL2BphysContainer> trigPartBsEL(*m_trigBphysColl_phi,PhiIndex); - // - // TrigL2Bphys* trigPartBmumuBs = new TrigL2Bphys(0., 0., 0., TrigL2Bphys::BSPHIMUMU, xMuMuMass/*, trigPartBsEL*/); - // trigPartBmumuBs->addTrackParticleLink(track1ELBs); - // trigPartBmumuBs->addTrackParticleLink(track2ELBs); - // trigPartBmumuBs->addTrackParticleLink(track3ELBs); - // trigPartBmumuBs->addTrackParticleLink(track4ELBs); - // m_trigBphysColl_b->push_back(trigPartBmumuBs); - // } + m_mon_BsMuMuPhi_n++; if(trk3->pt() * trk3->charge() > 0) { ATH_MSG_DEBUG(" Phi's Kplus and Kminus Candidates accepted with Phi mass: " << xMass << "MeV" @@ -2387,7 +2264,7 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x << " phi, eta - more RoIs => " << trigPartBmumuL->phi() << " " << trigPartBmumuL->eta() << " vertex type " << trigPartBmumuL->particleType()); // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuL; + ElementLink<xAOD::TrackParticleContainer> track3EL(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4EL(*trkCollection, iTrk4); @@ -2395,9 +2272,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x ATH_MSG_VERBOSE("Track 1 pT " << (*track3EL)->pt() << " eta: " << (*track3EL)->eta() << " phi: " << (*track3EL)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4EL)->pt() << " eta: " << (*track4EL)->eta() << " phi: " << (*track4EL)->phi()); - trackVectorBmumuL.push_back(track3EL); // temp - trackVectorBmumuL.push_back(track4EL); // temp - trigPartBmumuL->addTrackParticleLink(track3EL); trigPartBmumuL->addTrackParticleLink(track4EL); // end of initial addon @@ -2496,10 +2370,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x <<", ndof = " <<lambdaaVtx->ndof()); goodL = true; // GREAT -> store daughter particle info - m_VertexColl->push_back(mother_LVtx); - ATH_MSG_DEBUG(" Added L vertex to vertex collection"); - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> LVertexEL(*m_VertexColl,index); // monitoring m_mon_LbMuMuL_VtxMassLb_L.push_back((lambdaaVtx->mass())*0.001); @@ -2523,8 +2393,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x delete mother_LVtx; } } // end of successful fit condition "mother" - //int index = m_VertexColl->size()-1; - //ElementLink<TrigVertexCollection> BplusVertexEL(*m_VertexColl,index); delete lambdaaVtx; } // end of successful fit condition initial vertex if(timerSvc()) m_VtxFitTimer->pause(); @@ -2635,7 +2503,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x <<", ndof = " <<laBVtx->ndof()); // PERFECT -> Bphys particle was stored in collection - m_VertexColl->push_back(mother_LbVtx); m_trigBphysColl_bxAOD->push_back(trigPartBmumuLb); ATH_MSG_DEBUG(" Added Lb vertex to vertex collection"); @@ -2663,8 +2530,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x } } // end of successful fit condition "mother" if(vertex) { - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> LbVertexEL(*m_VertexColl,index); } else { delete mother_LbVtx; } @@ -2680,9 +2545,8 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x if ((xMuMuMass > m_lowerLb_LambdaMuMuMassCutVtxOff && xMuMuMass < m_upperLb_LambdaMuMuMassCutVtxOff)) { // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuLb; - ElementLink<xAOD::TrackParticleContainer> track1ELLb = mu1->idTrackLink(); - ElementLink<xAOD::TrackParticleContainer> track2ELLb = mu2->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track1ELLb = mu1->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track2ELLb = mu2->idTrackLink(); ElementLink<xAOD::TrackParticleContainer> track3ELLb(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4ELLb(*trkCollection, iTrk4); @@ -2691,16 +2555,8 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x ATH_MSG_VERBOSE("Muon 2 pT " << (*track2ELLb)->pt() << " eta: " << (*track2ELLb)->eta() << " phi: " << (*track2ELLb)->phi()); ATH_MSG_VERBOSE("Track 1 pT " << (*track3ELLb)->pt() << " eta: " << (*track3ELLb)->eta() << " phi: " << (*track3ELLb)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4ELLb)->pt() << " eta: " << (*track4ELLb)->eta() << " phi: " << (*track4ELLb)->phi()); - - trackVectorBmumuLb.push_back(track1ELLb); // temp - trackVectorBmumuLb.push_back(track2ELLb); // temp - trackVectorBmumuLb.push_back(track3ELLb); // temp - trackVectorBmumuLb.push_back(track4ELLb); // temp - - - // if(m_doLambda_ProtonPionVertexFit){ + ElementLink<xAOD::TrigBphysContainer> trigPartLbEL(*m_trigBphysColl_lambdaxAOD,LIndex); - //TrigL2Bphys* trigPartBmumuLb = new TrigL2Bphys(0.0, 0.0, 0.0, TrigL2Bphys::LBLMUMU, xMuMuMass, trigPartLbEL); xAOD::TrigBphys* trigPartBmumuLb = new xAOD::TrigBphys(); trigPartBmumuLb->makePrivateStore(); trigPartBmumuLb->initialise(0.0, 0.0, 0.0, xAOD::TrigBphys::LBLMUMU, xMuMuMass, trigPartLbEL,xAOD::TrigBphys::L2); @@ -2710,18 +2566,6 @@ void TrigL2BMuMuXFex::checkLbMuMuLambda(const xAOD::L2CombinedMuon* mu1, const x trigPartBmumuLb->addTrackParticleLink(track3ELLb); trigPartBmumuLb->addTrackParticleLink(track4ELLb); m_trigBphysColl_bxAOD->push_back(trigPartBmumuLb); - // }else{ - // // m_trigBphysColl_lambda->push_back(trigPartBmumuL); - // // int LIndex = m_trigBphysColl_lambda->size() - 1; - // // ElementLink<xAOD::TrigBphysContainer> trigPartLbEL(*m_trigBphysColl_lambda,LIndex); - // - // TrigL2Bphys* trigPartBmumuLb = new TrigL2Bphys(0., 0., 0., TrigL2Bphys::LBLMUMU, xMuMuMass/*, trigPartLbEL*/); - // trigPartBmumuLb->addTrack(track1ELLb); - // trigPartBmumuLb->addTrack(track2ELLb); - // trigPartBmumuLb->addTrack(track3ELLb); - // trigPartBmumuLb->addTrack(track4ELLb); - // m_trigBphysColl_b->push_back(trigPartBmumuLb); - // } ATH_MSG_DEBUG(" Lambda's Proton and Pion Candidates accepted with L mass: " << xMass << "MeV" << " and with LambdaB mass : " << xMuMuMass << "MeV" << " proton particle with pt: "<< trk3->pt() << " pion particle with pt: "<< trk4->pt()); @@ -2773,7 +2617,7 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: << " phi, eta - more RoIs => " << trigPartBmumuDs->phi() << " " << trigPartBmumuDs->eta() << " vertex type " << trigPartBmumuDs->particleType()); // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuDs; + ElementLink<xAOD::TrackParticleContainer> track3EL(*trkCollection, iTrk3); //kaon ElementLink<xAOD::TrackParticleContainer> track4EL(*trkCollection, iTrk4); //kaon ElementLink<xAOD::TrackParticleContainer> track5EL(*trkCollection, iTrk5); //pion @@ -2783,9 +2627,6 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: ATH_MSG_VERBOSE("Track 2 pT " << (*track4EL)->pt() << " eta: " << (*track4EL)->eta() << " phi: " << (*track4EL)->phi()); ATH_MSG_VERBOSE("Track 3 pT " << (*track5EL)->pt() << " eta: " << (*track5EL)->eta() << " phi: " << (*track5EL)->phi()); - trackVectorBmumuDs.push_back(track3EL); // temp - trackVectorBmumuDs.push_back(track4EL); // temp - trackVectorBmumuDs.push_back(track5EL); // temp trigPartBmumuDs->addTrackParticleLink(track3EL); trigPartBmumuDs->addTrackParticleLink(track4EL); @@ -2898,10 +2739,7 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: goodDs = true; // GREAT -> store daughter particle info - m_VertexColl->push_back(mother_DsVtx); ATH_MSG_DEBUG(" Added Ds vertex to vertex collection"); - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> DsVertexEL(*m_VertexColl,index); // monitoring m_mon_BcMuMuDs_VtxMassBc_Ds.push_back((DsVtx->mass())*0.001); @@ -2939,8 +2777,6 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: delete mother_DsVtx; } } // end of successful fit condition "mother" - //int index = m_VertexColl->size()-1; - //ElementLink<TrigVertexCollection> BplusVertexEL(*m_VertexColl,index); delete DsVtx; } // end of successful fit condition initial vertex if(timerSvc()) m_VtxFitTimer->pause(); @@ -2995,8 +2831,7 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: //continue; vertex = false; } - //ElementLink<TrigL2BphysContainer> trigPartBcEL(*m_trigBphysColl_ds,DsIndex); - //TrigL2Bphys* trigPartBmumuBc = new TrigL2Bphys(0.0, 0.0, 0.0, TrigL2Bphys::BCDSMUMU, xMuMuMass, trigPartBcEL); + ElementLink<xAOD::TrigBphysContainer> trigPartBcEL(*m_trigBphysColl_dsxAOD,DsIndex); xAOD::TrigBphys* trigPartBmumuBc = new xAOD::TrigBphys(); trigPartBmumuBc->makePrivateStore(); @@ -3057,7 +2892,6 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: <<", ndof = " <<BcVtx->ndof()); // PERFECT -> Bphys particle was stored in collection - m_VertexColl->push_back(mother_BcVtx); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBc); ATH_MSG_DEBUG(" Added Bc vertex to vertex collection"); // monitoring of successfuly stored particles @@ -3095,8 +2929,6 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: } } // end of successful fit condition "mother" if(vertex) { - int index = m_VertexColl->size()-1; - ElementLink<TrigVertexCollection> BsVertexEL(*m_VertexColl,index); } else { delete mother_BcVtx; } @@ -3111,9 +2943,9 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: if ((xMuMuMass > m_lowerBc_DsMuMuMassCutVtxOff && xMuMuMass < m_upperBc_DsMuMuMassCutVtxOff)) { // Store links to the tracks forming bphys particle - ElementLinkVector<xAOD::TrackParticleContainer> trackVectorBmumuBc; - ElementLink<xAOD::TrackParticleContainer> track1ELBc = mu1->idTrackLink(); - ElementLink<xAOD::TrackParticleContainer> track2ELBc = mu2->idTrackLink(); + + const ElementLink<xAOD::TrackParticleContainer>& track1ELBc = mu1->idTrackLink(); + const ElementLink<xAOD::TrackParticleContainer>& track2ELBc = mu2->idTrackLink(); ElementLink<xAOD::TrackParticleContainer> track3ELBc(*trkCollection, iTrk3); ElementLink<xAOD::TrackParticleContainer> track4ELBc(*trkCollection, iTrk4); ElementLink<xAOD::TrackParticleContainer> track5ELBc(*trkCollection, iTrk5); @@ -3124,17 +2956,7 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: ATH_MSG_VERBOSE("Track 1 pT " << (*track3ELBc)->pt() << " eta: " << (*track3ELBc)->eta() << " phi: " << (*track3ELBc)->phi()); ATH_MSG_VERBOSE("Track 2 pT " << (*track4ELBc)->pt() << " eta: " << (*track4ELBc)->eta() << " phi: " << (*track4ELBc)->phi()); ATH_MSG_VERBOSE("Track 3 pT " << (*track5ELBc)->pt() << " eta: " << (*track5ELBc)->eta() << " phi: " << (*track5ELBc)->phi()); - - trackVectorBmumuBc.push_back(track1ELBc); // temp - trackVectorBmumuBc.push_back(track2ELBc); // temp - trackVectorBmumuBc.push_back(track3ELBc); // temp - trackVectorBmumuBc.push_back(track4ELBc); // temp - trackVectorBmumuBc.push_back(track5ELBc); // temp - - - // if(m_doPhi1020_KaonKaonVertexFit){ - //ElementLink<TrigL2BphysContainer> trigPartBcEL(*m_trigBphysColl_ds,DsIndex); - //TrigL2Bphys* trigPartBmumuBc = new TrigL2Bphys(0.0, 0.0, 0.0, TrigL2Bphys::BCDSMUMU, xMuMuMass, trigPartBcEL); + ElementLink<xAOD::TrigBphysContainer> trigPartBcEL(*m_trigBphysColl_dsxAOD,DsIndex); xAOD::TrigBphys* trigPartBmumuBc = new xAOD::TrigBphys(); trigPartBmumuBc->makePrivateStore(); @@ -3146,18 +2968,7 @@ void TrigL2BMuMuXFex::checkBcMuMuDs(const xAOD::L2CombinedMuon* mu1, const xAOD: trigPartBmumuBc->addTrackParticleLink(track4ELBc); trigPartBmumuBc->addTrackParticleLink(track5ELBc); m_trigBphysColl_bxAOD->push_back(trigPartBmumuBc); - // }else{ - // // m_trigBphysColl_phi->push_back(trigPartBmumuPhi); - // // int PhiIndex = m_trigBphysColl_phi->size() - 1; - // // ElementLink<TrigL2BphysContainer> trigPartBsEL(*m_trigBphysColl_phi,PhiIndex); - // - // TrigL2Bphys* trigPartBmumuBs = new TrigL2Bphys(0., 0., 0., TrigL2Bphys::BSPHIMUMU, xMuMuMass/*, trigPartBsEL*/); - // trigPartBmumuBs->addTrack(track1ELBs); - // trigPartBmumuBs->addTrack(track2ELBs); - // trigPartBmumuBs->addTrack(track3ELBs); - // trigPartBmumuBs->addTrack(track4ELBs); - // m_trigBphysColl_b->push_back(trigPartBmumuBs); - // } + m_mon_BcMuMuDs_n++; if(trk3->pt()*trk3->charge() > 0) { ATH_MSG_DEBUG(" Ds's Kplus, Kminus and pion Candidates accepted with Ds mass: " << xMass << "MeV" diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.h index d21a9b46fc994707e7f3d17be2ab48d1de9b4e16..ecd33b40a907cb04eb09a77fe5f9f571b55006e7 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2BMuMuXFex.h @@ -26,16 +26,10 @@ #include "BtrigUtils.h" -#include "TrigInDetEvent/TrigInDetTrackFitPar.h" -#include "TrigInDetEvent/TrigInDetTrackCollection.h" -//#include "TrigMuonEvent/TrigCombDiMuonContainer.h" - #include "TrigInDetToolInterfaces/ITrigVertexingTool.h" #include "TrigInDetToolInterfaces/ITrigL2VertexFitter.h" -#include "TrigInDetEvent/TrigVertexCollection.h" - #include "xAODTrigBphys/TrigBphysContainer.h" #include "xAODTrigBphys/TrigBphysAuxContainer.h" #include "xAODTrigBphys/TrigBphys.h" @@ -43,8 +37,6 @@ #include "xAODTrigMuon/L2CombinedMuon.h" #include "xAODTrigMuon/L2CombinedMuonContainer.h" -typedef std::vector<const TrigInDetTrack*> TTrackPair; - class TrigBphysHelperUtilsTool; /// addon, not needed @@ -67,20 +59,6 @@ class TrigL2BMuMuXFex: public HLT::ComboAlgo private: ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; -// double KMuMuMass(const TrigInDetTrack* mu1, const TrigInDetTrack* mu2, const TrigInDetTrack* kaon); -// double XMass(const TrigInDetTrack* particle1, const TrigInDetTrack* particle2, int decay); -// double XMuMuMass(const TrigInDetTrack* mu1, const TrigInDetTrack* mu2, -// const TrigInDetTrack* particle1, const TrigInDetTrack* particle2, int decay); -// double X3Mass(const TrigInDetTrack* particle1, const TrigInDetTrack* particle2, const TrigInDetTrack* particle3); -// double X3MuMuMass(const TrigInDetTrack* mu1, const TrigInDetTrack* mu2, -// const TrigInDetTrack* particle1, const TrigInDetTrack* particle2, const TrigInDetTrack* particle3); -// - // void checkBMuMuK(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2, const TrigInDetTrack* trk3, const TrigInDetTrackCollection* trkCollection, int iTrk3); - // void checkBdMuMuKstar(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2, const TrigInDetTrack* trk3, const TrigInDetTrack* trk4, const TrigInDetTrackCollection* trkCollection, int iTrk3, int iTrk4); - // void checkBsMuMuPhi(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2, const TrigInDetTrack* trk3, const TrigInDetTrack* trk4, const TrigInDetTrackCollection* trkCollection, int iTrk3, int iTrk4); - // void checkLbMuMuLambda(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2, const TrigInDetTrack* trk3, const TrigInDetTrack* trk4, const TrigInDetTrackCollection* trkCollection, int iTrk3, int iTrk4); - // void checkBcMuMuDs(const CombinedMuonFeature* mu1, const CombinedMuonFeature* mu2, const TrigInDetTrack* trk3, const TrigInDetTrack* trk4, const TrigInDetTrack* trk5, const TrigInDetTrackCollection* trkCollection, int iTrk3, int iTrk4, double xPhiMass, int iTrk5); - void checkBMuMuK(const xAOD::L2CombinedMuon* mu1, const xAOD::L2CombinedMuon* mu2, const xAOD::TrackParticle* trk3, const xAOD::TrackParticleContainer* trkCollection, int iTrk3); @@ -233,13 +211,6 @@ class TrigL2BMuMuXFex: public HLT::ComboAlgo TrigL2BphysContainer* m_trigBphysColl_b; xAOD::TrigBphysContainer* m_trigBphysColl_bxAOD; // revert back to non-aod naming once complete - TrigVertexCollection* m_VertexColl; - // temporary -// TrigL2BphysContainer* m_trigBphysColl_kStar; -// TrigL2BphysContainer* m_trigBphysColl_phi; -// TrigL2BphysContainer* m_trigBphysColl_lambda; -// TrigL2BphysContainer* m_trigBphysColl_ds; - xAOD::TrigBphysContainer* m_trigBphysColl_kStarxAOD; xAOD::TrigBphysContainer* m_trigBphysColl_phixAOD; xAOD::TrigBphysContainer* m_trigBphysColl_lambdaxAOD; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.cxx index 12f80ddaa6a9b3fb1cf4d7d3ad38168b4063bfc0..8d53edd535d778fd15b507937101fc984a8aed99 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.cxx @@ -14,10 +14,6 @@ #include "TrigL2MultiMuFex.h" -#include "TrigInDetEvent/TrigInDetTrackCollection.h" -#include "TrigInDetEvent/TrigInDetTrackFitPar.h" - - #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" #include "TrigInDetToolInterfaces/ITrigVertexingTool.h" @@ -107,16 +103,12 @@ TrigL2MultiMuFex::TrigL2MultiMuFex(const std::string & name, ISvcLocator* pSvcLo // Initialize the collections m_trigBphysColl = NULL; - //m_VertexColl = NULL; } /*------------------------------*/ TrigL2MultiMuFex::~TrigL2MultiMuFex() /*------------------------------*/ { - // TODO: Delete the collections ? - //delete m_trigBphysColl; - //delete m_VertexColl; } /*-------------------------------------------*/ @@ -235,19 +227,7 @@ HLT::ErrorCode TrigL2MultiMuFex::acceptInputs(HLT::TEConstVec& inputTE, bool& pa // Processing timers if ( timerSvc() ) m_BmmHypTot->start(); - // Retrieve event info - // int IdRun = 0; - // int IdEvent = 0; - // // event info - // uint32_t runNumber(0), evtNumber(0), lbBlock(0); - // if (m_bphysHelperTool->getRunEvtLb( runNumber, evtNumber, lbBlock).isFailure()) { - // ATH_MSG_ERROR("Error retriving EventInfo" ); - // } - // IdRun = runNumber; - // IdEvent = evtNumber; - - - + // Check consistency of the number of input Trigger Elements if (m_checkNinputTE && inputTE.size() != m_NInputMuon ) { ATH_MSG_ERROR("Got wrong number of input TEs, expect " << m_NInputMuon << " got " << inputTE.size() ); @@ -272,7 +252,6 @@ HLT::ErrorCode TrigL2MultiMuFex::hltExecute(HLT::TEConstVec& inputTE, HLT::Trigg { ATH_MSG_DEBUG(" In hltExecute " ); - // m_trigBphysColl = new TrigL2BphysContainer(); m_trigBphysColl = new xAOD::TrigBphysContainer; xAOD::TrigBphysAuxContainer xAODTrigBphysAuxColl; m_trigBphysColl->setStore(&xAODTrigBphysAuxColl); @@ -317,10 +296,6 @@ void TrigL2MultiMuFex::processTriMuon(HLT::TEConstVec& inputTE) const HLT::TriggerElement* te2 = inputTE[1]; const HLT::TriggerElement* te3 = inputTE[2]; - // const CombinedMuonFeature *muon1; - // const CombinedMuonFeature *muon2; - // const CombinedMuonFeature *muon3; - //if(getFeature(te1,muon1)!= HLT::OK) { if(getFeaturesLinks<xAOD::L2CombinedMuonContainer,xAOD::L2CombinedMuonContainer>(te1,l2combinedMuonEL[0]) != HLT::OK @@ -445,19 +420,6 @@ void TrigL2MultiMuFex::processTriMuon(HLT::TEConstVec& inputTE) m_mon_MutrkPhi.push_back( (*ELidtrack2)->phi0() ); m_mon_MutrkPhi.push_back( (*ELidtrack3)->phi0() ); - // simple lambda to help print out information, without tedious typing - /* - auto dumpinfo = [this] (const xAOD::L2CombinedMuon* muon) { - this->msg() << "pt=" << muon->pt()*muon->charge() << " trkAddr=" << muon->idTrack() << " Trk:Track=" << muon->idTrack()->track() - }; - if (msgLvl() <= MSG::DEBUG ) { - ATH_MSG_DEBUG("1st CombinedMuonFeature " << dumpinfo(muon1) ); - ATH_MSG_DEBUG("2st CombinedMuonFeature " << dumpinfo(muon2) ); - ATH_MSG_DEBUG("3st CombinedMuonFeature " << dumpinfo(muon3) ); - } // if debug - */ - - if (m_NMassMuon ==2) { // check mass of opposite sign muon pairs m_passInvMass=false; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.h index 52128dc642a23e8a686cdaebe73c8f529db437bb..8fe510b81e0dbd196fb69b02f3145af3bb9b21d6 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuFex.h @@ -17,12 +17,9 @@ #include "TrigInterfaces/ComboAlgo.h" -#include "TrigInDetEvent/TrigVertexCollection.h" #include "TrigInDetToolInterfaces/ITrigVertexFitter.h" #include "TrigInDetToolInterfaces/ITrigL2VertexFitter.h" -//#include "TrigParticle/TrigL2BphysContainer.h" - #include "TrigTimeAlgs/TrigTimerSvc.h" #include "Constants.h" @@ -109,7 +106,6 @@ class TrigL2MultiMuFex: public HLT::ComboAlgo { // Output collections xAOD::TrigBphysContainer* m_trigBphysColl; - //TrigVertexCollection* m_VertexColl; // Monitored variables std::vector<int> m_mon_Errors; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuHypo.h index 91fcf53621f22bb39ee20d15020d4c6e2c3abde5..7edefeee3cfbbc44688d73a5a27e3ff121c9a35c 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuHypo.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2MultiMuHypo.h @@ -23,12 +23,6 @@ #include <string> #include "TrigInterfaces/HypoAlgo.h" -////#include "TrigTimeAlgs/TrigTimerSvc.h" -//#include "TrigInDetEvent/TrigVertexCollection.h" -//#include "TrigParticle/TrigL2Bphys.h" -//#include "TrigParticle/TrigL2BphysContainer.h" -// - class TrigBphysHelperUtilsTool; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.cxx deleted file mode 100644 index d88335918518db2285b863e767ec09565d8df3b3..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.cxx +++ /dev/null @@ -1,943 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// ******************************************************************* -// -// NAME: TrigL2TrkMassFex.cxx -// PACKAGE: Trigger/TrigHypothesis/TrigBphysHypo -// AUTHOR: Julie Kirk -// -// ******************************************************************* - -#include <math.h> - -#include "TrigL2TrkMassFex.h" - - -#include "TrigSteeringEvent/TrigRoiDescriptor.h" - -#include "CLHEP/GenericFunctions/CumulativeChiSquare.hh" - -#include "TrigInDetToolInterfaces/ITrigVertexingTool.h" -#include "TrigInDetEvent/TrigL2Vertex.h" - -#include "Constants.h" -#include "BtrigUtils.h" - -// additions of xAOD objects -#include "TrigBphysHelperUtilsTool.h" -#include "xAODTracking/TrackParticle.h" -#include "xAODTracking/TrackParticleContainer.h" -#include "xAODTrigMuon/L2StandAloneMuon.h" -#include "xAODTrigMuon/L2StandAloneMuonContainer.h" -#include "xAODTrigMuon/L2CombinedMuon.h" -#include "xAODTrigMuon/L2CombinedMuonContainer.h" - -using namespace std; - -/*------------------------------------------------------------------------------------*/ -TrigL2TrkMassFex::TrigL2TrkMassFex(const std::string & name, ISvcLocator* pSvcLocator): - HLT::FexAlgo(name, pSvcLocator), - m_bphysHelperTool("TrigBphysHelperUtilsTool"), - m_vertFitter("TrigVertexFitter",this), - m_L2vertFitter("TrigL2VertexFitter",this), - m_vertexingTool("TrigVertexingTool",this), - m_TotTimer(0), - m_VtxFitTimer(0) -/*------------------------------------------------------------------------------------*/ -{ - - // Read properties - boolean switches - declareProperty("AcceptAll" , m_acceptAll = false); - declareProperty("OppositeCharge", m_oppositeCharge = true ); - declareProperty("doVertexFit" , m_doVertexFit = true ); - - // Input list of tracks for second leg - declareProperty("TrackCollection",m_input_trackCollectionKey="InDetTrigTrackingxAODCnv_Bphysics_FTF"); - - // Read properties - cuts - declareProperty("MatchL1" , m_matchL1 = false ); - declareProperty("MuonPTthr" , m_muonPtthr = 4000 ); - declareProperty("TrackPTthr" , m_trackPtthr = 1400 ); - declareProperty("dEtaTrackRoI" , m_dEta_cut = 0.1); - declareProperty("dPhiTrackRoI" , m_dPhi_cut = 0.1); - declareProperty("DaughterMass" , m_daughterMass = 0. ); - declareProperty("Mass_low_cut" , m_mass_low_cut = 0. ); - declareProperty("Mass_high_cut", m_mass_high_cut = 0. ); - - // Read properties - vertexing tools - declareProperty("TrigVertexFitter" , m_vertFitter); - declareProperty("TrigL2VertexFitter", m_L2vertFitter); - declareProperty("TrigVertexingTool" , m_vertexingTool, "TrigVertexingTool"); - - // Variables for monitoring histograms - declareMonitoredStdContainer("Errors" , m_mon_Errors , AutoClear); - declareMonitoredStdContainer("Acceptance" , m_mon_Acceptance , AutoClear); - declareMonitoredStdContainer("ROIEta" , m_mon_ROIEta , AutoClear); - declareMonitoredStdContainer("ROIPhi" , m_mon_ROIPhi , AutoClear); - declareMonitoredVariable( "nTracks" , m_mon_nTracks ); - declareMonitoredStdContainer("TrkPt" , m_mon_TrkPt , AutoClear); - declareMonitoredStdContainer("TrkPt_wideRange" , m_mon_TrkPt_wideRange , AutoClear); - declareMonitoredStdContainer("TrkEta" , m_mon_TrkEta , AutoClear); - declareMonitoredStdContainer("TrkPhi" , m_mon_TrkPhi , AutoClear); - declareMonitoredStdContainer("TrkROIdEta" , m_mon_TrkROIdEta , AutoClear); - declareMonitoredStdContainer("TrkROIdPhi" , m_mon_TrkROIdPhi , AutoClear); - declareMonitoredStdContainer("TrkROIdR" , m_mon_TrkROIdR , AutoClear); - declareMonitoredStdContainer("InvMassNoTrkPtCut" , m_mon_InvMassNoTrkPtCut , AutoClear); - declareMonitoredStdContainer("InvMassNoTrkPtCut_wideRange", m_mon_InvMassNoTrkPtCut_wideRange , AutoClear); - declareMonitoredStdContainer("InvMass" , m_mon_InvMass , AutoClear); - declareMonitoredStdContainer("InvMass_wideRange" , m_mon_InvMass_wideRange , AutoClear); - declareMonitoredStdContainer("Trk1Pt" , m_mon_Trk1Pt , AutoClear); - declareMonitoredStdContainer("Trk2Pt" , m_mon_Trk2Pt , AutoClear); - declareMonitoredStdContainer("Trk1Eta" , m_mon_Trk1Eta , AutoClear); - declareMonitoredStdContainer("Trk2Eta" , m_mon_Trk2Eta , AutoClear); - declareMonitoredStdContainer("Trk1Phi" , m_mon_Trk1Phi , AutoClear); - declareMonitoredStdContainer("Trk2Phi" , m_mon_Trk2Phi , AutoClear); - declareMonitoredStdContainer("Trk1Trk2dEta" , m_mon_Trk1Trk2dEta , AutoClear); - declareMonitoredStdContainer("Trk1Trk2dPhi" , m_mon_Trk1Trk2dPhi , AutoClear); - declareMonitoredStdContainer("Trk1Trk2dR" , m_mon_Trk1Trk2dR , AutoClear); - declareMonitoredStdContainer("SumPtTrk12" , m_mon_SumPtTrk12 , AutoClear); - declareMonitoredStdContainer("FitMass" , m_mon_FitMass , AutoClear); - declareMonitoredStdContainer("FitMass_wideRange" , m_mon_FitMass , AutoClear); - declareMonitoredStdContainer("InvMass_okFit" , m_mon_InvMass_okFit , AutoClear); - declareMonitoredStdContainer("Chi2toNDoF" , m_mon_Chi2toNDoF , AutoClear); - declareMonitoredStdContainer("Chi2toNDoFProb" , m_mon_Chi2toNDoFProb , AutoClear); - declareMonitoredStdContainer("FitTotalPt" , m_mon_FitTotalPt , AutoClear); - declareMonitoredStdContainer("SumPtTrk12_okFit" , m_mon_SumPtTrk12_okFit , AutoClear); - declareMonitoredStdContainer("FitVtxR" , m_mon_FitVtxR , AutoClear); - declareMonitoredStdContainer("FitVtxZ" , m_mon_FitVtxZ , AutoClear); - declareMonitoredVariable( "nBphys" , m_mon_nBphys ); - declareMonitoredVariable( "TotalRunTime" , m_mon_TotalRunTime ); - declareMonitoredVariable( "VertexingTime" , m_mon_VertexingTime ); - - // Zero the counters - m_lastEvent = 999; - m_lastEventPassed = 999; - m_countTotalEvents = 0; - m_countTotalRoI = 0; - m_countPassedEvents = 0; - m_countPassedRoIs = 0; - m_countPassedRoIMatch = 0; - m_countPassedMass = 0; - - // Initialize the collections - m_trigBphysColl = NULL; - m_VertexColl = NULL; -} - -/*----------------------------------*/ -TrigL2TrkMassFex::~TrigL2TrkMassFex() -/*----------------------------------*/ -{ - // Delete the collections - delete m_trigBphysColl; - delete m_VertexColl; -} - -/*---------------------------------------------*/ -HLT::ErrorCode TrigL2TrkMassFex::hltInitialize() -/*---------------------------------------------*/ -{ - - // Print out properties, cuts - ATH_MSG_INFO("AcceptAll = " << (m_acceptAll==true ? "True" : "False") ); - ATH_MSG_INFO("Apply opposite sign cut = " << (m_oppositeCharge==true ? "True" : "False") ); - ATH_MSG_INFO("Muon pT cut : " << m_muonPtthr << " GeV" ); - ATH_MSG_INFO("Track pT cut : " << m_trackPtthr << " GeV" ); - ATH_MSG_INFO("Track-RoI match cuts: dEta < " << m_dEta_cut << " dPhi < " << m_dPhi_cut ); - ATH_MSG_INFO("Mass cuts : " << m_mass_low_cut << " to " << m_mass_high_cut << " GeV" ); - ATH_MSG_INFO("Daughter mass : " << m_daughterMass << " GeV" ); - - ATH_MSG_INFO("Initialization completed successfully"); - - // Retrieve the vertexing tools - StatusCode sc = m_vertFitter.retrieve(); - if ( sc.isFailure() ) { - ATH_MSG_FATAL("Unable to locate TrigVertexFitter tool" ); - return HLT::BAD_JOB_SETUP; - } else { - ATH_MSG_INFO("TrigVertexFitter retrieved" ); - } - - sc = m_L2vertFitter.retrieve(); - if ( sc.isFailure() ) { - ATH_MSG_FATAL("Unable to locate TrigL2VertexFitter tool" ); - return HLT::BAD_JOB_SETUP; - } - else { - ATH_MSG_INFO("TrigL2VertexFitter retrieved" ); - } - - sc = m_vertexingTool.retrieve(); - if ( sc.isFailure() ) { - ATH_MSG_FATAL("Unable to locate TrigVertexingTool tool" ); - return HLT::BAD_JOB_SETUP; - } else { - ATH_MSG_INFO("TrigVertexingTool retrieved" ); - } - if (m_bphysHelperTool.retrieve().isFailure()) { - ATH_MSG_ERROR("Can't find TrigBphysHelperUtilsTool" ); - return HLT::BAD_JOB_SETUP; - } else { - ATH_MSG_DEBUG("TrigBphysHelperUtilsTool found" ); - } - - // Add the timers - if ( timerSvc() ) { - m_TotTimer = addTimer("L2TrkMassTot"); - m_VtxFitTimer = addTimer("L2TrkMassVFit"); - } - - return HLT::OK; -} - - -/*-------------------------------------------*/ -HLT::ErrorCode TrigL2TrkMassFex::hltFinalize() -/*-------------------------------------------*/ -{ - - ATH_MSG_INFO("in finalize()" ); - ATH_MSG_INFO("Run on events/RoIs " << m_countTotalEvents << "/" << m_countTotalRoI ); - ATH_MSG_INFO("Passed events/RoIs " << m_countPassedEvents << "/" << m_countPassedRoIs ); - ATH_MSG_INFO("Passed RoI match " << m_countPassedRoIMatch ); - ATH_MSG_INFO("Passed mass cuts " << m_countPassedMass ); - - return HLT::OK; -} - -// Define the bins for error-monitoring histogram (//#define ERROR_Empty_TrackColl 3) -#define ERROR_No_EventInfo 0 -#define ERROR_No_RoI 1 -#define ERROR_No_TrackColl 2 -#define ERROR_No_CombMuon 3 -#define ERROR_More_TrackColl 4 -#define ERROR_AddTrack_Fails 5 -#define ERROR_Unique_AddTrack_Fails 6 -#define ERROR_CalcInvMass_Fails 7 -#define ERROR_CalcMother_Fails 8 -#define ERROR_CalcMassPull_Fails 9 -#define ERROR_BphysColl_Fails 10 - -// Define the bins for acceptance-monitoring histogram -#define ACCEPT_Input 0 -#define ACCEPT_AcceptAll 1 -#define ACCEPT_Got_RoI 2 -#define ACCEPT_Got_TrackColl 3 -#define ACCEPT_Full_TrackColl 4 -#define ACCEPT_Single_TrackColl 5 -#define ACCEPT_Full_IDTracks 6 -#define ACCEPT_Mu1_Chi2_Cut 7 -#define ACCEPT_Mu1_pT_Cut 8 -#define ACCEPT_Mu1_Chi2Pt_Cuts 9 -#define ACCEPT_Mu1_dEta_Cut 10 -#define ACCEPT_Mu1_dPhi_Cut 11 -#define ACCEPT_Mu1_dR_Cut 12 -#define ACCEPT_Mu2_Chi2_Cut 13 -#define ACCEPT_Mu2_pT_Cut 14 -#define ACCEPT_Mu2_Chi2Pt_Cuts 15 -#define ACCEPT_Opp_Charge 16 -#define ACCEPT_InvMass_Cut 17 -#define ACCEPT_AddTrack_Test 18 -#define ACCEPT_Vertexing 19 -#define ACCEPT_CalcInvMass 20 -#define ACCEPT_CalcMother 21 -#define ACCEPT_Vertex_not_NULL 22 -// Separator 23 -#define ACCEPT_BphysColl_not_Empty 24 -// Separator 25 -#define ACCEPT_Each_Mu1_Chi2_Cut 26 -#define ACCEPT_Each_Mu1_pT_Cut 27 -#define ACCEPT_Each_Mu1_Chi2Pt_Cuts 28 -#define ACCEPT_Each_Mu1_dEta_Cut 29 -#define ACCEPT_Each_Mu1_dPhi_Cut 30 -#define ACCEPT_Each_Mu1_dR_Cut 31 -// Separator 32 -#define ACCEPT_Each_Mu2_Chi2_Cut 33 -#define ACCEPT_Each_Mu2_pT_Cut 34 -#define ACCEPT_Each_Mu2_Chi2Pt_Cuts 35 -#define ACCEPT_Each_Opp_Charge 36 -#define ACCEPT_Each_InvMass_Cut 37 -#define ACCEPT_Each_AddTrack_Test 38 -#define ACCEPT_Each_Vertexing 39 -#define ACCEPT_Each_CalcInvMass 40 -#define ACCEPT_Each_CalcMother 41 -#define ACCEPT_Each_Vertex_not_NULL 42 - -// /*-----------------------------------------------------------------------------------------*/ -// HLT::ErrorCode TrigL2TrkMassFex::acceptInput(const HLT::TriggerElement* inputTE, bool& pass) -// /*-----------------------------------------------------------------------------------------*/ -// { -// } - -/*---------------------------------------------------------------------------------------------------*/ -HLT::ErrorCode TrigL2TrkMassFex::hltExecute(const HLT::TriggerElement*, HLT::TriggerElement* outputTE) -/*---------------------------------------------------------------------------------------------------*/ -{ - - // Global flags - bool result = false; - bool PassedRoIMatch = false; - bool PassedMass = false; - - // Processing timers - if ( timerSvc() ) m_TotTimer->start(); - - // Initialize the monitoring variables - m_mon_nBphys = 0; - m_mon_TotalRunTime = 0; - m_mon_VertexingTime = 0; - - ATH_MSG_DEBUG(" In B tag and probe FEX acceptInput" ); - m_mon_Acceptance.push_back( ACCEPT_Input ); - - // Retrieve event info - int IdRun = 0; - int IdEvent = 0; - // event info - uint32_t runNumber(0), evtNumber(0), lbBlock(0); - if (m_bphysHelperTool->getRunEvtLb( runNumber, evtNumber, lbBlock).isFailure()) { - ATH_MSG_ERROR("Error retriving EventInfo" ); - } - IdRun = runNumber; - IdEvent = evtNumber; - - // Accept-All mode: temporary patch; should be done with force-accept - if (m_acceptAll) { - ATH_MSG_DEBUG("AcceptAll property is set: taking all events" ); - // pass = true; - m_mon_Acceptance.push_back( ACCEPT_AcceptAll ); - } - else { - ATH_MSG_DEBUG("AcceptAll property not set: applying selection" ); - // pass = false; - } - - // Get RoI descriptor - const TrigRoiDescriptor* roiDescriptor = 0; - if (getFeature(outputTE, roiDescriptor, "initialRoI") != HLT::OK) roiDescriptor = 0; - - if ( !roiDescriptor ) { - ATH_MSG_WARNING("No RoI for this Trigger Element! " ); - if ( timerSvc() ) { - m_TotTimer->stop(); - m_mon_TotalRunTime = m_TotTimer->elapsed(); - } - m_mon_Errors.push_back( ERROR_No_RoI ); - return HLT::NAV_ERROR; - } - m_mon_Acceptance.push_back( ACCEPT_Got_RoI ); - - // Print RoI debugging information - ATH_MSG_DEBUG("Using TE(" << outputTE << ")->getId(): " << outputTE->getId() << "; RoI ID = " << roiDescriptor->roiId() - << ": Eta = " << roiDescriptor->eta() << ", Phi = " << roiDescriptor->phi() ); - - // RoI monitoring - m_mon_ROIEta.push_back( roiDescriptor->eta() ); - m_mon_ROIPhi.push_back( roiDescriptor->phi() ); - - // Create vector for TrigL2Bphys particles - // delete m_trigBphysColl; - // delete m_VertexColl; - m_trigBphysColl = new xAOD::TrigBphysContainer(); - xAOD::TrigBphysAuxContainer trigBphysAuxColl; - m_trigBphysColl->setStore(&trigBphysAuxColl); - m_VertexColl = new TrigVertexCollection(); - - - ///////////////// Get vector of tracks ///////////////// - - std::vector<const xAOD::TrackParticleContainer*> vectorOfTrackCollections; - - HLT::ErrorCode status = getFeatures(outputTE, vectorOfTrackCollections,m_input_trackCollectionKey); - - // Were the track-collections read out ? - if ( status != HLT::OK ) { - ATH_MSG_DEBUG(" Failed to get InDetTrackCollections, exiting " ); - if ( timerSvc() ) { - m_TotTimer->stop(); - m_mon_TotalRunTime = m_TotTimer->elapsed(); - } - m_mon_Errors.push_back( ERROR_No_TrackColl ); - return HLT::OK; - } - m_mon_Acceptance.push_back( ACCEPT_Got_TrackColl ); - - // Is there at least one collection ? - if (vectorOfTrackCollections.size() == 0) { - if ( timerSvc() ) { - m_TotTimer->stop(); - m_mon_TotalRunTime = m_TotTimer->elapsed(); - } -// m_mon_Errors.push_back( ERROR_Empty_TrackColl ); - return HLT::OK; - } - m_mon_Acceptance.push_back( ACCEPT_Full_TrackColl ); - - // Is there only one collection ? - if (vectorOfTrackCollections.size() != 1) { - ATH_MSG_DEBUG(" Got " << vectorOfTrackCollections.size() << " InDetTrackCollections, expected one unless this is FullScan" ); - if ( timerSvc() ) { - m_TotTimer->stop(); - m_mon_TotalRunTime = m_TotTimer->elapsed(); - } - // m_mon_Errors.push_back( ERROR_More_TrackColl ); - //return HLT::OK; - } - - m_mon_Acceptance.push_back( ACCEPT_Single_TrackColl ); - - std::vector<const xAOD::TrackParticleContainer*>::iterator pTrackColl = vectorOfTrackCollections.begin(); - std::vector<const xAOD::TrackParticleContainer*>::iterator lastTrackColl = vectorOfTrackCollections.end(); - - // JK If more than 1 track collection then this is FullScan instance. Find collection with most tarcks - if (vectorOfTrackCollections.size() > 1) { - std::vector<const xAOD::TrackParticleContainer*>::iterator findMaxTrackColl = vectorOfTrackCollections.begin(); - unsigned int Ntracks=0; - for (;findMaxTrackColl != lastTrackColl; ++ findMaxTrackColl) { - ATH_MSG_DEBUG(" InDetTrackCollections size, " << (*findMaxTrackColl)->size() ); - if ((*findMaxTrackColl)->size() > Ntracks) { - ATH_MSG_DEBUG(" Largest collection so far, assume it is FullScan " ); - Ntracks= (*findMaxTrackColl)->size(); - pTrackColl= findMaxTrackColl; - } - } - } - - //////////////////////////////////////////////////////// - - // Check if we are still in the same event - if ( IdEvent != (int) m_lastEvent ) { - m_countTotalEvents++; - m_lastEvent = IdEvent; - } - m_countTotalRoI++; - - // Get the number of tracks - ATH_MSG_DEBUG(" Got InDetTrackCollections with " << (*pTrackColl)->size() << " tracks" ); - - // Number of tracks monitoring - if ( (*pTrackColl)->size() > 0 ) m_mon_Acceptance.push_back( ACCEPT_Full_IDTracks ); - m_mon_nTracks = (*pTrackColl)->size(); - - // Boolean flags indicating what stages were already reached (for monitoring purposes) - std::vector<bool> flag_stages( 43, false ); - - // Prepare the vertexing timer - if ( timerSvc() ) { - m_VtxFitTimer->start(); - m_VtxFitTimer->pause(); // resume it only for the vertexing periods - } - - - ///////////////// Get muons ///////////////// - // const CombinedMuonFeature *muon; - const xAOD::L2CombinedMuon *muon(nullptr); - //ElementLink<xAOD::L2CombinedMuonContainer> muonEL; - typedef ElementLinkVector<xAOD::L2CombinedMuonContainer> ELVMuons; - ELVMuons muonEL; - - if (!m_matchL1) { - //HLT::ErrorCode status = getFeature(outputTE, muon); - //HLT::ErrorCode status = getFeatureLink<xAOD::L2CombinedMuonContainer,xAOD::L2CombinedMuonContainer>(outputTE,muonEL); - HLT::ErrorCode status = getFeaturesLinks<xAOD::L2CombinedMuonContainer,xAOD::L2CombinedMuonContainer>(outputTE,muonEL); - - if ( status != HLT::OK || !muonEL.size()) { - ATH_MSG_DEBUG(" Failed to get CombinedMuonFeature, exiting " ); - m_mon_Errors.push_back( ERROR_No_CombMuon ); - return HLT::OK; - } - if (muonEL.size() > 1) { - ATH_MSG_WARNING("Unexpected number of containers for comb feature: " ); - } - if (!muonEL[0].isValid()) { - ATH_MSG_WARNING("Invalid comb muon: " ); - m_mon_Errors.push_back( ERROR_No_CombMuon ); - return HLT::OK; - } - - muon = *(muonEL.at(0)); - - ATH_MSG_DEBUG(" Got CombinedMuonFeature addr=" << muon << " pt=" << muon->charge() *muon->charge() - << " trkAddr=" << muon->idTrack() << " trackParamAddr=" << muon->idTrack()->track()); - } - - - - //////////// Loop over track collections /////////////// - - for ( ; pTrackColl != lastTrackColl; pTrackColl++ ) { - - // Monitor the tracks that failed to be added into the vertexing procedure - std::vector<bool> addTrackFails ( (*pTrackColl)->size(), false ); - - // loop over tracks and look for match to RoI - xAOD::TrackParticleContainer::const_iterator track1 = (*pTrackColl)->begin(); - xAOD::TrackParticleContainer::const_iterator lastTrack1 = (*pTrackColl)->end(); - - ///////////// Find RoI matching track //////////////// - - for (int itrk = 0; track1 != lastTrack1; ++itrk, track1++) { - ATH_MSG_DEBUG("track1 : " << itrk << " pT = " << (*track1)->pt() - << " phi = " << (*track1)->phi() << " eta = " << (*track1)->eta() << " chi2 = " << (*track1)->chiSquared() ); - - // Tracks monitoring - m_mon_TrkPt_wideRange.push_back( fabs((*track1)->pt()) / CLHEP::GeV ); - m_mon_TrkPt .push_back( fabs((*track1)->pt()) / CLHEP::GeV ); - m_mon_TrkEta.push_back( (*track1)->eta() ); - m_mon_TrkPhi.push_back( (*track1)->phi() ); - - // Get the pT and chi2 of the tracks - float trackPt = fabs( (*track1)->pt() ); - float trackChi2 = (*track1)->chiSquared(); - - // Check pT and chi2 (monitoring only) - if ( trackChi2 <= 1e7 ) { - if ( !flag_stages[ ACCEPT_Mu1_Chi2_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu1_Chi2_Cut ); - flag_stages[ ACCEPT_Mu1_Chi2_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_Chi2_Cut ); - } - - //JK 4/5/11 changed this to use muonPtthr i.e. different pT cuts for muon and tarck - if ( trackPt >= m_muonPtthr ) { - if ( !flag_stages[ ACCEPT_Mu1_pT_Cut ] ){ - m_mon_Acceptance.push_back( ACCEPT_Mu1_pT_Cut ); - flag_stages[ ACCEPT_Mu1_pT_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_pT_Cut ); - } - - // Check pT and chi2 - if ( trackPt < m_muonPtthr || trackChi2 > 1e7 ) continue; - - // Check pT+chi2 (monitoring only) - if ( !flag_stages[ ACCEPT_Mu1_Chi2Pt_Cuts ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu1_Chi2Pt_Cuts ); - flag_stages[ ACCEPT_Mu1_Chi2Pt_Cuts ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_Chi2Pt_Cuts ); - - // Match to RoI - // JK 25/7/11 Add option to match to l2 muon - double deta; - double dphi; - if (m_matchL1) { - deta = (*track1)->eta() - roiDescriptor->eta(); - dphi = (*track1)->phi() - roiDescriptor->phi(); - } else { - deta = (*track1)->eta() - muon->idTrack()->eta(); - dphi = (*track1)->phi() - muon->idTrack()->phi(); - } - double absdphi = fabs(dphi); - if ( 2.* M_PI - absdphi < absdphi ) { - if ( dphi > 0 ) { - dphi = dphi - 2.* M_PI; - } else { - dphi = 2* M_PI - absdphi; - } - } - - // Monitoring of the RoI matching - m_mon_TrkROIdEta.push_back( fabs(deta) ); - m_mon_TrkROIdPhi.push_back( fabs(dphi) ); - m_mon_TrkROIdR .push_back( sqrt(dphi*dphi+deta*deta) ); - - // Check the deta and dphi cuts (monitoring only) - if ( fabs(deta) < m_dEta_cut ) { - if ( !flag_stages[ ACCEPT_Mu1_dEta_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu1_dEta_Cut ); - flag_stages[ ACCEPT_Mu1_dEta_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_dEta_Cut ); - } - if ( fabs(dphi) < m_dPhi_cut ) { - if ( !flag_stages[ ACCEPT_Mu1_dPhi_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu1_dPhi_Cut ); - flag_stages[ ACCEPT_Mu1_dPhi_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_dPhi_Cut ); - } - - // Check the deta and dphi cuts for RoI matching of the track - if ( fabs(deta) < m_dEta_cut && fabs(dphi) < m_dPhi_cut ) { - - // Check deta+dphi cuts (monitoring only) - if ( !flag_stages[ ACCEPT_Mu1_dR_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu1_dR_Cut ); - flag_stages[ ACCEPT_Mu1_dR_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu1_dR_Cut ); - - PassedRoIMatch = true; - - // Match to RoI found - ATH_MSG_DEBUG("Track matched RoI, now search other tracks for good mass " ); - - xAOD::TrackParticleContainer::const_iterator track2 = (*pTrackColl)->begin(); - xAOD::TrackParticleContainer::const_iterator lastTrack2 = (*pTrackColl)->end(); - - ///////////// Find the second muon /////////////// - - for ( int jtrk = 0; track2 != lastTrack2; ++jtrk, track2++ ) { - - // Skip identical track - if ( itrk == jtrk ) continue; - - ATH_MSG_DEBUG("track2 : " << jtrk << " pT = " << (*track2)->pt() << " phi = " << (*track2)->phi() - << " eta = " << (*track2)->eta() << " chi2 = " << (*track2)->chiSquared() ); - - // Get the pT and chi2 of the tracks - float track2Pt = fabs( (*track2)->pt() ); - float track2Chi2 = (*track2)->chiSquared(); - - // Check pT and chi2 (monitoring only) - if ( track2Chi2 <= 1e7 ) { - if ( !flag_stages[ ACCEPT_Mu2_Chi2_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu2_Chi2_Cut ); - flag_stages[ ACCEPT_Mu2_Chi2_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu2_Chi2_Cut ); - } - if ( track2Pt >= m_trackPtthr ) { - if ( !flag_stages[ ACCEPT_Mu2_pT_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu2_pT_Cut ); - flag_stages[ ACCEPT_Mu2_pT_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu2_pT_Cut ); - } - - // Prepare the di-muon pair - // std::vector<const TrigInDetTrackFitPar*> inputtrks; - std::vector<const xAOD::TrackParticle*> inputtrks; - std::vector<double> massHypo ; - inputtrks.push_back( (*track1) ); - inputtrks.push_back( (*track2) ); - massHypo.push_back( m_daughterMass ); - massHypo.push_back( m_daughterMass ); - - // Calculate the invariant mass (hardcoded pT cut 2 GeV for monitoring purposes) - double Mass = 0; - if ( track2Chi2 <= 1e7 ) { - if ( track2Pt > 2000. ) { - // Mass = InvMass(inputtrks, massHypo); - Mass = m_bphysHelperTool->invariantMass(inputtrks,massHypo); - m_mon_InvMassNoTrkPtCut.push_back( Mass / CLHEP::GeV ); - m_mon_InvMassNoTrkPtCut_wideRange.push_back( Mass / CLHEP::GeV ); - } else if ( track2Pt >= m_trackPtthr ) { - //Mass = InvMass(inputtrks, massHypo); - Mass = m_bphysHelperTool->invariantMass(inputtrks,massHypo); - } - } - - // Check pT and chi2 - if ( track2Pt < m_trackPtthr || track2Chi2 > 1e7 ) continue; - - // Check pT+chi2 (monitoring only) - if ( !flag_stages[ ACCEPT_Mu2_Chi2Pt_Cuts ] ) { - m_mon_Acceptance.push_back( ACCEPT_Mu2_Chi2Pt_Cuts ); - flag_stages[ ACCEPT_Mu2_Chi2Pt_Cuts ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Mu2_Chi2Pt_Cuts ); - - ///////// Check the di-muon properties ///////// - - // Check opposite charge - if ( m_oppositeCharge ) { - if (( (*track1)->charge() > 0. && (*track2)->charge() > 0. ) || - ( (*track1)->charge() < 0. && (*track2)->charge() < 0. )) continue; - ATH_MSG_VERBOSE("Tracks " << itrk << " and " << jtrk << " are opposite sign, make mass cuts " ); - } else { - ATH_MSG_VERBOSE("opposite sign cuts not applied, make mass cuts " ); - } - - // Check opposite charge (monitoring only) - if ( !flag_stages[ ACCEPT_Opp_Charge ] ) { - m_mon_Acceptance.push_back( ACCEPT_Opp_Charge ); - flag_stages[ ACCEPT_Opp_Charge ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Opp_Charge ); - - // Check the invariant mass cut - ATH_MSG_DEBUG(" mass = " << Mass ); - m_mon_InvMass.push_back( Mass / CLHEP::GeV ); - m_mon_InvMass_wideRange.push_back( Mass / CLHEP::GeV ); - if (Mass < m_mass_low_cut || Mass > m_mass_high_cut) continue; - - // Check the invariant mass cut (monitoring only) - if ( !flag_stages[ ACCEPT_InvMass_Cut ] ) { - m_mon_Acceptance.push_back( ACCEPT_InvMass_Cut ); - flag_stages[ ACCEPT_InvMass_Cut ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_InvMass_Cut ); - - PassedMass = true; - - // Monitoring of the di-muon track pairs - m_mon_Trk1Pt .push_back( fabs((*track1)->pt()) / CLHEP::GeV ); - m_mon_Trk2Pt .push_back( fabs((*track2)->pt()) / CLHEP::GeV ); - m_mon_Trk1Eta.push_back( (*track1)->eta() ); - m_mon_Trk2Eta.push_back( (*track2)->eta() ); - m_mon_Trk1Phi.push_back( (*track1)->phi() ); - m_mon_Trk2Phi.push_back( (*track2)->phi() ); - m_mon_SumPtTrk12.push_back ( (fabs((*track1)->pt()) + fabs((*track2)->pt())) / CLHEP::GeV ); - - // Monitoring of the opening between the two tracks - double dTrkEta = (*track1)->eta() - (*track2)->eta(); - double dTrkPhi = (*track1)->phi() - (*track2)->phi(); - double absdTrkPhi = fabs( dTrkPhi ); - if ( 2.* M_PI - absdTrkPhi < absdTrkPhi ) { - if ( dTrkPhi > 0 ) { - dTrkPhi = dTrkPhi - 2.* M_PI; - } else { - dTrkPhi = 2* M_PI - absdTrkPhi; - } - } - m_mon_Trk1Trk2dEta.push_back( fabs(dTrkEta) ); - m_mon_Trk1Trk2dPhi.push_back( fabs(dTrkPhi) ); - m_mon_Trk1Trk2dR .push_back( sqrt(dTrkPhi*dTrkPhi+dTrkEta*dTrkEta) ); - - // Found pair with good mass , now make L2Bphys object - // TrigL2Bphys* trigL2Bphys = new TrigL2Bphys((*pTrackColl)->RoI_ID(), - // roiDescriptor->eta(), - // roiDescriptor->phi(), - // TrigL2Bphys::JPSIMUMU, - // Mass); - xAOD::TrigBphys* trigL2Bphys = new xAOD::TrigBphys(); - m_trigBphysColl->push_back(trigL2Bphys); - trigL2Bphys->initialise(0,//(*pTrackColl)->RoI_ID(), #FIXME JW - roiDescriptor->eta(), - roiDescriptor->phi(), - xAOD::TrigBphys::JPSIMUMU, - Mass, - xAOD::TrigBphys::L2); - - ATH_MSG_DEBUG("Create Bphys particle with roIId " << trigL2Bphys->roiId() << " mass " << Mass - << " phi, eta " << trigL2Bphys->phi() << " " << trigL2Bphys->eta() << " vertex type " << trigL2Bphys->particleType() ); - - // Store links to the two tracks forming the di-muon - ElementLink<xAOD::TrackParticleContainer> track1EL(*(*pTrackColl),itrk); - ElementLink<xAOD::TrackParticleContainer> track2EL(*(*pTrackColl),jtrk); - trigL2Bphys->addTrackParticleLink(track1EL); - trigL2Bphys->addTrackParticleLink(track2EL); - - // Set result here if mass cut is passed. Currently no vertex requirement. Need to determine what is needed. - result = true; - - ///////////// Now do vertexing ///////////////// - - if ( m_doVertexFit ) { - - // Vertexing time processing - if ( timerSvc() ) m_VtxFitTimer->resume(); - - // Create the vertexer - TrigL2Vertex* pL2V = new TrigL2Vertex(); - TrigVertex* p_vertex = NULL; - - // Add tracks to the vertexer - bool addTracks = true; - StatusCode sc = m_vertexingTool->addTrack( (*track1)->track(), pL2V, Trk::muon ); - if ( sc.isFailure() ) { - ATH_MSG_DEBUG("Failed to add track 1 to vertexingTool pT, chi2 " << (*track1)->pt() << " " << (*track1)->chiSquared() ); - addTracks = false; - // Monitoring only - m_mon_Errors.push_back( ERROR_AddTrack_Fails ); - if ( !addTrackFails[itrk] ) { - addTrackFails[itrk] = true; - m_mon_Errors.push_back( ERROR_Unique_AddTrack_Fails ); - } - } - sc = m_vertexingTool->addTrack( (*track2)->track(), pL2V, Trk::muon ); - if ( sc.isFailure() ) { - ATH_MSG_DEBUG("Failed to add track 2 to vertexingTool pT, chi2 " << (*track2)->pt() << " " << (*track2)->chiSquared() ); - addTracks = false; - // Monitoring only - m_mon_Errors.push_back( ERROR_AddTrack_Fails ); - if ( !addTrackFails[jtrk] ) { - addTrackFails[jtrk] = true; - m_mon_Errors.push_back( ERROR_Unique_AddTrack_Fails ); - } - } - - //bool vtx_created = false; - - if ( addTracks ) { - - // Passed Add-tracks test (monitoring only) - if ( !flag_stages[ ACCEPT_AddTrack_Test ] ) { - m_mon_Acceptance.push_back( ACCEPT_AddTrack_Test ); - flag_stages[ ACCEPT_AddTrack_Test ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_AddTrack_Test ); - - // DO THE VERTEX-FIT - sc = m_L2vertFitter->fit(pL2V); - - // Check the result - if ( sc.isFailure() ) { - ATH_MSG_DEBUG("TrigL2VertexFitter failed" ); - } else { - // Passed vertexing (monitoring only) - if ( !flag_stages[ ACCEPT_Vertexing ] ) { - m_mon_Acceptance.push_back( ACCEPT_Vertexing ); - flag_stages[ ACCEPT_Vertexing ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Vertexing ); - // Calculate invariant mass - sc = m_vertexingTool->calculateInvariantMass(pL2V); - if ( sc.isSuccess() ) { - // Calc. Inv. Mass succeeded (monitoring only) - if ( !flag_stages[ ACCEPT_CalcInvMass ] ) { - m_mon_Acceptance.push_back( ACCEPT_CalcInvMass ); - flag_stages[ ACCEPT_CalcInvMass ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_CalcInvMass ); - // Create mother particle - sc = m_vertexingTool->createMotherParticle(pL2V); - if ( sc.isSuccess() ) { - // Creating mother particle succeeded (monitoring only) - if ( !flag_stages[ ACCEPT_CalcMother ] ) { - m_mon_Acceptance.push_back( ACCEPT_CalcMother ); - flag_stages[ ACCEPT_CalcMother ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_CalcMother ); - //vtx_created = true; - ATH_MSG_VERBOSE("Mother particle created: pT " << pL2V->getMotherTrack()->pT() ); - } else { - m_mon_Errors.push_back( ERROR_CalcMother_Fails ); - } - p_vertex = m_vertexingTool->createTrigVertex(pL2V); - } else { - m_mon_Errors.push_back( ERROR_CalcInvMass_Fails ); - } - } - } // end of if (addTracks) - delete pL2V; - - // Test whether the vertex-fit was successful - if ( p_vertex == NULL ) { - ATH_MSG_DEBUG(" vertex fit failed for tracks " << itrk << " and " << jtrk ); - } else { - - // Monitoring of p_vertex != NULL - if ( !flag_stages[ ACCEPT_Vertex_not_NULL ] ) { - m_mon_Acceptance.push_back( ACCEPT_Vertex_not_NULL ); - flag_stages[ ACCEPT_Vertex_not_NULL ] = true; - } - m_mon_Acceptance.push_back( ACCEPT_Each_Vertex_not_NULL ); - - // Some debugging information - ATH_MSG_VERBOSE( "vertex fit successful: x= y= z=" << p_vertex->x() << " " << p_vertex->y() << " " << p_vertex->z() ); - ATH_MSG_DEBUG("vertex fit mass = " << p_vertex->mass() << " chi2 " << p_vertex->chi2() << " ndof " << p_vertex->ndof() ); - if (p_vertex->massVariance() != 0) { - ATH_MSG_VERBOSE("Mass pull = " << (p_vertex->mass()-JPSIMASS)/p_vertex->massVariance() ); - } else { - ATH_MSG_VERBOSE("Phi mass variance is zero, can't calculate the pull" ); - m_mon_Errors.push_back( ERROR_CalcMassPull_Fails ); - } - - double chi2prob = 1.0 - Genfun::CumulativeChiSquare(p_vertex->ndof())(p_vertex->chi2()); - - ATH_MSG_VERBOSE( "Chi2 probability of the fit = " << chi2prob ); - ATH_MSG_VERBOSE("SigmaX = SigmaY = SigmaZ = " << sqrt(p_vertex->cov()[0]) << " " << sqrt(p_vertex->cov()[2]) << " " << sqrt(p_vertex->cov()[5]) ); - - // Add vertex results to L2Bphys - trigL2Bphys->setFitmass( p_vertex->mass() ); - trigL2Bphys->setFitchi2( p_vertex->chi2() ); - trigL2Bphys->setFitndof( p_vertex->ndof() ); - trigL2Bphys->setFitx( p_vertex->x() ); - trigL2Bphys->setFity( p_vertex->y() ); - trigL2Bphys->setFitz( p_vertex->z() ); - - m_VertexColl->push_back(p_vertex); - ATH_MSG_VERBOSE("added vertex to vertex collection" ); - - // Monitoring of the fit results - m_mon_FitMass_wideRange.push_back( p_vertex->mass() / CLHEP::GeV ); - m_mon_FitMass .push_back( p_vertex->mass() / CLHEP::GeV ); - m_mon_InvMass_okFit .push_back( Mass / CLHEP::GeV ); - m_mon_Chi2toNDoF .push_back( p_vertex->chi2() / p_vertex->ndof() ); - m_mon_Chi2toNDoFProb .push_back( chi2prob ); - if ( p_vertex->getMotherTrack() != NULL ) { - m_mon_FitTotalPt.push_back( p_vertex->getMotherTrack()->pT() / CLHEP::GeV ); - m_mon_SumPtTrk12_okFit.push_back( (fabs((*track1)->pt()) + fabs((*track2)->pt())) / CLHEP::GeV ); - } - m_mon_FitVtxR.push_back( sqrt(p_vertex->x()*p_vertex->x() + p_vertex->y()*p_vertex->y()) / CLHEP::mm ); - m_mon_FitVtxZ.push_back( p_vertex->z() / CLHEP::mm ); - - } // end if vertex fit successful - - // Pause the vertexing time monitoring - if ( timerSvc() ) m_VtxFitTimer->pause(); - - } // end if do vertex fit - - // Store L2Bphys to the output collection - ATH_MSG_DEBUG("Store L2Bphys and move onto next track" ); - // moved to next to creation point m_trigBphysColl->push_back(trigL2Bphys); - - } // end loop over track 2, looking for track pair with good mass - } // if pass cut on deta, dphi match to RoI - } // end loop over track1 looking for RoI match - } // end loop over track collections - - // Check the size of the bphys-objects collection - if ( m_trigBphysColl->size() > 0 ) m_mon_Acceptance.push_back( ACCEPT_BphysColl_not_Empty ); - m_mon_nBphys = m_trigBphysColl->size(); - - // Update various counters - if ( PassedRoIMatch ) m_countPassedRoIMatch++; - if ( PassedMass ) m_countPassedMass++; - if ( result ) { - m_countPassedRoIs++; - if (IdEvent!= (int) m_lastEventPassed) { - m_countPassedEvents++; - m_lastEventPassed=IdEvent; - } - } - - // Some debugging information - ATH_MSG_DEBUG(" vertex collection size : " << m_VertexColl->size() << " m_VertexColl " << m_VertexColl ); - ATH_MSG_DEBUG("Bphys collection size : " << m_trigBphysColl->size() << " m_trigBphysColl " << m_trigBphysColl ); - - // Reach this point successfully - ATH_MSG_DEBUG("Run: " << IdRun << " Event: " << IdEvent << " result is " << result ); - - // if (!m_acceptAll) pass = result; - - // Stop the processing timers - if ( timerSvc() ) { - m_TotTimer ->stop(); - m_VtxFitTimer->resume(); - m_VtxFitTimer->stop(); - // Fill the monitoring variables - m_mon_TotalRunTime = m_TotTimer ->elapsed(); - m_mon_VertexingTime = m_VtxFitTimer->elapsed(); - } - - ATH_MSG_DEBUG("m_VertexColl " << m_VertexColl << " m_trigBphysColl " << m_trigBphysColl ); - - delete m_VertexColl; - m_VertexColl = 0; - - // Attach the resulting bphys-objects to the output trigger element - if ( /*( m_trigBphysColl != 0 ) &&*/ ( m_trigBphysColl->size() > 0 ) ) { - ATH_MSG_DEBUG("REGTEST: Store Bphys Collection size: " << m_trigBphysColl->size() ); - HLT::ErrorCode sc = attachFeature(outputTE, m_trigBphysColl, "L2TrackMass" ); - if ( sc != HLT::OK ) { - ATH_MSG_WARNING("Failed to store trigBphys Collection" ); - m_mon_Errors.push_back( ERROR_BphysColl_Fails ); - return sc; - } - } else { - ATH_MSG_DEBUG("REGTEST: no bphys collection to store " ); - delete m_trigBphysColl; - } - m_trigBphysColl = nullptr; - - return HLT::OK; -} - diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.h deleted file mode 100644 index 5af2c10de9660865c5c9746fd3a00a976a5c1ef3..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassFex.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -// ******************************************************************* -// -// NAME: TrigL2TrkMassFex.h -// PACKAGE: Trigger/TrigHypothesis/TrigBphysHypo -// AUTHOR: Julie Kirk -// -// ******************************************************************* - -#ifndef TRIG_TrigL2TrkMassFex_H -#define TRIG_TrigL2TrkMassFex_H - -#include <string> - -#include "TrigInterfaces/FexAlgo.h" - -#include "TrigInDetEvent/TrigVertexCollection.h" -#include "TrigInDetToolInterfaces/ITrigVertexFitter.h" -#include "TrigInDetToolInterfaces/ITrigL2VertexFitter.h" - -#include "xAODTrigBphys/TrigBphysContainer.h" -#include "xAODTrigBphys/TrigBphysAuxContainer.h" -#include "xAODTrigBphys/TrigBphys.h" - -#include "TrigTimeAlgs/TrigTimerSvc.h" - -class TriggerElement; - -class ITrigVertexFitter; -class ITrigL2VertexFitter; -class ITrigVertexingTool; - -class TrigBphysHelperUtilsTool; - - -class TrigL2TrkMassFex: public HLT::FexAlgo { - - public: - - TrigL2TrkMassFex(const std::string & name, ISvcLocator* pSvcLocator); - ~TrigL2TrkMassFex(); - - HLT::ErrorCode hltInitialize(); - HLT::ErrorCode hltFinalize(); - HLT::ErrorCode hltExecute(const HLT::TriggerElement* inputTE, HLT::TriggerElement* outputTE); - // HLT::ErrorCode acceptInput(const HLT::TriggerElement* inputTE, bool& pass ); - - private: - ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; - - // container inputs names - std::string m_input_trackCollectionKey; //! list of tracks to search for second leg - - // Configurable properties - cuts - float m_matchL1; - float m_trackPtthr; - float m_muonPtthr; - float m_dEta_cut; - float m_dPhi_cut; - float m_daughterMass; - float m_mass_low_cut; - float m_mass_high_cut; - - // Configurable properties - boolean switches - bool m_doVertexFit; - bool m_acceptAll; - bool m_oppositeCharge; - - // Configurable properties - vertexing tools - ToolHandle<ITrigVertexFitter> m_vertFitter; - ToolHandle<ITrigL2VertexFitter> m_L2vertFitter; - ToolHandle<ITrigVertexingTool> m_vertexingTool; - - // Timers - TrigTimer* m_TotTimer; - TrigTimer* m_VtxFitTimer; - - // Counters - unsigned int m_lastEvent; - unsigned int m_lastEventPassed; - unsigned int m_countTotalEvents; - unsigned int m_countTotalRoI; - unsigned int m_countPassedEvents; - unsigned int m_countPassedRoIs; - unsigned int m_countPassedRoIMatch; - unsigned int m_countPassedMass; - - // Output collections - xAOD::TrigBphysContainer* m_trigBphysColl; - TrigVertexCollection* m_VertexColl; - - // Monitored variables - std::vector<int> m_mon_Errors; - std::vector<int> m_mon_Acceptance; - std::vector<float> m_mon_ROIEta; - std::vector<float> m_mon_ROIPhi; - int m_mon_nTracks; - std::vector<float> m_mon_TrkPt; - std::vector<float> m_mon_TrkPt_wideRange; - std::vector<float> m_mon_TrkEta; - std::vector<float> m_mon_TrkPhi; - std::vector<float> m_mon_TrkROIdEta; - std::vector<float> m_mon_TrkROIdPhi; - std::vector<float> m_mon_TrkROIdR; - std::vector<float> m_mon_InvMassNoTrkPtCut; - std::vector<float> m_mon_InvMassNoTrkPtCut_wideRange; - std::vector<float> m_mon_InvMass; - std::vector<float> m_mon_InvMass_wideRange; - std::vector<float> m_mon_Trk1Pt; - std::vector<float> m_mon_Trk2Pt; - std::vector<float> m_mon_Trk1Eta; - std::vector<float> m_mon_Trk2Eta; - std::vector<float> m_mon_Trk1Phi; - std::vector<float> m_mon_Trk2Phi; - std::vector<float> m_mon_Trk1Trk2dEta; - std::vector<float> m_mon_Trk1Trk2dPhi; - std::vector<float> m_mon_Trk1Trk2dR; - std::vector<float> m_mon_SumPtTrk12; - std::vector<float> m_mon_FitMass; - std::vector<float> m_mon_FitMass_wideRange; - std::vector<float> m_mon_InvMass_okFit; - std::vector<float> m_mon_Chi2toNDoF; - std::vector<float> m_mon_Chi2toNDoFProb; - std::vector<float> m_mon_FitTotalPt; - std::vector<float> m_mon_SumPtTrk12_okFit; - std::vector<float> m_mon_FitVtxR; - std::vector<float> m_mon_FitVtxZ; - int m_mon_nBphys; - float m_mon_TotalRunTime; - float m_mon_VertexingTime; - -}; - -#endif diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx deleted file mode 100644 index 36bf04da1f22e3e978503898b7933474af031d4e..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.cxx +++ /dev/null @@ -1,176 +0,0 @@ -// -*- C++ -*- - -/* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -*/ - -/************************************************************************** - ** - ** File: Trigger/TrigHypothesis/TrigBPhysHypo/TrigL2TrkMassHypo.cxx - ** - ** Description: L2 hypothesis algorithms for tag and probe (tracks with mass cut) - ** Create TrigL2Bphys - ** - ** Author: J.Kirk - ** - ** Created: 14.10.2007 - ** Modified: - ** - **************************************************************************/ - -#include "TrigL2TrkMassHypo.h" -#include <math.h> -#include "xAODTrigger/TrigPassBits.h" -#include "TrigNavigation/Navigation.h" - -// additions of xAOD objects -#include "TrigBphysHelperUtilsTool.h" -#include "xAODTrigBphys/TrigBphysContainer.h" -#include "CLHEP/Units/SystemOfUnits.h" - -class ISvcLocator; - -TrigL2TrkMassHypo::TrigL2TrkMassHypo(const std::string & name, ISvcLocator* pSvcLocator): - HLT::HypoAlgo(name, pSvcLocator) -,m_bphysHelperTool("TrigBphysHelperUtilsTool") -,m_lastEvent(-1) -,m_lastEventPassed(-1) -,m_countTotalEvents(0) -,m_countTotalRoI(0) -,m_countPassedEvents(0) -,m_countPassedRoIs(0) -{ - - // Read cuts - declareProperty("AcceptAll", m_acceptAll=true); - - declareMonitoredVariable( "CutCounter", m_mon_cutCounter); - declareMonitoredVariable( "NBphys", m_mon_NBphys); - declareMonitoredStdContainer("Mass", m_mon_Mass, AutoClear); - //declareMonitoredStdContainer("FitMass", m_mon_FitMass, AutoClear); - //declareMonitoredStdContainer("Chi2", m_mon_Chi2, AutoClear); - //declareMonitoredStdContainer("Chi2Prob", m_mon_Chi2Prob, AutoClear); - -} - -TrigL2TrkMassHypo::~TrigL2TrkMassHypo() -{ } - -HLT::ErrorCode TrigL2TrkMassHypo::hltInitialize() -{ - ATH_MSG_DEBUG("AcceptAll = " << (m_acceptAll==true ? "True" : "False") ); - - m_lastEvent = -1; - m_lastEventPassed = -1; - m_countTotalEvents =0; - m_countTotalRoI =0; - m_countPassedEvents =0; - m_countPassedRoIs =0; - - if (m_bphysHelperTool.retrieve().isFailure()) { - ATH_MSG_ERROR("Can't find TrigBphysHelperUtilsTool" ); - return HLT::BAD_JOB_SETUP; - } else { - if (msgLvl() <= MSG::DEBUG) ATH_MSG_DEBUG("TrigBphysHelperUtilsTool found" ); - } - - return HLT::OK; -} - -HLT::ErrorCode TrigL2TrkMassHypo::hltFinalize() -{ - ATH_MSG_INFO("in finalize()" ); - ATH_MSG_INFO("|----------------------- SUMMARY FROM TrigL2TrkMassHypo -------------|" ); - ATH_MSG_INFO("Run on events/2xRoIs " << m_countTotalEvents << "/" << m_countTotalRoI ); - ATH_MSG_INFO("Passed events/2xRoIs " << m_countPassedEvents << "/" << m_countPassedRoIs ); - - return HLT::OK; -} - -//------------------------------------------------------------------------------------- -HLT::ErrorCode TrigL2TrkMassHypo::hltExecute(const HLT::TriggerElement* outputTE, bool& pass) -{ - - bool result = false; - m_mon_cutCounter = -1; - - // Retrieve event info - // int IdRun = 0; - int IdEvent = 0; - // event info - uint32_t runNumber(0), evtNumber(0), lbBlock(0); - if (m_bphysHelperTool->getRunEvtLb( runNumber, evtNumber, lbBlock).isFailure()) { - ATH_MSG_ERROR("Error retriving EventInfo" ); - } - // IdRun = runNumber; - IdEvent = evtNumber; - - if (IdEvent != m_lastEvent) { - m_countTotalEvents++; - m_lastEvent=IdEvent; - } - m_countTotalRoI++; - - - // Accept-All mode: temporary patch; should be done with force-accept - if (m_acceptAll) { - pass = true; - //return HLT::OK; - } - ATH_MSG_DEBUG("AcceptAll is set to : " << (m_acceptAll ? "True, taking all events " : "False, applying selection" )); - -// create vector for TrigL2Bphys particles - const xAOD::TrigBphysContainer* trigBphysColl = 0; - - HLT::ErrorCode status = getFeature(outputTE, trigBphysColl, "L2TrackMass"); - - if ( status != HLT::OK ) { - ATH_MSG_WARNING("Failed to get TrigBphysics collection" ); - return HLT::OK; - } - - ATH_MSG_DEBUG(" Retrieved Bphys collection trigBphysColl = " << trigBphysColl ); - // if no Bphys particles were found, just leave TrigBphysColl and leave - if ( trigBphysColl == 0 ) { - ATH_MSG_DEBUG("No Bphys particles to analyse, leaving!" ); - - m_mon_NBphys=0; - return HLT::OK; - } - m_mon_cutCounter = 0; // this is to separate bad input TE and true behaviour of the first cut - - m_mon_NBphys=trigBphysColl->size(); - - ATH_MSG_DEBUG("Got TrigBphys collection with " << trigBphysColl->size() << " TrigBphys particles " ); - - //TrigPassBits *bits = HLT::makeTrigPassBits(trigBphysColl); - std::unique_ptr<xAOD::TrigPassBits> xBits = xAOD::makeTrigPassBits<xAOD::TrigBphysContainer>(trigBphysColl); - - // now loop over Bphys particles to see if one passes hypo cuts- not ready, just monitoring - xAOD::TrigBphysContainer::const_iterator bphysIter = trigBphysColl->begin(); - for ( ; bphysIter != trigBphysColl->end(); ++bphysIter) { - m_mon_Mass.push_back(((*bphysIter)->mass()) / CLHEP::GeV); // conversion to GeV - //HLT::markPassing(bits, *bphysIter, trigBphysColl); - xBits->markPassing((*bphysIter),trigBphysColl,true); - } - - result=true; - - if (result) { - m_countPassedRoIs++; - if (IdEvent!= m_lastEventPassed) { - m_countPassedEvents++; - m_lastEventPassed=IdEvent; - } - pass=true; - } - - // store result - //if ( attachBits(outputTE, bits) != HLT::OK ) { - // ATH_MSG_ERROR("Problem attaching TrigPassBits! " ); - //} - if(attachFeature(outputTE, xBits.release(),"passbits") != HLT::OK) - ATH_MSG_ERROR("Could not store TrigPassBits! "); - - return HLT::OK; -} diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.h deleted file mode 100644 index bde77bb7ed012cdb836830fd4a3e04450e6e8fbc..0000000000000000000000000000000000000000 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigL2TrkMassHypo.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -*/ - - -#ifndef TRIGL2TRKMASSHYPO_H -#define TRIGL2TRKMASSHYPO_H - -#include "TrigInterfaces/HypoAlgo.h" -#include "Constants.h" - -class TriggerElement; -class TrigBphysHelperUtilsTool; - -class TrigL2TrkMassHypo: public HLT::HypoAlgo -{ - -public: - TrigL2TrkMassHypo(const std::string& name, ISvcLocator* pSvcLocator); - ~TrigL2TrkMassHypo(); - - HLT::ErrorCode hltInitialize(); - HLT::ErrorCode hltFinalize(); - HLT::ErrorCode hltExecute(const HLT::TriggerElement* outputTE, bool& pass); - - bool execHLTAlgorithm(TriggerElement* ); - -private: - ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; - - BooleanProperty m_acceptAll; - int m_lastEvent; - int m_lastEventPassed; - unsigned int m_countTotalEvents; - unsigned int m_countTotalRoI; - unsigned int m_countPassedEvents; - unsigned int m_countPassedRoIs; - void handle(const Incident &); - - /* monitored variables */ - int m_mon_cutCounter; - int m_mon_NBphys; - std::vector<float> m_mon_Mass; - //std::vector<float> m_mon_FitMass; - //std::vector<float> m_mon_Chi2; - //std::vector<float> m_mon_Chi2Prob; - -}; - -#endif diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx index 271aedb7a98cc0838fd4793631f4a3d229ef9547..87237ada82ea6805d35f63e241cca1a3d6ece6d1 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkComboHypo.cxx @@ -352,7 +352,7 @@ StatusCode TrigMultiTrkComboHypo::executeEF(const EventContext& context) const { for (const xAOD::Muon* muon : *muonsHandle) { if (!muon->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle)) continue; - const ElementLink<xAOD::TrackParticleContainer> trackEL = muon->inDetTrackParticleLink(); + const ElementLink<xAOD::TrackParticleContainer>& trackEL = muon->inDetTrackParticleLink(); CHECK( trackEL.isValid() ); tracksFromView.emplace_back(trackEL); } diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx index 9c58b38e8c85897dbba635a7825a3f6ae9ff3f70..8e62f011bfa067ff1e89c62c4f144f743b172ea1 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.cxx @@ -489,7 +489,7 @@ HLT::ErrorCode TrigMultiTrkFex::hltExecute(std::vector<std::vector<HLT::TriggerE if( m_nTrkQ >= 0 ){ int charge = 0; //for(const auto& trk : thisIterationTracks) - for(ElementLink<xAOD::TrackParticleContainer> trk : thisIterationTracks) + for(const ElementLink<xAOD::TrackParticleContainer>& trk : thisIterationTracks) charge += ( (*trk)->charge() > 0 ) ? 1 : -1 ; if( abs(charge) != m_nTrkQ ){ ATH_MSG_DEBUG(" |Charge| = "<< abs(charge) << " required "<<m_nTrkQ << " thus fail" ); diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.h b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.h index 41aa829e87e425a08c55fa1d49c0c270c37c7199..c8ab104cdc03db073ee327ff347aea4135071a41 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.h +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/TrigMultiTrkFex.h @@ -19,12 +19,9 @@ // standard stuff #include <string> -#include <map> -#include <cmath> #include <algorithm> #include "TrigInterfaces/AllTEAlgo.h" -#include "xAODTrigBphys/TrigBphysContainer.h" class TrigBphysHelperUtilsTool; class TrigTimer; @@ -67,9 +64,6 @@ class TrigMultiTrkFex: public HLT::AllTEAlgo { float mindR) ; - //void processTriMuon(HLT::TEConstVec& inputTE, xAOD::TrigBphysContainer & outputContainer); - // void buildDiMu (const std::vector<const xAOD::Muon*> &muons, xAOD::TrigBphysContainer & outputContainer); - //void buildTriMu(const std::vector<const xAOD::Muon*> &muons, xAOD::TrigBphysContainer & outputContainer); ToolHandle <TrigBphysHelperUtilsTool> m_bphysHelperTool; diff --git a/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx b/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx index 7f303c13b493eee4cee2c1d8e596f2e969ac0dbc..547a29ede789c37fe153162490da1221eac3edaa 100644 --- a/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx +++ b/Trigger/TrigHypothesis/TrigBphysHypo/src/components/TrigBphysHypo_entries.cxx @@ -16,8 +16,6 @@ //#include "TrigBphysHypo/TrigL2DsPhiPiFex.h" //#include "../TrigL2DiMuXHypo.h" //#include "../TrigL2DiMuXFex.h" -#include "../TrigL2TrkMassFex.h" -#include "../TrigL2TrkMassHypo.h" #include "../TrigEFTrkMassHypo.h" #include "../TrigMultiTrkFex.h" #include "../TrigBphysMuonCounter.h" @@ -53,8 +51,7 @@ DECLARE_COMPONENT( TrigEFMultiMuHypo ) //DECLARE_COMPONENT( TrigL2DiMuHypo ) //DECLARE_COMPONENT( TrigL2DsPhiPiHypo ) //DECLARE_COMPONENT( TrigL2DsPhiPiFex ) -DECLARE_COMPONENT( TrigL2TrkMassFex ) -DECLARE_COMPONENT( TrigL2TrkMassHypo ) + DECLARE_COMPONENT( TrigEFTrkMassHypo ) //DECLARE_COMPONENT( TrigL2LooseMuonHypo ) diff --git a/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigEFMissingETHypo.h b/Trigger/TrigHypothesis/TrigMissingETHypo/src/TrigEFMissingETHypo.h old mode 100644 new mode 100755 diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx index 49532041f20309e8a14a3dbfc6bbd6926eed5055..cab1102c02198512b57d98171d2d6664c245275b 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx @@ -167,13 +167,21 @@ asg::AcceptData TrigEgammaMonitorBaseAlgorithm::setAccept( const TrigCompositeUt if(info.trigType == "electron"){ ATH_MSG_DEBUG("Check for active features: TrigElectron, ElectronContainer, TrackParticleContainer"); passedL2 = match()->ancestorPassed<xAOD::TrigElectronContainer>(dec, trigger, "HLT_FastElectrons"); - passedEF = match()->ancestorPassed<xAOD::ElectronContainer>(dec, trigger, "HLT_egamma_Electrons"); + if (info.trigEtcut){ + passedEF=true; + }else{ + passedEF = match()->ancestorPassed<xAOD::ElectronContainer>(dec, trigger, "HLT_egamma_Electrons"); + } passedEFTrk = true; //match()->ancestorPassed<xAOD::TrackParticleContainer>(dec); } else if(info.trigType == "photon"){ ATH_MSG_DEBUG("Check for active features: TrigPhoton, PhotonContainer"); passedL2 = match()->ancestorPassed<xAOD::TrigPhotonContainer>(dec, trigger, "HLT_FastPhotons"); - passedEF = match()->ancestorPassed<xAOD::PhotonContainer>(dec, trigger, "HLT_egamma_Photons"); + if (info.trigEtcut){ + passedEF=true; + }else{ + passedEF = match()->ancestorPassed<xAOD::PhotonContainer>(dec, trigger, "HLT_egamma_Photons"); + } passedEFTrk=true;// Assume true for photons } } diff --git a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDPhysValMonitoringConfig.py b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDPhysValMonitoringConfig.py index 998080e7548778716a8bd56cd7e43a73eb4dea6e..04390e1abae5ed835057120458a5782a5585ffc4 100644 --- a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDPhysValMonitoringConfig.py +++ b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDPhysValMonitoringConfig.py @@ -119,9 +119,9 @@ def TrigIDPhysValMonitoringTool( legacy_monitoring=False ): if mt_chains: chainnames = [ "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_FTF:roi=HLT_Roi_L2SAMuon", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_FTF:roi=HLT_Roi_L2SAMuonForEF", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuon", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuonForEF" + "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuonForEF", + "HLT_mu.*i.*:key=HLT_IDTrack_MuonIso_FTF:roi=HLT_Roi_MuonIso", + "HLT_mu.*i.*:key=HLT_IDTrack_MuonIso_IDTrig:roi=HLT_Roi_MuonIso" ] else: chainnames = [ @@ -157,9 +157,8 @@ def TrigIDPhysValMonitoringTool( legacy_monitoring=False ): if mt_chains: chainnames = [ "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_TauCore_FTF:roi=HLT_Roi_TauCore", - "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso", - "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_Tau_IDTrig", - "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_Tau_FTF" + "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso_TauID", + "HLT_tau.*idperf.*tracktwo.*:key=HLT_IDTrack_Tau_IDTrig:roi=HLT_Roi_TauIso_TauID" ] else: chainnames = [ diff --git a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py index d431c4aa426518290ce2603501468edc5bdd8084..2eb38e57392e5a89866c69dfa0c9f6ad948c531c 100644 --- a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py +++ b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py @@ -178,9 +178,9 @@ def TrigIDtrkMonitoringTool( legacy_monitoring=False ): tidamuon.ntupleChainNames += [ "Offline", "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_FTF:roi=HLT_Roi_L2SAMuon", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_FTF:roi=HLT_Roi_L2SAMuonForEF", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuon", - "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuonForEF" + "HLT_mu.*idperf.*:key=HLT_IDTrack_Muon_IDTrig:roi=HLT_Roi_L2SAMuonForEF", + "HLT_mu.*i.*:key=HLT_IDTrack_MuonIso_FTF:roi=HLT_Roi_MuonIso", + "HLT_mu.*i.*:key=HLT_IDTrack_MuonIso_IDTrig:roi=HLT_Roi_MuonIso" ] else: tidamuon.ntupleChainNames += [ @@ -256,10 +256,9 @@ def TrigIDtrkMonitoringTool( legacy_monitoring=False ): tidatau.ntupleChainNames += [ "Offline", "HLT_tau.*idperf.*:key=HLT_IDTrack_TauCore_FTF:roi=HLT_Roi_TauCore", - "HLT_tau.*idperf.*:key=HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso", - "HLT_tau.*idperf.*:key=HLT_IDTrack_Tau_FTF:roi=HLT_TAURoI", - "HLT_tau.*idperf.*:key=HLT_IDTrack_Tau_IDTrig:roi=HLT_TAURoI" - ] + "HLT_tau.*idperf.*:key=HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso_TauID", + "HLT_tau.*idperf.*:key=HLT_IDTrack_Tau_IDTrig:roi=HLT_TauIso_TauID" + ] else: tidatau.ntupleChainNames += [ "Offline", diff --git a/Trigger/TrigSteer/DecisionHandling/src/ITestHypoTool.cxx b/Trigger/TrigSteer/DecisionHandling/src/ITestHypoTool.cxx index 45961109ccef4f12d8eac26b2c4b4201ee9ee7bd..5cce8c623a225fe4c27dca365c36e6d3cd056e39 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/ITestHypoTool.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/ITestHypoTool.cxx @@ -4,7 +4,6 @@ // Framework includes -// TrigUpgradeTest includes #include "./ITestHypoTool.h" namespace HLTTest { diff --git a/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx b/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx index 59728a21beeea065a9d05b4c7ab290e415f0185b..e33ed7f576c3837e2c4bfa52ccf1002cf236c298 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TestHypoAlg.cxx @@ -2,7 +2,6 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -// TrigUpgradeTest includes #include "TestHypoAlg.h" namespace HLTTest { diff --git a/Trigger/TrigSteer/DecisionHandling/src/TestHypoTool.cxx b/Trigger/TrigSteer/DecisionHandling/src/TestHypoTool.cxx index 736aea835f2fb3b6659ea3106f92f07757b28007..e8306a9a7b2597f1716b8192abc4b62344b00cd2 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TestHypoTool.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TestHypoTool.cxx @@ -1,7 +1,6 @@ /* Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -// TrigUpgradeTest includes #include "TestHypoTool.h" #include "TrigCompositeUtils/HLTIdentifier.h" diff --git a/Trigger/TrigSteer/DecisionHandling/src/TestInputMaker.cxx b/Trigger/TrigSteer/DecisionHandling/src/TestInputMaker.cxx index a8725de093eea637076a94660926a6b192121361..d50e2a4ab93962f0e729e2631e2b4559de1ba651 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TestInputMaker.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TestInputMaker.cxx @@ -2,7 +2,6 @@ Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration */ -// TrigUpgradeTest includes #include "TestInputMaker.h" #include <xAODTrigger/TrigCompositeAuxContainer.h> #include <TrigSteeringEvent/TrigRoiDescriptorCollection.h> diff --git a/Trigger/TrigSteer/DecisionHandling/src/TestRecoAlg.cxx b/Trigger/TrigSteer/DecisionHandling/src/TestRecoAlg.cxx index b9cd0a9016896a41ad2f3eb116e628eb4fb9bc2f..d29cceb2c5bb59db50631943aae7ba3e8a32d91a 100644 --- a/Trigger/TrigSteer/DecisionHandling/src/TestRecoAlg.cxx +++ b/Trigger/TrigSteer/DecisionHandling/src/TestRecoAlg.cxx @@ -2,7 +2,6 @@ Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration */ -// TrigUpgradeTest includes #include <iostream> #include <fstream> #include <xAODTrigger/TrigCompositeAuxContainer.h> diff --git a/Trigger/TrigValidation/TrigInDetValidation/CMakeLists.txt b/Trigger/TrigValidation/TrigInDetValidation/CMakeLists.txt index 2475d0234283fc6519a9db9f4ef7d08076c65b22..feeaa28058a5bc44b3d5583a3e55d93a0e98f659 100644 --- a/Trigger/TrigValidation/TrigInDetValidation/CMakeLists.txt +++ b/Trigger/TrigValidation/TrigInDetValidation/CMakeLists.txt @@ -10,7 +10,7 @@ find_package( requests ) # Install files from the package: atlas_install_python_modules( python/*.py ) -atlas_install_joboptions( share/TrigInDetValidation_*.py ) +atlas_install_joboptions( share/TrigInDetValidation_*.py share/Cosmic.py ) atlas_install_runtime( test/TrigInDetValidation_TestConfiguration.xml share/TrigInDetValidation_*.py TIDAbuild ) atlas_install_scripts( scripts/TIDA*.py test/test*.py POST_BUILD_CMD ${ATLAS_FLAKE8} --extend-ignore=ATL902 ) diff --git a/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py b/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py index 8f1b961516c58b4a09399505cf62f599773e71ae..00de0cd421a72bcbbb0c426541a337d554e3433a 100644 --- a/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py +++ b/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py @@ -160,12 +160,12 @@ class TrigInDetCompStep(RefComparisonStep): if (self.test=='ttbar'): self.output_dir = self.output_dir+'-bjet' elif (self.flag == 'L2tau'): - self.chains = 'HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF' + self.chains = 'HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF:HLT_Roi_TauCore' self.output_dir = 'HLTL2-plots' if (self.test=='ttbar'): self.output_dir = self.output_dir+'-tau' elif (self.flag == 'EFtau'): - self.chains = 'HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_IDTrig' + self.chains = 'HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF:HLT_Roi_TauCore HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_IDTrig:HLT_TAURoI' self.output_dir = 'HLTEF-plots' if (self.test=='ttbar'): self.output_dir = self.output_dir+'-tau' diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/Cosmic.py b/Trigger/TrigValidation/TrigInDetValidation/share/Cosmic.py similarity index 99% rename from Trigger/TrigValidation/TrigUpgradeTest/share/Cosmic.py rename to Trigger/TrigValidation/TrigInDetValidation/share/Cosmic.py index c1a6d765a0236b9d79c32bb11f9a783be0109fa5..5e3fcb4ad2f50a22bdbdc78973072b77fbc0deee 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/Cosmic.py +++ b/Trigger/TrigValidation/TrigInDetValidation/share/Cosmic.py @@ -3,6 +3,7 @@ # doWriteRDOTrigger = False doWriteBS = False +doEmptyMenu = True include("TriggerJobOpts/runHLT_standalone.py") from AthenaCommon.AlgSequence import AlgSequence diff --git a/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py b/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py index 6bdeccf6197c0dba79b08e17b7d4a522bf19317f..8a5f171b9615841401da3f46d734420fbffff495 100644 --- a/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py +++ b/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py @@ -166,7 +166,9 @@ if ( True ) : "HLT_tau.*_idperf.*:HLT_IDTrack_TauCore_FTF:roi=HLT_Roi_TauCore", "HLT_tau.*_idperf.*:HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso", "HLT_tau.*_idperf.*:HLT_IDTrack_Tau_IDTrig", - "HLT_tau.*_idperf.*:HLT_IDTrack_Tau_FTF" + "HLT_tau.*_idperf.*:HLT_IDTrack_Tau_FTF", + "HLT_tau.*_idperf.*:HLT_IDTrack_Tau_IDTrig:roi=HLT_TAURoI", + "HLT_tau.*_idperf.*:HLT_IDTrack_Tau_FTF:roi=HLT_TAURoI" ] diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80.py index 3e245532abfa3e47ad528452aba55054b9c4375d..52c412a27cbd00bdf31f0c434e1c2beae5645afd 100755 --- a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80.py +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80.py @@ -119,6 +119,11 @@ comp8.flag='EFele' comp8.test='ttbar' test.check_steps.append(comp8) +comp9=TrigInDetCompStep('Comp_L2FS') +comp9.flag='L2FS' +comp9.test='ttbar' +test.check_steps.append(comp9) + # CPU cost steps cpucost=TrigInDetCpuCostStep('CpuCostStep1') test.check_steps.append(cpucost) diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt.py index c405eab7dc6d28c479b4fd2d2b5d7d8bc71f8ddc..6b7587ffe18d4d36397c79e4baa76e99428cdba4 100755 --- a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt.py +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt.py @@ -119,6 +119,11 @@ comp8.flag='EFele' comp8.test='ttbar' test.check_steps.append(comp8) +comp9=TrigInDetCompStep('Comp_L2FS') +comp9.flag='L2FS' +comp9.test='ttbar' +test.check_steps.append(comp9) + # CPU cost steps cpucost=TrigInDetCpuCostStep('CpuCostStep1') test.check_steps.append(cpucost) diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt2.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt2.py index 284d2f4d37406dba3d485a6dfb2c2ac25b6c772d..582cb2cc0c5c14960ab097eb02ebdb3a8f75fb3f 100755 --- a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt2.py +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_all_ttbar_pu80_mt2.py @@ -119,6 +119,11 @@ comp8.flag='EFele' comp8.test='ttbar' test.check_steps.append(comp8) +comp9=TrigInDetCompStep('Comp_L2FS') +comp9.flag='L2FS' +comp9.test='ttbar' +test.check_steps.append(comp9) + # CPU cost steps cpucost=TrigInDetCpuCostStep('CpuCostStep1') test.check_steps.append(cpucost) diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_cosmics_cf_build.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_cosmics_cf_build.py new file mode 100755 index 0000000000000000000000000000000000000000..e24071366a3d3e6785d2503ee1613143ef4c4563 --- /dev/null +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_cosmics_cf_build.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +# art-description: athenaMT trigger test using Cosmic.py job options +# art-type: build +# art-include: master/Athena +# Skipping art-output which has no effect for build tests. +# If you create a grid version, check art-output in existing grid tests. + +from TrigValTools.TrigValSteering import Test, ExecStep, CheckSteps + +ex = ExecStep.ExecStep() +ex.type = 'athena' +ex.job_options = 'TrigInDetValidation/Cosmic.py' +ex.input = 'data_cos' +ex.threads = 1 +ex.max_events = 10 + +test = Test.Test() +test.art_type = 'build' +test.exec_steps = [ex] +test.check_steps = CheckSteps.default_check_steps(test) + +import sys +sys.exit(test.run()) diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_build.py index 9395ca795e52da007a0b404ca4df6136a94669d7..c553234bd8d4e708caf90fb4bc3500dec4e23845 100755 --- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_build.py +++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_build.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -# art-description: Same as empty_menu test from TrigUpgradeTest, but with athenaHLT +# art-description: Test running L1 result decoding, but no HLT chains # art-type: build # art-include: master/Athena diff --git a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_forkAndMT_build.py b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_forkAndMT_build.py index c4b661afc69c9d80d1b7cce696662c50d3647f8f..54435c88ea79b6503edeee9b4491df57765b9072 100755 --- a/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_forkAndMT_build.py +++ b/Trigger/TrigValidation/TrigP1Test/test/test_trigP1_EmptyMenu_forkAndMT_build.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration -# art-description: EmptyMenu test with forks=2, threads=2, concurrent_events=2 +# art-description: Test running L1 result decoding, but no HLT chains, with forks=2, threads=2, concurrent_events=2 # art-type: build # art-include: master/Athena diff --git a/Trigger/TrigValidation/TrigUpgradeTest/ATLAS_CHECK_THREAD_SAFETY b/Trigger/TrigValidation/TrigUpgradeTest/ATLAS_CHECK_THREAD_SAFETY deleted file mode 100644 index 3ad59ab20068ab36930920ead3202d53ceb8c383..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/ATLAS_CHECK_THREAD_SAFETY +++ /dev/null @@ -1 +0,0 @@ -Trigger/TrigValidation/TrigUpgradeTest diff --git a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt b/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt deleted file mode 100644 index 6f5c2df2e6eca38278bcefbf4dd21200e34cb581..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration - -# Declare the package name: -atlas_subdir( TrigUpgradeTest ) - -# Install files from the package: -atlas_install_joboptions( share/*.py ) -atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) -atlas_install_scripts( test/exec*.sh test/test*.sh ) diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/__init__.py b/Trigger/TrigValidation/TrigUpgradeTest/python/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/disabled_test_trigUpgr_emu_newjo_build.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/disabled_test_trigUpgr_emu_newjo_build.sh deleted file mode 100755 index 00fa7884e5b4b060943024533dc3dae3e6e8f61d..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/test/disabled_test_trigUpgr_emu_newjo_build.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -# art-description: athenaMT trigger test running the new-style job options EmuNewJOTest.py -# art-type: build -# art-include: master/Athena -# Skipping art-output which has no effect for build tests. -# If you create a grid version, check art-output in existing grid tests. - -export JOBOPTION="EmuNewJOTest.pkl" -export FROMPICKLE=1 -export REGTESTEXP="TrigSignatureMo.*INFO HLT_.*" - -# Find the regtest reference installed with the release -export REGTESTREF=`find_data.py TrigUpgradeTest/emu_newjo.ref` - -get_files -remove -jo TrigUpgradeTest/EmuNewJOTest.py - -echo $(date "+%FT%H:%M %Z")" Generate pickle file ${JOBOPTION}" -python EmuNewJOTest.py &> athena.pickle.log # generate pickle -status=$? - -if [ ${status} -ne 0 ]; then - echo "ERROR in configuration generation stage, stopping" - echo "art-result: 1 Configuration" - export ATH_RETURN=1 - export JOB_LOG="athena.pickle.log" -else - echo - echo "JOs reading stage finished, launching Athena from pickle file" - echo "art-result: 0 Configuration" - echo - source exec_TrigUpgradeTest_art_athenaMT.sh - - # Merge log files for post-processing - JOB_LOG_MERGED="athena.merged.log" - echo "### athena.pickle.log ###" > ${JOB_LOG_MERGED} - cat athena.pickle.log >> ${JOB_LOG_MERGED} - echo "### ${JOB_LOG} ###" - cat ${JOB_LOG} >> ${JOB_LOG_MERGED} - export JOB_LOG=${JOB_LOG_MERGED} -fi - -source exec_TrigUpgradeTest_art_post.sh diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_athenaMT.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_athenaMT.sh deleted file mode 100755 index 77ec8f579678695a26d76092ba0a24feff92fe56..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_athenaMT.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -# -# Trigger ART test execution script based on TriggerTest/test/exec_athena_art_trigger_validation.sh -# - -### DEFAULTS - -if [ -z "${NAME}" ]; then - testname=$(basename $0) - testname=${testname#test_} - testname=${testname%.sh} - export NAME=${testname} -fi -echo $(date "+%FT%H:%M %Z")" Execute Athena test ${NAME}" - -if [ -z ${EVENTS} ]; then - export EVENTS="1000" -fi - -if [ -z ${SKIPEVENTS} ]; then - export SKIPEVENTS="0" -fi - -if [ -z ${JOBOPTION} ]; then - export JOBOPTION="TriggerJobOpts/runHLT_standalone.py" -fi - -if [ -z ${JOB_LOG} ]; then - export JOB_LOG="athena.log" -fi - -if [ -z ${INPUT} ]; then - export INPUT="run2data" -fi - -if [ -z ${THREADS} ]; then - export THREADS="1" -fi - -if [ -z ${SLOTS} ]; then - export SLOTS="1" -fi - -# Run with PerfMon by default -if [ -z ${DOPERFMON} ] || [ ${DOPERFMON} -ne 0 ]; then - export PERFMONFLAG="--perfmon" -else - export PERFMONFLAG="" -fi - -if [ -z ${STDCMATH} ] || [ ${STDCMATH} -eq 0 ]; then - if [ -f ${ATLASMKLLIBDIR_PRELOAD}/libimf.so ]; then - export MATHLIBOPT="--imf" - else - echo "!!! WARNING !!! Intel math library is not available, using standard cmath library instead. This may lead to differences in test results." - export MATHLIBOPT="--stdcmath" - fi -else - export MATHLIBOPT="--stdcmath" -fi - -### - -if [[ $INPUT == "run2data" ]]; then - export DS="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data18_13TeV.00360026.physics_EnhancedBias.merge.RAW._lb0151._SFO-1._0001.1" -elif [[ $INPUT == "run2mc_ttbar" ]]; then - # ttbar RDO_FTK produced in 21.3 - export DS="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.digit.RDO_FTK.e4993_s3214_r11234_d1505/RDO_FTK.17071950._000065.pool.root.1,/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.digit.RDO_FTK.e4993_s3214_r11234_d1505/RDO_FTK.17071950._000235.pool.root.1" -elif [[ $INPUT == "ttbar" ]]; then - # ttbar RDO produced with serial athena job in master r2019-03-20 - export DS="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.merge.RDO.e4993_s3214_r11315/RDO.17533168._000001.pool.root.1,/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TriggerTest/valid1.410000.PowhegPythiaEvtGen_P2012_ttbar_hdamp172p5_nonallhad.merge.RDO.e4993_s3214_r11315/RDO.17533168._000002.pool.root.1" -elif [[ $INPUT == "run2data_cosmic" ]]; then - export DS="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TrigP1Test/data16_cos.00306147.physics_Main.daq.RAW._lb0494._SFO-4._0001.data" -elif [[ $INPUT == "none" ]]; then - export DS="" -elif [[ -f $INPUT ]]; then - export DS=${INPUT} -else - echo "ERROR: input not defined, cannot run" - echo "art-result: 1" - exit 1 -fi - -###################################### - -# Generate empty PoolFileCatalog.xml - this prevents incorrect handling of crashes on the grid -ART_AVAILABLE=`which art.py >/dev/null 2>&1; echo $?` -if [[ $ART_AVAILABLE == "0" ]]; then - echo "Executing art.py createpoolfile" - art.py createpoolfile -fi - -###################################### - -if [[ ${FROMPICKLE} == "1" ]]; then - echo "Running athena from pickle file ${JOBOPTION} with the command:" - (set -x - athena.py \ - ${MATHLIBOPT} \ - ${PERFMONFLAG} \ - ${ATHENAOPTS} \ - ${JOBOPTION} >${JOB_LOG} 2>&1 - ) 2>&1 -else - echo "Running athena command:" - (set -x - athena.py \ - ${MATHLIBOPT} \ - ${PERFMONFLAG} \ - ${ATHENAOPTS} \ - --threads ${THREADS} \ - --concurrent-events ${SLOTS} \ - --filesInput "${DS}" \ - --evtMax ${EVENTS} \ - --skipEvents ${SKIPEVENTS} \ - -c "${EXTRA}" \ - ${JOBOPTION} >${JOB_LOG} 2>&1 - ) 2>&1 -fi - -###################################### - -export ATH_RETURN=$? -echo "art-result: ${ATH_RETURN} ${JOB_LOG%.*}" -echo $(date "+%FT%H:%M %Z")" Done executing Athena test ${NAME} with result ${ATH_RETURN}" - diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_post.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_post.sh deleted file mode 100755 index 0709e9ff2bd8941ff3deb0cf7d7287098de89f25..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/test/exec_TrigUpgradeTest_art_post.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration -# -# Trigger ART test script with post-exec checks based on TriggerTest/test/exec_art_triggertest_post.sh -# - -echo $(date "+%FT%H:%M %Z")" Execute TrigUpgradeTest post processing for test ${NAME}" - -### Find the branch name -if [ -n "${AtlasBuildBranch}" ]; then - export BRANCH=${AtlasBuildBranch} # available after asetup -elif [ -n "${gitlabTargetBranch}" ]; then - export BRANCH=${gitlabTargetBranch} # available in CI -else - echo "WARNING Cannot determine the branch name, both variables AtlasBuildBranch and gitlabTargetBranch are empty" -fi - -### DEFAULTS - -if [ -z ${ATH_RETURN} ]; then - echo "WARNING The env variable ATH_RETURN is not set, assuming 0" - export ATH_RETURN=0 -fi - -if [ -z ${JOB_LOG} ]; then - export JOB_LOG="athena.log" -fi - -if [ -z ${TEST} ]; then - export TEST="TrigUpgradeTest" -fi - -if [ -z ${ESDTOCHECK} ]; then - export ESDTOCHECK="ESD.pool.root" -fi - -if [ -z ${AODTOCHECK} ]; then - export AODTOCHECK="AOD.pool.root" -fi - -if [ -z ${REF_FOLDER} ]; then - # Try eos first - export REF_FOLDER="/eos/atlas/atlascerngroupdisk/data-art/grid-input/${TEST}/ref/${BRANCH}/test_${NAME}" - # If not available, try cvmfs - if [ -d ${REF_FOLDER} ]; then - echo "Using reference directory from eos: ${REF_FOLDER}" - else - export REF_FOLDER="/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/${TEST}/ref/${BRANCH}/test_${NAME}" - if [ -d ${REF_FOLDER} ]; then - echo "Reference from eos unavailable, using one from cvmfs: ${REF_FOLDER}" - else - echo "Reference directory for test ${NAME} not available from eos or cvmfs" - fi - fi -fi - -# Disable RegTest by default and enable only if regex or ref file are defined -export DOREGTEST=0 -if [ -n "${REGTESTEXP}" ] || [ -n "${REGTESTREF}" ]; then - export DOREGTEST=1 -fi - -# Note REGTESTEXP is a GNU grep regexp, not perl regexp -if [ -z "${REGTESTEXP}" ]; then - export REGTESTEXP="REGTEST" -fi - -# Option to override the regtest reference location -if [ -z "${REGTESTREF}" ]; then - export REGTESTREF=${REF_FOLDER}/athena.regtest -fi - -### CHECKLOG - -# if athena failed and we are running in CI, print the full log to stdout -if [ "${ATH_RETURN}" -ne "0" ] && [ -n "${gitlabTargetBranch}" ]; then - echo "Printing the full ${JOB_LOG}" - cat ${JOB_LOG} -fi - -echo $(date "+%FT%H:%M %Z")" Running checklog for errors" -timeout 5m check_log.py --config checklogTriggerTest.conf --errors --showexcludestats ${JOB_LOG} 2>&1 | tee checklog.log -echo "art-result: ${PIPESTATUS[0]} CheckLog" - -echo $(date "+%FT%H:%M %Z")" Running checklog for warnings" -timeout 5m check_log.py --config checklogTriggerTest.conf --warnings --showexcludestats ${JOB_LOG} >warnings.log 2>&1 - -### PERFMON - -if [ -f ntuple.pmon.gz ]; then - echo $(date "+%FT%H:%M %Z")" Running perfmon" - timeout 5m perfmon.py -f 0.90 ntuple.pmon.gz >perfmon.log 2>&1 -fi - -### HISTOGRAM COUNT - -if [ -f expert-monitoring.root ]; then - echo $(date "+%FT%H:%M %Z")" Running histSizes" - timeout 5m histSizes.py -t expert-monitoring.root >histSizes.log 2>&1 -fi - -### MAKE LOG TAIL FILE - -export JOB_LOG_TAIL=${JOB_LOG%%.*}.tail.${JOB_LOG#*.} -tail -10000 ${JOB_LOG} > ${JOB_LOG_TAIL} - -### REGTEST - -if [ ${DOREGTEST} -ne 0 ]; then - REGTESTREF_BASENAME=$(basename -- "${REGTESTREF}") - if [ -z "${REGTESTEXP_EXCLUDE}" ]; then - grep -E "${REGTESTEXP}" ${JOB_LOG} > "${REGTESTREF_BASENAME}" - else - grep -E "${REGTESTEXP}" ${JOB_LOG} | grep -v -E "${REGTESTEXP_EXCLUDE}" > "${REGTESTREF_BASENAME}" - fi - - if [ -f ${REGTESTREF} ]; then - echo $(date "+%FT%H:%M %Z")" Running regtest using reference file ${REGTESTREF}" - timeout 5m regtest.pl --inputfile ${REGTESTREF_BASENAME} --reffile ${REGTESTREF} --linematch ".*" 2>&1 | tee regtest.log - echo "art-result: ${PIPESTATUS[0]} RegTest" - else - echo $(date "+%FT%H:%M %Z")" The reference file does not exist: ${REGTESTREF}" - echo "art-result: 999 RegTest" - fi - - mv ${REGTESTREF_BASENAME} ${REGTESTREF_BASENAME}.new -fi - -### ROOTCOMP - -if [ -f ${REF_FOLDER}/expert-monitoring.root ]; then - echo $(date "+%FT%H:%M %Z")" Running rootcomp" - timeout 10m rootcomp.py --skip="TIME_" ${REF_FOLDER}/expert-monitoring.root expert-monitoring.root >rootcompout.log 2>&1 - echo "art-result: ${PIPESTATUS[0]} RootComp" -elif [ -f expert-monitoring.root ]; then - echo $(date "+%FT%H:%M %Z")" No reference expert-monitoring.root found in ${REF_FOLDER}" - echo "art-result: 999 RootComp" -else - echo $(date "+%FT%H:%M %Z")" No expert-monitoring.root file and no reference are found - skipping RootComp" -fi - -### CHAINDUMP -# SKIP_CHAIN_DUMP=1 skips this step - -# Using temporary workaround to dump HLTChain.txt -if [ -f expert-monitoring.root ] && [ $[SKIP_CHAIN_DUMP] != 1 ]; then - echo "Running chainDump" - timeout 5m chainDump.py -f expert-monitoring.root --json >ChainDump.log 2>&1 -fi - -### CHECKFILE - -if [ -f ${ESDTOCHECK} ]; then - echo $(date "+%FT%H:%M %Z")" Running CheckFile on ESD" - timeout 10m checkFile.py ${ESDTOCHECK} >${ESDTOCHECK}.checkFile 2>&1 - echo "art-result: ${PIPESTATUS[0]} CheckFileESD" -else - echo $(date "+%FT%H:%M %Z")" No ESD file to check" -fi - -if [ -f ${AODTOCHECK} ]; then - echo $(date "+%FT%H:%M %Z")" Running CheckFile on AOD" - timeout 10m checkFile.py ${AODTOCHECK} >${AODTOCHECK}.checkFile 2>&1 - echo "art-result: ${PIPESTATUS[0]} CheckFileAOD" - echo $(date "+%FT%H:%M %Z")" Running CheckxAOD AOD" - timeout 10m checkxAOD.py ${AODTOCHECK} >${AODTOCHECK}.checkxAOD 2>&1 - echo "art-result: ${PIPESTATUS[0]} CheckXAOD" - echo $(date "+%FT%H:%M %Z")" Running checkFileTrigSize_RTT.py AOD" - export TRIGSIZE_LOG=${JOB_LOG%%.*}.TrigEDMSize.${JOB_LOG#*.} - timeout 10m checkFileTrigSize_RTT.py ${AODTOCHECK} > ${TRIGSIZE_LOG} 2>&1 - echo "art-result: ${PIPESTATUS[0]} checkFileTrigSize_RTT.py" -else - echo $(date "+%FT%H:%M %Z")" No AOD file to check" -fi - -### GENERATE JSON WITH POST-PROCESSING INFORMATION - -echo $(date "+%FT%H:%M %Z")" Running trig-test-json.py" -timeout 5m trig-test-json.py -cat extra-results.json && echo - -### SUMMARY - -echo $(date "+%FT%H:%M %Z")" Files in directory:" -ls -lh - -echo $(date "+%FT%H:%M %Z")" Finished TrigUpgradeTest post processing for test ${NAME}" diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_cosmics_cf_build.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_cosmics_cf_build.sh deleted file mode 100755 index 6d7798da97546ce702400d8c8cae863a45645206..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_cosmics_cf_build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -# art-description: athenaMT trigger test using IDCalo job options -# art-type: build -# art-include: master/Athena -# Skipping art-output which has no effect for build tests. -# If you create a grid version, check art-output in existing grid tests. - -export EVENTS=10 -export THREADS=1 -export SLOTS=1 -export JOBOPTION="TrigUpgradeTest/Cosmic.py" - -#export EXTRA="isOnline=True;doEmptyMenu=True;doWriteBS=False;doWriteRDOTrigger=True;forceEnableAllChains=True" -#export EXTRA="isOnline=True;doEmptyMenu=True;doWriteBS=False" -export EXTRA="doEmptyMenu=True;doWriteBS=False;doWriteRDOTrigger=True;" -export INPUT="run2data_cosmic" -#export ATHENAOPTS=" -l DEBUG " - - - -# Skip dumping chain counts because this test doesn't produce the histogram including them -export SKIP_CHAIN_DUMP=1 - -source exec_TrigUpgradeTest_art_athenaMT.sh -source exec_TrigUpgradeTest_art_post.sh diff --git a/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_mu_cf_build.sh b/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_mu_cf_build.sh deleted file mode 100755 index d94e28694b3897ed9875f18d52ed3d33af17a4f0..0000000000000000000000000000000000000000 --- a/Trigger/TrigValidation/TrigUpgradeTest/test/test_trigUpgr_mu_cf_build.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# art-description: athenaMT trigger test using mu.withViews.py job options -# art-type: build -# art-include: master/Athena -# Skipping art-output which has no effect for build tests. -# If you create a grid version, check art-output in existing grid tests. - -export EVENTS=20 -export THREADS=1 -export SLOTS=1 -export JOBOPTION="TrigUpgradeTest/full_menu_cf.py" -export EXTRA="doEmptyMenu=True;doMuonSlice=True" - -# Skip dumping chain counts because this test doesn't produce the histogram including them -export SKIP_CHAIN_DUMP=1 - -source exec_TrigUpgradeTest_art_athenaMT.sh -source exec_TrigUpgradeTest_art_post.sh diff --git a/Trigger/TrigValidation/TrigValTools/bin/runTrigART.py b/Trigger/TrigValidation/TrigValTools/bin/runTrigART.py index 8a9359dcd4691821688451f5a607f4fc0f645a15..69b6d38dfc0ddacc169cb07ce6924a675eef4cad 100755 --- a/Trigger/TrigValidation/TrigValTools/bin/runTrigART.py +++ b/Trigger/TrigValidation/TrigValTools/bin/runTrigART.py @@ -17,8 +17,7 @@ from TrigValTools.TrigARTUtils import package_prefix, find_scripts, remember_cwd def minimal_pattern(package): dict = {'TriggerTest': '(test_trig_data_v1Dev_build|test_trig_data_newJO_build)', 'TrigP1Test': 'test_trigP1_v1Dev_build', - 'TrigAnalysisTest': 'test_trigAna_RDOtoRDOTrig_mt1_build', - 'TrigUpgradeTest': None} + 'TrigAnalysisTest': 'test_trigAna_RDOtoRDOTrig_mt1_build'} if package == 'ALL': return '({})'.format('|'.join([v for v in dict.values() if v])) elif package in dict and dict[package] is not None: @@ -29,7 +28,7 @@ def minimal_pattern(package): def get_parser(): - packages = ['TriggerTest', 'TrigAnalysisTest', 'TrigP1Test', 'TrigUpgradeTest', 'ALL'] + packages = ['TriggerTest', 'TrigAnalysisTest', 'TrigP1Test', 'ALL'] parser = argparse.ArgumentParser(usage='%(prog)s [options] [PackageName]') parser.add_argument('package', metavar='PackageName', diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py index 22d0a003f8254318108fb44e64b20cbd853e3aae..7eb89084f28f8930a684e7e4fe55fe600559cb78 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/Common.py @@ -20,7 +20,6 @@ trigvalsteering_logging_level = logging.INFO package_prefix_dict = {'TriggerTest': 'trig_', 'TrigP1Test': 'trigP1_', 'TrigAnalysisTest': 'trigAna_', - 'TrigUpgradeTest': 'trigUpgr_', 'TrigInDetValidation': 'trigID_'} # Log file with all art-result statements diff --git a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py index b0edece9041c32f4a4dd4e7c322b9070f1bb5e73..1ef912ba5aa0934776350419a40af6576201221f 100644 --- a/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py +++ b/Trigger/TrigValidation/TrigValTools/python/TrigValSteering/ExecStep.py @@ -161,10 +161,7 @@ class ExecStep(Step): athenaopts += ' --perfmon' # Default threads/concurrent_events/forks - if test.package_name == 'TrigUpgradeTest': - if self.threads is None: - self.threads = 1 - elif test.package_name == 'TrigP1Test' and self.type == 'athenaHLT': + if test.package_name == 'TrigP1Test' and self.type == 'athenaHLT': if self.threads is None: self.threads = 1 if self.concurrent_events is None: diff --git a/Trigger/TrigValidation/TriggerTest/test/test_trig_data_newJO_build.py b/Trigger/TrigValidation/TriggerTest/test/test_trig_data_newJO_build.py index 2a84539455c6a0a93f605d9da65f190d131783a8..4610b7726757ee33114a52e7f01402d434f05f80 100755 --- a/Trigger/TrigValidation/TriggerTest/test/test_trig_data_newJO_build.py +++ b/Trigger/TrigValidation/TriggerTest/test/test_trig_data_newJO_build.py @@ -14,7 +14,7 @@ copy_jo = ExecStep.ExecStep('CopyJO') copy_jo.type = 'other' copy_jo.input = '' copy_jo.executable = 'get_files' -copy_jo.args = '-remove -jo TrigUpgradeTest/newJOtest.py' +copy_jo.args = '-remove -jo TriggerJobOpts/runHLT_standalone_newJO.py' copy_jo.prmon = False copy_jo.auto_report_result = False # Do not set art-result for this step copy_jo.output_stream = Step.Step.OutputStream.STDOUT_ONLY # Do not create a log file for this step @@ -24,14 +24,14 @@ pickle = ExecStep.ExecStep('GeneratePickle') pickle.type = 'other' pickle.input = '' pickle.executable = 'python' -pickle.args = 'newJOtest.py' +pickle.args = 'runHLT_standalone_newJO.py' pickle.prmon = False # The main job running athena from pickle run_athena = ExecStep.ExecStep('newJO') run_athena.type = 'athena' run_athena.use_pickle = True -run_athena.job_options = 'newJOtest.pkl' +run_athena.job_options = 'runHLT_standalone_newJO.py' run_athena.input = '' # The full test configuration diff --git a/Trigger/TrigValidation/TrigUpgradeTest/python/TriggerHistSvcConfig.py b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerHistSvcConfig.py similarity index 91% rename from Trigger/TrigValidation/TrigUpgradeTest/python/TriggerHistSvcConfig.py rename to Trigger/TriggerCommon/TriggerJobOpts/python/TriggerHistSvcConfig.py index aa0acf5095b7c141f8d7ed4ed805a1015a964772..9cd5673247172a797d16e9e729fdfc0d355fc4a3 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/python/TriggerHistSvcConfig.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/python/TriggerHistSvcConfig.py @@ -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 # def TriggerHistSvcConfig(flags): diff --git a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py similarity index 84% rename from Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py rename to Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py index dfaba5c82cb7eaf4ada409655befa753e26c2c81..64883d9abd46e74b9f61807d2543e4dd94776d8c 100644 --- a/Trigger/TrigValidation/TrigUpgradeTest/share/newJOtest.py +++ b/Trigger/TriggerCommon/TriggerJobOpts/share/runHLT_standalone_newJO.py @@ -1,14 +1,10 @@ # -# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration # -from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator from AthenaConfiguration.ComponentAccumulator import CompFactory from AthenaConfiguration.MainServicesConfig import MainServicesCfg from AthenaConfiguration.AllConfigFlags import ConfigFlags as flags -from AthenaCommon.CFElements import parOR, seqOR, seqAND, stepSeq, findAlgorithm, findOwningSequence -from AthenaCommon.AlgSequence import dumpMasterSequence -from AthenaCommon.AppMgr import theApp from AthenaCommon.Configurable import Configurable Configurable.configurableRun3Behavior=1 @@ -35,8 +31,8 @@ flags.Trigger.CostMonitoring.doCostMonitoring = True import importlib setupMenuPath = "TriggerMenuMT.HLTMenuConfig.Menu."+flags.Trigger.triggerMenuSetup+"_newJO" setupMenuModule = importlib.import_module( setupMenuPath ) -assert setupMenuModule != None, "Could not import module {}".format(setupMenuPath) -assert setupMenuModule.setupMenu != None, "Could not import setupMenu from {}".format(setupMenuPath) +assert setupMenuModule is not None, "Could not import module {}".format(setupMenuPath) +assert setupMenuModule.setupMenu is not None, "Could not import setupMenu from {}".format(setupMenuPath) flags.needFlagsCategory('Trigger') setupMenuModule.setupMenu(flags) flags.Exec.MaxEvents=50 @@ -52,7 +48,7 @@ flags.InDet.usePixelDCS=False flags.lock() -from AthenaCommon.Constants import INFO,DEBUG,WARNING +from AthenaCommon.Constants import DEBUG,WARNING acc = MainServicesCfg( flags ) acc.getService('AvalancheSchedulerSvc').VerboseSubSlots = True @@ -65,7 +61,7 @@ from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg acc.merge(ByteStreamReadCfg( flags )) -from TrigUpgradeTest.TriggerHistSvcConfig import TriggerHistSvcConfig +from TriggerJobOpts.TriggerHistSvcConfig import TriggerHistSvcConfig acc.merge(TriggerHistSvcConfig( flags )) from TriggerMenuMT.HLTMenuConfig.Menu.GenerateMenuMT_newJO import generateMenu as generateHLTMenu @@ -97,7 +93,7 @@ acc.foreach_component("*/L1Decoder").OutputLevel = DEBUG acc.foreach_component("*FastEMCaloAlgo*").OutputLevel = DEBUG acc.foreach_component("VDVFastEgammaCalo").OutputLevel =DEBUG -fname = "newJOtest.pkl" +fname = "runHLT_standalone_newJO.pkl" print( "Storing config in the file {}".format( fname ) ) with open(fname, "wb") as p: acc.store( p ) diff --git a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt index dfbbd4dfb02bbf642437afd551bf8c258b93e345..6f49fdccfbba7f4d8bc07270177010bc636089ae 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt +++ b/Trigger/TriggerCommon/TriggerMenuMT/CMakeLists.txt @@ -140,7 +140,8 @@ atlas_add_test( generateMenuMT file( MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_full_menu_cf ) atlas_add_test( full_menu_cf SCRIPT scripts/test_full_menu_cf.sh - PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_full_menu_cf ) + PROPERTIES WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unitTestRun_full_menu_cf + PROPERTIES TIMEOUT 500) #---------------------------------- diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py index 63cc987b224264e367606745b7a2c59d34fdfa79..accecd09b2630cc7a273478bec61baa466df9193 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/L1/Config/ItemDef.py @@ -21,6 +21,8 @@ from ..Base.Thresholds import TopoThreshold from ..Base.CTPCondition import ThrCondition, InternalTrigger # noqa: F401 from .TriggerTypeDef import TT +from future.utils import with_metaclass + class ItemDef: @@ -44,7 +46,7 @@ class ItemDef: isHIV5 = 'HI_v5' in menuName isPhaseII = '_PhaseII' in menuName - class d(metaclass=meta_d): pass + class d(with_metaclass(meta_d)): pass # ... and make them accessible by their name for thr in tc.getDefinedThresholds():