From 69ac59ecd66f03645193d52e28a8e1e7181725e8 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Fri, 6 Oct 2017 17:57:44 +0200 Subject: [PATCH] Improve the CMS example. Add word for the raw generator status of generator particles to Geant4Particle --- DDCMS/include/DDCMS/DDCMS.h | 46 +- DDCMS/include/DDCMS/DDCMSTags.h | 3 + DDCMS/src/DDCMS.cpp | 95 +++- DDCMS/src/plugins/DDCMSDetElementCreator.cpp | 88 +++ DDCMS/src/plugins/DDDefinitions2Objects.cpp | 84 ++- DDCMS/src/plugins/DDPixBarLayerAlgo.cpp | 115 ++-- DDCMS/src/plugins/DDTECCoolAlgo.cpp | 30 +- DDCMS/src/plugins/DDTECModuleAlgo.cpp | 124 ++--- DDCMS/src/plugins/DDTECOptoHybAlgo.cpp | 42 +- DDCMS/src/plugins/DDTECPhiAlgo.cpp | 16 +- DDCMS/src/plugins/DDTECPhiAltAlgo.cpp | 16 +- DDCMS/src/plugins/DDTIBLayerAlgo.cpp | 541 ++++++++++++++++++- DDCMS/src/plugins/DDTIDModuleAlgo.cpp | 442 ++++++++++++++- DDCMS/src/plugins/DDTIDModulePosAlgo.cpp | 356 ++++++++++++ DDCMS/src/plugins/DDTIDRingAlgo.cpp | 46 +- DDCMS/src/plugins/DDTOBAxCableAlgo.cpp | 139 +++++ DDCMS/src/plugins/DDTOBRadCableAlgo.cpp | 209 +++++++ DDCMS/src/plugins/DDTOBRodAlgo.cpp | 281 +++++++++- DDCMS/src/plugins/DDTrackerAngular.cpp | 34 +- DDCMS/src/plugins/DDTrackerLinear.cpp | 28 +- DDCMS/src/plugins/DDTrackerPhiAlgo.cpp | 28 +- DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp | 34 +- DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp | 35 +- DDCMS/src/plugins/DDTrackerZPosAlgo.cpp | 31 +- DDCond/src/Type1/Manager_Type1.cpp | 3 +- DDCore/include/DD4hep/VolumeProcessor.h | 179 ++++++ DDCore/include/DD4hep/Volumes.h | 18 + DDCore/src/GeoDictionary.h | 6 + DDCore/src/RootDictionary.h | 9 +- DDCore/src/VolumeManager.cpp | 10 +- DDCore/src/VolumeProcessor.cpp | 41 ++ DDCore/src/Volumes.cpp | 14 +- DDCore/src/plugins/StandardPlugins.cpp | 131 ++++- DDDB/src/plugins/CondDB2DDDB.cpp | 24 +- DDG4/include/DDG4/DDG4Dict.h | 2 - DDG4/include/DDG4/Geant4InputAction.h | 3 +- DDG4/include/DDG4/Geant4Particle.h | 23 +- DDG4/lcio/Geant4Output2LCIO.cpp | 11 +- DDG4/lcio/LCIOEventReader.cpp | 9 +- DDG4/lcio/LCIOFileReader.cpp | 2 +- DDG4/lcio/LCIOParticleExtension.h | 50 -- DDG4/lcio/LCIOStdHepReader.cpp | 4 +- DDG4/plugins/Geant4EventReaderHepEvt.cpp | 14 +- DDG4/plugins/Geant4EventReaderHepMC.cpp | 21 +- DDG4/src/Geant4InputAction.cpp | 10 +- DDG4/src/Geant4Particle.cpp | 48 +- DDG4/src/Geant4ParticleHandler.cpp | 2 + UtilityApps/src/run_plugin.h | 20 +- examples/DDCMS/CMS-tracker2.png | Bin 0 -> 259860 bytes examples/DDCMS/data/cms_tracker.xml | 103 ++-- examples/DDCMS/data/pixfwdBlade.xml | 2 +- examples/DDDB/CMakeLists.txt | 1 + examples/DDDB/scripts/display_dddb.sh | 28 + examples/DDDB/scripts/run_dddb.sh | 1 + 54 files changed, 2958 insertions(+), 694 deletions(-) create mode 100644 DDCMS/src/plugins/DDCMSDetElementCreator.cpp create mode 100644 DDCMS/src/plugins/DDTIDModulePosAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTOBAxCableAlgo.cpp create mode 100644 DDCMS/src/plugins/DDTOBRadCableAlgo.cpp create mode 100644 DDCore/include/DD4hep/VolumeProcessor.h create mode 100644 DDCore/src/VolumeProcessor.cpp delete mode 100644 DDG4/lcio/LCIOParticleExtension.h create mode 100644 examples/DDCMS/CMS-tracker2.png create mode 100755 examples/DDDB/scripts/display_dddb.sh diff --git a/DDCMS/include/DDCMS/DDCMS.h b/DDCMS/include/DDCMS/DDCMS.h index 7d15a05a7..9eafbf207 100644 --- a/DDCMS/include/DDCMS/DDCMS.h +++ b/DDCMS/include/DDCMS/DDCMS.h @@ -24,6 +24,7 @@ // C/C++ include files #include <map> +#include <sstream> /// Namespace for the AIDA detector description toolkit namespace dd4hep { @@ -77,27 +78,27 @@ namespace dd4hep { return elt.attr<T>(n); } /// Add a new constant to the namespace - void addConstant(const std::string& name, const std::string& value, const std::string& type) const; + void addConstant(const std::string& name, const std::string& value, const std::string& type) const; /// Add a new constant to the namespace as fully indicated by the name - void addConstantNS(const std::string& name, const std::string& value, const std::string& type) const; + void addConstantNS(const std::string& name, const std::string& value, const std::string& type) const; /// Access material by its namespace dressed name Material material(const std::string& name) const; - Solid solid(const std::string& name) const; + Solid solid(const std::string& name) const; /// Add solid to current namespace - void addSolid(const std::string& name,Solid solid) const; + Solid addSolid(const std::string& name,Solid solid) const; /// Add solid to current namespace as fully indicated by the name - void addSolidNS(const std::string& name,Solid solid) const; + Solid addSolidNS(const std::string& name,Solid solid) const; - Volume volume(const std::string& name, bool exc=true) const; + Volume volume(const std::string& name, bool exc=true) const; /// Add volume to current namespace - void addVolume(Volume vol) const; + Volume addVolume(Volume vol) const; /// Add volume to current namespace as fully indicated by the name - void addVolumeNS(Volume vol) const; + Volume addVolumeNS(Volume vol) const; const Rotation3D& rotation(const std::string& name) const; /// Add rotation matrix to current namespace - void addRotation(const std::string& name,const Rotation3D& rot) const; + void addRotation(const std::string& name,const Rotation3D& rot) const; }; /// XML parser context to store intermediate stuff @@ -113,6 +114,8 @@ namespace dd4hep { std::map<std::string, Rotation3D> rotations; std::map<std::string, Solid> shapes; std::map<std::string, Volume> volumes; + std::map<std::string, std::string> vismaterial; + std::set<std::string> disabledAlgs; std::vector<std::string> namespaces; bool geo_inited = false; @@ -172,8 +175,33 @@ namespace dd4hep { bool find(const std::string& name) const; /// Access typed argument by name template<typename T> T value(const std::string& name) const; + /// Shortcut to access string arguments + std::string str(const std::string& nam) const; + /// Shortcut to access double arguments + double dble(const std::string& nam) const; + /// Shortcut to access integer arguments + int integer(const std::string& nam) const; + /// Shortcut to access vector<double> arguments + std::vector<double> vecDble(const std::string& nam) const; + /// Shortcut to access vector<int> arguments + std::vector<int> vecInt(const std::string& nam) const; + /// Shortcut to access vector<int> arguments + std::vector<std::string> vecStr(const std::string& nam) const; }; + class LogDebug : public std::stringstream { + std::string tag; + bool pop = false; + public: + LogDebug() = delete; + LogDebug(const LogDebug& copy) = delete; + LogDebug& operator=(const LogDebug& copy) = delete; + LogDebug(const std::string& tag_value, bool /* set_context */); + LogDebug(const std::string& tag_value); + ~LogDebug(); + static void setDebugAlgorithms(bool value); + }; + /// Create 3D rotation matrix from angles. Rotation3D make_rotation3D(double thetaX, double phiX, double thetaY, double phiY, diff --git a/DDCMS/include/DDCMS/DDCMSTags.h b/DDCMS/include/DDCMS/DDCMSTags.h index 4fadc4414..f7415c2bd 100644 --- a/DDCMS/include/DDCMS/DDCMSTags.h +++ b/DDCMS/include/DDCMS/DDCMSTags.h @@ -114,7 +114,9 @@ namespace dd4hep { UNICODE(nEntries); UNICODE(VisSection); + UNICODE(vismaterial); UNICODE(vis); + /// Debug flags UNICODE(debug_constants); @@ -133,6 +135,7 @@ namespace dd4hep { UNICODE(close_geometry); UNICODE(IncludeSection); UNICODE(Include); + UNICODE(DisabledAlgo); } /* End namespace DDCMS */ } /* End namespace dd4hep */ diff --git a/DDCMS/src/DDCMS.cpp b/DDCMS/src/DDCMS.cpp index a1dd30929..35f9f5109 100644 --- a/DDCMS/src/DDCMS.cpp +++ b/DDCMS/src/DDCMS.cpp @@ -207,7 +207,7 @@ const Rotation3D& Namespace::rotation(const string& nam) const { } /// Add rotation matrix to current namespace -void Namespace::addVolumeNS(Volume vol) const { +Volume Namespace::addVolumeNS(Volume vol) const { string n = vol.name(); Solid s = vol.solid(); Material m = vol.material(); @@ -216,10 +216,11 @@ void Namespace::addVolumeNS(Volume vol) const { printout(context->debug_volumes ? ALWAYS : DEBUG, "DDCMS", "+++ Add volume:%-38s Solid:%-26s[%-16s] Material:%s", vol.name(), s.name(), s.type(), m.name()); + return vol; } /// Add rotation matrix to current namespace -void Namespace::addVolume(Volume vol) const { +Volume Namespace::addVolume(Volume vol) const { string n = prepend(vol.name()); Solid s = vol.solid(); Material m = vol.material(); @@ -228,6 +229,7 @@ void Namespace::addVolume(Volume vol) const { printout(context->debug_volumes ? ALWAYS : DEBUG, "DDCMS", "+++ Add volume:%-38s Solid:%-26s[%-16s] Material:%s", vol.name(), s.name(), s.type(), m.name()); + return vol; } Volume Namespace::volume(const string& nam, bool exc) const { @@ -250,15 +252,16 @@ Volume Namespace::volume(const string& nam, bool exc) const { } /// Add solid to current namespace as fully indicated by the name -void Namespace::addSolidNS(const std::string& nam,Solid sol) const { +Solid Namespace::addSolidNS(const string& nam,Solid sol) const { printout(context->debug_shapes ? ALWAYS : DEBUG, "DDCMS", "+++ Add shape of type %s : %s",sol->IsA()->GetName(), nam.c_str()); context->shapes[nam] = sol.setName(nam); + return sol; } /// Add solid to current namespace -void Namespace::addSolid(const string& nam, Solid sol) const { - addSolidNS(prepend(nam), sol); +Solid Namespace::addSolid(const string& nam, Solid sol) const { + return addSolidNS(prepend(nam), sol); } Solid Namespace::solid(const string& nam) const { @@ -415,29 +418,79 @@ namespace dd4hep { template string AlgoArguments::value<string>(const string& nam) const; /// Access typed vector<string> argument by name - template<> vector<string> AlgoArguments::value<vector<string> >(const string& nam) const { - xml_h xp = raw_arg(nam); - return raw_vector(this,xp); - } + template<> vector<string> AlgoArguments::value<vector<string> >(const string& nam) const + { return raw_vector(this,raw_arg(nam)); } /// Access typed vector<double> argument by name - template<> vector<double> AlgoArguments::value<vector<double> >(const string& nam) const { - return __cnvVect<double>(this,"numeric",raw_arg(nam)); - } + template<> vector<double> AlgoArguments::value<vector<double> >(const string& nam) const + { return __cnvVect<double>(this,"numeric",raw_arg(nam)); } /// Access typed vector<float> argument by name - template<> vector<float> AlgoArguments::value<vector<float> >(const string& nam) const { - return __cnvVect<float>(this,"numeric",raw_arg(nam)); - } + template<> vector<float> AlgoArguments::value<vector<float> >(const string& nam) const + { return __cnvVect<float>(this,"numeric",raw_arg(nam)); } /// Access typed vector<long> argument by name - template<> vector<long> AlgoArguments::value<vector<long> >(const string& nam) const { - return __cnvVect<long>(this,"numeric",raw_arg(nam)); - } + template<> vector<long> AlgoArguments::value<vector<long> >(const string& nam) const + { return __cnvVect<long>(this,"numeric",raw_arg(nam)); } /// Access typed vector<int> argument by name - template<> vector<int> AlgoArguments::value<vector<int> >(const string& nam) const { - return __cnvVect<int>(this,"numeric",raw_arg(nam)); - } + template<> vector<int> AlgoArguments::value<vector<int> >(const string& nam) const + { return __cnvVect<int>(this,"numeric",raw_arg(nam)); } } } + +/// Shortcut to access string arguments +string AlgoArguments::str(const string& nam) const +{ return this->value<string>(nam); } + +/// Shortcut to access double arguments +double AlgoArguments::dble(const string& nam) const +{ return this->value<double>(nam); } + +/// Shortcut to access integer arguments +int AlgoArguments::integer(const string& nam) const +{ return this->value<int>(nam); } + +/// Shortcut to access vector<double> arguments +vector<double> AlgoArguments::vecDble(const string& nam) const +{ return this->value<vector<double> >(nam); } + +/// Shortcut to access vector<int> arguments +vector<int> AlgoArguments::vecInt(const string& nam) const +{ return this->value<vector<int> >(nam); } + +/// Shortcut to access vector<string> arguments +vector<string> AlgoArguments::vecStr(const string& nam) const +{ return this->value<vector<string> >(nam); } + +namespace { + bool s_debug_algorithms = false; + vector<string> s_algorithms; + const std::string currentAlg() { + static std::string s_none = "??????"; + if ( !s_algorithms.empty() ) return s_algorithms.back(); + return s_none; + } +} + +LogDebug::LogDebug(const std::string& tag_value, bool /* set_context */) { + s_algorithms.push_back(tag_value); + pop = true; +} + +LogDebug::LogDebug(const std::string& t) : stringstream(), tag(t) { + if ( pop ) s_algorithms.pop_back(); +} + +LogDebug::~LogDebug() { + if ( pop ) return; + if ( this->str().empty() ) return; + printout(s_debug_algorithms ? ALWAYS : DEBUG, + currentAlg(),"%s: %s", + tag.c_str(),this->str().c_str()); +} + +void LogDebug::setDebugAlgorithms(bool value) { + s_debug_algorithms = value; +} + diff --git a/DDCMS/src/plugins/DDCMSDetElementCreator.cpp b/DDCMS/src/plugins/DDCMSDetElementCreator.cpp new file mode 100644 index 000000000..972b29df9 --- /dev/null +++ b/DDCMS/src/plugins/DDCMSDetElementCreator.cpp @@ -0,0 +1,88 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/VolumeProcessor.h" +#include "DD4hep/DetFactoryHelper.h" + +using namespace std; +using namespace dd4hep; + + +namespace { + + + class DDCMSDetElementCreator : public PlacedVolumeProcessor { + struct Data { + bool sensitive = false; + Data() = default; + Data(const Data& d) = default; + Data& operator=(const Data& d) = default; + }; + typedef std::vector<std::pair<PlacedVolume,Data> > VolumeStack; + VolumeStack* stack; + + public: + /// Initializing constructor + DDCMSDetElementCreator(); + /// Default destructor + virtual ~DDCMSDetElementCreator(); + /// Callback to output PlacedVolume information of an single Placement + virtual int operator()(PlacedVolume pv, int level) const; + /// Callback to output PlacedVolume information of an entire Placement + virtual int process(PlacedVolume pv, int level, bool recursive) const; + }; +} + + +#include "DD4hep/Printout.h" + +/// Initializing constructor +DDCMSDetElementCreator::DDCMSDetElementCreator() { + stack = new VolumeStack(); +} + +/// Default destructor +DDCMSDetElementCreator::~DDCMSDetElementCreator() { + detail::deletePtr(stack); +} + +/// Callback to output PlacedVolume information of an single Placement +int DDCMSDetElementCreator::operator()(PlacedVolume pv, int level) const { + Volume vol = pv.volume(); + char sens = vol.isSensitive() ? 'S' : ' '; + printout(INFO,"DDCMSDetElementCreator", + "++ %3d %s [%s] %c", level, pv.name(), vol.name(), sens); + return 1; +} + +/// Callback to output PlacedVolume information of an entire Placement +int DDCMSDetElementCreator::process(PlacedVolume pv, int level, bool recursive) const { + stack->push_back(make_pair(pv,Data())); + int ret = PlacedVolumeProcessor::process(pv,level,recursive); + stack->pop_back(); + return ret; +} + +static void* create_object(Detector& /* description */, int /* argc */, char** /* argv */) { + PlacedVolumeProcessor* proc = new DDCMSDetElementCreator(); + return proc; +} + +// first argument is the type from the xml file +DECLARE_DD4HEP_CONSTRUCTOR(DDCMS_DetElementCreator,create_object) + diff --git a/DDCMS/src/plugins/DDDefinitions2Objects.cpp b/DDCMS/src/plugins/DDDefinitions2Objects.cpp index 2940001a0..83f7c6317 100644 --- a/DDCMS/src/plugins/DDDefinitions2Objects.cpp +++ b/DDCMS/src/plugins/DDDefinitions2Objects.cpp @@ -50,6 +50,8 @@ namespace dd4hep { static UInt_t unique_mat_id = 0xAFFEFEED; + + class disabled_algo; class include_constants; class include_load; class include_unload; @@ -90,6 +92,7 @@ namespace dd4hep { class vissection; class vis_apply; + class vismaterial; class vis; class debug; } @@ -97,7 +100,8 @@ namespace dd4hep { /// Converter instances implemented in this compilation unit template <> void Converter<debug>::operator()(xml_h element) const; template <> void Converter<print_xml_doc>::operator()(xml_h element) const; - + template <> void Converter<disabled_algo>::operator()(xml_h element) const; + /// Converter for <ConstantsSection/> tags template <> void Converter<constantssection>::operator()(xml_h element) const; template <> void Converter<constant>::operator()(xml_h element) const; @@ -105,7 +109,11 @@ namespace dd4hep { /// Converter for <VisSection/> tags template <> void Converter<vissection>::operator()(xml_h element) const; + /// Convert to apply visualization attributes template <> void Converter<vis_apply>::operator()(xml_h element) const; + /// Convert material visualization attributes + template <> void Converter<vismaterial>::operator()(xml_h element) const; + /// Convert compact visualization attributes template <> void Converter<vis>::operator()(xml_h element) const; /// Converter for <MaterialSection/> tags @@ -166,6 +174,7 @@ template <> void Converter<constantssection>::operator()(xml_h element) const { /// Converter for <VisSection/> tags template <> void Converter<vissection>::operator()(xml_h element) const { Namespace _ns(_param<ParsingContext>(), element); + xml_coll_t(element, _CMU(vismaterial)).for_each(Converter<vismaterial>(description,_ns.context,optional)); xml_coll_t(element, _CMU(vis)).for_each(Converter<vis>(description,_ns.context,optional)); } @@ -192,6 +201,11 @@ template <> void Converter<logicalpartsection>::operator()(xml_h element) const xml_coll_t(element, _CMU(LogicalPart)).for_each(Converter<logicalpart>(description,_ns.context,optional)); } +template <> void Converter<disabled_algo>::operator()(xml_h element) const { + ParsingContext* c = _param<ParsingContext>(); + c->disabledAlgs.insert(element.attr<string>(_U(name))); +} + /// Generic converter for <SolidSection/> tags template <> void Converter<solidsection>::operator()(xml_h element) const { Namespace _ns(_param<ParsingContext>(), element); @@ -268,6 +282,13 @@ template <> void Converter<constant>::operator()(xml_h element) const { res->unresolvedConst[real] = val; } +/// Convert material visualization attributes +template <> void Converter<vismaterial>::operator()(xml_h e) const { + ParsingContext* c = _param<ParsingContext>(); + xml_dim_t xvis(e); + c->vismaterial[xvis.nameStr()] = xvis.typeStr(); +} + /** Convert compact visualization attribute to Detector visualization attribute * * <vis name="SiVertexBarrelModuleVis" @@ -405,6 +426,7 @@ template <> void Converter<compositematerial>::operator()(xml_h element) const medium->SetTitle("material"); medium->SetUniqueID(unique_mat_id); } + } } @@ -652,15 +674,20 @@ template <> void Converter<algorithm>::operator()(xml_h element) const { Namespace _ns(_param<ParsingContext>()); xml_dim_t e(element); string name = e.nameStr(); + if ( _ns.context->disabledAlgs.find(name) != _ns.context->disabledAlgs.end() ) { + printout(INFO,"DDCMS","+++ Skip disabled algorithms: %s",name.c_str()); + return; + } try { SensitiveDetector sd; Segmentation seg; - string type = _ns.real_name(e.nameStr()); + string type = "DDCMS_"+_ns.real_name(name); // SensitiveDetector and Segmentation currently are undefined. Let's keep it like this // until we found something better..... printout(_ns.context->debug_algorithms ? ALWAYS : DEBUG, "DDCMS","+++ Start executing algorithm %s....",type.c_str()); + LogDebug context(e.nameStr(),true); long ret = PluginService::Create<long>(type, &description, _ns.context, &element, &sd); if ( ret == 1 ) { printout(_ns.context->debug_algorithms ? ALWAYS : DEBUG, @@ -711,25 +738,58 @@ template <> void Converter<debug>::operator()(xml_h dbg) const { if ( dbg.hasChild(_CMU(debug_namespaces)) ) _ns.context->debug_namespaces = true; if ( dbg.hasChild(_CMU(debug_includes)) ) _ns.context->debug_includes = true; if ( dbg.hasChild(_CMU(debug_algorithms)) ) _ns.context->debug_algorithms = true; + LogDebug::setDebugAlgorithms(_ns.context->debug_algorithms); } template <> void Converter<vis_apply>::operator()(xml_h /* dddefinition */) const { struct VisPatcher: public detail::GeoScan { - Detector& detector; - VisPatcher(Detector& d) : detail::GeoScan(d.world()), detector(d) { } + const Namespace& n_s; + VisPatcher(const Namespace& n) + : detail::GeoScan(n.context->description->world()), n_s(n) + { } void patch() const { + Detector* detector = n_s.context->description; printout(INFO,"Detector","+++ Applying DD4hep visualization attributes...."); + VisAttr invisible = detector->visAttributes("invisible"); for (auto i = m_data->rbegin(); i != m_data->rend(); ++i) { for( const TGeoNode* n : (*i).second ) { - Volume vol(n->GetVolume()); - VisAttr vis = detector.visAttributes(vol.name()); - printout(DEBUG,"Vis","+++ %s vis-attrs:%s",vol.name(), yes_no(vis.isValid())); + Volume vol = n->GetVolume(); + Material mat = vol.material(); + VisAttr vis = detector->visAttributes(vol.name()); + if ( !vis.isValid() ) { + auto iv = n_s.context->vismaterial.find(mat.name()); + if ( iv != n_s.context->vismaterial.end() ) { + vis = detector->visAttributes((*iv).second); + } + } + if ( !vis.isValid() && mat.density() < 5e0 ) { + vis = invisible; + } + /* + if ( !vis ) { + TGeoMaterial* m = mat->GetMaterial(); + int ne = m->GetNelements(); + for(int k=0; ne==1 && k<ne; ++k) { + TGeoElement* e = m->GetElement(k); + auto iv = n_s.context->vismaterial.find(e->GetName()); + if ( iv != n_s.context->vismaterial.end() ) { + vis = detector->visAttributes((*iv).second); + printout(INFO,"Vis","Set visattr according to element: %s -> %s", + mat.name(), e->GetName()); + break; + } + } + } + */ + printout(INFO,"Vis","+++ %-40s Material:%s Dens:%6.1f vis-attrs:%s [%s]", + vol.name(), mat.name(), mat.density(), yes_no(vis.isValid()), + vis.name()); vol.setVisAttributes(vis); } } } }; - VisPatcher(description).patch(); + VisPatcher(Namespace(_param<ParsingContext>())).patch(); } template <> void Converter<resolve>::operator()(xml_h /* element */) const { @@ -785,7 +845,7 @@ template <> void Converter<resolve>::operator()(xml_h /* element */) const { template <> void Converter<print_xml_doc>::operator()(xml_h element) const { string fname = xml::DocumentHandler::system_path(element); printout(_param<ParsingContext>()->debug_includes ? ALWAYS : DEBUG, - "DDCMS","+++ Processing data from file:%s",fname.c_str()); + "DDCMS","+++ Processing data from: %s",fname.c_str()); } /// Converter for <DDDefinition/> tags @@ -809,6 +869,7 @@ static long load_dddefinition(Detector& det, xml_h element) { try { resolve res; print_doc((doc=dddef.document()).root()); + xml_coll_t(dddef, _CMU(DisabledAlgo)).for_each(Converter<disabled_algo>(det,&ctxt,&res)); xml_coll_t(dddef, _CMU(ConstantsSection)).for_each(Converter<constantssection>(det,&ctxt,&res)); xml_coll_t(dddef, _CMU(VisSection)).for_each(Converter<vissection>(det,&ctxt)); xml_coll_t(dddef, _CMU(RotationSection)).for_each(Converter<rotationsection>(det,&ctxt)); @@ -816,7 +877,10 @@ static long load_dddefinition(Detector& det, xml_h element) { xml_coll_t(dddef, _CMU(IncludeSection)).for_each(_CMU(Include), Converter<include_load>(det,&ctxt,&res)); - for(xml::Document d : res.includes ) Converter<include_constants>(det,&ctxt,&res)((doc=d).root()); + for(xml::Document d : res.includes ) { + print_doc((doc=d).root()); + Converter<include_constants>(det,&ctxt,&res)((doc=d).root()); + } // Before we continue, we have to resolve all constants NOW! Converter<resolve>(det,&ctxt,&res)(dddef); // Now we can process the include files one by one..... diff --git a/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp b/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp index 44437faab..198a97b76 100644 --- a/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp +++ b/DDCMS/src/plugins/DDPixBarLayerAlgo.cpp @@ -17,27 +17,20 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; -using namespace dd4hep::detail; using namespace dd4hep::cms; -static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; +static long algorithm(Detector& description, ParsingContext& ctxt, xml_h e, SensitiveDetector& /* sens */) { PlacedVolume pv; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); string parentName = args.parentName(); - printout(INFO,"DDCMS","+++ Parsing arguments for Algorithm:%-24s rParent:%s", - args.name.c_str(), parentName.c_str()); - + LogDebug("PixelGeom") << "+++ Parsing arguments for Algorithm:" << args.name + << " rParent:" << parentName; string genMat = args.value<string>("GeneralMaterial"); int number = args.value<int>("Ladders"); double layerDz = args.value<double>("LayerDz"); @@ -49,8 +42,7 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, double coolDist = args.value<double>("CoolDist"); string coolMat = args.value<string>("CoolMaterial"); string tubeMat = args.value<string>("CoolTubeMaterial"); - - str << "Parent " << parentName << " NameSpace " << ns.name << "\n" + LogDebug("PixelGeom") << "Parent " << parentName << " NameSpace " << ns.name << "\n" << "\tLadders " << number << "\tGeneral Material " << genMat << "\tLength " << layerDz << "\tSensorEdge " << sensorEdge << "\tSpecification of Cooling Pieces:\n" @@ -58,21 +50,15 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, << " Side " << coolSide << " Thickness of Shell " << coolThick << " Radial distance " << coolDist << " Materials " << coolMat << ", " << tubeMat; - printout(INFO,"DDPixBarLayerAlgo",str); - vector<string> ladder = args.value<vector<string> >("LadderName"); vector<double> ladderWidth = args.value<vector<double> >("LadderWidth"); vector<double> ladderThick = args.value<vector<double> >("LadderThick"); - - str << "Full Ladder " << ladder[0] << " width/thickness " << ladderWidth[0] + LogDebug("PixelGeom") << "Full Ladder " << ladder[0] << " width/thickness " << ladderWidth[0] << ", " << ladderThick[0] << "\tHalf Ladder " << ladder[1] << " width/thickness " << ladderWidth[1] << ", " << ladderThick[1]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - - string mother = parentName; - const std::string &idName = mother; + const std::string idName = ns.obj_name(parentName); double dphi = CLHEP::twopi/number; double d2 = 0.5*coolWidth; double d1 = d2 - coolSide*sin(0.5*dphi); @@ -81,58 +67,47 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, double rmin = (coolDist-0.5*(d1+d2))*cos(0.5*dphi)-0.5*ladderThick[0]; double rmax = (coolDist+0.5*(d1+d2))*cos(0.5*dphi)+0.5*ladderThick[0]; double rmxh = rmax - 0.5*ladderThick[0] + ladderThick[1]; - str << "Rmin/Rmax " << rmin + LogDebug("PixelGeom") << "Rmin/Rmax " << rmin << ", " << rmax << " d1/d2 " << d1 << ", " << d2 << " x1/x2 " << x1 << ", " << x2; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); double rtmi = rmin + 0.5*ladderThick[0] - ladderThick[1]; double rtmx = sqrt(rmxh*rmxh+ladderWidth[1]*ladderWidth[1]); - Solid solid = Tube(rtmi, rtmx, 0.5*layerDz, 0, CLHEP::twopi); - solid.setName(idName); - str.str(""); - str << "IDname "<< idName << " Tubs made of " + Solid solid = ns.addSolid(idName,Tube(rtmi, rtmx, 0.5*layerDz, 0, CLHEP::twopi)); + LogDebug("PixelGeom") << "IDname "<< idName << " Tubs made of " << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg << " with Rin " << rtmi << " Rout " << rtmx << " ZHalf " << 0.5*layerDz; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - - Volume layer(solid.name(), solid, ns.material(genMat)); - + + Volume layer = ns.addVolume(Volume(idName, solid, ns.material(genMat))); double rr = 0.5*(rmax+rmin); double dr = 0.5*(rmax-rmin); double h1 = 0.5*coolSide*cos(0.5*dphi); std::string name = idName + "CoolTube"; - solid = Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); - solid.setName(idName+"CoolTube"); - str << "Solid " << solid.name() + solid = ns.addSolid(name,Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0)); + LogDebug("PixelGeom") << "Solid " << solid.name() << " Trap made of " << tubeMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - Volume coolTube(solid.name(), solid, description.material(tubeMat)); - + + Volume coolTube = ns.addVolume(Volume(name, solid, description.material(tubeMat))); h1 -= coolThick; d1 -= coolThick; d2 -= coolThick; - solid = Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0); - solid.setName(idName + "Coolant"); - - str << "Solid " << solid.name() + name = idName + "Coolant"; + solid = ns.addSolid(name, Trap(0.5*coolDz, 0, 0, h1, d2, d1, 0, h1, d2, d1, 0)); + LogDebug("PixelGeom") << "Solid " << solid.name() << " Trap made of " << coolMat << " of dimensions " << 0.5*coolDz << ", 0, 0, " << h1 << ", " << d2 << ", " << d1 << ", 0, " << h1 << ", " << d2 << ", " << d1 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - Volume cool(solid.name(), solid, description.material(coolMat)); - //cpv.position(cool, coolTube, 1, DDTranslation(0.0, 0.0, 0.0), DDRotation()); + Volume cool = ns.addVolume(Volume(name, solid, description.material(coolMat))); pv = coolTube.placeVolume(cool); - str << "Cool " << cool.name() + LogDebug("PixelGeom") << "Cool " << cool.name() << " number 1 positioned in " << coolTube.name() << " at (0,0,0) with no rotation"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); string ladderFull = ladder[0]; string ladderHalf = ladder[1]; @@ -154,22 +129,19 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, rots = idName + std::to_string(copy); phix = phi-90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; - str << "Creating a new " + LogDebug("PixelGeom") << "Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderHalf, layer, copy, tran, rot); pv = layer.placeVolume(ladderHalfVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str << "ladderHalfVol: " << ladderHalfVol.name() + LogDebug("PixelGeom") << "ladderHalfVol: " << ladderHalfVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - copy++; iup = -1; rrr = rr - dr - 0.5*(ladderThick[1]-ladderThick[0]); @@ -177,20 +149,17 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, rots = idName + std::to_string(copy); phix = phi+90*CLHEP::deg; phiy = 90*CLHEP::deg+phix; - str << "Creating a new rotation: " << rots << "\t90., " + LogDebug("PixelGeom") << "Creating a new rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderHalf, layer, copy, tran, rot); pv = layer.placeVolume(ladderHalfVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str << "ladderHalfVol: " << ladderHalfVol.name() + LogDebug("PixelGeom") << "ladderHalfVol: " << ladderHalfVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); copy++; } else { iup =-iup; @@ -200,22 +169,19 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, if (iup > 0) phix = phi-90*CLHEP::deg; else phix = phi+90*CLHEP::deg; phiy = phix+90.*CLHEP::deg; - str << "DDPixBarLayerAlgo test: Creating a new " + LogDebug("PixelGeom") << "DDPixBarLayerAlgo test: Creating a new " << "rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); - rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); //cpv.position(ladderFull, layer, copy, tran, rot); pv = layer.placeVolume(ladderFullVol, Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str << "test: " << ladderFullVol.name() + LogDebug("PixelGeom") << "test: " << ladderFullVol.name() << " number " << copy << " positioned in " << layer.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); copy++; } rrr = coolDist*cos(0.5*dphi); @@ -224,38 +190,21 @@ static long create_element(Detector& description, ParsingContext& ctxt, xml_h e, phix = phi+0.5*dphi; if (iup > 0) phix += 180*CLHEP::deg; phiy = phix+90.*CLHEP::deg; - str << "Creating a new rotation: " << rots << "\t90., " + LogDebug("PixelGeom") << "Creating a new rotation: " << rots << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg << ", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); + rot = make_rotation3D(90*CLHEP::deg, phix, 90*CLHEP::deg, phiy, 0.,0.); - //cpv.position(coolTube, layer, i+1, tran, rot); - pv = layer.placeVolume(coolTube,Transform3D(rot,tran)); + pv = layer.placeVolume(coolTube,Transform3D(rot,tran)); if ( !pv.isValid() ) { } - str << "coolTube: " << coolTube.name() + LogDebug("PixelGeom") << "coolTube: " << coolTube.name() << " number " << i+1 << " positioned in " << layer.name() << " at " << tran << " with "<< rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDPixBarLayerAlgo",str); } - - ns.addVolumeNS(layer); - //nn.addVolume(assembly); - printout(INFO,"DDPixBarLayerAlgo","Layer: %s assembly:%s",layer.name(),"---"); -#if 0 - string det_name = idName; - Assembly assembly(det_name); - // Now we have built the layer.....create the DetElement object - DetElement det_elt(det_name,0); - pv = assembly.placeVolume(layer); - - det_elt.setPlacement(pv); - description.addDetector(det_elt); - Volume motherVol = description.pickMotherVolume(det_elt); - pv = motherVol.placeVolume(assembly); -#endif + LogDebug("PixelGeom") << "Layer: " << layer.name(); return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDPixBarLayerAlgo,create_element) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDPixBarLayerAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECCoolAlgo.cpp b/DDCMS/src/plugins/DDTECCoolAlgo.cpp index 6dd9a87fa..061e20793 100644 --- a/DDCMS/src/plugins/DDTECCoolAlgo.cpp +++ b/DDCMS/src/plugins/DDTECCoolAlgo.cpp @@ -32,7 +32,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt,e,true); AlgoArguments args(ctxt, e); int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; @@ -41,19 +40,17 @@ static long algorithm(Detector& /* description */, vector<string> coolInsert = args.value<vector<string> >("CoolInsert"); Volume mother = ns.volume(args.parentName()); - str << "debug: Parent " << mother.name() - <<" NameSpace " << ns.name << " at radial Position " << rPosition; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + LogDebug("TECGeom") << "debug: Parent " << mother.name() + <<" NameSpace " << ns.name << " at radial Position " << rPosition; if (phiPosition.size() == coolInsert.size()) { for (int i=0; i<(int)(phiPosition.size()); i++) { - str << "debug: Insert[" << i << "]: " + LogDebug("TECGeom") << "debug: Insert[" << i << "]: " << coolInsert.at(i) << " at Phi " << phiPosition.at(i)/CLHEP::deg; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); } - } else { - str << "ERROR: Number of inserts does not match the numer of PhiPositions!"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + } + else { + LogDebug("TECGeom") << "ERROR: Number of inserts does not match the numer of PhiPositions!"; } int copyNo = startCopyNo; @@ -66,18 +63,17 @@ static long algorithm(Detector& /* description */, // place inserts Position tran(xpos, ypos, 0.0); mother.placeVolume(child,tran); - str << "test " << child.name() << "[" - << copyNo << "] positioned in " << mother.name() - << " at " << tran - << " phi " << phiPosition.at(i)/CLHEP::deg << " r " - << rPosition; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo",str); + LogDebug("TECGeom") << "test " << child.name() << "[" + << copyNo << "] positioned in " << mother.name() + << " at " << tran + << " phi " << phiPosition.at(i)/CLHEP::deg << " r " + << rPosition; copyNo++; } - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECCoolAlgo","Finished...."); + LogDebug("TECGeom") << "Finished...."; return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTECCoolAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTECCoolAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECModuleAlgo.cpp b/DDCMS/src/plugins/DDTECModuleAlgo.cpp index 4192461ff..c9eabf69d 100644 --- a/DDCMS/src/plugins/DDTECModuleAlgo.cpp +++ b/DDCMS/src/plugins/DDTECModuleAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -31,11 +27,9 @@ static void doPos(ParsingContext& ctxt, Volume toPos, Volume mother, int /* copyNr */, double x, double y, double z, const string& rotName) { - stringstream str; Namespace ns(ctxt); mother.placeVolume(toPos,Transform3D(ns.rotation(rotName),Position(x,y,z))); - str << "Volume: " << mother.name() << " positioned daughter "<< mother.name(); - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + LogDebug("TECGeom") << "Volume: " << mother.name() << " positioned daughter "<< mother.name(); } static void doPos(ParsingContext& ctxt, Volume toPos, Volume mother, @@ -63,7 +57,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); @@ -147,25 +140,22 @@ static long algorithm(Detector& /* description */, double siReenforceThick = args.value<double>("SiReenforcementThick");// Thick string siReenforceMat = args.value<string>("SiReenforcementMaterial"); // Materieal - str << "debug: ModuleThick " << moduleThick + LogDebug("TECGeom") << "debug: ModuleThick " << moduleThick << " Detector Tilt " << detTilt/CLHEP::deg << " Height " << fullHeight << " dl(Top) " << dlTop << " dl(Bottom) " << dlBottom << " dl(Hybrid) " << dlHybrid << " rPos " << rPos << " standrad rotation " << standardRot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Frame Width " << frameWidth + LogDebug("TECGeom") << "debug: Frame Width " << frameWidth << " Thickness " << frameThick << " Overlap " << frameOver; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Top Frame Material " + LogDebug("TECGeom") << "debug: Top Frame Material " << topFrameMat << " Height " << topFrameHeight << " Top Width " << topFrameTopWidth << " Bottom Width " << topFrameTopWidth << " Thickness " << topFrameThick <<" positioned at" << topFrameZ; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug : Side Frame Material " + LogDebug("TECGeom") << "debug : Side Frame Material " << sideFrameMat << " Thickness " << sideFrameThick << " left Leg's Width: " << sideFrameLWidth << " left Leg's Height: " << sideFrameLHeight @@ -175,74 +165,61 @@ static long algorithm(Detector& /* description */, << " right Leg's tilt(theta): " << sideFrameRtheta << "Supplies Box's Material: " << siFrSuppBoxMat << " positioned at" << sideFrameZ; - for (int i= 0; i < (int)(siFrSuppBoxWidth.size());i++){ - str << " Supplies Box" << i << "'s Width: " + for (int i= 0; i < (int)(siFrSuppBoxWidth.size());i++) + LogDebug("TECGeom") << " Supplies Box" << i << "'s Width: " << siFrSuppBoxWidth[i] << " Supplies Box" << i <<"'s Height: " << siFrSuppBoxHeight[i] << " Supplies Box" << i << "'s y Position: " << siFrSuppBoxYPos[i]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - } - str << "debug: Wafer Material " + LogDebug("TECGeom") << "debug: Wafer Material " << waferMat << " Side Width Top" << sideWidthTop << " Side Width Bottom" << sideWidthBottom << " and positioned at "<<waferPosition << " positioned with rotation" << " matrix:" << waferRot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Active Material " + LogDebug("TECGeom") << "debug: Active Material " << activeMat << " Height " << activeHeight << " rotated by " << activeRot << " translated by (0,0," << -0.5 * backplaneThick << ")" << " Thickness/Z" << waferThick-backplaneThick << "/" << activeZ; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Hybrid Material " + LogDebug("TECGeom") << "debug: Hybrid Material " << hybridMat << " Height " << hybridHeight << " Width " << hybridWidth << " Thickness " << hybridThick << " Z" << hybridZ; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Pitch Adapter Material " + LogDebug("TECGeom") << "debug: Pitch Adapter Material " << pitchMat << " Height " << pitchHeight << " Thickness " << pitchThick << " position with " << " rotation " << pitchRot << " at Z" << pitchZ; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: Bridge Material " + LogDebug("TECGeom") << "debug: Bridge Material " << bridgeMat << " Width " << bridgeWidth << " Thickness " << bridgeThick << " Height " << bridgeHeight << " Separation "<< bridgeSep; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "FALTBOOT DDTECModuleAlgo debug : Si-Reenforcement Material " + LogDebug("TECGeom") << "FALTBOOT DDTECModuleAlgo debug : Si-Reenforcement Material " << sideFrameMat << " Thickness " << siReenforceThick; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - for (int i= 0; i < (int)(siReenforceWidth.size());i++){ - str << " SiReenforcement" << i << "'s Width: " + for (int i= 0; i < (int)(siReenforceWidth.size());i++) + LogDebug("TECGeom") << " SiReenforcement" << i << "'s Width: " << siReenforceWidth[i] << " SiReenforcement" << i << "'s Height: " << siReenforceHeight[i] << " SiReenforcement" << i << "'s y Position: " <<siReenforceYPos[i]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - } + if(!isStereo){ - str << "This is a normal module, in ring "<<ringNo<<"!"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - } else { - str << "This is a stereo module, in ring "<<ringNo<<"!"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "Phi Position corrected by " << posCorrectionPhi << "*rad"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << "debug: stereo Top Frame 2nd Part left Heigt " + LogDebug("TECGeom") << "This is a normal module, in ring "<<ringNo<<"!"; + } + else { + LogDebug("TECGeom") << "This is a stereo module, in ring "<<ringNo<<"!"; + LogDebug("TECGeom") << "Phi Position corrected by " << posCorrectionPhi << "*rad"; + LogDebug("TECGeom") << "debug: stereo Top Frame 2nd Part left Heigt " << topFrame2LHeight << " right Height " << topFrame2RHeight << " Width " << topFrame2Width ; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); - str << " left Leg's lower Width: " << sideFrameLWidthLow + LogDebug("TECGeom") << " left Leg's lower Width: " << sideFrameLWidthLow << " right Leg's lower Width: " << sideFrameRWidthLow; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); } // Execution part: - str << "==>> Constructing DDTECModuleAlgo: "; + LogDebug("TECGeom") << "==>> Constructing DDTECModuleAlgo: "; //declarations double tmp; //names @@ -252,8 +229,7 @@ static long algorithm(Detector& /* description */, //usefull constants const double topFrameEndZ = 0.5 * (-waferPosition + fullHeight) + pitchHeight + hybridHeight - topFrameHeight; string idName = ns.prepend(ns.obj_name(mother.name())); - str << "idName: " << idName << " parent " << mother.name() << " namespace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + LogDebug("TECGeom") << "idName: " << idName << " parent " << mother.name() << " namespace " << ns.name; Solid solid; //set global parameters @@ -283,12 +259,11 @@ static long algorithm(Detector& /* description */, if(isStereo) bl1 = 0.5 * sideFrameLWidthLow; solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); ns.addSolidNS(name,solid); - str << "Solid: " << solid.name() + LogDebug("TECGeom") << "Solid: " << solid.name() << " Trap made of " << sideFrameMat << " of dimensions " << dz << ", "<<thet<<", 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume sideFrameLeft(name, solid, ns.material(sideFrameMat)); ns.addVolumeNS(sideFrameLeft); //translate @@ -320,12 +295,11 @@ static long algorithm(Detector& /* description */, if(isStereo) bl1 = 0.5 * sideFrameRWidthLow; solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << sideFrameMat << " of dimensions " << dz << ", "<<thet<<", 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume sideFrameRight(name, solid, ns.material(sideFrameMat)); ns.addVolumeNS(sideFrameRight); //translate @@ -360,12 +334,11 @@ static long algorithm(Detector& /* description */, // ^-- this calculates the lower left angel of the tipped trapezoid, which is the SideFframe... solid = Trap(dz, thet,0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << siFrSuppBoxMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume siFrSuppBox(name, solid, matter); ns.addVolumeNS(siFrSuppBox); //translate @@ -394,10 +367,9 @@ static long algorithm(Detector& /* description */, dz = 0.5 * hybridHeight; solid = Box(dx, dy, dz); ns.addSolidNS(name, solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Box made of " << hybridMat << " of dimensions " << dx << ", " << dy << ", " << dz; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume hybrid(name, solid, ns.material(hybridMat)); ns.addVolumeNS(hybrid); @@ -415,12 +387,11 @@ static long algorithm(Detector& /* description */, dz = 0.5 * fullHeight; solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << waferMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume wafer(name, solid, ns.material(waferMat)); ypos = activeZ; @@ -440,12 +411,11 @@ static long algorithm(Detector& /* description */, } solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << activeMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl1 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume active(name, solid, ns.material(activeMat)); ns.addVolumeNS(active); doPos(ctxt, active, wafer, 1, -0.5 * backplaneThick,0,0, activeRot); // from the definition of the wafer local axes and doPos() routine @@ -467,12 +437,11 @@ static long algorithm(Detector& /* description */, } solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << inactiveMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl1 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume inactive(name, solid, ns.material(inactiveMat)); ns.addVolumeNS(inactive); ypos = inactivePos - 0.5*activeHeight; @@ -486,10 +455,9 @@ static long algorithm(Detector& /* description */, dz = 0.5 * pitchHeight; solid = Box(dx, dy, dz); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Box made of " << pitchMat <<" of dimensions " << dx << ", " << dy << ", " << dz; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); } else { dz = 0.5 * pitchWidth; h1 = 0.5 * pitchThick; @@ -498,13 +466,12 @@ static long algorithm(Detector& /* description */, thet = atan((bl1-bl2)/(2.*dz)); solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); ns.addSolidNS(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << pitchMat << " of dimensions " << dz << ", " << thet/CLHEP::deg << ", 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); } xpos = 0; ypos = pitchZ; @@ -529,12 +496,11 @@ static long algorithm(Detector& /* description */, solid = Trap(dz, 0, 0, h1, bl1, bl1,0, h1, bl2, bl2, 0); ns.addSolid(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << topFrameMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume topFrame(name, solid, ns.material(topFrameMat)); ns.addVolumeNS(topFrame); @@ -549,12 +515,11 @@ static long algorithm(Detector& /* description */, solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); ns.addSolid(name,solid); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << topFrameMat << " of dimensions " << dz << ", " << thet/CLHEP::deg << ", 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); } // Position the topframe @@ -580,12 +545,11 @@ static long algorithm(Detector& /* description */, dz = 0.5 * siReenforceHeight[i]; bl1 = bl2 = 0.5 * siReenforceWidth[i]; solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << matter.name() << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume siReenforce(name, solid, matter); ns.addVolumeNS(siReenforce); //translate @@ -612,34 +576,30 @@ static long algorithm(Detector& /* description */, h1 = 0.5 * bridgeThick; dz = 0.5 * bridgeHeight; solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Trap made of " << bridgeMat << " of dimensions " << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 << ", 0, " << h1 << ", " << bl2 << ", " << bl2 << ", 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume bridge(name, solid, ns.material(bridgeMat)); ns.addVolumeNS(bridge); name = idName + "BridgeGap"; bl1 = 0.5*bridgeSep; solid = Box(bl1, h1, dz); - str << "Solid:\t" << solid.name() + LogDebug("TECGeom") << "Solid:\t" << solid.name() << " Box made of " << genMat << " of dimensions " << bl1 << ", " << h1 << ", " << dz; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); Volume bridgeGap(name, solid, ns.material(genMat)); ns.addVolumeNS(bridgeGap); /* PlacedVolume pv = */ bridge.placeVolume(bridgeGap); - str << "Solid: " << bridgeGap.name() + LogDebug("TECGeom") << "Solid: " << bridgeGap.name() << " number 1 positioned in " << bridge.name() << " at (0,0,0) with no rotation"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); } - str << "<<== End of DDTECModuleAlgo construction ..."; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECModuleAlgo",str); + LogDebug("TECGeom") << "<<== End of DDTECModuleAlgo construction ..."; return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTECModuleAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTECModuleAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp b/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp index 76e99613f..803790537 100644 --- a/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp +++ b/DDCMS/src/plugins/DDTECOptoHybAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt,e,true); AlgoArguments args(ctxt, e); int startCopyNo = args.value<int>("StartCopyNo"); @@ -44,15 +39,13 @@ static long algorithm(Detector& /* description */, Volume child = ns.volume(args.value<string>("ChildName")); Volume mother = ns.volume(args.parentName()); - str << "Parent " << mother.name() << " Child " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); - - str << "Height of the Hybrid " - << optoHeight << " and Width " << optoWidth - <<"Rpos " << rpos << " Zpos " << zpos - << " StartCopyNo " << startCopyNo << " Number " - << angles.size(); - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + LogDebug("TECGeom") << "Parent " << mother.name() + << " Child " << child.name() << " NameSpace " << ns.name; + LogDebug("TECGeom") << "Height of the Hybrid " + << optoHeight << " and Width " << optoWidth + <<"Rpos " << rpos << " Zpos " << zpos + << " StartCopyNo " << startCopyNo << " Number " + << angles.size(); // given r positions are for the lower left corner rpos += optoHeight/2; @@ -76,25 +69,22 @@ static long algorithm(Detector& /* description */, } else { double theta = 90.*CLHEP::deg; - str << "test: Creating a new " - << "rotation: " << rotstr << "\t90., " - << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg - << ", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + LogDebug("TECGeom") << "test: Creating a new " + << "rotation: " << rotstr << "\t90., " + << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg + << ", 0, 0"; rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); } } mother.placeVolume(child, Transform3D(rotation,tran)); - str << "test " << child.name() << " number " - << copyNo << " positioned in " << mother.name() << " at " - << tran << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + LogDebug("TECGeom") << "test " << child.name() << " number " + << copyNo << " positioned in " << mother.name() << " at " + << tran << " with " << rotation; copyNo++; } - str << "<<== End of DDTECOptoHybAlgo construction ..."; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECOptoHybAlgo",str); + LogDebug("TECGeom") << "<<== End of DDTECOptoHybAlgo construction ..."; return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTECOptoHybAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTECOptoHybAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECPhiAlgo.cpp b/DDCMS/src/plugins/DDTECPhiAlgo.cpp index 85c04c917..e14311814 100644 --- a/DDCMS/src/plugins/DDTECPhiAlgo.cpp +++ b/DDCMS/src/plugins/DDTECPhiAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); @@ -45,18 +40,16 @@ static long algorithm(Detector& /* description */, int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number - str << "debug: Parameters for " + LogDebug("TECGeom") << "debug: Parameters for " << "positioning--" << "\tStartAngle " << startAngle/CLHEP::deg << "\tIncrAngle " << incrAngle/CLHEP::deg << "\tZ in/out " << zIn << ", " << zOut << "\tCopy Numbers " << number << " Start/Increment " << startCopyNo << ", " << incrCopyNo; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); - str << "debug: Parent " << mother.name() + LogDebug("TECGeom") << "debug: Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); if (number > 0) { double theta = 90.*CLHEP::deg; @@ -67,10 +60,9 @@ static long algorithm(Detector& /* description */, Rotation3D rotation = make_rotation3D(theta, phix, theta, phiy, 0, 0); Position tran(0., 0., (i%2 == 0) ? zIn : zOut); /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); - str << "test: " << child.name() <<" number " + LogDebug("TECGeom") << "test: " << child.name() <<" number " << copyNo << " positioned in " << mother.name() <<" at " << tran << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAlgo",str); copyNo += incrCopyNo; } } @@ -78,4 +70,4 @@ static long algorithm(Detector& /* description */, } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTECPhiAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTECPhiAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp b/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp index b14a52d28..3d355a498 100644 --- a/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp +++ b/DDCMS/src/plugins/DDTECPhiAltAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); @@ -45,18 +40,16 @@ static long algorithm(Detector& /* description */, int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number - str << "debug: Parameters for " + LogDebug("TECGeom") << "debug: Parameters for " << "positioning--" << "\tStartAngle " << startAngle/CLHEP::deg << "\tIncrAngle " << incrAngle/CLHEP::deg << "\tZ in/out " << zIn << ", " << zOut << "\tCopy Numbers " << number << " Start/Increment " << startCopyNo << ", " << incrCopyNo; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); - str << "debug: Parent " << mother.name() + LogDebug("TECGeom") << "debug: Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); if (number > 0) { double theta = 90.*CLHEP::deg; @@ -67,10 +60,9 @@ static long algorithm(Detector& /* description */, Rotation3D rotation = make_rotation3D(theta, phix, 0e0, 0e0, theta, phiz); Position tran(0., 0., (i%2 == 0) ? zIn : zOut); /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); - str << "test: " << child.name() <<" number " + LogDebug("TECGeom") << "test: " << child.name() <<" number " << copyNo << " positioned in " << mother.name() <<" at " << tran << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTECPhiAltAlgo",str); copyNo += incrCopyNo; } } @@ -78,5 +70,5 @@ static long algorithm(Detector& /* description */, } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTECPhiAltAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTECPhiAltAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIBLayerAlgo.cpp b/DDCMS/src/plugins/DDTIBLayerAlgo.cpp index ccc991dff..75eb159f4 100644 --- a/DDCMS/src/plugins/DDTIBLayerAlgo.cpp +++ b/DDCMS/src/plugins/DDTIBLayerAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,15 +28,542 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; + typedef vector<double> vecdouble; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); - //Volume mother = ns.volume(args.parentName()); + string mother = args.parentName(); + string genMat = args.str("GeneralMaterial"); //General material name + double detectorTilt = args.dble("DetectorTilt"); //Detector Tilt + double layerL = args.dble("LayerL"); //Length of the layer + + double radiusLo = args.dble("RadiusLo"); //Radius for detector at lower level + int stringsLo = args.integer("StringsLo"); //Number of strings ...... + string detectorLo = args.str("StringDetLoName"); //Detector string name ...... + + double radiusUp = args.dble("RadiusUp"); //Radius for detector at upper level + int stringsUp = args.integer("StringsUp"); //Number of strings ...... + string detectorUp = args.str("StringDetUpName"); //Detector string name ...... + + double cylinderT = args.dble("CylinderThickness"); //Cylinder thickness + double cylinderInR = args.dble("CylinderInnerRadius"); //Cylinder inner radius + string cylinderMat = args.str("CylinderMaterial"); //Cylinder material + double MFRingInR = args.dble("MFRingInnerRadius"); //Inner Manifold Ring Inner Radius + double MFRingOutR = args.dble("MFRingOuterRadius"); //Outer Manifold Ring Outer Radius + double MFRingT = args.dble("MFRingThickness"); //Manifold Ring Thickness + double MFRingDz = args.dble("MFRingDeltaz"); //Manifold Ring Half Lenght + string MFIntRingMat = args.str("MFIntRingMaterial"); //Manifold Ring Material + string MFExtRingMat = args.str("MFExtRingMaterial"); //Manifold Ring Material + + double supportT = args.dble("SupportThickness"); //Cylinder barrel CF skin thickness + + string centMat = args.str("CentRingMaterial"); //Central rings material + vecdouble centRing1par = args.vecDble("CentRing1"); //Central rings parameters + vecdouble centRing2par = args.vecDble("CentRing2"); //Central rings parameters + + string fillerMat = args.str("FillerMaterial"); //Filler material + double fillerDz = args.dble("FillerDeltaz"); //Filler Half Length + + string ribMat = args.str("RibMaterial"); //Rib material + vecdouble ribW = args.vecDble("RibWidth"); //Rib width + vecdouble ribPhi = args.vecDble("RibPhi"); //Rib Phi position + + vecdouble dohmListFW = args.vecDble("DOHMListFW"); //DOHM/AUX positions in #strings FW + vecdouble dohmListBW = args.vecDble("DOHMListBW"); //DOHM/AUX positions in #strings BW + + double dohmtoMF = args.dble("DOHMtoMFDist"); //DOHM Distance to MF + double dohmCarrierPhiOff = args.dble("DOHMCarrierPhiOffset"); //DOHM Carrier Phi offset wrt horizontal + string dohmPrimName = args.str("StringDOHMPrimName"); //DOHM Primary Logical Volume name + string dohmAuxName = args.str("StringDOHMAuxName"); //DOHM Auxiliary Logical Volume name + + string dohmCarrierMaterial = args.str("DOHMCarrierMaterial");//DOHM Carrier Material + string dohmCableMaterial = args.str("DOHMCableMaterial"); //DOHM Cable Material + double dohmPrimL = args.dble("DOHMPRIMLength"); //DOHM PRIMary Length + string dohmPrimMaterial = args.str("DOHMPRIMMaterial"); //DOHM PRIMary Material + double dohmAuxL = args.dble("DOHMAUXLength"); //DOHM AUXiliary Length + string dohmAuxMaterial = args.str("DOHMAUXMaterial"); //DOHM AUXiliary Material + + string pillarMaterial = args.str("PillarMaterial"); //Pillar Material + + double fwIntPillarDz = args.dble("FWIntPillarDz"); //Internal pillar parameters + double fwIntPillarDPhi = args.dble("FWIntPillarDPhi"); + vecdouble fwIntPillarZ = args.vecDble("FWIntPillarZ"); + vecdouble fwIntPillarPhi = args.vecDble("FWIntPillarPhi"); + double bwIntPillarDz = args.dble("BWIntPillarDz"); + double bwIntPillarDPhi = args.dble("BWIntPillarDPhi"); + vecdouble bwIntPillarZ = args.vecDble("BWIntPillarZ"); + vecdouble bwIntPillarPhi = args.vecDble("BWIntPillarPhi"); + + double fwExtPillarDz = args.dble("FWExtPillarDz"); //External pillar parameters + double fwExtPillarDPhi = args.dble("FWExtPillarDPhi"); + vecdouble fwExtPillarZ = args.vecDble("FWExtPillarZ"); + vecdouble fwExtPillarPhi = args.vecDble("FWExtPillarPhi"); + double bwExtPillarDz = args.dble("BWExtPillarDz"); + double bwExtPillarDPhi = args.dble("BWExtPillarDPhi"); + vecdouble bwExtPillarZ = args.vecDble("BWExtPillarZ"); + vecdouble bwExtPillarPhi = args.vecDble("BWExtPillarPhi"); + + LogDebug("TIBGeom") << "Parent " << mother + << " NameSpace " << ns.name + << " General Material " << genMat; + LogDebug("TIBGeom") << "Lower layer Radius " << radiusLo + << " Number " << stringsLo << " String " << detectorLo; + LogDebug("TIBGeom") << "Upper layer Radius "<< radiusUp + << " Number " << stringsUp << " String " << detectorUp; + LogDebug("TIBGeom") << "Cylinder Material/thickness " << cylinderMat << " " << cylinderT + << " Rib Material " << ribMat << " at " << ribW.size() << " positions with width/phi"; + for (unsigned int i = 0; i < ribW.size(); i++) { + LogDebug("TIBGeom") << "\tribW[" << i << "] = " << ribW[i] + << "\tribPhi[" << i << "] = " << ribPhi[i]/CLHEP::deg; + } + LogDebug("TIBGeom") << "DOHM Primary " << " Material " << dohmPrimMaterial << " Length " << dohmPrimL; + LogDebug("TIBGeom") << "DOHM Aux " << " Material " << dohmAuxMaterial << " Length " << dohmAuxL; + for (double i : dohmListFW) { + if (i>0.) LogDebug("TIBGeom") << "DOHM Primary at FW Position " << i; + if (i<0.) LogDebug("TIBGeom") << "DOHM Aux at FW Position " << -i; + } + for (double i : dohmListBW) { + if (i>0.) LogDebug("TIBGeom") << "DOHM Primary at BW Position " << i; + if (i<0.) LogDebug("TIBGeom") << "DOHM Aux at BW Position " << -i; + } + LogDebug("TIBGeom") << "FW Internal Pillar [Dz, DPhi] " << fwIntPillarDz << ", " << fwIntPillarDPhi; + for (unsigned int i=0; i<fwIntPillarZ.size(); i++) { + if( fwIntPillarPhi[i]>0. ) { + LogDebug("TIBGeom") << " at positions [z, phi] " << fwIntPillarZ[i] << " " << fwIntPillarPhi[i]; + } + } + LogDebug("TIBGeom") << "BW Internal Pillar [Dz, DPhi] " << bwIntPillarDz << ", " << bwIntPillarDPhi; + for (unsigned int i=0; i<bwIntPillarZ.size(); i++) { + if( bwIntPillarPhi[i]>0. ) { + LogDebug("TIBGeom") << " at positions [z, phi] " << bwIntPillarZ[i] << " " << bwIntPillarPhi[i]; + } + } + LogDebug("TIBGeom") << "FW External Pillar [Dz, DPhi] " << fwExtPillarDz << ", " << fwExtPillarDPhi; + for (unsigned int i=0; i<fwExtPillarZ.size(); i++) { + if( fwExtPillarPhi[i]>0. ) { + LogDebug("TIBGeom") << " at positions [z, phi] " << fwExtPillarZ[i] << " " << fwExtPillarPhi[i]; + } + } + LogDebug("TIBGeom") << "BW External Pillar [Dz, DPhi] " << bwExtPillarDz << ", " << bwExtPillarDPhi; + for (unsigned int i=0; i<bwExtPillarZ.size(); i++) { + if( bwExtPillarPhi[i]>0. ) { + LogDebug("TIBGeom") << " at positions [z, phi] " << bwExtPillarZ[i] << " " << bwExtPillarPhi[i]; + } + } + + string idName = mother; + double rmin = MFRingInR; + double rmax = MFRingOutR; + Solid solid = ns.addSolidNS(idName,Tube(rmin, rmax, 0.5*layerL)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rmin << " Rout " << rmax << " ZHalf " << 0.5*layerL; + Volume layer = ns.addVolumeNS(Volume(idName, solid, ns.material(genMat))); + + //Internal layer first + double rin = rmin+MFRingT; + // double rout = 0.5*(radiusLo+radiusUp-cylinderT); + double rout = cylinderInR; + string name = idName + "Down"; + solid = ns.addSolidNS(name,Tube(rin, rout, 0.5*layerL)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << 0.5*layerL; + Volume layerIn = ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + layer.placeVolume(layerIn); // copyNr=1 ! + LogDebug("TIBGeom") << layerIn.name() + << " number 1 positioned in " << layer.name() + << " at (0,0,0) with no rotation"; + + double rposdet = radiusLo; + double dphi = CLHEP::twopi/stringsLo; + Volume detIn = ns.volume(detectorLo); + for (int n = 0; n < stringsLo; n++) { + double phi = (n+0.5)*dphi; + double phix = phi - detectorTilt + 90*CLHEP::deg; + double theta = 90*CLHEP::deg; + double phiy = phix + 90.*CLHEP::deg; + Rotation3D rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + Position trdet(rposdet*cos(phi), rposdet*sin(phi), 0); + layerIn.placeVolume(detIn, Transform3D(rotation,trdet)); // copyNr=n+1 + LogDebug("TIBGeom") << detIn.name() << " number " << n+1 << " positioned in " + << layerIn.name() << " at " << trdet << " with " + << rotation; + } + + //Now the external layer + rin = cylinderInR + cylinderT; + rout = rmax-MFRingT; + name = idName + "Up"; + solid = ns.addSolidNS(name,Tube(rin, rout, 0.5*layerL)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << 0.5*layerL; + Volume layerOut = ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + layer.placeVolume(layerOut); // CopyNr again 1 ?? + LogDebug("TIBGeom") << layerOut.name() + << " number 1 positioned in " << layer.name() + << " at (0,0,0) with no rotation"; + + rposdet = radiusUp; + dphi = CLHEP::twopi/stringsUp; + Volume detOut = ns.volume(detectorUp); + for (int n = 0; n < stringsUp; n++) { + double phi = (n+0.5)*dphi; + double phix = phi - detectorTilt - 90*CLHEP::deg; + double theta = 90*CLHEP::deg; + double phiy = phix + 90.*CLHEP::deg; + Rotation3D rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + Position trdet(rposdet*cos(phi), rposdet*sin(phi), 0); + layerOut.placeVolume(detOut,Transform3D(rotation,trdet)); + LogDebug("TIBGeom") << "DDTIBLayerAlgo test " << detectorUp + << " number " << n+1 << " positioned in " + << layerOut.name() << " at " << trdet << " with " + << rotation; + } + + // + // Inner cylinder, support wall and ribs + // + // External skins + rin = cylinderInR; + rout = cylinderInR+cylinderT; + name = idName + "Cylinder"; + solid = ns.addSolidNS(name, Tube(rin, rout, 0.5*layerL)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << cylinderMat << " from 0 to " + << CLHEP::twopi/CLHEP::deg << " with Rin " << rin + << " Rout " << rout << " ZHalf " << 0.5*layerL; + Volume cylinder = ns.addVolumeNS(Volume(name, solid, ns.material(cylinderMat))); + layer.placeVolume(cylinder); // CopyNr = 1 + LogDebug("TIBGeom") << cylinder.name() + << " number 1 positioned in " << layer.name() + << " at (0,0,0) with no rotation"; + // + // inner part of the cylinder + // + rin += supportT; + rout -= supportT; + name = idName + "CylinderIn"; + solid = ns.addSolidNS(name, Tube(rin, rout, 0.5*layerL)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << genMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << 0.5*layerL; + Volume cylinderIn = ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + cylinder.placeVolume(cylinderIn); + LogDebug("TIBGeom") << cylinderIn.name() + << " number 1 positioned in " << cylinder.name() + << " at (0,0,0) with no rotation"; + // + // Filler Rings + // + name = idName + "Filler"; + solid = ns.addSolidNS(name,Tube(rin, rout, fillerDz)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << fillerMat << " from " << 0. << " to " + << CLHEP::twopi/CLHEP::deg << " with Rin " << rin + << " Rout " << rout << " ZHalf " << fillerDz; + Volume cylinderFiller = ns.addVolumeNS(Volume(name,solid,ns.material(fillerMat))); + cylinderIn.placeVolume(cylinderFiller,Position(0.0, 0.0, 0.5*layerL-fillerDz)); // copyNr 1 + cylinderIn.placeVolume(cylinderFiller,Position(0.0, 0.0,-0.5*layerL+fillerDz)); // copyNr 2 + LogDebug("TIBGeom") << "DDTIBLayerAlgo test " << cylinderFiller.name() + << " number 1" << " positioned in " + << cylinderIn.name() << " at " << Position(0.0, 0.0, 0.5*layerL-fillerDz) + << " number 2" << " positioned in " + << cylinderIn.name() << " at " << Position(0.0, 0.0,-0.5*layerL+fillerDz); + // + // Ribs + // + Material matrib = ns.material(ribMat); + for (int i = 0; i < (int)(ribW.size()); i++) { + name = idName + "Rib" + std::to_string(i); + double width = 2.*ribW[i]/(rin+rout); + double dz = 0.5*layerL-2.*fillerDz; + double _rmi = std::min(rin+0.5*CLHEP::mm,rout-0.5*CLHEP::mm); + double _rma = std::max(rin+0.5*CLHEP::mm,rout-0.5*CLHEP::mm); + solid = ns.addSolidNS(name,Tube(_rmi,_rma,dz,-0.5*width, width)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << ribMat << " from " << -0.5*width/CLHEP::deg <<" to " + << 0.5*width/CLHEP::deg << " with Rin " + << rin+0.5*CLHEP::mm << " Rout " + << rout-0.5*CLHEP::mm << " ZHalf " << dz; + Volume cylinderRib = ns.addVolumeNS(Volume(name, solid, matrib)); + double phix = ribPhi[i]; + double theta = 90*CLHEP::deg; + double phiy = phix + 90.*CLHEP::deg; + Rotation3D rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + Position tran(0, 0, 0); + cylinderIn.placeVolume(cylinderRib,Transform3D(rotation,tran));// copyNr=1 + LogDebug("TIBGeom") << cylinderRib.name() + << " number 1" << " positioned in " + << cylinderIn.name() << " at " << tran << " with " + << rotation; + } + + //Manifold rings + // + // Inner ones first + rin = MFRingInR; + rout = rin + MFRingT; + name = idName + "InnerMFRing"; + solid = ns.addSolidNS(name,Tube(rin, rout, MFRingDz)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << MFIntRingMat << " from 0 to " + << CLHEP::twopi/CLHEP::deg << " with Rin " << rin + << " Rout " << rout << " ZHalf " << MFRingDz; + Volume inmfr = ns.addVolumeNS(Volume(name, solid, ns.material(MFIntRingMat))); + layer.placeVolume(inmfr, Position(0.0, 0.0, -0.5*layerL+MFRingDz)); // Copy Nr=1 + layer.placeVolume(inmfr, Position(0.0, 0.0, +0.5*layerL+MFRingDz)); // Copy Nr=2 + LogDebug("TIBGeom") << inmfr.name() + << " number 1 and 2 positioned in " << layer.name() + << " at (0,0,+-" << 0.5*layerL-MFRingDz << ") with no rotation"; + + // Outer ones + rout = MFRingOutR; + rin = rout - MFRingT; + name = idName + "OuterMFRing"; + solid= ns.addSolidNS(name,Tube(rin, rout, MFRingDz)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << MFExtRingMat << " from 0 to " + << CLHEP::twopi/CLHEP::deg << " with Rin " << rin + << " Rout " << rout << " ZHalf " << MFRingDz; + + Volume outmfr = ns.addVolumeNS(Volume(name, solid, ns.material(MFExtRingMat))); + layer.placeVolume(outmfr,Position(0.0, 0.0, -0.5*layerL+MFRingDz)); // CopyNr=1 + layer.placeVolume(outmfr,Position(0.0, 0.0, +0.5*layerL+MFRingDz)); // CopyNr=2 + LogDebug("TIBGeom") << outmfr.name() + << " number 1 and 2 positioned in " << layer.name() + << " at (0,0,+-" << 0.5*layerL-MFRingDz + << ") with no rotation"; + + //Central Support rings + // + // Ring 1 + double centZ = centRing1par[0]; + double centDz = 0.5*centRing1par[1]; + rin = centRing1par[2]; + rout = centRing1par[3]; + name = idName + "CentRing1"; + solid = ns.addSolidNS(name,Tube(rin, rout, centDz)); + + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << centMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << centDz; + + Volume cent1 = ns.addVolumeNS(Volume(name, solid, ns.material(centMat))); + layer.placeVolume(cent1,Position(0.0, 0.0, centZ)); // Copy Nr = 1 + LogDebug("TIBGeom") << cent1.name() << " positioned in " << layer.name() + << " at (0,0," << centZ << ") with no rotation"; + // Ring 2 + centZ = centRing2par[0]; + centDz = 0.5*centRing2par[1]; + rin = centRing2par[2]; + rout = centRing2par[3]; + name = idName + "CentRing2"; + solid = ns.addSolidNS(name, Tube(rin, rout, centDz)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << centMat << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << centDz; + + Volume cent2 = ns.addVolumeNS(Volume(name, solid, ns.material(centMat))); + layer.placeVolume(cent2, Position(0e0,0e0,centZ)); // copyNr=1 + LogDebug("TIBGeom") << cent2.name() + << " positioned in " << layer.name() + << " at (0,0," << centZ << ") with no rotation"; + + ////// DOHM + // + // Preparing DOHM Carrier solid + + name = idName + "DOHMCarrier"; + double dohmCarrierRin = MFRingOutR - MFRingT; + double dohmCarrierRout = MFRingOutR; + double dohmCarrierDz = 0.5*(dohmPrimL+dohmtoMF); + double dohmCarrierZ = 0.5*layerL-2.*MFRingDz-dohmCarrierDz; + + solid = ns.addSolidNS(name,Tube(dohmCarrierRin, dohmCarrierRout, + dohmCarrierPhiOff, dohmCarrierDz, + 180.*CLHEP::deg-2.*dohmCarrierPhiOff)); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " + << dohmCarrierMaterial << " from " + << dohmCarrierPhiOff << " to " + << 180.*CLHEP::deg-dohmCarrierPhiOff << " with Rin " + << dohmCarrierRin << " Rout " << MFRingOutR << " ZHalf " + << dohmCarrierDz; + + // Define FW and BW carrier logical volume and + // place DOHM Primary and auxiliary modules inside it + dphi = CLHEP::twopi/stringsUp; + + Rotation3D dohmRotation; + double dohmR = 0.5*(dohmCarrierRin+dohmCarrierRout); + + for (int j = 0; j<4; j++) { + vector<double> dohmList; + Position tran; + string rotstr; + Rotation3D rotation; + int dohmCarrierReplica=0; + int placeDohm = 0; + + switch (j){ + case 0: + name = idName + "DOHMCarrierFW"; + dohmList = dohmListFW; + tran = Position(0., 0., dohmCarrierZ); + rotstr = idName + "FwUp"; + rotation = Rotation3D(); + dohmCarrierReplica = 1; + placeDohm=1; + break; + case 1: + name = idName + "DOHMCarrierFW"; + dohmList = dohmListFW; + tran = Position(0., 0., dohmCarrierZ); + rotstr = idName + "FwDown"; + rotation = make_rotation3D(90.*CLHEP::deg, 180.*CLHEP::deg, 90.*CLHEP::deg,270.*CLHEP::deg, 0.,0.); + dohmCarrierReplica = 2; + placeDohm=0; + break; + case 2: + name = idName + "DOHMCarrierBW"; + dohmList = dohmListBW; + tran = Position(0., 0., -dohmCarrierZ); + rotstr = idName + "BwUp"; + rotation = make_rotation3D(90.*CLHEP::deg, 180.*CLHEP::deg, 90.*CLHEP::deg, 90.*CLHEP::deg, 180.*CLHEP::deg, 0.); + dohmCarrierReplica = 1; + placeDohm=1; + break; + case 3: + name = idName + "DOHMCarrierBW"; + dohmList = dohmListBW; + tran = Position(0., 0., -dohmCarrierZ); + rotstr = idName + "BwDown"; + rotation = make_rotation3D(90.*CLHEP::deg, 0., 90.*CLHEP::deg, 270.*CLHEP::deg, 180.*CLHEP::deg, 0.); + dohmCarrierReplica = 2; + placeDohm=0; + break; + } + + Volume dohmCarrier = ns.addVolumeNS(Volume(name,solid,ns.material(dohmCarrierMaterial))); + int primReplica = 0; + int auxReplica = 0; + + for (int i = 0; i < placeDohm*((int)(dohmList.size())); i++) { + double phi = (std::abs(dohmList[i])+0.5-1.)*dphi; + double phix = phi + 90*CLHEP::deg; + double theta = 90*CLHEP::deg; + double phiy = phix + 90.*CLHEP::deg; + dohmRotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); + + string dohmName; + int dohmReplica = 0; + double dohmZ = 0.; + Volume dohm; + + if(dohmList[i]<0.) { + // Place a Auxiliary DOHM + dohm = ns.volume(dohmAuxName); + dohmZ = dohmCarrierDz - 0.5*dohmAuxL - dohmtoMF; + primReplica++; + dohmReplica = primReplica; + + } else { + // Place a Primary DOHM + dohm = ns.volume(dohmPrimName); + dohmZ = dohmCarrierDz - 0.5*dohmPrimL - dohmtoMF; + auxReplica++; + dohmReplica = auxReplica; + } + + Position dohmTrasl(dohmR*cos(phi), dohmR*sin(phi), dohmZ); + dohmCarrier.placeVolume(dohm,Transform3D(dohmRotation,dohmTrasl)); + LogDebug("TIBGeom") << dohm.name() + << " replica " << dohmReplica << " positioned in " + << dohmCarrier.name() << " at " << dohmTrasl << " with " + << dohmRotation; + } + + layer.placeVolume(dohmCarrier, Transform3D(rotation,tran));// copyNr = dohmCarrierReplica + LogDebug("TIBGeom") << "DDTIBLayerAlgo test " + << dohmCarrier.name() << " positioned in " << mother + << " replica " << dohmCarrierReplica << " at " + << tran << " with " << rotation; + } - str << "Not implemented. To be done.... ";// << mother.name(); - printout(WARNING,"DDTIBLayerAlgo",str); + ////// PILLARS + for (int j = 0; j<4; j++) { + vector<double> pillarZ; + vector<double> pillarPhi; + double pillarDz=0, pillarDPhi=0, pillarRin=0, pillarRout=0; + + switch (j){ + case 0: + name = idName + "FWIntPillar"; + pillarZ = fwIntPillarZ; + pillarPhi = fwIntPillarPhi; + pillarRin = MFRingInR; + pillarRout = MFRingInR + MFRingT; + pillarDz = fwIntPillarDz; + pillarDPhi = fwIntPillarDPhi; + break; + case 1: + name = idName + "BWIntPillar"; + pillarZ = bwIntPillarZ; + pillarPhi = bwIntPillarPhi; + pillarRin = MFRingInR; + pillarRout = MFRingInR + MFRingT; + pillarDz = bwIntPillarDz; + pillarDPhi = bwIntPillarDPhi; + break; + case 2: + name = idName + "FWExtPillar"; + pillarZ = fwExtPillarZ; + pillarPhi = fwExtPillarPhi; + pillarRin = MFRingOutR - MFRingT; + pillarRout = MFRingOutR; + pillarDz = fwExtPillarDz; + pillarDPhi = fwExtPillarDPhi; + break; + case 3: + name = idName + "BWExtPillar"; + pillarZ = bwExtPillarZ; + pillarPhi = bwExtPillarPhi; + pillarRin = MFRingOutR - MFRingT; + pillarRout = MFRingOutR; + pillarDz = bwExtPillarDz; + pillarDPhi = bwExtPillarDPhi; + break; + } + + solid = ns.addSolidNS(name,Tube(pillarRin, pillarRout, pillarDz, -pillarDPhi, 2.*pillarDPhi)); + Volume Pillar = ns.addVolumeNS(Volume(name,solid,ns.material(pillarMaterial))); + LogDebug("TIBGeom") << solid.name() << " Tubs made of " << pillarMaterial << " from " + << -pillarDPhi << " to " << pillarDPhi << " with Rin " + << pillarRin << " Rout " << pillarRout << " ZHalf " + << pillarDz; + Position pillarTran; + Rotation3D pillarRota; + int pillarReplica = 0; + for (unsigned int i=0; i<pillarZ.size(); i++) { + if( pillarPhi[i]>0. ) { + pillarTran = Position(0., 0., pillarZ[i]); + pillarRota = make_rotation3D(90.*CLHEP::deg, pillarPhi[i], 90.*CLHEP::deg, 90.*CLHEP::deg+pillarPhi[i], 0., 0.); + layer.placeVolume(Pillar,Transform3D(pillarRota,pillarTran)); // copyNr i + LogDebug("TIBGeom") << Pillar.name() << " positioned in " + << mother << " at " + << pillarTran << " with " << pillarRota + << " copy number " << pillarReplica; + pillarReplica++; + } + } + } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTIBLayerAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTIBLayerAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIDModuleAlgo.cpp b/DDCMS/src/plugins/DDTIDModuleAlgo.cpp index a820afd62..b762fe977 100644 --- a/DDCMS/src/plugins/DDTIDModuleAlgo.cpp +++ b/DDCMS/src/plugins/DDTIDModuleAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,15 +28,441 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); - //Volume mother = ns.volume(args.parentName()); - - str << "Not implemented. To be done.... ";// << mother.name(); - printout(WARNING,"DDTIDModuleAlgo",str); + string mother = args.parentName(); + string genMat = args.str("GeneralMaterial"); //General material name + int detectorN = args.integer("DetectorNumber"); //Detector planes + double moduleThick = args.dble("ModuleThick"); //Module thickness + double detTilt = args.dble("DetTilt"); //Tilt of stereo detector + double fullHeight = args.dble("FullHeight"); //Height + double dlTop = args.dble("DlTop"); //Width at top of wafer + double dlBottom = args.dble("DlBottom"); //Width at bottom of wafer + double dlHybrid = args.dble("DlHybrid"); //Width at the hybrid end + bool doComponents = ::toupper(args.str("DoComponents")[0]) != 'N'; //Components to be made + + string boxFrameName = args.str("BoxFrameName"); //Top frame name + string boxFrameMat = args.str("BoxFrameMaterial"); // material + double boxFrameHeight = args.dble("BoxFrameHeight"); // height + double boxFrameThick = args.dble("BoxFrameThick"); // thickness + double boxFrameWidth = args.dble("BoxFrameWidth"); // extra width + double bottomFrameHeight = args.dble("BottomFrameHeight"); //Bottom of the frame + double bottomFrameOver = args.dble("BottomFrameOver"); // overlap + double topFrameHeight = args.dble("TopFrameHeight"); //Top of the frame + double topFrameOver = args.dble("TopFrameOver"); // overlap + vector<string> sideFrameName = args.vecStr("SideFrameName"); //Side frame name + string sideFrameMat = args.str("SideFrameMaterial"); // material + double sideFrameWidth = args.dble("SideFrameWidth"); // width + double sideFrameThick = args.dble("SideFrameThick"); // thickness + double sideFrameOver = args.dble("SideFrameOver"); // overlap (wrt wafer) + vector<string> holeFrameName = args.vecStr("HoleFrameName"); //Hole in the frame name + vector<string> holeFrameRot = args.vecStr("HoleFrameRotation"); // Rotation matrix + + vector<string> kaptonName = args.vecStr("KaptonName"); //Kapton circuit name + string kaptonMat = args.str("KaptonMaterial"); // material + double kaptonThick = args.dble("KaptonThick"); // thickness + double kaptonOver = args.dble("KaptonOver"); // overlap (wrt Wafer) + vector<string> holeKaptonName = args.vecStr("HoleKaptonName"); //Hole in the kapton circuit name + vector<string> holeKaptonRot = args.vecStr("HoleKaptonRotation"); // Rotation matrix + + vector<string> waferName = args.vecStr("WaferName"); //Wafer name + string waferMat = args.str("WaferMaterial"); // material + double sideWidthTop = args.dble("SideWidthTop"); // width on the side Top + double sideWidthBottom = args.dble("SideWidthBottom"); // Bottom + vector<string> activeName = args.vecStr("ActiveName"); //Sensitive name + string activeMat = args.str("ActiveMaterial"); // material + double activeHeight = args.dble("ActiveHeight"); // height + vector<double> waferThick = args.vecDble("WaferThick"); // wafer thickness (active = wafer - backplane) + string activeRot = args.str("ActiveRotation"); // Rotation matrix + vector<double> backplaneThick = args.vecDble("BackPlaneThick"); // thickness + string hybridName = args.str("HybridName"); //Hybrid name + string hybridMat = args.str("HybridMaterial"); // material + double hybridHeight = args.dble("HybridHeight"); // height + double hybridWidth = args.dble("HybridWidth"); // width + double hybridThick = args.dble("HybridThick"); // thickness + vector<string> pitchName = args.vecStr("PitchName"); //Pitch adapter name + string pitchMat = args.str("PitchMaterial"); // material + double pitchHeight = args.dble("PitchHeight"); // height + double pitchThick = args.dble("PitchThick"); // thickness + double pitchStereoTol = args.dble("PitchStereoTolerance"); // tolerance in dimensions of the stereo + string coolName = args.str("CoolInsertName"); // Cool insert name + string coolMat = args.str("CoolInsertMaterial"); // material + double coolHeight = args.dble("CoolInsertHeight"); // height + double coolThick = args.dble("CoolInsertThick"); // thickness + double coolWidth = args.dble("CoolInsertWidth"); // width + + LogDebug("TIDGeom") << "Parent " << mother + << " General Material " << genMat + << " Detector Planes " << detectorN; + + LogDebug("TIDGeom") << "ModuleThick " + << moduleThick << " Detector Tilt " << detTilt/CLHEP::deg + << " Height " << fullHeight << " dl(Top) " << dlTop + << " dl(Bottom) " << dlBottom << " dl(Hybrid) " + << dlHybrid << " doComponents " << doComponents; + LogDebug("TIDGeom") << "" << boxFrameName + << " Material " << boxFrameMat << " Thickness " + << boxFrameThick << " width " << boxFrameWidth + << " height " << boxFrameHeight + << " Extra Height at Bottom " << bottomFrameHeight + << " Overlap " << bottomFrameOver; + + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << sideFrameName[i] + << " Material " << sideFrameMat << " Width " + << sideFrameWidth << " Thickness " << sideFrameThick + << " Overlap " << sideFrameOver << " Hole " + << holeFrameName[i]; + + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << kaptonName[i] + << " Material " << kaptonMat + << " Thickness " << kaptonThick + << " Overlap " << kaptonOver << " Hole " + << holeKaptonName[i]; + + LogDebug("TIDGeom") << "Wafer Material " + << waferMat << " Side Width Top " << sideWidthTop + << " Side Width Bottom " << sideWidthBottom; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\twaferName[" << i << "] = " << waferName[i]; + + LogDebug("TIDGeom") << "Active Material " + << activeMat << " Height " << activeHeight + << " rotated by " << activeRot; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << " translated by (0," << -0.5*backplaneThick[i] + << ",0)\tactiveName[" << i << "] = " << activeName[i] + << " of thickness " << waferThick[i]-backplaneThick[i]; + + LogDebug("TIDGeom") << "" << hybridName + << " Material " << hybridMat << " Height " + << hybridHeight << " Width " << hybridWidth + << " Thickness " << hybridThick; + LogDebug("TIDGeom") << "Pitch Adapter Material " + << pitchMat << " Height " << pitchHeight + << " Thickness " << pitchThick; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\tpitchName[" << i << "] = " << pitchName[i]; + LogDebug("TIDGeom") << "Cool Element Material " + << coolMat << " Height " << coolHeight + << " Thickness " << coolThick << " Width " << coolWidth; + + string name = mother; + double sidfr = sideFrameWidth - sideFrameOver; // width of side frame on the sides of module + double botfr; // width of side frame at the the bottom of the modules + double topfr; // width of side frame at the the top of the modules + double kaptonHeight; + if (dlHybrid > dlTop) { + // ring 1, ring 2 + topfr = topFrameHeight - pitchHeight - topFrameOver; + botfr = bottomFrameHeight - bottomFrameOver; + kaptonHeight = fullHeight + botfr; + } else { + // ring 3 + topfr = topFrameHeight - topFrameOver; + botfr = bottomFrameHeight - bottomFrameOver - pitchHeight; + kaptonHeight = fullHeight + topfr; + } + + double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr; + double kaptonWidth = sidfr + kaptonOver; + + double dxbot = 0.5*dlBottom + sidfr; + double dxtop = 0.5*dlTop + sidfr; + double dxtopenv, dxbotenv; // top/bot width of the module envelope trap + + // Envelope + if (dlHybrid > dlTop) { + // ring 1, ring 2 + dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr+hybridHeight)/fullHeight; + dxbotenv = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight; + } else { + // ring 3 + dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight; + dxbotenv = dxbot; + } + double bl1 = dxbotenv; + double bl2 = dxtopenv; + double h1 = 0.5 * moduleThick; + double dx, dy; + double dz = 0.5 * (boxFrameHeight + sideFrameHeight); + + Solid solid = ns.addSolidNS(name,Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0)); + /* Volume module = */ ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << genMat << " of dimensions " << dz + << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1 + << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + + if (doComponents) { + + //Box frame + name = boxFrameName; + dx = 0.5 * boxFrameWidth; + dy = 0.5 * boxFrameThick; + dz = 0.5 * boxFrameHeight; + solid = ns.addSolidNS(name,Box(dx, dy, dz)); + LogDebug("TIDGeom") << solid.name() + << " Box made of " << boxFrameMat << " of dimensions " + << dx << ", " << dy << ", " << dz; + /* Volume boxFrame = */ ns.addVolumeNS(Volume(name, solid, ns.material(boxFrameMat))); + + + // Hybrid + name = hybridName; + dx = 0.5 * hybridWidth; + dy = 0.5 * hybridThick; + dz = 0.5 * hybridHeight; + solid = ns.addSolidNS(name,Box(dx, dy, dz)); + LogDebug("TIDGeom") << solid.name() + << " Box made of " << hybridMat << " of dimensions " + << dx << ", " << dy << ", " << dz; + /* Volume hybrid = */ ns.addVolumeNS(Volume(name, solid, ns.material(hybridMat))); + + // Cool Insert + name = coolName; + dx = 0.5 * coolWidth; + dy = 0.5 * coolThick; + dz = 0.5 * coolHeight; + solid = ns.addSolidNS(name,Box(dx, dy, dz)); + LogDebug("TIDGeom") << solid.name() + << " Box made of " << coolMat << " of dimensions " + << dx << ", " << dy << ", " << dz; + /* Volume cool = */ ns.addVolumeNS(Volume(name, solid, ns.material(coolMat))); + + // Loop over detectors to be placed + for (int k = 0; k < detectorN; k++) { + double bbl1, bbl2; // perhaps useless (bl1 enough) + // Frame Sides + name = sideFrameName[k]; + if (dlHybrid > dlTop) { + // ring 1, ring 2 + bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight; + bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr)/fullHeight; + } else { + // ring 3 + bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+pitchHeight+botfr)/fullHeight; + bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight; + } + h1 = 0.5 * sideFrameThick; + dz = 0.5 * sideFrameHeight; + solid = ns.addSolidNS(name,Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << sideFrameMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " + << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " + << bbl2 << ", 0"; + Volume sideFrame = ns.addVolumeNS(Volume(name, solid, ns.material(sideFrameMat))); + + std::string rotstr, rotns; + Rotation3D rot; + + // Hole in the frame below the wafer + name = holeFrameName[k]; + double xpos, zpos; + dz = fullHeight - bottomFrameOver - topFrameOver; + bbl1 = dxbot - sideFrameWidth + bottomFrameOver*(dxtop-dxbot)/fullHeight; + bbl2 = dxtop - sideFrameWidth - topFrameOver*(dxtop-dxbot)/fullHeight; + if (dlHybrid > dlTop) { + // ring 1, ring 2 + zpos = -(topFrameHeight+0.5*dz-0.5*sideFrameHeight); + } else { + // ring 3 + zpos = bottomFrameHeight+0.5*dz-0.5*sideFrameHeight; + } + dz /= 2.; + solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bbl1,bbl1, 0, h1,bbl2,bbl2, 0)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << genMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " + << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " + << bbl2 << ", 0"; + Volume holeFrame = ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + + rot = ns.rotation(holeFrameRot[k]); + sideFrame.placeVolume(holeFrame,Transform3D(rot,Position(0e0,0e0,zpos)));// copyNr=1 + LogDebug("TIDGeom") << holeFrame.name() + << " number 1 positioned in " << sideFrame.name() + << " at (0,0," << zpos << ") with no rotation"; + + // Kapton circuit + double kaptonExtraHeight=0; // kapton extra height in the stereo + if (dlHybrid > dlTop) { + // ring 1, ring 2 + bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight; + if ( k == 1 ) { + kaptonExtraHeight = dlTop*sin(detTilt)-fullHeight*(1-cos(detTilt)); + kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight); + bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight; + } + else { + bbl2 = dxtop; + } + } else { + // ring 3 + bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight; + if ( k == 1) { + kaptonExtraHeight = dlBottom*sin(detTilt)-fullHeight*(1-cos(detTilt)); + kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight); + bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight; + } else { + bbl1 = dxbot; + } + } + h1 = 0.5 * kaptonThick; + dz = 0.5 * (kaptonHeight+kaptonExtraHeight); + + // For the stereo create the uncut solid, the solid to be removed and then the subtraction solid + if ( k == 1 ) { + // Uncut solid + Solid solidUncut = ns.addSolidNS(kaptonName[k]+"Uncut",Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0)); + + // Piece to be cut + dz = (dlHybrid > dlTop) ? 0.5 * dlTop : 0.5 * dlBottom; + h1 = 0.5 * kaptonThick; + bbl1 = fabs(dz*sin(detTilt)); + bbl2 = bbl1*0.000001; + double thet = atan((bbl1-bbl2)/(2*dz)); + Solid solidCut = ns.addSolidNS(kaptonName[k]+"Cut",Trap(dz, thet, 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0)); + + // Subtraction Solid + name = kaptonName[k]; + rot = ns.rotation("tidmodpar:9PYX"); + xpos = -0.5 * fullHeight * sin(detTilt); + zpos = 0.5 * kaptonHeight - bbl2; + solid = ns.addSolidNS(name,SubtractionSolid(solidUncut, solidCut, Transform3D(rot,Position(xpos,0.0,zpos)))); + } else { + name = kaptonName[k]; + solid = ns.addSolidNS(name,Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.)); + } + + Volume kapton = ns.addVolumeNS(Volume(name, solid, ns.material(kaptonMat))); + LogDebug("TIDGeom") << solid.name() + << " SUBTRACTION SOLID Trap made of " << kaptonMat + << " of dimensions " << dz << ", 0, 0, " << h1 + << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1 + << ", " << bbl2 << ", " << bbl2 << ", 0"; + + // Hole in the kapton below the wafer + name = holeKaptonName[k]; + dz = fullHeight - kaptonOver; + xpos = 0; + if (dlHybrid > dlTop) { + // ring 1, ring 2 + bbl1 = dxbot - kaptonWidth + kaptonOver*(dxtop-dxbot)/fullHeight; + bbl2 = dxtop - kaptonWidth; + zpos = 0.5*(kaptonHeight-kaptonExtraHeight-dz); + if ( k == 1 ) { + zpos -= 0.5*kaptonOver*(1-cos(detTilt)); + xpos = -0.5*kaptonOver*sin(detTilt); + } + } else { + // ring 3 + bbl1 = dxbot - kaptonWidth; + bbl2 = dxtop - kaptonWidth - kaptonOver*(dxtop-dxbot)/fullHeight; + zpos = -0.5*(kaptonHeight-kaptonExtraHeight-dz); + } + dz /= 2.; + solid = ns.addSolidNS(name,Trap(dz,0.,0., h1,bbl1,bbl1, 0., h1,bbl2,bbl2, 0.)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << genMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", " + << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", " + << bbl2 << ", 0"; + Volume holeKapton = ns.addVolumeNS(Volume(name, solid, ns.material(genMat))); + + rot = ns.rotation(holeKaptonRot[k]); + kapton.placeVolume(holeKapton, Transform3D(rot,Position(xpos, 0.0, zpos))); + LogDebug("TIDGeom") << holeKapton.name() + << " number 1 positioned in " << kapton.name() + << " at (0,0," << zpos << ") with no rotation"; + + // Wafer + name = waferName[k]; + if (k == 0 && dlHybrid < dlTop) { + bl1 = 0.5 * dlTop; + bl2 = 0.5 * dlBottom; + } else { + bl1 = 0.5 * dlBottom; + bl2 = 0.5 * dlTop; + } + h1 = 0.5 * waferThick[k]; + dz = 0.5 * fullHeight; + solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bl1,bl1,0, h1,bl2,bl2,0)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << waferMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl1 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " + << bl2 << ", 0"; + Volume wafer = ns.addVolumeNS(Volume(name, solid, ns.material(waferMat))); + + // Active + name = activeName[k]; + if (k == 0 && dlHybrid < dlTop) { + bl1 -= sideWidthTop; + bl2 -= sideWidthBottom; + } + else { + bl1 -= sideWidthBottom; + bl2 -= sideWidthTop; + } + dz = 0.5 * (waferThick[k] - backplaneThick[k]); // inactive backplane + h1 = 0.5 * activeHeight; + solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bl2,bl1,0, h1,bl2,bl1,0)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << activeMat << " of dimensions " + << dz << ", 0, 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0, " << h1 << ", " << bl2 << ", " + << bl1 << ", 0"; + Volume active = ns.addVolumeNS(Volume(name, solid, ns.material(activeMat))); + rot = ns.rotation(activeRot); + Position tran(0.0,-0.5 * backplaneThick[k],0.0); // from the definition of the wafer local axes + wafer.placeVolume(active, Transform3D(rot,tran)); // inactive backplane copyNr=1 + LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << active.name() + << " number 1 positioned in " << wafer.name() + << " at " << tran << " with " << rot; + + //Pitch Adapter + name = pitchName[k]; + if (dlHybrid > dlTop) { + dz = 0.5 * dlTop; + } else { + dz = 0.5 * dlBottom; + } + if (k == 0) { + dx = dz; + dy = 0.5 * pitchThick; + dz = 0.5 * pitchHeight; + solid = ns.addSolidNS(name,Box(dx, dy, dz)); + LogDebug("TIDGeom") << solid.name() + << " Box made of " << pitchMat << " of dimensions" + << " " << dx << ", " << dy << ", " << dz; + } else { + h1 = 0.5 * pitchThick; + bl1 = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt); + bl2 = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt); + + dz -=0.5*pitchStereoTol; + bl1-=pitchStereoTol; + bl2-=pitchStereoTol; + + double thet = atan((bl1-bl2)/(2.*dz)); + solid = ns.addSolidNS(name,Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0)); + LogDebug("TIDGeom") << solid.name() + << " Trap made of " << pitchMat << " of " + << "dimensions " << dz << ", " << thet/CLHEP::deg + << ", 0, " << h1 << ", " << bl1 << ", " << bl1 + << ", 0, " << h1 << ", " << bl2 << ", " << bl2 + << ", 0"; + } + /* Volume pa = */ ns.addVolumeNS(Volume(name, solid, ns.material(pitchMat))); + } + } + LogDebug("TIDGeom") << "<<== End of DDTIDModuleAlgo construction ..."; return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTIDModuleAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTIDModuleAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIDModulePosAlgo.cpp b/DDCMS/src/plugins/DDTIDModulePosAlgo.cpp new file mode 100644 index 000000000..d9e1bfdbd --- /dev/null +++ b/DDCMS/src/plugins/DDTIDModulePosAlgo.cpp @@ -0,0 +1,356 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DDCMS/DDCMSPlugins.h" + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + string parentName = args.parentName(); + int detectorN = args.integer("DetectorNumber"); //Number of detectors + double detTilt = args.dble("DetTilt"); //Tilt of stereo detector + double fullHeight = args.dble("FullHeight"); //Height + string boxFrameName = args.str("BoxFrameName"); //Top frame Name + double boxFrameHeight = args.dble("BoxFrameHeight"); // height + double boxFrameWidth = args.dble("BoxFrameWidth"); // width + double dlTop = args.dble("DlTop"); //Width at top of wafer + double dlBottom = args.dble("DlBottom"); //Width at bottom of wafer + double dlHybrid = args.dble("DlHybrid"); //Width at the hybrid end + vector<double> boxFrameZ = args.vecDble("BoxFrameZ"); // z-positions + double bottomFrameHeight = args.dble("BottomFrameHeight"); //Bottom of the frame + double bottomFrameOver = args.dble("BottomFrameOver"); // overlap + double topFrameHeight = args.dble("TopFrameHeight"); //Top of the frame + double topFrameOver = args.dble("TopFrameOver"); // overlap + + vector<string> sideFrameName = args.vecStr("SideFrameName"); //Side Frame name + vector<double> sideFrameZ = args.vecDble("SideFrameZ"); // z-positions + vector<string> sideFrameRot = args.vecStr("SideFrameRotation"); // rotation matrix (required for correct positiong of the hole in the StereoR) + double sideFrameWidth = args.dble("SideFrameWidth"); // width + double sideFrameOver = args.dble("SideFrameOver"); // overlap (wrt wafer) + + vector<string> kaptonName = args.vecStr("KaptonName"); //Kapton Circuit name + vector<double> kaptonZ = args.vecDble("KaptonZ"); // z-positions + vector<string> kaptonRot = args.vecStr("KaptonRotation"); // rotation matrix (required for correct positiong of the hole in the StereoR) + vector<string> waferName = args.vecStr("WaferName"); //Wafer name + vector<double> waferZ = args.vecDble("WaferZ"); // z-positions + vector<string> waferRot = args.vecStr("WaferRotation"); // rotation matrix + string hybridName = args.str("HybridName"); //Hybrid name + double hybridHeight = args.dble("HybridHeight"); // height + vector<double> hybridZ = args.vecDble("HybridZ"); // z-positions + vector<string> pitchName = args.vecStr("PitchName"); //Pitch adapter rotation matrix + double pitchHeight = args.dble("PitchHeight"); // height + vector<double> pitchZ = args.vecDble("PitchZ"); // z-positions + vector<string> pitchRot = args.vecStr("PitchRotation"); // rotation matrix + string coolName = args.str("CoolInsertName"); //Cool Insert name + double coolHeight = args.dble("CoolInsertHeight"); // height + double coolZ = args.dble("CoolInsertZ"); // z-position + double coolWidth = args.dble("CoolInsertWidth"); // width + vector<double> coolRadShift = args.vecDble("CoolInsertShift"); // + + + bool doSpacers = ::toupper(args.str("DoSpacers")[0])!='N'; //Spacers (alumina) to be made (Should be "Yes" for DS modules only) + string botSpacersName = args.str("BottomSpacersName"); // Spacers at the "bottom" of the module + double botSpacersHeight = args.dble("BottomSpacersHeight"); // + double botSpacersZ = args.dble("BottomSpacersZ"); // z-position + string sidSpacersName = args.str("SideSpacersName"); //Spacers at the "sides" of the module + double sidSpacersHeight = args.dble("SideSpacersHeight"); + double sidSpacersZ = args.dble("SideSpacersZ"); // z-position + double sidSpacersWidth = args.dble("SideSpacersWidth"); // width + double sidSpacersRadShift = args.dble("SideSpacersShift"); // + + LogDebug("TIDGeom") << "Parent " << parentName + << " Detector Planes " << detectorN; + LogDebug("TIDGeom") << "Detector Tilt " + << detTilt/CLHEP::deg << " Height " << fullHeight + << " dl(Top) " << dlTop << " dl(Bottom) " << dlBottom + << " dl(Hybrid) " << dlHybrid; + LogDebug("TIDGeom") << boxFrameName << " positioned at Z"; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\tboxFrameZ[" << i << "] = " << boxFrameZ[i]; + LogDebug("TIDGeom") << "\t Extra Height at Bottom " << bottomFrameHeight + << " Overlap " <<bottomFrameOver; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\tsideFrame[" << i << "] = " << sideFrameName[i] + << " positioned at Z "<< sideFrameZ[i] + << " with rotation " << sideFrameRot[i]; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\tkapton[" << i << "] = " << kaptonName[i] + << " positioned at Z "<< kaptonZ[i] + << " with rotation " << kaptonRot[i]; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << waferName[i] + << " positioned at Z " << waferZ[i] + << " with rotation " << waferRot[i]; + LogDebug("TIDGeom") << hybridName + << " Height " << hybridHeight << " Z"; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << "\thybridZ[" << i <<"] = " << hybridZ[i]; + LogDebug("TIDGeom") << "Pitch Adapter Height " << pitchHeight; + for (int i = 0; i < detectorN; i++) + LogDebug("TIDGeom") << pitchName[i] << " position at Z " << pitchZ[i] + << " with rotation " << pitchRot[i]; + + string name; + double botfr; // width of side frame at the the bottom of the modules + double topfr; // width of side frame at the the top of the modules + double kaptonHeight; + if (dlHybrid > dlTop) { + // ring 1, ring 2 + topfr = topFrameHeight - pitchHeight - topFrameOver; + botfr = bottomFrameHeight - bottomFrameOver; + kaptonHeight = fullHeight + botfr; + } else { + // ring 3 + topfr = topFrameHeight - topFrameOver; + botfr = bottomFrameHeight - bottomFrameOver - pitchHeight; + kaptonHeight = fullHeight + topfr; + } + + double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr; + double zCenter = 0.5 * (sideFrameHeight+boxFrameHeight); + + // (Re) Compute the envelope for positioning Cool Inserts and Side Spacers (Alumina). + double sidfr = sideFrameWidth - sideFrameOver; // width of side frame on the sides of module + double dxbot = 0.5*dlBottom + sidfr; + double dxtop = 0.5*dlTop + sidfr; + double dxtopenv, dxbotenv; // top/bot width of the module envelope trap + + double tanWafer=(dxtop-dxbot)/fullHeight; // + double thetaWafer = atan(tanWafer); // 1/2 of the wafer wedge angle + + if (dlHybrid > dlTop) { + // ring 1, ring 2 + dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr+hybridHeight)/fullHeight; + dxbotenv = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight; + } else { + // ring 3 + dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight; + dxbotenv = dxbot; + } + + double tanEnv=(dxtopenv-dxbotenv)/(sideFrameHeight+boxFrameHeight); // 1/2 of the envelope wedge angle + + double xpos=0; double ypos=0; double zpos=0; + + // Cool Inserts + name = coolName; + ypos = coolZ; + + double zCool; + int copy=0; + Rotation3D rot; // should be different for different elements + Volume parentVol = ns.volume(parentName); + + for (int j1=0; j1<2; j1++){ // j1: 0 inserts below the hybrid + // 1 inserts below the wafer + if (dlHybrid > dlTop) { + zCool = sideFrameHeight+boxFrameHeight-coolRadShift[j1]; + if ( j1==0 ) zCool -= 0.5*coolHeight; + } else { + zCool = coolRadShift[j1]; + if ( j1==0 ) zCool += 0.5*coolHeight; + } + + if ( j1==0 ) { + xpos = -0.5*(boxFrameWidth-coolWidth); + } else { + xpos = -(dxbotenv+(zCool-0.5*coolHeight)*tanEnv-0.5*coolWidth); + } + + zpos = zCool-zCenter; + for ( int j2=0; j2<2; j2++) { + copy++; + parentVol.placeVolume(ns.volume(name),Position(xpos,ypos,zpos)); + LogDebug("TIDGeom") << name <<" number " + << copy << " positioned in " << parentName << " at " + << Position(xpos,ypos,zpos) << " with " << rot; + xpos = -xpos; + } + } + + if ( doSpacers ) { + // Bottom Spacers (Alumina) + name = botSpacersName; + ypos = botSpacersZ; + double zBotSpacers; + if (dlHybrid > dlTop) { + zBotSpacers = sideFrameHeight+boxFrameHeight-0.5*botSpacersHeight; + } else { + zBotSpacers = 0.5*botSpacersHeight; + } + zpos = zBotSpacers - zCenter; + parentVol.placeVolume(ns.volume(name),Position(0.0,ypos,zpos)); + LogDebug("TIDGeom") << name <<" number " + << 1 << " positioned in " << parentName << " at " + << Position(0.0,ypos,zpos) << " with no rotation"; + // Side Spacers (Alumina) + name = sidSpacersName; + ypos = sidSpacersZ; + double zSideSpacers; + if (dlHybrid > dlTop) { + zSideSpacers = sideFrameHeight+boxFrameHeight-sidSpacersRadShift; + } else { + zSideSpacers = sidSpacersRadShift; + } + zpos = zSideSpacers - zCenter; + + copy=0; + xpos = dxbotenv+(zSideSpacers-0.5*sidSpacersHeight)*tanEnv-0.5*sidSpacersWidth+sideFrameOver; + + double phiy = 0e0, phiz = 0e0; + double phix=0.*CLHEP::deg; phiy=90.*CLHEP::deg; phiz=0.*CLHEP::deg; + + double thetax = 0e0; + double thetay = 90.*CLHEP::deg; + double thetaz = thetaWafer; + + for (int j1=0; j1<2; j1++){ + copy++; + // tilt Side Spacers (parallel to Side Frame) + thetax = 90.*CLHEP::deg+thetaz; + rot = make_rotation3D(thetax, phix, thetay, phiy, thetaz, phiz); + parentVol.placeVolume(ns.volume(name),Transform3D(rot,Position(xpos,ypos,zpos))); + LogDebug("TIDGeom") << name <<" number " << copy << " positioned in " << parentName << " at " + << Position(xpos,ypos,zpos) << " with " << rot; + xpos = -xpos; + thetaz = -thetaz; + } + } + + // Loop over detectors to be placed + for (int k = 0; k < detectorN; k++) { + // Wafer + name = waferName[k]; + xpos=0; + ypos = waferZ[k]; + double zWafer; + if (dlHybrid > dlTop) { + zWafer = botfr+0.5*fullHeight; + } else { + zWafer = boxFrameHeight+botfr+pitchHeight+0.5*fullHeight; + } + zpos = zWafer - zCenter; + Position tran(xpos, ypos, zpos); + rot = ns.rotation(waferRot[k]); + + parentVol.placeVolume(ns.volume(name),Transform3D(rot,tran)); // copyNr=k+1 + LogDebug("TIDGeom") << name <<" number " << k+1 << " positioned in " << parentName << " at " + << tran << " with " << rot; + + //Pitch Adapter + name = pitchName[k]; + if (k == 0) { + xpos = 0; + } else { + xpos = 0.5 * fullHeight * sin(detTilt); + } + ypos = pitchZ[k]; + double zPitch; + if (dlHybrid > dlTop) { + zPitch = botfr+fullHeight+0.5*pitchHeight; + } else { + zPitch = boxFrameHeight+botfr+0.5*pitchHeight; + } + zpos = zPitch - zCenter; + rot = ns.rotation(pitchRot[k]); + tran = Position(xpos,ypos,zpos); + parentVol.placeVolume(ns.volume(name),Transform3D(rot,tran)); // copyNr=k+1 + LogDebug("TIDGeom") << name <<" number " << k+1 << " positioned in " << parentName << " at " + << tran << " with " << rot; + + // Hybrid + name = hybridName; + ypos = hybridZ[k]; + double zHybrid; + if (dlHybrid > dlTop) { + zHybrid = botfr+fullHeight+pitchHeight+0.5*hybridHeight; + } else { + zHybrid = 0.5*hybridHeight; + } + zpos = zHybrid - zCenter; + tran = Position(0,ypos,zpos); + parentVol.placeVolume(ns.volume(name),tran); // copyNr=k+1 + LogDebug("TIDGeom") << name <<" number " << k+1 << " positioned in " << parentName << " at " << tran; + + // Box frame + name = boxFrameName; + ypos = boxFrameZ[k]; + double zBoxFrame; + if (dlHybrid > dlTop) { + zBoxFrame = sideFrameHeight+0.5*boxFrameHeight; + } else { + zBoxFrame = 0.5*boxFrameHeight; + } + zpos = zBoxFrame - zCenter; + tran = Position(0,ypos,zpos); + parentVol.placeVolume(ns.volume(name),tran); // copyNr=k+1 + LogDebug("TIDGeom") << name <<" number " << k+1 << " positioned in " << parentName << " at " << tran; + + // Side frame + name = sideFrameName[k]; + ypos = sideFrameZ[k]; + double zSideFrame; + if (dlHybrid > dlTop) { + zSideFrame = 0.5*sideFrameHeight; + } else { + zSideFrame = boxFrameHeight+0.5*sideFrameHeight; + } + zpos = zSideFrame-zCenter; + rot = ns.rotation(sideFrameRot[k]); + tran = Position(0,ypos,zpos); + parentVol.placeVolume(ns.volume(name),Transform3D(rot,tran)); + LogDebug("TIDGeom") << name <<" number " + << k+1 << " positioned in " << parentName << " at " + << tran << " with " << rot; + // Kapton circuit + name = kaptonName[k]; + ypos = kaptonZ[k]; + double zKapton; + double kaptonExtraHeight=0; + if (dlHybrid > dlTop) { + if ( k == 1 ) kaptonExtraHeight = dlTop*sin(detTilt)-fullHeight*(1-cos(detTilt)); + kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight); + zKapton = 0.5*(kaptonHeight+kaptonExtraHeight); + } else { + if ( k == 1 ) kaptonExtraHeight = dlBottom*sin(detTilt)-fullHeight*(1-cos(detTilt)); + kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight); + zKapton = boxFrameHeight+sideFrameHeight-0.5*(kaptonHeight+kaptonExtraHeight); + } + zpos = zKapton-zCenter; + rot = ns.rotation(kaptonRot[k]); + tran = Position(0,ypos,zpos); + parentVol.placeVolume(ns.volume(name),Transform3D(rot,tran)); + LogDebug("TIDGeom") << name <<" number " + << k+1 << " positioned in " << parentName << " at " + << tran << " with " << rot; + } + LogDebug("TIDGeom") << "<<== End of DDTIDModulePosAlgo positioning ..."; + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTIDModulePosAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTIDRingAlgo.cpp b/DDCMS/src/plugins/DDTIDRingAlgo.cpp index 3437688a8..d646bd04d 100644 --- a/DDCMS/src/plugins/DDTIDRingAlgo.cpp +++ b/DDCMS/src/plugins/DDTIDRingAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); @@ -46,20 +41,16 @@ static long algorithm(Detector& /* description */, double sICC = args.value<double>("ICCShift"); //Shift of ICC per to R vector<double> zICC = args.value<vector<double> >("ICCZ"); // in Z - str << "Parent " << mother.name() - << "\tModule " << moduleName[0] << ", " - << moduleName[1] << "\tICC " << iccName - << "\tNameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); - - str << "Parameters for positioning--" - << " StartAngle " << startAngle/CLHEP::deg - << " Copy Numbers " << number << " Modules at R " - << rModule << " Z " << zModule[0] << ", " << zModule[1] - << " ICCs at R " << rICC << " Z " << zICC[0] << ", " - << zICC[1]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); - + LogDebug("TIDGeom") << "Parent " << mother.name() + << "\tModule " << moduleName[0] << ", " + << moduleName[1] << "\tICC " << iccName + << "\tNameSpace " << ns.name; + LogDebug("TIDGeom") << "Parameters for positioning--" + << " StartAngle " << startAngle/CLHEP::deg + << " Copy Numbers " << number << " Modules at R " + << rModule << " Z " << zModule[0] << ", " << zModule[1] + << " ICCs at R " << rICC << " Z " << zICC[0] << ", " + << zICC[1]; double theta = 90.*CLHEP::deg; double phiy = 0.*CLHEP::deg; double dphi = CLHEP::twopi/number; @@ -95,11 +86,9 @@ static long algorithm(Detector& /* description */, Rotation3D rotation = make_rotation3D(theta, phix, thetay, phiy, theta, phiz); // int copyNr = i+1; /* PlacedVolume pv = */ mother.placeVolume(module, Transform3D(rotation,trmod)); - str << module.name() << " number " - << i+1 << " positioned in " << mother.name() << " at " - << trmod << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); - + LogDebug("TIDGeom") << module.name() << " number " + << i+1 << " positioned in " << mother.name() << " at " + << trmod << " with " << rotation; //Now the ICC if (i%2 == 0 ) { zpos = zICC[0]; @@ -113,13 +102,12 @@ static long algorithm(Detector& /* description */, // int copyNr = i+1; Position tricc(xpos, ypos, zpos); /* PlacedVolume pv = */ mother.placeVolume(icc, Transform3D(rotation,tricc)); - str << iccName << " number " - << i+1 << " positioned in " << mother.name() << " at " - << tricc << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTIDRingAlgo",str); + LogDebug("TIDGeom") << iccName << " number " + << i+1 << " positioned in " << mother.name() << " at " + << tricc << " with " << rotation; } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTIDRingAlgo___DISABLED,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTIDRingAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTOBAxCableAlgo.cpp b/DDCMS/src/plugins/DDTOBAxCableAlgo.cpp new file mode 100644 index 000000000..ed8042acb --- /dev/null +++ b/DDCMS/src/plugins/DDTOBAxCableAlgo.cpp @@ -0,0 +1,139 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DDCMS/DDCMSPlugins.h" + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + vector<string> sectorNumber = args.vecStr("SectorNumber"); // Id. Number of the sectors + double sectorRin = args.dble("SectorRin"); // Inner radius of service sectors + double sectorRout = args.dble("SectorRout"); // Outer radius of service sectors + double sectorDz = args.dble("SectorDz"); // Sector half-length + double sectorDeltaPhi_B = args.dble("SectorDeltaPhi_B"); // Sector B phi width [A=C=0.5*(360/sectors)] + vector<double> sectorStartPhi = args.vecDble("SectorStartPhi"); // Starting phi for the service sectors + vector<string> sectorMaterial_A = args.vecStr("SectorMaterial_A"); // Material for the A sectors + vector<string> sectorMaterial_B = args.vecStr("SectorMaterial_B"); // Material for the B sectors + vector<string> sectorMaterial_C = args.vecStr("SectorMaterial_C"); // Material for the C sectors + + + for (int i=0; i<(int)(sectorNumber.size()); i++) + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: sectorNumber[" << i + << "] = " << sectorNumber[i]; + + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: Axial Service Sectors half-length " << sectorDz + << "\tRin " << sectorRin << "\tRout = " << sectorRout + << "\tPhi of sectors position:"; + for (int i=0; i<(int)(sectorNumber.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tPhi = " << sectorStartPhi[i]; + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: List of materials for the sectors/3 parts"; + // + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: Sector/3 A"; + for (int i=0; i<(int)(sectorNumber.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tsectorMaterial_A = " << sectorMaterial_A[i]; + // + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: Sector/3 B"; + for (int i=0; i<(int)(sectorNumber.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tsectorMaterial_B = " << sectorMaterial_B[i]; + // + LogDebug("TOBGeom") << "DDTOBAxCableAlgo debug: Sector/3 C"; + for (int i=0; i<(int)(sectorNumber.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tsectorMaterial_C = " << sectorMaterial_C[i]; + + string tubsName = args.parentName(); + Volume tubsVol = ns.volume(tubsName); + // Loop over sectors (sectorNumber vector) + for (int i=0; i<(int)(sectorNumber.size()); i++) { + Solid solid; + string name; + double dz, rin, rout, startphi, widthphi, deltaphi; + + // Axial Services + // Each sector is divided in 3 parts from phi[i] to phi[i+1] + + widthphi = ( (i+1 == (int)(sectorStartPhi.size())) ? + (sectorStartPhi[0]+CLHEP::twopi)-sectorStartPhi[i] : + (sectorStartPhi[i+1]-sectorStartPhi[i]) ); + // First Part: A + name = "TOBAxService_" + sectorNumber[i] + "A"; + dz = sectorDz; + rin = sectorRin; + rout = sectorRout; + startphi = sectorStartPhi[i]; + deltaphi = 0.5 * (widthphi - sectorDeltaPhi_B); + solid = ns.addSolid(name,Tube(rin, rout, dz, startphi, deltaphi)); + LogDebug("TOBGeom") << solid.name() << " Tubs made of " + << sectorMaterial_A[i] << " from " + << startphi/CLHEP::deg << " to " + << (startphi+deltaphi)/CLHEP::deg << " with Rin " + << rin << " Rout " << rout << " ZHalf " << dz; + Volume sectorLogic = ns.addVolume(Volume(name,solid, ns.material(sectorMaterial_A[i]))); + tubsVol.placeVolume(sectorLogic); // copyNr: i+1 + LogDebug("TOBGeom") << sectorLogic.name() << " number " << i+1 + << " positioned in " << tubsName + << " with no translation and no rotation"; + + // Second Part: B + name = "TOBAxService_" + sectorNumber[i] + "B"; + startphi += deltaphi; + deltaphi = sectorDeltaPhi_B; + solid = ns.addSolid(name, Tube(rin, rout, dz, startphi, deltaphi)); + LogDebug("TOBGeom") << solid.name() << " Tubs made of " + << sectorMaterial_B[i] << " from " << startphi/CLHEP::deg + << " to " << (startphi+deltaphi)/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << dz; + + sectorLogic = ns.addVolume(Volume(name, solid, ns.material(sectorMaterial_B[i]))); + tubsVol.placeVolume(sectorLogic); // copyNr: i+1 + LogDebug("TOBGeom") << sectorLogic.name() << " number " << i+1 + << " positioned in " << tubsName + << " with no translation and no rotation"; + + // Third Part: C + name = "TOBAxService_" + sectorNumber[i] + "C"; + startphi += deltaphi; + deltaphi = 0.5 * (widthphi - sectorDeltaPhi_B); + solid = ns.addSolid(name,Tube(rin, rout, dz, startphi, deltaphi)); + LogDebug("TOBGeom") << solid.name() << " Tubs made of " + << sectorMaterial_C[i] << " from " + << startphi/CLHEP::deg << " to " + << (startphi+deltaphi)/CLHEP::deg << " with Rin " + << rin << " Rout " << rout << " ZHalf " << dz; + sectorLogic = ns.addVolume(Volume(name, solid, ns.material(sectorMaterial_C[i]))); + tubsVol.placeVolume(sectorLogic); // copyNr: i+1 + LogDebug("TOBGeom") << sectorLogic.name() << " number " << i+1 + << " positioned in " << tubsName + << " with no translation and no rotation"; + } + LogDebug("TOBGeom") << "<<== End of DDTOBAxCableAlgo construction ..."; + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTOBAxCableAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTOBRadCableAlgo.cpp b/DDCMS/src/plugins/DDTOBRadCableAlgo.cpp new file mode 100644 index 000000000..96ed78ab9 --- /dev/null +++ b/DDCMS/src/plugins/DDTOBRadCableAlgo.cpp @@ -0,0 +1,209 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +// +// Specialized generic detector constructor +// +//========================================================================== + +// Framework include files +#include "DD4hep/DetFactoryHelper.h" +#include "DDCMS/DDCMSPlugins.h" + +using namespace std; +using namespace dd4hep; +using namespace dd4hep::cms; + +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) +{ + Namespace ns(ctxt, e, true); + AlgoArguments args(ctxt, e); + double diskDz = args.dble("DiskDz"); // Disk thickness + double rMax = args.dble("RMax"); // Maximum radius + double cableT = args.dble("CableT"); // Cable thickness + vector<double> rodRin = args.vecDble("RodRin"); // Radii for inner rods + vector<double> rodRout = args.vecDble("RodRout"); // Radii for outer rods + vector<string> cableM = args.vecStr("CableMaterial"); // Materials for cables + double connW = args.dble("ConnW"); // Connector width + double connT = args.dble("ConnT"); // Connector thickness + vector<string> connM = args.vecStr("ConnMaterial"); // Materials for connectors + vector<double> coolR1 = args.vecDble("CoolR1"); // Radii for cooling manifold + vector<double> coolR2 = args.vecDble("CoolR2"); // Radii for return cooling manifold + double coolRin = args.dble("CoolRin"); // Inner radius of cooling manifold + double coolRout1 = args.dble("CoolRout1"); // Outer radius of cooling manifold + double coolRout2 = args.dble("CoolRout2"); // Outer radius of cooling fluid in cooling manifold + double coolStartPhi1 = args.dble("CoolStartPhi1"); // Starting Phi of cooling manifold + double coolDeltaPhi1 = args.dble("CoolDeltaPhi1"); // Phi Range of cooling manifold + double coolStartPhi2 = args.dble("CoolStartPhi2"); // Starting Phi of cooling fluid in of cooling manifold + double coolDeltaPhi2 = args.dble("CoolDeltaPhi2"); // Phi Range of of cooling fluid in cooling manifold + string coolM1 = args.str("CoolMaterial1"); // Material for cooling manifold + string coolM2 = args.str("CoolMaterial2"); // Material for cooling fluid + vector<string> names = args.vecStr("RingName"); // Names of layers + + string parentName = args.parentName(); + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: Parent " << parentName << " NameSpace " << ns.name; + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: Disk Half width " << diskDz + << "\tRMax " << rMax << "\tCable Thickness " << cableT + << "\tRadii of disk position and cable materials:"; + for (int i=0; i<(int)(rodRin.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tRin = " << rodRin[i] + << "\tRout = " << rodRout[i] << " " << cableM[i]; + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: Connector Width = " + << connW << "\tThickness = " << connT + << "\tMaterials: "; + for (int i=0; i<(int)(connM.size()); i++) + LogDebug("TOBGeom") << "\tconnM[" << i << "] = " << connM[i]; + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: Cool Manifold Torus Rin = " << coolRin + << " Rout = " << coolRout1 + << "\t Phi start = " << coolStartPhi1 << " Phi Range = " << coolDeltaPhi1 + << "\t Material = " << coolM1 + << "\t Radial positions:"; + for (int i=0; i<(int)(coolR1.size()); i++) + LogDebug("TOBGeom") << "\t[" << i <<"]\tR = " << coolR1[i]; + for (int i=0; i<(int)(coolR2.size()); i++) + LogDebug("TOBGeom") << "\t[" << i <<"]\tR = " << coolR2[i]; + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: Cooling Fluid Torus Rin = " << coolRin + << " Rout = " << coolRout2 + << "\t Phi start = " << coolStartPhi2 << " Phi Range = " << coolDeltaPhi2 + << "\t Material = " << coolM2 + << "\t Radial positions:"; + for (int i=0; i<(int)(coolR1.size()); i++) + LogDebug("TOBGeom") << "\t[" << i <<"]\tR = " << coolR1[i]; + for (int i=0; i<(int)(coolR2.size()); i++) + LogDebug("TOBGeom") << "\t[" << i <<"]\tR = " << coolR2[i]; + for (int i=0; i<(int)(names.size()); i++) + LogDebug("TOBGeom") << "DDTOBRadCableAlgo debug: names[" << i << "] = " << names[i]; + + Volume disk = ns.volume(parentName); + // Loop over sub disks + for (int i=0; i<(int)(names.size()); i++) { + Solid solid; + string name; + double dz, rin, rout; + + // Cooling Manifolds + name = "TOBCoolingManifold" + names[i] + "a"; + dz = coolRout1; + solid = ns.addSolid(name,Torus(coolRin,coolRout1,coolR1[i],coolStartPhi1,coolDeltaPhi1)); + LogDebug("TOBGeom") << name << " Torus made of " + << coolM1 << " from " << coolStartPhi1/CLHEP::deg + << " to " << (coolStartPhi1+coolDeltaPhi1)/CLHEP::deg + << " with Rin " << coolRin << " Rout " << coolRout1 + << " R torus " << coolR1[i]; + Volume coolManifoldLogic_a = ns.addVolume(Volume(name,solid,ns.material(coolM1))); + Position r1(0, 0, (dz-diskDz)); + disk.placeVolume(coolManifoldLogic_a,r1); // i+1 + LogDebug("TOBGeom") << name << " number " << i+1 + << " positioned in " << disk.name() << " at " << r1 + << " with no rotation"; + + // Cooling Fluid (in Cooling Manifold) + name = "TOBCoolingManifoldFluid" + names[i] + "a"; + solid = ns.addSolid(name,Torus(coolRin,coolRout2,coolR1[i],coolStartPhi2,coolDeltaPhi2)); + LogDebug("TOBGeom") << name << " Torus made of " + << coolM2 << " from " << coolStartPhi2/CLHEP::deg + << " to " << (coolStartPhi2+coolDeltaPhi2)/CLHEP::deg + << " with Rin " << coolRin << " Rout " << coolRout2 + << " R torus " << coolR1[i]; + Volume coolManifoldFluidLogic_a = ns.addVolume(Volume(name,solid,ns.material(coolM2))); + disk.placeVolume(coolManifoldFluidLogic_a); // i+1 + LogDebug("TOBGeom") << name << " number " << i+1 + << " positioned in " << coolM2 + << " with no translation and no rotation"; + + name = "TOBCoolingManifold" + names[i] + "r"; + dz = coolRout1; + solid = ns.addSolid(name,Torus(coolRin,coolRout1,coolR2[i],coolStartPhi1,coolDeltaPhi1)); + LogDebug("TOBGeom") << name << " Torus made of " + << coolM1 << " from " << coolStartPhi1/CLHEP::deg + << " to " << (coolStartPhi1+coolDeltaPhi1)/CLHEP::deg + << " with Rin " << coolRin << " Rout " << coolRout1 + << " R torus " << coolR2[i]; + Volume coolManifoldLogic_r = ns.addVolume(Volume(name,solid,ns.material(coolM1))); + r1 = Position(0, 0, (dz-diskDz)); + disk.placeVolume(coolManifoldLogic_r, r1); // i+1 + LogDebug("TOBGeom") << name << " number " << i+1 + << " positioned in " << disk.name() << " at " << r1 + << " with no rotation"; + + // Cooling Fluid (in Cooling Manifold) + name = "TOBCoolingManifoldFluid" + names[i] + "r"; + solid = ns.addSolid(name,Torus(coolRin,coolRout2,coolR2[i],coolStartPhi2,coolDeltaPhi2)); + LogDebug("TOBGeom") << name << " Torus made of " + << coolM2 << " from " << coolStartPhi2/CLHEP::deg + << " to " << (coolStartPhi2+coolDeltaPhi2)/CLHEP::deg + << " with Rin " << coolRin << " Rout " << coolRout2 + << " R torus " << coolR2[i]; + Volume coolManifoldFluidLogic_r = ns.addVolume(Volume(name, solid, ns.material(coolM2))); + disk.placeVolume(coolManifoldFluidLogic_r); // i+1 + LogDebug("TOBGeom") << name << " number " << i+1 + << " positioned in " << coolM2 + << " with no translation and no rotation"; + + // Connectors + name = "TOBConn" + names[i]; + dz = 0.5*connT; + rin = 0.5*(rodRin[i]+rodRout[i])-0.5*connW; + rout = 0.5*(rodRin[i]+rodRout[i])+0.5*connW; + solid = ns.addSolid(name,Tube(rin, rout, dz)); + LogDebug("TOBGeom") << name << " Tubs made of " + << connM[i] << " from 0 to " << CLHEP::twopi/CLHEP::deg + << " with Rin " << rin << " Rout " << rout + << " ZHalf " << dz; + Volume connLogic = ns.addVolume(Volume(name, solid, ns.material(connM[i]))); + Position r2(0, 0, (dz-diskDz)); + disk.placeVolume(connLogic,r2); // i+1 + LogDebug("TOBGeom") << name << " number " << i+1 + << " positioned in " << disk.name() << " at " << r2 + << " with no rotation"; + + // Now the radial cable + name = "TOBRadServices" + names[i]; + rin = 0.5*(rodRin[i]+rodRout[i]); + rout = ( i+1 == (int)(names.size()) ? rMax : 0.5*(rodRin[i+1]+rodRout[i+1])); + vector<double> pgonZ; + pgonZ.emplace_back(-0.5*cableT); + pgonZ.emplace_back(cableT*(rin/rMax-0.5)); + pgonZ.emplace_back(0.5*cableT); + vector<double> pgonRmin; + pgonRmin.emplace_back(rin); + pgonRmin.emplace_back(rin); + pgonRmin.emplace_back(rin); + vector<double> pgonRmax; + pgonRmax.emplace_back(rout); + pgonRmax.emplace_back(rout); + pgonRmax.emplace_back(rout); + solid = ns.addSolid(name,Polycone(0, CLHEP::twopi, pgonRmin, pgonRmax, pgonZ)); + LogDebug("TOBGeom") << name <<" Polycone made of " + << cableM[i] << " from 0 to " + << CLHEP::twopi/CLHEP::deg << " and with " + << pgonZ.size() << " sections"; + for (int ii = 0; ii < (int)(pgonZ.size()); ii++) + LogDebug("TOBGeom") << "\t[" << ii << "]\tZ = " << pgonZ[ii] + << "\tRmin = " << pgonRmin[ii] << "\tRmax = " << pgonRmax[ii]; + Volume cableLogic = ns.addVolume(Volume(name, solid, ns.material(cableM[i]))); + Position r3(0, 0, (diskDz-(i+0.5)*cableT)); + disk.placeVolume(cableLogic, r3); // i+1 + LogDebug("TOBGeom") << name << " number " <<i+1 + << " positioned in " << disk.name() << " at " << r3 + << " with no rotation"; + } + LogDebug("TOBGeom") << "<<== End of DDTOBRadCableAlgo construction ..."; + return 1; +} + +// first argument is the type from the xml file +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTOBRadCableAlgo,algorithm) + diff --git a/DDCMS/src/plugins/DDTOBRodAlgo.cpp b/DDCMS/src/plugins/DDTOBRodAlgo.cpp index 94642942e..50d52780f 100644 --- a/DDCMS/src/plugins/DDTOBRodAlgo.cpp +++ b/DDCMS/src/plugins/DDTOBRodAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,15 +28,282 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); - Volume mother = ns.volume(args.parentName()); + string parentName = args.parentName(); + string central = args.str("CentralName"); // Name of the central piece + + double shift = args.dble("Shift"); // Shift in z + vector<string> sideRod = args.vecStr("SideRodName"); // Name of the Side Rod + vector<double> sideRodX = args.vecDble("SideRodX"); // x-positions + vector<double> sideRodY = args.vecDble("SideRodY"); // y-positions + vector<double> sideRodZ = args.vecDble("SideRodZ"); // z-positions + string endRod1 = args.str("EndRod1Name"); // Name of the End Rod of type 1 + vector<double> endRod1Y = args.vecDble("EndRod1Y"); // y-positions + vector<double> endRod1Z = args.vecDble("EndRod1Z"); // z-positions + string endRod2 = args.str("EndRod2Name"); // Name of the End Rod of type 2 + double endRod2Y = args.dble("EndRod2Y"); // y-position + double endRod2Z = args.dble("EndRod2Z"); // z-position + + string cable = args.str("CableName"); // Name of the Mother cable + double cableZ = args.dble("CableZ"); // z-position + + string clamp = args.str("ClampName"); // Name of the clamp + vector<double> clampX = args.vecDble("ClampX"); // x-positions + vector<double> clampZ = args.vecDble("ClampZ"); // z-positions + string sideCool = args.str("SideCoolName"); // Name of the Side Cooling Tube + vector<double> sideCoolX = args.vecDble("SideCoolX"); // x-positions + vector<double> sideCoolY = args.vecDble("SideCoolY"); // y-positions to avoid overlap with the module (be at the same level of EndCool) + vector<double> sideCoolZ = args.vecDble("SideCoolZ"); // z-positions + string endCool = args.str("EndCoolName"); // Name of the End Cooling Tube + string endCoolRot = args.str("EndCoolRot"); // Rotation matrix name for end cool + double endCoolY = args.dble("EndCoolY"); // y-position to avoid overlap with the module + double endCoolZ = args.dble("EndCoolZ"); // z-position + + string optFibre = args.str("OptFibreName"); // Name of the Optical Fibre + vector<double> optFibreX = args.vecDble("optFibreX"); // x-positions + vector<double> optFibreZ = args.vecDble("optFibreZ"); // z-positions + + string sideClamp1 = args.str("SideClamp1Name"); // Name of the side clamp of type 1 + vector<double> sideClampX = args.vecDble("SideClampX"); // x-positions + vector<double> sideClamp1DZ = args.vecDble("SideClamp1DZ"); // Delta(z)-positions + string sideClamp2 = args.str("SideClamp2Name"); // Name of the side clamp of type 2 + vector<double> sideClamp2DZ = args.vecDble("SideClamp2DZ"); // Delta(z)-positions + + string module = args.str("ModuleName"); // Name of the detector modules + vector<string> moduleRot = args.vecStr("ModuleRot"); // Rotation matrix name for module + vector<double> moduleY = args.vecDble("ModuleY"); // y-positions + vector<double> moduleZ = args.vecDble("ModuleZ"); // z-positions + vector<string> connect = args.vecStr("ICCName");; // Name of the connectors + vector<double> connectY = args.vecDble("ICCY"); // y-positions + vector<double> connectZ = args.vecDble("ICCZ"); // z-positions + + string aohName = args.str("AOHName"); // AOH name + vector<double> aohCopies = args.vecDble("AOHCopies"); // AOH copies to be positioned on each ICC + vector<double> aohX = args.vecDble("AOHx"); // AOH translation with respect small-ICC center (X) + vector<double> aohY = args.vecDble("AOHy"); // AOH translation with respect small-ICC center (Y) + vector<double> aohZ = args.vecDble("AOHz"); // AOH translation with respect small-ICC center (Z) + + LogDebug("TOBGeom") << "Parent " << parentName << " Central " << central << " NameSpace " + << ns.name << "\tShift " << shift; + for (int i=0; i<(int)(sideRod.size()); i++) { + LogDebug("TOBGeom") << sideRod[i] << " to be positioned " << sideRodX.size() + <<" times at y = " << sideRodY[i] << " z = " << sideRodZ[i] << " and x"; + for (double j : sideRodX) + LogDebug("TOBGeom") << "\tsideRodX[" << i << "] = " << j; + } + LogDebug("TOBGeom") << endRod1 << " to be " + << "positioned " << endRod1Y.size() << " times at"; + for (int i=0; i<(int)(endRod1Y.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\ty = " << endRod1Y[i] + << "\tz = " << endRod1Z[i]; + LogDebug("TOBGeom") << endRod2 << " to be " + << "positioned at y = " << endRod2Y << " z = " + << endRod2Z; + LogDebug("TOBGeom") << cable << " to be " + << "positioned at z = " << cableZ; + LogDebug("TOBGeom") << clamp << " to be " + << "positioned " << clampX.size() << " times at"; + for (int i=0; i<(int)(clampX.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tx = " << clampX[i] << "\tz = " + << clampZ[i]; + LogDebug("TOBGeom") << sideCool << " to be " + << "positioned " << sideCoolX.size() << " times at"; + for (int i=0; i<(int)(sideCoolX.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tx = " << sideCoolX[i] + << "\ty = " << sideCoolY[i] + << "\tz = " << sideCoolZ[i]; + LogDebug("TOBGeom") << endCool <<" to be " + << "positioned with " << endCoolRot << " rotation at" + << " y = " << endCoolY + << " z = " << endCoolZ; + LogDebug("TOBGeom") << optFibre << " to be " + << "positioned " << optFibreX.size() << " times at"; + for (int i=0; i<(int)(optFibreX.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tx = " << optFibreX[i] + << "\tz = " << optFibreZ[i]; + LogDebug("TOBGeom") << sideClamp1 << " to be " + << "positioned " << sideClampX.size() << " times at"; + for (int i=0; i<(int)(sideClampX.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tx = " << sideClampX[i] + << "\tdz = " << sideClamp1DZ[i]; + LogDebug("TOBGeom") << sideClamp2 << " to be " + << "positioned " << sideClampX.size() << " times at"; + for (int i=0; i<(int)(sideClampX.size()); i++) + LogDebug("TOBGeom") << "\t[" << i << "]\tx = " << sideClampX[i] + << "\tdz = " << sideClamp2DZ[i]; + LogDebug("TOBGeom") << "DDTOBRodAlgo debug:\t" << module <<" positioned " + << moduleRot.size() << " times"; + for (int i=0; i<(int)(moduleRot.size()); i++) + LogDebug("TOBGeom") << "\tRotation " << moduleRot[i] << "\ty = " + << moduleY[i] << "\tz = " << moduleZ[i]; + LogDebug("TOBGeom") << "DDTOBRodAlgo debug:\t" << connect.size() + << " ICC positioned with no rotation"; + for (int i=0; i<(int)(connect.size()); i++) + LogDebug("TOBGeom") << "\t" << connect[i] << "\ty = " << connectY[i] + << "\tz = " << connectZ[i]; + LogDebug("TOBGeom") << "DDTOBRodAlgo debug:\t" << aohName <<" AOH will be positioned on ICC's"; + for (int i=0; i<(int)(aohCopies.size()); i++) + LogDebug("TOBGeom") << " copies " << aohCopies[i] << "\tx = " << aohX[i] + << "\ty = " << aohY[i] << "\tz = " << aohZ[i]; + + string centName = central; + string child; + string rodName = parentName; + Volume rod = ns.volume(rodName); + + // Side Rods + for (int i=0; i<(int)(sideRod.size()); i++) { + for (int j=0; j<(int)(sideRodX.size()); j++) { + Position r(sideRodX[j], sideRodY[i], sideRodZ[i]); + child = sideRod[i]; + rod.placeVolume(ns.volume(child), /* j+1, */ r); + LogDebug("TOBGeom") << child << " number " << j+1 << " positioned in " + << rodName << " at " << r << " with no rotation"; + } + } + // Clamps + for (int i=0; i<(int)(clampX.size()); i++) { + Position r(clampX[i], 0, shift+clampZ[i]); + child = clamp; + rod.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " + << rodName << " at " << r << " with no rotation"; + } + // Side Cooling tubes + for (int i=0; i<(int)(sideCoolX.size()); i++) { + Position r(sideCoolX[i], sideCoolY[i], shift+sideCoolZ[i]); + child = sideCool; + rod.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " + << rodName << " at " << r << " with no rotation"; + } + // Optical Fibres + for (int i=0; i<(int)(optFibreX.size()); i++) { + Position r(optFibreX[i], 0, shift+optFibreZ[i]); + child = optFibre; + rod.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " + << rodName << " at " << r << " with no rotation"; + } + + // Side Clamps + for (int i=0; i<(int)(sideClamp1DZ.size()); i++) { + int j = i/2; + Position r(sideClampX[i],moduleY[j],shift+moduleZ[j]+sideClamp1DZ[i]); + child = sideClamp1; + rod.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " << rodName << " at " + << r << " with no rotation"; + } + for (int i=0; i<(int)(sideClamp2DZ.size()); i++) { + int j = i/2; + Position r(sideClampX[i],moduleY[j],shift+moduleZ[j]+sideClamp2DZ[i]); + child = sideClamp2; + rod.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " << rodName << " at " + << r << " with no rotation"; + } + + Volume cent = ns.volume(centName); + // End Rods + for (int i=0; i<(int)(endRod1Y.size()); i++) { + Position r(0, endRod1Y[i], shift+endRod1Z[i]); + child = endRod1; + cent.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " << centName << " at " + << r << " with no rotation"; + } + Position r1(0, endRod2Y, shift+endRod2Z); + child = endRod2; + cent.placeVolume(ns.volume(child), /* 1, */ r1); + LogDebug("TOBGeom") << child << " number 1 " << "positioned in " << centName << " at " << r1 + << " with no rotation"; + + // End cooling tubes + Position r2(0, endCoolY, shift+endCoolZ); + Rotation3D rot2 = ns.rotation(endCoolRot); + child = endCool; + cent.placeVolume(ns.volume(child), /* 1, */ Transform3D(rot2,r2)); + LogDebug("TOBGeom") << child << " number 1 " << "positioned in " << centName << " at " << r2 + << " with " << rot2; + + //Mother cable + Position r3(0, 0, shift+cableZ); + child = cable; + cent.placeVolume(ns.volume(child), /* 1, */ r3); + LogDebug("TOBGeom") << child << " number 1 " << "positioned in " << centName << " at " << r3 + << " with no rotation"; + + //Modules + for (int i=0; i<(int)(moduleRot.size()); i++) { + Position r(0, moduleY[i], shift+moduleZ[i]); + Rotation3D rot = ns.rotation(moduleRot[i]); + child = module; + cent.placeVolume(ns.volume(child), /* i+1, */ Transform3D(rot,r)); + LogDebug("TOBGeom") << child << " number " + << i+1 << " positioned in " << centName << " at " + << r << " with " << rot; + } + + //Connectors (ICC, CCUM, ...) + for (int i=0; i<(int)(connect.size()); i++) { + Position r(0, connectY[i], shift+connectZ[i]); + child = connect[i]; + cent.placeVolume(ns.volume(child), /* i+1, */ r); + LogDebug("TOBGeom") << child << " number " << i+1 << " positioned in " << centName << " at " + << r << " with no rotation"; + } - str << "Not implemented. To be done.... " << mother.name(); - printout(WARNING,"DDTOBRodAlgo",str); + //AOH (only on ICCs) + int copyNumber = 0; + for (int i=0; i<(int)(aohCopies.size()); i++) { + if(aohCopies[i] != 0) { + // first copy with (+aohX,+aohZ) translation + copyNumber++; + Position r(aohX[i] + 0, aohY[i] + connectY[i], aohZ[i] + shift+connectZ[i]); + child = aohName; + cent.placeVolume(ns.volume(child), r); // copyNumber + LogDebug("TOBGeom") << child << " number " << copyNumber << " positioned in " << centName << " at " + << r << " with no rotation"; + // if two copies add a copy with (-aohX,-aohZ) translation + if(aohCopies[i] == 2) { + copyNumber++; + r = Position(-aohX[i] + 0, aohY[i] + connectY[i], -aohZ[i] + shift+connectZ[i]); + child = aohName; + cent.placeVolume(ns.volume(child), r); // copyNumber + LogDebug("TOBGeom") << child << " number " << copyNumber << " positioned in " << centName << " at " + << r << " with no rotation"; + } + // if four copies add 3 copies with (-aohX,+aohZ) (-aohX,-aohZ) (+aohX,+aohZ) and translations + if(aohCopies[i] == 4) { + Position rr; + for (unsigned int j = 1; j<4; j++ ) { + copyNumber++; + child = aohName; + switch(j) { + case 1: + rr = Position(-aohX[i] + 0, aohY[i] + connectY[i], +aohZ[i] + shift+connectZ[i]); + cent.placeVolume(ns.volume(child), rr); // copyNumber + break; + case 2: + rr = Position(-aohX[i] + 0, aohY[i] + connectY[i], -aohZ[i] + shift+connectZ[i]); + cent.placeVolume(ns.volume(child), rr); // copyNumber + break; + case 3: + rr = Position(+aohX[i] + 0, aohY[i] + connectY[i], -aohZ[i] + shift+connectZ[i]); + cent.placeVolume(ns.volume(child), rr); // copyNumber + break; + } + LogDebug("TOBGeom") << child << " number " << copyNumber << " positioned in " << centName << " at " + << rr << " with no rotation"; + } + } + } + } + LogDebug("TOBGeom") << "<<== End of DDTOBRodAlgo construction ..."; return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTOBRodAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTOBRodAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerAngular.cpp b/DDCMS/src/plugins/DDTrackerAngular.cpp index bf6e48c61..7611265dc 100644 --- a/DDCMS/src/plugins/DDTrackerAngular.cpp +++ b/DDCMS/src/plugins/DDTrackerAngular.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt,e,true); AlgoArguments args(ctxt, e); // Header section of original DDTrackerAngular.h @@ -43,33 +38,26 @@ static long algorithm(Detector& /* description */, double startAngle = args.value<double>("StartAngle"); //Start anle double radius = args.value<double>("Radius"); //Radius vector<double> center = args.value<vector<double> >("Center"); //Phi values - double delta; //Increment in phi Volume mother = ns.volume(args.parentName()); Volume child = ns.volume(args.value<string>("ChildName")); + double delta = 0e0; //Increment in phi // Code section of original DDTrackerAngular.cc if (fabs(rangeAngle-360.0*CLHEP::deg)<0.001*CLHEP::deg) { delta = rangeAngle/double(n); - } else { - if (n > 1) { - delta = rangeAngle/double(n-1); - } else { - delta = 0.; - } + } else if (n > 1) { + delta = rangeAngle/double(n-1); } - str << "debug: Parameters for positioning:: n " + LogDebug("TrackerGeom") << "debug: Parameters for positioning:: n " << n << " Start, Range, Delta " << startAngle/CLHEP::deg << " " << rangeAngle/CLHEP::deg << " " << delta/CLHEP::deg << " Radius " << radius << " Centre " << center[0] << ", " << center[1] << ", "<<center[2]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); - - str << "debug: Parent " << mother.name() + LogDebug("TrackerGeom") << "debug: Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); double theta = 90.*CLHEP::deg; int copy = startCopyNo; @@ -87,11 +75,10 @@ static long algorithm(Detector& /* description */, rotation = ns.rotation(ns.prepend(rotstr)); } else { - str << "Creating a new " + LogDebug("TrackerGeom") << "Creating a new " << "rotation: " << rotstr << "\t90., " << phix/CLHEP::deg << ", 90.," << phiy/CLHEP::deg <<", 0, 0"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); RotationZYX rot; rotation = make_rotation3D(theta, phix, theta, phiy, 0., 0.); } @@ -102,10 +89,9 @@ static long algorithm(Detector& /* description */, double zpos = center[2]; Position tran(xpos, ypos, zpos); mother.placeVolume(child, Transform3D(rotation,tran)); - str << "test " << child.name() << " number " - << copy << " positioned in " << mother.name() << " at " - << tran << " with " << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerAngular",str); + LogDebug("TrackerGeom") << "test " << child.name() << " number " + << copy << " positioned in " << mother.name() << " at " + << tran << " with " << rotation; copy += incrCopyNo; phi += delta; } @@ -113,4 +99,4 @@ static long algorithm(Detector& /* description */, } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerAngular,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerAngular,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerLinear.cpp b/DDCMS/src/plugins/DDTrackerLinear.cpp index 92b5cef54..2d9533784 100644 --- a/DDCMS/src/plugins/DDTrackerLinear.cpp +++ b/DDCMS/src/plugins/DDTrackerLinear.cpp @@ -17,23 +17,17 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; -using namespace dd4hep::detail; using namespace dd4hep::cms; -static long create_element(Detector& /* description */, - ParsingContext& ctxt, - xml_h e, - SensitiveDetector& /* sens */) +static long algorithm(Detector& /* description */, + ParsingContext& ctxt, + xml_h e, + SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); int startcn = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; @@ -48,8 +42,8 @@ static long create_element(Detector& /* description */, Volume mother = ns.volume(args.parentName()); Volume child = ns.volume(args.value<string>("ChildName")); - printout(INFO,"DDTrackerLinear","+++ Executing Algorithm. rParent:%s",mother.name()); - str << "debug: Parent " << mother.name() + LogDebug("TrackerGeom") << "+++ Executing Algorithm. rParent:" << mother.name(); + LogDebug("TrackerGeom") << "debug: Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name << "\tNumber " << number << "\tAxis (theta/phi) " << theta/dd4hep::deg << ", " @@ -57,7 +51,6 @@ static long create_element(Detector& /* description */, << ", " << delta << "\tCentre " << centre[0] << ", " << centre[1] << ", " << centre[2] << "\tRotation " << rotMat; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerLinear",str); Position direction(sin(theta)*cos(phi),sin(theta)*sin(phi),cos(theta)); Position base(centre[0],centre[1],centre[2]); @@ -71,14 +64,13 @@ static long create_element(Detector& /* description */, /* PlacedVolume pv = */ rotMat.empty() ? mother.placeVolume(child,Transform3D(rot,tran)) : mother.placeVolume(child,tran); - str << child.name() << " number " - << ci << " positioned in " << mother.name() << " at " - << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerLinear",str); + LogDebug("TrackerGeom") << child.name() << " number " + << ci << " positioned in " << mother.name() << " at " + << tran << " with " << rot; } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerLinear,create_element) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerLinear,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp b/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp index 9e231d4e0..29119f4d3 100644 --- a/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp +++ b/DDCMS/src/plugins/DDTrackerPhiAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,13 +28,12 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); Volume child = ns.volume(args.childName()); int startcn = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; - int incrcn = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; + int incrcn = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; vector<double> phi = args.value<vector<double> >("Phi"); // Phi values vector<double> zpos = args.value<vector<double> >("ZPos"); // Z positions int numcopies = args.find("NumCopies") ? args.value<int>("NumCopies") : int(phi.size()); @@ -46,27 +41,21 @@ static long algorithm(Detector& /* description */, double tilt = args.value<double>("Tilt"); if ( numcopies != int(phi.size()) ) { - str << "error: Parameter " + LogDebug("TrackerGeom") << "error: Parameter " << "NumCopies does not agree with the size " << "of the Phi vector. It was adjusted to " << "be the size of the Phi vector and may " << "lead to crashes or errors."; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); } - - str << "debug: Parameters for position" + LogDebug("TrackerGeom") << "debug: Parameters for position" << "ing:: " << " Radius " << radius << " Tilt " << tilt/CLHEP::deg << " Copies " << phi.size() << " at"; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); - for (int i=0; i<(int)(phi.size()); i++) { - str << "\t[" << i << "] phi = " << phi[i]/CLHEP::deg + for (int i=0; i<(int)(phi.size()); i++) + LogDebug("TrackerGeom") << "\t[" << i << "] phi = " << phi[i]/CLHEP::deg << " z = " << zpos[i]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); - } - str << "debug: Parent " << mother.name() + LogDebug("TrackerGeom") << "debug: Parent " << mother.name() <<"\tChild " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); double theta = 90.*CLHEP::deg; int ci = startcn; @@ -78,15 +67,14 @@ static long algorithm(Detector& /* description */, Rotation3D rot = make_rotation3D(theta, phix, theta, phiy, 0., 0.); Position tran(xpos, ypos, zpos[i]); /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rot,tran)); - str << "test: " << child.name() << " number " + LogDebug("TrackerGeom") << "test: " << child.name() << " number " << ci << " positioned in " << mother.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAlgo",str); ci = ci+incrcn; } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerPhiAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerPhiAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp b/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp index b56945947..5ad9bdaa6 100644 --- a/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp +++ b/DDCMS/src/plugins/DDTrackerPhiAltAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); Volume mother = ns.volume(args.parentName()); @@ -47,16 +42,14 @@ static long algorithm(Detector& /* description */, int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; //Start copy number int incrCopyNo = args.find("IncrCopyNo") ? args.value<int>("IncrCopyNo") : 1; //Increment in copy number - str << "Parameters for positioning-- Tilt " << tilt - << "\tStartAngle " << startAngle/CLHEP::deg - << "\tRangeAngle " << rangeAngle/CLHEP::deg - << "\tRin " << radiusIn << "\tRout " << radiusOut - << "\t ZPos " << zpos << "\tCopy Numbers " << number - << " Start/Increment " << startCopyNo << ", " - << incrCopyNo; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); - str << "Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); + LogDebug("TrackerGeom") << "Parent " << mother.name() << "\tChild " << child.name() << " NameSpace " << ns.name; + LogDebug("TrackerGeom") << "Parameters for positioning-- Tilt " << tilt + << "\tStartAngle " << startAngle/CLHEP::deg + << "\tRangeAngle " << rangeAngle/CLHEP::deg + << "\tRin " << radiusIn << "\tRout " << radiusOut + << "\t ZPos " << zpos << "\tCopy Numbers " << number + << " Start/Increment " << startCopyNo << ", " + << incrCopyNo; if (number > 0) { double theta = 90.*CLHEP::deg; @@ -88,11 +81,10 @@ static long algorithm(Detector& /* description */, } Position tran(xpos, ypos, zpos); /* PlacedVolume pv = */ mother.placeVolume(child,Transform3D(rotation,tran)); - str << "" << child.name() - << " number " << copyNo << " positioned in " - << mother.name() << " at " << tran << " with " - << rotation; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerPhiAltAlgo",str); + LogDebug("TrackerGeom") << "" << child.name() + << " number " << copyNo << " positioned in " + << mother.name() << " at " << tran << " with " + << rotation; copyNo += incrCopyNo; } } @@ -100,5 +92,5 @@ static long algorithm(Detector& /* description */, } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerPhiAltAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerPhiAltAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp b/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp index 57faf42ec..d2d9c8a88 100644 --- a/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp +++ b/DDCMS/src/plugins/DDTrackerXYZPosAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; @@ -44,18 +39,16 @@ static long algorithm(Detector& /* description */, vector<double> zvec = args.value<vector<double> >("ZPositions"); // Z positions vector<string> rotMat = args.value<vector<string> >("Rotations"); // Names of rotation matrices - str << "debug: Parent " << mother.name() - << "\tChild " << child.name() << " NameSpace " - << ns.name << "\tCopyNo (Start/Increment) " - << startCopyNo << ", " << incrCopyNo << "\tNumber " - << xvec.size() << ", " << yvec.size() << ", " << zvec.size(); - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + LogDebug("TrackerGeom") << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name << "\tCopyNo (Start/Increment) " + << startCopyNo << ", " << incrCopyNo << "\tNumber " + << xvec.size() << ", " << yvec.size() << ", " << zvec.size(); for (int i = 0; i < (int)(zvec.size()); i++) { - str << "\t[" << i << "]\tX = " << xvec[i] - << "\t[" << i << "]\tY = " << yvec[i] - << "\t[" << i << "]\tZ = " << zvec[i] - << ", Rot.Matrix = " << rotMat[i]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + LogDebug("TrackerGeom") << "\t[" << i << "]\tX = " << xvec[i] + << "\t[" << i << "]\tY = " << yvec[i] + << "\t[" << i << "]\tZ = " << zvec[i] + << ", Rot.Matrix = " << rotMat[i]; } for (int i=0, copy = startCopyNo; i<(int)(zvec.size()); i++) { @@ -64,15 +57,13 @@ static long algorithm(Detector& /* description */, /* PlacedVolume pv = */ rotMat[i] != "NULL" ? mother.placeVolume(child,Transform3D(ns.rotation(rotMat[i]),tran)) : mother.placeVolume(child,tran); - str << "test: " << child.name() - <<" number " << copy << " positioned in " - << mother.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerXYZPosAlgo",str); + LogDebug("TrackerGeom") << "test: " << child.name() + <<" number " << copy << " positioned in " + << mother.name() << " at " << tran << " with " << rot; copy += incrCopyNo; } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerXYZPosAlgo,algorithm) - +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerXYZPosAlgo,algorithm) diff --git a/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp b/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp index e375c43dd..c7e97b94b 100644 --- a/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp +++ b/DDCMS/src/plugins/DDTrackerZPosAlgo.cpp @@ -17,12 +17,8 @@ // Framework include files #include "DD4hep/DetFactoryHelper.h" -#include "DD4hep/Printout.h" #include "DDCMS/DDCMSPlugins.h" -// C/C++ include files -#include <sstream> - using namespace std; using namespace dd4hep; using namespace dd4hep::cms; @@ -32,7 +28,6 @@ static long algorithm(Detector& /* description */, xml_h e, SensitiveDetector& /* sens */) { - stringstream str; Namespace ns(ctxt, e, true); AlgoArguments args(ctxt, e); int startCopyNo = args.find("StartCopyNo") ? args.value<int>("StartCopyNo") : 1; @@ -42,16 +37,13 @@ static long algorithm(Detector& /* description */, vector<double> zvec = args.value<vector<double> >("ZPositions"); // Z positions vector<string> rotMat = args.value<vector<string> >("Rotations"); // Names of rotation matrices - str << "debug: Parent " << mother.name() - << "\tChild " << child.name() << " NameSpace " - << ns.name << "\tCopyNo (Start/Increment) " - << startCopyNo << ", " << incrCopyNo << "\tNumber " << zvec.size(); - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); - for (int i = 0; i < (int)(zvec.size()); i++) { - str << "\t[" << i << "]\tZ = " << zvec[i] - << ", Rot.Matrix = " << rotMat[i]; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); - } + LogDebug("TrackerGeom") << "debug: Parent " << mother.name() + << "\tChild " << child.name() << " NameSpace " + << ns.name << "\tCopyNo (Start/Increment) " + << startCopyNo << ", " << incrCopyNo << "\tNumber " << zvec.size(); + for (int i = 0; i < (int)(zvec.size()); i++) + LogDebug("TrackerGeom") << "\t[" << i << "]\tZ = " << zvec[i] + << ", Rot.Matrix = " << rotMat[i]; for (int i=0, copy = startCopyNo; i<(int)(zvec.size()); i++) { Position tran(0, 0, zvec[i]); @@ -59,15 +51,14 @@ static long algorithm(Detector& /* description */, /* PlacedVolume pv = */ rotMat[i] != "NULL" ? mother.placeVolume(child,Transform3D(ns.rotation(rotMat[i]),tran)) : mother.placeVolume(child,tran); - str << "test: " << child.name() - <<" number " << copy << " positioned in " - << mother.name() << " at " << tran << " with " << rot; - printout(ctxt.debug_algorithms ? ALWAYS : DEBUG,"DDTrackerZPosAlgo",str); + LogDebug("TrackerGeom") << "test: " << child.name() + <<" number " << copy << " positioned in " + << mother.name() << " at " << tran << " with " << rot; copy += incrCopyNo; } return 1; } // first argument is the type from the xml file -DECLARE_DDCMS_DETELEMENT(track_DDTrackerZPosAlgo,algorithm) +DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTrackerZPosAlgo,algorithm) diff --git a/DDCond/src/Type1/Manager_Type1.cpp b/DDCond/src/Type1/Manager_Type1.cpp index 5a0a3d287..d05fa6258 100644 --- a/DDCond/src/Type1/Manager_Type1.cpp +++ b/DDCond/src/Type1/Manager_Type1.cpp @@ -81,13 +81,14 @@ namespace { if ( typ && !iov->has_range() ) return typ; return 0; } +#if 0 /// Helper: Specialized IOV check for range IOV values template <> const IOVType* check_iov_type<Range>(const Manager_Type1* o, const IOV* iov) { const IOVType* typ = check_iov_type<void>(o,iov); if ( typ && iov->has_range() ) return typ; return 0; } - +#endif /// Helper: Check conditions result for consistency template <typename T> void __check_values__(const Manager_Type1* o, Condition::key_type key, const IOV* iov) { diff --git a/DDCore/include/DD4hep/VolumeProcessor.h b/DDCore/include/DD4hep/VolumeProcessor.h new file mode 100644 index 000000000..f1bedab30 --- /dev/null +++ b/DDCore/include/DD4hep/VolumeProcessor.h @@ -0,0 +1,179 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== +#ifndef DD4HEP_DDCORE_VOLUMEPROCESSOR_H +#define DD4HEP_DDCORE_VOLUMEPROCESSOR_H + +// Framework includes +#include "DD4hep/DetElement.h" +#include "DD4hep/Volumes.h" + +// C/C++ include files +#include <memory> + +/// Namespace for the AIDA detector description toolkit +namespace dd4hep { + + /// Generic PlacedVolume processor + /** + * Please note that the principle of locality applies: + * The object is designed for stack allocation and configuration. + * It may NOT be shared across threads! + * + * \author M.Frank + * \version 1.0 + * \date 31/05/2017 + * \ingroup DD4HEP_CORE + */ + class PlacedVolumeProcessor { + public: + /// Initializing constructor + PlacedVolumeProcessor() = default; + /// R-value copy from a temporary (Since processor is reference) + PlacedVolumeProcessor(PlacedVolumeProcessor&& copy) = default; + /// Default copy constructor + PlacedVolumeProcessor(const PlacedVolumeProcessor& copy) = default; + /// Default destructor + virtual ~PlacedVolumeProcessor(); + /// Default assignment + PlacedVolumeProcessor& operator=(const PlacedVolumeProcessor& copy) = default; + /// Callback to output PlacedVolume information of an single Placement + virtual int operator()(PlacedVolume pv, int level) const = 0; + /// Callback to output PlacedVolume information of an entire Placement + virtual int process(PlacedVolume pv, int level, bool recursive) const; + }; + + /// PlacedVolume scanner using a Processor object + /** + * Please see the documentation of the + * PlacedVolumeProcessor base class for further information. + * The only requirement to the object is to fullfill the callback signature. + * + * \author M.Frank + * \version 1.0 + * \date 31/05/2017 + * \ingroup DD4HEP_CORE + */ + template <typename T> class PlacementProcessor : virtual public PlacedVolumeProcessor { + public: + /// Reference to execution object implementing operator()(PlacedVolume pv, int level) + T& processor; + public: + /// Default constructor + PlacementProcessor() = delete; + /// Default constructor + PlacementProcessor(T& p) : processor(p) {} + /// Default move constructor is disabled + PlacementProcessor(T&& p) = delete; + /// R-value copy from a temporary (Since processor is reference) + PlacementProcessor(PlacementProcessor&& copy) = default; + /// Default copy constructor + PlacementProcessor(const PlacementProcessor& copy) = default; + /// Default destructor + virtual ~PlacementProcessor() = default; + /// Default assignment + PlacementProcessor& operator=(const PlacementProcessor& copy) = default; + /// Callback to output detector information of an single placement + virtual int operator()(PlacedVolume pv, int level) const final + { return (processor)(pv, level); } + }; + + /// Instantiation helper + template <typename T> inline + PlacementProcessor<typename std::remove_reference<T>::type> placementProcessor(T&& proc) + { return PlacementProcessor<typename std::remove_reference<T>::type>(std::forward<T>(proc)); } + + /// Wrapper to call objects in the form of a PlacedVolume processor. + /** + * \author M.Frank + * \version 1.0 + * \date 31/05/2017 + * \ingroup DD4HEP_CORE + */ + template <typename T> class PlacementProcessorShared : public PlacedVolumeProcessor { + public: + /// Reference to execution object implementing operator()(PlacedVolume pv, int level) + std::shared_ptr<T> processor; + public: + /// Default constructor + PlacementProcessorShared() = delete; + /// Default constructor + PlacementProcessorShared(std::shared_ptr<T>& p) : processor(p) {} + /// Default copy constructor + PlacementProcessorShared(const PlacementProcessorShared& copy) = default; + /// Default destructor + virtual ~PlacementProcessorShared() = default; + /// Default assignment + PlacementProcessorShared& operator=(const PlacementProcessorShared& copy) = default; + /// Callback to output detector information of an single DetElement + virtual int operator()(PlacedVolume pv, int level) const final + { return (*processor)(pv, level); } + }; + + /// Helper to run placement scan through volume hierarchies scans + /** + * This wrapper converts any object, which has the signature + * int operator()(DetElement de, int level) const + * The object is automatically wrapped to a PlacedVolumeProcessor + * and the PlacedVolume tree is scanned depending on the scanning + * arguments. + * + * \author M.Frank + * \version 1.0 + * \date 01/04/2016 + * \ingroup DD4HEP_CORE + */ + class PlacedVolumeScanner { + public: + /// Default constructor + PlacedVolumeScanner() = default; + /// Copy constructor + PlacedVolumeScanner(const PlacedVolumeScanner& copy) = default; + /// Assignment operator + PlacedVolumeScanner& operator=(const PlacedVolumeScanner& copy) = default; + + /// Constructor performing the scan internally + template <typename Q> + PlacedVolumeScanner(Q& proc, DetElement start, int level=0, bool recursive=true) + { scan(proc, start.placement(), level, recursive); } + + /// Constructor performing the scan internally + template <typename Q> + PlacedVolumeScanner(const Q& proc, DetElement start, int level=0, bool recursive=true) + { scan(proc, start.placement(), level, recursive); } + + /// Constructor performing the scan internally + template <typename Q> + PlacedVolumeScanner(Q& proc, PlacedVolume start, int level=0, bool recursive=true) + { scan(proc, start, level, recursive); } + + /// Constructor performing the scan internally + template <typename Q> + PlacedVolumeScanner(const Q& proc, PlacedVolume start, int level=0, bool recursive=true) + { scan(proc, start, level, recursive); } + + /// PlacedVolume element tree scanner using wrapped PlacedVolumeProcessor objects + template <typename Q> + int scan(Q& p, PlacedVolume start, int level=0, bool recursive=true) const { + auto proc = placementProcessor(p); + return proc.process(start, level, recursive); + } + + /// PlacedVolume element tree scanner using wrapped PlacedVolumeProcessor objects + template <typename Q> + int scan(const Q& p, PlacedVolume start, int level=0, bool recursive=true) const { + auto proc = placementProcessor(p); + return proc.process(start, level, recursive); + } + }; +} /* End namespace dd4hep */ +#endif /* DD4HEP_DDCORE_VOLUMEPROCESSOR_H */ diff --git a/DDCore/include/DD4hep/Volumes.h b/DDCore/include/DD4hep/Volumes.h index 05fcea464..3f3405797 100644 --- a/DDCore/include/DD4hep/Volumes.h +++ b/DDCore/include/DD4hep/Volumes.h @@ -141,6 +141,24 @@ namespace dd4hep { typedef PlacedVolumeExtension Object; typedef PlacedVolumeExtension::VolIDs VolIDs; + /// Abstract base for processing callbacks to PlacedVolume objects + /** Helper to facilitate building plugins, which instrument + * placements and volumes e.g. during geometry scans. + * + * \author M.Frank + * \version 1.0 + * \ingroup DD4HEP_CORE + */ + class Processor { + public: + /// Default constructor + Processor(); + /// Default destructor + virtual ~Processor(); + /// Container callback for object processing + virtual int processPlacement(PlacedVolume pv) = 0; + }; + /// Default constructor PlacedVolume() = default; /// Copy assignment diff --git a/DDCore/src/GeoDictionary.h b/DDCore/src/GeoDictionary.h index aa3d3d8ff..7900069a0 100644 --- a/DDCore/src/GeoDictionary.h +++ b/DDCore/src/GeoDictionary.h @@ -19,6 +19,7 @@ // Framework include files #include "DD4hep/Volumes.h" #include "DD4hep/Shapes.h" +#include "DD4hep/VolumeProcessor.h" // C/C++ include files #include <vector> @@ -44,6 +45,8 @@ using namespace std; #pragma link C++ class dd4hep::Handle<TGeoVolume>+; #pragma link C++ class dd4hep::PlacedVolume+; +#pragma link C++ class dd4hep::PlacedVolume::Processor+; + #ifndef __ROOTCLING__ template vector<pair<string, int> >; template vector<pair<string, int> >::iterator; @@ -122,5 +125,8 @@ template vector<pair<string, int> >::iterator; #pragma link C++ class dd4hep::UnionSolid+; #pragma link C++ class dd4hep::IntersectionSolid+; +#pragma link C++ class dd4hep::PlacedVolumeProcessor+; +#pragma link C++ class dd4hep::PlacedVolumeScanner+; + #endif // __CINT__ #endif /* DD4HEP_DDCORE_ROOTDICTIONARY_H */ diff --git a/DDCore/src/RootDictionary.h b/DDCore/src/RootDictionary.h index 8009d57e0..8f2fcc9e5 100644 --- a/DDCore/src/RootDictionary.h +++ b/DDCore/src/RootDictionary.h @@ -29,10 +29,11 @@ #include "DD4hep/World.h" #include "DD4hep/DD4hepUI.h" #include "DD4hep/Callback.h" -#include "DD4hep/DetectorData.h" #include "DD4hep/Conditions.h" #include "DD4hep/Alignments.h" #include "DD4hep/FieldTypes.h" +#include "DD4hep/DetectorData.h" +#include "DD4hep/DetectorProcessor.h" #include "DD4hep/ComponentProperties.h" // C/C++ include files @@ -98,7 +99,7 @@ template class pair<dd4hep::Callback,unsigned long>; #pragma link C++ class map<string, dd4hep::Handle<dd4hep::NamedObject> >+; #pragma link C++ class map<string, dd4hep::Handle<dd4hep::NamedObject> >::iterator; #pragma link C++ class map<string, dd4hep::Handle<dd4hep::NamedObject> >::const_iterator; -#pragma link C++ class dd4hep::dd4hepUI; +#pragma link C++ class dd4hep::detail::DD4hepUI; #ifdef R__MACOSX // We only need these declarations for the clang compiler @@ -245,6 +246,7 @@ template class dd4hep::Handle<TNamed>; #pragma link C++ class dd4hep::WorldObject+; #pragma link C++ class dd4hep::Handle<dd4hep::WorldObject>+; #pragma link C++ class dd4hep::DetElement+; +#pragma link C++ class dd4hep::DetElement::Processor+; #pragma link C++ class dd4hep::DetElementObject+; #pragma link C++ class dd4hep::Handle<dd4hep::DetElementObject>+; #pragma link C++ class vector<dd4hep::DetElement>+; @@ -253,6 +255,9 @@ template class dd4hep::Handle<TNamed>; #pragma link C++ class map<string,dd4hep::DetElement>::iterator; #pragma link C++ class map<string,dd4hep::DetElement>::const_iterator; +#pragma link C++ class dd4hep::DetectorProcessor+; +#pragma link C++ class dd4hep::DetectorScanner+; + #ifdef R__MACOSX // We only need these declarations for the clang compiler #pragma link C++ function operator==( const map<string, dd4hep::DetElement >::iterator&,const map<string, dd4hep::DetElement >::iterator& ); diff --git a/DDCore/src/VolumeManager.cpp b/DDCore/src/VolumeManager.cpp index 2d6bc5cf7..231947ee3 100644 --- a/DDCore/src/VolumeManager.cpp +++ b/DDCore/src/VolumeManager.cpp @@ -194,14 +194,13 @@ namespace dd4hep { /// Populate the Volume manager void populate(DetElement e) { //const char* typ = 0;//::getenv("VOLMGR_NEW"); - const DetElement::Children& c = e.children(); SensitiveDetector parent_sd; if ( e->flag&DetElement::Object::HAVE_SENSITIVE_DETECTOR ) { parent_sd = m_detDesc.sensitiveDetector(e.name()); } //printout(INFO, "VolumeManager", "++ Executing %s plugin manager version",typ ? "***NEW***" : "***OLD***"); - for (const auto& i : c ) { - DetElement de = i.second; + //for (const auto& i : c ) { + DetElement de = e;//i.second; PlacedVolume pv = de.placement(); if (pv.isValid()) { Chain chain; @@ -209,11 +208,12 @@ namespace dd4hep { SensitiveDetector sd = parent_sd; m_entries.clear(); scanPhysicalVolume(de, de, pv, coding, sd, chain); - continue; + //continue; + return; } printout(WARNING, "VolumeManager", "++ Detector element %s of type %s has no placement.", de.name(), de.type().c_str()); - } + //} } /// Scan a single physical volume and look for sensitive elements below size_t scanPhysicalVolume(DetElement& parent, DetElement e, PlacedVolume pv, diff --git a/DDCore/src/VolumeProcessor.cpp b/DDCore/src/VolumeProcessor.cpp new file mode 100644 index 000000000..84444e085 --- /dev/null +++ b/DDCore/src/VolumeProcessor.cpp @@ -0,0 +1,41 @@ +//========================================================================== +// AIDA Detector description implementation +//-------------------------------------------------------------------------- +// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +// All rights reserved. +// +// For the licensing terms see $DD4hepINSTALL/LICENSE. +// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +// +// Author : M.Frank +// +//========================================================================== + +// Framework includes +#include "DD4hep/Printout.h" +#include "DD4hep/VolumeProcessor.h" + +using namespace dd4hep; + +/// Default destructor +PlacedVolumeProcessor::~PlacedVolumeProcessor() { +} + +/// Callback to output PlacedVolume information of an entire DetElement +int PlacedVolumeProcessor::process(PlacedVolume pv, int level, bool recursive) const { + if ( pv.isValid() ) { + int ret = (*this)(pv, level); + TGeoNode* node = pv.ptr(); + if ( recursive ) { + for (Int_t idau = 0, ndau = node->GetNdaughters(); idau < ndau; ++idau) { + PlacedVolume placement(node->GetDaughter(idau)); + if ( placement.data() ) { + ret += process(placement,level+1,recursive); + } + } + } + return ret; + } + except("PlacedVolume","Cannot process an invalid PlacedVolume element"); + return 0; +} diff --git a/DDCore/src/Volumes.cpp b/DDCore/src/Volumes.cpp index 348715d5d..185f07fae 100644 --- a/DDCore/src/Volumes.cpp +++ b/DDCore/src/Volumes.cpp @@ -303,6 +303,14 @@ static TGeoVolume* _createTGeoVolumeAssembly(const string& name) { return e; } +/// Default constructor +PlacedVolume::Processor::Processor() { +} + +/// Default destructor +PlacedVolume::Processor::~Processor() { +} + /// Default constructor PlacedVolumeExtension::PlacedVolumeExtension() : TGeoExtension(), magic(0), refCount(0), volIDs() { @@ -504,7 +512,7 @@ static PlacedVolume _addNode(TGeoVolume* par, TGeoVolume* daughter, TGeoMatrix* } TGeoVolume* parent = par; TObjArray* a = parent->GetNodes(); - Int_t id = a ? a->GetEntries() : 0; + Int_t id = 5*(a ? a->GetEntries() : 0); if (transform && transform != detail::matrix::_identity()) { string nam = string(daughter->GetName()) + "_placement"; transform->SetName(nam.c_str()); @@ -521,7 +529,9 @@ static PlacedVolume _addNode(TGeoVolume* par, TGeoVolume* daughter, TGeoMatrix* } } parent->AddNode(daughter, id, transform); - geo_node_t* n = static_cast<geo_node_t*>(parent->GetNode(id)); + //geo_node_t* n = static_cast<geo_node_t*>(parent->GetNode(id)); + TString nam_id = TString::Format("%s_%d", daughter->GetName(), id); + geo_node_t* n = static_cast<geo_node_t*>(parent->GetNode(nam_id)); n->geo_node_t::SetUserExtension(new PlacedVolume::Object()); return PlacedVolume(n); } diff --git a/DDCore/src/plugins/StandardPlugins.cpp b/DDCore/src/plugins/StandardPlugins.cpp index 4345a1cea..5574a27a6 100644 --- a/DDCore/src/plugins/StandardPlugins.cpp +++ b/DDCore/src/plugins/StandardPlugins.cpp @@ -20,6 +20,7 @@ #include "DD4hep/DD4hepUnits.h" #include "DD4hep/DetectorTools.h" #include "DD4hep/PluginCreators.h" +#include "DD4hep/VolumeProcessor.h" #include "DD4hep/DetectorProcessor.h" #include "DD4hep/DD4hepRootPersistency.h" #include "XML/DocumentHandler.h" @@ -68,12 +69,27 @@ DECLARE_CONSTRUCTOR(Detector_constructor,create_description_instance) */ static long display(Detector& description, int argc, char** argv) { TGeoManager& mgr = description.manager(); + int vislevel = 4, visopt = 1; const char* opt = "ogl"; - if (argc > 0) { - opt = argv[0]; + for(int i = 0; i < argc && argv[i]; ++i) { + if ( 0 == ::strncmp("-option",argv[i],4) ) + opt = argv[++i]; + else if ( 0 == ::strncmp("-level",argv[i],4) ) + vislevel = ::atol(argv[++i]); + else if ( 0 == ::strncmp("-visopt",argv[i],4) ) + visopt = ::atol(argv[++i]); + else { + cout << + "Usage: -plugin <name> -arg [-arg] \n" + " -option <string> ROOT Draw option. Default: 'ogl' \n" + " -level <number> Visualization level [TGeoManager::SetVisLevel] Default: 4 \n" + " -visopt <number> Visualization option [TGeoManager::SetVisOption] Default: 1 \n" + "\tArguments given: " << arguments(argc,argv) << endl << flush; + ::exit(EINVAL); + } } - mgr.SetVisLevel(4); - mgr.SetVisOption(1); + mgr.SetVisLevel(vislevel); + mgr.SetVisOption(visopt); TGeoVolume* vol = mgr.GetTopVolume(); if (vol) { vol->Draw(opt); @@ -644,6 +660,7 @@ DECLARE_APPLY(DD4hepCheckNominals,check_nominals) */ static long dump_volume_tree(Detector& description, int argc, char** argv) { struct Actor { + bool m_printPathes = false; bool m_printVolIDs = false; bool m_printPointers = false; bool m_printPositions = false; @@ -659,11 +676,12 @@ static long dump_volume_tree(Detector& description, int argc, char** argv) { char c = ::tolower(av[i][0]); char* p = av[i]; if ( c == '-' ) { ++p; c = ::tolower(av[i][1]); } - if ( ::strncmp(p,"volume_ids",3) == 0 ) m_printVolIDs = true; - else if ( ::strncmp(p,"positions",3) == 0 ) m_printPositions = true; - else if ( ::strncmp(p,"materials",3) == 0 ) m_printMaterials = true; - else if ( ::strncmp(p,"pointers",3) == 0 ) m_printPointers = true; - else if ( ::strncmp(p,"sensitive",3) == 0 ) m_printSensitivesOnly = true; + if ( ::strncmp(p,"volume_ids",3) == 0 ) m_printVolIDs = true; + else if ( ::strncmp(p,"pathes",3) == 0 ) m_printPathes = true; + else if ( ::strncmp(p,"positions",3) == 0 ) m_printPositions = true; + else if ( ::strncmp(p,"materials",3) == 0 ) m_printMaterials = true; + else if ( ::strncmp(p,"pointers",3) == 0 ) m_printPointers = true; + else if ( ::strncmp(p,"sensitive",3) == 0 ) m_printSensitivesOnly = true; } } ~Actor() { @@ -675,13 +693,17 @@ static long dump_volume_tree(Detector& description, int argc, char** argv) { } } - long dump(TGeoNode* ideal, TGeoNode* aligned,int level, PlacedVolume::VolIDs volids) { + long dump(string prefix, TGeoNode* ideal, TGeoNode* aligned, int level, PlacedVolume::VolIDs volids) { char fmt[128]; - string opt_info; PlacedVolume pv(ideal); bool sensitive = false; + string opt_info, pref = prefix; ++m_numNodes; + if ( m_printPathes ) { + pref += "/"; + pref += aligned->GetName(); + } if ( m_printPositions || m_printVolIDs ) { stringstream log; if ( m_printPointers ) { @@ -732,25 +754,25 @@ static long dump_volume_tree(Detector& description, int argc, char** argv) { char sens = pv.volume().isSensitive() ? 'S' : ' '; if ( m_printPointers ) { if ( ideal == aligned ) { - ::snprintf(fmt,sizeof(fmt),"%03d [Ideal:%p] %%-%ds %%-16s (%%s) \t %c %%s", + ::snprintf(fmt,sizeof(fmt),"%03d %%s [Ideal:%p] %%-%ds %%-16s (%%s) \t %c %%s", level+1,(void*)ideal,2*level+1,sens); } else { - ::snprintf(fmt,sizeof(fmt),"%03d Ideal:%p Aligned:%p %%-%ds %%-16s (%%s) %c %%s", + ::snprintf(fmt,sizeof(fmt),"%03d %%s Ideal:%p Aligned:%p %%-%ds %%-16s (%%s) %c %%s", level+1,(void*)ideal,(void*)aligned,2*level+1,sens); } } else { if ( ideal == aligned ) { - ::snprintf(fmt,sizeof(fmt),"%03d %%-%ds %%-16s (%%s) \t %c %%s", + ::snprintf(fmt,sizeof(fmt),"%03d %%s %%-%ds %%-16s (%%s) \t %c %%s", level+1,2*level+1,sens); } else { - ::snprintf(fmt,sizeof(fmt),"%03d Ideal:%p Aligned:%p %%-%ds %%-16s (%%s) %c %%s", + ::snprintf(fmt,sizeof(fmt),"%03d %%s Ideal:%p Aligned:%p %%-%ds %%-16s (%%s) %c %%s", level+1,(void*)ideal,(void*)aligned,2*level+1,sens); } } - printout(INFO,"VolumeDump",fmt,"", + printout(INFO,"VolumeDump",fmt,pref.c_str(),"", aligned->GetName(), volume ? volume->GetShape()->IsA()->GetName() : "[Invalid Volume]", opt_info.c_str()); @@ -761,19 +783,19 @@ static long dump_volume_tree(Detector& description, int argc, char** argv) { Material mat = vol.material(); TGeoMaterial* mptr = mat->GetMaterial(); bool ok = mat.A() == mptr->GetA() && mat.Z() == mptr->GetZ(); - ::snprintf(fmt,sizeof(fmt),"%03d %%-%ds Material: %%-16s A:%%f %%f Z:%%f %%f", + ::snprintf(fmt,sizeof(fmt),"%03d %%s %%-%ds Material: %%-16s A:%%f %%f Z:%%f %%f", level+1,2*level+1); ++m_numMaterial; if ( !ok ) ++m_numMaterialERR; printout(ok ? INFO : ERROR, - "VolumeDump", fmt, "", mat.name(), mat.A(), mptr->GetA(), mat.Z(), mptr->GetZ()); + "VolumeDump", fmt, pref.c_str(), "", mat.name(), mat.A(), mptr->GetA(), mat.Z(), mptr->GetZ()); } for (Int_t idau = 0, ndau = aligned->GetNdaughters(); idau < ndau; ++idau) { if ( ideal ) { TGeoNode* ideal_daughter = ideal->GetDaughter(idau); const char* daughter_name = ideal_daughter->GetName(); TGeoNode* aligned_daughter = volume->GetNode(daughter_name); - dump(ideal_daughter, aligned_daughter, level+1, volids); + dump(pref, ideal_daughter, aligned_daughter, level+1, volids); } else { printout(ERROR,"VolumeDump"," <ERROR: INVALID IDEAL Translation matrix>: %s",aligned->GetName()); @@ -787,7 +809,7 @@ static long dump_volume_tree(Detector& description, int argc, char** argv) { detail::tools::placementPath(description.world(), path); PlacedVolume pv = detail::tools::findNode(description.world().placement(),place); Actor actor(argc,argv); - return actor.dump(description.world().placement().ptr(),pv.ptr(),0,PlacedVolume::VolIDs()); + return actor.dump("",description.world().placement().ptr(),pv.ptr(),0,PlacedVolume::VolIDs()); } DECLARE_APPLY(DD4hepVolumeDump,dump_volume_tree) @@ -805,18 +827,79 @@ DECLARE_APPLY(DD4hepVolumeDump,dump_volume_tree) * \date 18/11/2016 */ static int detelement_processor(Detector& description, int argc, char** argv) { + bool recursive = true; DetElement det = description.world(); unique_ptr<DetectorProcessor> proc(dd4hep::createProcessor<DetectorProcessor>(description, argc, argv)); for(int i=0, num=std::min(argc,3); i<num; ++i) { - if ( 0 == ::strncmp(argv[i],"-detector",4) ) { - det = detail::tools::findElement(description, argv[++i]); - break; + if ( 0 == ::strncmp(argv[i],"-recursive",4) ) + recursive = true; + else if ( 0 == ::strncmp(argv[i],"-no-recursive",7) ) + recursive = false; + else if ( 0 == ::strncmp(argv[i],"-detector",4) ) { + string path = argv[++i]; + det = detail::tools::findElement(description, path); + if ( det.isValid() ) { + continue; + } + except("DetElementProcessor", + "++ The detector element path:%s is not part of this description!", + path.c_str()); + } + else { + except("DetElementProcessor","++ Unknown plugin argument: %s",argv[i]); } } - return DetectorScanner().scan(*proc,det); + return DetectorScanner().scan(*proc, det, 0, recursive); } DECLARE_APPLY(DD4hep_DetElementProcessor,detelement_processor) +// ====================================================================================== +/// Plugin function: Apply arbitrary functor callback on the tree of detector elements +/** + * Factory: dd4hep_DetElementProcessor + * + * Invokation: -plugin dd4hep_DetElementProcessor + * -detector /path/to/detElement (default: /world) + * -processor <factory-name> <processor-args> + * + * \author M.Frank + * \version 1.0 + * \date 18/11/2016 + */ +static int placed_volume_processor(Detector& description, int argc, char** argv) { + bool recursive = true; + PlacedVolume pv = description.world().placement(); + unique_ptr<PlacedVolumeProcessor> proc(dd4hep::createProcessor<PlacedVolumeProcessor>(description, argc, argv)); + + for(int i=0, num=std::min(argc,3); i<num; ++i) { + if ( 0 == ::strncmp(argv[i],"-recursive",4) ) + recursive = true; + else if ( 0 == ::strncmp(argv[i],"-no-recursive",7) ) + recursive = false; + else if ( 0 == ::strncmp(argv[i],"-detector",4) ) { + string path = argv[++i]; + DetElement det = detail::tools::findElement(description, path); + if ( det.isValid() ) { + pv = det.placement(); + if ( pv.isValid() ) { + continue; + } + except("PlacedVolumeProcessor", + "++ The detector element with path:%s has no valid placement!", + path.c_str()); + } + except("PlacedVolumeProcessor", + "++ The detector element path:%s is not part of this description!", + path.c_str()); + } + else { + except("PlacedVolumeProcessor","++ Unknown plugin argument: %s",argv[i]); + } + } + return PlacedVolumeScanner().scan(*proc, pv, 0, recursive); +} +DECLARE_APPLY(DD4hep_PlacedVolumeProcessor,placed_volume_processor) + /// Basic entry point to print out the detector element hierarchy /** * Factory: DD4hepDetectorDump, DD4hepDetectorVolumeDump diff --git a/DDDB/src/plugins/CondDB2DDDB.cpp b/DDDB/src/plugins/CondDB2DDDB.cpp index 33b0a6fc0..bac677d95 100644 --- a/DDDB/src/plugins/CondDB2DDDB.cpp +++ b/DDDB/src/plugins/CondDB2DDDB.cpp @@ -25,6 +25,7 @@ #include "DDDB/DDDBDimension.h" #include "DDDB/DDDBHelper.h" #include "DDDB/DDDBConversion.h" +#include "Math/Polar2D.h" // C/C++ include files @@ -45,7 +46,7 @@ namespace dd4hep { using cond::AbstractMap; typedef AbstractMap::Params ConditionParams; - + struct PositionRPhiZ {}; struct DDDBLogVolRef {}; struct DDDBElementRef {}; struct DDDBMaterialRef {}; @@ -310,6 +311,11 @@ namespace dd4hep { template <> void Conv<DDDBConditionParam>::convert(xml_h element) const; template <> void Conv<Delta>::convert(xml_h element) const; + template <> void Conv<Position>::convert(xml_h element) const; + template <> void Conv<PositionRPhiZ>::convert(xml_h element) const; + template <> void Conv<RotationZYX>::convert(xml_h element) const; + template <> void Conv<Transform3D>::convert(xml_h element) const; + void extract_transformation(Detector& description, void* context, xml_coll_t& collection, Transform3D& tr, int which=-1); void build_transformation(Detector& description, void* context, xml_h element, Transform3D& tr, int which=-1) { xml_coll_t p(element,_U(star)); @@ -883,6 +889,15 @@ namespace dd4hep { //dddb_print(p); } + /// Specialized conversion of <posRPhiZ/> entities + template <> void Conv<PositionRPhiZ>::convert(xml_h element) const { + dddb_dim_t dim = element; + ROOT::Math::Polar2D<double> dim2(dim.r(0.0), dim.phi(0.0)); + Position* pos = _option<Position>(); + pos->SetXYZ(dim2.X(), dim2.Y(), dim.z(0.0)); + //dddb_print(p); + } + /// Specialized conversion of <rotXYZ/> entities template <> void Conv<RotationZYX>::convert(xml_h element) const { dddb_dim_t dim = element; @@ -1620,6 +1635,13 @@ namespace dd4hep { apply = 1; ++count; } + else if ( tag == "posRPhiZ" && (which<0 || count == which) ) { + ROOT::Math::Polar2D<double> dim2(dim.r(0.0), dim.phi(0.0)); + apply_trafo(apply, pos, rot, trafo, tr); + pos.SetXYZ(dim2.X(), dim2.Y(), dim.z(0.0)); + apply = 1; + ++count; + } else if ( tag == "rotXYZ" && (which<0 || count == (which+1)) ) { rot.SetComponents(dim.rotZ(0.0), dim.rotY(0.0), dim.rotX(0.0)); apply = 2; diff --git a/DDG4/include/DDG4/DDG4Dict.h b/DDG4/include/DDG4/DDG4Dict.h index 78fe3e90f..b08c80f8c 100644 --- a/DDG4/include/DDG4/DDG4Dict.h +++ b/DDG4/include/DDG4/DDG4Dict.h @@ -131,8 +131,6 @@ namespace dd4hep { inline ParticleExtension::~ParticleExtension() { } /// Default constructor inline Geant4Particle::Geant4Particle() { } - /// Copy constructor - inline Geant4Particle::Geant4Particle(const Geant4Particle&) { NO_CALL } /// Default destructor inline Geant4Particle::~Geant4Particle() { } /// Remove daughter from set diff --git a/DDG4/include/DDG4/Geant4InputAction.h b/DDG4/include/DDG4/Geant4InputAction.h index 1125ed150..7c4be855a 100644 --- a/DDG4/include/DDG4/Geant4InputAction.h +++ b/DDG4/include/DDG4/Geant4InputAction.h @@ -56,7 +56,8 @@ namespace dd4hep { EVENT_READER_NO_DIRECT=2, EVENT_READER_NO_PRIMARIES=4, EVENT_READER_NO_FACTORY=6, - EVENT_READER_IO_ERROR=8 + EVENT_READER_IO_ERROR=8, + EVENT_READER_EOF=10 }; protected: /// File name to be opened and read diff --git a/DDG4/include/DDG4/Geant4Particle.h b/DDG4/include/DDG4/Geant4Particle.h index 7b3fc5764..9cce168b6 100644 --- a/DDG4/include/DDG4/Geant4Particle.h +++ b/DDG4/include/DDG4/Geant4Particle.h @@ -79,7 +79,7 @@ namespace dd4hep { G4PARTICLE_GEN_DECAYED+G4PARTICLE_GEN_DOCUMENTATION+ G4PARTICLE_GEN_BEAM+G4PARTICLE_GEN_OTHER), G4PARTICLE_GEN_STATUS = 0x3FF, // Mask for generator status (bit 0...9) - + G4PARTICLE_GEN_STATUS_MASK = 0xFFFF,// Mask for the raw generator status (max 65k values) // Simulation status of a given particle G4PARTICLE_SIM_CREATED = 1<<10, // True if the particle has been created by the simulation program (rather than the generator) G4PARTICLE_SIM_BACKSCATTER = 1<<11, // True if the particle is the result of a backscatter from a calorimeter shower. @@ -102,9 +102,6 @@ namespace dd4hep { * \ingroup DD4HEP_SIMULATION */ class Geant4Particle { - private: - /// Copy constructor - Geant4Particle(const Geant4Particle& c); public: typedef std::set<int> Particles; /// Reference counter @@ -114,13 +111,15 @@ namespace dd4hep { int g4Parent = 0, reason = 0, mask = 0; int steps = 0, secondaries = 0, pdgID = 0; int status = 0, colorFlow[2] {0,0}; - char charge = 0, _spare[3] {0,0,0}; + unsigned short genStatus= 0; + char charge = 0; + char _spare[1] {0}; float spin[3] {0E0,0E0,0E0}; - // 12 ints + 4 floats should be aligned to 8 bytes.... - double vsx = 0E0, vsy = 0E0, vsz = 0E0; - double vex = 0E0, vey = 0E0, vez = 0E0; - double psx = 0E0, psy = 0E0, psz = 0E0; - double pex = 0E0, pey = 0E0, pez = 0E0; + // 12 ints + 4 bytes + 3 floats should be aligned to 8 bytes.... + double vsx = 0E0, vsy = 0E0, vsz = 0E0; + double vex = 0E0, vey = 0E0, vez = 0E0; + double psx = 0E0, psy = 0E0, psz = 0E0; + double pex = 0E0, pey = 0E0, pez = 0E0; double mass = 0E0, time = 0E0, properTime = 0E0; /// The list of daughters of this MC particle Particles parents; @@ -137,8 +136,12 @@ namespace dd4hep { Geant4Particle(); /// Constructor with ID initialization Geant4Particle(int part_id); + /// NO copy constructor + Geant4Particle(const Geant4Particle& copy) = delete; /// Default destructor virtual ~Geant4Particle(); + /// NO assignment operation + Geant4Particle& operator=(const Geant4Particle& copy) = delete; /// Increase reference count Geant4Particle* addRef() { ++ref; diff --git a/DDG4/lcio/Geant4Output2LCIO.cpp b/DDG4/lcio/Geant4Output2LCIO.cpp index b88373eb0..d49b99665 100644 --- a/DDG4/lcio/Geant4Output2LCIO.cpp +++ b/DDG4/lcio/Geant4Output2LCIO.cpp @@ -21,7 +21,6 @@ #include "G4Threading.hh" #include "G4AutoLock.hh" -#include "LCIOParticleExtension.h" #include "DD4hep/Detector.h" #include <G4Version.hh> @@ -241,14 +240,8 @@ lcio::LCCollectionVec* Geant4Output2LCIO::saveParticles(Geant4ParticleMap* parti // Set generator status q->setGeneratorStatus(0); - - // see if we have preserved the original generator code in the stdhep or LCIO reader - const LCIOParticleExtension* p_ext = dynamic_cast< LCIOParticleExtension*>( p->extension.get() ) ; - - if( p_ext ) { - - q->setGeneratorStatus( p_ext->generatorStatus ) ; - + if( p->genStatus ) { + q->setGeneratorStatus( p->genStatus ) ; } else { if ( mask.isSet(G4PARTICLE_GEN_STABLE) ) q->setGeneratorStatus(1); diff --git a/DDG4/lcio/LCIOEventReader.cpp b/DDG4/lcio/LCIOEventReader.cpp index b403aaf85..64aedadaa 100644 --- a/DDG4/lcio/LCIOEventReader.cpp +++ b/DDG4/lcio/LCIOEventReader.cpp @@ -14,7 +14,6 @@ // Framework include files #include "LCIOEventReader.h" -#include "LCIOParticleExtension.h" #include "DD4hep/Printout.h" #include "DDG4/Geant4Primary.h" #include "DDG4/Geant4Context.h" @@ -127,12 +126,8 @@ LCIOEventReader::readParticles(int event_number, else if ( genStatus == 4 ) status.set(G4PARTICLE_GEN_BEAM); else status.set(G4PARTICLE_GEN_OTHER); - - // store the original generator status in case it is not in [0,4] - LCIOParticleExtension* p_ext = new LCIOParticleExtension ; - p_ext->generatorStatus = mcp->getGeneratorStatus(); - p->extension.adopt( p_ext ) ; - + // Copy raw generator status + p->genStatus = genStatus&G4PARTICLE_GEN_STATUS_MASK; //fg: we simply add all particles without parents as with their own vertex. // This might include the incoming beam particles, e.g. in diff --git a/DDG4/lcio/LCIOFileReader.cpp b/DDG4/lcio/LCIOFileReader.cpp index 69fd8c7ec..9a4c96aca 100644 --- a/DDG4/lcio/LCIOFileReader.cpp +++ b/DDG4/lcio/LCIOFileReader.cpp @@ -124,7 +124,7 @@ dd4hep::sim::LCIOFileReader::readParticleCollection(int /*event_number*/, EVENT: return EVENT_READER_OK; } } - return EVENT_READER_ERROR; + return EVENT_READER_EOF; } /// Set the parameters for the class, in particular the name of the MCParticle diff --git a/DDG4/lcio/LCIOParticleExtension.h b/DDG4/lcio/LCIOParticleExtension.h deleted file mode 100644 index 3519c3cd7..000000000 --- a/DDG4/lcio/LCIOParticleExtension.h +++ /dev/null @@ -1,50 +0,0 @@ -//========================================================================== -// AIDA Detector description implementation -//-------------------------------------------------------------------------- -// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) -// All rights reserved. -// -// For the licensing terms see $DD4hepINSTALL/LICENSE. -// For the list of contributors see $DD4hepINSTALL/doc/CREDITS. -// -// Author : M.Frank -// -//========================================================================== - -#ifndef DD4HEP_LCIOParticleExtension_H -#define DD4HEP_LCIOParticleExtension_H - -#include "DDG4/Geant4Particle.h" - -/// Namespace for the AIDA detector description toolkit -namespace dd4hep { - - /// Namespace for the Geant4 based simulation part of the AIDA detector description toolkit - namespace sim { - - - /** Simple helper class for additional MCParticle information - * used with LCIO readers and writers. - * - * @author F.Gaede, DESY - * @version 1.0 - * @ingroup DD4HEP_SIMULATION - */ - class LCIOParticleExtension : public ParticleExtension{ - - public: - - /// original generator status - int generatorStatus ; - - /// Default constructor - LCIOParticleExtension() {} - - /// Default destructor - virtual ~LCIOParticleExtension() {} ; - - }; - } -} - -#endif diff --git a/DDG4/lcio/LCIOStdHepReader.cpp b/DDG4/lcio/LCIOStdHepReader.cpp index 8351577ba..9acf2bef6 100644 --- a/DDG4/lcio/LCIOStdHepReader.cpp +++ b/DDG4/lcio/LCIOStdHepReader.cpp @@ -92,7 +92,7 @@ LCIOStdHepReader::moveToEvent(int event_number) { printout(INFO,"LCIOStdHepReader::moveToEvent","Event number before skipping: %d", m_currEvent ); while ( m_currEvent < event_number ) { EVENT::LCCollection* particles = m_reader->readEvent(); - if ( 0 == particles ) return EVENT_READER_ERROR; + if ( 0 == particles ) return EVENT_READER_EOF; delete particles; ++m_currEvent; } @@ -108,6 +108,6 @@ LCIOStdHepReader::readParticleCollection(int /*event_number*/, EVENT::LCCollecti *particles = m_reader->readEvent(); ++m_currEvent; - if ( 0 == *particles ) return EVENT_READER_ERROR; + if ( 0 == *particles ) return EVENT_READER_EOF; return EVENT_READER_OK; } diff --git a/DDG4/plugins/Geant4EventReaderHepEvt.cpp b/DDG4/plugins/Geant4EventReaderHepEvt.cpp index 02bf25b1b..1cac6db73 100644 --- a/DDG4/plugins/Geant4EventReaderHepEvt.cpp +++ b/DDG4/plugins/Geant4EventReaderHepEvt.cpp @@ -156,10 +156,12 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, // First check the input file status - if ( !m_input.good() || m_input.eof() ) { + if ( m_input.eof() ) { + return EVENT_READER_EOF; + } + else if ( !m_input.good() ) { return EVENT_READER_IO_ERROR; } - //static const double c_light = 299.792;// mm/ns // // Read the event, check for errors @@ -167,7 +169,7 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, unsigned NHEP(0); // number of entries m_input >> NHEP; - if( m_input.eof() ){ return EVENT_READER_IO_ERROR; } + if( m_input.eof() ) { return EVENT_READER_EOF; } //check loop variable read from input file and chack that is reasonable @@ -175,7 +177,7 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, if( NHEP > 1e6 ){ printout(ERROR,"EventReaderHepEvt::readParticles","Cannot read in more than million particles, but %d requested", NHEP ); - return EVENT_READER_IO_ERROR; + return EVENT_READER_EOF; } @@ -223,7 +225,7 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, >> VHEP4; if(m_input.eof()) - return EVENT_READER_IO_ERROR; + return EVENT_READER_EOF; // // create a MCParticle and fill it from stdhep info @@ -262,6 +264,8 @@ Geant4EventReaderHepEvt::readParticles(int /* event_number */, else if ( ISTHEP == 2 ) status.set(G4PARTICLE_GEN_DECAYED); else if ( ISTHEP == 3 ) status.set(G4PARTICLE_GEN_DOCUMENTATION); else status.set(G4PARTICLE_GEN_DOCUMENTATION); + // RAW Generator status + p->genStatus = ISTHEP&G4PARTICLE_GEN_STATUS_MASK; //fixme: need to define the correct logic for selecting the particle to use // for the _one_ event vertex diff --git a/DDG4/plugins/Geant4EventReaderHepMC.cpp b/DDG4/plugins/Geant4EventReaderHepMC.cpp index 47dfbeb5a..af680ba41 100644 --- a/DDG4/plugins/Geant4EventReaderHepMC.cpp +++ b/DDG4/plugins/Geant4EventReaderHepMC.cpp @@ -232,7 +232,7 @@ Geant4EventReaderHepMC::readParticles(int /* ev_id */, primary_vertex->z = 0; if ( !m_events->ok() ) { - return EVENT_READER_IO_ERROR; + return EVENT_READER_EOF; } else if ( m_events->read() ) { EventStream::Particles& parts = m_events->particles(); @@ -266,18 +266,18 @@ Geant4EventReaderHepMC::readParticles(int /* ev_id */, //ad particles to the 'primary vertex' if ( p->parents.size() == 0 ) { - PropertyMask status(p->status); - if ( status.isSet(G4PARTICLE_GEN_EMPTY) || status.isSet(G4PARTICLE_GEN_DOCUMENTATION) ) - primary_vertex->in.insert(p->id); // Beam particles and primary quarks etc. - else - primary_vertex->out.insert(p->id); // Stuff, to be given to Geant4 together with daughters + PropertyMask status(p->status); + if ( status.isSet(G4PARTICLE_GEN_EMPTY) || status.isSet(G4PARTICLE_GEN_DOCUMENTATION) ) + primary_vertex->in.insert(p->id); // Beam particles and primary quarks etc. + else + primary_vertex->out.insert(p->id); // Stuff, to be given to Geant4 together with daughters } } ++m_currEvent; return EVENT_READER_OK; } - return EVENT_READER_IO_ERROR; + return EVENT_READER_EOF; } void HepMC::fix_particles(EventStream& info) { @@ -436,7 +436,8 @@ int HepMC::read_particle(EventStream &info, istringstream& input, Geant4Particle else if ( stat == 0x3 ) status.set(G4PARTICLE_GEN_DOCUMENTATION); else if ( stat == 0x4 ) status.set(G4PARTICLE_GEN_DOCUMENTATION); else if ( stat == 0xB ) status.set(G4PARTICLE_GEN_DOCUMENTATION); - + p->genStatus = stat&G4PARTICLE_GEN_STATUS_MASK; + // read flow patterns if any exist for (int i = 0; i < size; ++i ) { input >> p->colorFlow[0] >> p->colorFlow[1]; @@ -629,8 +630,8 @@ int HepMC::read_pdf(EventStream &, istringstream & input) { int pdf_id1=0, pdf_id2=0; input >> pdf_id1 >> pdf_id2; /* - pdf->set_pdf_id1( pdf_id1 ); - pdf->set_pdf_id2( pdf_id2 ); + pdf->set_pdf_id1( pdf_id1 ); + pdf->set_pdf_id2( pdf_id2 ); */ } return input.fail() ? 0 : 1; diff --git a/DDG4/src/Geant4InputAction.cpp b/DDG4/src/Geant4InputAction.cpp index cbba3e422..f07a39010 100644 --- a/DDG4/src/Geant4InputAction.cpp +++ b/DDG4/src/Geant4InputAction.cpp @@ -95,7 +95,7 @@ Geant4EventReader::moveToEvent(int event_number) { #else /// Move to the indicated event number. Geant4EventReader::EventReaderStatus -Geant4EventReader::moveToEvent(int event_number) { +Geant4EventReader::moveToEvent(int /* event_number */) { return EVENT_READER_OK; } #endif @@ -159,7 +159,9 @@ int Geant4InputAction::readParticles(int evt_number, } int status = m_reader->moveToEvent(evid); if ( Geant4EventReader::EVENT_READER_OK != status ) { - string msg = issue(evid)+"Error when moving to event - may be end of file."; + string msg = issue(evid)+"Error when moving to event - "; + if ( status == Geant4EventReader::EVENT_READER_EOF ) msg += " EOF: [end of file]."; + else msg += " Unknown error condition"; if ( m_abort ) { abortRun(msg,"Error when reading file %s",m_input.c_str()); return status; @@ -172,7 +174,9 @@ int Geant4InputAction::readParticles(int evt_number, if ( Geant4EventReader::EVENT_READER_OK != status ) { - string msg = issue(evid)+"Error when moving to event - may be end of file."; + string msg = issue(evid)+"Error when moving to event - "; + if ( status == Geant4EventReader::EVENT_READER_EOF ) msg += " EOF: [end of file]."; + else msg += " Unknown error condition"; if ( m_abort ) { abortRun(msg,"Error when reading file %s",m_input.c_str()); return status; diff --git a/DDG4/src/Geant4Particle.cpp b/DDG4/src/Geant4Particle.cpp index 0a7071e10..89aa18c13 100644 --- a/DDG4/src/Geant4Particle.cpp +++ b/DDG4/src/Geant4Particle.cpp @@ -34,59 +34,16 @@ typedef detail::ReferenceBitMask<int> PropertyMask; ParticleExtension::~ParticleExtension() { } -/// Copy constructor -Geant4Particle::Geant4Particle(const Geant4Particle& c) -: ref(1), id(c.id), originalG4ID(c.originalG4ID), g4Parent(c.g4Parent), reason(c.reason), mask(c.mask), - steps(c.steps), secondaries(c.secondaries), pdgID(c.pdgID), - status(c.status), charge(0), - vsx(c.vsx), vsy(c.vsy), vsz(c.vsz), - vex(c.vex), vey(c.vey), vez(c.vez), - psx(c.psx), psy(c.psy), psz(c.psz), - pex(c.pex), pey(c.pey), pez(c.pez), - mass(c.mass), time(c.time), properTime(c.properTime), - parents(c.parents), daughters(c.daughters), extension(), - process(c.process)//, definition(c.definition) -{ - InstanceCount::increment(this); - spin[0] = c.spin[0]; - spin[1] = c.spin[1]; - spin[2] = c.spin[2]; - colorFlow[0] = c.colorFlow[0]; - colorFlow[1] = c.colorFlow[1]; -} - /// Default constructor -Geant4Particle::Geant4Particle() -: ref(1), id(0), originalG4ID(0), g4Parent(0), reason(0), mask(0), - steps(0), secondaries(0), pdgID(0), - status(0), charge(0), - vsx(0.0), vsy(0.0), vsz(0.0), - vex(0.0), vey(0.0), vez(0.0), - psx(0.0), psy(0.0), psz(0.0), - pex(0.0), pey(0.0), pez(0.0), - mass(0.0), time(0.0), properTime(0.0), - daughters(), extension(), process(0)//, definition(0) +Geant4Particle::Geant4Particle() : ref(1) { InstanceCount::increment(this); - spin[0] = spin[1] = spin[2] = 0; - colorFlow[0] = colorFlow[1] = 0; } /// Constructor with ID initialization -Geant4Particle::Geant4Particle(int part_id) -: ref(1), id(part_id), originalG4ID(part_id), g4Parent(0), reason(0), mask(0), - steps(0), secondaries(0), pdgID(0), - status(0), charge(0), - vsx(0.0), vsy(0.0), vsz(0.0), - vex(0.0), vey(0.0), vez(0.0), - psx(0.0), psy(0.0), psz(0.0), - pex(0.0), pey(0.0), pez(0.0), - mass(0.0), time(0.0), properTime(0.0), - daughters(), extension(), process(0)//, definition(0) +Geant4Particle::Geant4Particle(int part_id) : ref(1), id(part_id), originalG4ID(part_id) { InstanceCount::increment(this); - spin[0] = spin[1] = spin[2] = 0; - colorFlow[0] = colorFlow[1] = 0; } /// Default destructor @@ -111,6 +68,7 @@ Geant4Particle& Geant4Particle::get_data(Geant4Particle& c) { reason = c.reason; mask = c.mask; status = c.status; + genStatus = c.genStatus; charge = c.charge; steps = c.steps; secondaries = c.secondaries; diff --git a/DDG4/src/Geant4ParticleHandler.cpp b/DDG4/src/Geant4ParticleHandler.cpp index c13fbbd09..6cad82846 100644 --- a/DDG4/src/Geant4ParticleHandler.cpp +++ b/DDG4/src/Geant4ParticleHandler.cpp @@ -226,6 +226,7 @@ void Geant4ParticleHandler::begin(const G4Track* track) { m_currTrack.reason = prim_part->reason|reason; m_currTrack.mask = prim_part->mask; m_currTrack.status = prim_part->status; + m_currTrack.genStatus = prim_part->genStatus; m_currTrack.spin[0] = prim_part->spin[0]; m_currTrack.spin[1] = prim_part->spin[1]; m_currTrack.spin[2] = prim_part->spin[2]; @@ -241,6 +242,7 @@ void Geant4ParticleHandler::begin(const G4Track* track) { m_currTrack.reason = reason; m_currTrack.mask = 0; m_currTrack.status = G4PARTICLE_SIM_CREATED; + m_currTrack.genStatus = 0; m_currTrack.spin[0] = 0; m_currTrack.spin[1] = 0; m_currTrack.spin[2] = 0; diff --git a/UtilityApps/src/run_plugin.h b/UtilityApps/src/run_plugin.h index 295a521eb..0c0d88cb3 100644 --- a/UtilityApps/src/run_plugin.h +++ b/UtilityApps/src/run_plugin.h @@ -71,22 +71,28 @@ namespace { std::ostream& print_default_args() { std::cout << " -build_type <number/string> Specify the build type \n" - " [OPTIONAL] MUST come immediately after the -compact input.\n" + " [OPTIONAL] MUST come immediately after the -compact input.\n" " Default for each file is: BUILD_DEFAULT [=1] \n" " Allowed: BUILD_SIMU [=1], BUILD_RECO [=2], \n" " BUILD_DISPLAY [=3] or BUILD_ENVELOPE [=4] \n" - " -destroy [OPTIONAL] Force destruction of the Detector instance \n" + " -destroy [OPTIONAL] Force destruction of the Detector instance \n" " before exiting the application \n" - " -volmgr [OPTIONAL] Load and populate phys.volume manager to \n" + " -no-destroy [OPTIONAL] Inhibit destruction of the Detector instance \n" + " -volmgr [OPTIONAL] Load and populate phys.volume manager to \n" " check the volume ids for duplicates etc. \n" + " -no-volmgr [OPTIONAL] Inhibit loading phys.volume manager \n" + " -interpreter [OPTIONAL] Start ROOT C++ interpreter after execution. \n" + " -no-interpreter [OPTIONAL] Inhibit ROOT C++ interpreter. \n" " -print <number/string> Specify output level. Default: INFO(=3) \n" - " [OPTIONAL] Allowed values: VERBOSE(=1), DEBUG(=2), \n" + " [OPTIONAL] Allowed values: VERBOSE(=1), DEBUG(=2), \n" " INFO(=3), WARNING(=4), ERROR(=5), FATAL(=6) \n" " The lower the level, the more printout... \n" + " -dry-run [OPTIONAL] Only load description. No execution. \n" " -plugin <name> <args> Execute plugin <name> after loading geometry. \n" - " All arguments following until the next '-' \n" - " are considered as arguments to the plugin. \n" - " -ui Install ROOT interpreter UI for dd4hep \n" + " All arguments following until the next \n" + " '-plugin' tag are considered as arguments \n" + " to the current plugin. \n" + " -ui [OPTIONAL] Install ROOT interpreter UI for dd4hep \n" " Will show up in the global interpreter variable\n" " 'dd4hep::ROOTUI* gdd4hepUI' and allows the user\n" " to interact with the the Detector instance from the\n" diff --git a/examples/DDCMS/CMS-tracker2.png b/examples/DDCMS/CMS-tracker2.png new file mode 100644 index 0000000000000000000000000000000000000000..55f737849000c897e2a9d37c104a5db9eb4b1758 GIT binary patch literal 259860 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%0A+(!_{P}bIe()p{OK0>D?|ZqLVb@a;BV^qZ{Isn zfRgUfO^x#w24RW;)WigIEM!nf)s3F()oXwk5Tj%=D(+u`Z^Miww94+bN=YW_Y&ENQ z|L|Uv=iAFOx)-Bnyjs(1+G2RDhFWwV$c{GTeh|5Y6v=(l%<umUZ_yh%P)v`O%pj_1 zfL_-&`WPh)Kux7Z);&8IFAUkofBq{l-y#gWd`ofeFIg&O*MAp6Q)zUf&W}DFV9vN| z`_p$c)guOH$L1DV!I#Y=jS}oo4j)fx<m70x5WjwHAtuGXGSDB(e8#s+MdaM<IAu_o zdDhd5PtS;v=;x1YP*6rZcu4s>0*tA9<5AwD(7&}nBfeolkmr&dv9}!8A~1DudIy&a zgJg*s0Y}zplK-9>I`T934QK~ILrKDZso-n@lJ|51?_v7;e1PQ{x3C&HfPSl20Ghm8 zQPR?P9ed1R^bKLlSV$~OtB8_+3(}hG^@nln$c{l?>Osmcd6(>^fA&n}R<GNr$VE2S zK0r#9Q0(<UV{<4JB```!)N$$dyRi%H-jWCSKGdJslG+U|R`35s|JL4SXhkI=Ze{7c z7OQbmZ28kJS@Qiw8nkG+>Eq?~W}|-)!&uTuu!ybVUI+E(x)yuJTlgejJ8pH{<}H63 zmhhn4s5;?QFYlEt(l7nNg9A;8fel;hg|{aVV?`}?xk!4sj&9A*<;vD6gtOysn3-HR zv)#%?iAA+xM^_&8Mb5P+qa}rb^+k0%9;TIbh1-TTb?YHVaw`mbAUF)Lw=e+hR!z{y za6Gj}UC3h69Z)@c@{nW#&4caVIL9;w?4tNH7|vCuK@-OULVfIj&Pc_H3=N0WNW^%g z!f*l~!Fg)3*pHp2JcCBud_#xy>Uwx^JA63s<th9X2C;EcCW2mm{W49Ant0;Dehfm* z?MZ9nVWv-{Np4}&<&P7f?cQFGUPg;DKZlP(Q2BogQhC$RS3K{eaDTs1qm9xWw42IO zU<p>QA?**DqSQR!O9wZcU%ZTW*7rT*T(pL}ai&r0-TxK1g>ED8=SHx*n_7N*Dk;!0 z0BAUhGztLv$U248BY*T>I=L<C`Zz`{@|E)^Bp9euiLiUD`w@uyonG(klyi-bH9`Z2 z)jSlejhIrwOKzJ;1bL!^J-g$r8d4(EqAHNRtZG82pysh2yiWVF+P53}gC*cZ(4<KJ z*yk`kq`n>uH}(uKp+MyoFz<RDmfa(vC(*4#fYCWmBY=&D+1p=Y!U>^Gms@iGoUcy@ zuG6YFR#uXyMlw)p`)k!F{cSd_F&BjNsgZ*Nxu@VyD&BYQ4v>k%&yD}_Umaa~Jrf^z zP3qB6=53ZdHfHcLGp~KSDy=VMwNi@pPyLtgF4XnV6r&14(v{y>Dd!jP``C6cx%1VO zG!vaoz~qkT59D%0&7;GUFZQVWso;Epcr>h+C*D3R9Q@cCB@(_&l~9-&w6AeJV+IKG zOP^m$d(hv*5}wrd```fD2;b1hhc?-B?E&oYNMOYhz_PomXhCqAVz5oRc*3V=c<?nC z#PruXC&4=vYCJg2z9ujv-fUl*!~=G4;ML=kWJmrS|E}d(z%Pxa1QoG(VUABSCA6|W z>*m?Yn$E;NVy?=IBI7&M9V)YOclQ(x3-(JM4<g*em{v9kH|qF&%i6S7haavKNTrY0 ze`zLj&UBgjIR{h93}^~4B~vJS5SE0vb%7BECn0pVMIA?GwFS{@j!_6tR1Y<8&utjJ z=SRfQ&ctl0{Wcz)GZNb9Q&D}$GYPgR^P+?4?YKa19pFPH^~#CJ9q%7pH<tmXcLmFA zj;{lk^8i*UgX5E@w+LBCP?=t|;pExK$XhTxc*^ApHt=|BYV2P<J+_i5;FVtrSA|UO zYF;$SnO~gc;eL=!ht`tXB`Ya7Rri|HRJ<!0M-t!68)K3wdn7{BPWa;|<T5rhjDKR< zPmB4KRS>(!oyA!lIA-#+Kg(N2%ZPsL(|ASc(k_fWX*IH%iin=|J6K8dr=LBUjpqE? z2b+FC%P)>0af>rziu!Q%Av+Zux1{<y+ssq`IX8R&9fr;tx()LhE4tok_NW*)rzXV` z0<Nnm4)dcGVdxH1G(M{5A`SRjMB$@;!J_a{7FL>y=m#fcKL8DPN{p3!+_EkRehsVe za!4Z{+T;5|Cqn;LyFMiQ^1&MyPc2Z$hsZ98LEgs-KKtfFW4}mZ5xox+&q7xURI=KB z_u0EyfVWI)PP<@FxRT_(-U8zrw>;ZX_ok%X#{a}sELch|!fI$f@TuRnwvg;1zG5Yg ziIoif7o(=72|10^N0X@+N4|jH6NKwzieb_j5c6fLeGy71z^5hGwqt*(H<;<$LzGH! z_2Jj>g+kqgcU3F9Kaha)Ze@)>Kb9~WI)l@6VM4Ffrlle#X+o4Gu*16S^B}PFfn)n~ zCr+UYeN8>2_QuzDFk`K|x~iPcj>Fi(B2HUZm33SD-vNQ;67-)%(;9IHE%lwE>t!y& zHr1>OHA}0t!jA@i1@m48Z0xdJ1RP+Iilj%%VYHlI!%yk4*Wx?svM-HV;BDk?_xV$G zb;S4@SwJad-Kw9j!9M8)mb)&GQ<6|@KT{X4LFHDRd(P`(aiKL9gWqGkwiGTp{EvJX zAA;&~tTv+FmGnEOMINj>3kDpQN^1l@&L4c1D^u+48*Ki2x}0OTFX2zqZ1+!W&T<fG zY<2d(Ti5+<_db4gJ=-fYT%&k=OdjAdac{tN`e3?4;p`oUV&&t%d>0o*WR0yv3%KXs zGQ`!M*#DJgdTUPGmw$}y;@LKqP)N0`&OHAXYHD&7#7K)%_W!UMCs?z%NML6p=WgG$ z-I!+gr|JMZ6!#3Z=ChNd623HLS@)a1L`xdXoWwgXXO_>ei|(@rZjfH|OG*90(_Hk| z^patWziN1f{$sfDbz`^s%Ad8<=6&+szrR9uz4v|o4sVcXA-TYxxWKe)_g1IQbB!F7 zTi|cs>XDP@hcQ~;A@96Lg?xZ6*UYd%f9GE{W1vNuyqsTtO)t%yzKiwyC@IrzA8gL| z?6XEY>NrpH*@W3gN&j`(iC^*MK8|ZHT5k*9B20L{mm-&6d1yk``=F9xzwNR>FmNjP zO)BE7Qb!Cv=Geki|A12y$GyLl5``1eDIN{=Gjcvxbn<ckC-JD2-MfFwc`s-)qw014 zgG=`|_4BoBL?uVK<=~uNIDy$D6$NC=ZJBN#9%U9mjB4zlH?`EGH$ay4n$@NYCOB!N zc!~G_WtY!}EIVb0`~Bn04;ZjLqLx?J>eK7eRp%rP2sq46;rz~OYew?KHT5tjOxmh$ zW+`Yjb%UUOu?tpS*;>>=MesC}vrXy4rkESqDnfR(J<`vy3h7t*lhZU~n67bVDwgIz z%#gLngAf!svtdF_lbxv34WWvwDG^N<8}rD?bouk3*jvixy&fBU<HWqvORD@_#uYlh zXZU73B@59$=55g{lPmP+;5}0~7bC$|X#~h{`x2U}mnHbeD;kI@oL7oN+tw}K^3UU; zr^58{P#JHZI|4zu@5$D14+AoG+^oElUC(s>Z7#Ro^5n%Z8zNuy)9}6-e8Yg%w1HD~ zj!w@x@oN%+8~aoE?Q{An3YzBl^^y<Xz1h5#!^CB5NAg&Sg#nSTx|L&OtG;Z;-=Sq3 zR$}+3J307X+DV4Xw(Q`v54Ug!^z=)FaVO${UVDp}l$@fM0{BGtP(-6wD_VuxbJxYG zxV3|Fe=8{XzqA_^xbUoMpVxO*2V;uLii+>}Wa{Im&<D)DsRg|Z+95u6OSR9;DUy7j z+*evwlrG&blijjoxnpY<Xr>Eqo4e43Cu<!{7(`h67&3lTH_~#@$}a%?X)nNzvhZ>Z z_tyou#kH^IsffxKvYCSM=;)=!TZlVNpP$iY=I6>8Ry6dV`lM>Tld(6+jRb+X2MaQz z<2p@~aJ3RmV?T8r?<Y8UzeSVerRh4_d(y%ZRUmD~16)da=?+qP+QdYeETV)G#aIUZ z0m3|N-=ai^>YUfp=%F?zW?S%eRj&}-fL-Y-)<FTBdcc6ZO91*_<&c_fCu8-}k&vEC ze`huJ{m=chET=yY5`{({%45WYsRhWe@m9|sO}_b%!kDjra8;;_LVKPb3}m{xW^X`o z`GYyQb`C`_*HNwbWxRQAZP2M_u-js)7G#qf-rr<F_%L6<FqcfZhnit~7-my6e!iOU zQ7>0O5+Dn-vXH~GKR{0x3wNI^_;M*MF(N`@M20>FG9o4?*&{nZP^E(Kmpc8g5l?ap z`o0z@{RQ@3SP#EAh(nm6pE&15H5a|O<TEWeKl3a7Gs^*jc}H;l?$MUQzpBzk2XoW7 z(ss?2b7gg;T~FYQP^pj*O4kUQ_x)SL_wVVJaRv7no{Xl<TaqH1S1WV$a8X+D==AxW z#OrYs3SHtjUH!Uob>wqom{w)^Fbdf6_3<vFHy%$UEyt%@Ou}kE7S?{!E<Bw|_C@I* z%#m<BX*cB=4v=h2V9Eer?LL~%Mb&9}DT@oHqUk)AjpQ+ZNpQK5(23T*ziIjgHnBdB z3LhsZN$T9*>b{qyUsSq?iQwt6m;a?omGom1cvyQ9iSUH^DfUiPt<s?UjtP?QFEGzI zn<$3Io{70`&Az#kxTQhgNvOd5iOhfgI^ku-OY$TemC1pbR&fkJuIHh9WO}P;|F7}y zXm!iBgmN(Gfek$NVi_b>X)6`@o{O(yW8?k`bJ}+_+o28s#C__3hHr;lT@*!fDAo70 zLp5SoK;M6E(x;zI|C@_@Q<r691A!|j(-M9}ocYPq@Zh|oB_fb)U8O|6&Me!{OVM&G zH9NsOffJ$R<Zs4mBaU%R#tr=(p{0X!pqSJ7;MRxiZXeWn0_6GiI^2OsPZ1w^TJ*zY z>gip=L?v^B;6t<eI*>oHYK-o$36#R#NZ@?YNju$Jo7dqs>uEkm_EyjQfzPwK#MV~* zN_Y`(LYH{UL%DF6LjEId?YPY4&9|Xd;9V;?=)pwwphp&t4gRqtqH_RUrCh@-<tLVl z8g$gO{Jm#ZLD6YB-;Ub+gknG!7%P72gu*ojRC}RBPK*SZhtm~e5Khg5)+?sq*n5+I zy7Jtwu#wQJ#7hrG(QgXXeqO8n6so!Ym$~-`ezQ-^2rW9VK(a3Xw5$Cfu8b=wn;T4x zGpLgEsJ)h~BYqha-Q!c*x8av@2j4F0-r{57b?7&B;vx+HUxP0%Gi(#*2GuwDV$LQ% z+s4$_AEoegLZ5XFYpJO%0UydSPfiVqcyToN2fKLizcthMS-*T9Fi#wYNp3-+!Xz>E zlxbpjL0Z)n-<LmqzVp}y9y9vx^mocQy{QALy@>lx#`=1zi4ivnG1Sr32QAmIM%B5+ zc0qlLS@_ZZOFfKABIBh)(hk4BKZcO}Dz%(CK;R@z@BY|?SurD=h!+&vgBgdiz5oYS za&KYoMQ^h3*ENBrp2t*+b*67pfY-`G2@lFg8TX?B0%Y_8dQAKx^t<zo2BHrf<j5Vg zTPNPJHvToE$qAV4do8&sJNkXYXkpupJr+rvNlN=VCr2RFW&eppi(%|q*rI3+wGzap z9m&Ge|3E4e5+?(iHhAvOtR~=}6HH)QvX=UX74$A~IDOmpsigDz#{CJF?loEXrmOVG z$Ot$U;WYYm<X?C{^oS<(5NpkKfa`*ulm>llfyOWa4LL=^k8@P$Zg)IS`GLWD9grFd zHQ`vl7Y*GhE&<trK;OOBbUoh6oJT2LO*^e$+P(UiWwQVC%fhsx2nxXurF(9%(i0Rk zSiq%&7Fu0Zu2Ks*&>58r+xL05;tPV?xf$wk-IpSGd$+{uxnEo9wn2StNx=2(G@CnZ zb~(HgLfW6<)x7jbwe)U%wHFkd$Z5s@Tc~U`s|}p}hq0xp6`jS%m?1-Ae?eKv10el~ z0p68<-xsI_XAl;tHL4g9<;?W437B*#>azWBW|?}@hdoj&M&0J(4?e|H5n-WItcSF= zChjae2H}K{L|Y8bCdI8~z3)1i#`l<JXADBG{lRaA3R_aot?Tcqq1bIx=K=|Rc!m;J zd_;0Zon=d_Ll*S1zb;=bd60+ynNJ+6m5596)z;RwvYOjl=o~TPPp~>S8LMl(-NknS zo4#9H^!MAids{=&e2MD>D`7l`$AJ=Wp6vD=wakrXHj3>B#VZM-->Eo7v}J!NUG}cB zy&Be!62??M`tvLJW7fqyb0~{Mz#GaPVJ<r+L`HTvu?c3rY?tN<&RKMRKzw6k4WgLf zdTiGFxqB>sl2Sb*ucUr0BOt&R^(`;h&oulv<0FxE;N>c(2&M8f>pK*<iM+SQ>6_yZ zih;1UeiNhnNZ<5(yO~Y-u*rF&zY6XJS3KEt9h<TnaED#@sDQrLE!^q!sBbDf>>McN zb~~F>jUJk0dg#gsDxN-HE5l?u{-aem-h9G!a1cJl6QJf?SBg`rS#j6!&L!Y9`P^tb zxarcn<x@g|wFuZM0VzhEzxOlhLHX1>><J%>Mtwir0Pv67rZR2buPSC|E#_CQCYENR zNi&9~L#ymR=F}B_h;Lh2-Dc{%8hZC|xYj}}^Xy*vAL(@LAEmRZx0N$>^=e@LxQEuI zZ<3EaqSbBQ;*$Aa<@6n?{s7*DToc1^@T(k8T83<aWqu;4!W^4BgbAMr8a&kek(K&K zJpUpo_K*&SOSsR3WNw?lLw&uP%O;*Y^!E$cc<}E@U3-0Jn)CC&h8(}-4d*LRILALB zI4Y@*$BNW>s9D@W?4{sLl!U9@<TG@9x~t+mowKJFI)Uvj*OL9VE9ah)gKQdcT$$CT zUv&|p1h0=y_^qVtDlJ~BO_Yox$F3Os4Ys_|yd6$6%O3gACh}ELqwUj?RK%T#g8OLX zS@OolTpbRx`m87wEf3)4v@KA`v;Z-#j}n{MLbaud6UO%Cg7q1&K|7&WCx1N*Hm`;{ z7T#%$0MX~*53^P_8PXaR|Cmy@e_^)Y5qd}NO^1PDvOq{q-%Lfu&7XsE$tELId!5ED z(YDWkJ-m*W{si`#_h)xkVw+bC=8SlJ#&SEQDng!jy?~We0DCApKnMsP2In7oGN^?X ze3Ae`BddMdvUb@?6j_9qjbj48DakDnzif`}+Skw?(E7fsc@LRiqNz8S7E8H^C?s;8 z41Dz?xb6Fp%<+BgDtEJ{CJwpX>9tsJI^74~p?+_vlC8RAu8~E1)Cb?rF(i24AY2<w zR;Qm3fxvH8!eoBi$xgLjk1j3CDiZyx3Av|+qLo5-gHVG*Q<?tDEE-2ows@4Vtk0wl z*7CEeLo==J`IU3S-C4qIqoMxcXyO?U4{rFMiT<yHw?X{zXo)eJZs282a4HQ$TlRp_ z$;I)8Ixw7?k}bI~0U=Z&OOaMYfaniQFRIBOOwQ$AEl*$n2nZDUIpFX%c7bf<g&8S! zab)!^z2jufmgAY|1$yIayhY~7G|kaU&m;7dbtm%0GaK%Yk}ZNgl_?Et-{p$Cr`m=? z@+YOKeLgz@Vw!@?3Uhcwl(8<x%N*{UYIN|+IPasJViMx>cbl*DxOQAK74BjCWS#`P zQC17>UtLuDWvehu{)fajjseMUtOF1mYqo)dhq*`%bT`c8VLSjeWX6nbTqxJ6Kz^yN zj-Ls0-HBwJ%>huBl>aT3+>yM5=nV)iPN{XLaB)g-8c?b!iy466E0}(mp8izx*CBes zXDV5+isI0d#VN&m-Va_$NBE%yZad!E%1CYky*`c}^HM1FZ|%&Ai?Mx7N;gNcYMZcL zPEE~^GkVoKhZh^ueseb4eG9)L95rH!RxEmV9O_Y{-am3tD|M(bZ}VP}Ltvqma*FmS zd0;Lt0KJV9M<IwUbG!Xnu6mm;p5`oI^z%JGA@0YcLwo(>!D)^}c#d_2@k>5eHK814 zW?NK_D$8o9TdDTENuy>o8IcFWzk_py;?#TavUiiG7*(Dv&$nm+(5NnekAA6wt%lnt zi}TwOI0Bk0H=6f<&(k6-vsvzhdc7oruEjRj5<^>3@Dm$0&daVDLC0pdx07=pOtO_f zBa9`JdhVraNBjdZ{{Ec=LJb{)P+Wvb0lDCWf+qN)e9OD;D`Mu?#yI=xyKLm*lW|}t z&w(Y%ieb+6bm4(iTEGC2R2OuCHUSA5@kEn>6b;B*dQ(Kl224Jrg3qn>V^>(d|F+|x zxow(3tXj)8G~9m3Cpfc6f`VD2l!;M)d50)Tv6W+cB+p<8v#K9Ox1{BE4OvAXw+O<x zfmEVa{6B;+xWpO4tgMR%?`CO?PkgOP2|c*aqr*;ueJD@U?oR=Q7kmr;#-z}qT$y7f zI93s>v-65>W@*y>BrTL6%zPz>Q^b0W867J%x|!HG{fRMy*$zJ<S=Jg;pL*KKVxvxm zTC?t((4@ypUus8v2>R)h*GcKy-Hh5sf^&T22s9Ifho<Y-J0qeJZ0`fq**&VSz}b8u z!#^|(0_D)Fhz@yEKq1<YnbD_&C~d`4-qh<b<)Zi1$_&_a?GxE+g8Z@Cu?844n<b`w zo@^&`GyXB4OR?K_Yx(bfs)VEUl&!hNmszk3EOp`uo_(757?1<uYb*%EdLUgRPqm^0 zf<H6?orrITg`>||6-DkdmFmXFC(P)EG}>7$802b9HLR3e<At3JsJ(^$qmYjCeTeL8 zZV3o5IXaouLGL|;vTY7Hra^GIl(*ybaURVqMhPhh!=xeVd<Y!hYcbwwR;g&Q+~GN$ z-(Oo)*o&o1?Oq!c=zDTElq>z$3T5EGx%Wv6wJyEN@o4bIaSGDSI=j1@G)5Eh4@U2z zNe^ITTAB$4(X{AVz>U@K`go@up3V)Y;@tj>SZ|C%A?@X7@5FQfhCgIG7ArT^+mY(e z{~j<b0E-%Z5dd`vWUsC9cZpyR+r9#@;YlC2Dh!f}2UVzboC;sAY4Ul0zN{l{s-OJ% z?^k`ahG05DsXt3qwQ$+5Krnail4XNGC6^9ZEdlv>)Amg-?`7*99^z46koD9DY>q?b znv2QQ(g#Unn~>5X{}&#T3%4K5!+<_!)vQfWnki}tcX{!MMmQ=B2`--!JPEnOby$Ux z2-fD()FVMP+uj`LP~aaB$H`BP3}bzLVC<HcI!(ies@bdqc}Sypd;5Uld~J^X5@q_) zcp=||Z8h9Jp5q+^m=NTMU-Q_jfH2-Zk#p!U&F(R<@1;#9BeeXz@4mdO!Y_a%<0{CP zIv;0K#t82>GLsJ>J`dhb44+`>Gj7bWD!NQ+vwR|Wr`p&;B`QN~>-cOk3it@92B0a| z_Vk8BU6poMTuH7PwqTx<oSKmM{wB(67_Y7cgMhS_XuBGOj+^e!gpEiayH|Miu-V|x zn7Z#{Adq8i81QZvlodU|O)UDyM<T#B_M>BlLad>Y&syD0ClLmy<WQ7qh0{~TMdMF# z{DR=^-SLW|ocPpo7wa14l;9l1q!&E!NZ}^MzOFcwE&~s3Y|Tf@0&3WxT92Cd93ihx z_m|>7vw)iWA8?dXC`m4xfYO*hO)FZL{Hkspn7iT<ZDaRej8_akTZPi6^7cAB`Y{d< zsjoO*-c;iMx~aq`Y+eUV7!eK(srsiPIYmKxd!NXI%{qiHXpuoTIiC<F08P@6j8f4v zVO4!Tq!>@#+OkVHpt;Y7Sm6E1X%)MUr+X6(k-~2bw95S6+Na_>;;Vg;IYY~&`-Nv+ z9p+D%+cTK0HE%j>Z&?zB9hF_p8qwiD*ee(k5{X%t$x+|$L-&^m;$<J{f60oyuvs$F zEAVYP9InrNScIT)vjV49zU~f{VqbkE7u(RVa(f4ofpM-cJxb3b2LU)A`-4)HZ(nUN zrU<#c;+ugEd1aEn#ydn9FAHy9JuR#*0{v}4NnC!kf0~cH8@uvCXO1ZUQQb_%;y`y1 z0P}EyG#)DJGi8NZKI4Y7LsT>;4<B>0d$3sz-h*#!Z6)bHXi}kv1?G9k*=lDN#1UWj z*FDDNU<s2S<7$IiELN(?ud$B%vX*Cm@lCj9W=h4ap|_&%nRr-u2G(queGdJ(XL*(Q zSdV4rf47htAH(^+n(_fQQS&wdl8%&cUl&Lfh+;`Ou$1;7I42(Fi%scD1JT9BO6civ z&CbgcGnMcN9wi?b0SI32qpT2`()?V+6UXjeeD$?Fn6zcC*M==^D>6d=EFEq>^_(kg z>mHy^o9jo|xF#7P`S2g}`qrr+KOH-e)IU9ccX{bZ^xz%8!psEJR(_Bm<DFz}f680L zWSmS*lfMrMqq9jW+GF=~h=1;sHWSc)lC<k6sRU(|3b`ZE9-~B`5X&%LI0g1ivlyJX zledrd)^dD1RJ=8z6S`vpjj7-QkQ9Z>L!2=o%B|>l(I*pdW(6HYuUV|bsF!(_!z$!6 z9jiWwAB|&Pg~e!*c}NfSI_l>U>vlB0)cIdSj)(Iz%PW06_#QpYz7Q~=0fge}`hPTi zbySo8`!^j*qaxi1N;A5KA|V?HC?VZU1eETSE(wv1t|1^Gpma#*s1ed7jPB0o=JS1i z=j?cdqkrta-*H{9x*TKW#{#V#2#4^V4ShDbS}M~D<YIjity{DSEA^bW=nIu!)F8W> zAI{mye(Z2T8*nX6SH;M@T5=*?5R;z`Sr(9uNFRU1+KcBhkdo1fIC&1yOB~%4Nrwj8 z>m7d3Jw&MQ0_F@I(1$UeN&_UZ^$*yaUsEYuQDO)GWW)AEP*_EDA%alOk)*LGfQgcn zM7nxe-m~2x5&$NTVHv|_GU&n1#{2m#c|ZGPz=!`=I5Pr;GZ_S}cBWSE?#VV>1fz)Q z49C+}PW#YQ2-H!2+Q2t91Sm-MMPiAe2c4|>*id*+tc-XsCXnq}NPo-g?w9_~-6TUK z0nL)#cnHo3Ccd(ZpxtCbe1PDzpFcApQkYO?$N%vVHn8qvxC6FZ9?!@wWu~UAt90T` zw?^_<X?<H<ups+@D9lA4UzV|J4TI1wh2flLP@0!(TF@mS%t`eR>qu@_B#gP+!#u1} z^_OFC=ZT$dfvW%DASmMDIz)T^X)>&IyN;|2)!sakvN|~c%xeU55cQgM9Wr#2Sz;sN zM`)8-N@&-H+2dpm`b7pkGMOH1aHhfND2;Uh^(XBj4gw6oG5$`L?)P&GK2WobjDqa3 zIYoz<=``s4jV`blZM{$!3mO>R3S6cYB7OY^X#5Rj3ZG^bLW)92Z6i6X=I99~@e!>A ztcgOR3ObR_U-}-2d|ficANrhyh5AD<q<HkQ>~WU<c$xP>|DZSXr&GRDDJ}k2Cm*Za ztFG{|f0-;XzR>n;?@rhmVv?$<G*dJGK24|n9(6=uz9K8@_8a*-8)R#v8C*K=&M4~Z zV;>UMpeqMoJ@-Z7t^w;}VAs)XjoTg~a$UyC$LrKUfhPpjF#;?*0Po&l6x=`qtNUu1 z(A>+-^~m<!nGr<*SGaS{i6mW`H8w)&KF*NkKPms=KOhk-P#~U=WC%RjoE`me=uPMT z+aIA|_|;|T`xId-91`LgH9zT!2?CDaWJ&eGPkR8sWzP=yLWT7-SV_9GLirnHzIwnf zxlZK8%KcB<Z)UIh1k><jYL{FmAoebvM!rTXe8cE!MU6w|liuX(XH{Do>N*xrUD`O5 zh}hx}RGz-XI#3Y7Hr=U-a_;m48*E7P;|#ip8OYJTF>Exw%C9s+%{}@8I0~N^kl=Re z2puF$Yh~Jnew}-B!=r0(k-aQ;<vAGfmLIXVe^{7@@z{)GdiT$H>YI=C2t8rg!s%g@ zfcZz_{yfYnZ!IT_37+3iqpB}ZYhD)pN<M8Bx44VEet)|`7g0^ebYXOQUnQ{rJkNX_ znrHXsQ?4^@b$#3>9mj{nNHyjo)&>>ZX*zhZLHlaA98?kO0>9g}SM5mi9{|nfRMYtH zy!<G^kaQDh7G&Kdg9lWZcFbVO1LEw;eS-~Zxox2ND^3%W{S;Km2-g15EP1A5+w|L- zwj>!9<DaJQeToc~A1JCfNDy;=**1POr|#+95TgG;aROSu<9Fy-Kk%~Wa@bp8a1B+o zxhEat*b(;gq-xA#f^T_iWiq|c+e<}(p0Zq_dk(Z5yLozgIAN6t&qwg%m*#C@l$=Ll zRCVEdUXEdCiF|p^4G^DA?^kuSaqi24b>%$$1GwtNC2elvV_8GuprmC<R1nw5Xo|n< z-V8ew%`rSp5)O*^^GuBmigJq^z}Y|D+SpOb>&ZNr-HjNpe?bjvQrVZP79Tcv3>B<Y z`;cNZqD3$anU{}$C7!2<=uKnpe=zihYYcFT<1<iMX3?f7;6~KY0xh{gp+_F~W82lw z&60Tm)}?quiv2644{gb4W!Y*SSe0D+6`S1VP**5V@7ZTzH*%eQOEHh8s2XsgvnNf* z@>qLwlP>BH2V6EFBg)*1-Sx%T3#grz&y75yT;*JBFI1KlBHGpELDcjyFe%qZ18$<^ z6;>Z4CdMl24iR3RwH9Q|>UfImlrsQaRu&JF8Zh_-p|*W61`OR^=*mbz##`fnF*nPn zgXa%E5~4q+nIaV2WCjDbz~+I-IremF)rUD1_+HObfUYz)w*|(Ek1(}H%=?2s8ngJZ zTT__t{s7KXOu?PTLG||sTxdbv!=Zj}Km(Xtw;+V|m9krzm?bdM3z!UdKZ}?n>%7Eq zHZX2-_-bCexOt&+_u$<QEDw?zgQJ0o^ue!jnJe?{E5_Q}frm4vEa}Y-pN=<t`an@) z=T`51A)yu+{!cvvsC{eUxQW&|E-jlUMi^u&nVW;j{TFsUa&JE%d$=gc^A0np;auNT zsIftK8L)S@Tw=K@iD59HK7LQ)AH)LOCGS&U8zenX&<#H4!j?nX#sDkPvRlytDv6=h z6x%E;$msp|CLW0O?gbfPK{KCB{bg5=x8{O#ttNc1M^d`boxU*xef=c+mFMoD+{Z<2 z<<04Ufi6MY`o04HP|~_sMoBc7>QkQ0Q{E!SoeMS!+gG}v3+L1-T$H2#CK<()HSO|( zMQ8bmDZBc6Dtepo)l$)I1Ctk6(i$|L3p{CKjNbmJO=ZIJ%lzqCbd<LDRBC#%DILvI zCR?Nf=m*>k8KIj^^0+1Wz1-`!uNbh?VN%AFz_Cfr{La$Ak_zz5AkWDsj6|$S-X6$U zjKU0+YpC#6ik3Yc!a*@u>kr`!uWM8v!Uz~_pIg5~+-N+@R6#SMJ~QA0P!n&w?O5CU zX+Ea;9)4CjKEi<Rqrs;+Inl=|fJj2PFc}xDO~RuMrsn7z#Va$UYQ+VK;BY#N1t3Yf zJ_--@*J2@vvf^+M5O4QGlPNisiv{P4;NSv}^mbJGv<^<tcwz{D;XOy3Q;Yg>oB(w( z#+25Qjw%9nwYNkp8MenSM9L#95JYLM<`sh-wby*b(xv;We(Dy8FZaN!F|a9&StuMi zi}Jbp`}|7#_G9OFbPeLl?7uaO9ltue>Vhd#Sq^BmpR0*_(K#_x75UuAEs+p}p)sM; z5}ux8a3Xv-gjciJxnb3pe7;LLwrLnlqw6dLEeEOzstBE>pVMs)L41T#bIL#uLly^= z8UVKRAd8q^lASq;h-&CTdWp)r>2}*Uta@N=JuK*#XUV|17vkFE-(^^>$Uj69-CQf3 zMcmXdz!@@}L<)+p;rwo)qI|NpGu?C#t16S5LhD<8-Hwr+czp|^J5)FZpNmR*`+Bhe z?lsxjF1$Kd+lrX9LQvb<h%-5^H003x3Zp!p?XTwfR~2nP#RB?PMRDgG)MM9sx)p9F zO&mm8Y*5cfKxzOa9+~+)E4H!whf3m9O0*D^wcsm|RZoD(V5aAl^*S0>o<Hx43-@*c z{CG>Q#tyZ=C7FUW|JShs2iNMJ%>Q1meHITE#wu)uCyS>-J1c;T2qyR)3lVA+fLwWj z1!WsLLaZ=Mjtjmywf8Gz-(Bi`dBZk`O2f=dYsC;ToKM&LE8}8)ke2H=c=?NNxqbrs z50V|1G3xptdVe%WtEPW7&|yCHrO5I8gqxAt28}!#lI-qha){-CguxyoliwgcvqDnZ z2n`Zo31^P(<0)KvKe?Wu{}sUhT1QKTJcHN#Q#MnjNGguS+`Ld)r9$^(XZ4^%8gLLf z1F$bZ9zeeUvVh=S`uZpsSjkL|9oHPMgwYx_4|?y)J`Cm#Xi*jY1QxL)o498igo7x( zT&zw1!uiC#+f9ij0-$#|*~nRjk`^7wn(i8M->@#i2g49_xgNR0g2P~Km{lsJgjWg; zp#eR1OLF^b-G`FnDR;UfL4k3_&r2ghY}!m~C+}))xo*O`L4gsXgWGnr5~aO!!hS#C zw8$Q+%9K-gOT_8mQ_tv}9}ikVF(CAksd}Y>a(e4Z+3ZAIJPQ$4(z55DOMHDCgi@CC zV8VJQ^x$)haP-+&;IxoWtNozNVRW7`Ajq$vODq7R8@`E`IeQnZ4hOEPk;EfwQ+CeC zG%c87I*%%-)u;NyvAvek_n&BXfW8Vbb^dolJs3)w5R|mPFE`Y08R^`uWS)tIjcOpt z>X}y51dA*jK)Rn~sXizFYG_r*Y&2K_9hAEcb1U_e7HYTuHW~c&Z)MZU9#)rdbI=%q z0|DpldfYiIiyA#OMz8A^!Jeih!bWmPJ)pjFfvb6$nn=}J&2<Qx2t?Si!Q{8cdNo%f z1_ag}j_0XRkJF|gon*+33VvDzz$(g<{E_g72;h!be}ba)7YG7Il(0jz7vNUHDC-@9 z+8TwL4ayk6SigFG-?n6Zb?+YGKxHw^bil%)wogKPK!w+<7yw(=1{MC>v#P+J9gYXa z3s>cs;+=lx1rm0-`BHgOWU49ND6#ChXt4kzsR9XYSIx1Y-HutRfs|j_xRT037@miN zQ4$+cM+5Ki_H<_OCtY}d+w5MfzF^QhtlIbTY`5#mqBwdk;#z3|6+=T*MNtrE|HFWC zCZK4&<^yUsO$~QzIMS}md38cOM-XcMh~?&-K?zyNFc`tbU|SagG{Fc{3xpXV;xJNx z6k0&gD?IeT``wFspq73RbFIIey?8YkJw)S___5P@YWUF%Z1PSdN~U4{-}ky_>y;-< zORfGCm|gytl?5!q0W8{!)E61R_!!AQ&Lp<aJ8@hNGH}qP(KR{I#(CdbX2ux(+(~gf zD!qSFyA}RRQ<U{iD__-hcxL7kf|MC@zsQFFl~ENf!QU5zPA&X|BZDtJkMYbOl0`fq zfl{`C0-uik5<!{VZhgC=P7jxkfoR_fh6Te2#`k45Cj+m7pU6W*qCnLBVDuc>O>E8f zOC?1F8I<mS7iofc6`+I#;KDp4%(=^m?p-TQ6nr%2Asg~p^Mqs+>|S&pZ49M!A2@B@ zLi>ld5Y%e4i}}Az3J^Ub84Y*{zqDkaqG-fID4d8BPJl&zV1rn_!PGdsBQCu2xMsh$ z>KreNwx5L7Zin=3&0z(^HdSB5SOlj}<ogVroXwF!2`?+7E;j5rPjKTGO*YxOIDz@x zKip8D9;@<U4na5<d){gYE+1*O6_9=j;I$4Ra3wTwl0e=a?8df$Si@4R<)T1VSc-#S zk$Mod6RoY&Z$QSNeb)0^5cMR}N2@GkQwahaxTkRCYrN07gb^r_v$_%$0Vn=lw*CBt zom>5RnuiAPl{7Pb|J#2DShn|G#4LW4q=^{8Apjk+c6bs*SX$%STEELs^^5KAz(OpL z+g|u85%UdknBUKM!PD1J!sNC1)a@To4zb{sF*E-AD=M5VQXO*NZh*I((H<wQ(<3(A z16O&=m=%1-^@+FTq;Lh`q9L~qmIy$TGk=X?_C&(}0w)U?QlugxGBkvX?w3MA)FY<u zWgW_UGRF6VDoH?AX@=}Wpb-d>*btrwx<BQ)2&Loiv#(t|2mRcz>hA|qx=Ph@?}?ID zQdvdudY_B-y#`+dT!~T?ilj*+;~_>T(J$%zJWZCy-!4u3>gKt5h$wzlmf2w1Zu4k# z;_aN<wPct%eYIq1&Aq-=;1_p*UHRayxO<8KS6ed?1sFsJkbmG@xQ{NTHG%w^<bD;l zMKS-D<ELif5a4eBQkO@ndt3h2HUCZ5pLtNVe$k)bin&4qFP%ziKVE*O)zpFTE&~*& zFcJZsurJMZXzdyl-|pBQtP+zs%#0J78mpbxm)u{?&hE)St05Px!NW2tiXaUhQ0XDT zs<G+e({HY;OqejJBF-z`P|uE@zeDe4*18L0xdyxD^bK14KM7TpZq_9id@1m&Pp*QU z?G@$_;GrRXCd&YBxDv7}y6;iEpFbZ^^<gr%l+x;7fn5GwSAg>!s2o;g9+Tomn0K<| zOArR$gG%CZ-~2HgB;pVXKq@*q;JtHPc!*%TLIvgxF$jC%opTTOcFnxDrHaW}Sdg_5 z5dVNbK|B5ItU%$k^f!?yIzDh~4*n}FsVeP%;$Ee;opgQkY(#Q`7Sq}h@A~H(z1h*) ze8i}ez?S3su4(~s^eBdif6F}^J!-ceTkYicmIw{gYD(ghg6g(_B03Av{f(vwNv;u~ zDt4->Uw95ox*X{Rzl*&G9b}A8p|hRI&(0T3lkTH{^-9<N4~kQcM|MuN(i;3JH)+|I znxLoqZ3dkU_b*1fcN%;Jptp0+yE;k>#SR3;43oq!yl^71weBxx1nwa51i8WVBrnzp zTwAID>oXkNgDQzr04EQICFsbNvL4+#mGrT{&!>~WKf6f*1}LfMQcg|A%I*I&v4fq6 zd__cIwGibz%r<!WjKy2Q4Y}?H3WyM$RL+ne5;lcA+!pK<Hs(ch3_zG6)O1s&1ObG_ zeS10t=ypmm&!rCs97I7Z_`n#{F6YejpbsKYzbsnNEVn`KleqrgBdM}~Ga?OOw3Zr0 z!0ODWZ?@vdZ{wCTn=$~x_`?{pF5n!Sw-Imq;SS$dK^hKxwd%v0F-ki0h)or5O*vP> zH?L!37R{MS<(AYjoAbl0MEK|IBo1UQ$uzz%D*0YkviF)1Gcc@r$d<S|Ht|*`MoNS4 zOB=DT-ul)>U1Y6=eAf0}>#AF)t_+Ui0l2_~ColaDr`D5CMb4aGqmr*L(X)e-iLQTA ziVg|ieaFN%UHm@Fc+rdR;{ihM%i7TT4n|BoDBG3%J3E-|(5l>7V&e|-xt5-9Z`Pmb z7wWP^L+Wkn288&UFm=nG6ueIu2ixWfzZrY?ojr@8S{*UsBD`3VD>Gv0&p5iWtfwh+ zj*--rEvw!xBjG*Z6WEf;2(P9yxwwh9?LW|pGPUB@QGS&TG(*D=5exFD>a?q6oCgS; z_VAIBvKQeG5E+3;NQm`ok*|c)^9=upWmuoxtYQKGB709f?8j5kc^^aU$>LaAsIDtr z-i;dn0f>)pv(0MhR{Ivd(dxMLnzw$k-_<C8Qv_r5vq##9%6nX#c|&895%ccojWYVe zcVf6|PP{ltHYGx_7~TCP5P74Y8+=)NXglPBh*eH-MW_h4X}`D}YscM|g8CS`xge@q z>8DE7BSF}H)wRouVa!!)pzT&j)f<s{Dm*~$PqIu2BcR6dqJ~}UMsdUgOMoWq>%i)a z{tp%Hlk?wM{XqYK{bwX!4SS(`$NE+3T8XPvhr?yaON86yGF{@t`RPt>6lgg}5kZF) zkp6~iZACdpJEnfo<Zf3isw&>?3V_y(Q&z=AO!nlH(c&QzWV`Y;bz3@Kq~O{T%+E6% z+_ODdx47bN13UK@kS`OuUl$Mr=yUpIRQtzDT5mYp#1>Xd*9J2MQSN@}OuHaN4zS_f zk@&9MydTk@5DcD<sMIck%fcX8AwU)FC<ppOiTb(iqKuXz`=QF93fTCS208o|#j7f3 z2Y~^P8I^uFU^R<N(O-MHb17VyZ($FR@Tc?LAVMgVOBUlUQmuD~6O0{o06`*xC<ZKq z+pB{@4c}gkK<v0YT0PZV!YrOVfm)1fhFKO2BoB7}7c-U;bFoE3Y8wQ<vt}W-k>Qz> zU|fTz&dUzJyh%f|+Z?aca-Q}6AZPjiwN0;`o@oG5aLke`5ZOz_v8&f@p9Q~2r?(B2 z4&bW61}?^bUk$x~(L_DdUjJzCGIH-3IuqWJ@?|xl$Gue2+AA1tffS>DMZk#6_GOMs z`lQzJH~x0UOON*8*^3TS)Bw`e$nuBh{12@um)6WqlwP8CM&WI%CBhIbF`r^Rqe?n8 z<adlaW>xbv9kyW*^AUZMsJCzwU$A%l@;<Uq5mBK(_{}ksX=4jal12NG&|bGNQ1O`a z60D88_wW6JO~R#6AXwX3s*mY{6U$b()t2o-Rq?ZfQf|3N!&_%3&$y|j4;!Z!wj5$U zKz2s&2NA#tVx`4L43fnn#0MD(0c7yC%e@0h_SZ_`mgBPH>8in-$teNWT*5fSv^WC! zsyGPh3)g~{eB?25E>)(hg}al($6-0ONdoDYm2R;SHu*}7$)0znMt}vp{jHS7)uN=V z*u~rHWjxfov1?ikAV_z+Z6CWKD`~ODfd*{G%l{$m;v(|#Vg5m%NX#ys{o2q&G+w}c z!gm*Og-eYGTGm#G)wUU7s4w?FA=JvCe7((z#g@a8nEaO!7+J=<)6LB51Qo#+o)n}5 zS~&wJ;P?{F2JLo5@|4lcEvT19g4*tb6p*8!K4Z-DKx+bZAz)ZYJj|(EB%<K2K{J!@ z(eU`~4eO`G`(@5%g@GWftQGvoCuxT`X5)n^Na4-gm^=Oy0VIs=L}cKd<p%&T)J+(p z6M^k21PdzAwn1$h+A+_7hmBIjrRMP|Jbs^bs0Ix-j#QSceyp8~R+8$%OQfU5rgfo{ zw!BHX@4nGI^bwPBzwLU)Y&WNnho@jdemoCFKd(ofzWxE2haqSIwRDIa05xI*aTFi( z2rzQ!JfokA$cUGSty-W3FCw(#S~>+}X&wMo+I%@E-`ebT2<`$?r``23-;|x5wDM@L zt|YI(+8<0Rct#+{?25qL_DE1|AXnSw%-iOgmxx1Kck;m6flmV4C2<Fu>Og5o3AK{c zMfPu>{uH)(f&KL13dVyyu!B_<LmIOCnbq~v;gk)*@r;C^5DeS^C^|m-&3+Rw0Yt~W z^8zO4mn(C9-^vV|oPZ>nxxU6mT`zBM(UR)wYF%{c(fdZk_;m5{`^Lt`sjs7$GwQbS ze;N$T)U2a~*sti16aYVlFU9lF!OJ}V=NG5{7P*a7n6I+^SXcs%x>h6mcaKr4ZTewZ z^n{)Jn<BW&Oa$jEp(Q{qvSM-xTw4n?{tp4(c8SKjx|P@&uwPimod;-zTNu0A@0}q4 zY36F&6M;s*=@F%Rs@!2ckknTN5k`U4x{<hzSMn90zhe<=^2m)K)?i6YA`UWg9c?4` z<MyxqFWha<!Q*VKE{>{I)US~JJ6P*>52))Z1f=<3&NR@ovvZ{E*>$6cTC#x2O~1b! zffxdKL!Fr*@6ElTe-%DkgnH4ic?@u_55z=cF4|LNSA)cTEI^vFUi)L!&wWKI@}-+4 zA58w4Wa=`fHcK4>XKu9xdQmp^UFjQFeV~=z%P&4&Su{dT>a9dVBOUmjP^A}{@x$h* zG=5Q;^cWa$g!&(Rm-xDpeFp*RGb!*}Z6vL>g=b;Kh~N8{_tBqX9(No1BGw{YvfN)L zM4-&D6Hg>U*t^WI)@kL{?pNcx_fxIAxjp9Py<c|mB-sS&2%2D^-eRbX1NL!9o+d}2 zE^<DY*qzOC6+R9%{c9=BkdUd)l$0XFE#&!e3E4ti-B<N6W*VZ0UiUHkp)Y#SKtEbB zR=yB4GI{*_p>u;ds%6=ZfM$Z%R2Yi58A&1gDmqK)nwSm~7TgKB=1bP#g`hnF)kRb% zNPi9P#FbOXP_ZTQ*5H8Ed-Ap(%Gi$Ue^vYz#1qpb0TqIhg6jb*)m%}f+7HyPTT4^u zeRTWovG_$<3T&?OU-FN6_>~~^L%iytC%=y>p0<SP!TPV#Xj#(Mkx^=U`fGV>y!Zdg z`P68$`?jI2mun}{mtje5VO?t-L$5e>aypi!|19WIMsy~Wsqj)oykr-W-ozsX3>Vi0 z!d9QVWLBI?fzrZgAYDaK&}e`a+#(x1?E7VHc^frLM@&md6x3IH^+V2+8qhvfFt#cC z@M9*4vUo=48C)8b-lqcokb{Ng##JlVGFA!X4M8~5iZzXs)`b(+kWw6iKs^>ycPW{| zZjm8%ZalS1U%O9RuuGss?(*(|`pIHv??^}h58D&0=e8Ig8;oJp@<(5LeEHuylWo1* z7S;6<2idqmiQDwzTf53D?3Qo7IUG%vu8O8lP{jR~G)(mw+P+6t)m&>e5h_-H>B)J! z@Yr{d)+T_v2rA6Jb5=n92AVZy=GIp5&LV6APhnoKU8fiH%LpHfe0;41M59lIx8Aw? zd4L)sqRTiKj8*cSQ5C)5T3RkpoCUXd&qC|WE^Uli^@~oCxPz?^w7*5iFY-9AkK}in zK#egz>jAt4fBl<RqZ?JOu2y~*#5DWuHhKP{YVb_AD-}=Sr4qf~C$W+5Vvc<cP=C>z z4}i7~=Y8#!@?*|l_iwU1l5bdDnedsJ7-HD9Ff#Uugv?#)E7XJ>H-6{6EB}g5cfWaS zH=h`bMGDz7t*B}^*FAPV>h9HKf3~l2sFUL)LTr_w1?By-6-@CQA77mGSwmr#Y46V< zp8tNR0e*O;ps3YH`+r)1mZYGd)O+{#!?YoE5Ud>O+GAOTga`&sxak*5HrZA#oHpaE zu!DBO_E4rcQfVf7H#V^?Jj|p%Ao=jGH3oeuefGp<3$s%*{S(*(t`D7gHo295uVyW6 z;4jN_I0#D{8VJZo`3>Qt@UQ~vh?&QrKUGAl56ELR3sk)$Yd@M&Z~veq&rMIC|Mg3< zlxFf3gL3+6c!l}FB>Y_$QyB0+aQ_@afemZp_QPvco>}C*U_=lUv6x=2j-K3?d8`q4 z^AchDB>+ELIr|X|*)ZVz9>zN8E=OdH={osv;JF=cm{3<sCF`A@sQxKrRH4c4hN92@ zMR%0%W`vS?S{w>ckM8H|^!9!?(FeNhkcp%{!@%;_LmcwvJtXAFv*(%v8eoNxT*2cH zBLSaVqGnV?%07A|(Hqk(V%Fln<|@C9rIRG}cj{1)x4*RO8Pi2rAYQx;5^}L-Rs%!Z z!v1rLAs;;8G6@M;v8IUlP`a`ZARSNa9yD3cu&y6*#Mg6bx~JWB85}D|8B~b>#DQPJ z)44@8qk}#)G|jTIsdVJ)gLrB?GQJW(R+AzfOKpen68c_K*Hr3cMvQGY6|6$1Zv~<| zlxzcFYx0yP%yn0PMNM_Vvx82M{iSlQc1-3y8w9!h83mtqi5ZE!*iB?GYy*-g&-2C8 zh7_DCeS*`s-{3-E`*CoILONrUrsJ;KO7mWdDg$Kpv}Kk~!wVZ_67NYldewi~6KOi) z-M(a{zgaCc_)ctF&{-aaDS9yZ##$V>QhEB=UwG=4OBFXoy$H0g;`TqJ$TUyN*LFJZ z{n~6&dvN-!@mpEm$fe<W<H)p~`8PKqE}#~S5`rFyp!lI-Pclta7%Ity@V~ecvR#8Z z(Rk6K_oD>o)3jc{G1iml;P1gxR<*uoMJFei4Y7O)?{PL$1o)u{EY|PbGWwb>MHOpr z08<r{Tx()7p^O>S=@r|du$8SUs^Jq2X1JUyHxe*n!XSys^n?lUAafE=WG>%93+OVY z(7bFDPvmY2R|Ij8-$C(P8HhFwY);y_fs8rk00N-YQH`!1DL2LdYY*o-QHo0%!0HB} zM^%taucMQV;;r?3`uRH5Njb>-UQxk>m%dPVeX|cxCuv_CcSw0d8e47LBX%4mzc{%K zry0+mw)7({P%d<{`y>*7gv63P>6{-GFRD1oFEYO)KISZJgZjQlnMG#vAkA=|8(8y( zB2xn3Y`7Y|lFBS%X`ITg6aYK0)Mipg{tRCJH);JbLXr_oO>v~)8|{6kdoM`|aE?af z=p$N9HZpBZXF=AZAT>Nl43mcQL?Joj<)f%0!dH6zE{~xvYSf<3K-vV7Yrb_qI-z0( zX7n*SCqcA{Al{1V&d-R7kuHm-K<Dy4!S|LgB72}%af9wLeB#!SNW(G8bzc>sQ6Qa4 z`Dd!s4o=EG*bXQ-b=@g)0D{b@(}PN-SW@B&6_dGCUEI$qDhU%{lJd2g;&fm9186FW z^`Cj_?t@e>mq|#H1#=ZGy3l#}=&Nc+-dC}LjccJ*#k?(`eeZ!GxLc~+0SDHP`FRs^ zBy1mS(&Qt_^yiySWOUv->1!{f$Av51caCKfV`1Nyx$eR#+bW3akH)V9g%jq>lLPrx zBJ)&<a#fpuHbBJ!{nZu(dLK(UPgYoUnk1Tmj0lF>#SS{(=aScBN{3r*gCrAH-FK}* zhmQz6M5ldqoOdMJa-K#bg)4bNkQG<L#9DmEG-pE@QdS!b#gnT&KOZMD+-O<!int1` ze!n|`%k<nUueP?g$L6Fz?Ke`>c-nGd{o>*WK3n0-6X)Brm}>XT`Eg&r>2ha-xb$hS zqnYGf4B*?XU+JE#j!W~s?54$l;dn6xX5s;@tq0F}7a>wb(jMQ~6WwbS65%5rbT^`# z!ttuBsx!=3$d~G~RFWtr&boK#rG%dR@zDug8TfcubQzOOlb7E<=exGY4@ntxjntCg z@Ax)(3T%H5*FANf@gbLj`Z9N=r@JD=il61TKeSp01&ZWxS)d^Ik>`mfCBQ2{2kxCC z8$F(pAq!tX*ioZasek%CO6lEXy13Cx9%NWdiU>ra)tQ}GUgYztLKjSFb2td~RYvB_ z&3rdhQ1+V_73|#s&bdA>)7)79nf1V#%LB?++J}B7ok$>{xiST4F&@bEOjKnVGUy6@ zVthEzI|RmHTp#pfAxaSo;k*$6RLY$UvPB~ds^~v2w5^(emF@k6zsY@R<noDts&B0S z;m~?DS*GXV9$cI}-4pORi<71MEib?d+T}t$5Mu56dJ_5H0SDgQCykbynm15b`(Y5i z6<cbTR0<_BRygr3D;|+UL`DXatgNgTB1X+4Ji_3K%d>Hg$%Xx~JEQZD+8i@_i(@%c zLswrTD?VbJkrb|1b(tEX11`FivjZSnz6R6SjEGaqej`AnEM0N?_o)pMCfC~v3T$QK z`<apnd#77oHS$Ri%2=2&*|f1ae~#Sw;P6Qv(?fYQzGzkxDrq6G#yrJ1xPR&WXg+5j zp0{gwi%@*1s+~01yx(*=yGu~pk_3Zin`Tus43Hn?o_4z77Lj^?*TxE1wx<ug*`|F& zFE^7vA=&5%fS}gR?yt+g3tOq%(f?PySq-c(e3l3frpVmnJ+qDa#Pn^*cTm~$&?i~D zIurY7tA%gm*r1`W*2CTP%VPOXG=IalL>Ec&B<+TYn+mnc`ZNuuOX9WCr7uUM;&qvW z##dI2?bo}m8xE_<v%KmnQcWDy_&ur)9hx6pKPh-&jYPfzi;=qso|Vwwgi&|Rm+Pv` zptl}4+UNB6&;Db!-&Yrx>}sBrO_^0VOn5x}>5q=Cg`SB)OU4&K<&JF%#r)3WD(Bt+ zD4iG%8~fScljF2_So`f{gjo^aoArGLC;5JnJeW%qq9SX;RIvjHE6lbzw8nqrbVkRd z_jG14HFtPxba37K#&Q08o7pgh>sB_P`X?+(w85N~xw|pTVJ24?ruoFv@B&B)(-;R$ zeE9nKr~ND=uw7(M*Imi<U1iAQCu-xZ>6+}j&*wRQvr-#l)cbq4Evaw1h#ieFkEG2h z-XZQ`xOGmYPA7j)x|AJ0yfVh*D18NH2uCR)asGr)-}#!bfV;3qEE`O1_`Gol2TJ~v z+a%DsGbbog63W70>lJ%UET_W#53qF&Xap01IPr$?0IU`ZulcOQr1`i+`fPgcSY0{N zn2ybg?zv5cBv)`rxF^ZMo2|42HbGlH^sH#dQadwnx&sbdGQA*I9MLMShgJ!_;_3G- zJKYM?=Oo0!anmJ8h$!uZLx(lNE>*?wZcq!co$=p!b4&nHHeu0|lqUu2^BxUf4}&VV zLv?-|bxg`gqb<qptl?an2SzA>E*;=K?<v!nj2nS-S+LMgp&`!Qs3^bdN|U;}HQpm? zTxgaEbn8ootv_ySKj<w7w0ykU(WFmYOE3`0Xq4Y%59*~+Pf4)`(#QPa2?1OICxG+z z_PUpCX!L`4stV{)Ts2OKHp8G*yvo+av|O1=l<;eQ43L`C7s`|A5P=&sO7Wcxzfe`l z(FL^t?3t(J19kCTVlGD?Y<KnN=PH}-e7ELC1~~Am&P2K8?ngHjz-|XVf?CFJ-l#)N zGLpTi82d@(R+UWL1UJOuTS#Xc(DoCV9RgDcdXdz1+U3EK#Wc~kA6w4IRl6#Jx{jF* z-s)b&&swFXUCW4G=gQ@{^C9+xYz}!}+=>6aGiqZB*0;RLbmAJhS)qI_m5!|F)2k2^ zWBV)rgJOcdKXkp&rjlpZXX1t3SOwK(7Z>hL#7SB3b`QiOKFqXo0_`9sx;9HX1r5-W zmCt|)LyPMZ>VVL@%}%$}u-vF9(D^-b{;N|v?&-=~14-$;cxN`^rtCg33!Tgl8R~N1 z98mL7<H~&w`)6e1Sll))Rt|S!|K8U3EoZ`m?4Ssz_n_B1P|}EUp7@_~ITR=Y1^eH4 zXrJBoj#CZmOpANfzrC03PCF;IV#+3|l^@00<|cZmY34B;qH=PaGP$+qgF}Ts{m}63 z>!%+;H7qjVXMI@dQP4Ee_52n%Dap@1sptIq(^%G0Q3xk<oxKLY30-&TjM26lE+v0~ zTlY$cP}$~@SG0lX8-$^PCD$sD#F`*WAsnxuECM!Ou|()kAlz;UQoRpyMG}koJ72#@ zW3<&<XE+|>9>2m9e^VGJqZgY`(5sposJ4eFHTp4om7n>#`HZycD#Y~{l}D>Bl?bkC zMQ+*cTa=Vl7N9M#>aD<2OA2u((c~git_Z^oF_X~Tv-!N7Ta-~a^Q4Oec@Sh<eCkp* zH{0mt?hg1uwX_aE#-sbz2_KZq<8z!$vmsfz5KASvX?x~Hy8_JRUZsPCxZS^6efB|W znn9UOOntvzq6Ktdz{2>giLOE$A{zHHuCOR|?~~Cz(GAGq`Knl|xZeny{s^o>Ex7|k zTHJ4IS(MvqW!A%aGNuen2j4R?Q(bfMx_oMCErx-3#lA$eM`Hlhe;4GiPp#s|$9~Ru z>v5yAYrQ|(xSsXs5PngLL3D7_b-XfD&w&M9?~=$j0*H;9pZ8M4lkbN%a}+Fdf*g^o znjqnaU#QHVQtylA0|6o5iDQ$$zH|0ed|RODF`y6-`C>!3XBpW%^K<Ox-Ea+Q)Pa*m z^m;Fy8>8J{*B_tUtA!#YA2W{FKOM+X@zm5Lxy&<2NTJu{#I_0&LR!B{f$1gC9#Ybx zi*#dTOhkJ{$47UYOMfDB2`~P9%E&`lSd%^$=?kI@%(!N#_~(5iOo;wRD6{}%SA;2Z z_ZAJ)qpy0(=yE8-G)wrd*Th2;&0S<BLf|KvzeWrtGX@37Hr+MzER|yUb}G3?etD;N zO`DK+|NIGCjcBBIvc}149FW{v%Yfb}3y1)mo^Yr-`Vi-2uN2v@uGpuh*4&`grIMHS zF>AGn4_0ujgRhok255`*$;!IM=3NhnRxRt!RiI&ibVEjKS2sfIZ(vwFzw(+}<v?(K ze83}I^?suK?Jl#y@r@8&FUVZ|v*0AJxF3mB(PvQX=cDpB%+408Y!<KBUNC5UXL8N< z8V%VPrs3toxIQl{NzwI*cLsUnA$}X@AykntnSz}Zu2aLGBG7l!0AiagB2efFK~6fD zcqT9o+HYzrBhP`$sFLO|(L`DVDkz;H4^X0ur|nsAHw29G!+~@L4J0LXwv29&4VvC# zZDdn44YXY=U7IrXkCGL^kET6-%5QqJN3)?Aj9U5B;QMVERa=K^F@&Yd@z42huf5(8 zxAlBdt1&lLVk=kS2%QgLVLLyWt{>Ylf&(R1QsMN^ia)gX3>8`mbyXUalk9S-8mdCO zU&tI*9W>@Xo0q<r@>VwS-nFIUVY7SB5-r6Zucw(O6NI1IQyF~LW<}@QAH%e@innPB z`E4w6@tl--{8!pCYlrAnbem?8q^aRszMfk|DA^~A3u;#c)H~CW%>o)I1<g9t(S#&E z3XcIu&Sx4JV>>K5UWP$)1OVc4FkK{?h%2T*s55og(4(wKSpf<@=`T$w8H@y7&V!FW zKlU-_dmRs|%%D@56`D+TEpwI+W$a9a%S?SzIA6<+i+q<uRq*b*p=BrX<NBivm0vhu zwmG_pcB*}yw6mGpJmyce+D44M0Pm0Fm0t^5i47jj`gf?PP!xz$^pI+Wx)7eZd$Lil zZ0w8aF5YE0&vYj<c#T|-X6KG<k7N^~>c!Klf&9#Z<i^!%rohg#4Nz<ME4zG5VSI7# zDx0c;=BvNOh!RGp11CaHoM;RL%@m!`0)ho-IA54*PIg80*31ls2%!kvA&268+wCC* zHVJkd0>4ZVxBHs}ZmjLjubjoisUU1iGftL|cjmW*Ft|G&JNkKrsZ_8F@%jl*y)6m! z=9TySrE&Phfv~a+^(;f<fEBe_rWxoPztQ{X;Pvbh^Tq*u<zkn6ff2vqKwKCHo!VL} z1U13@0NYMxj2R~hfJk`>^<#uRgJVY}x+U&~6a{mC(|BB&)+jx-Uz~6DQmrl0^cZ`k z<C~3#C~q3y?esv~nU#$5BMRDxB$}7K?D0<RMBjQa77o4qme*Ap$%5Yfgg_GO*58Gt z_qut(JY%B-(Iq(ry{rNemvQhh|9)PJ6Xy>~fTXN8^Xu5sA3@YRD)g1Tn)Ihd+K5hu zZxwFwTzf*OaPKZ>H)9sDwHc>8@GkN2J_8oclE==ZOT4v*EAmlajtbh3(n>S0$KTG* zyy&WKTC8sgKc{g(6xwH|xiOLya`q|8&*UQ^I7UwdkhJCbJS9U43vK3SWMs6qwk~(Y z6_>x}YCHK|n*RftF1IAze#Fzo>Q}rsL{nXoFz#M(9g_Zle3n{-+g$y7^=ibHR{;5u z46!03e;!`ka?opLtf61Vu@8w3hFvs+*M4(P7x;dGaUMpQ+_-kHQ5tGIrlJb2_>VX} z%z*{m790DJd*dN=8^cNPm;EV%97-e-`JPNMYAff%I4EY?_Tw@#(nGav67<>nZoxPy z-G1i=(~<u3Kbtcf<BwgxhR3z;Jr3dFu&epmoS%LD-kjd{@U*oBN@_p;g6RiOF6!2! zVeEj%+=MAK+pzZZsZucsM@PHR<arW5!(YWM;ov)F<@#+tcuSy5ylrE^Zc_W=?;QUn z+3n`0>tECt>zHj_+&|ZEsrSlWJbQF|VbkoAN~2N@o5=j*D8|H)r6wHn(HZblNwE(& zWH=162(WC6Psyqwo0r-c=bA0YQhjeP=c_R|y{|q%s}18wjaOW=0SMhgW7ilI)9@r8 zZwk^!LcdZL5-1$E^`5|(?z^f~t!S0J7FU@2EbVgH?ZMlPdB3`P_ZqJ?5LLe|i0g~R zQghm@;NjuD+JBXIIDV<s1KS|Ac20spg{lCgZU4P{wimV;-KDtS1a&N>6?lh|!r3c{ z@8RNrWIHHOWJ7qLAkJHF!=73D6E|SQoE!*l3;$N!Xgv02I<riQ!tgP_*bhlnE}(n< z;0@bnmiWIBGr1503;>`rk^eNib*;j8BY>|4K9bJD6OsJ|3I)z5RBS3OgZvPlKBN+O z2Xr^(Qq9fz@fFR_kg#>ZRM?#N^jYSYnf}{}iA}1igBX)^Kp!iHgWA10j0=G8q{T?w zsk4UI{z85=V`F0lNw$G}aiHBy=&kAMvXy(iGDAn;rT0pi0=yQ5(VWMv^g}LNSpXwI z23QjRm4%anYNw0to?5Pa*6dI;1Wi8l>#<wF5R5Aj_MRzo7C6QTdRGjAVQLD39Qi~X z#r%%xU^9mC4<K#{Y*2i+P7Xy{R+e7RZ)Lz+8zTS_Y4J{Z0{z3plPY$~{0sy5%hCky zSR>v2v9K-^XUi*5<yWPWY!=`f?@NWNRx|<pM(V5OtN6P*z>`BueNTw6ND#eh?U0eZ zy1efQ=*QBecXB)<et+GTH8L?^eX9TZR_HCTcH2M5fCSENa&7n!f9N%+u{;u73|3=| zb4lh8Z!EqO`-kI-1}u3D7{9Nm|BlUTdXdq*CnYJ;=6_Y!vi4Wq<qdE)(EB;RpYFA} zITR9W$;+4Ps#>uPyvbPe$iSTp46+tzJQ+{VhPpe{3yMrpIzBG#!P*pwB&h)ogW$sZ z9BW*>v0QzEO^}g(l?3Z01HPNWz+^A@^wJjz#=q)Vy$9`gHvmMKb;NLIDdy96o6rD_ z;06cXCQ`g!7glpX`sH@SMHc?;cz3+V)Ys@G(BXTI(X<{jO8j0`E8h_4ENa#>zJAHr zs=ns_<Hvk?#m%hWc<H0dvTec}yXnAD;Ej;I;uKeY8L!7dC9)z^P1yIV7S0}-S}RFp z<K@*)@BV2{f_l*@mPr4}(;}`T_IzPNT=1`G*XH3$fVJb*OH72l_tB2&1g+<?!ePl0 zcxce^g!0vEUvqR2tis-`M;TE4o7@hFUz_k$DrY{imJzom?Bxfh*{Qu*A9$(np^aP4 zXHXdU84NjTQFLMA|9~(>y7u;qK+!FJGWFN~%_bVtAfK~00tGs1T{^K!=6`9~95@qT zriGNo95cipEe}n`MxJEeC1LhHXwh6w?ieQh>>v_F8~7Tjw)b|ia_}bZVrtJKk?_>C zJR?>>USzp4(ecu7NVzw$=@1Ebhh%tm0Z#Wa_5oGgI!6YI=1-<GHqL-&^iO6r<JsZ( zb<bhSb9m=Jg~AyHAuR13mPkP~-3ktTwm;spZVeyxtO+#uMdZS&>Wwz8&xm9_EcyLA z<;Nn>oHvO&rt+z84r`H(gTvaH_32EC$R67`PMdgBq-1GijYtga;IU>Nu{z{X-f#8~ z6Qm#HY5*8Ss~;o&y2P(;4P#=g=uTVMP<wRNh!#qCsBRv-V-)NsXgHX099?ptg-hwZ zm}qhHX)IY#R&+lkRv+LW?X~-|Z~W-?fD+@?_CmTdp~0?04rkiFq8-Oeky$ccO82Ll zad(~z9v~a4CY$%WO>3MKMTnEB1kdgZa$m9f0`6$t^(5A=M2gC)oDWk}*w46OT|Iu> z87`X`uGx!8RkVDRvc*AG`@a@qdHfsL=8e4ltm8vXu7Z25#6fJTEnNC3sspzc&LZMy zh_(Weso#G7d77TKa~R2A?-P2FDDJU#l6ViX%NVY$K~qG7p0)^IRX`l<gjt*OD{Mq5 zt{Wuj{WKf^oqF!8$&J25n7}o!j(2?$yIRt$4PqZHIJw3nhn>KAg}hs<+Hd~)aHkq$ z4rF?NN5@%Oe}K36JaYBWP5hpHqQcXd0QGszHVjl%ynajZD*c1Yx-xS`fLBT&?X4CI zAfJFgAewpdF+MqH#+!<j;_E0U*1DH);^OQy3*m=WaHsR-XX%dG!D#UFgn!*U?Oz@c z1+q$i>3XWTVn(=IE+?sWnEardRWn*%+_TSGQ!eFEjm^EwHGyIZ?}8H`-Y8}_jsFOJ zb79bl&G(4{2W!;g-Af7%O2byjPs@j|cI&DR=`7a&)xbk>7!T?Heqr$ZA}>(``zlFK z?oH+Q@#A5U*yfFiTE1NMDIev0i+3rC-J+lJjmF>=JBRXXU;B_oBh2Y<klSl2Jk-<Q zr=cR}TXb4MEWWQOMKW$TC+w*ETXo$HajT*+8D$~8Z``twrZ$8J%l0v4Wea%(I9>yf znEEnD!OtJ3wPl8Y^s|XA&(=3R10}jTBv8WSpxIUYiWmJwnwY2*So&XfR!cvfxSN2g zb&X9@&%mZ7VF8LmNpAC4jgmI#?Gquo7~nc2duenq4xCq96Ay-5jMO?0;@ElG?$h?` z0udXx*dMiX&ny%OhLXO_&-~O;o(n*F%loq)JyPU|cE<*7cPpuAIo;o({3@9qYT?7n z(<lP<HNaGTO?kE>p}$be?hX|Yo7aI@3dh@W5{a}RP-&~y>Q_!8ujD84esYz54iK${ zbHRppVqwAyS&VjCDO@;M<PhrS<3FHDFg2bK3N!>VkeTZhiJuTm%t(Z<%8yl0OZ?cW zS-mMD_JCb3(Hl+pZJ_=5ZTdl}WMqP`gk6z<P~spU@BS%#M}`GV?NcC4es5?L%aY*f zL;MB6#bHgufzQ<OUlL2COk%TEKPaLIQb0jE5{N{?L@oHK#AyLJ@Rhs?{6$?QHWtI? zoVs6l)(o}K(CF=lM=_myCbgjXi(Xp}0-^`#euMwBmb&sO;2@lSeT8Eqd{|y`4UupV zgbd-Jc>6?HNkQ7>-92D!b7|HuV1QL?Wv^D8%N*qtg5GwFOJ{TIT2wfC<Ffqq^GWIA zTsktBov6)!g!e^d3*?gai>tg2jvHc~&}TCHDW<8T7ZhKA=wMu@-8Fb0E%R&ADLev( z7<P~;OF?QYPqINj4ubY+HW9IQJ8BW2uybk{P6UkZB|<No_*EWHw+~Pq0455Kp$GRD zx*;NOgJrm$spj>_f~KCuOj|`4?1|I>Sy70%TIMWbwv_*#hg_C#2R$4~2HIA71WRyW zI?Gf65nut#CD+sohTM_($_GRJ+W$R-KHMyLx=tVtLMs4So&9Lsac4s@sDqbERosK0 z0(>}WV{+Xo?w}z{c4FO}{)I8C)}!+`yCY(^F?m#MkbK3jd--SI_7nNHPjfAM5tUl) zJz=;dF?Zp8-=_oXyuHfHKSp)4#oJod!*PSHM_@c+>}b3vG&hHr;-Xb1sA?CRnE8(2 zRGq1xNM$69o{9#7Zus<&5ZwUOw=IG=v5-Up-f&2wTL~o`S(_R@BT72%QtK{rTQDU7 z%`3#t``37idL@K<<sXY-*NVl2b;n}NY!JXxYafAVJ2y4?XmMnV(*RNGMDPho`Jo0s z^D%7=*@quJxu$`v=h}P2VDx+ccm6v5yX3a-_~>FNaZ?utMVaH5*y91p!PD+e@&^3z z>ixri6hlWOb%0fH@}WFC=0L9-NWy^o&9FU0w2)+}PR^2n04R3Q`@71*(mhtt1~VC# zHkB=cAPY8Se}Csdrb@}%_n29;H-at~KB^&cbSlKAlkJxi)tc?DgZpQCpY_TDpXWC+ zM0Mk*rmkJZY<~+W;MXv+Ao>BfMsy!bp?-R~KW1k`<4LhKc-S7kVnhFu*v7>Qgy9st z(Uw5V_-Eypr!z34AEFxu|A3Bz>z1Y07++izc|#{$fAJ8KAbUuVwa7y{M%$({uCe_z z5o{@I1T+kXZ{)L~8DjAf3?Z5Dk&c_;4`l%IAOC{!(aA}##C`XCHdw`G*KNZ{jVxd~ zL9CaHl21Pub^AXp!0vnN(|92Qxk28YZgRi9;F7YdXZvK<K!iU6CQPr?6nOAjopYq$ z=D($uiwpfod<;%<E`2>p<cS9g!L9(T1Lql(+(+1;<F|D;4G#f9h)D*qAvp2v1dtc& zXBoF#CRqfV8bt_P>@e+G4<uCEUx^?yF6HRfcUq#j-nk5eu>#t5OR)p0>j)2Z-3LoL z+z^EmK=j7ZBM^FzHJiL9XN*zo$9e{gZhS8Y&P7qax+QGkE+Y(WQ({7{KUJWJfl(=+ z%`_#CCE+QYN^XLnM#H-4cB){s#Qv2C)F^Mgn;(W0fnHMsmP8w~2QWXN!|`8*+wjhJ zn!~a<F09>?zfIsbvMXRADyYR(r6QzIc>aK{(&l}J#}e@^W1(3d!4!*H-ukH697d!M zs*8>CsrsKjANHQ8)rR{czSR#?tE0u236V;Z_BQ<e`434Aj=vS-J~`S1VmwtEp8|!t z#h3}pNdJ#{`KQ+Y>#LI{4YjLLUcqXmvhTcRhetMJ>mGmaw7=-HH&B}UW%>_#AMimt zGJbOF46l?4YdEr=P;+#{3AAPdb5q5vtE!aCePsdxW<tCG0GV~-uiQ5sDHs>akUn<> zs&oF!_M7v*BVy0l@9?NTIWfP3na;-cMCKTEP811h%z|)x<Y&OZH@NOlfY96D`OH+9 zuZ?p6QT`~|a4FL?&*9yrWb+xD1!~LY8jvX2*Hk4Mm|WgL+gK^qZaea&w=R`R<3-Bp zm6np#f78loD$mB2X#XubU$1bYofppy(HAG%spnpqKy-KO*ENcjA*1FB;f(pqxzo>? zELdykC(P@CdI;61lAc->*(*P7V}WH+EK<<&eU^cKi2~m0|H{+nu*ggv3lw4A>d(4= zBKAxyt1-CL1U~uzIQ<FTKUnMa<Ll|4t(M;6ofP5CSf0wJ0L>48KfE1#Hj$wH32FGe zgx~-!SAr$l>R23N{PFr9ezlSRN!8}y0dJeJSLI=cxD=^&A0B&dyxs!~sQC~iXX;Tr zreLKFc%U14&M%k6PR~)t@J@XHGJ4rNO-8J!tPm6>EEN885a`o>b{p0RBK2DbLB$b} zL-*9Fh!E{Mm@ok#>s+MnoRq%;0(qmAETVHCMOUAwU{W629jJ)9uGJpvIbl}%zF8m( zpU4shsH{i-0}_=-V>+7~kERUV>y!iK_T97g)vPaG7Ug;Gu2Q)E1DJs`>7G{yOjK%H z`kA!_)V-dgDgsm2Q8k``FQTQUKgpP<`J2jJ$M{CAJ}p>n!UD#RS@@!5=u!;!v(zwa z`$}5?6Pm@n9av@=T9Ik%>3zv{qVSyT$lv295dYq{BJ-Lyu>C9*7rioLujLf9+MyxQ z^T9jaTf%F1x{NL0bU;aBH=ChP%+6>QaFhO7WyjrKcC0R&(Rt4OY{hieB1wiK*g7cP zS}XB>z8pA)QP<gRh}cW#AbJtF7<6}jcbXmj^LFrcW0A6w?x(^_W>9?YGpJ7-^Z}Jk zh~_PK51i}zCB!h8=v-l+dELf*rET8|=zP}i%l~kSsNMpn1nNYq@H->O^ULlV{e;{4 zzc9Jq{NP>JVcV`4UD*XM;#rw98&_hyTjwya@a&pjoS#l5qp-J!<vXe}|HktIBCIQS z!g4M#FC_mUN4CF>zjLO|_{g{Sbra{AF~%4Zq}TtW=_|vcYQL|CP(Y*=q#HpRhVJg} zMvxd%x>KYZ1ZL=Pkd|&xkY+%-yQQQX-sAIse_UL1!H4;>&p!9P_g-tSl}#CQjC)FS zB~M4FRu{T0!mSP_*?){UnJ8ZQ_E)I`3TWeECYFd*ehXRKes&}LiZSm~9Gwn6VbEDD z4#4_OeT}v7H^ydX_InCI3cUW(QzhDt2-K5!B+>C4IwWvvei)gL7P4n{A{pnll216c zHX;Sz_uh0nXPKGl3D|G?^j+SsUBrvEEr-|;a6O<fzD|9|GxzJavbeg@t%l>CTrYOb z^q=ydYvagfe7@W3QMvj>Fn}KVm5CB6sFI?c!e;(Kfrm)tZ^6U|QlLqCmCfL&9n@IT zz4#1E+)|0Dx>^PncmO1+i;!v&*(f<;H>L6|_Pi%c#cmzI|Di#si!m&J)N&Lj>1H1v z*3q&4D9AXtzc`-c;GMnGttr2;!p1>|+}*3f(!-t>J+b|OpiM7&{VbT@s!*Er@k+Jc zbGUD-=05@9%2%*eO(Bd&?#oSwQX2GXNiF4VdI4yvc%`J473ygqKYFqVSE^0{u#_-} zjtWA*;B>n0VSf_*aE|V|^jfC4uh;G&o9vV~`|(-<yvgzLJb7-;;d(SKpmW5L8A)Pa zp)%_&FI7(|_FcWBpzx3C*{Ts11?=F8RcVW2Mi`{7*Aq!oB`})-1Vjj(dcNj2r(EJ= zJaB~Pz;qldJz&@vp_h$d&))>7&;?gOz{z8${+BDTqg7Pxc5QCC4<4XFR828xzB6Bk zc{uLyT*0Mb&y<rG)W+S)C+L7Z2C5uDZCEym;dvzc=eInGw0lEs@&pmbuQEv(QN$<k z92D@OgSZggxE9=O>6rVx<`#BzaL8M{81UW;6(aG81!(=%=ltJ`Q2C(r=`UKjw*Uzn z+C5`ia`npvP~H@FLi)7;jCN6iHQuqSKmN<RA!n@ubt@WB<lCI28H{LketW;mIlZN6 z{P<Y$(9$VOIYV2x4R`NWo%GId^eH{@_ISJ9_*kzV3q{b`I-u|LKYrPo!uEIlQfnO| zC_f*U%TadyYn{Roy#xygZ%}9R##N>e3z$HOw=l`QgDRj*4Hg9gxWlE~@;p$j7(C4s zy<!XyVKz{i*6~nt%Oxt54!i^_i11_qv=aXxoEh8t)*LEsM$ZZL*vXFHNvIF6X$(RJ z2|htYAB`=6SqY^h{`N3s(B5Zle>G<s6+fXextyW)Vq9gMV+>6@DwsU?_cg94^r>QO z)n&?MbRzHTiY@i0MbipaBLEJnv1&PPCcbSggaSQww%FEO#rqx3KVGetZ&ch!C?7-) zWxH8N>Rt#Coaok9j!t;|pOm$Po~?DUP9CroGa8(6#(3ipU4r?mRN~o8Mv^7BQK%Gk z{0qe5OF%8*^Y-aZ?o`mjo|=JLx7gE-*|KqaY;Co4k<RRbLGAU>uML=9hj*KERH_Ya zP}%R>mKUAXyhxzcA0x7$*?Delc@OV|oCYlPygl=v%MpD-n{gc~Q1FM}QZEpwHD)b5 z$B7S>^S^uPr&3>OPL!!mOnwRb^exOk)Y~0K1mxnIqVkSV2y(h=ic(PtUfS&br4JsY zmq6&v{$;(%4Dye5?i4{pr=yVFqTMU&`5=<3wm&Tr$L$xl=|tEQAVX|G=i8k&8hoQ+ zJrXuH+#>G=xa1b+1{%uVSw(`G-h+8?yilnDcX{HbPWwE8Q*ItL;ghh@j{8+KF;H+H zWl$F5)GG$S7X|?6kC)f3rKJ`qqJGKh1W2r<`~Oqm9pGX3jrz0M<<;+3BF4z!L_h&; zNQ6payPer7fQn^nJ-9-aWjr!>poRvs@LMZMQCMhs97TIPW{gOd8M1p*9_J=V=4-<P zY9psyuOL+N0Tv`ck}7Do)mNR)x+O{0e<I$-4uobw;2tOiWTg`#C4hFGKUD;zm)w=s z+XhAhys4y;D!AZUI^x0M@33C}%=UxJUtppdlX+mfy$l5r3Q_t;QmC2xx+J)~61TEg z`|(X+AvYom35Lr7_W^dh$Hs|$C4F$r8L3QnRudrM^ZQv#-b|)Dw4-v)S<aAWjywBr zbwzGAQ#AW{8O5~-K3YQpek!{SF+bU@e0UD)hInx%iF4yC(HUZ>Y)NI!ev#%x_;ddw z+!#<PLpI&!)a9e)?9R`e+_~J4aUHMk15O}09cs)wfeK!6GiEhtA-g=sr4fa27BU{I z_kdf%`I?Ord0@B(rrOWX1lzCDMsh^9Kh0T+njc&W9UR7#69xZ#$ogb0XeKlu<-zXY z38RXsZLmW1eqO(_3ypaj*wxHMcb8+IM#BS&lr46>?lXuRBbTaD(Mmn^>qyL|>KCs1 zh7ro^6>NQR7b9&cnybSYzf(r8h133BV9UE>tG+5|Co{vGBxt;R<6#M?cZ1V)bCq3E ziZ+^67eQ2jK}o8~${_$+@ARg3Vn=o--^)Fh)G^(uEbk#Xg7Ub<A3>5@!70MdSX*eT z$ZLbYq?Z3JX)cdn>r2gnK%w$Qi&AHRxb=wTzrKOXDs)W-J$kq=U-~DpLF%X*>a!|R zvMD>!oa+E#3+to3$u7R*RH&Ht+ss+Y3CFi`%XO>anS_gi>j$xTHc>vq#G8|vdJ=mF z0O=mk_2IB#d2Rpbq_uEtIFAb<w}>SlD1a*4xDDmUF!;B9JFqn8LIhe`-@Ys<K{_Y3 zvVeJ$w3-7*Wz>xU=Y)G%9VeH{lfo!ke1)ODYt+-cp*RM-#HZQ3-e*G;H?U-sy#w_* zJPMJFAals)W@Vf(Ef!hwnf-@PngOc3+CP*NRyOt7ONNUfrf%6nIZY0mf}=b!fE3}* z-N~37<!cY#Oq>hu&39;6ATT4lV(VYtg9CWLVG67tT4Ed{{SRl8A{!=Wvu>ye_b$*; zDHR4^s1zwfGk5GR0F*}mC`s$pZ`tiQCxU10sYQ30I|o<wRU1d;72o(e8L%RUK)6+_ z(o$^nynM<zK@XcZV+w9Sdr>NDLUq*5G)tz-<)=Sz0I<wP$o-NUMgaxBayJZWAWbaC zY=?0Wbh>~_V}o`|0~5D0cY7Y!Q@lWxQ3(UiL^-R968jttBE%9XXeTCHwF#cT)+2y! zV`d5+P|g>nhF!eNgy74-)Px%aCGjBhX#4y!MUeXeaVW5f9Tl^9lTNv=2I#=$a8^#3 z&wpXoV=+S}5&5a1@08Sc>Esz;P9<GG=kRG3?>7OG!QhI!ckqsr9VlYiIhprVp$X!| z{aV#El3V4R^BHFfVbrg`N@ojp^`awkKmr*!m8(jPYD((M^vh`r;G*sPij2K_Q;w;K zs3{NFvtJ)-I+-4Y-&mXUZ2lCn$ZQLh=M@mdhw>M9R2KN216V$44S>9l50dI?a@Q4E z|5JzRORC-mLgQWzaVe<ti#wT6HsoKDu`)i|nf$r=shJR7l8e4RLI?+%8Ph=lMQ#;6 zVnf!$MoJEIhk9nXLZ<cQ)=Hkm>4-bL<i<eAl}p9)*%_b_a*tsRllFn9aHKd$!--`v zGvv=4Jw73Cd9Y1LN)H22ZmA{Wt5Uistfrjr;G~Z-LYqz{hnWUTXu?AE$dB}FfI7)m zh9)Nmr~batw`qj=E)@`X&-blV_oq4t*G_QF6JP|}=mc0^Q&R7UfK|FNd0S(j1+5>p zX1)z!s%%`2@$Wsx`g)K?Z{-C0;|LjCsV}Gz0DXJT3qrPNpd9W8no433O2Lljplu0m zD*YLm{-8MMHn53z`2|DK$Iqu2YHehE$vM(n3(z1PrwoB!>m-i{l2ASLQq55q`#~0A zjGT$IS}&42ZF3sk>-a0F(`j<JC$aJfnA@9`F)3N%NdKU^KXVuhOVA~*X(u2RGk4&r zD;C%u!ZISp2nA4($c*lJAuQ0((3AA(M6Mh^Kiy2BqfZxiw?0B?)__(+#eU1>Rpvsc zAU8B@iDr0nCj-bYkI}CDyr1QyBTj-`kqrv~UTMSma|Gz4L~PJrqyk`<_hUE!zB%iT zXD`@n0JTk37#4{yy!w9q7oZA>u7-7fTFMG=yV8_Sl?&&-!fHke?vCon{;0WKf3(ee z-d(6wQ4)e%PjH*&UBCnDf-yL|d;-6c*hW(}m`&q)H`EL`FYyiuG$}J3QDZf(ILs3F zx933bH=x9(o%JvFm3p6JwZXARU8CJjn#UfLNyJcgf^Y{it9wI}w-$qBMA62ys+uWY zCsnfje7avx4|<qx6g|!-0!sMTY}zNf=F#yth0Upsm1#%!hdUGbMM^?r4f&0F_M(%y z`h|dc^T(E2Vx;mz8Ywo+iOG`>G|Ph$+#&cL-0h!Sn4d=;;F-S=U?z_^SkI@M0O!0K zY1;vaD)x=^ZhSjXUM>~Gp_`PP+=ZDoSQt~3iO|ASTey46u?muOVGkl{1U$~Ze^r~o zz`1c#h{HyQCNTj5O&_)rg52{A_zy4tDN=wwPI-J<_S^SpTtV?-fAaz)n+F;7rdX+m z@0mY2h)C{;x19N<Eh0ZYZl=7>n*&&ZcPl%l7&?`1egRpBUJKg9%_AmAD%C;isqP(b z$j&O#gE;Pco6q6={=$F$e?f9&?z6p-Af}26J3fE4cWht$vN-T-ty{L1Q;5bVRqmUu zDhZ$`i*NMx;XwJJ_%!xz%tsXJDxjCPLa6+Z#_%EC{9K1=6PeRV9!r_(k2EnO9q!J2 z#w2N{sppp^Bj2-z3ftM<6raUzKF0u)XMsz`-kOq`jV{Z?FBpcIVEkSqvoSn{7)V$? z1)kW%W+LAH7xyRs7VADB9#zhkSHQ<AqXI=$^l;fME?uE<<rrYfviW3lj6m7otrUJj zQ#{GPTSrpIcUDZ@)VI(|^+-&WHesL_7<gpBb30JBPKJK4_OyBH>CiVf*BL09T+Jm^ zD<mcq<u+TbBH-z;U*|zdN1udmwM68RC<tpg9>SixxGMy?BQb(L7q*TqU5v-KjM?Uu zsxxW_Tn8LW3`^RrGms{lVS!@$f>bLX$nJ7J^>(Uq@vGO)cGcW9(9eXZ#?az0<y?Fy zG2u|@c|$&mM-_&9Nf_(<N>J6=e%<@A_iZxgafR!!PmdR972(*|Pe8s91Z?eSS6H8W z#5jNLBc%ISq!=O(o81@Qqk-HCmn0|&4^Ey6di}N-6}@x#TQxHpc*$K`1rIp0Vn^WC za=<v7idy=@)_ka=s1<x_^tCCPl}bifJ>pPQoJvmkm2Nd%k9Nv1_Ov9a8^m7W&)_2; ze@3!>20tq+N2K9A_sqAY`@Y=wxE}4x<Jgj0rpr*nWVAgyf8gS_O}J9R+Gb+pZ8T${ ztFJX@uRl=!o}Qa1b=k-~l&8LOBeaDj|C}1<XEorVheOTdsJ0dhA<W=b`ECJYsq%de zH{jc*XihLwb_*OJKYOhFP%bOY%1V^#76VvUcJmzF-5!Vwr9CYLJ)zC?1@25Rx3D4& zV{eXpCv@)Zw`bzW#Z;|y^C}6!Pd0grJ+iHlnz(DcV}s+U5S?>hoBJ?~Y~OoyTVt#x z_a6N4r||m5_V%TQlm}Oy(uezfl16tfY;ZGuWBw~aOg^U)D@hJas%tY%>LoTj366^X zd9|S1iGMP(3iG^iWkv(9Hreo#Qq*w1I0%Mj@*`<XeIq5*3)%AFu~2r@oy&@ijTNX9 z-e%DuHRN)$9T<KKIM}+zQrLG?-~1)z8kqno2_Us})MBuBF-*M|@l@7w<N{=#4y7LA zL?)zNg}jfWd*eRE*a%p_Vs}V%xiSaAK?yQRhK2G>Sk?$|g*41Jm5F`OWxSLxGk%Si z0k6oumJq^FwUy4kNr2}yy|6$k`h9wT9_a~*ii4Tfh>A3JcpC&duC%+z?{ca#^ksFq zm`c~mENq%oOO{-Uwr`F%kVQGQO@xcA{0iJJ<~wT>hkPKjb=^oy>wTT?z)FK!R`Qvu zAvJMcL_ice{dv>w?Yoj!FE7WH*!ODmpWBwK4xWFU&~cQn85pOcrOcdBH!~2Ke_>yP z&MOxS%@%0zG#xNunJUsn`10@+d2c7KL)GG&o$s5wz!xGao?=Azd*Ly?LGdZcM%*f| z1CkrO?|0%e;Hra)4{=x%s8`A<uOOiU6O)IQV^Bhl7;wawVK~Ja0>053x9n0uJVA#{ z^xGM~?IcqxCg*|l%5)7-rLlrZ5I|h3+~gDG-4^EZbIes}C_LkS#-9=sD2WY3RreBp zo8Plqn&*)hMN8`Qw-|Yrb~%Em__&F(Ozwm;0hqREqU)277|>@eYA*2q-t1-dX80TG zwqYU^Nq$g2lU6*z%9x>2Xy$*?LuBU9DU&8ekrp3kPv#v&ie-t|Yj$r`H=+2m*tfm* zJB!DMZ*MCq?bjd4m+aa9h2z9z#ts26_JA;$@#!Y;tjxOa#;HWa2FRsKvS^B4s<wHz zsmLRcp6Lj}=hVf%1_gR_WiW6>5)%uL?)NR*>`BI!-R1Yx5?-%)A9XDX=Fn<pln9ug zkb}I-_TCiJ5Qevpq>Pz~R)@bT3>@0^$oWzHUQ#vdW7S!Bi(+SG;K2(>64CBrh(`!T za%7kP>6{N?=x!_*i6>UX0=Y6NBfhHBp4ERDK&DlG4vRvYupsu(jC_yr**jZQV=8_n zKj^x<c-?@8nqTjoiC#mjpP}ID0@;Vj4a~Gjof<it6oz5PZ&gKbnrE%U0;O2Y**q4* z2R`&(oTTHFzf?m7i<+!IYN(LMH9h!FP{aC~sG?q1$}+Xk7+<`wc@KMcQELSo%dO>B zF*k=@ca;DYOoBr)q=pW?>n<bv{WqIFw_+NV`WClnCxfi`cjNbSq`C9f>6%cuToQnj zhLy?<1R1UZ_6QYstAZf!+r45Gp-EB!Yc;je8<gDM^PhM@+<w15`dE{_MEhN2O_%$K z(6i96luMtIc%w4TPQGVb<Rh#s+o5o<maKBh58JZ=Vxg38Lqyp+-pfCwaPj=rx|i{# z7ByNYZs-cE#FgloBmFibB*Cd9>XUVi@anG<x9{d|o<CU)i8D?~u-KtI1@4#k$*pJ6 zd-Edp^$gZ9+47tHxQM{^6Wp<(RAmW@rIdP+v?RzMaO|{lii4#tJnC=rYz7>2#qBx# zrieEK-V??s8^2Saa761F5>Gq<HaZ%a+KWk=kwAUAE2Mlt?>wOg+jOz=(;(uCpCgN3 zf4lo|-r<+6MGYT;jbJOa?2K{knC|>6f{t|AGISevNhnVhDMTx^z%yl9>aOV{Ezps| zS{Gbahjwc<Um{VF$xO(oo_%a0N6MPN7d1Qj8s(BV5SQ7lBiaXFyl!9p(<qtu;!P~U zuaQfhfVQf=jf#E4#!97*tc{ZQA5OjG#Ok_W&xa`Zit{^Md3jji<kP?OfGdH8T1sEt z*BLkuY7H~U-+$CVtQNp-t8rq@9(*^be}3dv(2S&MB`{ug1uo5wS+1h(;LuW`;>JB* zK`Yqpb50u=>`x|#%4l}9<^gq2tpjxXf*=z~C@1|p7Xr8?XVYpY6MTyVivOm?+-e$M zd<k+H4r_#cY@j*c=*&5$$S!Y>UO5PS3L@#$!N4PeFtk>SD=%1IahkqYMEZQ~mu*ja zH)oTp62i9Qi*$Q`HhMQj+USYJ)zuv}NAyN9!qtuWd=zEqP5QgO)L*WHFUjVFeVedT zGKC-iGOYHp_Tm^gEm~Mfc8xL?xms=Luu<AIR6%Y!;9GAj)@S1G*5mF9j=!FYHr=#t zGJAikUCp2H2~dkWa<kLUO`+vhjen)O`Qk0zF0O_gwqOo{K+cjMOWBpa_2}4ePN9K_ zT&-_{)fL516xpampNzY47&eBW>t}-IuBas9x3X4QWK%nvyB)=+w>g7%<0WmtU!Csn zo|KA3(g<p0WV?3P_YZ33!*2%-cl5QaVLjXtgrmc_Vb8u^ZD*RR#JFO;E3IVrQ#XV6 z!8+%?clDyRQ@}|&-}=GJvz!RK1ZB4*z{+j=zrz?~;+%0D)eR0YA(~q8x5X&ixcNIi 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 P00000NkvXXu0mjf0AlA} literal 0 HcmV?d00001 diff --git a/examples/DDCMS/data/cms_tracker.xml b/examples/DDCMS/data/cms_tracker.xml index c353d197c..66da5a09d 100644 --- a/examples/DDCMS/data/cms_tracker.xml +++ b/examples/DDCMS/data/cms_tracker.xml @@ -1,16 +1,16 @@ <?xml version="1.0"?> <DDDefinition> <debug> + <debug_rotations/> + <debug_materials/> <!-- <debug_shapes/> <debug_volumes/> <debug_constants/> - <debug_rotations/> - <debug_materials/> <debug_includes/> <debug_namespaces/> - <debug_algorithms/> <debug_placements/> + <debug_algorithms/> --> </debug> <open_geometry/> @@ -62,29 +62,46 @@ <vis name="pixbarladderhalf_PixelBarrelCFStripHalf" alpha="1" r="1" g="0.1" b="0.1" showDaughters="true" visible="true"/> <vis name="pixbarladderhalf_PixelBarrelLadderHalf" alpha="0.8" r="0.6" g="0.6" b="0.0" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCable1Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCable2Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCable3Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCable4Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCableBoxFull" alpha="0.4" r="0.4" g="0.2" b="0.2" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelModuleBoxFull" alpha="0.6" r="0.2" g="0.2" b="0.2" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelCFStripFull" alpha="1" r="1" g="0.1" b="0.1" showDaughters="true" visible="true"/> - <vis name="pixbarladderfull_PixelBarrelLadderFull" alpha="0.8" r="0.6" g="0.6" b="0.0" showDaughters="true" visible="true"/> - - <vis name="pixbarlayer0_PixelBarrelLayer0Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> - <vis name="pixbarlayer0_PixelBarrelLayer0CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> - <vis name="pixbarlayer0_PixelBarrelLayer0" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/> - - <vis name="pixbarlayer1_PixelBarrelLayer1Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> - <vis name="pixbarlayer1_PixelBarrelLayer1CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> - <vis name="pixbarlayer1_PixelBarrelLayer1" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/> - - <vis name="pixbarlayer2_PixelBarrelLayer2Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> - <vis name="pixbarlayer2_PixelBarrelLayer2CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> - <vis name="pixbarlayer2_PixelBarrelLayer2" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/> - + <vis name="pixbarladderfull_PixelBarrelCable1Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelCable2Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelCable3Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelCable4Full" alpha="1.0" r="0" g="1" b="1" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelCableBoxFull" alpha="0.4" r="0.4" g="0.2" b="0.2" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelModuleBoxFull" alpha="0.6" r="0.2" g="0.2" b="0.2" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelCFStripFull" alpha="1" r="1" g="0.1" b="0.1" showDaughters="true" visible="true"/> + <vis name="pixbarladderfull_PixelBarrelLadderFull" alpha="0.8" r="0.6" g="0.6" b="0.0" showDaughters="true" visible="true"/> + + <vis name="pixbarlayer0_PixelBarrelLayer0Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> + <vis name="pixbarlayer0_PixelBarrelLayer0CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> + <vis name="pixbarlayer0_PixelBarrelLayer0" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/> + + <vis name="pixbarlayer1_PixelBarrelLayer1Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> + <vis name="pixbarlayer1_PixelBarrelLayer1CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> + <vis name="pixbarlayer1_PixelBarrelLayer1" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/> + + <vis name="pixbarlayer2_PixelBarrelLayer2Coolant" alpha="0.5" r="0" g="0.4" b="0.6" showDaughters="true" visible="false"/> + <vis name="pixbarlayer2_PixelBarrelLayer2CoolTube" alpha="1.0" r="0" g="0.2" b="0.8" showDaughters="true" visible="true"/> + <vis name="pixbarlayer2_PixelBarrelLayer2" alpha="0.5" r="0.6" g="0.6" b="0.6" showDaughters="true" visible="true"/>f + <vis name="solid-light-grey" alpha="0.5" r="0.5" g="0.5" b="0.5" showDaughters="true" visible="true"/> + <vis name="solid-red" alpha="1.0" r="1.0" g="0.0" b="0.0" showDaughters="true" visible="true"/> + <vis name="solid-green" alpha="1.0" r="0.0" g="1.0" b="0.0" showDaughters="true" visible="true"/> + <vis name="solid-blue" alpha="1.0" r="0.0" g="0.0" b="1.0" showDaughters="true" visible="true"/> + <vis name="CMS_Invisible" alpha="1" r="0.0" g="0.0" b="1" showDaughters="true" visible="false"/> + + <vismaterial name="AL" type="solid-light-grey"/> + <vismaterial name="SI" type="solid-red"/> + <vismaterial name="materials_Air" type="CMS_Invisible"/> + <vismaterial name="materials_E_Air" type="CMS_Invisible"/> + <vismaterial name="materials_H_Air" type="CMS_Invisible"/> + <vismaterial name="materials_M_B_Air" type="CMS_Invisible"/> + <vismaterial name="materials_M_F_Air" type="CMS_Invisible"/> + <vismaterial name="materials_T_Air" type="CMS_Invisible"/> + <vismaterial name="materials_V_Air" type="CMS_Invisible"/> + <vismaterial name="trackermaterial_T_Aluminium" type="solid-light-grey"/> + <vismaterial name="tecmaterial_TEC_petalinsert" type="solid-blue"/> </VisSection> + <DisabledAlgo name="track:DDTOBRadCableAlgo"/> <ConstantsSection label="pixfwd" eval="true"> <Constant name="AnchorZ" value="0.*mm"/> <Constant name="ZPixelForward" value="325.*mm"/> @@ -97,15 +114,12 @@ <Include ref="materials.xml"/> <Include ref="trackermaterial.xml"/> <Include ref="tibtidcommonmaterial.xml"/> - <Include ref="pixfwdMaterials.xml"/> <Include ref="vacuum.xml"/> <Include ref="cmsextent.xml"/> <Include ref="cms.xml"/> -<!-- ---> - + <Include ref="pixfwdMaterials.xml"/> <Include ref="pixbarmaterial.xml"/> <Include ref="pixbarladder.xml"/> <Include ref="pixbarladderfull.xml"/> @@ -116,9 +130,6 @@ <Include ref="pixbarlayer2.xml"/> <Include ref="pixbar.xml"/> -<!-- ---> - <Include ref="tecmaterial.xml"/> <Include ref="tecpetpar.xml"/> @@ -183,8 +194,6 @@ <Include ref="tec.xml"/> <Include ref="tecservices.xml"/> -<!-- ---> <Include ref="tibmaterial.xml"/> <Include ref="tibmodpar.xml"/> @@ -223,8 +232,6 @@ <Include ref="tib.xml"/> -<!-- ---> <Include ref="tidmaterial.xml"/> <Include ref="tidmodpar.xml"/> <Include ref="tidringpar.xml"/> @@ -250,18 +257,14 @@ <Include ref="tibtidservices.xml"/> <Include ref="tibtidservicesb.xml"/> <Include ref="tibtidservicesf.xml"/> -<!-- ---> <Include ref="tobmaterial.xml"/> <Include ref="tobmodpar.xml"/> - + <Include ref="tobrodpar.xml"/> <Include ref="tobmodule0.xml"/> <Include ref="tobmodule2.xml"/> <Include ref="tobmodule4.xml"/> - <Include ref="tobrodpar.xml"/> - <Include ref="tobrod0.xml"/> <Include ref="tobrod0c.xml"/> <Include ref="tobrod0h.xml"/> @@ -288,14 +291,14 @@ <Include ref="tobrod5.xml"/> <Include ref="tobrod5h.xml"/> <Include ref="tobrod5l.xml"/> - <Include ref="tob.xml"/> + <Include ref="pixfwdCommon.xml"/> <!-- - <Include ref="pixfwdCommon.xml"/> - <Include ref="pixfwdPanelBase.xml"/> + <Include ref="pixfwdBlade.xml"/> <Include ref="pixfwdPanel.xml"/> + <Include ref="pixfwdPanelBase.xml"/> <Include ref="pixfwdDisk.xml"/> <Include ref="pixfwdCylinder.xml"/> <Include ref="pixfwdNipple.xml"/> @@ -308,27 +311,23 @@ <Include ref="pixfwdPlaq2x5.xml"/> <Include ref="pixfwd.xml"/> - --> + <Include ref="trackerbulkhead.xml"/> + <Include ref="trackertib.xml"/> <Include ref="trackertid.xml"/> <Include ref="trackertec.xml"/> - <Include ref="trackertob.xml"/> - <Include ref="trackerbulkhead.xml"/> + <Include ref="trackerother.xml"/> <Include ref="trackerpixbar.xml"/> + <Include ref="tracker.xml"/> + <Include ref="trackertob.xml"/> </IncludeSection> <PosPartSection label=""> -<!-- - <PosPart copyNumber="1"> - <rParent name="world_volume"/> - <rChild name="tec:TEC"/> - </PosPart> ---> <PosPart copyNumber="2"> <rParent name="world_volume"/> <rChild name="tracker:Tracker"/> diff --git a/examples/DDCMS/data/pixfwdBlade.xml b/examples/DDCMS/data/pixfwdBlade.xml index 6588cc68b..b8b8c0450 100644 --- a/examples/DDCMS/data/pixfwdBlade.xml +++ b/examples/DDCMS/data/pixfwdBlade.xml @@ -45,7 +45,7 @@ --> <!-- Blade geometry parameters: Input from drawings --> - <ConstantsSection label="Input" eval="true"> + <ConstantsSection label="Common" eval="true"> <Constant name="T01" value="0.5*mm"/> <!-- Blade01.gif --> <Constant name="T02" value="3.0*mm"/> diff --git a/examples/DDDB/CMakeLists.txt b/examples/DDDB/CMakeLists.txt index 01c92760a..a805bcb8c 100644 --- a/examples/DDDB/CMakeLists.txt +++ b/examples/DDDB/CMakeLists.txt @@ -31,6 +31,7 @@ if (DD4HEP_USE_XERCESC) ) #---Package installation procedure(s) ----------------------------------------- install ( PROGRAMS scripts/run_dddb.sh DESTINATION bin) + install ( PROGRAMS scripts/display_dddb.sh DESTINATION bin) install ( PROGRAMS scripts/extract_dddb.sh DESTINATION bin) install ( FILES data/DDDB.tar.gz DESTINATION examples/DDDB) #---Testing-------------------------------------------------------------------- diff --git a/examples/DDDB/scripts/display_dddb.sh b/examples/DDDB/scripts/display_dddb.sh new file mode 100755 index 000000000..fdb7390ea --- /dev/null +++ b/examples/DDDB/scripts/display_dddb.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#========================================================================== +# AIDA Detector description implementation +#-------------------------------------------------------------------------- +# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) +# All rights reserved. +# +# For the licensing terms see $DD4hepINSTALL/LICENSE. +# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. +# +#========================================================================== +# +# @author M.Frank +# +#========================================================================== +if test -z "${DDDB_DIR}"; then + target=/tmp; + if test -n "$USER"; then + target=/tmp/$USER; + fi; + DDDB_DIR=${target}/DDDB; +fi; +export DDDB_DIR; +. ${DD4hepINSTALL}/bin/run_test_DDDB.sh \ + ${DD4hepINSTALL}/bin/run_dddb.sh \ + -config DD4hep_ConditionsManagerInstaller \ + -visualize \ + -attr file:${DDDB_DIR}/Visattrs.xml $* diff --git a/examples/DDDB/scripts/run_dddb.sh b/examples/DDDB/scripts/run_dddb.sh index 9911c2e16..1ed14f98f 100755 --- a/examples/DDDB/scripts/run_dddb.sh +++ b/examples/DDDB/scripts/run_dddb.sh @@ -27,6 +27,7 @@ if test -z "${DDDB_DIR}"; then fi; DDDB_DIR=${target}/DDDB; fi; +export DDDB_DIR; loader="-loader DDDB_FileReader"; params="-params file:${DDDB_DIR}/Parameters.xml"; input="-input file:${DDDB_DIR}/DDDB/lhcb.xml"; -- GitLab