diff --git a/Control/AthenaMonitoring/python/AthenaMonitoringCfg.py b/Control/AthenaMonitoring/python/AthenaMonitoringCfg.py index 847c4c80b85ded16ce28b84ceb6c494f975c87a8..048cc1561fcb0876dc94bf5c6d0d58cc77de9eef 100644 --- a/Control/AthenaMonitoring/python/AthenaMonitoringCfg.py +++ b/Control/AthenaMonitoring/python/AthenaMonitoringCfg.py @@ -79,6 +79,11 @@ def AthenaMonitoringCfg(flags): info('Set up Jet monitoring') from JetMonitoring.JetMonitoringStandard import standardJetMonitoring result.merge(standardJetMonitoring(flags)) + #Need to create links between global FE, created in jet finding, and other objects + #MET monitoring will need these in some workflows (but not in tier0ESD) + if flags.DQ.Environment != 'tier0ESD': + from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg + result.merge(PFGlobalFlowElementLinkingCfg(flags)) if flags.DQ.Steering.doJetInputsMon: info('Set up Jet Inputs monitoring') @@ -158,4 +163,4 @@ def AthenaMonitoringPostprocessingCfg(flags): ppa.FileKey = ((flags.DQ.FileKey + '/') if not flags.DQ.FileKey.endswith('/') else flags.DQ.FileKey) result.addEventAlgo(ppa, "AthEndSeq") - return result \ No newline at end of file + return result diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/CMakeLists.txt b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/CMakeLists.txt index b6d907a977252db20baacd60ac378cbad4815007..a79dc0c5395e61b72bd0e15cb96be0afcf72fb21 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/CMakeLists.txt +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/CMakeLists.txt @@ -1,24 +1,22 @@ -################################################################################ -# Package: MdtCalibT0 -################################################################################ +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration # Declare the package name: atlas_subdir( MdtCalibT0 ) # External dependencies: -find_package( ROOT COMPONENTS Graf Minuit Core Tree MathCore Hist RIO pthread MathMore Minuit2 Matrix Physics HistPainter Rint RooFitCore RooFit Graf3d Gpad Html Postscript Gui GX11TTF GX11 ) +find_package( Boost ) +find_package( ROOT COMPONENTS Core Graf Hist MathCore MathMore Minuit RIO Tree ) # Component(s) in the package: atlas_add_library( MdtCalibT0 src/*.cxx PUBLIC_HEADERS MdtCalibT0 INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} MdtCalibData MuonCalibStandAloneBaseLib - PRIVATE_LINK_LIBRARIES MuonCalibEventBase MuonCalibIdentifier ) + PRIVATE_INCLUDE_DIRS ${Boost_INCLUDE_DIRS} + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaKernel GaudiKernel MdtCalibData MdtCalibInterfacesLib MuonCalibStandAloneBaseLib + PRIVATE_LINK_LIBRARIES ${Boost_LIBRARIES} CxxUtils MuonCalibEventBase MuonCalibIdentifier MuonCalibStl ) atlas_add_dictionary( MdtCalibT0Dict MdtCalibT0/ReflexHeaders.h MdtCalibT0/selection.xml - INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} MdtCalibData MuonCalibStandAloneBaseLib MuonCalibEventBase MuonCalibIdentifier MdtCalibT0 ) - + LINK_LIBRARIES MdtCalibT0 ) diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/ATLAS_CHECK_THREAD_SAFETY b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..67c86329e94baf28de5f30aa011e777fd8a0aa5d --- /dev/null +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0 diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/HistogramId.h b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/HistogramId.h index 23d9ecb217e8e1e244d386051cfaa1cdd83092d6..69d33f46f11735f55818936661ff746504382855 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/HistogramId.h +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/MdtCalibT0/HistogramId.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #ifndef HistogramId_H @@ -46,13 +46,13 @@ namespace MuonCalib { /** get numberic id */ inline int getIdInt() const { return m_id.second; } /** get ascii histogram name */ - inline const std::string &HistogramName() const { return s_histogram_names[m_id]; } + inline const std::string &HistogramName() const { return m_histogram_name; } private: //! integer identity - value depends on the sort_by argument of the Initialize-Function std::pair<int, int> m_id; - //! ascii histogram names - static std::map<std::pair<int, int>, std::string> s_histogram_names; + //! ascii histogram name + std::string m_histogram_name; }; } // namespace MuonCalib diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/HistogramId.cxx b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/HistogramId.cxx index c130d8759b02ebe7707c7cf3221cc386a63323ea..eada9346ba135a058bbccc670e403262beb2f428 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/HistogramId.cxx +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/HistogramId.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "MdtCalibT0/HistogramId.h" @@ -15,8 +15,6 @@ namespace MuonCalib { - std::map<std::pair<int, int>, std::string> HistogramId ::s_histogram_names; - void HistogramId::Initialize(const MuonFixedId &id, int sort_by) { m_id.first = sort_by; static const unsigned int kStationNameShift = 24; @@ -64,34 +62,32 @@ namespace MuonCalib { } } // create histogram name - if (s_histogram_names[m_id] == "") { - std::ostringstream os; - if (m_id.second == -999999) { - os << "Summary"; - } else { - // chamber name - os << id.stationNumberToFixedStationString(id.stationName()) << "_eta"; - if (id.eta() < 0) - os << "C"; - else - os << "A"; - os << std::abs(id.eta()) << "_phi" << id.phi(); - // multilayer name - if (sort_by != CHAMBER) os << "_ml" << id.mdtMultilayer(); - // layer name - if (sort_by != CHAMBER && sort_by != MULTILAYER && sort_by != MEZZ_CARD) os << "_ly" << id.mdtTubeLayer(); - // tube name - if (sort_by == TUBE) os << "_tb" << id.mdtTube(); - // mezz-id - if (sort_by == MEZZ_CARD) { os << "_mez" << (id.mdtMezzanine() % 100); } - // numeric_id - os << "_num" << m_id.second << "_" << sort_by; - } - // store - s_histogram_names[m_id] = os.str(); - MsgStream log(Athena::getMessageSvc(), "HistogramId"); - log << MSG::INFO << sort_by << " " << s_histogram_names[m_id] << endmsg; + std::ostringstream os; + if (m_id.second == -999999) { + os << "Summary"; + } else { + // chamber name + os << id.stationNumberToFixedStationString(id.stationName()) << "_eta"; + if (id.eta() < 0) + os << "C"; + else + os << "A"; + os << std::abs(id.eta()) << "_phi" << id.phi(); + // multilayer name + if (sort_by != CHAMBER) os << "_ml" << id.mdtMultilayer(); + // layer name + if (sort_by != CHAMBER && sort_by != MULTILAYER && sort_by != MEZZ_CARD) os << "_ly" << id.mdtTubeLayer(); + // tube name + if (sort_by == TUBE) os << "_tb" << id.mdtTube(); + // mezz-id + if (sort_by == MEZZ_CARD) { os << "_mez" << (id.mdtMezzanine() % 100); } + // numeric_id + os << "_num" << m_id.second << "_" << sort_by; } + // store + m_histogram_name = os.str(); + MsgStream log(Athena::getMessageSvc(), "HistogramId"); + log << MSG::INFO << sort_by << " " << m_histogram_name << endmsg; } } // namespace MuonCalib diff --git a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/T0MTHistos.cxx b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/T0MTHistos.cxx index e59dbfec26b37ce4d15cf5c9d1c1329261270a16..c5651ed657d560439c27fd3d12298f31f761bd9a 100644 --- a/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/T0MTHistos.cxx +++ b/MuonSpectrometer/MuonCalib/MdtCalib/MdtCalibT0/src/T0MTHistos.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "MdtCalibT0/T0MTHistos.h" @@ -7,16 +7,29 @@ #include <cmath> #include "AthenaKernel/getMessageSvc.h" +#include "CxxUtils/checker_macros.h" #include "GaudiKernel/MsgStream.h" #include "MdtCalibT0/MTT0PatternRecognition.h" #include "MdtCalibT0/MTTmaxPatternRecognition.h" #include "TDirectory.h" #include "TLine.h" -#include "TRandom.h" +#include "TRandom3.h" #include "list" +#include "boost/thread/tss.hpp" namespace MuonCalib { + TRandom3* getTLSRandomGen() + { + static boost::thread_specific_ptr<TRandom3> rnd ATLAS_THREAD_SAFE; + TRandom3* random = rnd.get(); + if (!random) { + random = new TRandom3(); + rnd.reset(random); + } + return random; + } + /** The fermi function to be fitted at the rising edge of the spectrum */ inline Double_t mt_t0_fermi(Double_t *x, Double_t *par) { // more convenient parameters @@ -293,8 +306,9 @@ namespace MuonCalib { snprintf(scramhistname, 100, "%s_scram", m_time->GetName()); std::unique_ptr<TH1F> scramhist = std::make_unique<TH1F>(scramhistname, "scrambled histogram", m_time->GetSize() - 2, m_time->GetXaxis()->GetXmin(), m_time->GetXaxis()->GetXmax()); + for (int binnr = 0; binnr < m_time->GetSize(); binnr++) { - scramhist->SetBinContent(binnr, m_time->GetBinContent(binnr) + gRandom->Gaus(0, m_time->GetBinError(binnr))); + scramhist->SetBinContent(binnr, m_time->GetBinContent(binnr) + getTLSRandomGen()->Gaus(0, m_time->GetBinError(binnr))); scramhist->SetBinError(binnr, m_time->GetBinError(binnr) * 1.41421356); if (scramhist->GetBinContent(binnr) < 0) scramhist->SetBinContent(binnr, 0); } diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommon.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommon.py index 7bff6588af607c6e2f2d4a0a08d4a84e90b4d20e..d690ab3165294b1dd9f53303bd76bc14105d4dad 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommon.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommon.py @@ -76,6 +76,16 @@ jetList = [AntiKt4EMTopo_deriv, addDAODJets(jetList,DerivationFrameworkJob) +#We also need to build links between the newly created jet constituents (GlobalFE) +#and electrons,photons,muons and taus +from AthenaConfiguration.AllConfigFlags import ConfigFlags +from AthenaConfiguration.ComponentAccumulator import CAtoGlobalWrapper +from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg +CAtoGlobalWrapper(PFGlobalFlowElementLinkingCfg,ConfigFlags) +#AOD do not have calorimeter cells for CaloCalTopoCluster, so we have to use +#this special setting for the muon-FE links. +DerivationFrameworkJob.PFMuonGlobalFlowElementAssoc.m_UseMuonTopoClusters=True + # Special rho definition for PFlow jets addSidebandEventShape(sequence=DerivationFrameworkJob) # Event cleaning flags diff --git a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonConfig.py b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonConfig.py index 65c157429fa288474a55a39474468c9b79e57079..abf4fad44e378f6afbaeea5432c6d872fa9545f1 100644 --- a/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonConfig.py +++ b/PhysicsAnalysis/DerivationFramework/DerivationFrameworkPhys/python/PhysCommonConfig.py @@ -70,6 +70,13 @@ def PhysCommonAugmentationsCfg(ConfigFlags,**kwargs): from DerivationFrameworkTau.TauCommonConfig import (AddDiTauLowPtCfg, AddTauWPDecorationCfg, AddMuonRemovalTauAODReRecoAlgCfg) from DerivationFrameworkJetEtMiss.METCommonConfig import METCommonCfg acc.merge(JetCommonCfg(ConfigFlags)) + #We also need to build links between the newly created jet constituents (GlobalFE) + #and electrons,photons,muons and taus + from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg + acc.merge(PFGlobalFlowElementLinkingCfg(ConfigFlags)) + #AOD do not have calorimeter cells for CaloCalTopoCluster, so we have to use + #this special setting for the muon-FE links. + acc.getEventAlgo("PFMuonGlobalFlowElementAssoc").m_UseMuonTopoClusters=True acc.merge(AddDiTauLowPtCfg(ConfigFlags, prefix = 'PhysCommon')) acc.merge(AddMuonRemovalTauAODReRecoAlgCfg(ConfigFlags, prefix = 'PhysCommon')) acc.merge(AddTauWPDecorationCfg(ConfigFlags, prefix = 'PhysCommon', evetoFixTag="v1")) diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h index da0a26d0adddd88dc348feaf30836d568c8e006b..959a642a4dbc568672bf2513ef06749e568cf0b9 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagAugmenterTool.h @@ -32,6 +32,7 @@ namespace FlavorTagDiscriminants { std::string m_flipTagConfig; std::string m_trackAssociator; std::unique_ptr<BTagJetAugmenter> m_aug; //! + bool m_useIpxd; }; } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h index 6556baccdd57bd14053ba04f6ce5edc83ed08321..69ae17cc9d96c40b848c6c5a26f9fd29f0d7dd58 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/BTagJetAugmenter.h @@ -16,8 +16,11 @@ class BTagJetAugmenter { public: typedef FlavorTagDiscriminants::FlipTagConfig FlipTagConfig; - BTagJetAugmenter(const std::string& associator = "BTagTrackToJetAssociator", - FlipTagConfig flip = FlipTagConfig::STANDARD); + + BTagJetAugmenter(const std::string associator = "BTagTrackToJetAssociator", + FlipTagConfig flip = FlipTagConfig::STANDARD, + bool useIpxd = false); + ~BTagJetAugmenter(); BTagJetAugmenter(BTagJetAugmenter&&); void augmentJfDr(const xAOD::BTagging &btag) const; @@ -101,6 +104,7 @@ private: AE::Decorator<float> m_avg_trk_flightDirRelEta; FlipTagConfig m_flipConfig; + bool m_useIpxd; }; diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx index d56c314da4e4a854412f4ed77bc20711cf7a6b00..4d20198818577fed11c691b45f3a54f6a37dee47 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagAugmenterTool.cxx @@ -10,17 +10,20 @@ namespace FlavorTagDiscriminants { BTagAugmenterTool::BTagAugmenterTool(const std::string& name): asg::AsgTool(name), m_flipTagConfig("STANDARD"), - m_aug(nullptr) + m_aug(nullptr), + m_useIpxd(false) { declareProperty("flipTagConfig", m_flipTagConfig); declareProperty("trackAssociator", m_trackAssociator); + declareProperty("useIpxd", m_useIpxd); } BTagAugmenterTool::~BTagAugmenterTool() {} StatusCode BTagAugmenterTool::initialize() { m_aug.reset( new BTagJetAugmenter(m_trackAssociator, - flipTagConfigFromString(m_flipTagConfig))); + flipTagConfigFromString(m_flipTagConfig), + m_useIpxd)); return StatusCode::SUCCESS; } diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx index dba33e9fff664e98636a5c5551de3eb66bdc9f4f..2f760145645cef9024a10acb942b94b5a49f9ac6 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/Root/BTagJetAugmenter.cxx @@ -56,7 +56,10 @@ namespace { } -BTagJetAugmenter::BTagJetAugmenter(const std::string& associator, FlavorTagDiscriminants::FlipTagConfig f): + +BTagJetAugmenter::BTagJetAugmenter(const std::string associator, + FlavorTagDiscriminants::FlipTagConfig f, + bool useIpxd): m_jetLink("jetLink"), m_pt_uncalib("pt_btagJes"), m_eta_uncalib("eta_btagJes"), @@ -107,7 +110,8 @@ BTagJetAugmenter::BTagJetAugmenter(const std::string& associator, FlavorTagDiscr m_min_trk_flightDirRelEta(jfSvNew(f) + "_minimumAllJetTrackRelativeEta"), m_max_trk_flightDirRelEta(jfSvNew(f) + "_maximumAllJetTrackRelativeEta"), m_avg_trk_flightDirRelEta(jfSvNew(f) + "_averageAllJetTrackRelativeEta"), - m_flipConfig(f) + m_flipConfig(f), + m_useIpxd(useIpxd) { } @@ -232,21 +236,23 @@ void BTagJetAugmenter::augmentBtagJes(const xAOD::BTagging &btag, void BTagJetAugmenter::augment(const xAOD::BTagging &btag) const { - if (m_ip2d_weightBOfTracks(btag).size() > 0) { - m_ip2d_isDefaults(btag) = 0; - } else { - m_ip2d_isDefaults(btag) = 1; - } - m_ip2d_nTrks(btag) = m_ip2d_weightBOfTracks(btag).size(); + if (m_useIpxd) { + if (m_ip2d_weightBOfTracks(btag).size() > 0) { + m_ip2d_isDefaults(btag) = 0; + } else { + m_ip2d_isDefaults(btag) = 1; + } + m_ip2d_nTrks(btag) = m_ip2d_weightBOfTracks(btag).size(); - if (m_ip3d_weightBOfTracks(btag).size() > 0) { - m_ip3d_isDefaults(btag) = 0; - } else { - m_ip3d_isDefaults(btag) = 1; - } + if (m_ip3d_weightBOfTracks(btag).size() > 0) { + m_ip3d_isDefaults(btag) = 0; + } else { + m_ip3d_isDefaults(btag) = 1; + } - m_ip3d_nTrks(btag) = m_ip3d_weightBOfTracks(btag).size(); - augmentIpRatios(btag); + m_ip3d_nTrks(btag) = m_ip3d_weightBOfTracks(btag).size(); + augmentIpRatios(btag); + } m_jf_isDefaults(btag) = jfIsDefaults(btag); augmentJfDr(btag); diff --git a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/python/BTagJetAugmenterAlgConfig.py b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/python/BTagJetAugmenterAlgConfig.py index 0e79cd2de42dab0617b38ae0e731b07f2d229b69..e8132997b0eb8f451823f42dbbfa678843689d34 100644 --- a/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/python/BTagJetAugmenterAlgConfig.py +++ b/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/python/BTagJetAugmenterAlgConfig.py @@ -9,10 +9,13 @@ def BTagJetAugmenterAlgCfg(ConfigFlags, BTagCollection, Associator, TrackCollec flip_config = 'FLIP_SIGN' if doFlipTagger else 'STANDARD' name+=("_"+flip_config) + useIpxd = bool({'IP3D','IP2D'} & set(ConfigFlags.BTagging.taggerList)) + btagAug = CompFactory.FlavorTagDiscriminants.BTagAugmenterTool( name=name, flipTagConfig=flip_config, trackAssociator=Associator, + useIpxd=useIpxd, ) decorAlg = CompFactory.FlavorTagDiscriminants.BTagDecoratorAlg( diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/python/SV1TagConfig.py b/PhysicsAnalysis/JetTagging/JetTagTools/python/SV1TagConfig.py index 2809b80c4f5f497242657ecd537eca2cfd92787d..09180d52180a0b16a872a855c2f65c19aed96c9e 100644 --- a/PhysicsAnalysis/JetTagging/JetTagTools/python/SV1TagConfig.py +++ b/PhysicsAnalysis/JetTagging/JetTagTools/python/SV1TagConfig.py @@ -27,19 +27,25 @@ def SV1TagCfg( flags, name = 'SV1Tag', scheme = '', useBTagFlagsDefaults = True, options['xAODBaseName'] = 'SV1Flip' else: options['xAODBaseName'] = 'SV1' - if useBTagFlagsDefaults: + + if flags.BTagging.SaveSV1Probabilities: likelihood = acc.popToolsAndMerge(NewLikelihoodToolCfg(flags, 'SV1NewLikelihoodTool', 'SV1', scheme)) - defaults = { 'Runmodus' : flags.BTagging.RunModus, - 'referenceType' : flags.BTagging.ReferenceType, - 'jetPtMinRef' : flags.BTagging.JetPtMinRef, - 'SaveProbabilities' : flags.BTagging.SaveSV1Probabilities, - 'SVAlgType' : 'SV1', - 'jetCollectionList' : [], #used only in reference mode - 'SecVxFinderName' : 'SV1', - 'UseCHypo' : True, - 'LikelihoodTool' : likelihood } - for option in defaults: - options.setdefault(option, defaults[option]) + else: + likelihood = None + + defaults = { + 'Runmodus' : flags.BTagging.RunModus, + 'referenceType' : flags.BTagging.ReferenceType, + 'jetPtMinRef' : flags.BTagging.JetPtMinRef, + 'SaveProbabilities' : flags.BTagging.SaveSV1Probabilities, + 'SVAlgType' : 'SV1', + 'jetCollectionList' : [], #used only in reference mode + 'SecVxFinderName' : 'SV1', + 'UseCHypo' : True, + 'LikelihoodTool' : likelihood + } + for option in defaults: + options.setdefault(option, defaults[option]) acc.setPrivateTools(CompFactory.Analysis.SVTag(**options)) return acc diff --git a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx index 5c62f13ab15c020b0c69a2eea42f9a19d92f2680..a7b4e077680c410925c2a863ecf3cc10ac4b0a0f 100644 --- a/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx +++ b/PhysicsAnalysis/JetTagging/JetTagTools/src/SVTag.cxx @@ -22,7 +22,7 @@ #include <string> #include "GeoPrimitives/GeoPrimitivesHelpers.h" - + namespace Analysis { @@ -78,9 +78,9 @@ namespace Analysis m_histoHelper = new HistoHelperRoot(myHistoSvc); m_histoHelper->setCheckOverflows(m_checkOverflows); } else ATH_MSG_ERROR("#BTAG#" << name() << ": HistoSvc could NOT bo loaded."); - + /** configure likelihood: */ - if( m_runModus == "analysis" && m_SVmode != "SV0" ) { + if( m_runModus == "analysis" && m_SVmode != "SV0" && m_save_probabilities) { if ( m_likelihoodTool.retrieve().isFailure() ) { ATH_MSG_FATAL("#BTAG# Failed to retrieve tool " << m_likelihoodTool); return StatusCode::FAILURE; @@ -98,40 +98,40 @@ namespace Analysis if (m_runModus=="reference" && m_SVmode!="SV0") { // // Book the histos - // + // ATH_MSG_VERBOSE("#BTAG# Booking histos..."); std::vector<double> xb; double xbi[10] = {1., 2., 3., 4., 5., 6., 8., 10., 20., 50.}; for(uint ijc=0;ijc<m_jetCollectionList.size();ijc++) { - - for(uint ih=0;ih<m_hypotheses.size();ih++) { - // SV1 - if (m_SVmode == "SV1") { - std::string hDir = "/RefFile/SV1/"+m_jetCollectionList[ijc]+"/"+m_hypotheses[ih]+"/"; - m_histoHelper->bookHisto(hDir+"N2T", "Number of Good Two Track Vertices",9,xbi); - m_histoHelper->bookHisto(hDir+"N2TEffSV1", "Number of Good Two Track Vertices",9,xbi); - m_histoHelper->bookHisto(hDir+"N2TNormSV1", "Number of Good Two Track Vertices",30,0.,30.); - m_histoHelper->bookHisto(hDir+"BidimME", "(E fraction)**0.7 vs Mass/(Mass+1)" ,50,0.218261406,1.,50,0.,1.); - m_histoHelper->bookHisto(hDir+"DRJPVSV", "DeltaR between jet axis and (PV,SV) axis",100,0.,0.5); - } else if (m_SVmode == "SV2") { - std::string hDir = "/RefFile/SV2/"+m_jetCollectionList[ijc]+"/"+m_hypotheses[ih]+"/"; - // SV2 - m_histoHelper->bookHisto(hDir+"N2TEffSV2", "Number of Good Two Track Vertices",9,xbi); - m_histoHelper->bookHisto(hDir+"N2TNormSV2", "Number of Good Two Track Vertices",30,0.,30.); + + for(uint ih=0;ih<m_hypotheses.size();ih++) { + // SV1 + if (m_SVmode == "SV1") { + std::string hDir = "/RefFile/SV1/"+m_jetCollectionList[ijc]+"/"+m_hypotheses[ih]+"/"; + m_histoHelper->bookHisto(hDir+"N2T", "Number of Good Two Track Vertices",9,xbi); + m_histoHelper->bookHisto(hDir+"N2TEffSV1", "Number of Good Two Track Vertices",9,xbi); + m_histoHelper->bookHisto(hDir+"N2TNormSV1", "Number of Good Two Track Vertices",30,0.,30.); + m_histoHelper->bookHisto(hDir+"BidimME", "(E fraction)**0.7 vs Mass/(Mass+1)" ,50,0.218261406,1.,50,0.,1.); + m_histoHelper->bookHisto(hDir+"DRJPVSV", "DeltaR between jet axis and (PV,SV) axis",100,0.,0.5); + } else if (m_SVmode == "SV2") { + std::string hDir = "/RefFile/SV2/"+m_jetCollectionList[ijc]+"/"+m_hypotheses[ih]+"/"; + // SV2 + m_histoHelper->bookHisto(hDir+"N2TEffSV2", "Number of Good Two Track Vertices",9,xbi); + m_histoHelper->bookHisto(hDir+"N2TNormSV2", "Number of Good Two Track Vertices",30,0.,30.); if(m_usePtSV2)m_histoHelper->bookHisto(hDir+"TridimMENPt","ln(Pt) vs (E fraction)**0.7 vs Mass/(Mass+1)",20,0.,1.,20,0.,1.,6,0.,4.8); else m_histoHelper->bookHisto(hDir+"TridimMEN2T"," ln(N) vs (E fraction)**0.7 vs Mass/(Mass+1)",20,0.,1.,20,0.,1.,7,0.,3.8); - if(ih==0) { - // Control with SV2 - hDir = "/RefFile/SV2/"+m_jetCollectionList[ijc]+"/controlSV/"; - m_histoHelper->bookHisto(hDir+"eta","eta",60,-3.,3.); - m_histoHelper->bookHisto(hDir+"phi","phi",64,-3.2,3.2); - m_histoHelper->bookHisto(hDir+"pt","pt",50,0.,300.); - } - } - } + if(ih==0) { + // Control with SV2 + hDir = "/RefFile/SV2/"+m_jetCollectionList[ijc]+"/controlSV/"; + m_histoHelper->bookHisto(hDir+"eta","eta",60,-3.,3.); + m_histoHelper->bookHisto(hDir+"phi","phi",64,-3.2,3.2); + m_histoHelper->bookHisto(hDir+"pt","pt",50,0.,300.); + } + } + } } m_histoHelper->print(); - } + } // Check if this instance of tagger is a flipped one: std::string iname( this->name().substr(8) ); @@ -141,15 +141,15 @@ namespace Analysis ATH_MSG_INFO("#BTAG# This instance of tagger has a flipped configuration. DRJPVSV computation will be adjusted."); } - //Conversion to GeV - m_c_mom = 1000.; + //Conversion to GeV + m_c_mom = 1000.; // m_expos = 0.7; - - m_nbjet = 0; + + m_nbjet = 0; m_ncjet = 0; m_nljet = 0; - return StatusCode::SUCCESS; + return StatusCode::SUCCESS; } @@ -157,8 +157,8 @@ namespace Analysis { if( m_runModus == "reference" ) { ATH_MSG_INFO("#BTAG# Number of jets used for calibration for reference " - << m_refType << " : #b= " << m_nbjet << " #light= " << m_nljet << " #charm= " << m_ncjet - ); + << m_refType << " : #b= " << m_nbjet << " #light= " << m_nljet << " #charm= " << m_ncjet + ); } return StatusCode::SUCCESS; } @@ -177,19 +177,19 @@ namespace Analysis /* The jet */ double jeteta = jetToTag.eta(), jetphi = jetToTag.phi(), jetpt = jetToTag.pt(); ATH_MSG_VERBOSE("#BTAG# Jet properties : eta = " << jeteta - << " phi = " << jetphi << " pT = " <<jetpt/m_c_mom); + << " phi = " << jetphi << " pT = " <<jetpt/m_c_mom); // Fill control histograms if (m_runModus=="reference" && m_SVmode == "SV2") { if (fabs(jeteta) <= 2.5) { - m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/eta",(double)jeteta); - m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/phi",(double)jetphi); - m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/pt",(double)jetpt/m_c_mom); + m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/eta",(double)jeteta); + m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/phi",(double)jetphi); + m_histoHelper->fillHisto("/RefFile/SV2/"+author+"/controlSV/pt",(double)jetpt/m_c_mom); } } // - // Get the SV info - // + // Get the SV info + // float ambtot = -1., xratio = -1., distnrm = 0., drJPVSV = 0., Lxy = -100., L3d = -100.; int NSVPair = -1; float distnrmCorr=0.; @@ -199,8 +199,8 @@ namespace Analysis std::vector< ElementLink< xAOD::VertexContainer > > myVertices; // don't check the following status BTag.variable<std::vector<ElementLink<xAOD::VertexContainer> > >(m_secVxFinderName, "vertices", myVertices); - // BTag.auxdata<std::vector<ElementLink<xAOD::VertexContainer> > >(m_secVxFinderName+"_vertices"); - + // BTag.auxdata<std::vector<ElementLink<xAOD::VertexContainer> > >(m_secVxFinderName+"_vertices"); + if (myVertices.size()>0) { status &= BTag.variable<float>(m_secVxFinderName, "masssvx", ambtot);// mass in MeV @@ -211,66 +211,66 @@ namespace Analysis if (!status) { ATH_MSG_WARNING("Error retrieving variables for SV finder name " << m_secVxFinderName << ", result will be incorrect!"); } - + // DR between Jet axis and PV-SV axis // For the time being computed only for Single Vertex... if (myVertices[0].isValid()) { - // if (myVertices[0]!=0) { - const xAOD::Vertex* firstVertex = *(myVertices[0]); - - //FIXME ugly hack to get a Amg::Vector3D out of a CLHEP::HepLorentzVector - Amg::Vector3D jetDir(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz()); - const Amg::Vector3D PVposition = priVtx.position(); - const Amg::Vector3D position = firstVertex->position(); - Amg::Vector3D PvSvDir( position.x() - PVposition.x(), - position.y() - PVposition.y(), - position.z() - PVposition.z() ); - double drJPVSV_1 = Amg::deltaR(jetDir,PvSvDir); - drJPVSV = drJPVSV_1; - // for flipped taggers, use -jet direction: - double drJPVSV_2 = Amg::deltaR(-jetDir, PvSvDir); // for negative tags - if ( m_isFlipped ) drJPVSV = drJPVSV_2; // for negative tags - ATH_MSG_VERBOSE("#BTAG# DRJPVSV regular="<<drJPVSV_1<<" flipped="<<drJPVSV_2<<" chosen="<<drJPVSV); - - Lxy=sqrt(pow(PvSvDir(0,0),2)+pow(PvSvDir(1,0),2)); - L3d=sqrt(pow(PvSvDir(0,0),2)+pow(PvSvDir(1,0),2)+pow(PvSvDir(2,0),2)); + // if (myVertices[0]!=0) { + const xAOD::Vertex* firstVertex = *(myVertices[0]); + + //FIXME ugly hack to get a Amg::Vector3D out of a CLHEP::HepLorentzVector + Amg::Vector3D jetDir(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz()); + const Amg::Vector3D PVposition = priVtx.position(); + const Amg::Vector3D position = firstVertex->position(); + Amg::Vector3D PvSvDir( position.x() - PVposition.x(), + position.y() - PVposition.y(), + position.z() - PVposition.z() ); + double drJPVSV_1 = Amg::deltaR(jetDir,PvSvDir); + drJPVSV = drJPVSV_1; + // for flipped taggers, use -jet direction: + double drJPVSV_2 = Amg::deltaR(-jetDir, PvSvDir); // for negative tags + if ( m_isFlipped ) drJPVSV = drJPVSV_2; // for negative tags + ATH_MSG_VERBOSE("#BTAG# DRJPVSV regular="<<drJPVSV_1<<" flipped="<<drJPVSV_2<<" chosen="<<drJPVSV); + + Lxy=sqrt(pow(PvSvDir(0,0),2)+pow(PvSvDir(1,0),2)); + L3d=sqrt(pow(PvSvDir(0,0),2)+pow(PvSvDir(1,0),2)+pow(PvSvDir(2,0),2)); }else{ - ATH_MSG_VERBOSE("#BTAG# No secondary vertex."); + ATH_MSG_VERBOSE("#BTAG# No secondary vertex."); } - + std::vector<const xAOD::Vertex*> vecVertices; const std::vector<ElementLink<xAOD::VertexContainer> >::const_iterator verticesEnd = myVertices.end(); for (std::vector<ElementLink<xAOD::VertexContainer> >::const_iterator verticesIter = myVertices.begin(); - verticesIter != verticesEnd; ++verticesIter) { - if (!verticesIter->isValid()) { - ATH_MSG_WARNING("#BTAG# Secondary vertex from InDetVKalVxInJetFinder has zero pointer. Skipping... "); - continue; - } - vecVertices.push_back(**verticesIter); + verticesIter != verticesEnd; ++verticesIter) { + if (!verticesIter->isValid()) { + ATH_MSG_WARNING("#BTAG# Secondary vertex from InDetVKalVxInJetFinder has zero pointer. Skipping... "); + continue; + } + vecVertices.push_back(**verticesIter); } - + if (myVertices[0].isValid()) { - const xAOD::Vertex* myVert = *myVertices[0]; + const xAOD::Vertex* myVert = *myVertices[0]; distnrm=get3DSignificance(priVtx, vecVertices, Amg::Vector3D(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz())); - ATH_MSG_VERBOSE("#BTAG# SVX x = " << myVert->position().x() << " y = " << myVert->position().y() << " z = " << myVert->position().z()); + ATH_MSG_VERBOSE("#BTAG# SVX x = " << myVert->position().x() << " y = " << myVert->position().y() << " z = " << myVert->position().z()); distnrmCorr=get3DSignificanceCorr(priVtx, vecVertices, - Amg::Vector3D(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz())); + Amg::Vector3D(jetToTag.p4().Px(),jetToTag.p4().Py(),jetToTag.p4().Pz())); } else { - ATH_MSG_VERBOSE("#BTAG# No vertex. Cannot calculate normalized distance."); - distnrm=0.; + ATH_MSG_VERBOSE("#BTAG# No vertex. Cannot calculate normalized distance."); + distnrm=0.; } - + ATH_MSG_VERBOSE("#BTAG# The SVX prop. sign3d: " << distnrm); ATH_MSG_VERBOSE("#BTAG# Svx Mass = "<< ambtot << " Svx E frac = " << xratio << " NGood2TrackVertices = " << NSVPair); } else { //keepInfoPlus = false; ATH_MSG_VERBOSE("#BTAG# No SVx !"); } - + /* Give information to the info class. */ - // define Info name based on tagger instance name + // define Info name based on tagger instance name // (remove ToolSvc. in front and Tag inside name): std::string iname(name().substr(8)); std::string instanceName(iname); @@ -282,36 +282,38 @@ namespace Analysis instanceName += posfix; } //AA: Move to filling xAOD::BTagging + // note that this block is filling things other than likelihood, + // it should not be conditional on m_save_probabilities if (m_runModus=="analysis") { - // -- fill extended info class ... + // -- fill extended info class ... if (m_xAODBaseName == "SV0") // just to be clear, specify enum explicitely - { - BTag.setTaggerInfo(distnrm, xAOD::BTagInfo::SV0_normdist); - BTag.setSV0_significance3D(distnrm); - } + { + BTag.setTaggerInfo(distnrm, xAOD::BTagInfo::SV0_normdist); + BTag.setSV0_significance3D(distnrm); + } else if (m_xAODBaseName == "SV1") - { - BTag.setTaggerInfo(distnrmCorr, xAOD::BTagInfo::SV1_normdist); - BTag.setVariable<float>(m_xAODBaseName, "significance3d", distnrm); - BTag.setVariable<float>(m_xAODBaseName, "correctSignificance3d", distnrmCorr); - BTag.setVariable<float>(m_xAODBaseName, "deltaR", drJPVSV); - BTag.setVariable<float>(m_xAODBaseName, "Lxy", Lxy); - BTag.setVariable<float>(m_xAODBaseName, "L3d", L3d); - } + { + BTag.setTaggerInfo(distnrmCorr, xAOD::BTagInfo::SV1_normdist); + BTag.setVariable<float>(m_xAODBaseName, "significance3d", distnrm); + BTag.setVariable<float>(m_xAODBaseName, "correctSignificance3d", distnrmCorr); + BTag.setVariable<float>(m_xAODBaseName, "deltaR", drJPVSV); + BTag.setVariable<float>(m_xAODBaseName, "Lxy", Lxy); + BTag.setVariable<float>(m_xAODBaseName, "L3d", L3d); + } else{ - BTag.setVariable<float>(m_xAODBaseName, "normdist", distnrm); - if (m_xAODBaseName.find("SV1")!=std::string::npos) { - BTag.setVariable<float>(m_xAODBaseName, "significance3d", distnrm); - BTag.setVariable<float>(m_xAODBaseName, "correctSignificance3d", distnrmCorr); - BTag.setVariable<float>(m_xAODBaseName, "deltaR", drJPVSV); - BTag.setVariable<float>(m_xAODBaseName, "Lxy", Lxy); - BTag.setVariable<float>(m_xAODBaseName, "L3d", L3d); - } + BTag.setVariable<float>(m_xAODBaseName, "normdist", distnrm); + if (m_xAODBaseName.find("SV1")!=std::string::npos) { + BTag.setVariable<float>(m_xAODBaseName, "significance3d", distnrm); + BTag.setVariable<float>(m_xAODBaseName, "correctSignificance3d", distnrmCorr); + BTag.setVariable<float>(m_xAODBaseName, "deltaR", drJPVSV); + BTag.setVariable<float>(m_xAODBaseName, "Lxy", Lxy); + BTag.setVariable<float>(m_xAODBaseName, "L3d", L3d); + } } - } - + } // end "analysis" mode block + /* For SV1 & SV2, compute the weight (analysis) or fill histograms (reference) */ ATH_MSG_VERBOSE("#BTAG# SV mode = " << m_SVmode); @@ -322,143 +324,141 @@ namespace Analysis float trfJetPt=log(jetToTag.pt()/20000.); if(trfJetPt<0.)trfJetPt=0.01; if(trfJetPt>4.8)trfJetPt=4.79; std::string pref = ""; if (m_runModus=="reference") { - if (jetpt >= m_pTjetmin && fabs(jeteta) <= 2.5) { - int label = xAOD::jetFlavourLabel(&jetToTag); - double deltaRtoClosestB = 999.;//, deltaRtoClosestC = 999.; - if (jetToTag.getAttribute("TruthLabelDeltaR_B",deltaRtoClosestB)) { - ATH_MSG_VERBOSE("#BTAG# label found : " << label); - // for purification: require no b or c quark closer than dR=m_purificationDeltaR - double deltaRtoClosestC; - jetToTag.getAttribute("TruthLabelDeltaR_C", deltaRtoClosestC);//mcTrueInfo->deltaRMinTo("C"); - double deltaRmin = deltaRtoClosestB < deltaRtoClosestC ? deltaRtoClosestB : deltaRtoClosestC; - - if ( ( "B"==m_refType && 5==label ) || // b-jets - ( "UDSG"==m_refType && 0==label ) || // light jets - ( "ALL"==m_refType && // all jets: b + purified light jets - ( 5==label || 4==label || ( 0==label && deltaRmin > m_purificationDeltaR ) ) ) - ) { - if (5==label) { - pref = m_hypotheses[0]; - m_nbjet++; - } else if (0==label) { - pref = m_hypotheses[1]; - m_nljet++; - } else if (4==label && m_useCHypo) { - pref = m_hypotheses[2]; - m_ncjet++; - } - } - if (pref == "B" || pref == "C" || pref == "U") { - std::string hDir = "/RefFile/"+m_SVmode+"/"+author+"/"+pref+"/"; - //std::cout<<"SVTAG tag histohelper: " << m_histoHelper << std::endl; - //m_histoHelper->print(); - if (m_SVmode == "SV1") m_histoHelper->fillHisto(hDir+"N2TNormSV1",(float)NSVPair); - if (m_SVmode == "SV2") m_histoHelper->fillHisto(hDir+"N2TNormSV2",(float)NSVPair); - if (NSVPair > 0 && ambtot > 0.) { - if (xratiop == 1.) xratiop = 0.999999; //This is not an overflow... - if (m_SVmode == "SV1") { - m_histoHelper->fillHisto(hDir+"N2T",(float)NSVPair); - m_histoHelper->fillHisto(hDir+"N2TEffSV1",(float)NSVPair); - m_histoHelper->fillHisto(hDir+"BidimME",ambtotp,xratiop); - m_histoHelper->fillHisto(hDir+"DRJPVSV",(float)drJPVSV); - } - if (m_SVmode == "SV2") { - m_histoHelper->fillHisto(hDir+"N2TEffSV2",(float)NSVPair); + if (jetpt >= m_pTjetmin && fabs(jeteta) <= 2.5) { + int label = xAOD::jetFlavourLabel(&jetToTag); + double deltaRtoClosestB = 999.;//, deltaRtoClosestC = 999.; + if (jetToTag.getAttribute("TruthLabelDeltaR_B",deltaRtoClosestB)) { + ATH_MSG_VERBOSE("#BTAG# label found : " << label); + // for purification: require no b or c quark closer than dR=m_purificationDeltaR + double deltaRtoClosestC; + jetToTag.getAttribute("TruthLabelDeltaR_C", deltaRtoClosestC);//mcTrueInfo->deltaRMinTo("C"); + double deltaRmin = deltaRtoClosestB < deltaRtoClosestC ? deltaRtoClosestB : deltaRtoClosestC; + + if ( ( "B"==m_refType && 5==label ) || // b-jets + ( "UDSG"==m_refType && 0==label ) || // light jets + ( "ALL"==m_refType && // all jets: b + purified light jets + ( 5==label || 4==label || ( 0==label && deltaRmin > m_purificationDeltaR ) ) ) + ) { + if (5==label) { + pref = m_hypotheses[0]; + m_nbjet++; + } else if (0==label) { + pref = m_hypotheses[1]; + m_nljet++; + } else if (4==label && m_useCHypo) { + pref = m_hypotheses[2]; + m_ncjet++; + } + } + if (pref == "B" || pref == "C" || pref == "U") { + std::string hDir = "/RefFile/"+m_SVmode+"/"+author+"/"+pref+"/"; + //std::cout<<"SVTAG tag histohelper: " << m_histoHelper << std::endl; + //m_histoHelper->print(); + if (m_SVmode == "SV1") m_histoHelper->fillHisto(hDir+"N2TNormSV1",(float)NSVPair); + if (m_SVmode == "SV2") m_histoHelper->fillHisto(hDir+"N2TNormSV2",(float)NSVPair); + if (NSVPair > 0 && ambtot > 0.) { + if (xratiop == 1.) xratiop = 0.999999; //This is not an overflow... + if (m_SVmode == "SV1") { + m_histoHelper->fillHisto(hDir+"N2T",(float)NSVPair); + m_histoHelper->fillHisto(hDir+"N2TEffSV1",(float)NSVPair); + m_histoHelper->fillHisto(hDir+"BidimME",ambtotp,xratiop); + m_histoHelper->fillHisto(hDir+"DRJPVSV",(float)drJPVSV); + } + if (m_SVmode == "SV2") { + m_histoHelper->fillHisto(hDir+"N2TEffSV2",(float)NSVPair); if(m_usePtSV2)m_histoHelper->fillHisto(hDir+"TridimMENPt",ambtotp,xratiop,trfJetPt); - else m_histoHelper->fillHisto(hDir+"TridimMEN2T",ambtotp,xratiop,log((float)NSVPair)); - } - } - } - } else { - ATH_MSG_ERROR("#BTAG# No TruthInfo ! Cannot run in reference mode !"); - return StatusCode::FAILURE; - } - } - } else if (m_runModus=="analysis") { - std::vector<double> probi; - // access efficiencies: - double effb = m_likelihoodTool->getEff(m_hypotheses[0], author+"#N2T", m_SVmode); - double effu = m_likelihoodTool->getEff(m_hypotheses[1], author+"#N2T", m_SVmode); - double effc = 1.e9; - if(m_useCHypo){ - effc = m_likelihoodTool->getEff(m_hypotheses[2], author+"#N2T", m_SVmode); - } - ATH_MSG_DEBUG( "#BTAG# EFF b,u,c= " << effb << " " << effu << " " << effc); - if (NSVPair>0 && ambtot > 0.) { - std::vector<Slice> nslices; - AtomicProperty atom2(ambtotp,"SecVtx Transformed Mass"); - AtomicProperty atom3(xratiop,"SecVtx Transformed Energy Fraction"); - if (m_SVmode == "SV1") { - AtomicProperty atom1(NSVPair,"Number of Two Track Vertices"); - std::string compoName(author+"#"); - Composite compo1(compoName+"N2T"); - Composite compo2(compoName+"BidimME"); - compo1.atoms.push_back(atom1); - compo2.atoms.push_back(atom2); - compo2.atoms.push_back(atom3); - Slice slice1("SV1"); - slice1.composites.push_back(compo1); - slice1.composites.push_back(compo2); - if(m_useDRJPVSV) { - AtomicProperty atom4(drJPVSV,"DeltaR between jet axis and (PV,SV) axis"); - Composite compo3(compoName+"DRJPVSV"); - compo3.atoms.push_back(atom4); - slice1.composites.push_back(compo3); - } - nslices.push_back(slice1); - } else if (m_SVmode == "SV2") { - std::string compoName(author+"#"); - Slice slice1("SV2"); - if(m_usePtSV2){ - AtomicProperty atom1(trfJetPt,"log(JetPt/2e4)"); - Composite compo(compoName+"TridimMENPt"); - compo.atoms.push_back(atom2); - compo.atoms.push_back(atom3); - compo.atoms.push_back(atom1); - Composite compo1(compoName+"N2TEffSV2"); - AtomicProperty atom4(NSVPair,"Number of Two Track Vertices"); - compo1.atoms.push_back(atom4); - slice1.composites.push_back(compo); - slice1.composites.push_back(compo1); - }else{ - AtomicProperty atom1(log((float)NSVPair),"log(Number of Two Track Vertices)"); - Composite compo(compoName+"TridimMEN2T"); - compo.atoms.push_back(atom2); - compo.atoms.push_back(atom3); - compo.atoms.push_back(atom1); - slice1.composites.push_back(compo); + else m_histoHelper->fillHisto(hDir+"TridimMEN2T",ambtotp,xratiop,log((float)NSVPair)); + } + } } - nslices.push_back(slice1); - } - probi = m_likelihoodTool->calculateLikelihood(nslices); - ATH_MSG_DEBUG( "#BTAG# WEIGHT: pb, pu, pc= " - << probi[0] << " " << probi[1] << " " << probi[2]); - if (probi.size() >= 2) { - probi[0] *= effb; - probi[1] *= effu; - if(m_useCHypo){ - probi[2] *= effc; - } - } else { - ATH_MSG_ERROR("#BTAG# Missing number in jet probabilities ! "<<probi.size()); - } - } else { - // The SV weight is computed even if there is only one or no track ! - // It may seem a little bit weird... - probi.push_back((1.-effb)); - probi.push_back((1.-effu)); - if(m_useCHypo){ - probi.push_back((1.-effc)); - } - } - - if (m_save_probabilities) { - BTag.setVariable<float>(m_xAODBaseName, "pb", probi[0]); - BTag.setVariable<float>(m_xAODBaseName, "pu", probi[1]); - if (m_useCHypo) BTag.setVariable<float>(m_xAODBaseName, "pc", probi[2]); - } - - } + } else { + ATH_MSG_ERROR("#BTAG# No TruthInfo ! Cannot run in reference mode !"); + return StatusCode::FAILURE; + } + } + } else if (m_runModus=="analysis" && m_save_probabilities) { + std::vector<double> probi; + // access efficiencies: + double effb = m_likelihoodTool->getEff(m_hypotheses[0], author+"#N2T", m_SVmode); + double effu = m_likelihoodTool->getEff(m_hypotheses[1], author+"#N2T", m_SVmode); + double effc = 1.e9; + if(m_useCHypo){ + effc = m_likelihoodTool->getEff(m_hypotheses[2], author+"#N2T", m_SVmode); + } + ATH_MSG_DEBUG( "#BTAG# EFF b,u,c= " << effb << " " << effu << " " << effc); + if (NSVPair>0 && ambtot > 0.) { + std::vector<Slice> nslices; + AtomicProperty atom2(ambtotp,"SecVtx Transformed Mass"); + AtomicProperty atom3(xratiop,"SecVtx Transformed Energy Fraction"); + if (m_SVmode == "SV1") { + AtomicProperty atom1(NSVPair,"Number of Two Track Vertices"); + std::string compoName(author+"#"); + Composite compo1(compoName+"N2T"); + Composite compo2(compoName+"BidimME"); + compo1.atoms.push_back(atom1); + compo2.atoms.push_back(atom2); + compo2.atoms.push_back(atom3); + Slice slice1("SV1"); + slice1.composites.push_back(compo1); + slice1.composites.push_back(compo2); + if(m_useDRJPVSV) { + AtomicProperty atom4(drJPVSV,"DeltaR between jet axis and (PV,SV) axis"); + Composite compo3(compoName+"DRJPVSV"); + compo3.atoms.push_back(atom4); + slice1.composites.push_back(compo3); + } + nslices.push_back(slice1); + } else if (m_SVmode == "SV2") { + std::string compoName(author+"#"); + Slice slice1("SV2"); + if(m_usePtSV2){ + AtomicProperty atom1(trfJetPt,"log(JetPt/2e4)"); + Composite compo(compoName+"TridimMENPt"); + compo.atoms.push_back(atom2); + compo.atoms.push_back(atom3); + compo.atoms.push_back(atom1); + Composite compo1(compoName+"N2TEffSV2"); + AtomicProperty atom4(NSVPair,"Number of Two Track Vertices"); + compo1.atoms.push_back(atom4); + slice1.composites.push_back(compo); + slice1.composites.push_back(compo1); + }else{ + AtomicProperty atom1(log((float)NSVPair),"log(Number of Two Track Vertices)"); + Composite compo(compoName+"TridimMEN2T"); + compo.atoms.push_back(atom2); + compo.atoms.push_back(atom3); + compo.atoms.push_back(atom1); + slice1.composites.push_back(compo); + } + nslices.push_back(slice1); + } + probi = m_likelihoodTool->calculateLikelihood(nslices); + ATH_MSG_DEBUG( "#BTAG# WEIGHT: pb, pu, pc= " + << probi[0] << " " << probi[1] << " " << probi[2]); + if (probi.size() >= 2) { + probi[0] *= effb; + probi[1] *= effu; + if(m_useCHypo){ + probi[2] *= effc; + } + } else { + ATH_MSG_ERROR("#BTAG# Missing number in jet probabilities ! "<<probi.size()); + } + } else { + // The SV weight is computed even if there is only one or no track ! + // It may seem a little bit weird... + probi.push_back((1.-effb)); + probi.push_back((1.-effu)); + if(m_useCHypo){ + probi.push_back((1.-effc)); + } + } + + BTag.setVariable<float>(m_xAODBaseName, "pb", probi[0]); + BTag.setVariable<float>(m_xAODBaseName, "pu", probi[1]); + if (m_useCHypo) BTag.setVariable<float>(m_xAODBaseName, "pc", probi[2]); + + } // end analysis mode /* For SV0, put the signed 3D Lxy significance: */ } else { @@ -469,7 +469,7 @@ namespace Analysis } ATH_MSG_VERBOSE("#BTAG# SVTag Finalizing... "); - + return StatusCode::SUCCESS; } @@ -484,12 +484,12 @@ namespace Analysis } double SVTag::get3DSignificance(const xAOD::Vertex& priVertex, - std::vector<const xAOD::Vertex*>& secVertex, - const Amg::Vector3D jetDirection) const { + std::vector<const xAOD::Vertex*>& secVertex, + const Amg::Vector3D jetDirection) const { // double SVTag::get3DSignificance(const Trk::RecVertex & priVertex, // std::vector<const Trk::RecVertex* > & secVertex, // const Amg::Vector3D jetDirection) { - + std::vector<Amg::Vector3D> positions; std::vector<AmgSymMatrix(3)> weightMatrices; @@ -498,17 +498,17 @@ namespace Analysis for (std::vector<const xAOD::Vertex*>::const_iterator secIter = secVertex.begin(); secIter != secEnd; ++secIter) { - // Amg::Vector3D position = (*secIter)->position(); - // Amg::Vector3D position; - // position[0]=(*secIter)->position().x(); - // position[1]=(*secIter)->position().y(); - // position[2]=(*secIter)->position().z(); - // positions.push_back(position); - positions.push_back((*secIter)->position()); - - weightMatrices.push_back((*secIter)->covariancePosition().inverse()); + // Amg::Vector3D position = (*secIter)->position(); + // Amg::Vector3D position; + // position[0]=(*secIter)->position().x(); + // position[1]=(*secIter)->position().y(); + // position[2]=(*secIter)->position().z(); + // positions.push_back(position); + positions.push_back((*secIter)->position()); + + weightMatrices.push_back((*secIter)->covariancePosition().inverse()); } - + // If multiple secondary vertices were reconstructed, then a common (weighted) position will be used // in the signed decay length significance calculation @@ -520,9 +520,9 @@ namespace Analysis for (std::vector<const xAOD::Vertex*>::const_iterator secIter = secVertex.begin(); secIter != secEnd; ++secIter) { - weightTimesPosition+=(weightMatrices[count])*positions[count]; - sumWeights+=(weightMatrices[count]); - ++count; + weightTimesPosition+=(weightMatrices[count])*positions[count]; + sumWeights+=(weightMatrices[count]); + ++count; } // now we have the sum of the weights, let's invert this matrix to get the mean covariance matrix @@ -534,14 +534,14 @@ namespace Analysis // ATH_MSG_ERROR("#BTAG# Could not invert sum of sec vtx matrices"); // return 0.; // } - bool invertible; - AmgSymMatrix(3) meanCovariance; + bool invertible; + AmgSymMatrix(3) meanCovariance; meanCovariance.setZero(); - sumWeights.computeInverseWithCheck(meanCovariance, invertible); - if (! invertible) { + sumWeights.computeInverseWithCheck(meanCovariance, invertible); + if (! invertible) { ATH_MSG_WARNING("#BTAG# Could not invert sum of sec vtx matrices"); - return 0.; - } + return 0.; + } // calculate the weighted mean secondary vertex position Amg::Vector3D meanPosition=meanCovariance*weightTimesPosition; @@ -549,7 +549,7 @@ namespace Analysis // add the mean covariance matrix of the secondary vertices to that of the primary vertex // this is the covariance matrix for the decay length AmgSymMatrix(3) covariance = meanCovariance + priVertex.covariancePosition(); - + // ******** // Calculate the signed decay length significance // ******** @@ -557,36 +557,36 @@ namespace Analysis double Lx = meanPosition[0]-priVertex.position().x(); double Ly = meanPosition[1]-priVertex.position().y(); double Lz = meanPosition[2]-priVertex.position().z(); - + const double decaylength = sqrt(Lx*Lx + Ly*Ly + Lz*Lz); if(decaylength==0.)return 0.; //Safety const double inv_decaylength = 1. / decaylength; - + double dLdLx = Lx * inv_decaylength; double dLdLy = Ly * inv_decaylength; double dLdLz = Lz * inv_decaylength; double decaylength_err2 = dLdLx*dLdLx*covariance(0,0) + - dLdLy*dLdLy*covariance(1,1) + - dLdLz*dLdLz*covariance(2,2) + - 2.*dLdLx*dLdLy*covariance(0,1) + - 2.*dLdLx*dLdLz*covariance(0,2) + - 2.*dLdLy*dLdLz*covariance(1,2); + dLdLy*dLdLy*covariance(1,1) + + dLdLz*dLdLz*covariance(2,2) + + 2.*dLdLx*dLdLy*covariance(0,1) + + 2.*dLdLx*dLdLz*covariance(0,2) + + 2.*dLdLy*dLdLz*covariance(1,2); if(decaylength_err2<=0.)return 0.; //Something is wrong double decaylength_err = sqrt(decaylength_err2); - + double decaylength_significance = 0.; if (decaylength_err != 0.) decaylength_significance = decaylength/decaylength_err; // get sign from projection on jet axis double L_proj_jetDir = jetDirection.x()*Lx + jetDirection.y()*Ly + jetDirection.z()*Lz; if (L_proj_jetDir < 0.) decaylength_significance *= -1.; - + return decaylength_significance; } double SVTag::get3DSignificanceCorr(const xAOD::Vertex& priVertex, - std::vector<const xAOD::Vertex*>& secVertex, - const Amg::Vector3D jetDirection) const { + std::vector<const xAOD::Vertex*>& secVertex, + const Amg::Vector3D jetDirection) const { std::vector<double> Sig3D(0); bool success=true; diff --git a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx index 5c7e7d8e2d20d50b54e847fca9c2cfc4b93a316f..5ce9904a8aafc8ff93f158c5ac87c8ec3a55517f 100755 --- a/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx +++ b/Reconstruction/MET/METReconstruction/Root/METAssociator.cxx @@ -71,8 +71,8 @@ namespace met { declareProperty( "UseFELinks", m_useFELinks = false ); declareProperty( "NeutralPFOLinksKey", m_neutralPFOLinksKey = "neutralpfoLinks"); declareProperty( "ChargedPFOLinksKey", m_chargedPFOLinksKey = "chargedpfoLinks"); - declareProperty( "NeutralFELinksKey", m_neutralFELinksKey = "neutralFELinks"); - declareProperty( "ChargedFELinksKey", m_chargedFELinksKey = "chargedFELinks"); + declareProperty( "NeutralFELinksKey", m_neutralFELinksKey = "neutralGlobalFELinks"); + declareProperty( "ChargedFELinksKey", m_chargedFELinksKey = "chargedGlobalFELinks"); } // Destructor diff --git a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py index 28ca04c5eb136eb6bd7915faf6f2bb127fd274ad..02f0eea3ddeecbccb2af31b8940a97d99b2a980f 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py +++ b/Reconstruction/MuonIdentification/MuonCombinedConfig/python/MuonCombinedReconstructionConfig.py @@ -513,8 +513,12 @@ def CombinedMuonOutputCfg(flags): # FIXME! Next two lines are hack to remove derivation framework variables that are added by DRAW building and are supposed to be transient wp_decors = ["DFCommonMuonsTight", "DFCommonGoodMuon", "DFCommonMuonsMedium", - "DFCommonMuonsLoose", "InnerDetectorPt", "MuonSpectrometerPt"] - excludedMuonAuxData = ".-"+".-".join(iso_vars+wp_decors) + "DFCommonMuonsLoose", "InnerDetectorPt", "MuonSpectrometerPt"] + #Remove GlobalFELinks and related variables - these are links between FlowElement (FE) containers created in jet finding and muons. + #Since these transient FE containers are not in the ESD/AOD, we should not write out these links. + gpf_vars=[ "chargedGlobalFELinks", "neutralGlobalFELinks", "muon_efrac_matched_GlobalFE", "deltaR_muon_clus_GlobalFEalg"] + excludedMuonAuxData = ".-"+".-".join(iso_vars+wp_decors+gpf_vars) + aod_items += ["xAOD::MuonAuxContainer#MuonsAux" + excludedMuonAuxData] aod_items += ["xAOD::MuonAuxContainer#MuonsLRTAux" + excludedMuonAuxData] diff --git a/Reconstruction/MuonIdentification/MuonCombinedRecExample/share/MuonCombined_OutputItemsAOD.py b/Reconstruction/MuonIdentification/MuonCombinedRecExample/share/MuonCombined_OutputItemsAOD.py index 419087096bf2a110f24eb5d26f19e9d0d513f35d..98ac8e064ede6d84cb8d8593f816bd91d32d4739 100644 --- a/Reconstruction/MuonIdentification/MuonCombinedRecExample/share/MuonCombined_OutputItemsAOD.py +++ b/Reconstruction/MuonIdentification/MuonCombinedRecExample/share/MuonCombined_OutputItemsAOD.py @@ -30,7 +30,10 @@ if DetFlags.detdescr.Calo_on(): # FIXME - check if the objects below still make if DetFlags.detdescr.Muon_on(): excludedAuxData = '-clusterAssociation' common_flags = [ "DFCommonMuonsTight", "DFCommonGoodMuon","DFCommonMuonsMedium", "DFCommonMuonsLoose", "InnerDetectorPt", "MuonSpectrometerPt" ] - excludedMuonAuxData = ".-"+".-".join(iso_vars() + common_flags) + #Also remove GlobalFELinks and associated variables - these are links between FlowElement (FE) containers created in jet finding and muons. Since these transient FE containers are not in the AOD, + # we should not write out these links or variables + gpf_vars = ["chargedGlobalFELinks","neutralGlobalFELinks","deltaR_muon_clus_GlobalFEalg","muon_efrac_matched_GlobalFE"] + excludedMuonAuxData = ".-"+".-".join(iso_vars() + common_flags + gpf_vars) # Adding the xAOD content by default track_particles = GetCombinedTrackParticles()[0] for trk_cont in track_particles: diff --git a/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py b/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py index 0eb59a9ef2f1810b8507e697ad632156424bf60c..beff39a2fe052c7f70624e3285292b6580a9aced 100755 --- a/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py +++ b/Reconstruction/RecExample/RecExCommon/share/CombinedRec_config.py @@ -177,8 +177,15 @@ if recAlgs.doEFlow() and jobproperties.eflowRecFlags.usePFFlowElementAssoc: from eflowRec.PFCfg import PFTauFlowElementLinkingCfg CAtoGlobalWrapper(PFTauFlowElementLinkingCfg,ConfigFlags) except Exception: - treatException("Could not set up tau-FE links") + treatException("Could not set up tau-FE links") +#Links to/from global FE containers created during jet finding +if(jetOK): + try: + from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg + CAtoGlobalWrapper(PFGlobalFlowElementLinkingCfg,ConfigFlags) + except Exception: + treatException("Could not setup PFGlobalFlowElementAssoc Algorithms") # # functionality : Missing Et # diff --git a/Reconstruction/RecJobTransforms/python/RecoSteering.py b/Reconstruction/RecJobTransforms/python/RecoSteering.py index 0ab8dec4b5b9d80cc8c68d359181a5f91290a906..c1f9d2f0f21a1783692e7bcbb53052112aac585c 100644 --- a/Reconstruction/RecJobTransforms/python/RecoSteering.py +++ b/Reconstruction/RecJobTransforms/python/RecoSteering.py @@ -136,6 +136,10 @@ def RecoSteering(flags): if flags.Reco.EnableJet: from JetRecConfig.JetRecoSteering import JetRecoSteeringCfg acc.merge(JetRecoSteeringCfg(flags)) + #We also need to build links between the newly created jet constituents (GlobalFE) + #and electrons,photons,muons and taus + from eflowRec.PFCfg import PFGlobalFlowElementLinkingCfg + acc.merge(PFGlobalFlowElementLinkingCfg(flags)) log.info("---------- Configured jets") # btagging diff --git a/Reconstruction/eflowRec/python/PFCfg.py b/Reconstruction/eflowRec/python/PFCfg.py index 24f8e2ca78e46837b55c413885c26586a088396b..4a5efe95b06e26fe716c20756985c42f964a55ca 100644 --- a/Reconstruction/eflowRec/python/PFCfg.py +++ b/Reconstruction/eflowRec/python/PFCfg.py @@ -168,10 +168,12 @@ def getLCNeutralFlowElementCreatorAlgorithm(inputFlags,neutralFlowElementOutputN return LCFlowElementNeutralCreatorAlgorithm -def getEGamFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False,doTCC=False): +def getEGamFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False,doTCC=False,useGlobal=False,algName=""): PFEGamFlowElementLinkerAlgorithmFactory=CompFactory.PFEGamFlowElementAssoc - PFEGamFlowElementLinkerAlgorithm=PFEGamFlowElementLinkerAlgorithmFactory("PFEGamFlowElementAssoc") + if (algName == ""): + algName = "PFEGamFlowElementAssoc" + PFEGamFlowElementLinkerAlgorithm=PFEGamFlowElementLinkerAlgorithmFactory(algName) #set an an alternate name if needed #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header @@ -240,17 +242,44 @@ def getEGamFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_ PFEGamFlowElementLinkerAlgorithm.ChargedFEPhotonDecorKey="TrackCaloClustersCharged.TCC_PhotonLinks" PFEGamFlowElementLinkerAlgorithm.NeutralFEPhotonDecorKey="TrackCaloClustersNeutral.TCC_PhotonLinks" + if(useGlobal): + # ReadHandles to change + PFEGamFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects" + PFEGamFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects" + + #Now to change the writeHandles + # first the Electron -> FE links + EL_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey) + PFEGamFlowElementLinkerAlgorithm.ElectronNeutralFEDecorKey=EL_NFE_Link.replace("FELinks","GlobalFELinks") + EL_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey) + PFEGamFlowElementLinkerAlgorithm.ElectronChargedFEDecorKey=EL_CFE_Link.replace("FELinks","GlobalFELinks") + #then the converse case (FE -> Electron) + + PFEGamFlowElementLinkerAlgorithm.ChargedFEElectronDecorKey="GlobalChargedParticleFlowObjects.GlobalFE_ElectronLinks" + PFEGamFlowElementLinkerAlgorithm.NeutralFEElectronDecorKey="GlobalNeutralParticleFlowObjects.GLobalFE_ElectronLinks" + + + # first the Photon -> FE links + PH_NFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey) + PFEGamFlowElementLinkerAlgorithm.PhotonNeutralFEDecorKey=PH_NFE_Link.replace("FELinks","GlobalFELinks") + PH_CFE_Link=str(PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey) + PFEGamFlowElementLinkerAlgorithm.PhotonChargedFEDecorKey=PH_CFE_Link.replace("FELinks","GlobalFELinks") + #then the converse case (FE -> Photons) + PFEGamFlowElementLinkerAlgorithm.ChargedFEPhotonDecorKey="GlobalChargedParticleFlowObjects.TCC_PhotonLinks" + PFEGamFlowElementLinkerAlgorithm.NeutralFEPhotonDecorKey="GlobalNeutralParticleFlowObjects.TCC_PhotonLinks" return PFEGamFlowElementLinkerAlgorithm -def getMuonFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",LinkNeutralFEClusters=True,useMuonTopoClusters=False,AODTest=False,doTCC=False): +def getMuonFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",LinkNeutralFEClusters=True,useMuonTopoClusters=False,AODTest=False,doTCC=False,useGlobal=False,algName=""): PFMuonFlowElementLinkerAlgorithmFactory=CompFactory.PFMuonFlowElementAssoc - PFMuonFlowElementLinkerAlgorithm=PFMuonFlowElementLinkerAlgorithmFactory("PFMuonFlowElementAssoc") + if (algName == ""): + algName="PFMuonFlowElementAssoc" + PFMuonFlowElementLinkerAlgorithm=PFMuonFlowElementLinkerAlgorithmFactory(algName) #set an an alternate name if needed #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header as such @@ -308,6 +337,24 @@ def getMuonFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_ PFMuonFlowElementLinkerAlgorithm.MuonContainer_muon_efrac_matched_FE="Muons.muon_efrac_matched_TCC" # this is because the algorithm adds this debug container which we don't need PFMuonFlowElementLinkerAlgorithm.MuonContainer_ClusterInfo_deltaR="Muons.deltaR_muon_clus_TCCalg" + + if(useGlobal): + PFMuonFlowElementLinkerAlgorithm.JetEtMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects" + PFMuonFlowElementLinkerAlgorithm.JetEtMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects" + + PFMuonFlowElementLinkerAlgorithm.MuonContainer_chargedFELinks="Muons.chargedGlobalFELinks" + PFMuonFlowElementLinkerAlgorithm.MuonContainer_neutralFELinks="Muons.neutralGlobalFELinks" + + PFMuonFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer_FE_MuonLinks="GlobalNeutralParticleFlowObjects.GlobalFE_MuonLinks" + PFMuonFlowElementLinkerAlgorithm.JetETMissChargedFlowElements_FE_MuonLinks="GlobalChargedParticleFlowObjects.GlobalFE_MuonLinks" + + PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_nMatchedMuons="GlobalNeutralParticleFlowObjects.GlobalFE_nMatchedMuons" + PFMuonFlowElementLinkerAlgorithm.FlowElementContainer_FE_efrac_matched_muon="GlobalNeutralParticleFlowObjects.GlobalFE_efrac_matched_muon" + + PFMuonFlowElementLinkerAlgorithm.MuonContainer_muon_efrac_matched_FE="Muons.muon_efrac_matched_GlobalFE" + # this is because the algorithm adds this debug container which we don't need + PFMuonFlowElementLinkerAlgorithm.MuonContainer_ClusterInfo_deltaR="Muons.deltaR_muon_clus_GlobalFEalg" + if(LinkNeutralFEClusters): if (doTCC or AODTest): # since the cells are deleted on AOD, if you try to run the link between NFE and Muon on AOD, it will crash. Terminate to catch this. @@ -324,10 +371,13 @@ def getMuonFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_ -def getTauFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False,doTCC=False) : +def getTauFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False,doTCC=False,useGlobal=False,algName=""): PFTauFlowElementLinkerAlgorithmFactory=CompFactory.PFTauFlowElementAssoc - PFTauFlowElementLinkerAlgorithm=PFTauFlowElementLinkerAlgorithmFactory("PFTauFlowElementAssoc") + if(algName == ""): + algName = "PFTauFlowElementAssoc" + + PFTauFlowElementLinkerAlgorithm=PFTauFlowElementLinkerAlgorithmFactory(algName) #set an an alternate name if needed #this uses some gaudi core magic, namely that you can change the name of the handle as it is a callable attribute, despite the attribute not being explicitly listed in the header @@ -362,6 +412,16 @@ def getTauFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name="",charged_F PFTauFlowElementLinkerAlgorithm.NeutralFETauDecorKey="TrackCaloClustersNeutral.TCC_TauLinks" PFTauFlowElementLinkerAlgorithm.ChargedFETauDecorKey="TrackCaloClustersCharged.TCC_TauLinks" + #This allows to set the links on the global particle flow containers created by JetPFlowSelectionAlg in JetRecTools + if(useGlobal): + PFTauFlowElementLinkerAlgorithm.JetETMissNeutralFlowElementContainer="GlobalNeutralParticleFlowObjects" + PFTauFlowElementLinkerAlgorithm.JetETMissChargedFlowElementContainer="GlobalChargedParticleFlowObjects" + + PFTauFlowElementLinkerAlgorithm.TauNeutralFEDecorKey="TauJets.neutralGlobalFELinks" + PFTauFlowElementLinkerAlgorithm.TauChargedFEDecorKey="TauJets.chargedGlobalFELinks" + + PFTauFlowElementLinkerAlgorithm.NeutralFETauDecorKey="GlobalNeutralParticleFlowObjects.GlobalFE_TauLinks" + PFTauFlowElementLinkerAlgorithm.ChargedFETauDecorKey="GlobalChargedParticleFlowObjects.GlobalFE_TauLinks" return PFTauFlowElementLinkerAlgorithm @@ -386,12 +446,18 @@ def getOfflinePFAlgorithm(inputFlags): result.addEventAlgo(PFAlgorithm) return result -def PFTauFlowElementLinkingCfg(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False): +def PFTauFlowElementLinkingCfg(inputFlags,neutral_FE_cont_name="",charged_FE_cont_name="",AODTest=False,doTCC=False,useGlobal=False,algName=""): result=ComponentAccumulator() - result.addEventAlgo(getTauFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name,charged_FE_cont_name,AODTest)) + result.addEventAlgo(getTauFlowElementAssocAlgorithm(inputFlags,neutral_FE_cont_name,charged_FE_cont_name,AODTest,doTCC,useGlobal,algName)) return result +def PFGlobalFlowElementLinkingCfg(inputFlags): + result=ComponentAccumulator() + result.addEventAlgo(getTauFlowElementAssocAlgorithm(inputFlags,useGlobal=True,algName="PFTauGlobalFlowElementAssoc")) + result.addEventAlgo(getMuonFlowElementAssocAlgorithm(inputFlags,useGlobal=True,algName="PFMuonGlobalFlowElementAssoc")) + result.addEventAlgo(getEGamFlowElementAssocAlgorithm(inputFlags,useGlobal=True,algName="PFEGamGlobalFlowElementAssoc")) + return result diff --git a/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx b/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx index ce5ea4f9e539f93b00f32469b643d7f7e5cdd9fa..fd2f4cbb0ffc299af0999769a6bc8633e6b789c7 100644 --- a/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx +++ b/Reconstruction/eflowRec/src/PFMuonFlowElementAssoc.cxx @@ -159,22 +159,21 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext& ctx) const { for (const xAOD::FlowElement* FE : *NeutralFEmuonWriteDecorHandle) { int nMatchedFE = 0; // get the index of the cluster corresponding to the Neutral FlowElements - size_t FEclusterindex = FE->otherObjects().at(0)->index(); + ATH_MSG_DEBUG("P1"); + const xAOD::IParticle* otherObject = FE->otherObjects().at(0); + //This is expected to happen for low energy FE - sometimes the linked cluster has E < 0 and + //is thinned away in the AOD + if (!otherObject){ + ATH_MSG_DEBUG("No linked cluster for Neutral FE with E, eta and phi" << FE->e() << ", " << FE->eta() << " and " << FE->phi()); + continue; + } + size_t FEclusterindex = otherObject->index(); // FE->otherObjects returns a vector of IParticles. We only want the first one const xAOD::IParticle* FE_Iparticle = FE->otherObjects().at(0); - // dynamic cast to CaloCluster - const xAOD::CaloCluster* FE_cluster = dynamic_cast<const xAOD::CaloCluster*>(FE_Iparticle); // cast to CaloCluster - // retrieve the link to cells - const CaloClusterCellLink* CellLink = FE_cluster->getCellLinks(); - // build the iterator(s) for the looping over the elements inside the CellLink - if (!CellLink && !m_UseMuonTopoClusters) { // safety check if no celll link and we're doing the cell based matching only - ATH_MSG_WARNING("Flow Element cluster link is nullptr"); - continue; - } - CaloClusterCellLink::const_iterator FE_FirstCell = CellLink->begin(); - CaloClusterCellLink::const_iterator FE_LastCell = CellLink->end(); + // dynamic cast to CaloCluster + const xAOD::CaloCluster* FE_cluster = dynamic_cast<const xAOD::CaloCluster*>(FE_Iparticle); // cast to CaloCluster // debug for Negative energy cluster @@ -198,8 +197,10 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext& ctx) const { // get the linker to the topo clusters const std::vector<ElementLink<xAOD::CaloClusterContainer>>& linksToTopoClusters = acc_constClusterLinks(*cluster); for (const ElementLink<xAOD::CaloClusterContainer>& TopoClusterLink : linksToTopoClusters) { + //This is expected to happen for low energy cluster - sometimes the linked cluster has E < 0 and + //is thinned away in the AOD if (!TopoClusterLink.isValid()) { - ATH_MSG_WARNING("Muon Calo cluster's TopoCluster link not found, skip"); + ATH_MSG_DEBUG("Muon Calo cluster's TopoCluster link not found, skip"); continue; } const xAOD::CaloCluster* MuonTopoCluster = *TopoClusterLink; // de-ref the link to get the topo-cluster @@ -209,7 +210,7 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext& ctx) const { // index() is the unique index of the muon in the muon container FEMuonLinks.emplace_back(*muonReadHandle, muon->index()); // index() is the unique index of the cFlowElement in the cFlowElementcontaine - muonNeutralFEVec.at(muon->index()).push_back(FlowElementLink_t(*NeutralFEReadHandle, FE->index())); + muonNeutralFEVec.at(muon->index()).push_back(FlowElementLink_t(*NeutralFEReadHandle, FE->index())); ATH_MSG_VERBOSE("Got a match between NFE and Muon"); nMatchedFE++; // count number of matches between FE and muons if (neg_E_cluster) ATH_MSG_ERROR("Muon cluster matched to negative E topocluster from FE"); @@ -221,6 +222,17 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext& ctx) const { // Retrieve cells in both the FE cluster and muon cluster // Define the link as where at least one calo cell is shared between the FE cluster and the Muon Cluster + // retrieve the link to cells + const CaloClusterCellLink* CellLink = FE_cluster->getCellLinks(); + // build the iterator(s) for the looping over the elements inside the CellLink + if (!CellLink && !m_UseMuonTopoClusters) { // safety check if no celll link and we're doing the cell based matching only + ATH_MSG_WARNING("Flow Element cluster link is nullptr"); + continue; + } + + CaloClusterCellLink::const_iterator FE_FirstCell = CellLink->begin(); + CaloClusterCellLink::const_iterator FE_LastCell = CellLink->end(); + // retrieve cells associated to Muon cluster const CaloClusterCellLink* Muon_Clus_CellLink = cluster->getCellLinks(); if (!Muon_Clus_CellLink) { @@ -283,7 +295,6 @@ StatusCode PFMuonFlowElementAssoc::execute(const EventContext& ctx) const { } } // end of calocluster specific block - // loop over caloclusters } // loop over muons NeutralFEmuon_nMatches_WriteDecorHandle(*FE) = nMatchedFE; diff --git a/Reconstruction/eflowRec/src/PFTauFlowElementAssoc.cxx b/Reconstruction/eflowRec/src/PFTauFlowElementAssoc.cxx index 5e678744050b769b324dd4605d36d7d8e2fd96dd..5cebbca217d1584fd99c4b4d5dc260f892239f97 100644 --- a/Reconstruction/eflowRec/src/PFTauFlowElementAssoc.cxx +++ b/Reconstruction/eflowRec/src/PFTauFlowElementAssoc.cxx @@ -77,8 +77,9 @@ StatusCode PFTauFlowElementAssoc::execute(const EventContext &ctx) const { // Loop over the taus for (const xAOD::TauJet* tau : *tauNeutralFEWriteDecorHandle) { - // Skip taus that won't be written to AOD - if(!acc_passThinning(*tau)) continue; + // Skip taus that won't be written to AOD - first check the variable exists + // because older ESD and any AOD used as input do not have this variable. + if(acc_passThinning.isAvailable(*tau) && !acc_passThinning(*tau)) continue; // Get tau vertex const xAOD::Vertex* tauVertex = tau->vertex(); // Get the clusters associated to the tau @@ -125,7 +126,9 @@ StatusCode PFTauFlowElementAssoc::execute(const EventContext &ctx) const { // Loop over the taus for (const xAOD::TauJet* tau : *tauChargedFEWriteDecorHandle) { - if(!acc_passThinning(*tau)) continue; + // Skip taus that won't be written to AOD - first check the variable exists + // because older ESD and any AOD used as input do not have this variable. + if(acc_passThinning.isAvailable(*tau) && !acc_passThinning(*tau)) continue; // Get tau tracks associated to the tau std::vector<const xAOD::TauTrack*> tauTracks = tau->tracks(); for (const auto *tauTrack : tauTracks) { diff --git a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py index cef6eb8539bc27cbac39ba6068a4a154f1341602..e2b35a0727924a2306397fef29de68115fb0d21e 100644 --- a/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py +++ b/Reconstruction/egamma/egammaConfig/python/egammaConfigFlags.py @@ -91,7 +91,9 @@ def createEgammaConfigFlags(): '-topoetconeCorrBitset') egcf.addFlag("Egamma.Keys.Output.Electrons", 'Electrons') - egcf.addFlag("Egamma.Keys.Output.ElectronsSuppESD", '') + #Remove GlobalFELinks - these are links between FlowElement (FE) containers created in jet finding and electrons/photons. Since these transient FE containers are not in the ESD/AOD, we should not write out these links. + gpf_vars='-chargedGlobalFELinks.-neutralGlobalFELinks.' + egcf.addFlag("Egamma.Keys.Output.ElectronsSuppESD", gpf_vars) egcf.addFlag("Egamma.Keys.Output.ElectronsSuppAOD", lambda prevFlags: ( prevFlags.Egamma.Keys.Output.ElectronsSuppESD + @@ -116,7 +118,7 @@ def createEgammaConfigFlags(): prevFlags.Egamma.Keys.Output.ForwardClustersSuppESD)) egcf.addFlag("Egamma.Keys.Output.Photons", 'Photons') - egcf.addFlag("Egamma.Keys.Output.PhotonsSuppESD", '') + egcf.addFlag("Egamma.Keys.Output.PhotonsSuppESD", gpf_vars) egcf.addFlag("Egamma.Keys.Output.PhotonsSuppAOD", lambda prevFlags: ( prevFlags.Egamma.Keys.Output.PhotonsSuppESD + diff --git a/Reconstruction/egamma/egammaRec/python/egammaKeys.py b/Reconstruction/egamma/egammaRec/python/egammaKeys.py index 0231a3ae783aec6db36fd3725243d198a9a41bf4..41cc7e5d3c9fd09f6925994b4789ebc6b83313f2 100644 --- a/Reconstruction/egamma/egammaRec/python/egammaKeys.py +++ b/Reconstruction/egamma/egammaRec/python/egammaKeys.py @@ -18,8 +18,11 @@ class egammaKeysDict: ShowerShapesSuppress = '.-e033.-e011.-e333.-e335.-e337.-e377' PhotonisemSuppress = '.-isEMLoose.-isEMTight' ElectronisemSupress = '.-isEMLHLoose.-isEMLHTight.-isEMLHMedium.-isEMLoose.-isEMMultiLepton.-isEMMedium.-isEMTight' - ElectronSuppress = ShowerShapesSuppress + ElectronisemSupress + '.-EgammaCovarianceMatrix' - PhotonSuppress = ShowerShapesSuppress + PhotonisemSuppress + #When we run jet finding we create links between global FE and electrons/photons + #Global FE do not go into the ESD/AOD, so we suppress the links to them here + GlobalPFlowSuppress = '.-chargedGlobalFELinks.-neutralGlobalFELinks' + ElectronSuppress = ShowerShapesSuppress + ElectronisemSupress + '.-EgammaCovarianceMatrix' + GlobalPFlowSuppress + PhotonSuppress = ShowerShapesSuppress + PhotonisemSuppress + GlobalPFlowSuppress FwdElectronisemSupress = '.-isEMTight.-isEMMedium.-isEMLoose' isovar_suppress = "-" + ".-".join(iso_vars()) egisovar_suppress = isovar_suppress + '.-ptconeCorrBitset.-ptconecoreTrackPtrCorrection.-topoetconeCorrBitset' @@ -47,7 +50,7 @@ class egammaKeysDict: Electron=[ 'xAOD::ElectronContainer', 'Electrons', - egisovar_suppress, + egisovar_suppress + GlobalPFlowSuppress, ElectronSuppress], EgammaRec=['egammaRecContainer', 'egammaRecCollection', @@ -68,7 +71,7 @@ class egammaKeysDict: '-SisterCluster', ''], Photon=['xAOD::PhotonContainer', 'Photons', - phisovar_suppress, + phisovar_suppress + GlobalPFlowSuppress, PhotonSuppress], TrackParticle=[ 'xAOD::TrackParticleContainer', diff --git a/Reconstruction/tauRec/python/TauConfig.py b/Reconstruction/tauRec/python/TauConfig.py index 7605b2263155b1c01f96cf0d0f7e3df3f2a218af..7414928bc7133c7e4882ddde405d7850c36b4329 100755 --- a/Reconstruction/tauRec/python/TauConfig.py +++ b/Reconstruction/tauRec/python/TauConfig.py @@ -221,10 +221,12 @@ def TauOutputCfg(flags): TauESDList = list(TauAODList) # add AOD specific - TauAODList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-mu.-nVtxPU.-ABS_ETA_LEAD_TRACK.-TAU_ABSDELTAPHI.-TAU_ABSDELTAETA.-absipSigLeadTrk.-passThinning" ] + #Also remove GlobalFELinks - these are links between FlowElement (FE) containers created in jet finding and taus. Since these transient FE containers are not in the AOD, we should not write out these links. + TauAODList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-mu.-nVtxPU.-ABS_ETA_LEAD_TRACK.-TAU_ABSDELTAPHI.-TAU_ABSDELTAETA.-absipSigLeadTrk.-passThinning.-chargedGlobalFELinks.-neutralGlobalFELinks" ] # addEOD specific - TauESDList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters" ] + #Also remove GlobalFELinks - these are links between FlowElement (FE) containers created in jet finding and taus. Since these transient FE containers are not in the AOD, we should not write out these links. + TauESDList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-chargedGlobalFELinks.-neutralGlobalFELinks" ] TauESDList += [ "xAOD::PFOContainer#TauChargedParticleFlowObjects" ] TauESDList += [ "xAOD::PFOAuxContainer#TauChargedParticleFlowObjectsAux." ] diff --git a/Reconstruction/tauRec/share/TauAODList.py b/Reconstruction/tauRec/share/TauAODList.py index 67e03866f3be3472750ee6de2f6d03129e37173a..38f07b395373c075bb90041bc77469d9bc1107e6 100644 --- a/Reconstruction/tauRec/share/TauAODList.py +++ b/Reconstruction/tauRec/share/TauAODList.py @@ -14,7 +14,8 @@ TauAODList = [] # Taus #------------------------------------------------------------------------------ TauAODList += [ "xAOD::TauJetContainer#TauJets" ] -TauAODList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-mu.-nVtxPU.-ABS_ETA_LEAD_TRACK.-TAU_ABSDELTAPHI.-TAU_ABSDELTAETA.-absipSigLeadTrk.-passThinning" ] +#Also remove GlobalFELinks - these are links between FlowElement (FE) containers created in jet finding and taus. Since these transient FE containers are not in the AOD, we should not write out these links. +TauAODList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-mu.-nVtxPU.-ABS_ETA_LEAD_TRACK.-TAU_ABSDELTAPHI.-TAU_ABSDELTAETA.-absipSigLeadTrk.-passThinning.-chargedGlobalFELinks.-neutralGlobalFELinks" ] #------------------------------------------------------------------------------ # Tau tracks diff --git a/Reconstruction/tauRec/share/TauESDList.py b/Reconstruction/tauRec/share/TauESDList.py index 2d04f1c40f04c30d322db4527a59d74b91ad8eba..defe2a52354d595666d670a5c338111e611e4ffc 100644 --- a/Reconstruction/tauRec/share/TauESDList.py +++ b/Reconstruction/tauRec/share/TauESDList.py @@ -14,7 +14,8 @@ TauESDList = [] # Taus #------------------------------------------------------------------------------ TauESDList += [ "xAOD::TauJetContainer#TauJets" ] -TauESDList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters" ] +#Also remove GlobalFELinks - these are links between FlowElement (FE) containers created in jet finding and taus. Since these transient FE containers are not in the AOD, we should not write out these links. +TauESDList += [ "xAOD::TauJetAuxContainer#TauJetsAux.-VertexedClusters.-chargedGlobalFELinks.-neutralGlobalFELinks" ] #------------------------------------------------------------------------------ # Tau tracks diff --git a/TileCalorimeter/TileGeoModel/TileGeoModel/TileDetectorTool.h b/TileCalorimeter/TileGeoModel/TileGeoModel/TileDetectorTool.h index 2ef53f80569783de0cb91c75bcf7dabdfebf340d..78df496dc69ac5b0460cd7048088b04e97dec597 100755 --- a/TileCalorimeter/TileGeoModel/TileGeoModel/TileDetectorTool.h +++ b/TileCalorimeter/TileGeoModel/TileGeoModel/TileDetectorTool.h @@ -13,16 +13,16 @@ class StoreGateSvc; class TileDetDescrManager; -class TileDetectorTool final : public GeoModelTool +class TileDetectorTool final : public GeoModelTool { public: - TileDetectorTool(const std::string& type, - const std::string& name, - const IInterface* parent); + TileDetectorTool(const std::string& type, + const std::string& name, + const IInterface* parent); virtual ~TileDetectorTool() override final; - + virtual StatusCode create() override final; virtual StatusCode clear() override final; @@ -44,4 +44,4 @@ class TileDetectorTool final : public GeoModelTool TileDetDescrManager* m_manager; }; -#endif +#endif diff --git a/TileCalorimeter/TileGeoModel/TileGeoModel/TileSwitches.h b/TileCalorimeter/TileGeoModel/TileGeoModel/TileSwitches.h index 8818d44dbc08d307e93d81367c24cc9ecc48fdaf..f11ec6274ac579c0cf499612310ee02ac8b62275 100644 --- a/TileCalorimeter/TileGeoModel/TileGeoModel/TileSwitches.h +++ b/TileCalorimeter/TileGeoModel/TileGeoModel/TileSwitches.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #ifndef TILESWITCHES_h @@ -13,7 +13,8 @@ class TileSwitches { -public: + public: + /** Setup defaults */ TileSwitches(bool tb=false, bool pl=true) : testBeam(tb), diff --git a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx index ccc7e03ec4fe62d9466b4115412f6f6012b87235..2121b6a131a047a905fbc62d6307c11f43dedf2d 100755 --- a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.cxx @@ -29,7 +29,7 @@ #include "GeoGenericFunctions/AbsFunction.h" #include "GeoGenericFunctions/Variable.h" -#include "GeoModelKernel/GeoXF.h" +#include "GeoModelKernel/GeoXF.h" #include "GeoModelKernel/GeoSerialTransformer.h" #include "GeoModelInterfaces/StoredMaterialManager.h" @@ -41,7 +41,7 @@ #include <stdexcept> #include <iostream> #include <iomanip> -#include <algorithm> +#include <algorithm> #include <cmath> #include <string> @@ -50,36 +50,39 @@ using namespace GeoGenfun; using namespace GeoXF; + // Constructor: TileAtlasFactory::TileAtlasFactory(StoreGateSvc *pDetStore, TileDetDescrManager *manager, const TileSwitches & switches, MsgStream *log, - bool fullGeo) - : m_detectorStore(pDetStore) - , m_detectorManager(manager) - , m_log(log) - , m_switches(switches) - , m_verbose(log->level()<=MSG::VERBOSE) - , m_fullGeo(fullGeo) + bool fullGeo) + : m_detectorStore(pDetStore) + , m_detectorManager(manager) + , m_log(log) + , m_switches(switches) + , m_verbose(log->level()<=MSG::VERBOSE) + , m_fullGeo(fullGeo) { m_switches.testBeam = false; } - -// Destructor: -TileAtlasFactory::~TileAtlasFactory(){} - + + +// Destructor: +TileAtlasFactory::~TileAtlasFactory() {} + + // Creation of geometry: -void TileAtlasFactory::create(GeoPhysVol *world) -{ +void TileAtlasFactory::create(GeoPhysVol *world) +{ // Global geometri definition for debugging bool Filling = true; bool EBC = true /* Negative */, BAR = true /* Barrel */, EBA = true /* Positive */; int NcpFrom = 1, NcpPlus = 63; // Default is all [1-63] - + //int NcpFrom = 34, NcpPlus = 29; // ext.barrel, special - double deltaPhi = 360./64; // we know apriory that 64 modules makes full cylinder + double deltaPhi = 360./64; // we know apriory that 64 modules makes full cylinder double AnglMin = (NcpFrom-1)*deltaPhi*Gaudi::Units::deg, AnglMax = (NcpPlus+1)*deltaPhi*Gaudi::Units::deg; // phi range of modules with special C10 @@ -92,10 +95,9 @@ void TileAtlasFactory::create(GeoPhysVol *world) // -------- -------- MATERIAL MANAGER -------- ---------- StoredMaterialManager* theMaterialManager = nullptr; - if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) - { - (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; - return; + if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) { + (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; + return; } const GeoMaterial* matAir = theMaterialManager->getMaterial("std::Air"); const GeoMaterial* matIron = theMaterialManager->getMaterial("std::Iron"); @@ -106,19 +108,19 @@ void TileAtlasFactory::create(GeoPhysVol *world) TileGeoSectionBuilder* sectionBuilder = new TileGeoSectionBuilder(theMaterialManager,dbManager,m_switches,m_log); double DzSaddleSupport = 0, RadiusSaddle = 0; - if (dbManager->BoolSaddle()) - {(*m_log) << MSG::INFO << " Tile Geometry with Saddle supports, starting from TileCal-CSC-02 xxx"<< endmsg; + if (dbManager->BoolSaddle()) { + (*m_log) << MSG::INFO << " Tile Geometry with Saddle supports, starting from TileCal-CSC-02 xxx"<< endmsg; - dbManager->SetCurrentSaddle(0); + dbManager->SetCurrentSaddle(0); - DzSaddleSupport = dbManager->DzSaddleSupport()*Gaudi::Units::cm; - RadiusSaddle = dbManager->RadiusSaddle()*Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " DzSaddleSupport()= "<<DzSaddleSupport<<" RadiusSaddle= "<<RadiusSaddle - << endmsg; - } + DzSaddleSupport = dbManager->DzSaddleSupport()*Gaudi::Units::cm; + RadiusSaddle = dbManager->RadiusSaddle()*Gaudi::Units::cm; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " DzSaddleSupport()= "<<DzSaddleSupport<<" RadiusSaddle= "<<RadiusSaddle + << endmsg; + } - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) <<MSG::DEBUG << "TileAtlasFactory. addPlates = " <<m_switches.addPlatesToCell<<endmsg; // -------- -------- CUT BUILDER -------- ---------- //TileGeoCutBuilder* CutBuilder = new TileGeoCutBuilder(theMaterialManager,dbManager,m_log); @@ -129,7 +131,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoPhysVol *pvTileEnvelopeBarrel =0, *pvTileEnvelopePosEndcap =0, *pvTileEnvelopeNegEndcap =0; // radius for minimization overlap volumes - double rless =0.15; // 150 [mkm] + double rless =0.15; // 150 [mkm] double dzITC1 =0, rMinITC1 =0, rMaxITC1 =0; double dzITC2 =0, rMinITC2 =0, rMaxITC2 =0; @@ -149,7 +151,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) double PhiMin[] = {+360.0,+360.0,+360.0,+360.0,+360.0,+360.0}; double RInMin[] = {99999.9,99999.9,99999.9,99999.9,99999.9,99999.9}; double ROutMax[] = {0.0,0.0,0.0,0.0,0.0,0.0}; - double FingerRmax =0; + double FingerRmax = 0; //unsigned int ienv_size = 6; // set default finger length @@ -157,7 +159,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) double BFingerLengthNeg =0; double BFingerLengthPos =0; - // Barrel finger + // Barrel finger dbManager->SetCurrentTifg(1); BFingerLength = BFingerLengthNeg = BFingerLengthPos = dbManager->TIFGdz()*Gaudi::Units::cm; @@ -165,26 +167,25 @@ void TileAtlasFactory::create(GeoPhysVol *world) double EBFingerLengthNeg =0; double EBFingerLengthPos =0; - // EBarrel finger + // EBarrel finger dbManager->SetCurrentTifg(2); EBFingerLength = EBFingerLengthNeg = EBFingerLengthPos = dbManager->TIFGdz()*Gaudi::Units::cm; int n_env = dbManager->GetNumberOfEnv(); - + //std::cerr <<std::cout.setf(std::ios::right)<<std::setiosflags(std::ios::fixed)<<std::setw(9)<<std::setprecision(2); - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << "n_env " << n_env << endmsg; - for(int i = 0; i < n_env ; ++i) - { + for (int i = 0; i < n_env ; ++i) { dbManager->SetCurrentEnvByIndex(i); int Type = dbManager->GetEnvType(); /* - if (Type == 1) BAR = true; - if (Type == 2) EBC = true; - if (Type == 3) EBA = true; + if (Type == 1) BAR = true; + if (Type == 2) EBC = true; + if (Type == 3) EBA = true; */ ZLength [Type] = dbManager->GetEnvZLength()*Gaudi::Units::cm; @@ -195,16 +196,16 @@ void TileAtlasFactory::create(GeoPhysVol *world) ROutMax [Type] = std::max(ROutMax[Type],dbManager->GetEnvRout()*Gaudi::Units::cm); FingerRmax = std::max(FingerRmax,dbManager->GetEnvRout()*Gaudi::Units::cm); - //std::cout << "# Type " <<Type<< " ZLength " <<ZLength [Type]<< " EnvDZPos "<<EnvDZPos [Type]<< "\n"; + //std::cout << "# Type " <<Type<< " ZLength " <<ZLength [Type]<< " EnvDZPos "<<EnvDZPos [Type]<< "\n"; } // - // recalculate length of positive barrel finger length if Ext.Barrel is present + // recalculate length of positive barrel finger length if Ext.Barrel is present // double PosDelta =0; PosDelta = EnvDZPos[3] - EnvDZPos[1]; - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG <<" BFingerLengthPos "<<BFingerLengthPos<<" PosDelta "<<PosDelta; if (fabs(PosDelta) < fabs(EBFingerLength - BFingerLength) ) { BFingerLengthPos += PosDelta; @@ -217,12 +218,12 @@ void TileAtlasFactory::create(GeoPhysVol *world) } // - // recalculate length of negative barrel finger length if Ext.Barrel is present + // recalculate length of negative barrel finger length if Ext.Barrel is present // double NegDelta =0; NegDelta = (-EnvDZPos[2] + EnvDZPos[1]); // negative shift - bigger finger - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG <<" BFingerLengthNeg "<<BFingerLengthNeg<<" NegDelta "<<NegDelta; if (fabs(NegDelta) < fabs(EBFingerLength - BFingerLength) ) { BFingerLengthNeg += NegDelta; @@ -260,7 +261,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) rMinE4neg = rMinE4sp; } } - + /** setfinger length */ double BFingerRmin=0, EFingerRmin=0; dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); @@ -273,70 +274,70 @@ void TileAtlasFactory::create(GeoPhysVol *world) // - // Central Barrel + // Central Barrel // - // Z planes + // Z planes double endCentralBarrel = ZLength[1]/2 - BFingerLength; // nominal position of end plate double endEnvelopeNeg = endCentralBarrel + BFingerLengthNeg; double endEnvelopePos = endCentralBarrel + BFingerLengthPos; - // R minimal + // R minimal double rminBarrel = RInMin[1]; - + // R maximal double rmaxTotal = ROutMax[1]; - + GeoPcon* tileEnvPconeBarrel = new GeoPcon(PhiMin[1]*Gaudi::Units::deg, PhiMax[1]*Gaudi::Units::deg); - tileEnvPconeBarrel->addPlane(-endEnvelopeNeg, BFingerRmin, rmaxTotal); - tileEnvPconeBarrel->addPlane(-endCentralBarrel-DzSaddleSupport, BFingerRmin, rmaxTotal); - if (dbManager->BoolSaddle()) - {tileEnvPconeBarrel->addPlane(-endCentralBarrel-DzSaddleSupport, BFingerRmin-RadiusSaddle,rmaxTotal); - tileEnvPconeBarrel->addPlane(-endCentralBarrel, BFingerRmin-RadiusSaddle,rmaxTotal); + tileEnvPconeBarrel->addPlane(-endEnvelopeNeg, BFingerRmin, rmaxTotal); + tileEnvPconeBarrel->addPlane(-endCentralBarrel-DzSaddleSupport, BFingerRmin, rmaxTotal); + if (dbManager->BoolSaddle()) { + tileEnvPconeBarrel->addPlane(-endCentralBarrel-DzSaddleSupport, BFingerRmin-RadiusSaddle,rmaxTotal); + tileEnvPconeBarrel->addPlane(-endCentralBarrel, BFingerRmin-RadiusSaddle,rmaxTotal); } - tileEnvPconeBarrel->addPlane(-endCentralBarrel, rminBarrel, rmaxTotal); - tileEnvPconeBarrel->addPlane( endCentralBarrel, rminBarrel, rmaxTotal); - if (dbManager->BoolSaddle()) - {tileEnvPconeBarrel->addPlane( endCentralBarrel, BFingerRmin-RadiusSaddle,rmaxTotal); - tileEnvPconeBarrel->addPlane( endCentralBarrel+DzSaddleSupport, BFingerRmin-RadiusSaddle,rmaxTotal); + tileEnvPconeBarrel->addPlane(-endCentralBarrel, rminBarrel, rmaxTotal); + tileEnvPconeBarrel->addPlane( endCentralBarrel, rminBarrel, rmaxTotal); + if (dbManager->BoolSaddle()) { + tileEnvPconeBarrel->addPlane( endCentralBarrel, BFingerRmin-RadiusSaddle,rmaxTotal); + tileEnvPconeBarrel->addPlane( endCentralBarrel+DzSaddleSupport, BFingerRmin-RadiusSaddle,rmaxTotal); }tileEnvPconeBarrel->addPlane( endCentralBarrel+DzSaddleSupport, BFingerRmin, rmaxTotal); - tileEnvPconeBarrel->addPlane( endEnvelopePos, BFingerRmin, rmaxTotal); + tileEnvPconeBarrel->addPlane( endEnvelopePos, BFingerRmin, rmaxTotal); lvTileEnvelopeBarrel = new GeoLogVol("TileCentralBarrel",tileEnvPconeBarrel,matAir); pvTileEnvelopeBarrel = new GeoPhysVol(lvTileEnvelopeBarrel); // - // Pos Ext. Barrel - // + // Pos Ext. Barrel + // - // Z planes + // Z planes double PosEndBarrelFinger = ZLength[1]/2; // nominal end of barrel finger double PosEndITC = PosEndBarrelFinger + ZLength[5]; double PosEndExBarrelFinger = PosEndITC + ZLength[3]; double PosEndExBarrel = PosEndExBarrelFinger - EBFingerLengthPos; - if(m_log->level()<=MSG::DEBUG) { - (*m_log) << MSG::DEBUG - << " EBPos EnvDZPos[3] " << EnvDZPos[3] << " ZLength[5] " <<ZLength[5]<<"+"<<ZLength[3] - << " = " << ZLength[3]+ZLength[5] << " EBFingerLengthPos = " <<EBFingerLengthPos - <<endmsg; - + if (m_log->level()<=MSG::DEBUG) { + (*m_log) << MSG::DEBUG + << " EBPos EnvDZPos[3] " << EnvDZPos[3] << " ZLength[5] " <<ZLength[5]<<"+"<<ZLength[3] + << " = " << ZLength[3]+ZLength[5] << " EBFingerLengthPos = " <<EBFingerLengthPos + <<endmsg; + (*m_log) << MSG::DEBUG << " PosEndBarrelFinger = " << PosEndBarrelFinger - << " PosEndITC = " << PosEndITC - << " PosEndExBarrel = " << PosEndExBarrel - << " PosEndExtBarrelFinger = " << PosEndExBarrelFinger - << endmsg; + << " PosEndITC = " << PosEndITC + << " PosEndExBarrel = " << PosEndExBarrel + << " PosEndExtBarrelFinger = " << PosEndExBarrelFinger + << endmsg; } dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); double PosEndITC1 = (dbManager->TILBzoffset() + dbManager->TILEzshift() + dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; double corr = PosEndITC - PosEndITC1; if (fabs(corr)>0.01) { - (*m_log) << MSG::WARNING - << "Discrepancy between TileGlobals and TILB tables in GeoModel DB " - << PosEndITC << " != " << PosEndITC1 << "; take this into account" - <<endmsg; + (*m_log) << MSG::WARNING + << "Discrepancy between TileGlobals and TILB tables in GeoModel DB " + << PosEndITC << " != " << PosEndITC1 << "; take this into account" + <<endmsg; } //double beginITC1 = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; @@ -354,16 +355,16 @@ void TileAtlasFactory::create(GeoPhysVol *world) PosBeginGap = PosBeginCrack + 0.9 * Gaudi::Units::cm; PosEndGap = PosBeginGap + GapWidth; } - - if(m_log->level()<=MSG::DEBUG) + + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << " PosBeginITC2 = " << PosBeginITC2 - << " PosBeginGap = " << PosBeginGap - << " PosEndGap = " << PosEndGap - << " PosBeginCrack = " << PosBeginCrack - << " PosEndCrack = " << PosEndCrack - << endmsg; - - // R minimals + << " PosBeginGap = " << PosBeginGap + << " PosEndGap = " << PosEndGap + << " PosBeginCrack = " << PosBeginCrack + << " PosEndCrack = " << PosEndCrack + << endmsg; + + // R minimals dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); double PosRminITC1 = dbManager->TILBrminimal()*Gaudi::Units::cm; dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); @@ -372,22 +373,22 @@ void TileAtlasFactory::create(GeoPhysVol *world) double PosRminCrack = rMinE4pos*Gaudi::Units::cm; double PosRminExt = RInMin[3]; - + // R maximal double PosRmaxTotal = ROutMax[3]; - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << " PosRminITC1 = " << PosRminITC1 << " PosRminITC2 = " << PosRminITC << " PosRminCrack = " << PosRminCrack << " PosRminExt = " << PosRminExt << " PosRmaxTotal = " << PosRmaxTotal - << endmsg; + << endmsg; GeoPcon* tileEnvPconePosEndcap = new GeoPcon(PhiMin[3]*Gaudi::Units::deg, PhiMax[3]*Gaudi::Units::deg); - // Positive Endcap + // Positive Endcap tileEnvPconePosEndcap->addPlane(PosEndBarrelFinger, PosRminITC1, PosRmaxTotal); tileEnvPconePosEndcap->addPlane(PosBeginITC2, PosRminITC1, PosRmaxTotal); tileEnvPconePosEndcap->addPlane(PosBeginITC2, PosRminITC, PosRmaxTotal); @@ -396,8 +397,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) tileEnvPconePosEndcap->addPlane(PosEndCrack, PosRminCrack, PosRmaxTotal); tileEnvPconePosEndcap->addPlane(PosEndCrack, PosRminExt, PosRmaxTotal); tileEnvPconePosEndcap->addPlane(PosEndExBarrel, PosRminExt, PosRmaxTotal); - if (dbManager->BoolSaddle()) - { tileEnvPconePosEndcap->addPlane(PosEndExBarrel, EFingerRmin-RadiusSaddle, PosRmaxTotal); + if (dbManager->BoolSaddle()) { + tileEnvPconePosEndcap->addPlane(PosEndExBarrel, EFingerRmin-RadiusSaddle, PosRmaxTotal); tileEnvPconePosEndcap->addPlane(PosEndExBarrel+DzSaddleSupport, EFingerRmin-RadiusSaddle, PosRmaxTotal); } tileEnvPconePosEndcap->addPlane(PosEndExBarrel+DzSaddleSupport, EFingerRmin, PosRmaxTotal); @@ -408,7 +409,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) // // Neg Ex Barrel - // + // // Z planes double NegEndBarrelFinger = ZLength[1]/2; // nominal end of barrel finger @@ -416,17 +417,17 @@ void TileAtlasFactory::create(GeoPhysVol *world) double NegEndExtBarrelFinger = NegEndITC + ZLength[2]; double NegEndExBarrel = NegEndExtBarrelFinger - EBFingerLengthNeg; - if(m_log->level()<=MSG::DEBUG) { - (*m_log) << MSG::DEBUG - << " EBNeg EnvDZPos[2] " << EnvDZPos[2] << " ZLength[4] " <<ZLength[4]<<"+"<<ZLength[2] - << " = " << ZLength[2]+ZLength[4] << " EBFingerLengthNeg = " <<EBFingerLengthNeg - <<endmsg; - + if (m_log->level()<=MSG::DEBUG) { + (*m_log) << MSG::DEBUG + << " EBNeg EnvDZPos[2] " << EnvDZPos[2] << " ZLength[4] " <<ZLength[4]<<"+"<<ZLength[2] + << " = " << ZLength[2]+ZLength[4] << " EBFingerLengthNeg = " <<EBFingerLengthNeg + <<endmsg; + (*m_log) << MSG::DEBUG << " NegEndBarrelFinger = " << NegEndBarrelFinger - << " NegEndITC = " << NegEndITC - << " NegEndExBarrel = " << NegEndExBarrel - << " NegEndExtBarrelFinger = " << NegEndExtBarrelFinger - << endmsg; + << " NegEndITC = " << NegEndITC + << " NegEndExBarrel = " << NegEndExBarrel + << " NegEndExtBarrelFinger = " << NegEndExtBarrelFinger + << endmsg; } dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); @@ -435,9 +436,9 @@ void TileAtlasFactory::create(GeoPhysVol *world) if (fabs(corr)>0.01) { (*m_log) << MSG::WARNING << "Discrepancy between TileGlobals and TILB tables in GeoModel DB " - << NegEndITC << " != " << NegEndITC1 << "; take this into account" + << NegEndITC << " != " << NegEndITC1 << "; take this into account" << endmsg; - } + } //double NegBeginITC1 = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); double NegBeginITC2 = corr + (dbManager->TILBzoffset() + dbManager->TILEzshift()-dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; @@ -453,16 +454,16 @@ void TileAtlasFactory::create(GeoPhysVol *world) NegBeginGap = NegBeginCrack + 0.9 * Gaudi::Units::cm; NegEndGap = NegBeginGap + GapWidth; } - - if(m_log->level()<=MSG::DEBUG) + + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << " NegBeginITC2 = " << NegBeginITC2 - << " NegBeginGap = " << NegBeginGap - << " NegEndGap = " << NegEndGap - << " NegBeginCrack = " << NegBeginCrack - << " NegEndCrack = " << NegEndCrack - << endmsg; + << " NegBeginGap = " << NegBeginGap + << " NegEndGap = " << NegEndGap + << " NegBeginCrack = " << NegBeginCrack + << " NegEndCrack = " << NegEndCrack + << endmsg; - // R minimals + // R minimals dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); double NegRminITC1 = dbManager->TILBrminimal()*Gaudi::Units::cm; dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); @@ -472,26 +473,26 @@ void TileAtlasFactory::create(GeoPhysVol *world) dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); double NegRminExt = RInMin[2]; - - // R maximal + + // R maximal double NegRmaxTotal = ROutMax[2]; - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << " NegRminITC1 = " << NegRminITC1 << " NegRminITC2 = " << NegRminITC << " NegRminCrack = " << NegRminCrack << " NegRminExt = " << NegRminExt << " NegRmaxTotal = " << NegRmaxTotal - << endmsg; + << endmsg; GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(PhiMin[2]*Gaudi::Units::deg, PhiMax[2]*Gaudi::Units::deg); - // Negative Endcap + // Negative Endcap tileEnvPconeNegEndcap->addPlane(-NegEndExtBarrelFinger, EFingerRmin, NegRmaxTotal); tileEnvPconeNegEndcap->addPlane(-NegEndExBarrel-DzSaddleSupport, EFingerRmin, NegRmaxTotal); - if (dbManager->BoolSaddle()) - { tileEnvPconeNegEndcap->addPlane(-NegEndExBarrel-DzSaddleSupport, EFingerRmin-RadiusSaddle, NegRmaxTotal); + if (dbManager->BoolSaddle()) { + tileEnvPconeNegEndcap->addPlane(-NegEndExBarrel-DzSaddleSupport, EFingerRmin-RadiusSaddle, NegRmaxTotal); tileEnvPconeNegEndcap->addPlane(-NegEndExBarrel, EFingerRmin-RadiusSaddle, NegRmaxTotal); } tileEnvPconeNegEndcap->addPlane(-NegEndExBarrel, NegRminExt, NegRmaxTotal); @@ -507,13 +508,13 @@ void TileAtlasFactory::create(GeoPhysVol *world) pvTileEnvelopeNegEndcap = new GeoPhysVol(lvTileEnvelopeNegEndcap); // --------------- Configure Section Builder for the Reco geometry -------------------- - if(!m_fullGeo) { + if (!m_fullGeo) { // Central barrel part dbManager->SetCurrentSectionByNumber(1); - - dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); + + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); // TODO: apparently, the value set with the call below is not used: it seems m_barrelPeriodThickness is recomputed inside the GeoSectionBuilder's code; so, the call below is probably useless... sectionBuilder->setBarrelPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*Gaudi::Units::cm); @@ -522,18 +523,16 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Ext barrel part dbManager->SetCurrentSectionByNumber(2); - dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); // TODO: apparently, the value set with the call below is not used: it seems m_extendedPeriodThickness is recomputed inside the GeoSectionBuilder's code; so, the call below is probably useless... sectionBuilder->setExtendedPeriodThickness(2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac() + 2.*dzGlue)*Gaudi::Units::cm); } - GeoPhysVol *pvBarrelMother{nullptr}, *pvFingerMotherNeg{nullptr}, *pvFingerMotherPos{nullptr}, - *pvSaddleMotherNeg{nullptr}, *pvSaddleMotherPos{nullptr}; + GeoPhysVol *pvBarrelMother{nullptr}, *pvFingerMotherNeg{nullptr}, *pvFingerMotherPos{nullptr}, *pvSaddleMotherNeg{nullptr}, *pvSaddleMotherPos{nullptr}; GeoPhysVol *pvEBarrelMotherNeg{nullptr}, *pvEBarrelMotherPos{nullptr}; - GeoPhysVol *pvEFingerMotherNeg{nullptr}, *pvEFingerMotherPos{nullptr}, - *pvESaddleMotherNeg{nullptr}, *pvESaddleMotherPos{nullptr}; + GeoPhysVol *pvEFingerMotherNeg{nullptr}, *pvEFingerMotherPos{nullptr}, *pvESaddleMotherNeg{nullptr}, *pvESaddleMotherPos{nullptr}; GeoPhysVol *pvITCMotherNeg{nullptr}, *pvITCMotherPos{nullptr}; GeoPhysVol *pvGapMotherNeg{nullptr}, *pvGapMotherPos{nullptr}; GeoPhysVol *pvCrackMotherNeg{nullptr}, *pvCrackMotherPos{nullptr}; @@ -542,8 +541,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoPhysVol *pvEBarrelModuleMotherPos{nullptr}, *pvEBarrelModuleMotherNeg{nullptr}; /* - GeoPhysVol *pvTmp_EBarrelModuleMotherPos =0,*pvTmL_EBarrelModuleMotherPos =0,*pvTmR_EBarrelModuleMotherPos =0; - GeoPhysVol *pvTmp_EBarrelModuleMotherNeg =0,*pvTmL_EBarrelModuleMotherNeg =0,*pvTmR_EBarrelModuleMotherNeg =0; + GeoPhysVol *pvTmp_EBarrelModuleMotherPos =0,*pvTmL_EBarrelModuleMotherPos =0,*pvTmR_EBarrelModuleMotherPos =0; + GeoPhysVol *pvTmp_EBarrelModuleMotherNeg =0,*pvTmL_EBarrelModuleMotherNeg =0,*pvTmR_EBarrelModuleMotherNeg =0; */ //GeoCutVolAction *action1 =0, *action2 =0, *action3 =0; @@ -566,185 +565,186 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoLogVol *lvIrUp =0, *lvIrDw =0, *lvIron3 =0, *lvIron2 =0, *lvIron1 =0, *lvIrBox =0; GeoPhysVol *pvIrUp =0, *pvIrDw =0, *pvIron3 =0, *pvIron2 =0, *pvIron1 =0, *pvIrBox =0; - if(m_fullGeo) { + if (m_fullGeo) { // ext. barrel Cuts description if (dbManager->BoolCuts()) { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " Tile Geometry with Ext.Barrel CutOuts and Iron plates, starting form TileCal-CSC-01" - << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " Tile Geometry with Ext.Barrel CutOuts and Iron plates, starting form TileCal-CSC-01" + << endmsg; - volname = "CutB"; dbManager->SetCurrentCuts(volname); - PosXcut = dbManager->CutsXpos(); - PosYcut = dbManager->CutsYpos(); + volname = "CutB"; dbManager->SetCurrentCuts(volname); + PosXcut = dbManager->CutsXpos(); + PosYcut = dbManager->CutsYpos(); modl_length = 4*dbManager->CutsDX1(); // Inert materials, CutB1 - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("CutB1", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* CutB1 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); //const GeoShape& CutB = *CutB1; CutB = CutB1; - // Inert materials which are in cuts, special modules - // Materials are in cuting region, up Iron plate - volname = "IrUp"; dbManager->SetCurrentCuts(volname); - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + // Inert materials which are in cuts, special modules + // Materials are in cuting region, up Iron plate + volname = "IrUp"; dbManager->SetCurrentCuts(volname); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("IrUp", false, 1,dX1,dX2,dY1,dY2,dZ1); GeoTrd* IrUp = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIrUp = new GeoLogVol("IrUp",IrUp,matIron); - pvIrUp = new GeoPhysVol(lvIrUp); - - // Materials are in cuting region, down Iron plate - volname = "IrDw"; dbManager->SetCurrentCuts(volname); - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + pvIrUp = new GeoPhysVol(lvIrUp); + + // Materials are in cuting region, down Iron plate + volname = "IrDw"; dbManager->SetCurrentCuts(volname); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("IrDw", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* IrDw = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIrDw = new GeoLogVol("IrDw",IrDw,matIron); - pvIrDw = new GeoPhysVol(lvIrDw); + pvIrDw = new GeoPhysVol(lvIrDw); // Materials are in cuting region, 1up Iron plate volname = "Cut1up"; dbManager->SetCurrentCuts(volname); //>> PosY = dbManager->CutsYpos(); - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("Cut1up", false, 1, dX1,dX2,dY1,dY2,dZ1); - GeoTrd* Cut1up = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); + GeoTrd* Cut1up = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); volname = "Cut2down"; dbManager->SetCurrentCuts(volname); //>> - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ2 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ2 = dbManager->CutsDZ1(); checking("Cut2down", false, 1, dX1,dX2,dY1,dY2,dZ2); GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2); - + GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2); - + const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA); CutA = &CutA1; - /* |----------> X - |---------------------------------------| (Xdown, -Ydown) - | (3) | - |---------------------------------------| (2) (Xdown, -Ymiddle) - / CutA \ - |-------------------------------------------| (1) (Xup, -Yup) - - GeoSimplePolygonBrep *BREP = new GeoSimplePolygonBrep(length/2); - BREP->addVertex( Xup, -Yup ); - BREP->addVertex( Xdown, -Ymiddle); - BREP->addVertex( Xdown, -Ydown ); - BREP->addVertex(-Xdown, -Ydown ); - BREP->addVertex(-Xdown, -Ymiddle); - BREP->addVertex(-Xup, -Yup ); - const GeoShape& ShapeCut2 = *BREP; - */ - - // Inert materials which are in cuts, special modules + /* + |----------> X + |---------------------------------------| (Xdown, -Ydown) + | (3) | + |---------------------------------------| (2) (Xdown, -Ymiddle) + / CutA \ + |-------------------------------------------| (1) (Xup, -Yup) + + GeoSimplePolygonBrep *BREP = new GeoSimplePolygonBrep(length/2); + BREP->addVertex( Xup, -Yup ); + BREP->addVertex( Xdown, -Ymiddle); + BREP->addVertex( Xdown, -Ydown ); + BREP->addVertex(-Xdown, -Ydown ); + BREP->addVertex(-Xdown, -Ymiddle); + BREP->addVertex(-Xup, -Yup ); + const GeoShape& ShapeCut2 = *BREP; + */ + + // Inert materials which are in cuts, special modules // Materials are in cuting region, down Iron plate (3) volname = "Iron3"; dbManager->SetCurrentCuts(volname); //>> - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("Iron3", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* Iron3 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIron3 = new GeoLogVol("Iron3",Iron3,matIron); - pvIron3 = new GeoPhysVol(lvIron3); - + pvIron3 = new GeoPhysVol(lvIron3); + // Materials are in cuting region, down Iron plate (2) volname = "Iron2"; dbManager->SetCurrentCuts(volname); //>> - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("Iron2", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* Iron2 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIron2 = new GeoLogVol("Iron2",Iron2,matIron); - pvIron2 = new GeoPhysVol(lvIron2); - + pvIron2 = new GeoPhysVol(lvIron2); + // Materials are in cuting region, down Iron plate (1) volname = "Iron1"; dbManager->SetCurrentCuts(volname); //>> - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("Iron1", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* Iron1 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIron1 = new GeoLogVol("Iron1",Iron1,matIron); - pvIron1 = new GeoPhysVol(lvIron1); + pvIron1 = new GeoPhysVol(lvIron1); // Materials are in cuting region, Heavy Iron Box volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>> - dX1 = dbManager->CutsDX1(); - dX2 = dbManager->CutsDX2(); - dY1 = dbManager->CutsDY1(); - dY2 = dbManager->CutsDY2(); - dZ1 = dbManager->CutsDZ1(); + dX1 = dbManager->CutsDX1(); + dX2 = dbManager->CutsDX2(); + dY1 = dbManager->CutsDY1(); + dY2 = dbManager->CutsDY2(); + dZ1 = dbManager->CutsDZ1(); checking("IrBox", false, 1, dX1,dX2,dY1,dY2,dZ1); GeoTrd* IrBox = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); lvIrBox = new GeoLogVol("IrBox",IrBox,matIron); - pvIrBox = new GeoPhysVol(lvIrBox); - - /* |<-->|----- |Xdown - Xup| - (Xdown,-Ymiddle) /| ^ - / | | - (Xup, / | | CutB - |----------> X | | | - (Xup,-Yup) | | | - \ | | - \ | |- |Ydown - Ymiddle| - (Xdown,-Ydown) \| --- - (Ydown+|Ydown-Ymiddle|/2)-Yup - Y position = Ydown+|Ydown-Ymiddle|/2 - - GeoSimplePolygonBrep *BREP = new GeoSimplePolygonBrep(length/4); - BREP->addVertex( Xup, -Yup ); - BREP->addVertex( Xdown, -Ydown ); - BREP->addVertex( Xdown, -Ymiddle); - BREP->addVertex(-Xdown, -Ymiddle); - BREP->addVertex(-Xdown, -Ydown ); - BREP->addVertex(-Xup, -Yup ); - const GeoShape& ShapeCut1 = *BREP; - */ + pvIrBox = new GeoPhysVol(lvIrBox); + + /* + |<-->|----- |Xdown - Xup| + (Xdown,-Ymiddle) /| ^ + / | | + (Xup, / | | CutB + |----------> X | | | + (Xup,-Yup) | | | + \ | | + \ | |- |Ydown - Ymiddle| + (Xdown,-Ydown) \| --- + (Ydown+|Ydown-Ymiddle|/2)-Yup + Y position = Ydown+|Ydown-Ymiddle|/2 + + GeoSimplePolygonBrep *BREP = new GeoSimplePolygonBrep(length/4); + BREP->addVertex( Xup, -Yup ); + BREP->addVertex( Xdown, -Ydown ); + BREP->addVertex( Xdown, -Ymiddle); + BREP->addVertex(-Xdown, -Ymiddle); + BREP->addVertex(-Xdown, -Ydown ); + BREP->addVertex(-Xup, -Yup ); + const GeoShape& ShapeCut1 = *BREP; + */ } // end if, BoolCuts } int NumberOfEnv = dbManager->GetNumberOfEnv(); MLOG(DEBUG) << "NumberOfEnv: " << NumberOfEnv << endmsg; - for(int EnvCounter = 0; EnvCounter < NumberOfEnv ; ++EnvCounter) - { // Loop over Envelopes + for (int EnvCounter = 0; EnvCounter < NumberOfEnv ; ++EnvCounter) { // Loop over Envelopes dbManager->SetCurrentEnvByIndex(EnvCounter); int EnvType = dbManager->GetEnvType(); @@ -752,34 +752,33 @@ void TileAtlasFactory::create(GeoPhysVol *world) int NumberOfMod = dbManager->GetEnvNModules(); // Break for debugging - //if(EnvType != 3) continue; + //if (EnvType != 3) continue; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " EnvCounter " << EnvCounter << " EnvType " << EnvType - << " EnvNModules " << NumberOfMod << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " EnvCounter " << EnvCounter << " EnvType " << EnvType + << " EnvNModules " << NumberOfMod << endmsg; - if(EnvType == 1) - { + if (EnvType == 1) { // nominal position of end plate zEndSection = ZLength[1]/2 - BFingerLength; GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - zEndSection, - AnglMin, AnglMax); + dbManager->GetEnvRout()*Gaudi::Units::cm, + zEndSection, + AnglMin, AnglMax); - GeoTubs* barrelMother = GeneralMother; + GeoTubs* barrelMother = GeneralMother; GeoLogVol* lvBarrelMother = new GeoLogVol("Barrel",barrelMother,matAir); pvBarrelMother = new GeoPhysVol(lvBarrelMother); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "Barrel envelope parameters: " - << " Length=" << zEndSection - << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm - << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm - << endmsg; - - // Envelopes for two barrel fingers, positive finger + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "Barrel envelope parameters: " + << " Length=" << zEndSection + << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm + << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm + << endmsg; + + // Envelopes for two barrel fingers, positive finger GeoTubs* fingerMotherPos = new GeoTubs(BFingerRmin, dbManager->GetEnvRout()*Gaudi::Units::cm, BFingerLengthPos/2, @@ -788,98 +787,96 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoLogVol* lvFingerMotherPos = new GeoLogVol("FingerPos",fingerMotherPos,matAir); pvFingerMotherPos = new GeoPhysVol(lvFingerMotherPos); - if (dbManager->BoolSaddle()) - { // Envelopes for barrel saddle supports, positive - GeoTubs* SaddleMotherPos = new GeoTubs(BFingerRmin-RadiusSaddle, - BFingerRmin, - DzSaddleSupport/2, - AnglMin, AnglMax); - - GeoLogVol* lvSaddleMotherPos = new GeoLogVol("SaddlePos",SaddleMotherPos,matAir); - pvSaddleMotherPos = new GeoPhysVol(lvSaddleMotherPos); - } - - // Negative finger - GeoTubs* fingerMotherNeg = new GeoTubs(BFingerRmin, - dbManager->GetEnvRout()*Gaudi::Units::cm, - BFingerLengthNeg/2, - AnglMin, AnglMax); - - GeoLogVol* lvFingerMotherNeg = new GeoLogVol("FingerNeg",fingerMotherNeg,matAir); - pvFingerMotherNeg = new GeoPhysVol(lvFingerMotherNeg); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "Barrel finger envelope parameters: " - << " length Pos/Neg=" << BFingerLengthPos << "/" << BFingerLengthNeg - << " Rmin=" << BFingerRmin << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm - << endmsg; - - // Envelopes for two barrel saddle supports, positive - if (dbManager->BoolSaddle()) - { GeoTubs* SaddleMotherNeg = new GeoTubs(BFingerRmin-RadiusSaddle, - BFingerRmin, - DzSaddleSupport/2, - AnglMin, AnglMax); - - GeoLogVol* lvSaddleMotherNeg = new GeoLogVol("SaddleNeg",SaddleMotherNeg,matAir); - pvSaddleMotherNeg = new GeoPhysVol(lvSaddleMotherNeg); - } - } - - if(EnvType == 3) { + if (dbManager->BoolSaddle()) { // Envelopes for barrel saddle supports, positive + GeoTubs* SaddleMotherPos = new GeoTubs(BFingerRmin-RadiusSaddle, + BFingerRmin, + DzSaddleSupport/2, + AnglMin, AnglMax); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" EBarrelPos DZ "<<(dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2<< endmsg; + GeoLogVol* lvSaddleMotherPos = new GeoLogVol("SaddlePos",SaddleMotherPos,matAir); + pvSaddleMotherPos = new GeoPhysVol(lvSaddleMotherPos); + } + + // Negative finger + GeoTubs* fingerMotherNeg = new GeoTubs(BFingerRmin, + dbManager->GetEnvRout()*Gaudi::Units::cm, + BFingerLengthNeg/2, + AnglMin, AnglMax); - checking("EBarrel (+)", false, 0, + GeoLogVol* lvFingerMotherNeg = new GeoLogVol("FingerNeg",fingerMotherNeg,matAir); + pvFingerMotherNeg = new GeoPhysVol(lvFingerMotherNeg); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "Barrel finger envelope parameters: " + << " length Pos/Neg=" << BFingerLengthPos << "/" << BFingerLengthNeg + << " Rmin=" << BFingerRmin << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm + << endmsg; + + // Envelopes for two barrel saddle supports, positive + if (dbManager->BoolSaddle()) { + GeoTubs* SaddleMotherNeg = new GeoTubs(BFingerRmin-RadiusSaddle, + BFingerRmin, + DzSaddleSupport/2, + AnglMin, AnglMax); + + GeoLogVol* lvSaddleMotherNeg = new GeoLogVol("SaddleNeg",SaddleMotherNeg,matAir); + pvSaddleMotherNeg = new GeoPhysVol(lvSaddleMotherNeg); + } + } + + if (EnvType == 3) { + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" EBarrelPos DZ "<<(dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2<< endmsg; + + checking("EBarrel (+)", false, 0, dbManager->GetEnvRin()*Gaudi::Units::cm,dbManager->GetEnvRout()*Gaudi::Units::cm, AnglMin,AnglMax,(dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2); GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2, - AnglMin, AnglMax); + dbManager->GetEnvRout()*Gaudi::Units::cm, + (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2, + AnglMin, AnglMax); GeoTubs* ebarrelMotherPos = GeneralMother; GeoLogVol* lvEBarrelMotherPos = new GeoLogVol("EBarrel",ebarrelMotherPos,matAir); pvEBarrelMotherPos = new GeoPhysVol(lvEBarrelMotherPos); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "Positive ext.barrel envelope parameters: " - << " length=" << (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLength) - << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm - << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm - << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "Positive ext.barrel envelope parameters: " + << " length=" << (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLength) + << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm + << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm + << endmsg; // Envelope for finger separately - checking("EBarrel (+)", false, 0, + checking("EBarrel (+)", false, 0, EFingerRmin,dbManager->GetEnvRout()*Gaudi::Units::cm, AnglMin,AnglMax, EBFingerLength/2); GeoTubs* fingerMother = new GeoTubs(EFingerRmin, - dbManager->GetEnvRout()*Gaudi::Units::cm, - EBFingerLength/2, - AnglMin, AnglMax); + dbManager->GetEnvRout()*Gaudi::Units::cm, + EBFingerLength/2, + AnglMin, AnglMax); GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir); pvEFingerMotherPos = new GeoPhysVol(lvEFingerMother); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "Positive ext.barrel finger envelope parameters: " - << " length=" << EBFingerLength - << " Rmin=" << EFingerRmin - << " Rmax=" << (dbManager->GetEnvRout())*Gaudi::Units::cm - << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "Positive ext.barrel finger envelope parameters: " + << " length=" << EBFingerLength + << " Rmin=" << EFingerRmin + << " Rmax=" << (dbManager->GetEnvRout())*Gaudi::Units::cm + << endmsg; - if (dbManager->BoolSaddle()) - { //Envelopes for two barrel saddle supports, positive - checking("ESaddle (+)", false, 0, - EFingerRmin-RadiusSaddle,EFingerRmin,AnglMin,AnglMax, DzSaddleSupport/2); + if (dbManager->BoolSaddle()) { //Envelopes for two barrel saddle supports, positive + checking("ESaddle (+)", false, 0, + EFingerRmin-RadiusSaddle,EFingerRmin,AnglMin,AnglMax, DzSaddleSupport/2); GeoTubs* ESaddleMother = new GeoTubs(EFingerRmin-RadiusSaddle, - EFingerRmin, - DzSaddleSupport/2, - AnglMin, AnglMax); + EFingerRmin, + DzSaddleSupport/2, + AnglMin, AnglMax); GeoLogVol* lvESaddleMother = new GeoLogVol("ESaddlePos",ESaddleMother,matAir); pvESaddleMotherPos = new GeoPhysVol(lvESaddleMother); @@ -887,59 +884,58 @@ void TileAtlasFactory::create(GeoPhysVol *world) } // Negative Ext.Barrel - if(EnvType == 2) { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" EBarrelNeg DZ "<<(dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2<< endmsg; + if (EnvType == 2) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" EBarrelNeg DZ "<<(dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2<< endmsg; GeoTubs* GeneralMother = new GeoTubs(dbManager->GetEnvRin()*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2, - AnglMin, AnglMax); + dbManager->GetEnvRout()*Gaudi::Units::cm, + (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2, + AnglMin, AnglMax); GeoTubs* ebarrelMotherNeg = GeneralMother; - GeoLogVol* lvEBarrelMotherNeg = new GeoLogVol("EBarrel",ebarrelMotherNeg,matAir); + GeoLogVol* lvEBarrelMotherNeg = new GeoLogVol("EBarrel",ebarrelMotherNeg,matAir); pvEBarrelMotherNeg = new GeoPhysVol(lvEBarrelMotherNeg); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "Nevative ext.barrel envelope parameters: " - << " length=" << (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLength) - << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm - << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm - << endmsg; + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "Nevative ext.barrel envelope parameters: " + << " length=" << (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLength) + << " Rmin=" << dbManager->GetEnvRin()*Gaudi::Units::cm + << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm + << endmsg; // Envelope for finger separately GeoTubs* fingerMother = new GeoTubs(EFingerRmin, - dbManager->GetEnvRout()*Gaudi::Units::cm, - EBFingerLengthNeg/2, - AnglMin, AnglMax); - + dbManager->GetEnvRout()*Gaudi::Units::cm, + EBFingerLengthNeg/2, + AnglMin, AnglMax); + GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir); pvEFingerMotherNeg = new GeoPhysVol(lvEFingerMother); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<"Negative ext.barrel finger envelope parameters: " - << " length=" << EBFingerLengthNeg - << " Rmin=" << EFingerRmin - << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm - << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<"Negative ext.barrel finger envelope parameters: " + << " length=" << EBFingerLengthNeg + << " Rmin=" << EFingerRmin + << " Rmax=" << dbManager->GetEnvRout()*Gaudi::Units::cm + << endmsg; - if (dbManager->BoolSaddle()) - { //Envelopes for Ext. barrel saddle supports, positive - checking("ESaddle (-)", false, 0, - EFingerRmin-RadiusSaddle,EFingerRmin,AnglMin,AnglMax, DzSaddleSupport/2); + if (dbManager->BoolSaddle()) { //Envelopes for Ext. barrel saddle supports, positive + checking("ESaddle (-)", false, 0, + EFingerRmin-RadiusSaddle,EFingerRmin,AnglMin,AnglMax, DzSaddleSupport/2); GeoTubs* ESaddleMother = new GeoTubs(EFingerRmin-RadiusSaddle, - EFingerRmin, - DzSaddleSupport/2, - AnglMin, AnglMax); + EFingerRmin, + DzSaddleSupport/2, + AnglMin, AnglMax); GeoLogVol* lvESaddleMother = new GeoLogVol("ESaddlePos",ESaddleMother,matAir); pvESaddleMotherNeg = new GeoPhysVol(lvESaddleMother); } } - + // ITC Positive - if(EnvType == 5) { + if (EnvType == 5) { dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); @@ -950,15 +946,15 @@ void TileAtlasFactory::create(GeoPhysVol *world) dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); rMinITC1 = dbManager->TILBrminimal(); - rMaxITC1 = dbManager->TILErmam(); + rMaxITC1 = dbManager->TILErmam(); dzITC1 = dbManager->TILBdzmodul(); - - (*m_log) << MSG::INFO << " Positive ITC envelope parameters: PLUG1 " + + (*m_log) << MSG::INFO << " Positive ITC envelope parameters: PLUG1 " <<" Rmin= "<<rMinITC1*Gaudi::Units::cm<<" Rmax= "<<rMaxITC1*Gaudi::Units::cm<<" dzITC1= "<<dzITC1/2*Gaudi::Units::cm<< endmsg; (*m_log) << MSG::INFO << " PLUG2 " <<" Rmin= "<<rMinITC2*Gaudi::Units::cm<<" Rmax= "<<rMaxITC2*Gaudi::Units::cm<<" dzITC2= "<<dzITC2/2*Gaudi::Units::cm<< endmsg; - checking("ITC itcWheel1 (+)", false, 0, + checking("ITC itcWheel1 (+)", false, 0, rMinITC1*Gaudi::Units::cm,rMaxITC1*Gaudi::Units::cm, AnglMin,AnglMax, dzITC1/2*Gaudi::Units::cm); GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*Gaudi::Units::cm, @@ -973,7 +969,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) rMaxITC2*Gaudi::Units::cm, dzITC2/2*Gaudi::Units::cm, AnglMin, AnglMax); - + Z = ( dzITC1 - dzITC2)/2*Gaudi::Units::cm; GeoTrf::Translate3D itcWheel2OffsetPos(0.,0., Z); @@ -987,13 +983,13 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Gap Positive dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); - checking("Gap (+)", false, 0, - dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); + checking("Gap (+)", false, 0, + dbManager->TILBrminimal()*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); GeoTubs* GapMotherPos = new GeoTubs(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), dbManager->TILBdzmodul()/2*Gaudi::Units::cm, AnglMin, AnglMax); @@ -1003,22 +999,22 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Crack Positive dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); - checking("Crack (+)", spE4, 0, - rMinE4pos*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); + checking("Crack (+)", spE4, 0, + rMinE4pos*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); GeoTubs* crackMotherPos = new GeoTubs(rMinE4pos*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - dbManager->TILBdzmodul()/2*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + dbManager->TILBdzmodul()/2*Gaudi::Units::cm, AnglMin, AnglMax); - + GeoLogVol* lvCrackMotherPos = new GeoLogVol("Crack",crackMotherPos,matAir); pvCrackMotherPos = new GeoPhysVol(lvCrackMotherPos); - } + } // ITC Negative - if(EnvType == 4) { + if (EnvType == 4) { dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); @@ -1031,13 +1027,13 @@ void TileAtlasFactory::create(GeoPhysVol *world) rMinITC1 = dbManager->TILBrminimal(); rMaxITC1 = dbManager->TILErmam(); dzITC1 = dbManager->TILBdzmodul(); - - (*m_log) << MSG::INFO << " Negative ITC envelope parameters: PLUG1 " + + (*m_log) << MSG::INFO << " Negative ITC envelope parameters: PLUG1 " <<" Rmin= "<<rMinITC1*Gaudi::Units::cm<<" Rmax= "<<rMaxITC1*Gaudi::Units::cm<<" dzITC1= "<<dzITC1/2*Gaudi::Units::cm<<endmsg; (*m_log) << MSG::INFO << " PLUG2 " <<" Rmin= "<<rMinITC2*Gaudi::Units::cm<<" Rmax= "<<rMaxITC2*Gaudi::Units::cm<<" dzITC2= "<<dzITC2/2*Gaudi::Units::cm<<endmsg; - checking("ITC itcWheel1 (-)", false, 0, + checking("ITC itcWheel1 (-)", false, 0, rMinITC1*Gaudi::Units::cm,rMaxITC1*Gaudi::Units::cm, AnglMin,AnglMax, dzITC1/2*Gaudi::Units::cm); GeoTubs* itcWheel1 = new GeoTubs(rMinITC1*Gaudi::Units::cm, @@ -1066,13 +1062,13 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Gap Negative dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); - checking("Gap (-)", false, 1, - dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); + checking("Gap (-)", false, 1, + dbManager->TILBrminimal()*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); GeoTubs* GapMotherNeg = new GeoTubs(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), dbManager->TILBdzmodul()/2*Gaudi::Units::cm, AnglMin, AnglMax); @@ -1081,1349 +1077,1343 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Crack Negative dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); - - checking("Crack (-)", spE4, 0, - rMinE4neg*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); + + checking("Crack (-)", spE4, 0, + rMinE4neg*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + AnglMin,AnglMax, dbManager->TILBdzmodul()/2*Gaudi::Units::cm); GeoTubs* crackMotherNeg = new GeoTubs(rMinE4neg*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), - dbManager->TILBdzmodul()/2*Gaudi::Units::cm, + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2*Gaudi::Units::deg), + dbManager->TILBdzmodul()/2*Gaudi::Units::cm, AnglMin, AnglMax); - + GeoLogVol* lvCrackMotherNeg = new GeoLogVol("Crack",crackMotherNeg,matAir); pvCrackMotherNeg = new GeoPhysVol(lvCrackMotherNeg); } - - if(m_fullGeo) { - // ModuleNumber[NumberOfMod] array for independent of positrion numeration - int ModuleIndex[64]; - for(int i=0; i < NumberOfMod; i++){ - ModuleIndex[i] = i+1; - } + if (m_fullGeo) { - // the main loop around all phi modules position - int ModuleNcp =0; + // ModuleNumber[NumberOfMod] array for independent of positrion numeration + int ModuleIndex[64]; + for (int i=0; i < NumberOfMod; i++) { + ModuleIndex[i] = i+1; + } - GeoTransform* yrotMod = new GeoTransform(GeoTrf::RotateY3D(90*Gaudi::Units::deg)); - yrotMod->ref(); - GeoTransform* XYrtMod = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg) * GeoTrf::RotateY3D(90*Gaudi::Units::deg)); - XYrtMod->ref(); + // the main loop around all phi modules position + int ModuleNcp =0; - for(int ModCounter = 0; ModCounter < NumberOfMod; ModCounter++){ + GeoTransform* yrotMod = new GeoTransform(GeoTrf::RotateY3D(90*Gaudi::Units::deg)); + yrotMod->ref(); + GeoTransform* XYrtMod = new GeoTransform(GeoTrf::RotateX3D(180*Gaudi::Units::deg) * GeoTrf::RotateY3D(90*Gaudi::Units::deg)); + XYrtMod->ref(); - ModuleNcp = ModuleIndex[ModCounter]; + for (int ModCounter = 0; ModCounter < NumberOfMod; ModCounter++) { - // General rotation and transformations - double phi = (double(ModuleNcp-1) + 0.5)*deltaPhi; - double ph1 = (double(ModuleNcp-1))*deltaPhi; + ModuleNcp = ModuleIndex[ModCounter]; - GeoTransform* zrotMod = new GeoTransform(GeoTrf::RotateZ3D(phi*Gaudi::Units::deg)); - zrotMod->ref(); - GeoTransform* zrotSaddle = new GeoTransform(GeoTrf::RotateZ3D(ph1*Gaudi::Units::deg)); - zrotSaddle->ref(); + // General rotation and transformations + double phi = (double(ModuleNcp-1) + 0.5)*deltaPhi; + double ph1 = (double(ModuleNcp-1))*deltaPhi; - dbManager->SetCurrentModuleByIndex(ModuleNcp-1); - int ModType = dbManager->GetModType(); - int ModFingpattern = dbManager->TILBfingpattern(); + GeoTransform* zrotMod = new GeoTransform(GeoTrf::RotateZ3D(phi*Gaudi::Units::deg)); + zrotMod->ref(); + GeoTransform* zrotSaddle = new GeoTransform(GeoTrf::RotateZ3D(ph1*Gaudi::Units::deg)); + zrotSaddle->ref(); - // Debuging code for cuted modules - if(!(ModuleNcp>=NcpFrom && ModuleNcp<=NcpFrom+NcpPlus)) continue; + dbManager->SetCurrentModuleByIndex(ModuleNcp-1); + int ModType = dbManager->GetModType(); + int ModFingpattern = dbManager->TILBfingpattern(); - // special Modules with Cuts - //if(ModuleNcp<35 || ModuleNcp>62) continue; if(ModuleNcp>37 && ModuleNcp<60) continue; + // Debuging code for cuted modules + if (!(ModuleNcp>=NcpFrom && ModuleNcp<=NcpFrom+NcpPlus)) continue; - // Saddle Supports - //if(ModuleNcp<39 || ModuleNcp>58) continue; if(ModuleNcp>42 && ModuleNcp<55) continue; - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ModuleNcp= "<< ModuleNcp <<" ModType "<< ModType <<" Phi "<< phi << endmsg; + // special Modules with Cuts + //if (ModuleNcp<35 || ModuleNcp>62) continue; if (ModuleNcp>37 && ModuleNcp<60) continue; - // - // ------------------- BARREL BLOCKS ------------------------ - // - - if( EnvType == 1 ) { // normal barrel module or module zero - - dbManager->SetCurrentSectionByNumber(ModType); - - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); - - GeoTrd* barrelModuleMother = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvBarrelModuleMother = new GeoLogVol("BarrelModule",barrelModuleMother,matAir); - GeoPhysVol* pvBarrelModuleMother = new GeoPhysVol(lvBarrelModuleMother); - - // Fill the section - if(Filling){ - sectionBuilder->fillSection(pvBarrelModuleMother, 1, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - GeoTransform* xtraMod = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm)); - - pvBarrelMother->add(zrotMod); - pvBarrelMother->add(xtraMod); - pvBarrelMother->add(XYrtMod); - - pvBarrelMother->add(new GeoIdentifierTag(ModuleNcp)); - pvBarrelMother->add(pvBarrelModuleMother); - - // --------------------------BARREL FINGERS MAKING---------------------------- - - dbManager->SetCurrentTifg(1); // Barrel finger - zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2; - - heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax())*Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg)*Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg)*Gaudi::Units::cm; - - // Finger Positive, positioning (only Left ModFingpattern == 10) - if ( ModFingpattern != 10 ) { - GeoTrd* fingerModuleMotherPos = new GeoTrd(BFingerLengthPos/2, - BFingerLengthPos/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvFingerModuleMotherPos = new GeoLogVol("FingerModule",fingerModuleMotherPos,matAir); - GeoPhysVol* pvFingerModuleMotherPos = new GeoPhysVol(lvFingerModuleMotherPos); - - if(Filling) - sectionBuilder->fillFinger(pvFingerModuleMotherPos, 1, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam, - ModuleNcp, - BFingerLengthPos*(1./Gaudi::Units::cm)); - - GeoTransform* xtraModFingerPos = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); - - //(*m_log) << MSG::DEBUG << "R Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg; - - pvFingerMotherPos->add(zrotMod); - pvFingerMotherPos->add(xtraModFingerPos); - pvFingerMotherPos->add(XYrtMod); - - pvFingerMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvFingerMotherPos->add(pvFingerModuleMotherPos); - } - - // Finger Negative, positioning (only Left ModFingpattern == 01) - if ( ModFingpattern != 1 ) { - - GeoTrd* fingerModuleMotherNeg = new GeoTrd(BFingerLengthNeg/2, - BFingerLengthNeg/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvFingerModuleMotherNeg = new GeoLogVol("FingerModule",fingerModuleMotherNeg,matAir); - GeoPhysVol* pvFingerModuleMotherNeg = new GeoPhysVol(lvFingerModuleMotherNeg); - - if(Filling) - sectionBuilder->fillFinger(pvFingerModuleMotherNeg, 1, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam, - ModuleNcp*100, - BFingerLengthNeg*(1./Gaudi::Units::cm)); - - GeoTransform* xtraModFingerNeg = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); - - // (*m_log) << MSG::DEBUG << "L Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg; - - pvFingerMotherNeg->add(zrotMod); - pvFingerMotherNeg->add(xtraModFingerNeg); - pvFingerMotherNeg->add(yrotMod); - - pvFingerMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvFingerMotherNeg->add(pvFingerModuleMotherNeg); - } - - // --------------------------BARREL SADDLE MAKING---------------------------- - if (dbManager->BoolSaddle()) - { if ( (ModuleNcp >=40 && ModuleNcp <=41) || (ModuleNcp >=56 && ModuleNcp <=57) ) - { - GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, - BFingerRmin, - DzSaddleSupport/2, - 0.,deltaPhi*Gaudi::Units::deg); - - GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); - GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); - - pvSaddleMotherPos->add(zrotSaddle); - pvSaddleMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvSaddleMotherPos->add(pvSaddleModule); - - pvSaddleMotherNeg->add(zrotSaddle); - pvSaddleMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvSaddleMotherNeg->add(pvSaddleModule); + // Saddle Supports + //if (ModuleNcp<39 || ModuleNcp>58) continue; if (ModuleNcp>42 && ModuleNcp<55) continue; + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ModuleNcp= "<< ModuleNcp <<" ModType "<< ModType <<" Phi "<< phi << endmsg; + + // + // ------------------- BARREL BLOCKS ------------------------ + // + + if ( EnvType == 1 ) { // normal barrel module or module zero + + dbManager->SetCurrentSectionByNumber(ModType); + + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); + + GeoTrd* barrelModuleMother = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvBarrelModuleMother = new GeoLogVol("BarrelModule",barrelModuleMother,matAir); + GeoPhysVol* pvBarrelModuleMother = new GeoPhysVol(lvBarrelModuleMother); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvBarrelModuleMother, 1, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); } - } - } - //------------------- Extended Barrel Module Positive ---------------------------------------------------------- + GeoTransform* xtraMod = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm)); - if (EnvType == 3) { + pvBarrelMother->add(zrotMod); + pvBarrelMother->add(xtraMod); + pvBarrelMother->add(XYrtMod); - dbManager->SetCurrentSectionByNumber(ModType); + pvBarrelMother->add(new GeoIdentifierTag(ModuleNcp)); + pvBarrelMother->add(pvBarrelModuleMother); - // Mother module - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.* - dbManager->TILBnperiod()); - - double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm; + // --------------------------BARREL FINGERS MAKING---------------------------- - checking("EBarrelModule (+)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + dbManager->SetCurrentTifg(1); // Barrel finger + zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2; - GeoTrd* ebarrelModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); + heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax())*Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg)*Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg)*Gaudi::Units::cm; + + // Finger Positive, positioning (only Left ModFingpattern == 10) + if ( ModFingpattern != 10 ) { + GeoTrd* fingerModuleMotherPos = new GeoTrd(BFingerLengthPos/2, + BFingerLengthPos/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvFingerModuleMotherPos = new GeoLogVol("FingerModule",fingerModuleMotherPos,matAir); + GeoPhysVol* pvFingerModuleMotherPos = new GeoPhysVol(lvFingerModuleMotherPos); + + if (Filling) + sectionBuilder->fillFinger(pvFingerModuleMotherPos, 1, + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam, + ModuleNcp, + BFingerLengthPos*(1./Gaudi::Units::cm)); + + GeoTransform* xtraModFingerPos = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); + + //(*m_log) << MSG::DEBUG << "R Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg; + + pvFingerMotherPos->add(zrotMod); + pvFingerMotherPos->add(xtraModFingerPos); + pvFingerMotherPos->add(XYrtMod); + + pvFingerMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvFingerMotherPos->add(pvFingerModuleMotherPos); + } + + // Finger Negative, positioning (only Left ModFingpattern == 01) + if ( ModFingpattern != 1 ) { + + GeoTrd* fingerModuleMotherNeg = new GeoTrd(BFingerLengthNeg/2, + BFingerLengthNeg/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvFingerModuleMotherNeg = new GeoLogVol("FingerModule",fingerModuleMotherNeg,matAir); + GeoPhysVol* pvFingerModuleMotherNeg = new GeoPhysVol(lvFingerModuleMotherNeg); + + if (Filling) + sectionBuilder->fillFinger(pvFingerModuleMotherNeg, 1, + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam, + ModuleNcp*100, + BFingerLengthNeg*(1./Gaudi::Units::cm)); + + GeoTransform* xtraModFingerNeg = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); + + // (*m_log) << MSG::DEBUG << "L Index " << ModuleNcp << " Fingpattern "<< ModFingpattern << endmsg; - if (!dbManager->BoolCuts()) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; + pvFingerMotherNeg->add(zrotMod); + pvFingerMotherNeg->add(xtraModFingerNeg); + pvFingerMotherNeg->add(yrotMod); - lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",ebarrelModuleMotherPos,matAir); - pvEBarrelModuleMotherPos = new GeoPhysVol(lvEBarrelModuleMotherPos); + pvFingerMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvFingerMotherNeg->add(pvFingerModuleMotherNeg); + } + + // --------------------------BARREL SADDLE MAKING---------------------------- + if (dbManager->BoolSaddle()) { + if ( (ModuleNcp >=40 && ModuleNcp <=41) || (ModuleNcp >=56 && ModuleNcp <=57) ) { + GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, + BFingerRmin, + DzSaddleSupport/2, + 0.,deltaPhi*Gaudi::Units::deg); + + GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); + GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); + + pvSaddleMotherPos->add(zrotSaddle); + pvSaddleMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvSaddleMotherPos->add(pvSaddleModule); + + pvSaddleMotherNeg->add(zrotSaddle); + pvSaddleMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvSaddleMotherNeg->add(pvSaddleModule); + } + } + } - } else { + //------------------- Extended Barrel Module Positive ---------------------------------------------------------- - //gdb - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; - - double PoZ2 =0, PoZ1 =0, thicknessEndPlate =dbManager->TILBdzend1()*Gaudi::Units::cm; + if (EnvType == 3) { - PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; - PoZ2 = PoZ1 + modl_length/4; + dbManager->SetCurrentSectionByNumber(ModType); - if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) - { GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(-PoZ2,0.,-PosY); - - if (ModuleNcp>=60 && ModuleNcp<=62) - { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut); + // Mother module + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - // Cuting of module (Left) - const GeoShape& TmL_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2). - subtract((*CutB)<<TransCutL); + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac())) + / (4.* dbManager->TILBnperiod()); - lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherPos,matAir); + double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm; + + checking("EBarrelModule (+)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* ebarrelModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); - } else if (ModuleNcp>=35 && ModuleNcp<=37) - { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + if (!dbManager->BoolCuts()) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; - // Cuting of module (Right) - const GeoShape& TmR_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2). - subtract((*CutB)<<TransCutR); + lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",ebarrelModuleMotherPos,matAir); + pvEBarrelModuleMotherPos = new GeoPhysVol(lvEBarrelModuleMotherPos); - lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",&TmR_EBarrelModuleMotherPos,matAir); - } + } else { + + //gdb + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; + + double PoZ2 =0, PoZ1 =0, thicknessEndPlate =dbManager->TILBdzend1()*Gaudi::Units::cm; + + PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; + PoZ2 = PoZ1 + modl_length/4; + + if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) { + GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(-PoZ2,0.,-PosY); + + if (ModuleNcp>=60 && ModuleNcp<=62) { + GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut); + + // Cuting of module (Left) + const GeoShape& TmL_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2). + subtract((*CutB)<<TransCutL); + + lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherPos,matAir); + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + + // Cuting of module (Right) + const GeoShape& TmR_EBarrelModuleMotherPos = ebarrelModuleMotherPos->subtract((*CutA)<<TransCut2). + subtract((*CutB)<<TransCutR); + + lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",&TmR_EBarrelModuleMotherPos,matAir); + } pvEBarrelModuleMotherPos = new GeoPhysVol(lvEBarrelModuleMotherPos); - } else { + } else { lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",ebarrelModuleMotherPos,matAir); pvEBarrelModuleMotherPos = new GeoPhysVol(lvEBarrelModuleMotherPos); } // end special modules - } // end if, BoolCuts() - - // Fill the section - if(Filling){ - sectionBuilder->fillSection(pvEBarrelModuleMotherPos, 2, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi, - ModuleNcp); - } - - GeoTransform* xtraModPos = new GeoTransform(GeoTrf::TranslateX3D(Radius)); - - pvEBarrelMotherPos->add(zrotMod); - pvEBarrelMotherPos->add(xtraModPos); - pvEBarrelMotherPos->add(XYrtMod); - - pvEBarrelMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); - - /* - if (!dbManager->BoolCuts()) - { pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); - (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; - - } else { - - (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; - - double PoZ2 =0, PoZ1 =0; - double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; - - PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; - PoZ2 = modl_length/4 + PoZ1; - - if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) - { GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(-PoZ2,0.,-PosY); - - // Cuting of pvEBarrelModuleMotherPos (-) - GeoCutVolAction action1(*CutA, TransCut2); - pvEBarrelModuleMotherPos->apply(&action1); - pvTmp_EBarrelModuleMotherPos = action1.getPV(); - pvEBarrelModuleMotherPos->unref(); // Cleaning useless volume - - if (ModuleNcp>=60 && ModuleNcp<=62) - { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut); - - // Cuting of pvEBarrelModuleMotherPos (Left) - GeoCutVolAction action2(*CutB, TransCutL); - pvTmp_EBarrelModuleMotherPos->apply(&action2); - pvTmL_EBarrelModuleMotherPos = action2.getPV(); - pvTmp_EBarrelModuleMotherPos->unref();// Cleaning useless volume - - pvEBarrelMotherPos->add(pvTmL_EBarrelModuleMotherPos); - - } else if (ModuleNcp>=35 && ModuleNcp<=37) - { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); - - // Cuting of pvEBarrelModuleMotherPos (Right) - GeoCutVolAction action3(*CutB, TransCutR); - pvTmp_EBarrelModuleMotherPos->apply(&action3); - pvTmR_EBarrelModuleMotherPos = action3.getPV(); - pvTmp_EBarrelModuleMotherPos->unref();// Cleaning useless volume - - pvEBarrelMotherPos->add(pvTmR_EBarrelModuleMotherPos); - } - } - else - { pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); - } // end special modules + } // end if, BoolCuts() + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvEBarrelModuleMotherPos, 2, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi, + ModuleNcp); + } + + GeoTransform* xtraModPos = new GeoTransform(GeoTrf::TranslateX3D(Radius)); + + pvEBarrelMotherPos->add(zrotMod); + pvEBarrelMotherPos->add(xtraModPos); + pvEBarrelMotherPos->add(XYrtMod); + + pvEBarrelMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); + + /* + if (!dbManager->BoolCuts()) { pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); - } // end if, BoolCuts() - */ - - //--------------------------EBARREL FINGERS MAKING------------------------------ - - dbManager->SetCurrentTifg(2); //barrel efinger (small) - - // Trd - one finger mother - thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("EFingerModule (+)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); - GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); - - // Fill the section - if (Filling) - { sectionBuilder->fillFinger(pvEFingerModuleMother, 2, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam, - ModuleNcp); - } - GeoTransform* xtraModFingerPos = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); - pvEFingerMotherPos->add(zrotMod); - pvEFingerMotherPos->add(xtraModFingerPos); - pvEFingerMotherPos->add(XYrtMod); - - pvEFingerMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvEFingerMotherPos->add(pvEFingerModuleMother); - - // --------------------------BARREL SADDLE MAKING---------------------------- - if (dbManager->BoolSaddle()) - { if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) - { - GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, - BFingerRmin, - DzSaddleSupport/2, - 0.,deltaPhi*Gaudi::Units::deg); - - GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); - GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); - - pvESaddleMotherPos->add(zrotSaddle); - pvESaddleMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvESaddleMotherPos->add(pvSaddleModule); + (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; + + } else { + + (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; + + double PoZ2 =0, PoZ1 =0; + double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; + + PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; + PoZ2 = modl_length/4 + PoZ1; + + if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) { + GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(-PoZ2,0.,-PosY); + + // Cuting of pvEBarrelModuleMotherPos (-) + GeoCutVolAction action1(*CutA, TransCut2); + pvEBarrelModuleMotherPos->apply(&action1); + pvTmp_EBarrelModuleMotherPos = action1.getPV(); + pvEBarrelModuleMotherPos->unref(); // Cleaning useless volume + + if (ModuleNcp>=60 && ModuleNcp<=62) { + GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,PosYcut,-PosXcut); + + // Cuting of pvEBarrelModuleMotherPos (Left) + GeoCutVolAction action2(*CutB, TransCutL); + pvTmp_EBarrelModuleMotherPos->apply(&action2); + pvTmL_EBarrelModuleMotherPos = action2.getPV(); + pvTmp_EBarrelModuleMotherPos->unref();// Cleaning useless volume + + pvEBarrelMotherPos->add(pvTmL_EBarrelModuleMotherPos); + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + + // Cuting of pvEBarrelModuleMotherPos (Right) + GeoCutVolAction action3(*CutB, TransCutR); + pvTmp_EBarrelModuleMotherPos->apply(&action3); + pvTmR_EBarrelModuleMotherPos = action3.getPV(); + pvTmp_EBarrelModuleMotherPos->unref();// Cleaning useless volume + + pvEBarrelMotherPos->add(pvTmR_EBarrelModuleMotherPos); + } + } else { + pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); + } // end special modules + pvEBarrelMotherPos->add(pvEBarrelModuleMotherPos); + } // end if, BoolCuts() + */ + + //--------------------------EBARREL FINGERS MAKING------------------------------ + + dbManager->SetCurrentTifg(2); //barrel efinger (small) + + // Trd - one finger mother + thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("EFingerModule (+)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); + GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); + + // Fill the section + if (Filling) { + sectionBuilder->fillFinger(pvEFingerModuleMother, 2, + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam, + ModuleNcp); } - } - - } // end if (EnvType == 3) - - //------------------- Extended Barrel Module Negative ---------------------------------------------------------- - - if (EnvType == 2) { - - dbManager->SetCurrentSectionByNumber(ModType); - - // Mother module - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() - + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - - double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm; - - checking("EBarrelModule (-)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* ebarrelModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - if (!dbManager->BoolCuts()) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; - - lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",ebarrelModuleMotherNeg,matAir); - pvEBarrelModuleMotherNeg = new GeoPhysVol(lvEBarrelModuleMotherNeg); - - } else { - - //gdb - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; - - double PoZ2 =0, PoZ1 =0, thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; - - PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2; - PoZ2 = PoZ1 + modl_length/4; - - if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) - { GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateX3D((phi-90)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(-PoZ2,0,-PosY); - - if (ModuleNcp>=60 && ModuleNcp<=62) - { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut); - - // Cuting of module (Left) - const GeoShape& TmL_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2). - subtract((*CutB)<<TransCutL); - - lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherNeg,matAir); - - } else if (ModuleNcp>=35 && ModuleNcp<=37) - { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); - - // Cuting of module (Right) - const GeoShape& TmR_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2). - subtract((*CutB)<<TransCutR); - - lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",&TmR_EBarrelModuleMotherNeg,matAir); - } + GeoTransform* xtraModFingerPos = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); + pvEFingerMotherPos->add(zrotMod); + pvEFingerMotherPos->add(xtraModFingerPos); + pvEFingerMotherPos->add(XYrtMod); + + pvEFingerMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvEFingerMotherPos->add(pvEFingerModuleMother); + + // --------------------------BARREL SADDLE MAKING---------------------------- + if (dbManager->BoolSaddle()) { + if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) { + GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, + BFingerRmin, + DzSaddleSupport/2, + 0.,deltaPhi*Gaudi::Units::deg); + + GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); + GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); + + pvESaddleMotherPos->add(zrotSaddle); + pvESaddleMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvESaddleMotherPos->add(pvSaddleModule); + } + } + + } // end if (EnvType == 3) + + //------------------- Extended Barrel Module Negative ---------------------------------------------------------- + + if (EnvType == 2) { + + dbManager->SetCurrentSectionByNumber(ModType); + + // Mother module + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); + + double Radius = (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2 * Gaudi::Units::cm; + + checking("EBarrelModule (-)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* ebarrelModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + if (!dbManager->BoolCuts()) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; + + lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",ebarrelModuleMotherNeg,matAir); + pvEBarrelModuleMotherNeg = new GeoPhysVol(lvEBarrelModuleMotherNeg); + + } else { + + //gdb + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; + + double PoZ2 =0, PoZ1 =0, thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; + + PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthNeg)/2; + PoZ2 = PoZ1 + modl_length/4; + + if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) { + GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateX3D((phi-90)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(-PoZ2,0,-PosY); + + if (ModuleNcp>=60 && ModuleNcp<=62) { + GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut); + + // Cuting of module (Left) + const GeoShape& TmL_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2). + subtract((*CutB)<<TransCutL); + + lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",&TmL_EBarrelModuleMotherNeg,matAir); + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + + // Cuting of module (Right) + const GeoShape& TmR_EBarrelModuleMotherNeg = ebarrelModuleMotherNeg->subtract((*CutA)<<TransCut2). + subtract((*CutB)<<TransCutR); + + lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",&TmR_EBarrelModuleMotherNeg,matAir); + } pvEBarrelModuleMotherNeg = new GeoPhysVol(lvEBarrelModuleMotherNeg); - } else { + } else { lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",ebarrelModuleMotherNeg,matAir); pvEBarrelModuleMotherNeg = new GeoPhysVol(lvEBarrelModuleMotherNeg); } // end special modules - } // end if, BoolCuts() - - // Fill the section - if (Filling) - {sectionBuilder->fillSection(pvEBarrelModuleMotherNeg, 2, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi, - ModuleNcp, - 0.,true); - } - - GeoTransform* xtraModNeg = new GeoTransform(GeoTrf::TranslateX3D(Radius)); - - pvEBarrelMotherNeg->add(zrotMod); - pvEBarrelMotherNeg->add(xtraModNeg); - pvEBarrelMotherNeg->add(yrotMod); - - pvEBarrelMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); - - /* - if (!dbManager->BoolCuts()) - { pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); - (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; - - } else { - (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; - - double PoZ2 =0, PoZ1 =0; - double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; - - PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; - PoZ2 = modl_length/4 + PoZ1; - - if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) - { GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateX3D((phi-90)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(-PoZ2,0.,-PosY); - - // Cuting of pvEBarrelModuleMotherNeg (-) - GeoCutVolAction action1(*CutA, TransCut2); - pvEBarrelModuleMotherNeg->apply(&action1); - pvTmp_EBarrelModuleMotherNeg = action1.getPV(); - pvEBarrelModuleMotherNeg->unref(); // Cleaning useless volume - - if (ModuleNcp>=60 && ModuleNcp<=62) - { GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut); - - // Cuting of pvEBarrelModuleMotherNeg (Left) - GeoCutVolAction action2(*CutB, TransCutL); - pvTmp_EBarrelModuleMotherNeg->apply(&action2); - pvTmL_EBarrelModuleMotherNeg = action2.getPV(); - pvTmp_EBarrelModuleMotherNeg->unref();// Cleaning useless volume - - pvEBarrelMotherNeg->add(pvTmL_EBarrelModuleMotherNeg); - - } else if (ModuleNcp>=35 && ModuleNcp<=37) - { GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); - - // Cuting of pvEBarrelModuleMotherNeg (Right) - GeoCutVolAction action3(*CutB, TransCutR); - pvTmp_EBarrelModuleMotherNeg->apply(&action3); - pvTmR_EBarrelModuleMotherNeg = action3.getPV(); - pvTmp_EBarrelModuleMotherNeg->unref();// Cleaning useless volume - - pvEBarrelMotherNeg->add(pvTmR_EBarrelModuleMotherNeg); - } - } else - { pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); - } // end special modules - pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); - } // end if, BoolCuts() - */ - - //--------------------------EBARREL FINGERS MAKING------------------------------ - - dbManager->SetCurrentTifg(2); //barrel efinger (small) - - //zEndSection = extOffset + dbManager->TILBdzmodul()/2 + dbManager->TILEzshift(); - - // Trd - one finger mother - thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("EFingerModule (-)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); - GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); - - // Fill the section - if (Filling) - { sectionBuilder->fillFinger(pvEFingerModuleMother, 2, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam, - ModuleNcp*100); - } - GeoTransform* xtraModFingerNeg = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); - pvEFingerMotherNeg->add(zrotMod); - pvEFingerMotherNeg->add(xtraModFingerNeg); - pvEFingerMotherNeg->add(yrotMod); - - pvEFingerMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvEFingerMotherNeg->add(pvEFingerModuleMother); - - // --------------------------BARREL SADDLE MAKING---------------------------- - if (dbManager->BoolSaddle()) - { if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) - { - GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, - BFingerRmin, - DzSaddleSupport/2, - 0.,deltaPhi*Gaudi::Units::deg); - - GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); - GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); - - pvESaddleMotherNeg->add(zrotSaddle); - pvESaddleMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvESaddleMotherNeg->add(pvSaddleModule); + } // end if, BoolCuts() + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvEBarrelModuleMotherNeg, 2, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi, + ModuleNcp, + 0.,true); } - } - - } // end if (EnvType == 2) - - //------------------- D4/C10/Gap/Crack - - if((EnvType == 4) || (EnvType == 5)){ - - int Id4 = ModType%100; - int Ic10 = (ModType/100)%100; - int Igap = (ModType/10000)%100; - int Icrack = (ModType/1000000)%100; - - bool Ifd4 = ( Id4 != 0); - bool Ifc10 = ( Ic10 != 0); - bool Ifgap = ( Igap != 0); - bool Ifcrack = ( Icrack != 0); - - bool Ifspecialgirder = (Id4 == 7); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ITC : EnvType "<<EnvType<<" Size = "<<dbManager->GetModTypeSize() - <<" Ncp= "<<ModuleNcp<<" D4 "<<Id4<<" specialflag = "<<Ifspecialgirder<<" C10 "<<Ic10<<" Gap "<<Igap<<" Crack "<<Icrack - << endmsg; - - if (Ifc10) - { dbManager->SetCurrentSectionByNumber(Ic10); // TILE_PLUG2 - rMinITC2 = dbManager->TILBrminimal(); - rMaxITC2 = dbManager->TILBrmaximal(); - dzITC2 = dbManager->TILBdzmodul(); - } else { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" C10 unavailable "<<endmsg; - } - - if (Ifd4) - { dbManager->SetCurrentSectionByNumber(Id4); // TILE_PLUG1 - rMinITC1 = dbManager->TILBrminimal(); - rMaxITC1 = dbManager->TILBrmaximal(); - dzITC1 = dbManager->TILBdzmodul(); - if (Ifspecialgirder) { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" dzITC1 changed from "<<dzITC1<<" to "<<dbManager->TILBdzgir()<<endmsg; - dzITC1 = dbManager->TILBdzgir(); - } - } else - { (*m_log) << MSG::INFO <<" D4 unavailable "<<endmsg; - dzITC1 = 9.485; //sb [Gaudi::Units::cm] - } - - bool specialC10 = (Ifd4 && Ifc10 && rMaxITC2 < rMinITC1); - if (specialC10) { - rMaxITC2 = rMinITC1; // for special C10 make outer radius equal to inner radius of D4 - } - - //------------------- ITC BLOCKS Negative -------------------------------- - if (EnvType == 4) { - // Common mother for ITC1/2 modules - if (Ifd4 || Ifc10) { + GeoTransform* xtraModNeg = new GeoTransform(GeoTrf::TranslateX3D(Radius)); - // The first sub shape - thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC1 - rMinITC1) * Gaudi::Units::cm; - dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + pvEBarrelMotherNeg->add(zrotMod); + pvEBarrelMotherNeg->add(xtraModNeg); + pvEBarrelMotherNeg->add(yrotMod); - checking("ITCModule tcModuleSub1Neg (-) ", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); - GeoTrd* itcModuleSub1Neg = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - // The second sub shape - thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; - dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + /* + if (!dbManager->BoolCuts()) { + pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); + (*m_log) << MSG::DEBUG << " BoolCuts NO "<< dbManager->BoolCuts() << endmsg; - checking("ITCModule itcModuleSub2Neg (-)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + } else { + (*m_log) << MSG::DEBUG << " BoolCuts YES "<< dbManager->BoolCuts() << endmsg; - GeoTrd* itcModuleSub2Neg = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2 ); - - X = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; - Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ITCModule Negative, position X= "<<X<<" Z= "<<Z<< endmsg; - - GeoTrf::Translate3D itcModule_SubShiftNeg(X, 0., Z); - const GeoShapeUnion& itcModuleMotherNeg = itcModuleSub1Neg->add(*itcModuleSub2Neg<<itcModule_SubShiftNeg); - - GeoTrf::Translate3D itcModuleSubShiftNeg(X, 0., Z); - - GeoLogVol* lvITCModuleMotherNeg = new GeoLogVol("ITCModule",&itcModuleMotherNeg,matAir); - GeoPhysVol* pvITCModuleMotherNeg = new GeoPhysVol(lvITCModuleMotherNeg); - - //Mother volume for ITC1 - //In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: - // 1. Mother for absorber and girder - // 2. Mother for frontplate (since it's short) - - // The D4, PLUG1 - dbManager->SetCurrentSectionByNumber(Id4); - - thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - // ps changes dzITC1 -> dzmodul - Glue = dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2(); - NbPeriod = dbManager->TILBnperiod(); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzITC1= "<<dzITC1 - <<" TILBdzend1= "<<dbManager->TILBdzend1() - <<" TILBdzend2= "<<dbManager->TILBdzend2() - <<endmsg; - - if (NbPeriod > 6) - { dzGlue = (Glue - 2*NbPeriod * (dbManager->TILBdzmast() + dbManager->TILBdzspac())) / (4.*NbPeriod); - } else { - dzGlue = (Glue - (2*(NbPeriod-1) * (dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac())) / (4.*(NbPeriod-1)); - } - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzGlue= "<<dzGlue<<" NbPeriod= "<<NbPeriod - <<" TILBdzmast= "<<dbManager->TILBdzmast()<<" TILBdzspac= "<<dbManager->TILBdzspac() - <<endmsg; - - if (dzGlue <= 0.) - { (*m_log) << MSG::WARNING <<" Plug1Module warning: "<<" dzGlue= "<<dzGlue - <<endmsg; - } - - checking("Plug1Module plug1SubMotherNeg (-)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* plug1SubMotherNeg = new GeoTrd(thicknessWedgeMother/2, + double PoZ2 =0, PoZ1 =0; + double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; + + PoZ1 = thicknessEndPlate + modl_length/4 - (dbManager->GetEnvZLength()*Gaudi::Units::cm- EBFingerLengthPos)/2; + PoZ2 = modl_length/4 + PoZ1; + + if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) { + GeoTrf::Transform3D TransCut2 = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateX3D((phi-90)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(-PoZ2,0.,-PosY); + + // Cuting of pvEBarrelModuleMotherNeg (-) + GeoCutVolAction action1(*CutA, TransCut2); + pvEBarrelModuleMotherNeg->apply(&action1); + pvTmp_EBarrelModuleMotherNeg = action1.getPV(); + pvEBarrelModuleMotherNeg->unref(); // Cleaning useless volume + + if (ModuleNcp>=60 && ModuleNcp<=62) { + GeoTrf::Transform3D TransCutL = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,-PosYcut,-PosXcut); + + // Cuting of pvEBarrelModuleMotherNeg (Left) + GeoCutVolAction action2(*CutB, TransCutL); + pvTmp_EBarrelModuleMotherNeg->apply(&action2); + pvTmL_EBarrelModuleMotherNeg = action2.getPV(); + pvTmp_EBarrelModuleMotherNeg->unref();// Cleaning useless volume + + pvEBarrelMotherNeg->add(pvTmL_EBarrelModuleMotherNeg); + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + GeoTrf::Transform3D TransCutR = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(-phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(PoZ1,-PosYcut,PosXcut) * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + + // Cuting of pvEBarrelModuleMotherNeg (Right) + GeoCutVolAction action3(*CutB, TransCutR); + pvTmp_EBarrelModuleMotherNeg->apply(&action3); + pvTmR_EBarrelModuleMotherNeg = action3.getPV(); + pvTmp_EBarrelModuleMotherNeg->unref();// Cleaning useless volume + + pvEBarrelMotherNeg->add(pvTmR_EBarrelModuleMotherNeg); + } + } else { + pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); + } // end special modules + pvEBarrelMotherNeg->add(pvEBarrelModuleMotherNeg); + } // end if, BoolCuts() + */ + + //--------------------------EBARREL FINGERS MAKING------------------------------ + + dbManager->SetCurrentTifg(2); //barrel efinger (small) + + //zEndSection = extOffset + dbManager->TILBdzmodul()/2 + dbManager->TILEzshift(); + + // Trd - one finger mother + thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("EFingerModule (-)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2, thicknessWedgeMother/2, dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2); - //Second submother for frontplate - double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap - thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - if (specialC10) - (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg; - - GeoLogVol *lvPlug1ModuleMotherNeg=0; - if (thicknessWedgeMother > rless) - { - heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("Plug1Module plug2SubMotherNeg (-)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - GeoTrd* plug2SubMotherNeg = new GeoTrd(thicknessWedgeMother/2, + GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); + GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); + + // Fill the section + if (Filling) { + sectionBuilder->fillFinger(pvEFingerModuleMother, 2, + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam, + ModuleNcp*100); + } + GeoTransform* xtraModFingerNeg = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILErmax() + dbManager->TILBrmax())/2*Gaudi::Units::cm)); + pvEFingerMotherNeg->add(zrotMod); + pvEFingerMotherNeg->add(xtraModFingerNeg); + pvEFingerMotherNeg->add(yrotMod); + + pvEFingerMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvEFingerMotherNeg->add(pvEFingerModuleMother); + + // --------------------------BARREL SADDLE MAKING---------------------------- + if (dbManager->BoolSaddle()) { + if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) { + GeoTubs* SaddleModule = new GeoTubs(BFingerRmin-RadiusSaddle, + BFingerRmin, + DzSaddleSupport/2, + 0.,deltaPhi*Gaudi::Units::deg); + + GeoLogVol* lvSaddleModule = new GeoLogVol("SaddleModule",SaddleModule,matIron); + GeoPhysVol* pvSaddleModule = new GeoPhysVol(lvSaddleModule); + + pvESaddleMotherNeg->add(zrotSaddle); + pvESaddleMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvESaddleMotherNeg->add(pvSaddleModule); + } + } + + } // end if (EnvType == 2) + + //------------------- D4/C10/Gap/Crack + + if ((EnvType == 4) || (EnvType == 5)) { + + int Id4 = ModType%100; + int Ic10 = (ModType/100)%100; + int Igap = (ModType/10000)%100; + int Icrack = (ModType/1000000)%100; + + bool Ifd4 = ( Id4 != 0); + bool Ifc10 = ( Ic10 != 0); + bool Ifgap = ( Igap != 0); + bool Ifcrack = ( Icrack != 0); + + bool Ifspecialgirder = (Id4 == 7); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ITC : EnvType "<<EnvType<<" Size = "<<dbManager->GetModTypeSize() + <<" Ncp= "<<ModuleNcp<<" D4 "<<Id4<<" specialflag = "<<Ifspecialgirder<<" C10 "<<Ic10<<" Gap "<<Igap<<" Crack "<<Icrack + << endmsg; + + if (Ifc10) { + dbManager->SetCurrentSectionByNumber(Ic10); // TILE_PLUG2 + rMinITC2 = dbManager->TILBrminimal(); + rMaxITC2 = dbManager->TILBrmaximal(); + dzITC2 = dbManager->TILBdzmodul(); + } else { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" C10 unavailable "<<endmsg; + } + + if (Ifd4) { + dbManager->SetCurrentSectionByNumber(Id4); // TILE_PLUG1 + rMinITC1 = dbManager->TILBrminimal(); + rMaxITC1 = dbManager->TILBrmaximal(); + dzITC1 = dbManager->TILBdzmodul(); + if (Ifspecialgirder) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" dzITC1 changed from "<<dzITC1<<" to "<<dbManager->TILBdzgir()<<endmsg; + dzITC1 = dbManager->TILBdzgir(); + } + } else { + (*m_log) << MSG::INFO <<" D4 unavailable "<<endmsg; + dzITC1 = 9.485; //sb [Gaudi::Units::cm] + } + + bool specialC10 = (Ifd4 && Ifc10 && rMaxITC2 < rMinITC1); + if (specialC10) { + rMaxITC2 = rMinITC1; // for special C10 make outer radius equal to inner radius of D4 + } + + //------------------- ITC BLOCKS Negative -------------------------------- + if (EnvType == 4) { + + // Common mother for ITC1/2 modules + if (Ifd4 || Ifc10) { + + // The first sub shape + thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC1 - rMinITC1) * Gaudi::Units::cm; + dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("ITCModule tcModuleSub1Neg (-) ", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* itcModuleSub1Neg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + // The second sub shape + thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; + dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("ITCModule itcModuleSub2Neg (-)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* itcModuleSub2Neg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2 ); + + X = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; + Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*Gaudi::Units::cm; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ITCModule Negative, position X= "<<X<<" Z= "<<Z<< endmsg; + + GeoTrf::Translate3D itcModule_SubShiftNeg(X, 0., Z); + const GeoShapeUnion& itcModuleMotherNeg = itcModuleSub1Neg->add(*itcModuleSub2Neg<<itcModule_SubShiftNeg); + + GeoTrf::Translate3D itcModuleSubShiftNeg(X, 0., Z); + + GeoLogVol* lvITCModuleMotherNeg = new GeoLogVol("ITCModule",&itcModuleMotherNeg,matAir); + GeoPhysVol* pvITCModuleMotherNeg = new GeoPhysVol(lvITCModuleMotherNeg); + + //Mother volume for ITC1 + //In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: + // 1. Mother for absorber and girder + // 2. Mother for frontplate (since it's short) + + // The D4, PLUG1 + dbManager->SetCurrentSectionByNumber(Id4); + + thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + // ps changes dzITC1 -> dzmodul + Glue = dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2(); + NbPeriod = dbManager->TILBnperiod(); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzITC1= "<<dzITC1 + <<" TILBdzend1= "<<dbManager->TILBdzend1() + <<" TILBdzend2= "<<dbManager->TILBdzend2() + <<endmsg; + + if (NbPeriod > 6) { + dzGlue = (Glue - 2*NbPeriod * (dbManager->TILBdzmast() + dbManager->TILBdzspac())) / (4.*NbPeriod); + } else { + dzGlue = (Glue - (2*(NbPeriod-1) * (dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac())) / (4.*(NbPeriod-1)); + } + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzGlue= "<<dzGlue<<" NbPeriod= "<<NbPeriod + <<" TILBdzmast= "<<dbManager->TILBdzmast()<<" TILBdzspac= "<<dbManager->TILBdzspac() + <<endmsg; + + if (dzGlue <= 0.) { + (*m_log) << MSG::WARNING <<" Plug1Module warning: "<<" dzGlue= "<<dzGlue + <<endmsg; + } + + checking("Plug1Module plug1SubMotherNeg (-)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug1SubMotherNeg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + //Second submother for frontplate + double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap + thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * Gaudi::Units::cm; + if (m_log->level()<=MSG::DEBUG) + if (specialC10) + (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg; + + GeoLogVol *lvPlug1ModuleMotherNeg=0; + if (thicknessWedgeMother > rless) { + heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("Plug1Module plug2SubMotherNeg (-)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug2SubMotherNeg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoTrf::Translate3D plug1SubOffsetNeg(-dzITC2Bis*Gaudi::Units::cm/2, 0., + (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2); + + const GeoShapeUnion& plug1ModuleMotherNeg = + plug1SubMotherNeg->add(*plug2SubMotherNeg<<plug1SubOffsetNeg); + + lvPlug1ModuleMotherNeg = new GeoLogVol("Plug1Module",&plug1ModuleMotherNeg,matAir); + } else { + lvPlug1ModuleMotherNeg = new GeoLogVol("Plug1Module",plug1SubMotherNeg,matAir); + } + + GeoPhysVol* pvPlug1ModuleMotherNeg = new GeoPhysVol(lvPlug1ModuleMotherNeg); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvPlug1ModuleMotherNeg, 3, + dbManager->TILBrmaximal(), + (thicknessWedgeMother > rless) ? dbManager->TILBrminimal() : dbManager->TILBrmin(), + dzGlue, + deltaPhi, + ModuleNcp, + dzITC2Bis); + } + + Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2; + GeoTransform* tfPlug1ModuleMotherNeg = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z)); + + pvITCModuleMotherNeg->add(tfPlug1ModuleMotherNeg); + pvITCModuleMotherNeg->add(pvPlug1ModuleMotherNeg); + + //Mother volume for ITC2 + if (Ifc10) { + + // TILE_PLUG2 + dbManager->SetCurrentSectionByNumber(Ic10); + + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + if (dbManager->TILBnperiod() > 1) { + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - ((dbManager->TILBnperiod()-1)*2*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1)); + } else { + dzGlue = 0; // add for special missing C10 modules + } + + checking("Plug2Module (-)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug2ModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvPlug2ModuleMotherNeg = new GeoLogVol("Plug2Module",plug2ModuleMotherNeg,matAir); + GeoPhysVol* pvPlug2ModuleMotherNeg = new GeoPhysVol(lvPlug2ModuleMotherNeg); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvPlug2ModuleMotherNeg, Ic10, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + } + + // TILE_PLUG1, D4 + if (Ifd4) { + dbManager->SetCurrentSectionByNumber(Id4); + + GeoTransform* tfPlug2ModuleMotherNeg = new GeoTransform(itcModuleSubShiftNeg); + + pvITCModuleMotherNeg->add(tfPlug2ModuleMotherNeg); + pvITCModuleMotherNeg->add(pvPlug2ModuleMotherNeg); + } + }//if C10 + + double zShift = 0; + NbPeriod = dbManager->TILBnperiod(); + // Z = (dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm; + // ps Zshift calculated from length of volumes rather than modules (account for special modules) + // + Z = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; + + if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./Gaudi::Units::cm); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ITCModule Negative, position X= "<<X<<" Z= "<<Z + <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift + <<endmsg; + + GeoTransform* xtraITCNeg = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + GeoTransform* ztraITCNeg = new GeoTransform(GeoTrf::TranslateZ3D(zShift*Gaudi::Units::cm)); + + pvITCMotherNeg->add(zrotMod); + pvITCMotherNeg->add(xtraITCNeg); + pvITCMotherNeg->add(ztraITCNeg); + pvITCMotherNeg->add(yrotMod); + + pvITCMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvITCMotherNeg->add(pvITCModuleMotherNeg); + + }//if (Ifd4 || Ifc10) + + //-------------------------- G A P Negative --------------------------------- + if (Ifgap) { + + // TILE_PLUG3 + dbManager->SetCurrentSectionByNumber(Igap); + + // Trd - module mother + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + dzGlue = 0.; + + checking("GapModule (-)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* gapModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, thicknessWedgeMother/2, dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2); - - GeoTrf::Translate3D plug1SubOffsetNeg(-dzITC2Bis*Gaudi::Units::cm/2, 0., - (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2); - - const GeoShapeUnion& plug1ModuleMotherNeg = - plug1SubMotherNeg->add(*plug2SubMotherNeg<<plug1SubOffsetNeg); - - lvPlug1ModuleMotherNeg = new GeoLogVol("Plug1Module",&plug1ModuleMotherNeg,matAir); - } else - { lvPlug1ModuleMotherNeg = new GeoLogVol("Plug1Module",plug1SubMotherNeg,matAir); - } - - GeoPhysVol* pvPlug1ModuleMotherNeg = new GeoPhysVol(lvPlug1ModuleMotherNeg); - - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvPlug1ModuleMotherNeg, 3, - dbManager->TILBrmaximal(), - (thicknessWedgeMother > rless) ? dbManager->TILBrminimal() : dbManager->TILBrmin(), - dzGlue, - deltaPhi, - ModuleNcp, - dzITC2Bis); - } - - Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2; - GeoTransform* tfPlug1ModuleMotherNeg = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z)); - - pvITCModuleMotherNeg->add(tfPlug1ModuleMotherNeg); - pvITCModuleMotherNeg->add(pvPlug1ModuleMotherNeg); - - //Mother volume for ITC2 - if (Ifc10) { - - // TILE_PLUG2 - dbManager->SetCurrentSectionByNumber(Ic10); + GeoLogVol* lvGapModuleMotherNeg = new GeoLogVol("GapModule",gapModuleMotherNeg,matAir); + GeoPhysVol* pvGapModuleMotherNeg = new GeoPhysVol(lvGapModuleMotherNeg); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvGapModuleMotherNeg, 5, // probably better to have Igap instead of 5 + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + } + + // Module position inside mother + GeoTransform* xtraGapNeg = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + pvGapMotherNeg->add(zrotMod); + pvGapMotherNeg->add(xtraGapNeg); + pvGapMotherNeg->add(yrotMod); + + pvGapMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvGapMotherNeg->add(pvGapModuleMotherNeg); + } + + //-------------------------- Crack Negative --------------------------------- + if (Ifcrack) { + + // TILE_PLUG4 + dbManager->SetCurrentSectionByNumber(Icrack); + + // mother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - if (dbManager->TILBnperiod() > 1) - { dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - ((dbManager->TILBnperiod()-1)*2*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1)); - } else { dzGlue = 0; // add for special missing C10 modules - } + dzGlue = 0.; - checking("Plug2Module (-)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + checking("CrackModule (-)", spE4, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - GeoTrd* plug2ModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, + GeoTrd* crackModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, thicknessWedgeMother/2, dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2); - - GeoLogVol* lvPlug2ModuleMotherNeg = new GeoLogVol("Plug2Module",plug2ModuleMotherNeg,matAir); - GeoPhysVol* pvPlug2ModuleMotherNeg = new GeoPhysVol(lvPlug2ModuleMotherNeg); - + + GeoLogVol* lvCrackModuleMotherNeg = new GeoLogVol("CrackModule",crackModuleMotherNeg,matAir); + GeoPhysVol* pvCrackModuleMotherNeg = new GeoPhysVol(lvCrackModuleMotherNeg); + // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvPlug2ModuleMotherNeg, Ic10, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - // TILE_PLUG1, D4 - if (Ifd4) { - dbManager->SetCurrentSectionByNumber(Id4); - - GeoTransform* tfPlug2ModuleMotherNeg = new GeoTransform(itcModuleSubShiftNeg); - - pvITCModuleMotherNeg->add(tfPlug2ModuleMotherNeg); - pvITCModuleMotherNeg->add(pvPlug2ModuleMotherNeg); + if (Filling) { + sectionBuilder->fillSection(pvCrackModuleMotherNeg, 6, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); } - }//if C10 + // Module position inside mother + GeoTransform* xtraCrackNeg = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + pvCrackMotherNeg->add(zrotMod); + pvCrackMotherNeg->add(xtraCrackNeg); + pvCrackMotherNeg->add(yrotMod); - double zShift = 0; - NbPeriod = dbManager->TILBnperiod(); - // Z = (dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm; - // ps Zshift calculated from length of volumes rather than modules (account for special modules) - // - Z = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; + pvCrackMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); + pvCrackMotherNeg->add(pvCrackModuleMotherNeg); - if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./Gaudi::Units::cm); + } + } - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ITCModule Negative, position X= "<<X<<" Z= "<<Z - <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift - <<endmsg; + //-------------------------------------- ITC BLOCKS Positive -------------------------------------- + if (EnvType == 5) { - GeoTransform* xtraITCNeg = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - GeoTransform* ztraITCNeg = new GeoTransform(GeoTrf::TranslateZ3D(zShift*Gaudi::Units::cm)); + // Common mother for ITC1/2 modules + if (Ifd4 || Ifc10) { - pvITCMotherNeg->add(zrotMod); - pvITCMotherNeg->add(xtraITCNeg); - pvITCMotherNeg->add(ztraITCNeg); - pvITCMotherNeg->add(yrotMod); + // The first sub shape + thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC1 - rMinITC1) * Gaudi::Units::cm; + dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - pvITCMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvITCMotherNeg->add(pvITCModuleMotherNeg); + checking("ITCModule itcModuleSub2Pos (+)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - }//if(Ifd4 || Ifc10) + GeoTrd* itcModuleSub1Pos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother , + dy2WedgeMother , + heightWedgeMother/2 ); + // The second sub shape + thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; + dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - //-------------------------- G A P Negative --------------------------------- - if (Ifgap) { + checking("ITCModule itcModuleSub2Pos (+)", false, 1, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - // TILE_PLUG3 - dbManager->SetCurrentSectionByNumber(Igap); + GeoTrd* itcModuleSub2Pos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother , + dy2WedgeMother , + heightWedgeMother/2 ); - // Trd - module mother - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + X = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; + Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*Gaudi::Units::cm; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ITCModule Positive, position X= "<<X<<" Z= "<<Z<< endmsg; - dzGlue = 0.; + GeoTrf::Translate3D itcModule_SubShiftPos(X, 0., Z); + const GeoShapeUnion& itcModuleMotherPos = itcModuleSub1Pos->add(*itcModuleSub2Pos<<itcModule_SubShiftPos); - checking("GapModule (-)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + GeoTrf::Translate3D itcModuleSubShiftPos(X, 0., Z); - GeoTrd* gapModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); + GeoLogVol* lvITCModuleMotherPos = new GeoLogVol("ITCModule",&itcModuleMotherPos,matAir); + GeoPhysVol* pvITCModuleMotherPos = new GeoPhysVol(lvITCModuleMotherPos); - GeoLogVol* lvGapModuleMotherNeg = new GeoLogVol("GapModule",gapModuleMotherNeg,matAir); - GeoPhysVol* pvGapModuleMotherNeg = new GeoPhysVol(lvGapModuleMotherNeg); + // Mother volume for ITC1 + // In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: + // 1. Mother for absorber and girder + // 2. Mother for frontplate (since it's short) - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvGapModuleMotherNeg, 5, // probably better to have Igap instead of 5 - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - // Module position inside mother - GeoTransform* xtraGapNeg = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - pvGapMotherNeg->add(zrotMod); - pvGapMotherNeg->add(xtraGapNeg); - pvGapMotherNeg->add(yrotMod); - - pvGapMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvGapMotherNeg->add(pvGapModuleMotherNeg); - } - - //-------------------------- Crack Negative --------------------------------- - if (Ifcrack) { - - // TILE_PLUG4 - dbManager->SetCurrentSectionByNumber(Icrack); - - // mother - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - dzGlue = 0.; - - checking("CrackModule (-)", spE4, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* crackModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvCrackModuleMotherNeg = new GeoLogVol("CrackModule",crackModuleMotherNeg,matAir); - GeoPhysVol* pvCrackModuleMotherNeg = new GeoPhysVol(lvCrackModuleMotherNeg); - - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvCrackModuleMotherNeg, 6, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - // Module position inside mother - GeoTransform* xtraCrackNeg = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - pvCrackMotherNeg->add(zrotMod); - pvCrackMotherNeg->add(xtraCrackNeg); - pvCrackMotherNeg->add(yrotMod); - - pvCrackMotherNeg->add(new GeoIdentifierTag(ModuleNcp)); - pvCrackMotherNeg->add(pvCrackModuleMotherNeg); + // The D4, PLUG1 + dbManager->SetCurrentSectionByNumber(Id4); - } - } + thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * Gaudi::Units::cm; + + // ps changes dzITC1 -> dzmodul + Glue = dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2(); + NbPeriod = dbManager->TILBnperiod(); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzITC1= "<<dzITC1 + <<" TILBdzend1= "<<dbManager->TILBdzend1() + <<" TILBdzend2= "<<dbManager->TILBdzend2() + <<endmsg; + + if (NbPeriod > 6) { + dzGlue = (Glue - 2*NbPeriod * (dbManager->TILBdzmast() + dbManager->TILBdzspac())) / (4.*NbPeriod); + } else { + dzGlue = (Glue - (2*(NbPeriod-1) * (dbManager->TILBdzmast() + dbManager->TILBdzspac()) + + dbManager->TILBdzspac())) / (4.*(NbPeriod-1)); + } - //-------------------------------------- ITC BLOCKS Positive -------------------------------------- - if(EnvType == 5) { - - // Common mother for ITC1/2 modules - if(Ifd4 || Ifc10) { - - // The first sub shape - thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC1 - rMinITC1) * Gaudi::Units::cm; - dy1WedgeMother = rMinITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("ITCModule itcModuleSub2Pos (+)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* itcModuleSub1Pos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother , - dy2WedgeMother , - heightWedgeMother/2 ); - // The second sub shape - thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; - dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("ITCModule itcModuleSub2Pos (+)", false, 1, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* itcModuleSub2Pos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother , - dy2WedgeMother , - heightWedgeMother/2 ); - - X = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; - Z = ((rMinITC2+rMaxITC2)-(rMaxITC1 + rMinITC1))/2*Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ITCModule Positive, position X= "<<X<<" Z= "<<Z<< endmsg; - - GeoTrf::Translate3D itcModule_SubShiftPos(X, 0., Z); - const GeoShapeUnion& itcModuleMotherPos = itcModuleSub1Pos->add(*itcModuleSub2Pos<<itcModule_SubShiftPos); - - GeoTrf::Translate3D itcModuleSubShiftPos(X, 0., Z); - - GeoLogVol* lvITCModuleMotherPos = new GeoLogVol("ITCModule",&itcModuleMotherPos,matAir); - GeoPhysVol* pvITCModuleMotherPos = new GeoPhysVol(lvITCModuleMotherPos); - - // Mother volume for ITC1 - // In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: - // 1. Mother for absorber and girder - // 2. Mother for frontplate (since it's short) - - // The D4, PLUG1 - dbManager->SetCurrentSectionByNumber(Id4); - - thicknessWedgeMother = dzITC1 * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC1 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC1 - dbManager->TILBrmin()) * Gaudi::Units::cm; - - // ps changes dzITC1 -> dzmodul - Glue = dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2(); - NbPeriod = dbManager->TILBnperiod(); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzITC1= "<<dzITC1 - <<" TILBdzend1= "<<dbManager->TILBdzend1() - <<" TILBdzend2= "<<dbManager->TILBdzend2() - <<endmsg; - - if (NbPeriod > 6) - { dzGlue = (Glue - 2*NbPeriod * (dbManager->TILBdzmast() + dbManager->TILBdzspac())) / (4.*NbPeriod); - } else { - dzGlue = (Glue - (2*(NbPeriod-1) * (dbManager->TILBdzmast() + dbManager->TILBdzspac()) - + dbManager->TILBdzspac())) / (4.*(NbPeriod-1)); - } - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzGlue= "<<dzGlue<<" NbPeriod= "<<NbPeriod - <<" TILBdzmast= "<<dbManager->TILBdzmast()<<" TILBdzspac= "<<dbManager->TILBdzspac() - <<endmsg; - - if (dzGlue <= 0.) - {(*m_log) << MSG::WARNING <<" Plug1Module warning: "<<" dzGlue= "<<dzGlue - <<endmsg; - } - - checking("Plug1Module plug1SubMotherPos (+)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* plug1SubMotherPos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother , - dy2WedgeMother , - heightWedgeMother/2 ); - - //Second submother C10, PLUG2 - double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap - thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - if (specialC10) - (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg; - - GeoLogVol *lvPlug1ModuleMotherPos=0; - if (thicknessWedgeMother > rless) - { - heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - checking("Plug1Module plug2SubMotherPos (+)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* plug2SubMotherPos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother , - dy2WedgeMother , - heightWedgeMother/2 ); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" Plug1Module : Glue= "<<Glue<<" dzGlue= "<<dzGlue<<" NbPeriod= "<<NbPeriod + <<" TILBdzmast= "<<dbManager->TILBdzmast()<<" TILBdzspac= "<<dbManager->TILBdzspac() + <<endmsg; - GeoTrf::Translate3D plug1SubOffsetPos(-dzITC2Bis/2*Gaudi::Units::cm, 0., - (dbManager->TILBrminimal()-dbManager->TILBrmaximal())/2*Gaudi::Units::cm); - - const GeoShapeUnion& plug1ModuleMotherPos = plug1SubMotherPos->add(*plug2SubMotherPos<<plug1SubOffsetPos); + if (dzGlue <= 0.) { + (*m_log) << MSG::WARNING <<" Plug1Module warning: "<<" dzGlue= "<<dzGlue + <<endmsg; + } - lvPlug1ModuleMotherPos = new GeoLogVol("Plug1Module",&plug1ModuleMotherPos,matAir); - } else - { lvPlug1ModuleMotherPos = new GeoLogVol("Plug1Module",plug1SubMotherPos,matAir); - } + checking("Plug1Module plug1SubMotherPos (+)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug1SubMotherPos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother , + dy2WedgeMother , + heightWedgeMother/2 ); + + //Second submother C10, PLUG2 + double dzITC2Bis = (specialC10) ? 0.0 : dzITC2; // for special C10 D4 and C10 do not overlap + thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2Bis) * Gaudi::Units::cm; + if (m_log->level()<=MSG::DEBUG) + if (specialC10) + (*m_log) << MSG::DEBUG <<" Separate C10 and D4 in module " << ModuleNcp << endmsg; + + GeoLogVol *lvPlug1ModuleMotherPos=0; + if (thicknessWedgeMother > rless) { + heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + checking("Plug1Module plug2SubMotherPos (+)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug2SubMotherPos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother , + dy2WedgeMother , + heightWedgeMother/2 ); + + GeoTrf::Translate3D plug1SubOffsetPos(-dzITC2Bis/2*Gaudi::Units::cm, 0., + (dbManager->TILBrminimal()-dbManager->TILBrmaximal())/2*Gaudi::Units::cm); + + const GeoShapeUnion& plug1ModuleMotherPos = plug1SubMotherPos->add(*plug2SubMotherPos<<plug1SubOffsetPos); + + lvPlug1ModuleMotherPos = new GeoLogVol("Plug1Module",&plug1ModuleMotherPos,matAir); + } else { + lvPlug1ModuleMotherPos = new GeoLogVol("Plug1Module",plug1SubMotherPos,matAir); + } - GeoPhysVol* pvPlug1ModuleMotherPos = new GeoPhysVol(lvPlug1ModuleMotherPos); - - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvPlug1ModuleMotherPos, 3, - dbManager->TILBrmaximal(), - (thicknessWedgeMother > rless) ? dbManager->TILBrminimal() : dbManager->TILBrmin(), - dzGlue, - deltaPhi, - ModuleNcp, - dzITC2Bis); - } - - Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2; - GeoTransform* tfPlug1ModuleMotherPos = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z)); - - pvITCModuleMotherPos->add(tfPlug1ModuleMotherPos); - pvITCModuleMotherPos->add(pvPlug1ModuleMotherPos); - - //Mother volume for ITC2 Positive - if (Ifc10) { - - // TILE_PLUG2, C10 - dbManager->SetCurrentSectionByNumber(Ic10); - - thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; - heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; - dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - if (dbManager->TILBnperiod() > 1) - { dzGlue = (dzITC2 - dbManager->TILBdzend1() - dbManager->TILBdzend2() - - ((dbManager->TILBnperiod()-1)*2*(dbManager->TILBdzmast() - + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4*(dbManager->TILBnperiod()-1)); - } else { dzGlue = 0; // add for special missing C10 modules - } - - checking("Plug2Module (+)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* plug2ModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, + GeoPhysVol* pvPlug1ModuleMotherPos = new GeoPhysVol(lvPlug1ModuleMotherPos); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvPlug1ModuleMotherPos, 3, + dbManager->TILBrmaximal(), + (thicknessWedgeMother > rless) ? dbManager->TILBrminimal() : dbManager->TILBrmin(), + dzGlue, + deltaPhi, + ModuleNcp, + dzITC2Bis); + } + + Z = (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2; + GeoTransform* tfPlug1ModuleMotherPos = new GeoTransform(GeoTrf::Translate3D(0.,0.,Z)); + + pvITCModuleMotherPos->add(tfPlug1ModuleMotherPos); + pvITCModuleMotherPos->add(pvPlug1ModuleMotherPos); + + //Mother volume for ITC2 Positive + if (Ifc10) { + + // TILE_PLUG2, C10 + dbManager->SetCurrentSectionByNumber(Ic10); + + thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; + heightWedgeMother = (rMaxITC2 - rMinITC2) * Gaudi::Units::cm; + dy1WedgeMother = rMinITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = rMaxITC2 * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + if (dbManager->TILBnperiod() > 1) { + dzGlue = (dzITC2 - dbManager->TILBdzend1() - dbManager->TILBdzend2() + - ((dbManager->TILBnperiod()-1)*2*(dbManager->TILBdzmast() + + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4*(dbManager->TILBnperiod()-1)); + } else { + dzGlue = 0; // add for special missing C10 modules + } + + checking("Plug2Module (+)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* plug2ModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); + + GeoLogVol* lvPlug2ModuleMotherPos = new GeoLogVol("Plug2Module",plug2ModuleMotherPos,matAir); + GeoPhysVol* pvPlug2ModuleMotherPos = new GeoPhysVol(lvPlug2ModuleMotherPos); + + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvPlug2ModuleMotherPos, Ic10, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + } + + // TILE_PLUG1, D4 + if ((Ifd4)) { + dbManager->SetCurrentSectionByNumber(Id4); + + GeoTransform* tfPlug2ModuleMotherPos = new GeoTransform(itcModuleSubShiftPos); + + pvITCModuleMotherPos->add(tfPlug2ModuleMotherPos); + pvITCModuleMotherPos->add(pvPlug2ModuleMotherPos); + } + }//if C10 + + double zShift = 0; + NbPeriod = dbManager->TILBnperiod(); + //ps Z = (dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm; + Z = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; + + if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./Gaudi::Units::cm); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" ITCModule Positive, position X= "<<X<<" Z= "<<Z + <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift + <<endmsg; + + GeoTransform* xtraITCPos = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + GeoTransform* ztraITCPos = new GeoTransform(GeoTrf::TranslateZ3D(zShift*Gaudi::Units::cm)); + + pvITCMotherPos->add(zrotMod); + pvITCMotherPos->add(xtraITCPos); + pvITCMotherPos->add(ztraITCPos); + pvITCMotherPos->add(XYrtMod); + + pvITCMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvITCMotherPos->add(pvITCModuleMotherPos); + + }//if (Ifd4 || Ifc10) + + + //-------------------------- G A P Positive --------------------------------- + if (Ifgap) { + + // TILE_PLUG3 + dbManager->SetCurrentSectionByNumber(Igap); + + // Mother + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + + dzGlue = 0; + + checking("Plug2Module (+)", false, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + + GeoTrd* gapModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, thicknessWedgeMother/2, dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2); - - GeoLogVol* lvPlug2ModuleMotherPos = new GeoLogVol("Plug2Module",plug2ModuleMotherPos,matAir); - GeoPhysVol* pvPlug2ModuleMotherPos = new GeoPhysVol(lvPlug2ModuleMotherPos); - - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvPlug2ModuleMotherPos, Ic10, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - // TILE_PLUG1, D4 - if ((Ifd4)) { - dbManager->SetCurrentSectionByNumber(Id4); - - GeoTransform* tfPlug2ModuleMotherPos = new GeoTransform(itcModuleSubShiftPos); - pvITCModuleMotherPos->add(tfPlug2ModuleMotherPos); - pvITCModuleMotherPos->add(pvPlug2ModuleMotherPos); - } - }//if C10 + GeoLogVol* lvGapModuleMotherPos = new GeoLogVol("GapModule",gapModuleMotherPos,matAir); + GeoPhysVol* pvGapModuleMotherPos = new GeoPhysVol(lvGapModuleMotherPos); - double zShift = 0; - NbPeriod = dbManager->TILBnperiod(); - //ps Z = (dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm; - Z = (dzITC1 - dzITC2)/2*Gaudi::Units::cm; - - if (NbPeriod == 6 && !Ifspecialgirder && fabs(Z) < fabs(zITCStandard)) zShift = zITCStandard*(1./Gaudi::Units::cm); + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvGapModuleMotherPos, 5, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + } - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" ITCModule Positive, position X= "<<X<<" Z= "<<Z - <<" zStandard= "<<zITCStandard<< " zShift= " <<zShift - <<endmsg; + // Module position inside mother + GeoTransform* xtraGapPos = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + pvGapMotherPos->add(zrotMod); + pvGapMotherPos->add(xtraGapPos); + pvGapMotherPos->add(XYrtMod); - GeoTransform* xtraITCPos = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - GeoTransform* ztraITCPos = new GeoTransform(GeoTrf::TranslateZ3D(zShift*Gaudi::Units::cm)); + pvGapMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvGapMotherPos->add(pvGapModuleMotherPos); + } - pvITCMotherPos->add(zrotMod); - pvITCMotherPos->add(xtraITCPos); - pvITCMotherPos->add(ztraITCPos); - pvITCMotherPos->add(XYrtMod); + //-------------------------- Crack Positive --------------------------------- + if (Ifcrack) { - pvITCMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvITCMotherPos->add(pvITCModuleMotherPos); + // TILE_PLUG4 + dbManager->SetCurrentSectionByNumber(Icrack); - }//if(Ifd4 || Ifc10) + // Trd - module mother + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; + heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; + dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + dzGlue = 0.; - //-------------------------- G A P Positive --------------------------------- - if (Ifgap) { + checking("CrackModule (+)", spE4, 2, + thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - // TILE_PLUG3 - dbManager->SetCurrentSectionByNumber(Igap); + GeoTrd* crackModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, + thicknessWedgeMother/2, + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2); - // Mother - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; + GeoLogVol* lvCrackModuleMotherPos = new GeoLogVol("CrackModule",crackModuleMotherPos,matAir); + GeoPhysVol* pvCrackModuleMotherPos = new GeoPhysVol(lvCrackModuleMotherPos); - dzGlue = 0; + // Fill the section + if (Filling) { + sectionBuilder->fillSection(pvCrackModuleMotherPos, 6, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + } - checking("Plug2Module (+)", false, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); + // Module position inside mother + GeoTransform* xtraCrackPos = new GeoTransform(GeoTrf::TranslateX3D( + (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); + pvCrackMotherPos->add(zrotMod); + pvCrackMotherPos->add(xtraCrackPos); + pvCrackMotherPos->add(XYrtMod); - GeoTrd* gapModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); + pvCrackMotherPos->add(new GeoIdentifierTag(ModuleNcp)); + pvCrackMotherPos->add(pvCrackModuleMotherPos); - GeoLogVol* lvGapModuleMotherPos = new GeoLogVol("GapModule",gapModuleMotherPos,matAir); - GeoPhysVol* pvGapModuleMotherPos = new GeoPhysVol(lvGapModuleMotherPos); + } + } - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvGapModuleMotherPos, 5, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - // Module position inside mother - GeoTransform* xtraGapPos = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - pvGapMotherPos->add(zrotMod); - pvGapMotherPos->add(xtraGapPos); - pvGapMotherPos->add(XYrtMod); - - pvGapMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvGapMotherPos->add(pvGapModuleMotherPos); - } - - //-------------------------- Crack Positive --------------------------------- - if (Ifcrack) { - - // TILE_PLUG4 - dbManager->SetCurrentSectionByNumber(Icrack); - - // Trd - module mother - thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; - heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; - dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2*Gaudi::Units::deg) * Gaudi::Units::cm; - - dzGlue = 0.; - - checking("CrackModule (+)", spE4, 2, - thicknessWedgeMother/2,thicknessWedgeMother/2,dy1WedgeMother,dy2WedgeMother,heightWedgeMother/2); - - GeoTrd* crackModuleMotherPos = new GeoTrd(thicknessWedgeMother/2, - thicknessWedgeMother/2, - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2); - - GeoLogVol* lvCrackModuleMotherPos = new GeoLogVol("CrackModule",crackModuleMotherPos,matAir); - GeoPhysVol* pvCrackModuleMotherPos = new GeoPhysVol(lvCrackModuleMotherPos); - - // Fill the section - if (Filling) - { sectionBuilder->fillSection(pvCrackModuleMotherPos, 6, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - } - - // Module position inside mother - GeoTransform* xtraCrackPos = new GeoTransform(GeoTrf::TranslateX3D( - (dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2*Gaudi::Units::cm)); - pvCrackMotherPos->add(zrotMod); - pvCrackMotherPos->add(xtraCrackPos); - pvCrackMotherPos->add(XYrtMod); - - pvCrackMotherPos->add(new GeoIdentifierTag(ModuleNcp)); - pvCrackMotherPos->add(pvCrackModuleMotherPos); + } // if (EnvType == 4 || EnvType == 5) - } - } + zrotMod->unref(); + zrotSaddle->unref(); + }// ModCounter, end - } // if(EnvType == 4 || EnvType == 5) - zrotMod->unref(); - zrotSaddle->unref(); - }// ModCounter, end - - - yrotMod->unref(); - XYrtMod->unref(); + yrotMod->unref(); + XYrtMod->unref(); } @@ -2438,7 +2428,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) double ztrans =0; dbManager->SetCurrentEnvByType(EnvType); - if(EnvType == 1) { + if (EnvType == 1) { GeoTransform* tfBarrelMother; @@ -2449,12 +2439,12 @@ void TileAtlasFactory::create(GeoPhysVol *world) (*m_log) << MSG::INFO <<" Positioning barrel with translation "<<ztrans*Gaudi::Units::cm<< endmsg; - GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); + GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); pvTileEnvelopeBarrel->add(tfBarrelMother); pvTileEnvelopeBarrel->add(ntBarrelModuleMother); pvTileEnvelopeBarrel->add(pvBarrelMother); - + GeoTransform* tfFingerMotherPos; ztrans = (dbManager->GetEnvZLength()*Gaudi::Units::cm/2 - BFingerLengthPos/2 + PosDelta)*(1./Gaudi::Units::cm); @@ -2469,8 +2459,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) pvTileEnvelopeBarrel->add(ntFingerMotherPos); pvTileEnvelopeBarrel->add(pvFingerMotherPos); - if (dbManager->BoolSaddle()) - { GeoTransform* tfSaddleMotherPos; + if (dbManager->BoolSaddle()) { + GeoTransform* tfSaddleMotherPos; ztrans = (dbManager->GetEnvZLength()*Gaudi::Units::cm/2 - BFingerLengthPos + DzSaddleSupport/2 + PosDelta)*(1./Gaudi::Units::cm); @@ -2496,10 +2486,10 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg"); pvTileEnvelopeBarrel->add(tfFingerMotherNeg); pvTileEnvelopeBarrel->add(ntFingerMotherNeg); - pvTileEnvelopeBarrel->add(pvFingerMotherNeg); + pvTileEnvelopeBarrel->add(pvFingerMotherNeg); - if (dbManager->BoolSaddle()) - { GeoTransform* tfSaddleMotherNeg; + if (dbManager->BoolSaddle()) { + GeoTransform* tfSaddleMotherNeg; ztrans = (-dbManager->GetEnvZLength()*Gaudi::Units::cm/2 + BFingerLengthNeg - DzSaddleSupport/2 - NegDelta)*(1./Gaudi::Units::cm); @@ -2511,12 +2501,12 @@ void TileAtlasFactory::create(GeoPhysVol *world) pvTileEnvelopeBarrel->add(ntSaddleMotherNeg); pvTileEnvelopeBarrel->add(pvSaddleMotherNeg); } - } + } - // + // //----------------------------------------- EBarrel Positive ----------------------------------------------------- - if(EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger + if (EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; @@ -2526,159 +2516,159 @@ void TileAtlasFactory::create(GeoPhysVol *world) //-------------------------------------------------------------------------------------------------------------- // CutA in Tile (Positive) (close center) - if(m_fullGeo) { - if (dbManager->BoolCuts()){ - - // Iron1, down - volname = "Iron1"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " Iron1: " << dxIron << " " << dyIron << endmsg; - - GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIron1); - pvEBarrelMotherPos->add(new GeoIdentifierTag(1)); - pvEBarrelMotherPos->add(pvIron1); - - tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherPos->add(tfIron1); - pvEBarrelMotherPos->add(pvIron1); - - // Iron2, middle - volname = "Iron2"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " Iron2: " << dxIron << " " << dyIron << endmsg; - - GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) - * GeoTrf::RotateZ3D(-84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIron2); - pvEBarrelMotherPos->add(new GeoIdentifierTag(2)); - pvEBarrelMotherPos->add(pvIron2); - - tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) - * GeoTrf::RotateZ3D(84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIron2); - pvEBarrelMotherPos->add(pvIron2); - - // Iron3, middle - volname = "Iron3"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " Iron3: " << dxIron << " " << dyIron << endmsg; - - GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIron3); - pvEBarrelMotherPos->add(new GeoIdentifierTag(3)); - pvEBarrelMotherPos->add(pvIron3); - - tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherPos->add(tfIron3); - pvEBarrelMotherPos->add(pvIron3); - - // Heavy Iron Box - volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - - GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIrBoxL); - pvEBarrelMotherPos->add(new GeoIdentifierTag(4)); - pvEBarrelMotherPos->add(pvIrBox); - - GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherPos->add(tfIrBoxR); - pvEBarrelMotherPos->add(pvIrBox); - - // CutB in Tile (Positive) (outer center) - volname = "IrUp"; dbManager->SetCurrentCuts(volname); //>> - dxIr = dbManager->CutsXpos(); - dyIr = dbManager->CutsYpos(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " IrUp: " <<dxIr<< " " <<dyIr<< endmsg; - - GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIrUp); - pvEBarrelMotherPos->add(new GeoIdentifierTag(5)); - pvEBarrelMotherPos->add(pvIrUp); - - tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,-PoZ1) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherPos->add(tfIrUp); - pvEBarrelMotherPos->add(pvIrUp); - - // CutB in Tile (Positive) (outer center) - volname = "IrDw"; dbManager->SetCurrentCuts(volname); //>> - dxIr = dbManager->CutsXpos(); - dyIr = dbManager->CutsYpos(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " IrDw: " <<dxIr<< " " <<dyIr<< endmsg; - - GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) - * GeoTrf::RotateZ3D(70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherPos->add(tfIrDw); - pvEBarrelMotherPos->add(new GeoIdentifierTag(6)); - pvEBarrelMotherPos->add(pvIrDw); - - tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) - * GeoTrf::RotateZ3D(-70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - - pvEBarrelMotherPos->add(tfIrDw); - pvEBarrelMotherPos->add(pvIrDw); - } // end if BoolCuts + if (m_fullGeo) { + if (dbManager->BoolCuts()) { + + // Iron1, down + volname = "Iron1"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " Iron1: " << dxIron << " " << dyIron << endmsg; + + GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIron1); + pvEBarrelMotherPos->add(new GeoIdentifierTag(1)); + pvEBarrelMotherPos->add(pvIron1); + + tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherPos->add(tfIron1); + pvEBarrelMotherPos->add(pvIron1); + + // Iron2, middle + volname = "Iron2"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " Iron2: " << dxIron << " " << dyIron << endmsg; + + GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) + * GeoTrf::RotateZ3D(-84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIron2); + pvEBarrelMotherPos->add(new GeoIdentifierTag(2)); + pvEBarrelMotherPos->add(pvIron2); + + tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) + * GeoTrf::RotateZ3D(84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIron2); + pvEBarrelMotherPos->add(pvIron2); + + // Iron3, middle + volname = "Iron3"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " Iron3: " << dxIron << " " << dyIron << endmsg; + + GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,PoZ2) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIron3); + pvEBarrelMotherPos->add(new GeoIdentifierTag(3)); + pvEBarrelMotherPos->add(pvIron3); + + tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,PoZ2) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherPos->add(tfIron3); + pvEBarrelMotherPos->add(pvIron3); + + // Heavy Iron Box + volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + + GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIrBoxL); + pvEBarrelMotherPos->add(new GeoIdentifierTag(4)); + pvEBarrelMotherPos->add(pvIrBox); + + GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherPos->add(tfIrBoxR); + pvEBarrelMotherPos->add(pvIrBox); + + // CutB in Tile (Positive) (outer center) + volname = "IrUp"; dbManager->SetCurrentCuts(volname); //>> + dxIr = dbManager->CutsXpos(); + dyIr = dbManager->CutsYpos(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " IrUp: " <<dxIr<< " " <<dyIr<< endmsg; + + GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIrUp); + pvEBarrelMotherPos->add(new GeoIdentifierTag(5)); + pvEBarrelMotherPos->add(pvIrUp); + + tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,-PoZ1) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherPos->add(tfIrUp); + pvEBarrelMotherPos->add(pvIrUp); + + // CutB in Tile (Positive) (outer center) + volname = "IrDw"; dbManager->SetCurrentCuts(volname); //>> + dxIr = dbManager->CutsXpos(); + dyIr = dbManager->CutsYpos(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " IrDw: " <<dxIr<< " " <<dyIr<< endmsg; + + GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) + * GeoTrf::RotateZ3D(70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherPos->add(tfIrDw); + pvEBarrelMotherPos->add(new GeoIdentifierTag(6)); + pvEBarrelMotherPos->add(pvIrDw); + + tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,-PoZ1) + * GeoTrf::RotateZ3D(-70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + + pvEBarrelMotherPos->add(tfIrDw); + pvEBarrelMotherPos->add(pvIrDw); + } // end if BoolCuts } //-------------------------------------------------------------------------------------------------------------- // Ext.Barrel - ztrans = (PosEndCrack + (dbManager->GetEnvZLength()*Gaudi::Units::cm - EBFingerLengthPos)/2 + 19.5)*(1./Gaudi::Units::cm); + ztrans = (PosEndCrack + (dbManager->GetEnvZLength()*Gaudi::Units::cm - EBFingerLengthPos)/2 + 19.5)*(1./Gaudi::Units::cm); - GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); - (*m_log) << MSG::INFO <<" Positioning positive ext.barrel with translation "<< ztrans*Gaudi::Units::cm << endmsg; + (*m_log) << MSG::INFO <<" Positioning positive ext.barrel with translation "<< ztrans*Gaudi::Units::cm << endmsg; // GeoNameTag* ntEBarrelMotherPos = new GeoNameTag("EBarrelPos"); pvTileEnvelopePosEndcap->add(tfEBarrelMotherPos); - pvTileEnvelopePosEndcap->add(ntEBarrelMotherPos); + pvTileEnvelopePosEndcap->add(ntEBarrelMotherPos); pvTileEnvelopePosEndcap->add(new GeoIdentifierTag(3)); pvTileEnvelopePosEndcap->add(pvEBarrelMotherPos); // //-------------------------------------------------------------------------------------------------------------- - // Finger - ztrans = (PosEndExBarrel + EBFingerLengthPos/2)*(1./Gaudi::Units::cm); + // Finger + ztrans = (PosEndExBarrel + EBFingerLengthPos/2)*(1./Gaudi::Units::cm); - GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::INFO <<" Positioning positive ext.barrel finger with translation ztrans= "<<ztrans*Gaudi::Units::cm<<endmsg; GeoNameTag* ntEFingerMotherPos = new GeoNameTag("TileEFingerPos"); - pvTileEnvelopePosEndcap->add(tfEFingerMotherPos); + pvTileEnvelopePosEndcap->add(tfEFingerMotherPos); pvTileEnvelopePosEndcap->add(ntEFingerMotherPos); - pvTileEnvelopePosEndcap->add(pvEFingerMotherPos); + pvTileEnvelopePosEndcap->add(pvEFingerMotherPos); //-------------------------------------------------------------------------------------------------------------- // Ext. Saddle Support - if (dbManager->BoolSaddle()) - { ztrans = (PosEndExBarrel + DzSaddleSupport/2)*(1./Gaudi::Units::cm); + if (dbManager->BoolSaddle()) { + ztrans = (PosEndExBarrel + DzSaddleSupport/2)*(1./Gaudi::Units::cm); - GeoTransform* tfESaddleMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTransform* tfESaddleMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::INFO <<" Positioning positive ext.barrel saddle with translation ztrans= "<<ztrans*Gaudi::Units::cm @@ -2686,9 +2676,9 @@ void TileAtlasFactory::create(GeoPhysVol *world) GeoNameTag* ntESaddleMotherPos = new GeoNameTag("TileESaddlePos"); - pvTileEnvelopePosEndcap->add(tfESaddleMotherPos); - pvTileEnvelopePosEndcap->add(ntESaddleMotherPos); - pvTileEnvelopePosEndcap->add(pvESaddleMotherPos); + pvTileEnvelopePosEndcap->add(tfESaddleMotherPos); + pvTileEnvelopePosEndcap->add(ntESaddleMotherPos); + pvTileEnvelopePosEndcap->add(pvESaddleMotherPos); } } @@ -2696,7 +2686,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) //----------------------------------------- EBarrel Negative ----------------------------------------------------- // - if(EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger + if (EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); double thicknessEndPlate = dbManager->TILBdzend1()*Gaudi::Units::cm; @@ -2706,120 +2696,120 @@ void TileAtlasFactory::create(GeoPhysVol *world) //*>------------------------------------------------------------------------------------------------------ // LArPart in Tile (Negative) (close center) - if(m_fullGeo) { - if (dbManager->BoolCuts()){ - // Iron1, down - volname = "Iron1"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - - GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIron1); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(1)); - pvEBarrelMotherNeg->add(pvIron1); - - tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherNeg->add(tfIron1); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(2)); - pvEBarrelMotherNeg->add(pvIron1); - - // Iron2, middle - volname = "Iron2"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - - GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) - * GeoTrf::RotateZ3D(-84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIron2); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(2)); - pvEBarrelMotherNeg->add(pvIron2); - - tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2) - * GeoTrf::RotateZ3D(84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIron2); - pvEBarrelMotherNeg->add(pvIron2); - - // Iron3, middle - volname = "Iron3"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - - GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIron3); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(3)); - pvEBarrelMotherNeg->add(pvIron3); - - tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherNeg->add(tfIron3); - pvEBarrelMotherNeg->add(pvIron3); - - // Heavy Iron Box - volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>> - dxIron = dbManager->CutsXpos(); - dyIron = dbManager->CutsYpos(); - GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIrBoxL); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(4)); - pvEBarrelMotherNeg->add(pvIrBox); - - GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) *GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2) - * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherNeg->add(tfIrBoxR); - pvEBarrelMotherNeg->add(pvIrBox); - - // LArPart in Tile (Positive) (outer center) - volname = "IrUp"; dbManager->SetCurrentCuts(volname); //>> - dxIr = dbManager->CutsXpos(); - dyIr = dbManager->CutsYpos(); - - GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIrUp); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(5)); - pvEBarrelMotherNeg->add(pvIrUp); - - tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,PoZ1) - * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right - pvEBarrelMotherNeg->add(tfIrUp); - pvEBarrelMotherNeg->add(pvIrUp); - - // CutB in Tile (Positive) (outer center) - volname = "IrDw"; dbManager->SetCurrentCuts(volname); //>> - dxIr = dbManager->CutsXpos(); - dyIr = dbManager->CutsYpos(); - - GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) - * GeoTrf::RotateZ3D(70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - pvEBarrelMotherNeg->add(tfIrDw); - pvEBarrelMotherNeg->add(new GeoIdentifierTag(6)); - pvEBarrelMotherNeg->add(pvIrDw); - - tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) - * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,PoZ1) - * GeoTrf::RotateZ3D(-70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left - - pvEBarrelMotherNeg->add(tfIrDw); - pvEBarrelMotherNeg->add(pvIrDw); - } // end if BoolCuts + if (m_fullGeo) { + if (dbManager->BoolCuts()) { + // Iron1, down + volname = "Iron1"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + + GeoTransform* tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIron1); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(1)); + pvEBarrelMotherNeg->add(pvIron1); + + tfIron1 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherNeg->add(tfIron1); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(2)); + pvEBarrelMotherNeg->add(pvIron1); + + // Iron2, middle + volname = "Iron2"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + + GeoTransform* tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) + * GeoTrf::RotateZ3D(-84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIron2); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(2)); + pvEBarrelMotherNeg->add(pvIron2); + + tfIron2 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2) + * GeoTrf::RotateZ3D(84.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIron2); + pvEBarrelMotherNeg->add(pvIron2); + + // Iron3, middle + volname = "Iron3"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + + GeoTransform* tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY+dyIron,-PoZ2) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIron3); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(3)); + pvEBarrelMotherNeg->add(pvIron3); + + tfIron3 = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(-dxIron,PosY+dyIron,-PoZ2) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherNeg->add(tfIron3); + pvEBarrelMotherNeg->add(pvIron3); + + // Heavy Iron Box + volname = "IrBox"; dbManager->SetCurrentCuts(volname); //>> + dxIron = dbManager->CutsXpos(); + dyIron = dbManager->CutsYpos(); + GeoTransform* tfIrBoxL = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::Translate3D(dxIron,PosY-dyIron,-PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIrBoxL); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(4)); + pvEBarrelMotherNeg->add(pvIrBox); + + GeoTransform* tfIrBoxR = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) *GeoTrf::Translate3D(-dxIron,PosY-dyIron,-PoZ2) + * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherNeg->add(tfIrBoxR); + pvEBarrelMotherNeg->add(pvIrBox); + + // LArPart in Tile (Positive) (outer center) + volname = "IrUp"; dbManager->SetCurrentCuts(volname); //>> + dxIr = dbManager->CutsXpos(); + dyIr = dbManager->CutsYpos(); + + GeoTransform* tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIrUp); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(5)); + pvEBarrelMotherNeg->add(pvIrUp); + + tfIrUp = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(-PosXcut-dxIr,-PosYcut+dyIr,PoZ1) + * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Right + pvEBarrelMotherNeg->add(tfIrUp); + pvEBarrelMotherNeg->add(pvIrUp); + + // CutB in Tile (Positive) (outer center) + volname = "IrDw"; dbManager->SetCurrentCuts(volname); //>> + dxIr = dbManager->CutsXpos(); + dyIr = dbManager->CutsYpos(); + + GeoTransform* tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(PosXcut+dxIr,-PosYcut+dyIr,PoZ1) + * GeoTrf::RotateZ3D(70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + pvEBarrelMotherNeg->add(tfIrDw); + pvEBarrelMotherNeg->add(new GeoIdentifierTag(6)); + pvEBarrelMotherNeg->add(pvIrDw); + + tfIrDw = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) + * GeoTrf::Translate3D(-PosXcut+dxIr,-PosYcut+dyIr,PoZ1) + * GeoTrf::RotateZ3D(-70.*Gaudi::Units::deg) * GeoTrf::RotateX3D(90.*Gaudi::Units::deg) * GeoTrf::RotateZ3D(90.*Gaudi::Units::deg)); // Left + + pvEBarrelMotherNeg->add(tfIrDw); + pvEBarrelMotherNeg->add(pvIrDw); + } // end if BoolCuts } // //*>------------------------------------------------------------------------------------------------------ // Ext.Barrel ztrans = (-NegEndCrack - (dbManager->GetEnvZLength()*Gaudi::Units::cm - EBFingerLengthNeg)/2 - 19.5)*(1./Gaudi::Units::cm); - GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); (*m_log) << MSG::INFO <<" Positioning negative ext.barrel with translation ztrans "<<ztrans*Gaudi::Units::cm<<endmsg; - + GeoNameTag* ntEBarrelMotherNeg = new GeoNameTag("EBarrelNeg"); pvTileEnvelopeNegEndcap->add(tfEBarrelMotherNeg); @@ -2829,10 +2819,10 @@ void TileAtlasFactory::create(GeoPhysVol *world) //*>------------------------------------------------------------------------------------------------------ // Finger - ztrans = (-NegEndExBarrel - EBFingerLengthPos/2)*(1./Gaudi::Units::cm); + ztrans = (-NegEndExBarrel - EBFingerLengthPos/2)*(1./Gaudi::Units::cm); - GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); + GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::INFO <<" Positioning negative ext.barrel finger with translation ztrans= "<<ztrans*Gaudi::Units::cm<< endmsg; @@ -2844,18 +2834,18 @@ void TileAtlasFactory::create(GeoPhysVol *world) //*>------------------------------------------------------------------------------------------------------ // Ext. Saddle Support - if (dbManager->BoolSaddle()) - { ztrans = (-NegEndExBarrel - DzSaddleSupport/2)*(1./Gaudi::Units::cm); + if (dbManager->BoolSaddle()) { + ztrans = (-NegEndExBarrel - DzSaddleSupport/2)*(1./Gaudi::Units::cm); - GeoTransform* tfESaddleMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); + GeoTransform* tfESaddleMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::INFO <<" Positioning negative ext.barrel saddle with translation ztrans= "<<ztrans*Gaudi::Units::cm << endmsg; GeoNameTag* ntESaddleMotherNeg = new GeoNameTag("TileESaddleNeg"); - pvTileEnvelopeNegEndcap->add(tfESaddleMotherNeg); + pvTileEnvelopeNegEndcap->add(tfESaddleMotherNeg); pvTileEnvelopeNegEndcap->add(ntESaddleMotherNeg); pvTileEnvelopeNegEndcap->add(pvESaddleMotherNeg); } @@ -2865,7 +2855,7 @@ void TileAtlasFactory::create(GeoPhysVol *world) // ---------------------------------------- ITC Positive ----------------------------------------------------- // - if(EnvType == 5) { // positive ITC attached to positive ext.barrel + if (EnvType == 5) { // positive ITC attached to positive ext.barrel dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); @@ -2873,11 +2863,11 @@ void TileAtlasFactory::create(GeoPhysVol *world) //std::cout <<" ztrans "<<ztrans<<" PosEndBarrelFinger/Gaudi::Units::cm "<<PosEndBarrelFinger/Gaudi::Units::cm // <<" dbManager->TILBdzmodul()/2*Gaudi::Units::cm"<<dbManager->TILBdzmodul()/2<<"\n"; - + (*m_log) << MSG::INFO <<" Positioning positive ITC with translation "<<ztrans*Gaudi::Units::cm<< endmsg; - GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); + GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); GeoNameTag* ntITCMotherPos = new GeoNameTag("ITCPos"); @@ -2890,8 +2880,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) (*m_log) << MSG::INFO <<" Positioning positive Gap with translation "<<ztrans*Gaudi::Units::cm<<endmsg; - GeoTransform* tfGapMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfGapMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); GeoNameTag* ntGapMotherPos = new GeoNameTag("GapPos"); @@ -2905,34 +2895,34 @@ void TileAtlasFactory::create(GeoPhysVol *world) (*m_log) << MSG::INFO <<" Positioning positive Crack with translation "<<ztrans*Gaudi::Units::cm<<endmsg; - GeoTransform* tfCrackMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); - + GeoTransform* tfCrackMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoNameTag* ntCrackMotherPos = new GeoNameTag("CrackPos"); pvTileEnvelopePosEndcap->add(tfCrackMotherPos); pvTileEnvelopePosEndcap->add(ntCrackMotherPos); pvTileEnvelopePosEndcap->add(pvCrackMotherPos); - } - + } + // // ---------------------------------------- ITC Negative ----------------------------------------------------- // // negative ITC attached to negative ext.barrel - if(EnvType == 4) { + if (EnvType == 4) { dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); ztrans = -NegEndBarrelFinger*(1./Gaudi::Units::cm) - dbManager->TILBdzmodul()/2; (*m_log) << MSG::INFO <<" Positioning negative ITC with translation "<<ztrans*Gaudi::Units::cm<<endmsg; - GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); GeoNameTag* ntITCMotherNeg = new GeoNameTag("ITCNeg"); - pvTileEnvelopeNegEndcap->add(tfITCMotherNeg); + pvTileEnvelopeNegEndcap->add(tfITCMotherNeg); pvTileEnvelopeNegEndcap->add(ntITCMotherNeg); pvTileEnvelopeNegEndcap->add(pvITCMotherNeg); @@ -2941,14 +2931,14 @@ void TileAtlasFactory::create(GeoPhysVol *world) (*m_log) << MSG::INFO <<" Positioning negative Gap with translation "<<ztrans*Gaudi::Units::cm<<endmsg; - GeoTransform* tfGapMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfGapMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); GeoNameTag* ntGapMotherNeg = new GeoNameTag("GapNeg"); pvTileEnvelopeNegEndcap->add(tfGapMotherNeg); pvTileEnvelopeNegEndcap->add(ntGapMotherNeg); - pvTileEnvelopeNegEndcap->add(pvGapMotherNeg); + pvTileEnvelopeNegEndcap->add(pvGapMotherNeg); // Crack dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); @@ -2956,8 +2946,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) (*m_log) << MSG::INFO <<" Positioning negative Crack with translation "<<ztrans*Gaudi::Units::cm<<endmsg; - GeoTransform* tfCrackMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* - GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); + GeoTransform* tfCrackMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm)* + GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()*Gaudi::Units::deg)); GeoNameTag* ntCrackMotherNeg = new GeoNameTag("CrackNeg"); @@ -2968,79 +2958,78 @@ void TileAtlasFactory::create(GeoPhysVol *world) } } // EnvCounter, end - // - // creating Descriptiors and CaloDetDescrElements - // - (*m_log) << MSG::DEBUG << "Creating descriptors for " << dbManager->GetNumberOfEnv() << " envelopes..." << endmsg; - - int nModulesInSection[6] = {0,0,0,0,0,0}; - double zShiftInSection[6] = {0.0,0.0,0.0,0.0,0.0,0.0,}; - - - for(int EnvCounter = 0; EnvCounter < dbManager->GetNumberOfEnv(); ++EnvCounter){ //Loop over Envelopes - - dbManager->SetCurrentEnvByIndex(EnvCounter); - int EnvType = dbManager->GetEnvType(); - int NumberOfMod = dbManager->GetEnvNModules(); - double Zshift = dbManager->GetEnvZShift()*Gaudi::Units::cm; - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG - << " EnvCounter is " << EnvCounter - << " EnvType is " << EnvType - << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" - << endmsg; - - // Central barrel - if(EnvType == 1 || EnvType == 0) { - nModulesInSection[0] = nModulesInSection[1] = NumberOfMod; - zShiftInSection[0] = zShiftInSection[1] = Zshift; - } else if(EnvType < 6) { - nModulesInSection[EnvType] = NumberOfMod; - zShiftInSection[EnvType] = Zshift; - } - } - - const TileID* tileID = m_detectorManager->get_id(); - - unsigned int dete[6] = {TILE_REGION_CENTRAL,TILE_REGION_CENTRAL,TILE_REGION_EXTENDED,TILE_REGION_EXTENDED, - TILE_REGION_GAP,TILE_REGION_GAP}; - int side[6] = {0,1,0,1,0,1}; - - - (*m_log) << MSG::DEBUG << "Loop over Tile detector regions, and call computeCellDim() when needed..." << endmsg; - for (int ii=0; ii<6; ++ii) { - - (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << endmsg; - - if (ii%2 == 0) { - (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << " --> calling computeCellDim()..." << endmsg; - sectionBuilder->computeCellDim(m_detectorManager, dete[ii], - m_switches.addPlatesToCell, - zShiftInSection[ii+1], // zShiftPos - zShiftInSection[ii]); // zShiftNeg - } - - (*m_log) << MSG::DEBUG << "calling fillDescriptor()..." << endmsg; - TileDetDescriptor* descriptor = new TileDetDescriptor(); - sectionBuilder->fillDescriptor(descriptor, dete[ii], side[ii], - m_switches.testBeam, // set to false - ATLAS geometry - m_switches.addPlatesToCell, // add front/end plates to cell volume - nModulesInSection[ii], // 0-64 modules - zShiftInSection[ii]); // Z-shift - - (*m_log) << MSG::DEBUG << "Get an Identifier for the region and add it to the detectorManager..." << endmsg; - Identifier idRegion = tileID->region_id(ii); - descriptor->set(idRegion); - m_detectorManager->add(descriptor); - m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); - } - - // --------- ----------- --------- -------- ------ --------- ------- ---------- + // + // creating Descriptiors and CaloDetDescrElements + // + (*m_log) << MSG::DEBUG << "Creating descriptors for " << dbManager->GetNumberOfEnv() << " envelopes..." << endmsg; + + int nModulesInSection[6] = {0,0,0,0,0,0}; + double zShiftInSection[6] = {0.0,0.0,0.0,0.0,0.0,0.0,}; + + + for (int EnvCounter = 0; EnvCounter < dbManager->GetNumberOfEnv(); ++EnvCounter) { //Loop over Envelopes + + dbManager->SetCurrentEnvByIndex(EnvCounter); + int EnvType = dbManager->GetEnvType(); + int NumberOfMod = dbManager->GetEnvNModules(); + double Zshift = dbManager->GetEnvZShift()*Gaudi::Units::cm; + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG + << " EnvCounter is " << EnvCounter + << " EnvType is " << EnvType + << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" + << endmsg; + + // Central barrel + if (EnvType == 1 || EnvType == 0) { + nModulesInSection[0] = nModulesInSection[1] = NumberOfMod; + zShiftInSection[0] = zShiftInSection[1] = Zshift; + } else if (EnvType < 6) { + nModulesInSection[EnvType] = NumberOfMod; + zShiftInSection[EnvType] = Zshift; + } + } + + const TileID* tileID = m_detectorManager->get_id(); + + unsigned int dete[6] = {TILE_REGION_CENTRAL,TILE_REGION_CENTRAL,TILE_REGION_EXTENDED,TILE_REGION_EXTENDED, + TILE_REGION_GAP,TILE_REGION_GAP}; + int side[6] = {0,1,0,1,0,1}; + + + (*m_log) << MSG::DEBUG << "Loop over Tile detector regions, and call computeCellDim() when needed..." << endmsg; + for (int ii=0; ii<6; ++ii) { + + (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << endmsg; + + if (ii%2 == 0) { + (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << " --> calling computeCellDim()..." << endmsg; + sectionBuilder->computeCellDim(m_detectorManager, dete[ii], + m_switches.addPlatesToCell, + zShiftInSection[ii+1], // zShiftPos + zShiftInSection[ii]); // zShiftNeg + } + + (*m_log) << MSG::DEBUG << "calling fillDescriptor()..." << endmsg; + TileDetDescriptor* descriptor = new TileDetDescriptor(); + sectionBuilder->fillDescriptor(descriptor, dete[ii], side[ii], + m_switches.testBeam, // set to false - ATLAS geometry + m_switches.addPlatesToCell, // add front/end plates to cell volume + nModulesInSection[ii], // 0-64 modules + zShiftInSection[ii]); // Z-shift + + (*m_log) << MSG::DEBUG << "Get an Identifier for the region and add it to the detectorManager..." << endmsg; + Identifier idRegion = tileID->region_id(ii); + descriptor->set(idRegion); + m_detectorManager->add(descriptor); + m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); + } + + // --------- ----------- --------- -------- ------ --------- ------- ---------- GeoNameTag *nTag = new GeoNameTag("Tile"); - if(BAR) - { + if (BAR) { world->add(nTag); // Top transform for the Central barrel @@ -3060,11 +3049,10 @@ void TileAtlasFactory::create(GeoPhysVol *world) world->add(pvTileEnvelopeBarrel); m_detectorManager->addTreeTop(pvTileEnvelopeBarrel); } - - if(EBA) - { + + if (EBA) { world->add(nTag); - + // Top transform for the Positive endcap dbManager->SetCurrentEnvByType(3); GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()); @@ -3082,9 +3070,8 @@ void TileAtlasFactory::create(GeoPhysVol *world) world->add(pvTileEnvelopePosEndcap); m_detectorManager->addTreeTop(pvTileEnvelopePosEndcap); } - - if(EBC) - { + + if (EBC) { world->add(nTag); // Top transform for the Negative endcap @@ -3114,25 +3101,24 @@ void TileAtlasFactory::create(GeoPhysVol *world) // Checking geometry dimensions for all directions void TileAtlasFactory::checking(const std::string& Name, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z) + double X1, double X2, double Y1, double Y2, double Z) { double rless = .150; //150 [mkm] std::string Step[8] = {" "," "," "," "," "," "," "," "}; - if (print) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<Step[level]<<Name<<"-"<<level - <<" dX1,dX2= "<<X1<<","<<X2<<" dY1,dY2= "<<Y1<<","<<Y2<<",dZ= "<<Z - <<endmsg; - } - if (X1 < rless && X2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; - } - if (Y1 < rless && Y2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; - } - if (Z < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; - } -} + if (print) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<Step[level]<<Name<<"-"<<level + <<" dX1,dX2= "<<X1<<","<<X2<<" dY1,dY2= "<<Y1<<","<<Y2<<",dZ= "<<Z + <<endmsg; + } + if (X1 < rless && X2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; + } + if (Y1 < rless && Y2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; + } + if (Z < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; + } +} diff --git a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.h b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.h index 568ab488a464aa6688b97fb05a7d896148673294..d8df7d52d885d492bee9ca1e7236352a16424770 100755 --- a/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.h +++ b/TileCalorimeter/TileGeoModel/src/TileAtlasFactory.h @@ -21,17 +21,18 @@ class MsgStream; class StoreGateSvc; + class TileAtlasFactory : public GeoVDetectorFactory { -public: - + public: + /** Constructor */ TileAtlasFactory(StoreGateSvc *pDetStore, TileDetDescrManager *manager, const TileSwitches & switches, MsgStream *log, bool fullGeo); - + /** Destructor */ ~TileAtlasFactory(); - + /** Creation of Tile geometry */ virtual void create(GeoPhysVol *world); @@ -45,14 +46,14 @@ public: @param X1,X2,Y1,Y2,DZ - checking variables */ void checking(const std::string& VolumeName, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z); + double X1, double X2, double Y1, double Y2, double Z); + + private: -private: - /** Detector pointer to Store Gate service */ StoreGateSvc *m_detectorStore; - /** Detector pointer to TileDetDescrManager */ + /** Detector pointer to TileDetDescrManager */ TileDetDescrManager *m_detectorManager; /** Get message SVC */ @@ -69,4 +70,3 @@ private: }; #endif - diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx index 697a233431d090ba708f055c7486a55a2a8e3cb3..4bc44db3ea2e4e4623d318ada27978b6bf71bd20 100755 --- a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "TileDetectorFactory.h" @@ -34,34 +34,33 @@ #include "GaudiKernel/MsgStream.h" #include "GaudiKernel/SystemOfUnits.h" -#include <stdexcept> -#include <iostream> - using namespace GeoGenfun; using namespace GeoXF; - + // Constructor: TileDetectorFactory::TileDetectorFactory(StoreGateSvc *pDetStore, TileDetDescrManager *manager, const TileSwitches & switches, MsgStream *log) - : m_detectorStore(pDetStore) - , m_detectorManager(manager) - , m_log(log) - , m_switches(switches) - , m_verbose(log->level()<=MSG::VERBOSE) + : m_detectorStore(pDetStore) + , m_detectorManager(manager) + , m_log(log) + , m_switches(switches) + , m_verbose(log->level()<=MSG::VERBOSE) { m_switches.testBeam = false; } - + + // Destructor: TileDetectorFactory::~TileDetectorFactory() { } - + + // Creation of geometry: -void TileDetectorFactory::create(GeoPhysVol *world) +void TileDetectorFactory::create(GeoPhysVol *world) { (*m_log) << MSG::INFO <<" Entering TileDetectorFactory::create()" << endmsg; @@ -77,10 +76,9 @@ void TileDetectorFactory::create(GeoPhysVol *world) // -------- -------- MATERIAL MANAGER -------- ---------- StoredMaterialManager* theMaterialManager = nullptr; - if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) - { - (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; - return; + if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) { + (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; + return; } const GeoMaterial* matAir = theMaterialManager->getMaterial("std::Air"); @@ -89,7 +87,7 @@ void TileDetectorFactory::create(GeoPhysVol *world) TileGeoSectionBuilder* sectionBuilder = new TileGeoSectionBuilder(theMaterialManager,dbManager,m_switches,m_log); // --------------- TILE ------- TILE --------- TILE ---------- TILE ------------ - // Envelope creation. + // Envelope creation. // Building three tree tops for standard setup and only one for commissioning GeoLogVol *lvTileEnvelopeBarrel = 0, *lvTileEnvelopePosEndcap = 0, *lvTileEnvelopeNegEndcap = 0; GeoPhysVol *pvTileEnvelopeBarrel = 0, *pvTileEnvelopePosEndcap = 0, *pvTileEnvelopeNegEndcap = 0; @@ -97,8 +95,7 @@ void TileDetectorFactory::create(GeoPhysVol *world) bool globalsExist = dbManager->GetNumberOfEnv()!=0; int ModuleNcp =0; - if(dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL)) { // Z planes dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); double endCentralBarrel = dbManager->TILBdzmodul()/2.*Gaudi::Units::cm; @@ -118,10 +115,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) // Offsets /* sb - double shiftSec1 = (beginCrack + endCentralBarrel)/2.; - double shiftSec2 = (endCrack + beginCrack)/2.; - double shiftSec3 = (endExtendedBarrel + endCrack)/2.; - double shiftSec4 = (endTile + endExtendedBarrel)/2.; + double shiftSec1 = (beginCrack + endCentralBarrel)/2.; + double shiftSec2 = (endCrack + beginCrack)/2.; + double shiftSec3 = (endExtendedBarrel + endCrack)/2.; + double shiftSec4 = (endTile + endExtendedBarrel)/2.; */ // R minimals @@ -136,10 +133,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); double rminExtended = dbManager->TILBrminimal()*Gaudi::Units::cm; double rminFinger = dbManager->TILBrmax()*Gaudi::Units::cm; - + // R maximal double rmaxTotal = dbManager->TILErmam()*Gaudi::Units::cm; - + GeoPcon* tileEnvPconeBarrel = new GeoPcon(0, 360*Gaudi::Units::deg); GeoPcon* tileEnvPconePosEndcap = new GeoPcon(0, 360*Gaudi::Units::deg); GeoPcon* tileEnvPconeNegEndcap = new GeoPcon(0, 360*Gaudi::Units::deg); @@ -155,7 +152,7 @@ void TileDetectorFactory::create(GeoPhysVol *world) tileEnvPconeNegEndcap->addPlane(-beginITC2,rminITC,rmaxTotal); tileEnvPconeNegEndcap->addPlane(-beginITC2,rminITC1,rmaxTotal); tileEnvPconeNegEndcap->addPlane(-endBarrelFinger,rminITC1,rmaxTotal); - // Barrel + // Barrel tileEnvPconeBarrel->addPlane(-endBarrelFinger,rminFinger,rmaxTotal); tileEnvPconeBarrel->addPlane(-endCentralBarrel,rminFinger,rmaxTotal); @@ -185,20 +182,18 @@ void TileDetectorFactory::create(GeoPhysVol *world) pvTileEnvelopeNegEndcap = new GeoPhysVol(lvTileEnvelopeNegEndcap); /* - const GeoShape& bbqEnvelope = ((*tileEnvPconeBarrel)<<GeoTrf::TranslateX3D(1000.)). + const GeoShape& bbqEnvelope = ((*tileEnvPconeBarrel)<<GeoTrf::TranslateX3D(1000.)). add(((*tileEnvPconePosEndcap)<<GeoTrf::TranslateZ3D(0.))). add(((*tileEnvPconeNegEndcap)<<GeoTrf::TranslateZ3D(0.))); - lvTileEnvelope = new GeoLogVol("Tile",&bbqEnvelope,matAir); - pvTileEnvelope = new GeoPhysVol(lvTileEnvelope); + lvTileEnvelope = new GeoLogVol("Tile",&bbqEnvelope,matAir); + pvTileEnvelope = new GeoPhysVol(lvTileEnvelope); - pvTileEnvelope->add(new GeoTransform(GeoTrf::TranslateX3D(1000.))); - pvTileEnvelope->add(pvTileEnvelopeBarrel); - pvTileEnvelope->add(pvTileEnvelopePosEndcap); - pvTileEnvelope->add(pvTileEnvelopeNegEndcap); + pvTileEnvelope->add(new GeoTransform(GeoTrf::TranslateX3D(1000.))); + pvTileEnvelope->add(pvTileEnvelopeBarrel); + pvTileEnvelope->add(pvTileEnvelopePosEndcap); + pvTileEnvelope->add(pvTileEnvelopeNegEndcap); */ - } - else - { + } else { dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); dbManager->SetCurrentTifg(1); @@ -209,10 +204,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) // R minimals double rminBarrel = dbManager->TILBrminimal()*Gaudi::Units::cm; double rminFinger = dbManager->TILBrmax()*Gaudi::Units::cm; - + // R maximal double rmaxTotal = dbManager->TILErmam()*Gaudi::Units::cm; - + GeoPcon* tileEnvPconeBarrel = new GeoPcon(0, 360*Gaudi::Units::deg); tileEnvPconeBarrel->addPlane(-endEnvelope,rminFinger,rmaxTotal); tileEnvPconeBarrel->addPlane(-endCentralBarrel,rminFinger,rmaxTotal); @@ -236,12 +231,11 @@ void TileDetectorFactory::create(GeoPhysVol *world) //------------------------------- B A R R E L -------------------------------------- // Tube - barrel mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL)) { GeoTube* barrelMother = new GeoTube(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILErmam()*Gaudi::Units::cm, - dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); + dbManager->TILErmam()*Gaudi::Units::cm, + dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); GeoLogVol* lvBarrelMother = new GeoLogVol("Barrel",barrelMother,matAir); GeoFullPhysVol* pvBarrelMother = new GeoFullPhysVol(lvBarrelMother); @@ -255,47 +249,46 @@ void TileDetectorFactory::create(GeoPhysVol *world) dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); GeoTrd* barrelModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); - + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); + GeoLogVol* lvBarrelModuleMother = new GeoLogVol("BarrelModule",barrelModuleMother,matAir); GeoPhysVol* pvBarrelModuleMother = new GeoPhysVol(lvBarrelModuleMother); // Fill the section sectionBuilder->fillSection(pvBarrelModuleMother, - 1, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); + 1, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); /* - // Position N barrel modules inside barrel mother - for (j=0; j<dbManager->TILEnmodul(); j++) - { - phi = j*deltaPhi; - - GeoTransform* zrotateMod = new GeoTransform(GeoTrf::RotateZ3D(phi*Gaudi::Units::deg)); - GeoTransform* xtransMod = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2. * cm)); - GeoTransform* yrotateMod = new GeoTransform(GeoTrf::RotateY3D(90*Gaudi::Units::deg)); - - pvBarrelMother->add(zrotateMod); - pvBarrelMother->add(xtransMod); - pvBarrelMother->add(yrotateMod); - pvBarrelMother->add(pvBarrelModuleMother); - } +// Position N barrel modules inside barrel mother +for (j=0; j<dbManager->TILEnmodul(); j++) { +phi = j*deltaPhi; + +GeoTransform* zrotateMod = new GeoTransform(GeoTrf::RotateZ3D(phi*Gaudi::Units::deg)); +GeoTransform* xtransMod = new GeoTransform(GeoTrf::TranslateX3D((dbManager->TILBrmaximal() + dbManager->TILBrminimal())/2. * cm)); +GeoTransform* yrotateMod = new GeoTransform(GeoTrf::RotateY3D(90*Gaudi::Units::deg)); + +pvBarrelMother->add(zrotateMod); +pvBarrelMother->add(xtransMod); +pvBarrelMother->add(yrotateMod); +pvBarrelMother->add(pvBarrelModuleMother); +} */ // --- Using the parameterization ----- TRANSFUNCTION xfBarrelModuleMother = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stBarrelModuleMother = new GeoSerialTransformer(pvBarrelModuleMother, - &xfBarrelModuleMother, - dbManager->TILEnmodul()); + &xfBarrelModuleMother, + dbManager->TILEnmodul()); pvBarrelMother->add(new GeoSerialIdentifier(1)); pvBarrelMother->add(stBarrelModuleMother); - + GeoNameTag* ntBarrelMother = new GeoNameTag("TileBarrel"); pvTileEnvelopeBarrel->add(ntBarrelMother); pvTileEnvelopeBarrel->add(pvBarrelMother); @@ -303,48 +296,46 @@ void TileDetectorFactory::create(GeoPhysVol *world) int nModules; float zShift; - - if(globalsExist) - { + + if (globalsExist) { dbManager->SetCurrentEnvByType(1); nModules=dbManager->GetEnvNModules(); zShift=dbManager->GetEnvZShift()*Gaudi::Units::cm; - sectionBuilder->computeCellDim(m_detectorManager, + sectionBuilder->computeCellDim(m_detectorManager, TILE_REGION_CENTRAL, m_switches.addPlatesToCell, zShift, // shift for positive eta (normally zero) zShift); // shift for negative eta is the same - } else - { + } else { nModules=dbManager->TILEnmodul(); zShift=0.0; - // do not compute cell volumes for old setups (before DC3), + // do not compute cell volumes for old setups (before DC3), // because cell-size table might be missing in DB } - + // -- Readout // Create two descriptor objects corresponding to positive and negative half of central barrel TileDetDescriptor* descriptor = new TileDetDescriptor(); sectionBuilder->fillDescriptor(descriptor, - TILE_REGION_CENTRAL, + TILE_REGION_CENTRAL, negSide, m_switches.testBeam, m_switches.addPlatesToCell, nModules, zShift); - + Identifier idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - m_detectorManager->add(descriptor); + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); - + descriptor = new TileDetDescriptor(); sectionBuilder->fillDescriptor(descriptor, - TILE_REGION_CENTRAL, + TILE_REGION_CENTRAL, posSide, m_switches.testBeam, m_switches.addPlatesToCell, @@ -353,19 +344,18 @@ void TileDetectorFactory::create(GeoPhysVol *world) idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - - m_detectorManager->add(descriptor); + + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); //-------------------------- E X T E N D E D B A R R E L --------------------------------- // Tube - barrel mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL)) - { - + if (dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL)) { + GeoTube* ebarrelMother = new GeoTube(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILErmam()*Gaudi::Units::cm, - dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); + dbManager->TILErmam()*Gaudi::Units::cm, + dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); GeoLogVol* lvEBarrelMother = new GeoLogVol("EBarrel",ebarrelMother,matAir); GeoFullPhysVol* pvEBarrelMotherPos = new GeoFullPhysVol(lvEBarrelMother); @@ -378,41 +368,41 @@ void TileDetectorFactory::create(GeoPhysVol *world) dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* ebarrelModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); GeoLogVol* lvEBarrelModuleMother = new GeoLogVol("EBarrelModule",ebarrelModuleMother,matAir); GeoPhysVol* pvEBarrelModuleMother = new GeoPhysVol(lvEBarrelModuleMother); - + // Fill the section sectionBuilder->fillSection(pvEBarrelModuleMother, - 2, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); + 2, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stEBarrelModuleMotherPos = new GeoSerialTransformer(pvEBarrelModuleMother, - &xfEBarrelModuleMotherPos, - dbManager->TILEnmodul()); + &xfEBarrelModuleMotherPos, + dbManager->TILEnmodul()); - pvEBarrelMotherPos->add(new GeoSerialIdentifier(1)); + pvEBarrelMotherPos->add(new GeoSerialIdentifier(1)); pvEBarrelMotherPos->add(stEBarrelModuleMotherPos); GeoSerialTransformer* stEBarrelModuleMotherNeg = new GeoSerialTransformer(pvEBarrelModuleMother, - &xfEBarrelModuleMotherNeg, - dbManager->TILEnmodul()); + &xfEBarrelModuleMotherNeg, + dbManager->TILEnmodul()); - pvEBarrelMotherNeg->add(new GeoSerialIdentifier(1)); + pvEBarrelMotherNeg->add(new GeoSerialIdentifier(1)); pvEBarrelMotherNeg->add(stEBarrelModuleMotherNeg); @@ -422,7 +412,7 @@ void TileDetectorFactory::create(GeoPhysVol *world) pvTileEnvelopePosEndcap->add(ntEBarrelMotherPos); pvTileEnvelopePosEndcap->add(pvEBarrelMotherPos); - + GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntEBarrelMotherNeg = new GeoNameTag("TileEBarrelNeg"); pvTileEnvelopeNegEndcap->add(tfEBarrelMotherNeg); @@ -432,9 +422,8 @@ void TileDetectorFactory::create(GeoPhysVol *world) int nModulesNeg,nModulesPos; float zShiftNeg,zShiftPos; - - if(globalsExist) - { + + if (globalsExist) { dbManager->SetCurrentEnvByType(2); nModulesNeg=dbManager->GetEnvNModules(); zShiftNeg=dbManager->GetEnvZShift()*Gaudi::Units::cm; @@ -447,53 +436,51 @@ void TileDetectorFactory::create(GeoPhysVol *world) m_switches.addPlatesToCell, zShiftPos, // shift for positive eta zShiftNeg); // shift for negative eta - } else - { + } else { nModulesPos=nModulesNeg=dbManager->TILEnmodul(); zShiftPos=zShiftNeg=dbManager->TILEzshift()*Gaudi::Units::cm; - // do not compute cell volumes for old setups (before DC3), + // do not compute cell volumes for old setups (before DC3), // because cell-size table might be missing in DB } - + // -- Readout // Create two descriptor objects corresponding to positive and negative half of extended barrel descriptor = new TileDetDescriptor(); sectionBuilder->fillDescriptor(descriptor, - TILE_REGION_EXTENDED, + TILE_REGION_EXTENDED, negSide, m_switches.testBeam, m_switches.addPlatesToCell, nModulesNeg, zShiftNeg); - + idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - - m_detectorManager->add(descriptor); + + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); - + descriptor = new TileDetDescriptor(); sectionBuilder->fillDescriptor(descriptor, - TILE_REGION_EXTENDED, + TILE_REGION_EXTENDED, posSide, m_switches.testBeam, m_switches.addPlatesToCell, nModulesPos, zShiftPos); - + idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - - m_detectorManager->add(descriptor); + + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); //-------------------------- I T C --------------------------------- // Tube - barrel mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2)) { //sb double rMinITC = dbManager->TILBrminimal(); double rMinITC2 = dbManager->TILBrminimal(); double rMaxITC2 = dbManager->TILBrmaximal(); @@ -502,8 +489,8 @@ void TileDetectorFactory::create(GeoPhysVol *world) dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); GeoTube* itcWheel1 = new GeoTube(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILErmam()*Gaudi::Units::cm, - dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); + dbManager->TILErmam()*Gaudi::Units::cm, + dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); GeoTube* itcWheel2 = new GeoTube(rMinITC2*Gaudi::Units::cm,rMaxITC2*Gaudi::Units::cm,dzITC2/2.*Gaudi::Units::cm); GeoTrf::Translate3D itcWheel2OffsetPos(0.,0.,(dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm); @@ -527,10 +514,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) dy2WedgeMother = dbManager->TILBrmaximal()* tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; GeoTrd* itcModuleSub1 = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); // -- second sub shape thicknessWedgeMother = dzITC2 * Gaudi::Units::cm; @@ -539,14 +526,14 @@ void TileDetectorFactory::create(GeoPhysVol *world) dy2WedgeMother = rMaxITC2* tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; GeoTrd* itcModuleSub2 = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); GeoTrf::Translate3D itcModuleSubShift ((dbManager->TILBdzmodul()-dzITC2)/2*Gaudi::Units::cm, - 0., - ((rMinITC2+rMaxITC2)-(dbManager->TILBrmaximal()+dbManager->TILBrminimal()))/2.*Gaudi::Units::cm); + 0., + ((rMinITC2+rMaxITC2)-(dbManager->TILBrmaximal()+dbManager->TILBrminimal()))/2.*Gaudi::Units::cm); const GeoShapeUnion& itcModuleMother = itcModuleSub1->add(*itcModuleSub2<<itcModuleSubShift); @@ -557,85 +544,85 @@ void TileDetectorFactory::create(GeoPhysVol *world) //In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: // 1. Mother for absorber and girder // 2. Mother for frontplate (since it's short) - + //First submother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* plug1SubMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); //Second submother thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* plug2SubMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); - + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); + GeoTrf::Translate3D plug1SubOffset(-dzITC2*Gaudi::Units::cm/2., - 0., - (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); - + 0., + (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); + const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset); GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir); GeoPhysVol* pvPlug1ModuleMother = new GeoPhysVol(lvPlug1ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug1ModuleMother, 3, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi, ModuleNcp, - dzITC2); - + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi, ModuleNcp, + dzITC2); + GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0., - 0., - (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2.)); - + 0., + (dbManager->TILBrmin()-dbManager->TILBrminimal())*Gaudi::Units::cm/2.)); + pvITCModuleMother->add(tfPlug1ModuleMother); pvITCModuleMother->add(pvPlug1ModuleMother); - + //Mother volume for ITC2 dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); - + thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1)); - + GeoTrd* plug2ModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); - + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); + GeoLogVol* lvPlug2ModuleMother = new GeoLogVol("Plug2Module",plug2ModuleMother,matAir); GeoPhysVol* pvPlug2ModuleMother = new GeoPhysVol(lvPlug2ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug2ModuleMother, - 4, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - + 4, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); - + GeoTransform* tfPlug2ModuleMother = new GeoTransform(itcModuleSubShift); pvITCModuleMother->add(tfPlug2ModuleMother); @@ -646,25 +633,25 @@ void TileDetectorFactory::create(GeoPhysVol *world) TRANSFUNCTION xfITCModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stITCModuleMotherPos = new GeoSerialTransformer(pvITCModuleMother, - &xfITCModuleMotherPos, - dbManager->TILEnmodul()); + &xfITCModuleMotherPos, + dbManager->TILEnmodul()); pvITCMotherPos->add(new GeoSerialIdentifier(1)); pvITCMotherPos->add(stITCModuleMotherPos); - + GeoSerialTransformer* stITCModuleMotherNeg = new GeoSerialTransformer(pvITCModuleMother, - &xfITCModuleMotherNeg, - dbManager->TILEnmodul()); + &xfITCModuleMotherNeg, + dbManager->TILEnmodul()); pvITCMotherNeg->add(new GeoSerialIdentifier(1)); pvITCMotherNeg->add(stITCModuleMotherNeg); - - + + GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntITCMotherPos = new GeoNameTag("TileITCPos"); pvTileEnvelopePosEndcap->add(tfITCMotherPos); pvTileEnvelopePosEndcap->add(ntITCMotherPos); pvTileEnvelopePosEndcap->add(pvITCMotherPos); - + GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntITCMotherNeg = new GeoNameTag("TileITCNeg"); pvTileEnvelopeNegEndcap->add(tfITCMotherNeg); @@ -674,11 +661,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) //-------------------------- G A P --------------------------------- // Tube - gap mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3)) { GeoTube* gapMother = new GeoTube(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2.*Gaudi::Units::deg), - dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2.*Gaudi::Units::deg), + dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); GeoLogVol* lvGapMother = new GeoLogVol("Gap",gapMother,matAir); GeoFullPhysVol* pvGapMotherPos = new GeoFullPhysVol(lvGapMother); @@ -693,46 +679,46 @@ void TileDetectorFactory::create(GeoPhysVol *world) dzGlue = 0.; GeoTrd* gapModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); GeoLogVol* lvGapModuleMother = new GeoLogVol("GapModule",gapModuleMother,matAir); GeoPhysVol* pvGapModuleMother = new GeoPhysVol(lvGapModuleMother); // Fill the section sectionBuilder->fillSection(pvGapModuleMother, - 5, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); + 5, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfGapModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); TRANSFUNCTION xfGapModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stGapModuleMotherPos = new GeoSerialTransformer(pvGapModuleMother, - &xfGapModuleMotherPos, - dbManager->TILEnmodul()); + &xfGapModuleMotherPos, + dbManager->TILEnmodul()); pvGapMotherPos->add(new GeoSerialIdentifier(1)); pvGapMotherPos->add(stGapModuleMotherPos); - + GeoSerialTransformer* stGapModuleMotherNeg = new GeoSerialTransformer(pvGapModuleMother, - &xfGapModuleMotherNeg, - dbManager->TILEnmodul()); + &xfGapModuleMotherNeg, + dbManager->TILEnmodul()); pvGapMotherNeg->add(new GeoSerialIdentifier(1)); pvGapMotherNeg->add(stGapModuleMotherNeg); - + GeoTransform* tfGapMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntGapMotherPos = new GeoNameTag("TileGapPos"); pvTileEnvelopePosEndcap->add(tfGapMotherPos); pvTileEnvelopePosEndcap->add(ntGapMotherPos); pvTileEnvelopePosEndcap->add(pvGapMotherPos); - - + + GeoTransform* tfGapMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntGapMotherNeg = new GeoNameTag("TileGapNeg"); pvTileEnvelopeNegEndcap->add(tfGapMotherNeg); @@ -740,8 +726,7 @@ void TileDetectorFactory::create(GeoPhysVol *world) pvTileEnvelopeNegEndcap->add(pvGapMotherNeg); } - if(globalsExist) - { + if (globalsExist) { dbManager->SetCurrentEnvByType(4); nModulesNeg=dbManager->GetEnvNModules(); zShiftNeg=dbManager->GetEnvZShift()*Gaudi::Units::cm; @@ -754,14 +739,13 @@ void TileDetectorFactory::create(GeoPhysVol *world) m_switches.addPlatesToCell, zShiftPos, // shift for positive eta zShiftNeg); // shift for negative eta - } else - { + } else { nModulesPos=nModulesNeg=dbManager->TILEnmodul(); zShiftPos=zShiftNeg=dbManager->TILEzshift()*Gaudi::Units::cm; - // do not compute cell volumes for old setups (before DC3), + // do not compute cell volumes for old setups (before DC3), // because cell-size table might be missing in DB } - + // -- Readout // Create two descriptor objects corresponding to positive and negative half of gap/crack descriptor = new TileDetDescriptor(); @@ -773,11 +757,11 @@ void TileDetectorFactory::create(GeoPhysVol *world) m_switches.addPlatesToCell, nModulesNeg, zShiftNeg); - + idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - m_detectorManager->add(descriptor); + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); descriptor = new TileDetDescriptor(); @@ -793,71 +777,70 @@ void TileDetectorFactory::create(GeoPhysVol *world) idRegion = tileID->region_id(nregion++); descriptor->set(idRegion); - m_detectorManager->add(descriptor); + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); //-------------------------- C R A C K --------------------------------- // Tube - crack mother - - if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4)) - { + + if (dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4)) { GeoTube* crackMother = new GeoTube(dbManager->TILBrminimal()*Gaudi::Units::cm, - dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2.*Gaudi::Units::deg), - dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); - + dbManager->TILBrmaximal()*Gaudi::Units::cm/cos(deltaPhi/2.*Gaudi::Units::deg), + dbManager->TILBdzmodul()/2.*Gaudi::Units::cm); + GeoLogVol* lvCrackMother = new GeoLogVol("Crack",crackMother,matAir); GeoFullPhysVol* pvCrackMotherPos = new GeoFullPhysVol(lvCrackMother); GeoFullPhysVol* pvCrackMotherNeg = new GeoFullPhysVol(lvCrackMother); - + // Trd - module mother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = 0.; - + GeoTrd* crackModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); - + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); + GeoLogVol* lvCrackModuleMother = new GeoLogVol("CrackModule",crackModuleMother,matAir); GeoPhysVol* pvCrackModuleMother = new GeoPhysVol(lvCrackModuleMother); - + // Fill the section sectionBuilder->fillSection(pvCrackModuleMother, - 6, - dbManager->TILBrmaximal(), - dbManager->TILBrminimal(), - dzGlue, - deltaPhi); - + 6, + dbManager->TILBrmaximal(), + dbManager->TILBrminimal(), + dzGlue, + deltaPhi); + // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfCrackModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); TRANSFUNCTION xfCrackModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stCrackModuleMotherPos = new GeoSerialTransformer(pvCrackModuleMother, - &xfCrackModuleMotherPos, - dbManager->TILEnmodul()); + &xfCrackModuleMotherPos, + dbManager->TILEnmodul()); pvCrackMotherPos->add(new GeoSerialIdentifier(1)); pvCrackMotherPos->add(stCrackModuleMotherPos); - + GeoSerialTransformer* stCrackModuleMotherNeg = new GeoSerialTransformer(pvCrackModuleMother, - &xfCrackModuleMotherNeg, - dbManager->TILEnmodul()); + &xfCrackModuleMotherNeg, + dbManager->TILEnmodul()); pvCrackMotherNeg->add(new GeoSerialIdentifier(1)); pvCrackMotherNeg->add(stCrackModuleMotherNeg); - - + + GeoTransform* tfCrackMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((dbManager->TILBzoffset()+dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntCrackMotherPos = new GeoNameTag("TileCrackPos"); pvTileEnvelopePosEndcap->add(tfCrackMotherPos); pvTileEnvelopePosEndcap->add(ntCrackMotherPos); pvTileEnvelopePosEndcap->add(pvCrackMotherPos); - - + + GeoTransform* tfCrackMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-dbManager->TILBzoffset()-dbManager->TILEzshift())*Gaudi::Units::cm)); GeoNameTag* ntCrackMotherNeg = new GeoNameTag("TileCrackNeg"); pvTileEnvelopeNegEndcap->add(tfCrackMotherNeg); @@ -870,22 +853,21 @@ void TileDetectorFactory::create(GeoPhysVol *world) //------------------------- B A R R E L F I N G E R ---------------------------- // Tube - finger mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL) && - dbManager->SetCurrentTifg(1)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL) && + dbManager->SetCurrentTifg(1)) { zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2.; GeoTube* fingerMother = new GeoTube(dbManager->TILBrmax()*Gaudi::Units::cm, - dbManager->TILErmam()*Gaudi::Units::cm, - dbManager->TIFGdz()/2.*Gaudi::Units::cm); - + dbManager->TILErmam()*Gaudi::Units::cm, + dbManager->TIFGdz()/2.*Gaudi::Units::cm); + GeoLogVol* lvFingerMother = new GeoLogVol("Finger",fingerMother,matAir); GeoFullPhysVol* pvFingerMotherPos = new GeoFullPhysVol(lvFingerMother); GeoFullPhysVol* pvFingerMotherNeg = new GeoFullPhysVol(lvFingerMother); - + // Trd - one finger mother - // if(dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1)) + // if (dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1)) // thicknessWedgeMother = (dbManager->TILBzoffset() - dbManager->TILBdzmodul()/2. + dbManager->TILEzshift() - zEndSection) * Gaudi::Units::cm; // else thicknessWedgeMother = dbManager->TIFGdz()*Gaudi::Units::cm; @@ -894,50 +876,50 @@ void TileDetectorFactory::create(GeoPhysVol *world) heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* fingerModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); - + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); + GeoLogVol* lvFingerModuleMother = new GeoLogVol("FingerModule",fingerModuleMother,matAir); GeoPhysVol* pvFingerModuleMother = new GeoPhysVol(lvFingerModuleMother); // Fill the section sectionBuilder->fillFinger(pvFingerModuleMother, 1, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam, - ModuleNcp, - thicknessWedgeMother*(1./Gaudi::Units::cm)); - + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam, + ModuleNcp, + thicknessWedgeMother*(1./Gaudi::Units::cm)); + // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); TRANSFUNCTION xfFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stFingerModuleMotherPos = new GeoSerialTransformer(pvFingerModuleMother, - &xfFingerModuleMotherPos, - dbManager->TILEnmodul()); + &xfFingerModuleMotherPos, + dbManager->TILEnmodul()); pvFingerMotherPos->add(new GeoSerialIdentifier(1)); pvFingerMotherPos->add(stFingerModuleMotherPos); - + GeoSerialTransformer* stFingerModuleMotherNeg = new GeoSerialTransformer(pvFingerModuleMother, - &xfFingerModuleMotherNeg, - dbManager->TILEnmodul()); + &xfFingerModuleMotherNeg, + dbManager->TILEnmodul()); pvFingerMotherNeg->add(new GeoSerialIdentifier(1)); pvFingerMotherNeg->add(stFingerModuleMotherNeg); - - + + GeoTransform* tfFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*Gaudi::Units::cm)); GeoNameTag* ntFingerMotherPos = new GeoNameTag("TileFingerPos"); pvTileEnvelopeBarrel->add(tfFingerMotherPos); pvTileEnvelopeBarrel->add(ntFingerMotherPos); pvTileEnvelopeBarrel->add(pvFingerMotherPos); - + GeoTransform* tfFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*Gaudi::Units::cm)); GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg"); pvTileEnvelopeBarrel->add(tfFingerMotherNeg); @@ -948,67 +930,66 @@ void TileDetectorFactory::create(GeoPhysVol *world) //------------------------- E X T E N D E D F I N G E R ---------------------------- // Tube - finger mother - if(dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL) && - dbManager->SetCurrentTifg(2)) - { + if (dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL) && + dbManager->SetCurrentTifg(2)) { zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2. + dbManager->TILEzshift(); GeoTube* efingerMother = new GeoTube(dbManager->TILBrmax()*Gaudi::Units::cm, - dbManager->TILErmam()*Gaudi::Units::cm, - dbManager->TIFGdz()/2.*Gaudi::Units::cm); + dbManager->TILErmam()*Gaudi::Units::cm, + dbManager->TIFGdz()/2.*Gaudi::Units::cm); GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",efingerMother,matAir); GeoFullPhysVol* pvEFingerMotherPos = new GeoFullPhysVol(lvEFingerMother); GeoFullPhysVol* pvEFingerMotherNeg = new GeoFullPhysVol(lvEFingerMother); - + // Trd - one finger mother thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2., - thicknessWedgeMother/2., - dy1WedgeMother, - dy2WedgeMother, - heightWedgeMother/2.); + thicknessWedgeMother/2., + dy1WedgeMother, + dy2WedgeMother, + heightWedgeMother/2.); GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); // Fill the section sectionBuilder->fillFinger(pvEFingerModuleMother, - 2, - dbManager->TILErmax(), - dbManager->TILBrmax(), - deltaPhi, - m_switches.testBeam); + 2, + dbManager->TILErmax(), + dbManager->TILBrmax(), + deltaPhi, + m_switches.testBeam); // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfEFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stEFingerModuleMotherPos = new GeoSerialTransformer(pvEFingerModuleMother, - &xfEFingerModuleMotherPos, - dbManager->TILEnmodul()); + &xfEFingerModuleMotherPos, + dbManager->TILEnmodul()); pvEFingerMotherPos->add(new GeoSerialIdentifier(1)); pvEFingerMotherPos->add(stEFingerModuleMotherPos); - + GeoSerialTransformer* stEFingerModuleMotherNeg = new GeoSerialTransformer(pvEFingerModuleMother, - &xfEFingerModuleMotherNeg, - dbManager->TILEnmodul()); + &xfEFingerModuleMotherNeg, + dbManager->TILEnmodul()); pvEFingerMotherNeg->add(new GeoSerialIdentifier(1)); pvEFingerMotherNeg->add(stEFingerModuleMotherNeg); - - + + GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D((zEndSection+dbManager->TIFGdz()/2.)*Gaudi::Units::cm)); GeoNameTag* ntEFingerMotherPos = new GeoNameTag("TileEFingerPos"); pvTileEnvelopePosEndcap->add(tfEFingerMotherPos); pvTileEnvelopePosEndcap->add(ntEFingerMotherPos); pvTileEnvelopePosEndcap->add(pvEFingerMotherPos); - + GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D((-zEndSection-dbManager->TIFGdz()/2.)*Gaudi::Units::cm)); GeoNameTag* ntEFingerMotherNeg = new GeoNameTag("TileEFingerNeg"); pvTileEnvelopeNegEndcap->add(tfEFingerMotherNeg); @@ -1016,15 +997,13 @@ void TileDetectorFactory::create(GeoPhysVol *world) pvTileEnvelopeNegEndcap->add(pvEFingerMotherNeg); } - // --------- ----------- --------- -------- ------ --------- ------- ---------- + // --------- ----------- --------- -------- ------ --------- ------- ---------- GeoNameTag *nTag = new GeoNameTag("Tile"); - if(pvTileEnvelopeBarrel) - { + if (pvTileEnvelopeBarrel) { world->add(nTag); - if(globalsExist) - { + if (globalsExist) { // Top transform for the central barrel dbManager->SetCurrentEnvByType(1); GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()); @@ -1039,12 +1018,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) m_detectorManager->addTreeTop(pvTileEnvelopeBarrel); } - if(pvTileEnvelopePosEndcap) - { + if (pvTileEnvelopePosEndcap) { world->add(nTag); - if(globalsExist) - { + if (globalsExist) { // Top transform for the positive endcap dbManager->SetCurrentEnvByType(3); GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()); @@ -1059,12 +1036,10 @@ void TileDetectorFactory::create(GeoPhysVol *world) m_detectorManager->addTreeTop(pvTileEnvelopePosEndcap); } - if(pvTileEnvelopeNegEndcap) - { + if (pvTileEnvelopeNegEndcap) { world->add(nTag); - if(globalsExist) - { + if (globalsExist) { // Top transform for the positive endcap dbManager->SetCurrentEnvByType(2); GeoTrf::Transform3D mz = GeoTrf::RotateZ3D(dbManager->GetEnvDPhi()); @@ -1081,4 +1056,3 @@ void TileDetectorFactory::create(GeoPhysVol *world) delete sectionBuilder; } - diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.h b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.h index 5274585007c7d7cbffeb8467feac2a5f86133d27..6c83ed20dae5d4d29cebd2c671d457a8a295c8e9 100755 --- a/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.h +++ b/TileCalorimeter/TileGeoModel/src/TileDetectorFactory.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ /** @@ -23,28 +23,28 @@ class StoreGateSvc; class TileDetectorFactory : public GeoVDetectorFactory { -public: - + public: + /** Constructor */ - TileDetectorFactory(StoreGateSvc *pDetStore, TileDetDescrManager * manager, + TileDetectorFactory(StoreGateSvc *pDetStore, TileDetDescrManager * manager, const TileSwitches & switches, MsgStream *log); - + /** Destructor */ ~TileDetectorFactory(); - + /** Creation of Tile geometry */ virtual void create(GeoPhysVol *world); /** Access function to TileDetDescr geometry data */ virtual const TileDetDescrManager * getDetectorManager() const { return m_detectorManager; } -private: - + private: + /** Detector pointer to Store Gate service */ StoreGateSvc *m_detectorStore; - /** Detector pointer to TileDetDescrManager */ - TileDetDescrManager *m_detectorManager; + /** Detector pointer to TileDetDescrManager */ + TileDetDescrManager *m_detectorManager; /** Get message SVC */ MsgStream *m_log; @@ -57,4 +57,3 @@ private: }; #endif - diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.cxx b/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.cxx index 20efaaf0737a67ad401b7ce0d2bed50be98262fd..fce8f0540fa5ba255b11b4ff2dcae9aa659cedf9 100755 --- a/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.cxx @@ -12,7 +12,6 @@ #include "TileDetectorFactoryLite.h" #include "TileGeoSectionBuilder.h" -#include "TileGeoCutBuilder.h" #include "TileDetDescr/TileDetDescrManager.h" #include "TileDetDescr/TileDddbManager.h" #include "TileDetDescr/TileDetDescriptor.h" @@ -24,8 +23,6 @@ #include "StoreGate/StoreGateSvc.h" #include "GaudiKernel/MsgStream.h" -#include "AthenaKernel/getMessageSvc.h" // needed for 'Athena::getMessageSvc()' - #include "GaudiKernel/SystemOfUnits.h" #include "RDBAccessSvc/IRDBAccessSvc.h" @@ -33,170 +30,166 @@ #include "RDBAccessSvc/IRDBRecord.h" #include <stdexcept> -#include <iostream> -#include <iomanip> -#include <algorithm> -#include <cmath> #include <string> #define MLOG(x) if (m_log->level()<=MSG::x) *m_log << MSG::x + // Constructor: TileDetectorFactoryLite::TileDetectorFactoryLite(StoreGateSvc */*pDetStore*/, - TileDetDescrManager *manager, - GeoModelIO::ReadGeoModel* /*sqliteReader*/, - IRDBAccessSvc* paramsSvc, - const TileSwitches & switches, - MsgStream *log, - bool /*fullGeo*/) - : m_detectorManager(manager) - , m_paramsSvc(paramsSvc) - , m_switches(switches) - , m_log(log) - , m_verbose(log->level()<=MSG::VERBOSE) + TileDetDescrManager *manager, + GeoModelIO::ReadGeoModel* /*sqliteReader*/, + IRDBAccessSvc* paramsSvc, + const TileSwitches & switches, + MsgStream *log, + bool /*fullGeo*/) + : m_detectorManager(manager) + , m_paramsSvc(paramsSvc) + , m_switches(switches) + , m_log(log) + , m_verbose(log->level()<=MSG::VERBOSE) { m_switches.testBeam = false; } - -// Destructor: -TileDetectorFactoryLite::~TileDetectorFactoryLite(){} - + + +// Destructor: +TileDetectorFactoryLite::~TileDetectorFactoryLite() {} + + // Creation of geometry: -void TileDetectorFactoryLite::create(GeoPhysVol *world) -{ - (*m_log) << MSG::INFO <<" Entering TileDetectorFactoryLite::create()" << endmsg; - - // -------- -------- MATERIAL MANAGER -------- ---------- - // TODO: fix this, doesn't get access at runtime!! - StoredMaterialManager* theMaterialManager = nullptr; // dummy matManager, only used to instantiate a 'sectionBuilder' - - // -------- -------- DB MANAGER -------- ---------- - TileDddbManager* dbManager = m_detectorManager->getDbManager(); - - // -------- -------- SECTION BUILDER -------- ---------- - TileGeoSectionBuilder* sectionBuilder = new TileGeoSectionBuilder(theMaterialManager,dbManager,m_switches,m_log); - - - // --- Get data from SQLite - (*m_log) << MSG::INFO << "Getting auxiliary data from SQLite..." << endmsg; - // get table - IRDBRecordset_ptr tileReadoutDataRecordSet = m_paramsSvc->getRecordsetPtr("TileReadoutData", "", ""); - (*m_log) << MSG::DEBUG << "data rows in the 'TileReadoutData' RecordSet: " << tileReadoutDataRecordSet->size() << endmsg; - // get data - double barrelPeriodThickness = 0., extendedPeriodThickness = 0.; - if (tileReadoutDataRecordSet->size()>0) { - if ( (*tileReadoutDataRecordSet)[0]->getString("NAME") == "barrelPeriodThickness" ) { - barrelPeriodThickness = (*tileReadoutDataRecordSet)[0]->getDouble("VALUE"); - } else { - std::string errMsg = "barrelPeriodThickness not found in position [0] in the TileReadoutData' RecordSet!!!"; - (*m_log) << MSG::ERROR << errMsg << endmsg; - throw std::runtime_error(errMsg); - } - if ( (*tileReadoutDataRecordSet)[1]->getString("NAME") == "extendedPeriodThickness" ) { - extendedPeriodThickness = (*tileReadoutDataRecordSet)[1]->getDouble("VALUE"); - } else { - std::string errMsg = "extendedPeriodThickness not found in position [1] in the TileReadoutData' RecordSet!!!"; - (*m_log) << MSG::ERROR << errMsg << endmsg; - throw std::runtime_error(errMsg); - } +void TileDetectorFactoryLite::create(GeoPhysVol *world) +{ + (*m_log) << MSG::INFO <<" Entering TileDetectorFactoryLite::create()" << endmsg; + + // -------- -------- MATERIAL MANAGER -------- ---------- + // TODO: fix this, doesn't get access at runtime!! + StoredMaterialManager* theMaterialManager = nullptr; // dummy matManager, only used to instantiate a 'sectionBuilder' + + // -------- -------- DB MANAGER -------- ---------- + TileDddbManager* dbManager = m_detectorManager->getDbManager(); + + // -------- -------- SECTION BUILDER -------- ---------- + TileGeoSectionBuilder* sectionBuilder = new TileGeoSectionBuilder(theMaterialManager,dbManager,m_switches,m_log); + + + // --- Get data from SQLite + (*m_log) << MSG::INFO << "Getting auxiliary data from SQLite..." << endmsg; + // get table + IRDBRecordset_ptr tileReadoutDataRecordSet = m_paramsSvc->getRecordsetPtr("TileReadoutData", "", ""); + (*m_log) << MSG::DEBUG << "data rows in the 'TileReadoutData' RecordSet: " << tileReadoutDataRecordSet->size() << endmsg; + // get data + double barrelPeriodThickness = 0., extendedPeriodThickness = 0.; + if (tileReadoutDataRecordSet->size()>0) { + if ( (*tileReadoutDataRecordSet)[0]->getString("NAME") == "barrelPeriodThickness" ) { + barrelPeriodThickness = (*tileReadoutDataRecordSet)[0]->getDouble("VALUE"); + } else { + std::string errMsg = "barrelPeriodThickness not found in position [0] in the TileReadoutData' RecordSet!!!"; + (*m_log) << MSG::ERROR << errMsg << endmsg; + throw std::runtime_error(errMsg); + } + if ( (*tileReadoutDataRecordSet)[1]->getString("NAME") == "extendedPeriodThickness" ) { + extendedPeriodThickness = (*tileReadoutDataRecordSet)[1]->getDouble("VALUE"); } else { - std::string errorMsg = "The 'TileReadoutData' recordSet is empty!!!"; - (*m_log) << MSG::FATAL << errorMsg << endmsg; - throw std::runtime_error(errorMsg); + std::string errMsg = "extendedPeriodThickness not found in position [1] in the TileReadoutData' RecordSet!!!"; + (*m_log) << MSG::ERROR << errMsg << endmsg; + throw std::runtime_error(errMsg); } - (*m_log) << MSG::DEBUG << "barrelPeriodThickness: " << barrelPeriodThickness << ", extendedPeriodThickness: " << extendedPeriodThickness << endmsg; - - // set data used to build the readout geometry - sectionBuilder->setBarrelPeriodThickness(barrelPeriodThickness); - sectionBuilder->setExtendedPeriodThickness(extendedPeriodThickness); - - - // - // creating Descriptors and CaloDetDescrElements - // - - int nModulesInSection[6] = {0,0,0,0,0,0}; - double zShiftInSection[6] = {0.0,0.0,0.0,0.0,0.0,0.0,}; - - int NumberOfEnv = dbManager->GetNumberOfEnv(); - MLOG(DEBUG) << "NumberOfEnv: " << NumberOfEnv << endmsg; - - for(int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter){ //Loop over Envelopes - - dbManager->SetCurrentEnvByIndex(EnvCounter); - int EnvType = dbManager->GetEnvType(); - int NumberOfMod = dbManager->GetEnvNModules(); - double Zshift = dbManager->GetEnvZShift()*Gaudi::Units::cm; - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG - << " EnvCounter is " << EnvCounter - << " EnvType is " << EnvType - << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" - << endmsg; - - // Central barrel - if(EnvType == 1 || EnvType == 0) { - nModulesInSection[0] = nModulesInSection[1] = NumberOfMod; - zShiftInSection[0] = zShiftInSection[1] = Zshift; - } else if(EnvType < 6) { - nModulesInSection[EnvType] = NumberOfMod; - zShiftInSection[EnvType] = Zshift; - } - } - - - // Build Regions - const TileID* tileID = m_detectorManager->get_id(); - - unsigned int dete[6] = {TILE_REGION_CENTRAL,TILE_REGION_CENTRAL, - TILE_REGION_EXTENDED,TILE_REGION_EXTENDED, - TILE_REGION_GAP,TILE_REGION_GAP}; - int side[6] = {0,1,0,1,0,1}; - - (*m_log) << MSG::DEBUG << "Loop over Tile detector regions, and call computeCellDim() when needed..." << endmsg; - for (int ii=0; ii<6; ++ii) { - - (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << endmsg; - - if (ii%2 == 0) { - (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << " --> calling computeCellDim()..." << endmsg; - sectionBuilder->computeCellDim(m_detectorManager, dete[ii], - m_switches.addPlatesToCell, - zShiftInSection[ii+1], // zShiftPos - zShiftInSection[ii]); // zShiftNeg - } - - (*m_log) << MSG::DEBUG << "Get TileDetDescriptor and call fillDescriptor()..." << endmsg; - TileDetDescriptor* descriptor = new TileDetDescriptor(); - sectionBuilder->fillDescriptor(descriptor, dete[ii], side[ii], - m_switches.testBeam, // set to false - ATLAS geometry - m_switches.addPlatesToCell, // add front/end plates to cell volume - nModulesInSection[ii], // 0-64 modules - zShiftInSection[ii]); // Z-shift - - (*m_log) << MSG::DEBUG << "Get an Identifier for the region and add it to the detectorManager..." << endmsg; - Identifier idRegion = tileID->region_id(ii); - descriptor->set(idRegion); - m_detectorManager->add(descriptor); - m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); + } else { + std::string errorMsg = "The 'TileReadoutData' recordSet is empty!!!"; + (*m_log) << MSG::FATAL << errorMsg << endmsg; + throw std::runtime_error(errorMsg); + } + (*m_log) << MSG::DEBUG << "barrelPeriodThickness: " << barrelPeriodThickness << ", extendedPeriodThickness: " << extendedPeriodThickness << endmsg; + + // set data used to build the readout geometry + sectionBuilder->setBarrelPeriodThickness(barrelPeriodThickness); + sectionBuilder->setExtendedPeriodThickness(extendedPeriodThickness); + + + // + // creating Descriptors and CaloDetDescrElements + // + + int nModulesInSection[6] = {0,0,0,0,0,0}; + double zShiftInSection[6] = {0.0,0.0,0.0,0.0,0.0,0.0,}; + + int NumberOfEnv = dbManager->GetNumberOfEnv(); + MLOG(DEBUG) << "NumberOfEnv: " << NumberOfEnv << endmsg; + + for (int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter) { //Loop over Envelopes + + dbManager->SetCurrentEnvByIndex(EnvCounter); + int EnvType = dbManager->GetEnvType(); + int NumberOfMod = dbManager->GetEnvNModules(); + double Zshift = dbManager->GetEnvZShift()*Gaudi::Units::cm; + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG + << " EnvCounter is " << EnvCounter + << " EnvType is " << EnvType + << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" + << endmsg; + + // Central barrel + if (EnvType == 1 || EnvType == 0) { + nModulesInSection[0] = nModulesInSection[1] = NumberOfMod; + zShiftInSection[0] = zShiftInSection[1] = Zshift; + } else if (EnvType < 6) { + nModulesInSection[EnvType] = NumberOfMod; + zShiftInSection[EnvType] = Zshift; } + } - // Set geometry Tree Tops - GeoVolumeCursor cursor(world); - while(!cursor.atEnd()) { - std::string volName = cursor.getName(); - //std::cout << "volName: " << volName << "\n"; - if(volName.compare(0,4,"Tile")==0) { - (*m_log) << MSG::DEBUG << "Adding vol '" << volName << "' to detManager" << endmsg; - m_detectorManager->addTreeTop(GeoPVLink(cursor.getVolume().operator->())); - } - cursor.next(); - } + // Build Regions + const TileID* tileID = m_detectorManager->get_id(); - (*m_log) << MSG::DEBUG << "Tile geometry from SQLite has been created." << endmsg; + unsigned int dete[6] = {TILE_REGION_CENTRAL,TILE_REGION_CENTRAL, + TILE_REGION_EXTENDED,TILE_REGION_EXTENDED, + TILE_REGION_GAP,TILE_REGION_GAP}; + int side[6] = {0,1,0,1,0,1}; -} + (*m_log) << MSG::DEBUG << "Loop over Tile detector regions, and call computeCellDim() when needed..." << endmsg; + for (int ii=0; ii<6; ++ii) { + (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << endmsg; + if (ii%2 == 0) { + (*m_log) << MSG::DEBUG << "ii: " << ii << ", region: " << dete[ii] << " --> calling computeCellDim()..." << endmsg; + sectionBuilder->computeCellDim(m_detectorManager, dete[ii], + m_switches.addPlatesToCell, + zShiftInSection[ii+1], // zShiftPos + zShiftInSection[ii]); // zShiftNeg + } + + (*m_log) << MSG::DEBUG << "Get TileDetDescriptor and call fillDescriptor()..." << endmsg; + TileDetDescriptor* descriptor = new TileDetDescriptor(); + sectionBuilder->fillDescriptor(descriptor, dete[ii], side[ii], + m_switches.testBeam, // set to false - ATLAS geometry + m_switches.addPlatesToCell, // add front/end plates to cell volume + nModulesInSection[ii], // 0-64 modules + zShiftInSection[ii]); // Z-shift + + (*m_log) << MSG::DEBUG << "Get an Identifier for the region and add it to the detectorManager..." << endmsg; + Identifier idRegion = tileID->region_id(ii); + descriptor->set(idRegion); + m_detectorManager->add(descriptor); + m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); + } + + + // Set geometry Tree Tops + GeoVolumeCursor cursor(world); + while (!cursor.atEnd()) { + std::string volName = cursor.getName(); + if (volName.compare(0,4,"Tile")==0) { + (*m_log) << MSG::DEBUG << "Adding vol '" << volName << "' to detManager" << endmsg; + m_detectorManager->addTreeTop(GeoPVLink(cursor.getVolume().operator->())); + } + cursor.next(); + } + + (*m_log) << MSG::DEBUG << "Tile geometry from SQLite has been created." << endmsg; + +} diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.h b/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.h index e32a8ba48aaa25121b6b3b18747fd89e121afa7d..95f158da49bdea841fc151652fceb8def0f3f686 100755 --- a/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.h +++ b/TileCalorimeter/TileGeoModel/src/TileDetectorFactoryLite.h @@ -7,17 +7,17 @@ * * @class TileDetectorFactoryLite * - * @brief Definition of the TileDetectorFactoryLite class. - * The TileDetectorFactoryLite is invoked by the TileDetectorTool when the GeoModel + * @brief Definition of the TileDetectorFactoryLite class. + * The TileDetectorFactoryLite is invoked by the TileDetectorTool when the GeoModel * description of Tile calorimeter is built from the SQLite database * It also builds readout geometry (coming soon). * * @author Riccardo Maria BIANCHI <riccardo.maria.bianchi@cern.ch> , Aug 2021 * - * Updates: + * Updates: * - Riccardo Maria BIANCHI <riccardo.maria.bianchi@cern.ch>, Oct 2021 * - Riccardo Maria BIANCHI <riccardo.maria.bianchi@cern.ch>, Dec 2021 - * Moved code to use Switches, for instance for 'addPlatesToCell' or 'testBeam' + * Moved code to use Switches, for instance for 'addPlatesToCell' or 'testBeam' * - Riccardo Maria BIANCHI <riccardo.maria.bianchi@cern.ch>, Jan 2022 * Added the build of the Readout geometry */ @@ -40,30 +40,29 @@ namespace GeoModelIO { class TileDetectorFactoryLite : public GeoVDetectorFactory { -public: - + public: + /** Constructor */ - TileDetectorFactoryLite(StoreGateSvc *pDetStore, - TileDetDescrManager *manager, + TileDetectorFactoryLite(StoreGateSvc *pDetStore, + TileDetDescrManager *manager, GeoModelIO::ReadGeoModel* sqliteReader, IRDBAccessSvc* rdbaccess, const TileSwitches & switches, - MsgStream *log, + MsgStream *log, bool fullGeo); - + /** Destructor */ ~TileDetectorFactoryLite(); - + /** Creation of Tile geometry */ virtual void create(GeoPhysVol *world); /** Access function to TileDetDescr geometry data */ virtual const TileDetDescrManager * getDetectorManager() const { return m_detectorManager; } + private: -private: - - /** Detector pointer to TileDetDescrManager */ + /** Detector pointer to TileDetDescrManager */ TileDetDescrManager *m_detectorManager; /** Pointer to an instance of the RDBAccessSvc to get parameters from the SQLite file */ @@ -71,7 +70,7 @@ private: /** all switches */ TileSwitches m_switches; - + /** Get message SVC */ MsgStream *m_log; @@ -80,4 +79,3 @@ private: }; #endif - diff --git a/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx b/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx index 09482f2e0bcfd4efa19bcc287a1f5d1e4471e208..5d0e55fc1160e20f4150a3a541001abb0dbfcf6c 100755 --- a/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileDetectorTool.cxx @@ -14,14 +14,13 @@ #include "TileTBFactory.h" #include "TileDetectorFactoryLite.h" -#include "TileDetDescr/TileDetDescrManager.h" +#include "TileDetDescr/TileDetDescrManager.h" #include "TileDetDescr/TileDddbManager.h" #include "TileConditions/TileCablingService.h" #include "CaloIdentifier/TileID.h" #include "TileIdentifier/TileHWID.h" #include "CaloIdentifier/CaloCell_ID.h" -#include "CaloDetDescr/CaloDetDescrElement.h" #include "GeoModelInterfaces/IGeoModelSvc.h" #include "GeoModelUtilities/GeoModelExperiment.h" @@ -29,8 +28,6 @@ #include "GaudiKernel/MsgStream.h" #include "StoreGate/StoreGateSvc.h" #include "RDBAccessSvc/IRDBAccessSvc.h" -#include "RDBAccessSvc/IRDBRecordset.h" -#include "RDBAccessSvc/IRDBRecord.h" #include "GeoModelRead/ReadGeoModel.h" @@ -39,16 +36,15 @@ #include "SGTools/DataProxy.h" - -TileDetectorTool::TileDetectorTool(const std::string& type, - const std::string& name, - const IInterface* parent): - GeoModelTool(type, name, parent), - m_switches(false,true), - m_not_locked(true), - m_useNewFactory(true), - m_geometryConfig("FULL"), - m_manager(0) +TileDetectorTool::TileDetectorTool(const std::string& type, + const std::string& name, + const IInterface* parent) + : GeoModelTool(type, name, parent) + , m_switches(false,true) + , m_not_locked(true) + , m_useNewFactory(true) + , m_geometryConfig("FULL") + , m_manager(0) { declareProperty("UseNewFactory", m_useNewFactory); declareProperty("GeometryConfig",m_geometryConfig); @@ -61,28 +57,30 @@ TileDetectorTool::TileDetectorTool(const std::string& type, declareProperty("CsTube",m_switches.csTube); } + TileDetectorTool::~TileDetectorTool() { } + void TileDetectorTool::setSwitch(int & param, int value, const char * name) { - if (param < 0) { - param = value; - ATH_MSG_INFO(name << " parameter from database is: " << param); + if (param < 0) { + param = value; + ATH_MSG_INFO(name << " parameter from database is: " << param); + } else { + if (param != value) { + ATH_MSG_WARNING("Overriding " << name << " value from DB by value from jobOptions, using " + << param << " instead of " << value); } else { - if (param != value) { - ATH_MSG_WARNING("Overriding " << name << " value from DB by value from jobOptions, using " - << param << " instead of " << value); - } else { - ATH_MSG_INFO(name << " parameter from jobOptions is: " << param); - } + ATH_MSG_INFO(name << " parameter from jobOptions is: " << param); } + } } StatusCode TileDetectorTool::create() -{ +{ MsgStream log(msgSvc(), name()); ATH_MSG_INFO(" Entering TileDetectorTool::create()"); @@ -92,26 +90,24 @@ StatusCode TileDetectorTool::create() std::string atlasVersion = geoModel->atlasVersion(); std::string tileVersion = geoModel->tileVersionOverride(); - + std::string versionTag = tileVersion.empty()? atlasVersion : tileVersion; std::string versionNode = tileVersion.empty()? "ATLAS" : "TileCal"; - - if(versionTag == "AUTO") - { + + if (versionTag == "AUTO") { versionTag = "TileCal-00"; - versionNode = "TileCal"; + versionNode = "TileCal"; } if (atlasVersion.compare(0,9,"ATLAS-CTB") == 0 || tileVersion.compare(0,6,"TileTB") == 0) { ATH_MSG_INFO("CTB geometry detected: " << atlasVersion << " " << tileVersion); m_switches.testBeam = true; } - + //Locate the top level experiment node GeoModelExperiment* theExpt = nullptr; CHECK( detStore()->retrieve(theExpt, "ATLAS") ); - if ( 0 == m_detector ) - { + if ( 0 == m_detector ) { // Get the detector configuration. ServiceHandle<IGeoDbTagSvc> geoDbTag("GeoDbTagSvc",name()); ATH_CHECK(geoDbTag.retrieve()); @@ -119,7 +115,7 @@ StatusCode TileDetectorTool::create() // Get the 'new' accessSvc to get parameters / DB data from the DD SQLite input file. ServiceHandle<IRDBAccessSvc> accessSvc(geoDbTag->getParamSvcName(),name()); ATH_CHECK(accessSvc.retrieve()); - + // Get the SQLite reader, if specified in the jobOption GeoModelIO::ReadGeoModel* sqliteReader = geoDbTag->getSqliteReader(); @@ -147,46 +143,42 @@ StatusCode TileDetectorTool::create() setSwitch(m_switches.csTube, dbManager->csTube(), "CsTube"); m_not_locked = false; - + GeoPhysVol *world=&*theExpt->getPhysVol(); - + // build the geometry from the standalone SQLite file if (sqliteReader) { - TileDetectorFactoryLite theTileFactoryLite(detStore().operator->(), - m_manager, - sqliteReader, - accessSvc.operator->(), - m_switches, - &log, - true); - theTileFactoryLite.create(world); - } - // build the geometry from the Oracle-based GeometryDB - else { - if(m_switches.testBeam) - { - // TileTBFactory is not thread-safe. But since this code should only be - // ever called once (and this is "only" for test beam geometry), we use - // this rather ugly hack to silence the thread-checker warnings: - [[maybe_unused]] static const bool do_once ATLAS_THREAD_SAFE = [&]() ATLAS_NOT_THREAD_SAFE { - TileCablingService::getInstance_nc()->setTestBeam(true); - TileTBFactory theTileTBFactory = TileTBFactory(detStore().operator->(),m_manager,m_switches,&log); - theTileTBFactory.create(world); - return true; - }(); - } - else if (m_useNewFactory) - { - TileAtlasFactory theTileFactory(detStore().operator->(),m_manager,m_switches,&log,m_geometryConfig=="FULL"); - theTileFactory.create(world); - } - else - { - TileDetectorFactory theTileFactory(detStore().operator->(),m_manager,m_switches,&log); - theTileFactory.create(world); - } + TileDetectorFactoryLite theTileFactoryLite(detStore().operator->(), + m_manager, + sqliteReader, + accessSvc.operator->(), + m_switches, + &log, + true); + theTileFactoryLite.create(world); + } else { + // build the geometry from the Oracle-based GeometryDB + if (m_switches.testBeam) { + // TileTBFactory is not thread-safe. But since this code should only be + // ever called once (and this is "only" for test beam geometry), we use + // this rather ugly hack to silence the thread-checker warnings: + [[maybe_unused]] static const bool do_once ATLAS_THREAD_SAFE = [&]() ATLAS_NOT_THREAD_SAFE { + TileCablingService::getInstance_nc()->setTestBeam(true); + TileTBFactory theTileTBFactory = TileTBFactory(detStore().operator->(),m_manager,m_switches,&log); + theTileTBFactory.create(world); + return true; + }(); + + } else if (m_useNewFactory) { + TileAtlasFactory theTileFactory(detStore().operator->(),m_manager,m_switches,&log,m_geometryConfig=="FULL"); + theTileFactory.create(world); + + } else { + TileDetectorFactory theTileFactory(detStore().operator->(),m_manager,m_switches,&log); + theTileFactory.create(world); + } } // end of building the geometry from the GeometryDB - ATH_MSG_DEBUG( "The Tile raw geometry has been built."); + ATH_MSG_DEBUG( "The Tile raw geometry has been built."); CHECK( createElements() ); @@ -196,26 +188,28 @@ StatusCode TileDetectorTool::create() // For reco jobs: release DB manager. Cannot do it here for simulation jobs, they // release DB manager as part of global GeoModel release - if(m_geometryConfig=="RECO") + if (m_geometryConfig=="RECO") m_manager->releaseDbManager(); return StatusCode::SUCCESS; - + } return StatusCode::FAILURE; } + StatusCode TileDetectorTool::clear() { SG::DataProxy* proxy = detStore()->proxy(ClassID_traits<TileDetDescrManager>::ID(),m_manager->getName()); - if(proxy) { + if (proxy) { proxy->reset(); m_manager = 0; } return StatusCode::SUCCESS; } + StatusCode TileDetectorTool::initIds() { const TileID* tileID; @@ -233,12 +227,11 @@ StatusCode TileDetectorTool::initIds() // instantiate Cabling Svc to initialize pointers to helpers there const TileCablingService * cabling = TileCablingService::getInstance(); - if(cabling==0) - { + if (cabling==0) { ATH_MSG_ERROR("Could not get instance of TileCablingService"); return StatusCode::FAILURE; } - + return StatusCode::SUCCESS; } diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx index 2af93b987e012decea1ac80fd489050d317d4e81..6dc778653b22d9adbc7969b5db04b09bc5ba5aa0 100755 --- a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.cxx @@ -6,56 +6,29 @@ #include "TileDetDescr/TileDetDescrManager.h" #include "TileDetDescr/TileDddbManager.h" #include "TileDetDescr/TileDetDescriptor.h" -#include "TileDetDescr/TileCellDim.h" -#include "GeoModelKernel/GeoTube.h" -#include "GeoModelKernel/GeoTrd.h" -#include "GeoModelKernel/GeoShapeUnion.h" -#include "GeoModelKernel/GeoShapeShift.h" -#include "GeoModelKernel/GeoMaterial.h" -#include "GeoModelKernel/GeoLogVol.h" #include "GeoModelKernel/GeoPhysVol.h" -#include "GeoModelKernel/GeoNameTag.h" #include "GeoModelKernel/GeoTransform.h" -#include "GeoModelKernel/GeoSerialIdentifier.h" -#include "GeoModelKernel/GeoIdentifierTag.h" -#include "GeoModelKernel/GeoDefinitions.h" -#include "GeoModelKernel/Units.h" - -#include "GeoGenericFunctions/AbsFunction.h" -#include "GeoGenericFunctions/Variable.h" -#include "GeoModelKernel/GeoXF.h" -#include "GeoModelKernel/GeoSerialTransformer.h" #include "GaudiKernel/MsgStream.h" -#include <stdexcept> -#include <iostream> -#include <assert.h> TileGeoCutBuilder::TileGeoCutBuilder(StoredMaterialManager* /*matManager*/, - TileDddbManager * /*pDbManager*/, + TileDddbManager * /*pDbManager*/, MsgStream * log) - : m_log(log) + : m_log(log) { } + TileGeoCutBuilder::~TileGeoCutBuilder() { } -void TileGeoCutBuilder::MakeCut(GeoPhysVol*& mother, - int number) -{ // overlap precision - /* - double rless =.150; // 150 [mkm] - - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - // Obtain required materials - Air and Iron - const GeoMaterial* matAir = theMaterialManager->getMaterial("std::Air"); - const GeoMaterial* matIron = theMaterialManager->getMaterial("std::Iron"); - */ +void TileGeoCutBuilder::MakeCut(GeoPhysVol*& mother, + int number) +{ GeoTransform* tfTmp = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); mother->add(tfTmp); @@ -63,35 +36,33 @@ void TileGeoCutBuilder::MakeCut(GeoPhysVol*& mother, } -// Checking geometry dimensions for all direction +// Checking geometry dimensions for all directions void TileGeoCutBuilder::checking(const std::string& Name, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z) + double X1, double X2, double Y1, double Y2, double Z) { double rless = .005; // 5 [mkm] std::string Step[8] = {" ", - " ", - " ", - " ", - " ", - " ", - " ", - " "}; - if (print) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<Step[level]<<Name<<"-"<<level - <<" dX1,dX2= "<<X1<<","<<X2<<" dY1,dY2= "<<Y1<<","<<Y2<<",dZ= "<<Z - <<endmsg; - } - if (X1 < rless && X2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; - } - if (Y1 < rless && Y2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; - } - if (Z < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; - } + " ", + " ", + " ", + " ", + " ", + " ", + " "}; + if (print) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<Step[level]<<Name<<"-"<<level + <<" dX1,dX2= "<<X1<<","<<X2<<" dY1,dY2= "<<Y1<<","<<Y2<<",dZ= "<<Z + <<endmsg; + } + if (X1 < rless && X2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; + } + if (Y1 < rless && Y2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; + } + if (Z < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; + } } - diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.h b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.h index 210bc19edd042cd5ad5280cf76132df698f8d667..60141119bddb9a4c8e2120958960c3c5349c859e 100755 --- a/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.h +++ b/TileCalorimeter/TileGeoModel/src/TileGeoCutBuilder.h @@ -23,9 +23,10 @@ class TileDetDescriptor; class TileDetDescrManager; -class TileGeoCutBuilder +class TileGeoCutBuilder { public: + /** Constructor */ TileGeoCutBuilder(StoredMaterialManager* matManager, TileDddbManager* pDbManager, @@ -36,8 +37,8 @@ class TileGeoCutBuilder /** Section parameters are the following: @param sec_number Number of sector - @param tile_rmax Maximal radius - @param rminb Minimal radius + @param tile_rmax Maximal radius + @param rminb Minimal radius @param dzglue Glue gap along dZ @param delta_phi Delta Phi @param zlen_itc2 Length for ITC2 only @@ -46,11 +47,11 @@ class TileGeoCutBuilder int number); void checking(const std::string& VolumeName, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z); + double X1, double X2, double Y1, double Y2, double Z); private: + MsgStream * m_log; }; #endif // not TILEGEOMODEL_TILEGEOCUTBUILDER_H - diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx index ee764ad3e351b538a0f26eec1d09bf8c1a70918d..47ed2cb928c2008fc07244369614b00f7d4aec00 100755 --- a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.cxx @@ -37,11 +37,7 @@ #include "GaudiKernel/MsgStream.h" #include "GaudiKernel/SystemOfUnits.h" -#include <stdexcept> #include <iostream> -#include <limits> -#include <cmath> -#include <cstddef> #include <assert.h> @@ -49,49 +45,52 @@ using namespace GeoGenfun; using namespace GeoXF; - + + TileGeoSectionBuilder::TileGeoSectionBuilder(StoredMaterialManager* matManager, - TileDddbManager * pDbManager, + TileDddbManager * pDbManager, const TileSwitches & switches, MsgStream * log) - : m_theMaterialManager(matManager) - , m_dbManager(pDbManager) - , m_log(log) - , m_switches(switches) - , m_barrelPeriodThickness(0.) - , m_barrelGlue(0.) - , m_extendedPeriodThickness(0.) - , m_verbose(log->level()<=MSG::VERBOSE) - , m_matLArServices(0) - , m_matIronHalfDens(0) - , m_additionalIronLayer(0.027) + : m_theMaterialManager(matManager) + , m_dbManager(pDbManager) + , m_log(log) + , m_switches(switches) + , m_barrelPeriodThickness(0.) + , m_barrelGlue(0.) + , m_extendedPeriodThickness(0.) + , m_verbose(log->level()<=MSG::VERBOSE) + , m_matLArServices(0) + , m_matIronHalfDens(0) + , m_additionalIronLayer(0.027) { } + TileGeoSectionBuilder::~TileGeoSectionBuilder() { } + void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, - int sec_number, - double tile_rmax, - double rminb, - double dzglue, - double delta_phi, + int sec_number, + double tile_rmax, + double rminb, + double dzglue, + double delta_phi, int ModuleNcp, - double zlen_itc2, - bool neg) + double zlen_itc2, + bool neg) { (*m_log) << MSG::DEBUG <<" TileGeoSectionBuilder::fillSection ModuleNcp= "<<ModuleNcp<< endmsg; double tan_delta_phi_2 = tan(delta_phi/2*Gaudi::Units::deg); - + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // Obtain required materials - Air and Iron const GeoMaterial* matAir = m_theMaterialManager->getMaterial("std::Air"); const GeoMaterial* matIron = (m_switches.steel) ? m_theMaterialManager->getMaterial("tile::Steel") - : m_theMaterialManager->getMaterial("std::Iron"); + : m_theMaterialManager->getMaterial("std::Iron"); const GeoMaterial* matAluminium = 0; // ----------------------------------------------------------------------------------------------------------------- @@ -101,17 +100,17 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, std::string volname =""; // Cuting positioning - float PosXcut =0., PosYcut =0., PosY =0., Rmore =0.; + float PosXcut =0., PosYcut =0., PosY =0., Rmore =0.; float Radius =0., YcorA =0., YcorB =0., lenPla =0., Blia =0.; - // General rotation and transformations + // General rotation and transformations float phi = (double(ModuleNcp-1) + 0.5)*delta_phi; // Special module flag int SideFl = 1; if (ModuleNcp>=35 && ModuleNcp<=37) SideFl = -1; - GeoTrf::Transform3D TransCut2(GeoTrf::Transform3D::Identity()); + GeoTrf::Transform3D TransCut2(GeoTrf::Transform3D::Identity()); GeoTrf::Transform3D TransCutL(GeoTrf::Transform3D::Identity()); GeoTrf::Transform3D TransCutR(GeoTrf::Transform3D::Identity()); @@ -119,104 +118,103 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, GeoShape *CutB{nullptr}; // ext. barrel Cuts description - if (sec_number==2 && m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))) - { - volname = "CutB"; m_dbManager->SetCurrentCuts(volname); - PosXcut = m_dbManager->CutsXpos(); - PosYcut = m_dbManager->CutsYpos(); - Rmore = 0.8*Gaudi::Units::cm; - - // Inert materials, CutB1 - dX1 = m_dbManager->CutsDX1()+Rmore; - dX2 = m_dbManager->CutsDX2()+Rmore; - dY1 = m_dbManager->CutsDY1()+Rmore; - dY2 = m_dbManager->CutsDY2()+Rmore; - dZ1 = m_dbManager->CutsDZ1(); - - checking("CutB1", false, 1, dX1,dX2,dY1,dY2,dZ1); - GeoTrd* CutB1 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); - //const GeoShape& CutB = *CutB1; - CutB = CutB1; - - // Materials are in cuting region, 1up Iron plate - volname = "Cut1up"; m_dbManager->SetCurrentCuts(volname); //>> - PosY = m_dbManager->CutsYpos(); - - dX1 = m_dbManager->CutsDX1()+Rmore; - dX2 = m_dbManager->CutsDX2()+Rmore; - dY1 = m_dbManager->CutsDY1(); - dY2 = m_dbManager->CutsDY2(); - dZ1 = m_dbManager->CutsDZ1(); - - checking("Cut1up", false, 1, dX1,dX2,dY1,dY2,dZ1); - GeoTrd* Cut1up = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); - - volname = "Cut2down"; m_dbManager->SetCurrentCuts(volname); //>> - dX1 = m_dbManager->CutsDX1()+Rmore; - dX2 = m_dbManager->CutsDX2()+Rmore; - dY1 = m_dbManager->CutsDY1(); - dY2 = m_dbManager->CutsDY2(); - dZ2 = m_dbManager->CutsDZ1(); - - checking("Cut2down", false, 1, dX1,dX2,dY1,dY2,dZ2); - GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2); - - GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2); - - const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA); - CutA = &CutA1; - - Radius = (m_dbManager->TILBrmaximal() + m_dbManager->TILBrminimal())/2 * Gaudi::Units::cm; - - if (ModuleNcp==35||ModuleNcp==62) { YcorA = 5*Gaudi::Units::cm; YcorB = 5*Gaudi::Units::cm; lenPla =0.8*Gaudi::Units::cm, Blia = 17.4*Gaudi::Units::cm;} - if (ModuleNcp==36||ModuleNcp==61) { YcorA = 6.5*Gaudi::Units::cm; YcorB = 6*Gaudi::Units::cm; lenPla =1.7*Gaudi::Units::cm; Blia = 16.9*Gaudi::Units::cm;} - if (ModuleNcp==37||ModuleNcp==60) { YcorA = 8*Gaudi::Units::cm; YcorB = 9*Gaudi::Units::cm; lenPla =2.8*Gaudi::Units::cm; Blia = 16.4*Gaudi::Units::cm;} - - TransCut2 = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(0.1*Gaudi::Units::cm,SideFl*17.5*Gaudi::Units::cm,-PosY+YcorA); - - // For modules on the side C apply extra transformation - // which implements ReflectZ(0) - if(neg) { - GeoTrf::Vector3D ptTmp = TransCut2*GeoTrf::Vector3D(0.,0.,0.); - TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCut2; - } + if (sec_number==2 && m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))) { + volname = "CutB"; m_dbManager->SetCurrentCuts(volname); + PosXcut = m_dbManager->CutsXpos(); + PosYcut = m_dbManager->CutsYpos(); + Rmore = 0.8*Gaudi::Units::cm; - if (ModuleNcp>=60 && ModuleNcp<=62) { - TransCutL = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,-PosXcut-Blia); + // Inert materials, CutB1 + dX1 = m_dbManager->CutsDX1()+Rmore; + dX2 = m_dbManager->CutsDX2()+Rmore; + dY1 = m_dbManager->CutsDY1()+Rmore; + dY2 = m_dbManager->CutsDY2()+Rmore; + dZ1 = m_dbManager->CutsDZ1(); - // ReflectZ for C side - if(neg) { - GeoTrf::Vector3D ptTmp = TransCutL*GeoTrf::Vector3D(0.,0.,0.); - TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutL; - } - } else if (ModuleNcp>=35 && ModuleNcp<=37) { - TransCutR = GeoTrf::TranslateZ3D(-Radius) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) - * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,PosXcut+Blia) - * GeoTrf::RotateY3D(180*Gaudi::Units::deg); - // ReflectZ for C side - if(neg) { - GeoTrf::Vector3D ptTmp = TransCutR*GeoTrf::Vector3D(0.,0.,0.); - TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutR; + checking("CutB1", false, 1, dX1,dX2,dY1,dY2,dZ1); + GeoTrd* CutB1 = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); + //const GeoShape& CutB = *CutB1; + CutB = CutB1; + + // Materials are in cuting region, 1up Iron plate + volname = "Cut1up"; m_dbManager->SetCurrentCuts(volname); //>> + PosY = m_dbManager->CutsYpos(); + + dX1 = m_dbManager->CutsDX1()+Rmore; + dX2 = m_dbManager->CutsDX2()+Rmore; + dY1 = m_dbManager->CutsDY1(); + dY2 = m_dbManager->CutsDY2(); + dZ1 = m_dbManager->CutsDZ1(); + + checking("Cut1up", false, 1, dX1,dX2,dY1,dY2,dZ1); + GeoTrd* Cut1up = new GeoTrd(dX1,dX2,dY1,dY2,dZ1); + + volname = "Cut2down"; m_dbManager->SetCurrentCuts(volname); //>> + dX1 = m_dbManager->CutsDX1()+Rmore; + dX2 = m_dbManager->CutsDX2()+Rmore; + dY1 = m_dbManager->CutsDY1(); + dY2 = m_dbManager->CutsDY2(); + dZ2 = m_dbManager->CutsDZ1(); + + checking("Cut2down", false, 1, dX1,dX2,dY1,dY2,dZ2); + GeoTrd* Cut1down = new GeoTrd(dX1,dX2,dY1,dY2,dZ2); + + GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2); + + const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA); + CutA = &CutA1; + + Radius = (m_dbManager->TILBrmaximal() + m_dbManager->TILBrminimal())/2 * Gaudi::Units::cm; + + if (ModuleNcp==35||ModuleNcp==62) { YcorA = 5*Gaudi::Units::cm; YcorB = 5*Gaudi::Units::cm; lenPla =0.8*Gaudi::Units::cm, Blia = 17.4*Gaudi::Units::cm;} + if (ModuleNcp==36||ModuleNcp==61) { YcorA = 6.5*Gaudi::Units::cm; YcorB = 6*Gaudi::Units::cm; lenPla =1.7*Gaudi::Units::cm; Blia = 16.9*Gaudi::Units::cm;} + if (ModuleNcp==37||ModuleNcp==60) { YcorA = 8*Gaudi::Units::cm; YcorB = 9*Gaudi::Units::cm; lenPla =2.8*Gaudi::Units::cm; Blia = 16.4*Gaudi::Units::cm;} + + TransCut2 = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(0.1*Gaudi::Units::cm,SideFl*17.5*Gaudi::Units::cm,-PosY+YcorA); + + // For modules on the side C apply extra transformation + // which implements ReflectZ(0) + if (neg) { + GeoTrf::Vector3D ptTmp = TransCut2*GeoTrf::Vector3D(0.,0.,0.); + TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCut2; } + + if (ModuleNcp>=60 && ModuleNcp<=62) { + TransCutL = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,-PosXcut-Blia); + + // ReflectZ for C side + if (neg) { + GeoTrf::Vector3D ptTmp = TransCutL*GeoTrf::Vector3D(0.,0.,0.); + TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutL; + } + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + TransCutR = GeoTrf::TranslateZ3D(-Radius) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg) * GeoTrf::RotateX3D(phi*Gaudi::Units::deg) + * GeoTrf::Translate3D(-1.4*Gaudi::Units::cm,PosYcut+YcorB,PosXcut+Blia) + * GeoTrf::RotateY3D(180*Gaudi::Units::deg); + // ReflectZ for C side + if (neg) { + GeoTrf::Vector3D ptTmp = TransCutR*GeoTrf::Vector3D(0.,0.,0.); + TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*Gaudi::Units::deg)*TransCutR; } - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: CutA and CutB Ok"<< endmsg; - } // end if, BoolCuts + } + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: CutA and CutB Ok"<< endmsg; + } // end if, BoolCuts //---------------------Girder----------------------------------------- - + int Id4 = m_dbManager->GetModType()%100; double thicknessGirderMother = 0.0; - double specialModuleZShift = 0.0; + double specialModuleZShift = 0.0; - if (m_dbManager->TILBngirder() > 0) - { + if (m_dbManager->TILBngirder() > 0) { // Mother volume for girder thicknessGirderMother = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend() - m_dbManager->TILBdzend2())*Gaudi::Units::cm; // special module with special girder @@ -230,19 +228,18 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, // std::cout <<"\t\t PS Girder Module = "<<ModuleNcp<< std::endl; // std::cout <<"\t\t PS thicknessGirderMother = "<<thicknessGirderMother<< std::endl; //ps account for special ITC modules 14,15,18,19 - if ((Id4 == 7) && (sec_number == 3)) - { - specialModuleZShift = 0.5*Gaudi::Units::cm*(m_dbManager->TILBdzgir() - m_dbManager->TILBdzmodul()); - } + if ((Id4 == 7) && (sec_number == 3)) { + specialModuleZShift = 0.5*Gaudi::Units::cm*(m_dbManager->TILBdzgir() - m_dbManager->TILBdzmodul()); + } // - checking("GirderMother", false, 3, - thicknessGirderMother/2,thicknessGirderMother/2,dy1GirderMother,dy2GirderMother,heightGirderMother/2); + checking("GirderMother", false, 3, + thicknessGirderMother/2,thicknessGirderMother/2,dy1GirderMother,dy2GirderMother,heightGirderMother/2); GeoTrd* girderMother = new GeoTrd(thicknessGirderMother/2, - thicknessGirderMother/2, - dy1GirderMother, - dy2GirderMother, - heightGirderMother/2); + thicknessGirderMother/2, + dy1GirderMother, + dy2GirderMother, + heightGirderMother/2); GeoLogVol* lvGirderMother = new GeoLogVol("GirderMother",girderMother,matAir); GeoPhysVol* pvGirderMother = new GeoPhysVol(lvGirderMother); @@ -255,17 +252,17 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, GeoTransform* tfGirderMother = 0; - if(sec_number==3) + if (sec_number==3) tfGirderMother = new GeoTransform(GeoTrf::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*Gaudi::Units::cm/2, 0., - (m_dbManager->TILBrmax()-m_dbManager->TILBrmin())*Gaudi::Units::cm/2)); + (m_dbManager->TILBrmax()-m_dbManager->TILBrmin())*Gaudi::Units::cm/2)); else tfGirderMother = new GeoTransform(GeoTrf::Translate3D((m_dbManager->TILBdzend()-m_dbManager->TILBdzend2())*Gaudi::Units::cm/2, 0., - (m_dbManager->TILBrmax()-rminb)*Gaudi::Units::cm/2)); + (m_dbManager->TILBrmax()-rminb)*Gaudi::Units::cm/2)); mother->add(tfGirderMother); - mother->add(pvGirderMother); + mother->add(pvGirderMother); - if(m_log->level()<=MSG::DEBUG) + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG <<" _fillSection: GirderMother Ok "<< endmsg; } // End Girder @@ -275,47 +272,43 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, double rless =.150; // 150 [mkm] int NbPeriod =0; - if(m_dbManager->TILBdrfront() > 0) - { - if(sec_number==3) - { + if (m_dbManager->TILBdrfront() > 0) { + if (sec_number==3) { //ITC coverplate thicknessFrontPlate = (m_dbManager->TILBdzmodul() - zlen_itc2)*Gaudi::Units::cm; - if (thicknessFrontPlate > rless) - { - heightFrontPlate = m_dbManager->TILBdrfront()*Gaudi::Units::cm; - dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<", "<<thicknessFrontPlate/2 - <<" dY1,dY2= "<<dy1FrontPlate<<" "<<dy2FrontPlate<<" dZ= "<<heightFrontPlate/2 - << endmsg; - - GeoTrd* frontPlateSh = new GeoTrd(thicknessFrontPlate/2, - thicknessFrontPlate/2, - dy1FrontPlate, - dy2FrontPlate, - heightFrontPlate/2); - - GeoLogVol* lvFrontPlateSh = new GeoLogVol("FrontPlateSh",frontPlateSh,matIron); - GeoPhysVol* pvFrontPlateSh = new GeoPhysVol(lvFrontPlateSh); - GeoTransform* tfFrontPlateSh = new GeoTransform(GeoTrf::Translate3D( - -m_dbManager->TILBdzmodul()/2*Gaudi::Units::cm+thicknessFrontPlate/2, 0., - (rminb - tile_rmax)/2*Gaudi::Units::cm)); - - mother->add(tfFrontPlateSh); - mother->add(pvFrontPlateSh); - } else { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" FrontPlateSh was lost "<< endmsg; - } - } - else if (sec_number==2 && (m_dbManager->BoolCuts() && - ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) )) - { + if (thicknessFrontPlate > rless) { + heightFrontPlate = m_dbManager->TILBdrfront()*Gaudi::Units::cm; + dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<", "<<thicknessFrontPlate/2 + <<" dY1,dY2= "<<dy1FrontPlate<<" "<<dy2FrontPlate<<" dZ= "<<heightFrontPlate/2 + << endmsg; + + GeoTrd* frontPlateSh = new GeoTrd(thicknessFrontPlate/2, + thicknessFrontPlate/2, + dy1FrontPlate, + dy2FrontPlate, + heightFrontPlate/2); + GeoLogVol* lvFrontPlateSh = new GeoLogVol("FrontPlateSh",frontPlateSh,matIron); + GeoPhysVol* pvFrontPlateSh = new GeoPhysVol(lvFrontPlateSh); + GeoTransform* tfFrontPlateSh = new GeoTransform(GeoTrf::Translate3D( + -m_dbManager->TILBdzmodul()/2*Gaudi::Units::cm+thicknessFrontPlate/2, 0., + (rminb - tile_rmax)/2*Gaudi::Units::cm)); + + mother->add(tfFrontPlateSh); + mother->add(pvFrontPlateSh); + + } else { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" FrontPlateSh was lost "<< endmsg; + } + + } else if (sec_number==2 && (m_dbManager->BoolCuts() && + ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) )) { std::string volname =""; double dXCutA = 0, dXCutB = 0; @@ -323,45 +316,43 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, volname = "Cut1up"; m_dbManager->SetCurrentCuts(volname); dXCutA = m_dbManager->CutsDX1(); - volname = "CutB"; m_dbManager->SetCurrentCuts(volname); - dXCutB = m_dbManager->CutsDX1(); - + volname = "CutB"; m_dbManager->SetCurrentCuts(volname); + dXCutB = m_dbManager->CutsDX1(); + thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*Gaudi::Units::cm; heightFrontPlate = m_dbManager->TILBdrfront()*Gaudi::Units::cm; dy1FrontPlate = (rminb*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2 -(dXCutA+dXCutB), - thicknessFrontPlate/2 -(dXCutA+dXCutB), + thicknessFrontPlate/2 -(dXCutA+dXCutB), dy1FrontPlate, - dy2FrontPlate, - heightFrontPlate/2); + dy2FrontPlate, + heightFrontPlate/2); // Cuting of Plate /* - GeoTrf::Transform3D TCu2 = GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) - * GeoTrf::Translate3D(thicknessFrontPlate/2-dXCutA,0,0); - GeoTransform* TCu = new GeoTransform(TCu2); + GeoTrf::Transform3D TCu2 = GeoTrf::RotateX3D((90-phi)*Gaudi::Units::deg) * GeoTrf::RotateY3D(180*Gaudi::Units::deg) + * GeoTrf::Translate3D(thicknessFrontPlate/2-dXCutA,0,0); + GeoTransform* TCu = new GeoTransform(TCu2); - const GeoShape &tmp_frontPlate = frontPlate->subtract((*CutA)<<TCu2); - .subtract((*CutB)<<TransCutL); + const GeoShape &tmp_frontPlate = frontPlate->subtract((*CutA)<<TCu2); + .subtract((*CutB)<<TransCutL); */ - GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); - GeoPhysVol* pvFrontPlate = new GeoPhysVol(lvFrontPlate); + GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); + GeoPhysVol* pvFrontPlate = new GeoPhysVol(lvFrontPlate); GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D( - (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*Gaudi::Units::cm+ dXCutB, 0., - (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); + (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*Gaudi::Units::cm+ dXCutB, 0., + (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); mother->add(tfFrontPlate); mother->add(pvFrontPlate); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG<<" _fillSection: FrontPlate Cut Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG<<" _fillSection: FrontPlate Cut Ok "<< endmsg; - } - else - { + } else { //Ordinary frontplate thicknessFrontPlate = (m_dbManager->TILBdzmodul() - m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())*Gaudi::Units::cm; heightFrontPlate = m_dbManager->TILBdrfront()*Gaudi::Units::cm; @@ -369,16 +360,16 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, dy2FrontPlate = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; GeoTrd* frontPlate = new GeoTrd(thicknessFrontPlate/2, - thicknessFrontPlate/2, - dy1FrontPlate, - dy2FrontPlate, - heightFrontPlate/2); + thicknessFrontPlate/2, + dy1FrontPlate, + dy2FrontPlate, + heightFrontPlate/2); - GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); + GeoLogVol* lvFrontPlate = new GeoLogVol("FrontPlate",frontPlate,matIron); GeoPhysVol* pvFrontPlate = new GeoPhysVol(lvFrontPlate); GeoTransform* tfFrontPlate = new GeoTransform(GeoTrf::Translate3D( - (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*Gaudi::Units::cm, 0., - (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); + (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2())/2*Gaudi::Units::cm, 0., + (m_dbManager->TILBrmin()-m_dbManager->TILBdrfront()/2-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); mother->add(tfFrontPlate); mother->add(pvFrontPlate); @@ -388,297 +379,277 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, //--------------------End Plates-------------------------------------- double dy1EndPlate, dy2EndPlate, thicknessEndPlate, heightEndPlate; - //VARIABLES FOR END PLATE HOLE + //VARIABLES FOR END PLATE HOLE double heightEPHole = m_dbManager->TILBflangex()*Gaudi::Units::cm; double dyEPHole = m_dbManager->TILBflangex()*Gaudi::Units::cm/2; - // ps . shifts for end plates in cutout regions - GeoTrf::Transform3D cutOutTransformation(GeoTrf::Transform3D::Identity()); + // ps . shifts for end plates in cutout regions + GeoTrf::Transform3D cutOutTransformation(GeoTrf::Transform3D::Identity()); //first endplate GeoTransform* tfEndPlateSh{nullptr}; - if (m_dbManager->TILBdzend1() > 0) - { - if (m_dbManager->TILBdzend() < m_dbManager->TILBdzend1()) - { - + if (m_dbManager->TILBdzend1() > 0) { + if (m_dbManager->TILBdzend() < m_dbManager->TILBdzend1()) { + //Short endplate dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm; dy2EndPlate = m_dbManager->TILBrmax() * tan_delta_phi_2 * Gaudi::Units::cm; thicknessEndPlate = m_dbManager->TILBdzend1() * Gaudi::Units::cm; heightEndPlate = (m_dbManager->TILBrmax() - rminb) * Gaudi::Units::cm; // - // creating standart endplate. It is the same for + // creating standart endplate. It is the same for // both standard mosules and modules with cuts // - GeoTrd* endPlateSh = new GeoTrd(thicknessEndPlate/2, - thicknessEndPlate/2, - dy1EndPlate, - dy2EndPlate, - heightEndPlate/2); - GeoLogVol* lvEndPlateSh = 0; - - // if ( sec_number==2 && ( (ModuleNcp==37)||( ModuleNcp==60) ) ) - if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) - {//Short endplate Cut-outs + GeoTrd* endPlateSh = new GeoTrd(thicknessEndPlate/2, + thicknessEndPlate/2, + dy1EndPlate, + dy2EndPlate, + heightEndPlate/2); + GeoLogVol* lvEndPlateSh = 0; + + // if ( sec_number==2 && ( (ModuleNcp==37)||( ModuleNcp==60) ) ) + if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) { // Short endplate Cut-outs + + // + // shape for the cutted part + // + GeoTrd* endPlateShCut = new GeoTrd(thicknessEndPlate, + thicknessEndPlate, + heightEndPlate/2., + heightEndPlate/2., + dy2EndPlate); + + + double rotationAngle ; + double shiftCutPlate ; + int rotationSign = 1; + if (ModuleNcp > 50) rotationSign *= -1; + if ( neg ) rotationSign *= -1; + + + if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) { + rotationAngle = (180.0 - 25.3125 )* Gaudi::Units::deg ; // ATLLEMS_0003 0004 + shiftCutPlate = 38.7 * Gaudi::Units::mm; + + cutOutTransformation = + GeoTrf::Translate3D(0,0, -heightEndPlate/2.) * + GeoTrf::RotateX3D( 90 * Gaudi::Units::deg ) * + GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; + lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3760) , matIron); + + } else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) { + rotationAngle = - ( 116.4832 - 90. )* Gaudi::Units::deg ; // ATLLEMS_0005 0006 + shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1448.4 * Gaudi::Units::mm); + + cutOutTransformation = + GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * + GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate + 0.5*dy2EndPlate*(1.- std::cos(rotationAngle*Gaudi::Units::rad))) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; + lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3661) , matIron); + + } else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) { + rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0007 0008 + shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1534.6 * Gaudi::Units::mm); + + cutOutTransformation = + GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * + GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; + lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3562) , matIron); - // - // shape for the cutted part - // - GeoTrd* endPlateShCut = new GeoTrd(thicknessEndPlate, - thicknessEndPlate, - heightEndPlate/2., - heightEndPlate/2., - dy2EndPlate); - - - double rotationAngle ; - double shiftCutPlate ; - int rotationSign = 1; - if (ModuleNcp > 50) rotationSign *= -1; - if ( neg ) rotationSign *= -1; - - - if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) - { - rotationAngle = (180.0 - 25.3125 )* Gaudi::Units::deg ; // ATLLEMS_0003 0004 - shiftCutPlate = 38.7 * Gaudi::Units::mm; - - cutOutTransformation = - GeoTrf::Translate3D(0,0, -heightEndPlate/2.) * - GeoTrf::RotateX3D( 90 * Gaudi::Units::deg ) * - GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; - - const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; - lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3760) , matIron); - } - else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) - { - rotationAngle = - ( 116.4832 - 90. )* Gaudi::Units::deg ; // ATLLEMS_0005 0006 - shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1448.4 * Gaudi::Units::mm); - - cutOutTransformation = - GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * - GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate + 0.5*dy2EndPlate*(1.- std::cos(rotationAngle*Gaudi::Units::rad))) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + } else { + (*m_log) << MSG::ERROR <<" TileGeoSectionBuilder::fillSection . Wrong Module in cut-out region. ModuleNcp= "<<ModuleNcp<< endmsg; + lvEndPlateSh = new GeoLogVol("EndPlateSh", endPlateSh , matIron); + } - const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; - lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3661) , matIron); - } - else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) - { - rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0007 0008 - shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1534.6 * Gaudi::Units::mm); - - cutOutTransformation = - GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * - GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; - - const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ; - lvEndPlateSh = new GeoLogVol("EndPlateSh", &(endPlateShCutted3562) , matIron); - } - else - { - (*m_log) << MSG::ERROR <<" TileGeoSectionBuilder::fillSection . Wrong Module in cut-out region. ModuleNcp= "<<ModuleNcp<< endmsg; + } else { lvEndPlateSh = new GeoLogVol("EndPlateSh", endPlateSh , matIron); } - - } - else - { - lvEndPlateSh = new GeoLogVol("EndPlateSh", endPlateSh , matIron); - } - // const GeoShape & endPlateShFinal = (endPlateSh->subtract( (*CutB)<<TransCutL ) ); - //subtract((*CutB)<<TransCutL); + //subtract((*CutB)<<TransCutL); GeoPhysVol* pvEndPlateSh = new GeoPhysVol(lvEndPlateSh); tfEndPlateSh = new GeoTransform(GeoTrf::Translate3D( - specialModuleZShift + - (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., - (m_dbManager->TILBrmax() - tile_rmax)*Gaudi::Units::cm/2)); + specialModuleZShift + + (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., + (m_dbManager->TILBrmax() - tile_rmax)*Gaudi::Units::cm/2)); tfEndPlateSh->ref(); - + mother->add(tfEndPlateSh); mother->add(pvEndPlateSh); tfEndPlateSh->unref(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: ext.barrel EndPlateSh Ok "<< endmsg; - } - else - { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: ext.barrel EndPlateSh Ok "<< endmsg; + + } else { //Ordinary endplate dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm; dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm; thicknessEndPlate = m_dbManager->TILBdzend1() * Gaudi::Units::cm; - heightEndPlate = (tile_rmax-rminb)*Gaudi::Units::cm; + heightEndPlate = (tile_rmax-rminb)*Gaudi::Units::cm; GeoTrd* endPlate1 = new GeoTrd(thicknessEndPlate/2, - thicknessEndPlate/2, - dy1EndPlate, - dy2EndPlate, - heightEndPlate/2); + thicknessEndPlate/2, + dy1EndPlate, + dy2EndPlate, + heightEndPlate/2); GeoLogVol* lvEndPlate1 = new GeoLogVol("EndPlate1",endPlate1,matIron); GeoPhysVol* pvEndPlate1 = new GeoPhysVol(lvEndPlate1); //Position air hole - if (m_dbManager->TILBflangex() > 0.) - { - GeoTrd* epHole1 = new GeoTrd (thicknessEndPlate/2, - thicknessEndPlate/2, - dyEPHole, - dyEPHole, - heightEPHole/2); - - GeoLogVol* lvEPHole1 = new GeoLogVol("EPHole1",epHole1,matAir); - GeoPhysVol* pvEPHole1 = new GeoPhysVol(lvEPHole1); - GeoTransform* tfEPHole1 = new GeoTransform(GeoTrf::Translate3D(0.,0., - (m_dbManager->TILBflangey()-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); - pvEndPlate1->add(tfEPHole1); - pvEndPlate1->add(pvEPHole1); + if (m_dbManager->TILBflangex() > 0.) { + GeoTrd* epHole1 = new GeoTrd (thicknessEndPlate/2, + thicknessEndPlate/2, + dyEPHole, + dyEPHole, + heightEPHole/2); + + GeoLogVol* lvEPHole1 = new GeoLogVol("EPHole1",epHole1,matAir); + GeoPhysVol* pvEPHole1 = new GeoPhysVol(lvEPHole1); + GeoTransform* tfEPHole1 = new GeoTransform(GeoTrf::Translate3D(0.,0., + (m_dbManager->TILBflangey()-(tile_rmax + rminb)/2)*Gaudi::Units::cm)); + pvEndPlate1->add(tfEPHole1); + pvEndPlate1->add(pvEPHole1); } GeoTransform* tfEndPlate1 = new GeoTransform(GeoTrf::Translate3D( - (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., 0.)); + (m_dbManager->TILBdzend1() - m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., 0.)); mother->add(tfEndPlate1); - mother->add(pvEndPlate1); + mother->add(pvEndPlate1); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Ordinary EndPlateSh Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Ordinary EndPlateSh Ok "<< endmsg; } } //second endplate GeoTransform* tfEndPlate2{nullptr}; - if (m_dbManager->TILBdzend2() > 0) - { - //Short endplate Cut-outs - double radShift =lenPla; - double rminbT=rminb + radShift; + if (m_dbManager->TILBdzend2() > 0) { + //Short endplate Cut-outs + double radShift =lenPla; + double rminbT=rminb + radShift; - dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm; - dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm; - thicknessEndPlate = m_dbManager->TILBdzend2() * Gaudi::Units::cm; - heightEndPlate = (tile_rmax-rminb) * Gaudi::Units::cm; - - - GeoLogVol* lvEndPlate2 = 0; - GeoTrd* endPlate2 = new GeoTrd(thicknessEndPlate/2, - thicknessEndPlate/2, - dy1EndPlate, - dy2EndPlate, - heightEndPlate/2); - - tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D( - (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., 0.)); - tfEndPlate2->ref(); - - if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) - {//Short endplate Cut-outs - - GeoTrd* endPlate2Cut = new GeoTrd(thicknessEndPlate, - thicknessEndPlate, - heightEndPlate/2., - heightEndPlate/2., - dy2EndPlate); + dy1EndPlate = rminb * tan_delta_phi_2 * Gaudi::Units::cm; + dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm; + thicknessEndPlate = m_dbManager->TILBdzend2() * Gaudi::Units::cm; + heightEndPlate = (tile_rmax-rminb) * Gaudi::Units::cm; + + + GeoLogVol* lvEndPlate2 = 0; + GeoTrd* endPlate2 = new GeoTrd(thicknessEndPlate/2, + thicknessEndPlate/2, + dy1EndPlate, + dy2EndPlate, + heightEndPlate/2); + + tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D( + (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0., 0.)); + tfEndPlate2->ref(); + + if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) { // Short endplate Cut-outs + + GeoTrd* endPlate2Cut = new GeoTrd(thicknessEndPlate, + thicknessEndPlate, + heightEndPlate/2., + heightEndPlate/2., + dy2EndPlate); double rotationAngle ; double shiftCutPlate ; int rotationSign = 1; if (ModuleNcp > 50) rotationSign *= -1; - if ( neg ) rotationSign *= -1; - - if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) - { - rotationAngle = - ( 115.3125 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0011 0012 - shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1364.0 * Gaudi::Units::mm); - - cutOutTransformation = - GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * - GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; - - const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; - lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3760) , matIron); - } - else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) - { - rotationAngle = - ( 109.6875 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0009 0010 - shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1464.0 * Gaudi::Units::mm); - - cutOutTransformation = - GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * - GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; - - const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; - lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3661) , matIron); - } - else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) - { - rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0009 0010 - shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - ( 1915.0 -385.0 )* Gaudi::Units::mm); // girder is subtracted (no drawing) - - cutOutTransformation = - GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * - GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * - GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; - - const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; - lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3562) , matIron); - } - + if ( neg ) rotationSign *= -1; + + if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) { + rotationAngle = - ( 115.3125 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0011 0012 + shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1364.0 * Gaudi::Units::mm); + + cutOutTransformation = + GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * + GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; + lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3760) , matIron); + + } else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) { + rotationAngle = - ( 109.6875 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0009 0010 + shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - 1464.0 * Gaudi::Units::mm); + + cutOutTransformation = + GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * + GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; + lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3661) , matIron); + + } else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) { + rotationAngle = - ( 104.0625 - 90.0 )* Gaudi::Units::deg ; // ATLLEMS_0009 0010 + shiftCutPlate = ( ( m_dbManager->TILBrmax() - rminb )*Gaudi::Units::cm - ( 1915.0 -385.0 )* Gaudi::Units::mm); // girder is subtracted (no drawing) + + cutOutTransformation = + GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) * + GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) * + GeoTrf::RotateX3D( rotationSign * rotationAngle ) ; + + const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ; + lvEndPlate2 = new GeoLogVol("EndPlate2", &(endPlate2Cutted3562) , matIron); + } + // dy1EndPlate = rminbT * tan_delta_phi_2 * Gaudi::Units::cm; // dy2EndPlate = tile_rmax * tan_delta_phi_2 * Gaudi::Units::cm; // thicknessEndPlate = m_dbManager->TILBdzend2() * Gaudi::Units::cm; // heightEndPlate = (tile_rmax - rminbT) * Gaudi::Units::cm; - + // tfEndPlate2 = new GeoTransform(GeoTrf::Translate3D( // (-m_dbManager->TILBdzend2() + m_dbManager->TILBdzmodul())*Gaudi::Units::cm/2, 0, radShift/2*Gaudi::Units::cm)); - - } - else - { + + } else { lvEndPlate2 = new GeoLogVol("EndPlate2",endPlate2,matIron); } - - GeoPhysVol* pvEndPlate2 = new GeoPhysVol(lvEndPlate2); - - //Position air hole - if (m_dbManager->TILBflangex() > 0) - { - dyEPHole = m_dbManager->TILBflangex()*Gaudi::Units::cm/2; - - GeoTrd* epHole2 = new GeoTrd (thicknessEndPlate/2, - thicknessEndPlate/2, - dyEPHole, - dyEPHole, - heightEPHole/2); - - GeoLogVol* lvEPHole2 = new GeoLogVol("EPHole2",epHole2,matAir); - GeoPhysVol* pvEPHole2 = new GeoPhysVol(lvEPHole2); - GeoTransform* tfEPHole2 = new GeoTransform(GeoTrf::Translate3D(0.,0., - (m_dbManager->TILBflangey()-(tile_rmax + rminbT)/2)*Gaudi::Units::cm)); - pvEndPlate2->add(tfEPHole2); - pvEndPlate2->add(pvEPHole2); - } - mother->add(tfEndPlate2); - mother->add(pvEndPlate2); - tfEndPlate2->unref(); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: EndPlate2 Ok "<< endmsg; - + GeoPhysVol* pvEndPlate2 = new GeoPhysVol(lvEndPlate2); + + //Position air hole + if (m_dbManager->TILBflangex() > 0) { + dyEPHole = m_dbManager->TILBflangex()*Gaudi::Units::cm/2; + + GeoTrd* epHole2 = new GeoTrd (thicknessEndPlate/2, + thicknessEndPlate/2, + dyEPHole, + dyEPHole, + heightEPHole/2); + + GeoLogVol* lvEPHole2 = new GeoLogVol("EPHole2",epHole2,matAir); + GeoPhysVol* pvEPHole2 = new GeoPhysVol(lvEPHole2); + GeoTransform* tfEPHole2 = new GeoTransform(GeoTrf::Translate3D(0.,0., + (m_dbManager->TILBflangey()-(tile_rmax + rminbT)/2)*Gaudi::Units::cm)); + pvEndPlate2->add(tfEPHole2); + pvEndPlate2->add(pvEPHole2); + } + + mother->add(tfEndPlate2); + mother->add(pvEndPlate2); + tfEndPlate2->unref(); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: EndPlate2 Ok "<< endmsg; + } // End Plates //---------------------------------------------------Absorber-------------------------------------------------------- @@ -687,23 +658,22 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, double dy1Absorber = (m_dbManager->TILBrmin()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; double dy2Absorber = (m_dbManager->TILBrmax()*tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - checking("Absorber", true, 3, - thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Absorber", true, 3, + thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2); //----------------------------- Absorber ------------------------------------------------------------------- double thicknessPeriod =0, thicknessAbsorber1 =0, thicknessAbsorber2 =0, thicknessAbsorber3 =0; - double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0; + double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0; int nA1 =32, nA2 = 0, nA3 =16; GeoTrd *absorber{nullptr}, *absorber1{nullptr}, *absorber3{nullptr}; GeoLogVol *lvAbsorber{nullptr}, *lvAbsorber1{nullptr}, *lvAbsorber3{nullptr}; GeoPhysVol *pvAbsorber{nullptr}, *pvAbsorber1{nullptr}, *pvAbsorber3{nullptr}; GeoPhysVol *pvTmp_Absorber1{nullptr}, *pvTmp_Absorber3{nullptr}; - + // Perform different actions depending on sections - switch (sec_number) - { - case 2: + switch (sec_number) { + case 2: { //Extended barrel - consists of ordinary periods of type 1 only thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; @@ -712,31 +682,31 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, nA2 = m_dbManager->TILBnperiod() - (nA1+nA3); thicknessAbsorber1 = nA1*thicknessPeriod; - PosAbsor1 = thicknessAbsorber/2 - thicknessAbsorber1/2; + PosAbsor1 = thicknessAbsorber/2 - thicknessAbsorber1/2; thicknessAbsorber2 = nA2*thicknessPeriod; - PosAbsor2 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2/2; + PosAbsor2 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2/2; thicknessAbsorber3 = nA3*thicknessPeriod; - PosAbsor3 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2 - thicknessAbsorber3/2; + PosAbsor3 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2 - thicknessAbsorber3/2; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" Number of periods per Module: N= "<<nA1+nA2+nA3 - << " Middle absorber, numbers of periods = "<<nA2 - << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" Number of periods per Module: N= "<<nA1+nA2+nA3 + << " Middle absorber, numbers of periods = "<<nA2 + << endmsg; // First Cut-out part absorber1 = new GeoTrd(thicknessAbsorber1/2, thicknessAbsorber1/2, - dy1Absorber, dy2Absorber, - heightAbsorber/2); + dy1Absorber, dy2Absorber, + heightAbsorber/2); lvAbsorber1 = new GeoLogVol("Absorber",absorber1,matIron); pvAbsorber1 = new GeoPhysVol(lvAbsorber1); // absorber without Cut-out, middle part absorber = new GeoTrd(thicknessAbsorber2/2, thicknessAbsorber2/2, - dy1Absorber, dy2Absorber, - heightAbsorber/2); + dy1Absorber, dy2Absorber, + heightAbsorber/2); lvAbsorber = new GeoLogVol("Absorber",absorber,matIron); pvAbsorber = new GeoPhysVol(lvAbsorber); @@ -744,40 +714,40 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, // // Second Cut-out part absorber3 = new GeoTrd(thicknessAbsorber3/2, thicknessAbsorber3/2, - dy1Absorber, dy2Absorber, - heightAbsorber/2); + dy1Absorber, dy2Absorber, + heightAbsorber/2); lvAbsorber3 = new GeoLogVol("Absorber",absorber3,matIron); pvAbsorber3 = new GeoPhysVol(lvAbsorber3); // - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Ex.Barrel pvAbsorber 1,3 Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Ex.Barrel pvAbsorber 1,3 Ok "<< endmsg; break; } - default: - { + default: + { absorber = new GeoTrd(thicknessAbsorber/2, thicknessAbsorber/2, - dy1Absorber, dy2Absorber, - heightAbsorber/2); + dy1Absorber, dy2Absorber, + heightAbsorber/2); if (m_dbManager->TILBnperiod() > 1) { - lvAbsorber = new GeoLogVol("Absorber",absorber,matIron); + lvAbsorber = new GeoLogVol("Absorber",absorber,matIron); } else { - // make C10special/Gap/Crack absorber volume from Air, Aluminium will be in period - lvAbsorber = new GeoLogVol("Absorber",absorber,matAir); + // make C10special/Gap/Crack absorber volume from Air, Aluminium will be in period + lvAbsorber = new GeoLogVol("Absorber",absorber,matAir); } pvAbsorber = new GeoPhysVol(lvAbsorber); - - if(m_log->level()<=MSG::DEBUG) { - if (m_dbManager->TILBnperiod() > 1) { - (*m_log) << MSG::DEBUG <<" _fillSection: default pvAbsorber Ok "<< endmsg; - } else { - (*m_log) << MSG::DEBUG <<" _fillSection: special pvAbsorber made from Air Ok "<< endmsg; - } + + if (m_log->level()<=MSG::DEBUG) { + if (m_dbManager->TILBnperiod() > 1) { + (*m_log) << MSG::DEBUG <<" _fillSection: default pvAbsorber Ok "<< endmsg; + } else { + (*m_log) << MSG::DEBUG <<" _fillSection: special pvAbsorber made from Air Ok "<< endmsg; + } } - + break; } } @@ -797,9 +767,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, GeoTransform* tfAbsorberChild = 0; // Perform different actions depending on sections - switch (sec_number) - { - case 1: + switch (sec_number) { + case 1: { //Barrel section //Divide absorber volume on two parts: first filled with @@ -807,20 +776,20 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, //First division thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; - MLOG(DEBUG) << "BARREL Section -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() + MLOG(DEBUG) << "BARREL Section -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() << ", dzglue: " << dzglue << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; m_barrelPeriodThickness = thicknessPeriod; m_barrelGlue = dzglue*Gaudi::Units::cm; - checking("Period 0", false, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 0", false, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvPeriod = new GeoLogVol("Period",period,matIron); pvPeriod = new GeoPhysVol(lvPeriod); @@ -834,10 +803,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, thicknessAbsorberChild = thicknessPeriod*(m_dbManager->TILBnperiod()-1); absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); @@ -848,8 +817,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, (thicknessAbsorberChild - thicknessAbsorber)/2); stPeriod = new GeoSerialTransformer(pvPeriod, - &xfReplica1, - m_dbManager->TILBnperiod()-1); + &xfReplica1, + m_dbManager->TILBnperiod()-1); pvAbsorberChild->add(new GeoSerialIdentifier(0)); pvAbsorberChild->add(stPeriod); @@ -862,14 +831,14 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, //Second division thicknessPeriod = (m_dbManager->TILBdzmast() + 2.*m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; - checking("Period 1", false, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 1", false, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvPeriod = new GeoLogVol("Period",period,matIron); pvPeriod = new GeoPhysVol(lvPeriod); @@ -882,10 +851,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, thicknessAbsorberChild = thicknessPeriod; absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); @@ -906,21 +875,21 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, break; } - case 2: + case 2: { //Extended barrel - consists of ordinary periods of type 1 only thicknessPeriod = 2. * (m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue) * Gaudi::Units::cm; - MLOG(DEBUG) << "EXTENDED BARREL Section -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() + MLOG(DEBUG) << "EXTENDED BARREL Section -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() << ", dzglue: " << dzglue << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; - checking("Period 2", false, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 2", false, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvPeriod = new GeoLogVol("Period",period,matIron); pvPeriod = new GeoPhysVol(lvPeriod); @@ -946,21 +915,19 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, pvAbsorber1->add(stPeriod); // - if (m_dbManager->BoolCuts()) - { - if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) - { - // Cuting of (-) - GeoCutVolAction action1(*CutA, TransCut2); - pvAbsorber1->apply(&action1); - pvTmp_Absorber1 = action1.getPV(); - // - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: CutA Ok "<< endmsg; - } // end special modules + if (m_dbManager->BoolCuts()) { + if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) { + // Cuting of (-) + GeoCutVolAction action1(*CutA, TransCut2); + pvAbsorber1->apply(&action1); + pvTmp_Absorber1 = action1.getPV(); + // + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: CutA Ok "<< endmsg; + } // end special modules } // end if, BoolCuts() - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber1 Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber1 Ok "<< endmsg; // middle partr of absorber GENFUNCTION periodPos2 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber2)/2; @@ -973,8 +940,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, pvAbsorber->add(new GeoSerialIdentifier(nA1)); pvAbsorber->add(stPeriod); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: pvAbsorber Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: pvAbsorber Ok "<< endmsg; // second partr of absorber // @@ -988,184 +955,182 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, pvAbsorber3->add(new GeoSerialIdentifier(nA1+nA2)); pvAbsorber3->add(stPeriod); - if (m_dbManager->BoolCuts()) - { - if (ModuleNcp>=60 && ModuleNcp<=62) { - // Cuting of pvEBarrelModuleMotherPos (Left) - // - GeoCutVolAction action2(*CutB, TransCutL); - pvAbsorber3->apply(&action2); - pvTmp_Absorber3 = action2.getPV(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: CutB L Ok "<< endmsg; - } else if (ModuleNcp>=35 && ModuleNcp<=37) { - // Cuting of pvEBarrelModuleMotherPos (Right) - // - GeoCutVolAction action3(*CutB, TransCutR); - pvAbsorber3->apply(&action3); - pvTmp_Absorber3 = action3.getPV(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: CutB R Ok "<< endmsg; - } - } // end if, BoolCuts() - if(m_log->level()<=MSG::DEBUG) { - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber3 Ok "<< endmsg; + if (m_dbManager->BoolCuts()) { + if (ModuleNcp>=60 && ModuleNcp<=62) { + // Cuting of pvEBarrelModuleMotherPos (Left) + // + GeoCutVolAction action2(*CutB, TransCutL); + pvAbsorber3->apply(&action2); + pvTmp_Absorber3 = action2.getPV(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: CutB L Ok "<< endmsg; + + } else if (ModuleNcp>=35 && ModuleNcp<=37) { + // Cuting of pvEBarrelModuleMotherPos (Right) + // + GeoCutVolAction action3(*CutB, TransCutR); + pvAbsorber3->apply(&action3); + pvTmp_Absorber3 = action3.getPV(); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: CutB R Ok "<< endmsg; } + } // end if, BoolCuts() + if (m_log->level()<=MSG::DEBUG) { + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber3 Ok "<< endmsg; + } break; } - case 3: + case 3: { //Plug Section 1 - consists of ordinary periods of type 3 // ps plug1 special module - if ((m_dbManager->TILBsection() == 7)||(m_dbManager->TILBsection() == 8)) - { - //Divide absorber volume on two parts: first filled with - //nrOfPeriods-1 ordinary period of type 1 and second with one special period of type 4 - - //First division - thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; - MLOG(DEBUG) << "PLUG Section 1 -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() - << ", dzglue: " << dzglue << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; - - checking("Period 3 (ITC1 special)", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); - - period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); - lvPeriod = new GeoLogVol("Period",period,matIron); - pvPeriod = new GeoPhysVol(lvPeriod); - - fillPeriod(pvPeriod, - thicknessPeriod*(1./Gaudi::Units::cm), - dzglue, - tan_delta_phi_2, - 1); // 1-period type - - thicknessAbsorberChild = thicknessPeriod*(m_dbManager->TILBnperiod()-1); + if ((m_dbManager->TILBsection() == 7)||(m_dbManager->TILBsection() == 8)) { + //Divide absorber volume on two parts: first filled with + //nrOfPeriods-1 ordinary period of type 1 and second with one special period of type 4 + + //First division + thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; + MLOG(DEBUG) << "PLUG Section 1 -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() + << ", dzglue: " << dzglue << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; + + checking("Period 3 (ITC1 special)", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + + period = new GeoTrd(thicknessPeriod/2, + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); + lvPeriod = new GeoLogVol("Period",period,matIron); + pvPeriod = new GeoPhysVol(lvPeriod); + + fillPeriod(pvPeriod, + thicknessPeriod*(1./Gaudi::Units::cm), + dzglue, + tan_delta_phi_2, + 1); // 1-period type + + thicknessAbsorberChild = thicknessPeriod*(m_dbManager->TILBnperiod()-1); + + absorberChild = new GeoTrd(thicknessAbsorberChild/2, + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); + lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); + pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); + + // Place periods into Absorber Child like G4 replica + GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2; + TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp); + if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,m_dbManager->TILBnperiod()-1, + (thicknessAbsorberChild - thicknessAbsorber)/2); + + stPeriod = new GeoSerialTransformer(pvPeriod, + &xfReplicaITC1sp, + m_dbManager->TILBnperiod()-1); + + pvAbsorberChild->add(new GeoSerialIdentifier(0)); + pvAbsorberChild->add(stPeriod); + + // Place absorber child + tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.)); + pvAbsorber->add(tfAbsorberChild); + pvAbsorber->add(pvAbsorberChild); + // + //Second division + // + thicknessPeriod = m_dbManager->TILBdzspac()*Gaudi::Units::cm; + + checking("Period 5 (ITC1 special)", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + + period = new GeoTrd(thicknessPeriod/2, + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); + lvPeriod = new GeoLogVol("Period",period,matIron); + pvPeriod = new GeoPhysVol(lvPeriod); + + fillPeriod(pvPeriod, + thicknessPeriod*(1./Gaudi::Units::cm), + dzglue, + tan_delta_phi_2, + 4); // 4-period type + + thicknessAbsorberChild = thicknessPeriod; + absorberChild = new GeoTrd(thicknessAbsorberChild/2, + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); + lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); + pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); + + if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,1, + (-thicknessAbsorberChild + thicknessAbsorber)/2); + + // Place period in the absorber child + tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvAbsorberChild->add(new GeoIdentifierTag(m_dbManager->TILBnperiod()-1)); + pvAbsorberChild->add(tfPeriod); + pvAbsorberChild->add(pvPeriod); + + // Place absorber child + tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.)); + pvAbsorber->add(tfAbsorberChild); + pvAbsorber->add(pvAbsorberChild); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (ITC plug special) Ok "<< endmsg; - absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); - lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); - pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); - - // Place periods into Absorber Child like G4 replica - GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2; - TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp); - if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,m_dbManager->TILBnperiod()-1, - (thicknessAbsorberChild - thicknessAbsorber)/2); - - stPeriod = new GeoSerialTransformer(pvPeriod, - &xfReplicaITC1sp, - m_dbManager->TILBnperiod()-1); - - pvAbsorberChild->add(new GeoSerialIdentifier(0)); - pvAbsorberChild->add(stPeriod); - - // Place absorber child - tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.)); - pvAbsorber->add(tfAbsorberChild); - pvAbsorber->add(pvAbsorberChild); - // - //Second division - // - thicknessPeriod = m_dbManager->TILBdzspac()*Gaudi::Units::cm; - - checking("Period 5 (ITC1 special)", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); - - period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); - lvPeriod = new GeoLogVol("Period",period,matIron); - pvPeriod = new GeoPhysVol(lvPeriod); - - fillPeriod(pvPeriod, - thicknessPeriod*(1./Gaudi::Units::cm), - dzglue, - tan_delta_phi_2, - 4); // 4-period type - - thicknessAbsorberChild = thicknessPeriod; - absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); - lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); - pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); - - if (m_verbose) checktransfunc(thicknessAbsorberChild,thicknessPeriod,1, - (-thicknessAbsorberChild + thicknessAbsorber)/2); - - // Place period in the absorber child - tfPeriod = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvAbsorberChild->add(new GeoIdentifierTag(m_dbManager->TILBnperiod()-1)); - pvAbsorberChild->add(tfPeriod); - pvAbsorberChild->add(pvPeriod); - - // Place absorber child - tfAbsorberChild = new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.)); - pvAbsorber->add(tfAbsorberChild); - pvAbsorber->add(pvAbsorberChild); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (ITC plug special) Ok "<< endmsg; - } - else - { - thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; - - checking("Period 3", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); - - period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); - lvPeriod = new GeoLogVol("Period",period,matIron); - pvPeriod = new GeoPhysVol(lvPeriod); - - fillPeriod(pvPeriod, - thicknessPeriod*(1./Gaudi::Units::cm), - dzglue, - tan_delta_phi_2, - 3); // 3-period type - - // Place periods into Absorber like G4 replica - GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2; - TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3); - if (m_verbose) checktransfunc(thicknessAbsorber,thicknessPeriod,m_dbManager->TILBnperiod(),0.0); - - //ps if( (m_dbManager->TILBsection()==7 || m_dbManager->TILBsection()==8) && m_dbManager->SCNTitem()==302) - // if( m_dbManager->TILBsection()==7 && m_dbManager->SCNTitem() == 302) - // NbPeriod = m_dbManager->TILBnperiod() - 1; - // else + } else { + thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; + + checking("Period 3", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + + period = new GeoTrd(thicknessPeriod/2, + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); + lvPeriod = new GeoLogVol("Period",period,matIron); + pvPeriod = new GeoPhysVol(lvPeriod); + + fillPeriod(pvPeriod, + thicknessPeriod*(1./Gaudi::Units::cm), + dzglue, + tan_delta_phi_2, + 3); // 3-period type + + // Place periods into Absorber like G4 replica + GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2; + TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3); + if (m_verbose) checktransfunc(thicknessAbsorber,thicknessPeriod,m_dbManager->TILBnperiod(),0.0); + + //ps if ( (m_dbManager->TILBsection()==7 || m_dbManager->TILBsection()==8) && m_dbManager->SCNTitem()==302) + // if ( m_dbManager->TILBsection()==7 && m_dbManager->SCNTitem() == 302) + // NbPeriod = m_dbManager->TILBnperiod() - 1; + // else NbPeriod = m_dbManager->TILBnperiod(); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" SCNTitem= "<<m_dbManager->SCNTitem()<<" NbPeriod= "<<NbPeriod<< endmsg; - stPeriod = new GeoSerialTransformer(pvPeriod, - &xfReplica3, - NbPeriod);//sbb - - pvAbsorber->add(new GeoSerialIdentifier(0)); - pvAbsorber->add(stPeriod); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case 3) Ok "<< endmsg; - } + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" SCNTitem= "<<m_dbManager->SCNTitem()<<" NbPeriod= "<<NbPeriod<< endmsg; + stPeriod = new GeoSerialTransformer(pvPeriod, + &xfReplica3, + NbPeriod);//sbb + + pvAbsorber->add(new GeoSerialIdentifier(0)); + pvAbsorber->add(stPeriod); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case 3) Ok "<< endmsg; + } break; } - case 4: + case 4: { //Plug Section 2 //Divide absorber volume on two parts: first filled with @@ -1173,17 +1138,17 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, //First division thicknessPeriod = 2.*(m_dbManager->TILBdzmast() + m_dbManager->TILBdzspac() + 2.*dzglue)*Gaudi::Units::cm; - MLOG(DEBUG) << "PLUG Section 2 -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() + MLOG(DEBUG) << "PLUG Section 2 -- m_dbManager->TILBdzmast(): " << m_dbManager->TILBdzmast() << ", m_dbManager->TILBdzspac(): " << m_dbManager->TILBdzspac() << ", dzglue: " << dzglue << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; - checking("Period 4", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 4", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvPeriod = new GeoLogVol("Period",period,matIron); pvPeriod = new GeoPhysVol(lvPeriod); @@ -1196,10 +1161,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, thicknessAbsorberChild = thicknessPeriod*(m_dbManager->TILBnperiod()-1); absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); @@ -1210,8 +1175,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, (thicknessAbsorberChild - thicknessAbsorber)/2); stPeriod = new GeoSerialTransformer(pvPeriod, - &xfReplica1, - m_dbManager->TILBnperiod()-1); + &xfReplica1, + m_dbManager->TILBnperiod()-1); pvAbsorberChild->add(new GeoSerialIdentifier(0)); pvAbsorberChild->add(stPeriod); @@ -1224,14 +1189,14 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, //Second division thicknessPeriod = m_dbManager->TILBdzspac()*Gaudi::Units::cm; - checking("Period 5", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 5", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessPeriod/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvPeriod = new GeoLogVol("Period",period,matIron); pvPeriod = new GeoPhysVol(lvPeriod); @@ -1243,10 +1208,10 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, thicknessAbsorberChild = thicknessPeriod; absorberChild = new GeoTrd(thicknessAbsorberChild/2, - thicknessAbsorberChild/2, - dy1Absorber, - dy2Absorber, - heightAbsorber/2); + thicknessAbsorberChild/2, + dy1Absorber, + dy2Absorber, + heightAbsorber/2); lvAbsorberChild = new GeoLogVol("AbsorberChild",absorberChild,matAir); pvAbsorberChild = new GeoPhysVol(lvAbsorberChild); @@ -1264,43 +1229,44 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, pvAbsorber->add(tfAbsorberChild); pvAbsorber->add(pvAbsorberChild); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case 4) Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case 4) Ok "<< endmsg; break; } - default: + default: { // C10_missing/Gap/Crack 5,6,14,15,16 - if ((m_dbManager->TILBsection()==5)||(m_dbManager->TILBsection()==6)) //Gap/Crack - m_dbManager->SetCurrentScin(100*m_dbManager->TILBsection() + 1); - else if ((m_dbManager->TILBsection()==14) || (m_dbManager->TILBsection()==15) || (m_dbManager->TILBsection()==16)) - m_dbManager->SetCurrentScin(m_dbManager->TILBcurscint()); - else - { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillSection: Unexpected section = " + if ((m_dbManager->TILBsection()==5)||(m_dbManager->TILBsection()==6)) { // Gap/Crack + m_dbManager->SetCurrentScin(100*m_dbManager->TILBsection() + 1); + + } else if ((m_dbManager->TILBsection()==14) || (m_dbManager->TILBsection()==15) || (m_dbManager->TILBsection()==16)) { + m_dbManager->SetCurrentScin(m_dbManager->TILBcurscint()); + + } else { + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillSection: Unexpected section = " << m_dbManager->TILBsection() << " for Gap/Crack" << endmsg; - return; + return; } thicknessPeriod = thicknessAbsorber; // the same as absorber, but made from Aluminium MLOG(DEBUG) << "DEFAULT Section -- thicknessAbsorber: " << thicknessAbsorber << " ==> thicknessPeriod: " << thicknessPeriod << endmsg; - checking("Period 6", true, 4, - thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); + checking("Period 6", true, 4, + thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2); double dy1Period = m_dbManager->TILBflangex()/2.*Gaudi::Units::cm; // correct size from the drawings double dy2Period = m_dbManager->TILBflangey()/2.*Gaudi::Units::cm; // correct size from the drawings if (dy1Period <= 0.0 || dy2Period <= 0.0 || dy1Period > dy1Absorber || dy2Period > dy2Absorber || dy1Period >= dy2Period ) { - dy1Period = dy1Absorber; - dy2Period = dy2Absorber; + dy1Period = dy1Absorber; + dy2Period = dy2Absorber; } period = new GeoTrd(thicknessPeriod/2, - thicknessPeriod/2, - dy1Period, - dy2Period, - heightAbsorber/2); + thicknessPeriod/2, + dy1Period, + dy2Period, + heightAbsorber/2); if (!matAluminium) matAluminium = m_theMaterialManager->getMaterial("std::Aluminium"); lvPeriod = new GeoLogVol("Period",period,matAluminium); // note - aluminium period inside air absorber here pvPeriod = new GeoPhysVol(lvPeriod); @@ -1319,8 +1285,8 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, pvAbsorber->add(tfPeriod); pvAbsorber->add(pvPeriod); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case default) Ok "<< endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<" _fillSection: Absorber (case default) Ok "<< endmsg; break; } } @@ -1331,67 +1297,64 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, double dXAbsorber = (m_dbManager->TILBdzend1() - m_dbManager->TILBdzend2()); double dZAbsorber = (m_dbManager->TILBrmax() - tile_rmax); - if (sec_number==3) - { - // ps specialModuleZShift - tfAbsorber = new GeoTransform(GeoTrf::Translate3D( specialModuleZShift + dXAbsorber*Gaudi::Units::cm/2, 0., dZAbsorber*Gaudi::Units::cm/2)); - mother->add(tfAbsorber); - mother->add(pvAbsorber); + if (sec_number==3) { + // ps specialModuleZShift + tfAbsorber = new GeoTransform(GeoTrf::Translate3D( specialModuleZShift + dXAbsorber*Gaudi::Units::cm/2, 0., dZAbsorber*Gaudi::Units::cm/2)); + mother->add(tfAbsorber); + mother->add(pvAbsorber); + + } else if (sec_number==2) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " _fillsection Ex.barrel in "<< endmsg; + + tfAbsorber1 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor1, 0., + (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); + mother->add(tfAbsorber1); + if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) { + mother->add(pvTmp_Absorber1); + pvAbsorber1->ref(); pvAbsorber1->unref(); + } else { + mother->add(pvAbsorber1); + } + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber1 Ok"<< endmsg; + + tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor2, 0., + (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); + mother->add(tfAbsorber); + mother->add(pvAbsorber); + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber Ok"<< endmsg; + + tfAbsorber3 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor3, 0., + (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); + mother->add(tfAbsorber3); + if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) { + mother->add(pvTmp_Absorber3); + pvAbsorber3->ref(); pvAbsorber3->unref(); + } else { + mother->add(pvAbsorber3); } - else if (sec_number==2) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " _fillsection Ex.barrel in "<< endmsg; - - tfAbsorber1 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor1, 0., - (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); - mother->add(tfAbsorber1); - if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) { - mother->add(pvTmp_Absorber1); - pvAbsorber1->ref(); pvAbsorber1->unref(); - } else { - mother->add(pvAbsorber1); - } - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber1 Ok"<< endmsg; - - tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor2, 0., - (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); - mother->add(tfAbsorber); - mother->add(pvAbsorber); - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber Ok"<< endmsg; - - tfAbsorber3 = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2 - PosAbsor3, 0., - (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); - mother->add(tfAbsorber3); - if (m_dbManager->BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) { - mother->add(pvTmp_Absorber3); - pvAbsorber3->ref(); pvAbsorber3->unref(); - } else { - mother->add(pvAbsorber3); - } - - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber3 Ok"<< endmsg; - } - else - { - tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2, 0., - (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); - mother->add(tfAbsorber); - mother->add(pvAbsorber); - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << " _fillsection other pvAbsorber Ok"<< endmsg; - } - - if(CutA) { + + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " _fillsection ext.barrel pvAbsorber3 Ok"<< endmsg; + + } else { + tfAbsorber = new GeoTransform(GeoTrf::Translate3D(dXAbsorber*Gaudi::Units::cm/2, 0., + (dZAbsorber + m_dbManager->TILBrmin() - rminb)*Gaudi::Units::cm/2)); + mother->add(tfAbsorber); + mother->add(pvAbsorber); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << " _fillsection other pvAbsorber Ok"<< endmsg; + } + + if (CutA) { CutA->ref(); CutA->unref(); } - if(CutB) { + if (CutB) { CutB->ref(); CutB->unref(); } @@ -1400,16 +1363,16 @@ void TileGeoSectionBuilder::fillSection(GeoPhysVol*& mother, void TileGeoSectionBuilder::fillGirder(GeoPhysVol*& mother, - double tile_rmax, - double tilb_rmax, - double tan_delta_phi_2, - double thickness) + double tile_rmax, + double tilb_rmax, + double tan_delta_phi_2, + double thickness) { // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // Obtain required materials - Iron, Aluminium and electronic boards const GeoMaterial* matIron = (m_switches.steel) ? m_theMaterialManager->getMaterial("tile::Steel") - : m_theMaterialManager->getMaterial("std::Iron"); + : m_theMaterialManager->getMaterial("std::Iron"); const GeoMaterial* matAluminium = m_theMaterialManager->getMaterial("std::Aluminium"); const GeoMaterial* matElBoard = m_theMaterialManager->getMaterial("tile::SiO2CondEpox"); @@ -1424,11 +1387,10 @@ void TileGeoSectionBuilder::fillGirder(GeoPhysVol*& mother, int j; //if (m_dbManager->TILBsection()==8) - // CurrentGird = 801; //Prototype module + // CurrentGird = 801; //Prototype module // ps commented out old geometry - - for (j = CurrentGird; j < (CurrentGird + m_dbManager->TILBngirder()); j++) - { + + for (j = CurrentGird; j < (CurrentGird + m_dbManager->TILBngirder()); j++) { m_dbManager->SetCurrentGird(j); double elementRC = m_dbManager->TIGRrc(); double elementSizeInR = m_dbManager->TIGRdr(); @@ -1436,78 +1398,75 @@ void TileGeoSectionBuilder::fillGirder(GeoPhysVol*& mother, double elementOffsetInY = m_dbManager->TIGRoff(); double dy1GirderElement, dy2GirderElement; - if (elementSizeInY >0) - { + if (elementSizeInY >0) { dy1GirderElement = elementSizeInY/2; dy2GirderElement = elementSizeInY/2; - } - else - { + } else { dy1GirderElement = (elementRC - elementSizeInR/2) * tan_delta_phi_2; dy2GirderElement = (elementRC + elementSizeInR/2) * tan_delta_phi_2; } girderElement = new GeoTrd(thickness/2*Gaudi::Units::cm, - thickness/2*Gaudi::Units::cm, - dy1GirderElement*Gaudi::Units::cm, - dy2GirderElement*Gaudi::Units::cm, - elementSizeInR/2*Gaudi::Units::cm); + thickness/2*Gaudi::Units::cm, + dy1GirderElement*Gaudi::Units::cm, + dy2GirderElement*Gaudi::Units::cm, + elementSizeInR/2*Gaudi::Units::cm); - switch(m_dbManager->TIGRmaterial()) - { - case 1: //Iron + switch(m_dbManager->TIGRmaterial()) { + case 1: //Iron { - lvGirderElement = new GeoLogVol("GirderIron",girderElement,matIron); + lvGirderElement = new GeoLogVol("GirderIron",girderElement,matIron); break; } - case 2: //Aluminium + case 2: //Aluminium { - lvGirderElement = new GeoLogVol("GirderAluminium",girderElement,matAluminium); + lvGirderElement = new GeoLogVol("GirderAluminium",girderElement,matAluminium); break; } - case 3: //Electronics + case 3: //Electronics { - lvGirderElement = new GeoLogVol("GirderElectronics",girderElement,matElBoard); + lvGirderElement = new GeoLogVol("GirderElectronics",girderElement,matElBoard); break; } - default: + default: { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::FillGirder: unknown material = " + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::FillGirder: unknown material = " << m_dbManager->TIGRmaterial() << endmsg; - return; + return; } } pvGirderElement = new GeoPhysVol(lvGirderElement); tfGirderElement = new GeoTransform(GeoTrf::Translate3D(0., - elementOffsetInY*Gaudi::Units::cm, - (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); + elementOffsetInY*Gaudi::Units::cm, + (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); mother->add(tfGirderElement); mother->add(pvGirderElement); } } + void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, - int sec_number, - double tile_rmax, - double tilb_rmax, - double /* delta_phi */, - bool testbeam, - int ModuleNcp, - double corrected_dz) + int sec_number, + double tile_rmax, + double tilb_rmax, + double /* delta_phi */, + bool testbeam, + int ModuleNcp, + double corrected_dz) { bool boolNeg = false; - if (ModuleNcp > 99) - { ModuleNcp = ModuleNcp/100; - boolNeg = true; - } + if (ModuleNcp > 99) { + ModuleNcp = ModuleNcp/100; + boolNeg = true; + } // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // Obtain required materials - Iron, Aluminium and electronic boards const GeoMaterial* matIron = (m_switches.steel) ? m_theMaterialManager->getMaterial("tile::Steel") - : m_theMaterialManager->getMaterial("std::Iron"); + : m_theMaterialManager->getMaterial("std::Iron"); const GeoMaterial* matAluminium = m_theMaterialManager->getMaterial("std::Aluminium"); const GeoMaterial* matElBoard = m_theMaterialManager->getMaterial("tile::SiO2CondEpox"); @@ -1521,28 +1480,28 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, const GeoMaterial *iron = m_theMaterialManager->getMaterial("std::Iron"); const GeoMaterial *shieldSteel = m_theMaterialManager->getMaterial("shield::ShieldSteel"); const GeoMaterial *matRubber = m_theMaterialManager->getMaterial("std::Rubber")!=nullptr - ? m_theMaterialManager->getMaterial("std::Rubber") - : m_theMaterialManager->getMaterial("sct::Rubber"); + ? m_theMaterialManager->getMaterial("std::Rubber") + : m_theMaterialManager->getMaterial("sct::Rubber"); // m_matLArServices - if (m_matLArServices == 0) - { m_matLArServices = new GeoMaterial("LArServices", 2.5*GeoModelKernelUnits::gram/Gaudi::Units::cm3); - m_matLArServices->add(shieldSteel, 0.20); - m_matLArServices->add(copper, 0.60); - m_matLArServices->add(matRubber, 0.10); - m_matLArServices->add(air, 0.10); - m_matLArServices->lock(); - } + if (m_matLArServices == 0) { + m_matLArServices = new GeoMaterial("LArServices", 2.5*GeoModelKernelUnits::gram/Gaudi::Units::cm3); + m_matLArServices->add(shieldSteel, 0.20); + m_matLArServices->add(copper, 0.60); + m_matLArServices->add(matRubber, 0.10); + m_matLArServices->add(air, 0.10); + m_matLArServices->lock(); + } // m_matIronHalfDens - if (m_matIronHalfDens == 0) - { m_matIronHalfDens = new GeoMaterial("LArIronBox", 4.5*GeoModelKernelUnits::gram/Gaudi::Units::cm3); - m_matIronHalfDens->add(shieldSteel, 0.80); - m_matIronHalfDens->add(matRubber, 0.10); - m_matIronHalfDens->add(copper, 0.10); - m_matIronHalfDens->lock(); - } - + if (m_matIronHalfDens == 0) { + m_matIronHalfDens = new GeoMaterial("LArIronBox", 4.5*GeoModelKernelUnits::gram/Gaudi::Units::cm3); + m_matIronHalfDens->add(shieldSteel, 0.80); + m_matIronHalfDens->add(matRubber, 0.10); + m_matIronHalfDens->add(copper, 0.10); + m_matIronHalfDens->lock(); + } + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- GeoTrd* fingerElementTrd = 0; @@ -1550,7 +1509,7 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, GeoBox *fingerCablesL{nullptr}, *fingerCablesR{nullptr}; GeoPhysVol *pvFingerElement = 0, *pvFingerCablesL{nullptr}, *pvFingerCablesR{nullptr}; - GeoLogVol *lvFingerElement = 0, *lvFingerCablesL{nullptr}, *lvFingerCablesR{nullptr}; + GeoLogVol *lvFingerElement = 0, *lvFingerCablesL{nullptr}, *lvFingerCablesR{nullptr}; GeoTransform* tfFingerElement = 0, *tfFingerCables{nullptr}; GeoTransform* ZrotateMod = 0; @@ -1565,8 +1524,7 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, double AirVolumeShift = 0.0; double AirVolumeSize = corrected_dz; - for (j = CurrentTicg; j < (CurrentTicg + m_dbManager->TIFGnelem()); j++) - { + for (j = CurrentTicg; j < (CurrentTicg + m_dbManager->TIFGnelem()); j++) { m_dbManager->SetCurrentTicg(j); double elementRC = m_dbManager->TICGrc(); double elementHeight = m_dbManager->TICGdr(); @@ -1576,89 +1534,87 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, double elementDz = m_dbManager->TICGdz(); double elementZPozition = m_dbManager->TICGzc(); - if(corrected_dz > 0.) { + if (corrected_dz > 0.) { if (j-CurrentTicg==0) { // take air volume size from first element AirVolumeShift = (elementDz-corrected_dz)/2 - elementZPozition; AirVolumeSize = elementDz; - if(m_log->level()<=MSG::DEBUG) { - (*m_log) << MSG::DEBUG << "TileFinger: OldAirVolumeCenter ="<<elementZPozition << endmsg; - (*m_log) << MSG::DEBUG << "TileFinger: NewAirVolumeCenter ="<<elementZPozition+AirVolumeShift << endmsg; - (*m_log) << MSG::DEBUG << "TileFinger: AirVolumeShift ="<< AirVolumeShift << endmsg; - (*m_log) << MSG::DEBUG << "TileFinger: AirVolumeSize ="<< AirVolumeSize << endmsg; - } + if (m_log->level()<=MSG::DEBUG) { + (*m_log) << MSG::DEBUG << "TileFinger: OldAirVolumeCenter ="<<elementZPozition << endmsg; + (*m_log) << MSG::DEBUG << "TileFinger: NewAirVolumeCenter ="<<elementZPozition+AirVolumeShift << endmsg; + (*m_log) << MSG::DEBUG << "TileFinger: AirVolumeShift ="<< AirVolumeShift << endmsg; + (*m_log) << MSG::DEBUG << "TileFinger: AirVolumeSize ="<< AirVolumeSize << endmsg; + } } + if (elementZPozition*2-AirVolumeSize<-0.01) { // compare with zero with 0.1 Gaudi::Units::mm precision elementZPozition += AirVolumeShift; // shift all volumes keeping size + } else { // resize finger cover with shims attached to it - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "TileFinger: OldCoverThickness ="<<elementDz << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "TileFinger: OldCoverThickness ="<<elementDz << endmsg; elementDz = corrected_dz - AirVolumeSize; - if(m_log->level()<=MSG::DEBUG) { - (*m_log) << MSG::DEBUG << "TileFinger: NewCoverThickness ="<<elementDz << endmsg; - (*m_log) << MSG::DEBUG << "TileFinger: OldCoverCenter ="<<elementZPozition << endmsg; - } + if (m_log->level()<=MSG::DEBUG) { + (*m_log) << MSG::DEBUG << "TileFinger: NewCoverThickness ="<<elementDz << endmsg; + (*m_log) << MSG::DEBUG << "TileFinger: OldCoverCenter ="<<elementZPozition << endmsg; + } elementZPozition = (corrected_dz-elementDz)/2; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG << "TileFinger: NewCoverCenter ="<<elementZPozition << endmsg; + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG << "TileFinger: NewCoverCenter ="<<elementZPozition << endmsg; } } - - switch(m_dbManager->TICGmaterial()) - { - case 1: + + switch(m_dbManager->TICGmaterial()) { + case 1: { - currentMaterial = matIron; - currentName = "FingerIron"; - break; + currentMaterial = matIron; + currentName = "FingerIron"; + break; } - case 2: + case 2: { - currentMaterial = matAluminium; - currentName = "FingerAluminum"; - break; + currentMaterial = matAluminium; + currentName = "FingerAluminum"; + break; } - case 3: + case 3: { - currentMaterial = matElBoard; - currentName = "FingerElectronics"; - break; + currentMaterial = matElBoard; + currentName = "FingerElectronics"; + break; } - default: + default: { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillFinger: unexpected material = " + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillFinger: unexpected material = " << m_dbManager->TICGmaterial() << " for finger element" << endmsg; - return; + return; } } - if(m_dbManager->TICGshape()==1) - { + if (m_dbManager->TICGshape()==1) { fingerElementTrd = new GeoTrd(elementDz/2*Gaudi::Units::cm, - elementDz/2*Gaudi::Units::cm, - elementDy1/2*Gaudi::Units::cm, - elementDy2/2*Gaudi::Units::cm, - elementHeight/2*Gaudi::Units::cm); + elementDz/2*Gaudi::Units::cm, + elementDy1/2*Gaudi::Units::cm, + elementDy2/2*Gaudi::Units::cm, + elementHeight/2*Gaudi::Units::cm); lvFingerElement = new GeoLogVol(currentName,fingerElementTrd,currentMaterial); - } - else if(m_dbManager->TICGshape()==2) - { - + + } else if (m_dbManager->TICGshape()==2) { + fingerElementTrap = new GeoTrap(elementDz/2*Gaudi::Units::cm, - 0., - 0., - elementHeight/2*Gaudi::Units::cm, - elementDy2/2*Gaudi::Units::cm, - elementDy1/2*Gaudi::Units::cm, - atan((elementDy1-elementDy2)/(2.*elementHeight)), - elementHeight/2*Gaudi::Units::cm, - elementDy2/2*Gaudi::Units::cm, - elementDy1/2*Gaudi::Units::cm, - atan((elementDy1-elementDy2)/(2.*elementHeight))); - + 0., + 0., + elementHeight/2*Gaudi::Units::cm, + elementDy2/2*Gaudi::Units::cm, + elementDy1/2*Gaudi::Units::cm, + atan((elementDy1-elementDy2)/(2.*elementHeight)), + elementHeight/2*Gaudi::Units::cm, + elementDy2/2*Gaudi::Units::cm, + elementDy1/2*Gaudi::Units::cm, + atan((elementDy1-elementDy2)/(2.*elementHeight))); + lvFingerElement = new GeoLogVol(currentName,fingerElementTrap,currentMaterial); - } - else - { + + } else { (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillFinger: unexpected shape = " << m_dbManager->TICGshape() << " for finger element" << endmsg; return; @@ -1667,16 +1623,14 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, pvFingerElement = new GeoPhysVol(lvFingerElement); tfFingerElement = new GeoTransform(GeoTrf::Translate3D(elementZPozition*Gaudi::Units::cm, - elementOffset*Gaudi::Units::cm, - (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); + elementOffset*Gaudi::Units::cm, + (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); mother->add(tfFingerElement); - if (m_dbManager->TICGshape()==2) - { - if(elementOffset<0) - { - ZrotateMod = new GeoTransform(GeoTrf::RotateZ3D(180*Gaudi::Units::deg)); - mother->add(ZrotateMod); + if (m_dbManager->TICGshape()==2) { + if (elementOffset<0) { + ZrotateMod = new GeoTransform(GeoTrf::RotateZ3D(180*Gaudi::Units::deg)); + mother->add(ZrotateMod); } zrotateMod = new GeoTransform(GeoTrf::RotateZ3D(90*Gaudi::Units::deg)); @@ -1695,12 +1649,13 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, int Isector =0, LRflag =0; - if ((ModuleNcp/4 - (float)ModuleNcp/4) != 0) Isector = (int)ModuleNcp/4; - else - {Isector = (int)ModuleNcp/4-1; - } + if ((ModuleNcp/4 - (float)ModuleNcp/4) != 0) { + Isector = (int)ModuleNcp/4; + } else { + Isector = (int)ModuleNcp/4-1; + } LRflag = ModuleNcp-4*Isector; - + m_dbManager->SetCurrentTicg(CurrentTicg); double elementRC = m_dbManager->TICGrc(); @@ -1716,39 +1671,40 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, rightMaterial = leftMaterial = m_matLArServices; rightName = leftName = "LArCables"; - if (LRflag == 1) - { dZright = elementDz, dXright = 35; - dZsaddleR = 0; - rightMaterial = m_matIronHalfDens; - rightName = "LArService"; - - } else if (LRflag == 4) - { dZleft = elementDz, dXleft = 35; - dZsaddleL = 0; - leftMaterial = m_matIronHalfDens; - leftName = "LArService"; + if (LRflag == 1) { + dZright = elementDz, dXright = 35; + dZsaddleR = 0; + rightMaterial = m_matIronHalfDens; + rightName = "LArService"; + + } else if (LRflag == 4) { + dZleft = elementDz, dXleft = 35; + dZsaddleL = 0; + leftMaterial = m_matIronHalfDens; + leftName = "LArService"; + } + + if (sec_number == 1) { + if ( (ModuleNcp >=40 && ModuleNcp <=41) || (ModuleNcp >=56 && ModuleNcp <=57) ) { + dZright = dZleft = 8.5; + dZsaddleL = dZsaddleR = 13.7; + rightMaterial = leftMaterial = iron; + rightName = leftName = "BarrelSaddleSupport"; } - if (sec_number == 1) - { if ( (ModuleNcp >=40 && ModuleNcp <=41) || (ModuleNcp >=56 && ModuleNcp <=57) ) - { dZright = dZleft = 8.5; - dZsaddleL = dZsaddleR = 13.7; - rightMaterial = leftMaterial = iron; - rightName = leftName = "BarrelSaddleSupport"; - } - } else - { if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) - { dZright = dZleft = 8.5; - dZsaddleR = dZsaddleL = 13.7; - rightMaterial = leftMaterial = iron; - rightName = leftName = "ExtBarrelSaddleSupport"; - } - } - - if(m_log->level()<=MSG::DEBUG) + } else { + if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) { + dZright = dZleft = 8.5; + dZsaddleR = dZsaddleL = 13.7; + rightMaterial = leftMaterial = iron; + rightName = leftName = "ExtBarrelSaddleSupport"; + } + } + + if (m_log->level()<=MSG::DEBUG) (*m_log) << MSG::DEBUG << " Finger : number= "<<sec_number<<" ModuleNcp = " <<ModuleNcp<< " Sector= "<< Isector - << " LRflag= " << LRflag <<" Neg "<< boolNeg - << endmsg; + << " LRflag= " << LRflag <<" Neg "<< boolNeg + << endmsg; GeoTransform *rotateY = new GeoTransform(GeoTrf::RotateY3D(90*Gaudi::Units::deg)); GeoTransform *rotateZ = new GeoTransform(GeoTrf::RotateZ3D(3*Gaudi::Units::deg)); @@ -1766,60 +1722,61 @@ void TileGeoSectionBuilder::fillFinger(GeoPhysVol*& mother, double YpoFinger =0; - if (boolNeg) - { YpoFinger = -elementOffset+5.4; - } else - { YpoFinger = elementOffset-5.4; - } + if (boolNeg) { + YpoFinger = -elementOffset+5.4; + } else { + YpoFinger = elementOffset-5.4; + } tfFingerCables = new GeoTransform(GeoTrf::Translate3D(elementZPozition*Gaudi::Units::cm +0.5*Gaudi::Units::cm -dZsaddleL*Gaudi::Units::cm, - YpoFinger*Gaudi::Units::cm, - (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); + YpoFinger*Gaudi::Units::cm, + (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); mother->add(tfFingerCables); // inversion for negativ fingers, Left - if (boolNeg) - { mother->add(rotateY); - mother->add(rotateZm); - } else - { mother->add(rotateY); - mother->add(rotateZ); - } + if (boolNeg) { + mother->add(rotateY); + mother->add(rotateZm); + } else { + mother->add(rotateY); + mother->add(rotateZ); + } mother->add(new GeoIdentifierTag(ModuleNcp)); - mother->add(pvFingerCablesL); + mother->add(pvFingerCablesL); - if (boolNeg) - { YpoFinger = elementOffset-5.4; - } else - { YpoFinger = -elementOffset+5.4; - } + if (boolNeg) { + YpoFinger = elementOffset-5.4; + } else { + YpoFinger = -elementOffset+5.4; + } tfFingerCables = new GeoTransform(GeoTrf::Translate3D(elementZPozition*Gaudi::Units::cm +0.5*Gaudi::Units::cm -dZsaddleR*Gaudi::Units::cm, - YpoFinger*Gaudi::Units::cm, - (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); + YpoFinger*Gaudi::Units::cm, + (elementRC-(tilb_rmax + tile_rmax)/2)*Gaudi::Units::cm)); mother->add(tfFingerCables); // inversion for negativ fingers, Right - if (boolNeg) - { mother->add(rotateY); - mother->add(rotateZ); - } else - { mother->add(rotateY); - mother->add(rotateZm); - } + if (boolNeg) { + mother->add(rotateY); + mother->add(rotateZ); + } else { + mother->add(rotateY); + mother->add(rotateZm); + } mother->add(new GeoIdentifierTag(ModuleNcp)); mother->add(pvFingerCablesR); // m_matLArServices->unref(); - // m_matIronHalfDens->unref(); + // m_matIronHalfDens->unref(); } + void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, - double thickness, - double dzglue, - double tan_delta_phi_2, - int period_type, + double thickness, + double dzglue, + double tan_delta_phi_2, + int period_type, GeoTrd * period) { int j; @@ -1849,38 +1806,32 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- // Determine the number of first scintillator depending on the section type - if (m_dbManager->TILBsection() >= 7 && m_dbManager->TILBcurscint() == 0) - { + if (m_dbManager->TILBsection() >= 7 && m_dbManager->TILBcurscint() == 0) { CurrentScin = 101; //special modules for testbeam identical to normal barrel module - } - else - { - if (m_dbManager->TILBcurscint()>0) - { + } else { + if (m_dbManager->TILBcurscint()>0) { CurrentScin = m_dbManager->TILBcurscint(); - } - else - { + } else { CurrentScin = 100*m_dbManager->TILBsection()+1; } } // special EB modules with cut-outs - if (m_dbManager->TILBsection()>=26 && m_dbManager->TILBsection()<=38 && m_dbManager->TILBcurscint() == 0) - { //ps shortcut. Should be read from DB later on. + if (m_dbManager->TILBsection()>=26 && m_dbManager->TILBsection()<=38 && m_dbManager->TILBcurscint() == 0) { + //ps shortcut. Should be read from DB later on. CurrentScin = 100*2 + 1; } int zpShift = 1; // special EB modules with small D4 cell - if (m_dbManager->TILBsection()>=7 && m_dbManager->TILBsection()<=8 && m_dbManager->TILBcurscint() == 301) - { //ps fix. Should put curscint = 1301 in DB and zpShift will not be needed + if (m_dbManager->TILBsection()>=7 && m_dbManager->TILBsection()<=8 && m_dbManager->TILBcurscint() == 301) { + //ps fix. Should put curscint = 1301 in DB and zpShift will not be needed zpShift = -1; } - + (*m_log) << MSG::VERBOSE <<" TILBsection= "<<m_dbManager->TILBsection()<<endmsg; - (*m_log) << MSG::VERBOSE <<" CurrentScin= "<<CurrentScin<<" TILBcurscint= "<<m_dbManager->TILBcurscint() - << " - " << m_dbManager->TILBcurscint()+m_dbManager->TILBnscin()-1 <<endmsg; + (*m_log) << MSG::VERBOSE <<" CurrentScin= "<<CurrentScin<<" TILBcurscint= "<<m_dbManager->TILBcurscint() + << " - " << m_dbManager->TILBcurscint()+m_dbManager->TILBnscin()-1 <<endmsg; (*m_log) << MSG::VERBOSE <<" period_type= "<<period_type <<endmsg; // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- @@ -1931,95 +1882,91 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, double dy2Glue = (m_dbManager->TILBrmax() * tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; double heightGlue2 = (m_dbManager->TILBrmax() - m_dbManager->TILBrmin())*Gaudi::Units::cm/2.; - checking("Glue 0", false, 4, + checking("Glue 0", false, 4, dzglue2,dzglue2,dy1Glue,dy2Glue,heightGlue2); glue = new GeoTrd(dzglue2,dzglue2,dy1Glue,dy2Glue,heightGlue2); - //Cs tubes in mother volume and holes in glue - if (m_switches.csTube) { - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - idTag = new GeoIdentifierTag(j-CurrentScin); - m_dbManager->SetCurrentScin(j); - - double off0 = m_dbManager->SCNTrc()*Gaudi::Units::cm - heightMother2; - double off = m_dbManager->SCNTdr()/2.*Gaudi::Units::cm - csTubeOffCorr; - - GeoTrf::Transform3D tfHole1 = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(-90*Gaudi::Units::deg); - GeoTrf::Transform3D tfHole2 = GeoTrf::Translate3D(0.,0.,(off0+off)) * GeoTrf::RotateY3D(-90*Gaudi::Units::deg); - - // air around iron rod, around Cs tube and inside Cs tube - GeoShape *air1 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); - GeoShape *air2 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); - GeoShape *air3 = new GeoTubs(0., csTubeInnerR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); - - GeoLogVol * lvAir1 = new GeoLogVol("CsTubeAir1",air1,matAir); - GeoLogVol * lvAir2 = new GeoLogVol("CsTubeAir2",air2,matAir); - GeoLogVol * lvAir3 = new GeoLogVol("CsTubeAir3",air3,matAir); - GeoPhysVol * pvAir1 = new GeoPhysVol(lvAir1); - GeoPhysVol * pvAir2 = new GeoPhysVol(lvAir2); - GeoPhysVol * pvAir3 = new GeoPhysVol(lvAir3); - - GeoTransform* tftube1 = new GeoTransform(tfHole1); - GeoTransform* tftube2 = new GeoTransform(tfHole2); - GeoTransform* tftube3 = new GeoTransform(tfHole2); - - mother->add(tftube1); - mother->add(pvAir1); - mother->add(tftube2); - mother->add(pvAir2); - mother->add(tftube3); - mother->add(pvAir3); + //Cs tubes in mother volume and holes in glue + if (m_switches.csTube) { + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + idTag = new GeoIdentifierTag(j-CurrentScin); + m_dbManager->SetCurrentScin(j); - //Holes in Glue - if (glue) { - glue = makeHoles(glue, csHoleR, dzglue2, off, off0); + double off0 = m_dbManager->SCNTrc()*Gaudi::Units::cm - heightMother2; + double off = m_dbManager->SCNTdr()/2.*Gaudi::Units::cm - csTubeOffCorr; + + GeoTrf::Transform3D tfHole1 = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(-90*Gaudi::Units::deg); + GeoTrf::Transform3D tfHole2 = GeoTrf::Translate3D(0.,0.,(off0+off)) * GeoTrf::RotateY3D(-90*Gaudi::Units::deg); + + // air around iron rod, around Cs tube and inside Cs tube + GeoShape *air1 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); + GeoShape *air2 = new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); + GeoShape *air3 = new GeoTubs(0., csTubeInnerR, thicknessMother2, 0.,360.0 * Gaudi::Units::deg); + + GeoLogVol * lvAir1 = new GeoLogVol("CsTubeAir1",air1,matAir); + GeoLogVol * lvAir2 = new GeoLogVol("CsTubeAir2",air2,matAir); + GeoLogVol * lvAir3 = new GeoLogVol("CsTubeAir3",air3,matAir); + GeoPhysVol * pvAir1 = new GeoPhysVol(lvAir1); + GeoPhysVol * pvAir2 = new GeoPhysVol(lvAir2); + GeoPhysVol * pvAir3 = new GeoPhysVol(lvAir3); + + GeoTransform* tftube1 = new GeoTransform(tfHole1); + GeoTransform* tftube2 = new GeoTransform(tfHole2); + GeoTransform* tftube3 = new GeoTransform(tfHole2); + + mother->add(tftube1); + mother->add(pvAir1); + mother->add(tftube2); + mother->add(pvAir2); + mother->add(tftube3); + mother->add(pvAir3); + + //Holes in Glue + if (glue) { + glue = makeHoles(glue, csHoleR, dzglue2, off, off0); + } } } - } lvGlue = new GeoLogVol("Glue",glue,matGlue); pvGlue = new GeoPhysVol(lvGlue); } - - switch(period_type) - { - case 1: + + switch(period_type) { + case 1: { //Ordinary period in Barrel and Extended barrel - /spacer/glue/master/glue/spacer/glue/master/glue //Glue layer - if (glue) - { + if (glue) { if (m_verbose) - printdouble(" glue position = ",(-3.*dzglue/2-m_dbManager->TILBdzmast())*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D((-3.*dzglue/2-m_dbManager->TILBdzmast())*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(-3.*dzglue/2-m_dbManager->TILBdzmast())*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D((-3.*dzglue/2-m_dbManager->TILBdzmast())*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",-dzglue/2*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D(-dzglue/2*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",-dzglue/2*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D(-dzglue/2*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",(dzglue/2+m_dbManager->TILBdzspac())*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue/2+m_dbManager->TILBdzspac())*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(dzglue/2+m_dbManager->TILBdzspac())*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue/2+m_dbManager->TILBdzspac())*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",(thickness-dzglue)/2*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D((thickness-dzglue)/2*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(thickness-dzglue)/2*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D((thickness-dzglue)/2*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); } - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - idTag = new GeoIdentifierTag(j-CurrentScin); - m_dbManager->SetCurrentScin(j); + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + idTag = new GeoIdentifierTag(j-CurrentScin); + m_dbManager->SetCurrentScin(j); scintiHeight = m_dbManager->SCNTdr(); scintiRC = m_dbManager->SCNTrc(); @@ -2030,57 +1977,57 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, scintiDeltaInPhi = (m_switches.uShape > 0) ? 0.0 : m_dbManager->SCNTdphi(); thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ? - (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; + (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; if (m_switches.glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness); // create wrapper heightWrapper = (scintiHeight + 2*scintiWrapInR)*Gaudi::Units::cm; dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - checking("Wrapper 0", true, 5, - thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); + checking("Wrapper 0", true, 5, + thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); - wrapper = new GeoTrd(thicknessWrapper/2, - thicknessWrapper/2, - dy1Wrapper, - dy2Wrapper, - heightWrapper/2); + wrapper = new GeoTrd(thicknessWrapper/2, + thicknessWrapper/2, + dy1Wrapper, + dy2Wrapper, + heightWrapper/2); - if (m_switches.csTube) { + if (m_switches.csTube) { wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); } - lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); - pvWrapper = new GeoPhysVol(lvWrapper); + lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); + pvWrapper = new GeoPhysVol(lvWrapper); // create scintillator dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; - checking("Scintillator 0", true, 6, + checking("Scintillator 0", true, 6, scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); - scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, - scintiThickness/2*Gaudi::Units::cm, - dy1Scintillator, - dy2Scintillator, - scintiHeight/2*Gaudi::Units::cm); + scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, + scintiThickness/2*Gaudi::Units::cm, + dy1Scintillator, + dy2Scintillator, + scintiHeight/2*Gaudi::Units::cm); - if (m_switches.csTube) { + if (m_switches.csTube) { scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * Gaudi::Units::cm, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); - } - lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); - pvScintillator = new GeoPhysVol(lvScintillator); + } + lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); + pvScintillator = new GeoPhysVol(lvScintillator); // place scintillator in wrapper - tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvWrapper->add(idTag); - pvWrapper->add(tfScintillator); - pvWrapper->add(pvScintillator); + tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvWrapper->add(idTag); + pvWrapper->add(tfScintillator); + pvWrapper->add(pvScintillator); //place wrapper in period if (m_verbose) { @@ -2088,40 +2035,38 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, printdouble(" ==> ",(scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm); (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg; } - - tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm, - 0., - (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); - mother->add(idTag); - mother->add(tfWrapper); - mother->add(pvWrapper); + + tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness+m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm, + 0., + (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); + mother->add(idTag); + mother->add(tfWrapper); + mother->add(pvWrapper); } break; } - case 2: + case 2: { //Special period in the barrel - /spacer/glue/master/glue/spacer //Glue layer - if (glue) - { + if (glue) { if (m_verbose) - printdouble(" glue position = ",(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2); - tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2); + tfGlue = new GeoTransform(GeoTrf::Translate3D((dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",-(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2); - tfGlue = new GeoTransform(GeoTrf::Translate3D(-(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",-(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2); + tfGlue = new GeoTransform(GeoTrf::Translate3D(-(dzglue + m_dbManager->TILBdzmast())*Gaudi::Units::cm/2,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); } - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - idTag = new GeoIdentifierTag(j-CurrentScin); - m_dbManager->SetCurrentScin(j); + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + idTag = new GeoIdentifierTag(j-CurrentScin); + m_dbManager->SetCurrentScin(j); scintiHeight = m_dbManager->SCNTdr(); scintiRC = m_dbManager->SCNTrc(); @@ -2132,196 +2077,193 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, scintiDeltaInPhi = (m_switches.uShape > 0) ? 0.0 : m_dbManager->SCNTdphi(); thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ? - (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; + (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; if (m_switches.glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness); // create wrapper heightWrapper = (scintiHeight + 2*scintiWrapInR)*Gaudi::Units::cm; dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - checking("Wrapper 1", true, 5, - thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); + checking("Wrapper 1", true, 5, + thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); - wrapper = new GeoTrd(thicknessWrapper/2, - thicknessWrapper/2, - dy1Wrapper, - dy2Wrapper, - heightWrapper/2); + wrapper = new GeoTrd(thicknessWrapper/2, + thicknessWrapper/2, + dy1Wrapper, + dy2Wrapper, + heightWrapper/2); - if (m_switches.csTube) { + if (m_switches.csTube) { wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); } - lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); - pvWrapper = new GeoPhysVol(lvWrapper); + lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); + pvWrapper = new GeoPhysVol(lvWrapper); // create scintillator dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; - checking("Scintillator 1", true, 6, + checking("Scintillator 1", true, 6, scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); - scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, - scintiThickness/2*Gaudi::Units::cm, - dy1Scintillator, - dy2Scintillator, - scintiHeight/2*Gaudi::Units::cm); + scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, + scintiThickness/2*Gaudi::Units::cm, + dy1Scintillator, + dy2Scintillator, + scintiHeight/2*Gaudi::Units::cm); - if (m_switches.csTube) { + if (m_switches.csTube) { scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * Gaudi::Units::cm, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); - } - lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); - pvScintillator = new GeoPhysVol(lvScintillator); + } + lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); + pvScintillator = new GeoPhysVol(lvScintillator); // place scintillator in wrapper - tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvWrapper->add(idTag); - pvWrapper->add(tfScintillator); - pvWrapper->add(pvScintillator); + tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvWrapper->add(idTag); + pvWrapper->add(tfScintillator); + pvWrapper->add(pvScintillator); //place wrapper in period if (m_verbose) { - (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; + (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; printdouble(" ==> ",(2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*Gaudi::Units::cm); (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg; } - - tfWrapper = new GeoTransform(GeoTrf::Translate3D((2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*Gaudi::Units::cm, - 0., - (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); - mother->add(idTag); - mother->add(tfWrapper); - mother->add(pvWrapper); + + tfWrapper = new GeoTransform(GeoTrf::Translate3D((2*scintiZPos+0.5)*(thickness-m_dbManager->TILBdzspac())*Gaudi::Units::cm, + 0., + (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); + mother->add(idTag); + mother->add(tfWrapper); + mother->add(pvWrapper); } break; } - case 3: + case 3: { //Ordinary period in Plug Section 1 - /glue/master/glue/spacer/glue/master/glue/spacer - + //Glue layer - if (glue) - { + if (glue) { if (m_verbose) - printdouble(" glue position = ",(-thickness + dzglue)*Gaudi::Units::cm/2); - tfGlue = new GeoTransform(GeoTrf::Translate3D((-thickness + dzglue)*Gaudi::Units::cm/2,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(-thickness + dzglue)*Gaudi::Units::cm/2); + tfGlue = new GeoTransform(GeoTrf::Translate3D((-thickness + dzglue)*Gaudi::Units::cm/2,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D(((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D(((-thickness + 3*dzglue)+m_dbManager->TILBdzmast())/2*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",dzglue/2*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D(dzglue/2*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",dzglue/2*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D(dzglue/2*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); if (m_verbose) - printdouble(" glue position = ",(3.*dzglue/2 + m_dbManager->TILBdzmast())*Gaudi::Units::cm); - tfGlue = new GeoTransform(GeoTrf::Translate3D((3.*dzglue/2 + m_dbManager->TILBdzmast())*Gaudi::Units::cm,0.,0.)); - mother->add(tfGlue); - mother->add(pvGlue); + printdouble(" glue position = ",(3.*dzglue/2 + m_dbManager->TILBdzmast())*Gaudi::Units::cm); + tfGlue = new GeoTransform(GeoTrf::Translate3D((3.*dzglue/2 + m_dbManager->TILBdzmast())*Gaudi::Units::cm,0.,0.)); + mother->add(tfGlue); + mother->add(pvGlue); } - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - idTag = new GeoIdentifierTag(j-CurrentScin); - m_dbManager->SetCurrentScin(j); + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + idTag = new GeoIdentifierTag(j-CurrentScin); + m_dbManager->SetCurrentScin(j); scintiHeight = m_dbManager->SCNTdr(); scintiRC = m_dbManager->SCNTrc(); scintiZPos = m_dbManager->SCNTzp(); - scintiThickness = m_dbManager->SCNTdt(); + scintiThickness = m_dbManager->SCNTdt(); scintiWrapInZ = m_dbManager->SCNTdtw(); scintiWrapInR = m_dbManager->SCNTdrw(); scintiDeltaInPhi = (m_switches.uShape > 0) ? 0. : m_dbManager->SCNTdphi(); thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ? - (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; + (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; if (m_switches.glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness); // create wrapper heightWrapper = (scintiHeight + 2*scintiWrapInR)*Gaudi::Units::cm; dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - checking("Wrapper 2", true, 5, - thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); + checking("Wrapper 2", true, 5, + thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); - wrapper = new GeoTrd(thicknessWrapper/2, - thicknessWrapper/2, - dy1Wrapper, - dy2Wrapper, - heightWrapper/2); + wrapper = new GeoTrd(thicknessWrapper/2, + thicknessWrapper/2, + dy1Wrapper, + dy2Wrapper, + heightWrapper/2); - if (m_switches.csTube) { + if (m_switches.csTube) { wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); } - lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); - pvWrapper = new GeoPhysVol(lvWrapper); + lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); + pvWrapper = new GeoPhysVol(lvWrapper); // create scintillator dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; - checking("Scintillator 2", true, 6, + checking("Scintillator 2", true, 6, scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); - scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, - scintiThickness/2*Gaudi::Units::cm, - dy1Scintillator, - dy2Scintillator, - scintiHeight/2*Gaudi::Units::cm); + scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, + scintiThickness/2*Gaudi::Units::cm, + dy1Scintillator, + dy2Scintillator, + scintiHeight/2*Gaudi::Units::cm); - if (m_switches.csTube) { + if (m_switches.csTube) { scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * Gaudi::Units::cm, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); - } - lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); - pvScintillator = new GeoPhysVol(lvScintillator); + } + lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); + pvScintillator = new GeoPhysVol(lvScintillator); // place scintillator in wrapper - tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvWrapper->add(idTag); - pvWrapper->add(tfScintillator); - pvWrapper->add(pvScintillator); + tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvWrapper->add(idTag); + pvWrapper->add(tfScintillator); + pvWrapper->add(pvScintillator); //place wrapper in period if (m_verbose) { - (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; + (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<scintiZPos; printdouble(" ==> ",(scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm); (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg; } - - tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm, - 0., - (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); - mother->add(idTag); - mother->add(tfWrapper); - mother->add(pvWrapper); + + tfWrapper = new GeoTransform(GeoTrf::Translate3D((scintiZPos*thickness-m_dbManager->TILBdzspac()/2)*Gaudi::Units::cm, + 0., + (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); + mother->add(idTag); + mother->add(tfWrapper); + mother->add(pvWrapper); } break; } - case 4: + case 4: { //Special period in Plug Section - /spacer - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - m_dbManager->SetCurrentScin(j); + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + m_dbManager->SetCurrentScin(j); scintiHeight = m_dbManager->SCNTdr(); scintiRC = m_dbManager->SCNTrc(); @@ -2332,91 +2274,89 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, scintiDeltaInPhi = (m_switches.uShape > 0) ? 0.0 : m_dbManager->SCNTdphi(); thicknessWrapper = (m_dbManager->TILBdzspac() <= (scintiThickness + 2*scintiWrapInZ)) ? - (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; + (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm: m_dbManager->TILBdzspac()*Gaudi::Units::cm; if (m_switches.glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness); - if(scintiZPos<0) - { - idTag = new GeoIdentifierTag(j-CurrentScin); - // create wrapper - heightWrapper = (scintiHeight + 2*scintiWrapInR)*Gaudi::Units::cm; - dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; - - checking("Wrapper 3", true, 5, - thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); - - wrapper = new GeoTrd(thicknessWrapper/2, - thicknessWrapper/2, - dy1Wrapper, - dy2Wrapper, - heightWrapper/2); + if (scintiZPos<0) { + idTag = new GeoIdentifierTag(j-CurrentScin); + // create wrapper + heightWrapper = (scintiHeight + 2*scintiWrapInR)*Gaudi::Units::cm; + dy1Wrapper = ((scintiRC - scintiHeight/2 - scintiWrapInR + m_dbManager->TILBrmin()) * + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + dy2Wrapper = ((scintiRC + scintiHeight/2 + scintiWrapInR + m_dbManager->TILBrmin()) * + tan_delta_phi_2 - m_dbManager->TILBphigap()/2)*Gaudi::Units::cm; + + checking("Wrapper 3", true, 5, + thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); + + wrapper = new GeoTrd(thicknessWrapper/2, + thicknessWrapper/2, + dy1Wrapper, + dy2Wrapper, + heightWrapper/2); if (m_switches.csTube) { wrapper = makeHoles(wrapper, csHoleR, thicknessWrapper/2, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); } - lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); - pvWrapper = new GeoPhysVol(lvWrapper); - - // create scintillator - dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; - dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) * - tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; - - checking("Scintillator 3", true, 6, + lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); + pvWrapper = new GeoPhysVol(lvWrapper); + + // create scintillator + dy1Scintillator = ((scintiRC - scintiHeight/2 + m_dbManager->TILBrmin()) * + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + dy2Scintillator = ((scintiRC + scintiHeight/2 + m_dbManager->TILBrmin()) * + tan_delta_phi_2 - m_dbManager->TILBphigap()/2 - scintiDeltaInPhi)*Gaudi::Units::cm; + + checking("Scintillator 3", true, 6, scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); - scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, - scintiThickness/2*Gaudi::Units::cm, - dy1Scintillator, - dy2Scintillator, - scintiHeight/2*Gaudi::Units::cm); + scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, + scintiThickness/2*Gaudi::Units::cm, + dy1Scintillator, + dy2Scintillator, + scintiHeight/2*Gaudi::Units::cm); if (m_switches.csTube) { scintillator = makeHolesScint(scintillator, csHoleR, scintiThickness/2 * Gaudi::Units::cm, scintiHeight/2.*Gaudi::Units::cm - csTubeOffCorr); } - lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); - pvScintillator = new GeoPhysVol(lvScintillator); - - // place scintillator in wrapper - tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvWrapper->add(idTag); - pvWrapper->add(tfScintillator); - pvWrapper->add(pvScintillator); - - //place wrapper in period + lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); + pvScintillator = new GeoPhysVol(lvScintillator); + + // place scintillator in wrapper + tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvWrapper->add(idTag); + pvWrapper->add(tfScintillator); + pvWrapper->add(pvScintillator); + + //place wrapper in period if (m_verbose) { - (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<0.0 <<endmsg; + (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<0.0 <<endmsg; (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg; } - - tfWrapper = new GeoTransform(GeoTrf::Translate3D(0., - 0., - (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); - mother->add(idTag); - mother->add(tfWrapper); - mother->add(pvWrapper); - } + + tfWrapper = new GeoTransform(GeoTrf::Translate3D(0., + 0., + (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); + mother->add(idTag); + mother->add(tfWrapper); + mother->add(pvWrapper); + } } break; } - default: + default: { - //Scintillator layers in Plug Sections 3 and 4 + //Scintillator layers in Plug Sections 3 and 4 // checking shape of mother volume. double dy1Period = period->getYHalfLength1(); double tanphi = (period->getYHalfLength2()-dy1Period)/period->getZHalfLength()/2.; - if(m_log->level()<=MSG::DEBUG) - if (fabs(tanphi-tan_delta_phi_2) > 1.e-5) - (*m_log) << MSG::DEBUG <<"Different tan_delta_phi_2 " << tanphi << " " << tan_delta_phi_2 <<endmsg; - - for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - idTag = new GeoIdentifierTag(j-CurrentScin); + if (m_log->level()<=MSG::DEBUG) + if (fabs(tanphi-tan_delta_phi_2) > 1.e-5) + (*m_log) << MSG::DEBUG <<"Different tan_delta_phi_2 " << tanphi << " " << tan_delta_phi_2 <<endmsg; + + for (j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + idTag = new GeoIdentifierTag(j-CurrentScin); m_dbManager->SetCurrentScin(j); scintiHeight = m_dbManager->SCNTdr(); @@ -2432,66 +2372,67 @@ void TileGeoSectionBuilder::fillPeriod(GeoPhysVol*& mother, thicknessWrapper = (scintiThickness + 2*scintiWrapInZ)*Gaudi::Units::cm; if (m_switches.glue == 2) thicknessWrapper = std::max(thicknessWrapper - m_additionalIronLayer, scintiThickness); - double thicknessEnvelope = (m_dbManager->TILBdzmodul()*Gaudi::Units::cm - thicknessWrapper); // along phi thickness is twice bigger than along Z + double thicknessEnvelope = (m_dbManager->TILBdzmodul()*Gaudi::Units::cm - thicknessWrapper); // along phi thickness is twice bigger than along Z dy1Wrapper = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2. - scintiWrapInR)*tanphi)*Gaudi::Units::cm; dy2Wrapper = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2. + scintiWrapInR)*tanphi)*Gaudi::Units::cm; - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<"Envelope thickness is " << thicknessEnvelope <<endmsg; - checking("Wrapper 4", true, 5, - thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<"Envelope thickness is " << thicknessEnvelope <<endmsg; + checking("Wrapper 4", true, 5, + thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2); - wrapper = new GeoTrd(thicknessWrapper/2, - thicknessWrapper/2, - dy1Wrapper, - dy2Wrapper, - heightWrapper/2); - lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); - pvWrapper = new GeoPhysVol(lvWrapper); + wrapper = new GeoTrd(thicknessWrapper/2, + thicknessWrapper/2, + dy1Wrapper, + dy2Wrapper, + heightWrapper/2); + lvWrapper = new GeoLogVol("Wrapper",wrapper,matAir); + pvWrapper = new GeoPhysVol(lvWrapper); // create scintillator dy1Scintillator = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2.)*tanphi - scintiDeltaInPhi)*Gaudi::Units::cm; dy2Scintillator = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2.)*tanphi - scintiDeltaInPhi)*Gaudi::Units::cm; - checking("Scintillator 4", true, 6, - scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); + checking("Scintillator 4", true, 6, + scintiThickness/2*Gaudi::Units::cm,scintiThickness/2*Gaudi::Units::cm,dy1Scintillator,dy2Scintillator,scintiHeight/2*Gaudi::Units::cm); - scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, - scintiThickness/2*Gaudi::Units::cm, - dy1Scintillator, - dy2Scintillator, - scintiHeight/2*Gaudi::Units::cm); - lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); - pvScintillator = new GeoPhysVol(lvScintillator); + scintillator = new GeoTrd(scintiThickness/2*Gaudi::Units::cm, + scintiThickness/2*Gaudi::Units::cm, + dy1Scintillator, + dy2Scintillator, + scintiHeight/2*Gaudi::Units::cm); + lvScintillator = new GeoLogVol("Scintillator",scintillator,matScin); + pvScintillator = new GeoPhysVol(lvScintillator); // place scintillator in wrapper - tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); - pvWrapper->add(idTag); - pvWrapper->add(tfScintillator); - pvWrapper->add(pvScintillator); + tfScintillator = new GeoTransform(GeoTrf::Translate3D(0.,0.,0.)); + pvWrapper->add(idTag); + pvWrapper->add(tfScintillator); + pvWrapper->add(pvScintillator); //place wrapper in period if (m_verbose) { - (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<0.0 <<endmsg; + (*m_log) << MSG::VERBOSE <<" X scintiZPos= "<<0.0 <<endmsg; (*m_log) << MSG::VERBOSE <<" Y scintiRC= "<<scintiRC <<endmsg; } - - tfWrapper = new GeoTransform(GeoTrf::Translate3D(0., - 0., - (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); - mother->add(idTag); - mother->add(tfWrapper); - mother->add(pvWrapper); + + tfWrapper = new GeoTransform(GeoTrf::Translate3D(0., + 0., + (scintiRC-(m_dbManager->TILBrmax()-m_dbManager->TILBrmin())/2)*Gaudi::Units::cm)); + mother->add(idTag); + mother->add(tfWrapper); + mother->add(pvWrapper); } break; } } } -// Checking geometry dimensions for all direction + +// Checking geometry dimensions for all directions void TileGeoSectionBuilder::checking(const std::string& Name, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z) + double X1, double X2, double Y1, double Y2, double Z) { double rless = .005; //5 [mkm] std::string Step[8] = {" ", @@ -2502,35 +2443,35 @@ void TileGeoSectionBuilder::checking(const std::string& Name, bool print, int le " ", " ", " "}; - if (print) - { - if(m_log->level()<=MSG::DEBUG) - (*m_log) << MSG::DEBUG <<Step[level]<<Name<<" -"<<level - << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(4) - <<" dX1,dX2= "<<X1<<" "<<X2 - <<" dY1,dY2= "<<Y1<<" "<<Y2 - <<" dZ= "<<Z - << std::resetiosflags(std::ios::fixed) - <<endmsg; - } - if (X1 < rless && X2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; - } - if (Y1 < rless && Y2 < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; - } - if (Z < rless) - { (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; - } + if (print) { + if (m_log->level()<=MSG::DEBUG) + (*m_log) << MSG::DEBUG <<Step[level]<<Name<<" -"<<level + << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(4) + <<" dX1,dX2= "<<X1<<" "<<X2 + <<" dY1,dY2= "<<Y1<<" "<<Y2 + <<" dZ= "<<Z + << std::resetiosflags(std::ios::fixed) + <<endmsg; + } + if (X1 < rless && X2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, X1 or X2<0 "<<endmsg; + } + if (Y1 < rless && Y2 < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Y1 or Y2<0 "<<endmsg; + } + if (Z < rless) { + (*m_log) << MSG::WARNING <<" volume "<<Name<<" is empty, Z<0 "<<endmsg; + } } + // -- Readout void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, - unsigned int detector, - int side, - bool testbeam, - bool addPlates, + unsigned int detector, + int side, + bool testbeam, + bool addPlates, unsigned int nphi, float zshift) { @@ -2546,13 +2487,10 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, float phi_min, phi_max; float dphi = 4*acos(0.)/64; - if(testbeam) // put modules symmetricaly - { + if (testbeam) { // put modules symmetricaly phi_max = nphi*dphi/2; phi_min = -phi_max; - } - else // put edge of very first module on horizontal plane - { + } else { // put edge of very first module on horizontal plane phi_min = 0.; phi_max = nphi * dphi; } @@ -2579,9 +2517,9 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, rGap[1] += 40*Gaudi::Units::mm/2; drGap[1] += 40*Gaudi::Units::mm; } - + int indHardcoded = 0; - + // -------------------------------- // -- initialize all necessary arrays with 0. @@ -2602,24 +2540,19 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, // iterate over all samples of the region and fill corresponding eta values. // this works for Central and Extended Barrel regions only! - if (detector==TILE_REGION_CENTRAL || detector == TILE_REGION_EXTENDED) - { + if (detector==TILE_REGION_CENTRAL || detector == TILE_REGION_EXTENDED) { // -- Calculate number of samples for the region // find first TICL for the given detector - if(m_dbManager->SetFirstTiclInDet(detector)) - { + if (m_dbManager->SetFirstTiclInDet(detector)) { // for the central barrel region take care of the side - if(detector == TILE_REGION_CENTRAL) - { - while(sign_eta * m_dbManager->TICLncell() < 0) - { - if (!(m_dbManager->SetNextTiclInDet())) - { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillDescriptor: No TICL structures for detector: " + if (detector == TILE_REGION_CENTRAL) { + while (sign_eta * m_dbManager->TICLncell() < 0) { + if (!(m_dbManager->SetNextTiclInDet())) { + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillDescriptor: No TICL structures for detector: " << detector << " and side: " << sign_eta << endmsg; - return; - } - } + return; + } + } } samples.push_back((int)m_dbManager->TICLsample()); @@ -2627,42 +2560,38 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, lastScin.push_back((int)m_dbManager->TICLlastrow()); // iterate over all other TICLs in the detector - while(m_dbManager->SetNextTiclInDet()) - { - if(!((detector == TILE_REGION_CENTRAL)&&(sign_eta * m_dbManager->TICLncell() < 0))) - { - // find if the sample of the cell is already in the samples vector - // and if not then add it - currentSample = (int)m_dbManager->TICLsample(); - for(index=0; index<samples.size(); index++) - if(currentSample==samples[index]) break; - if(index==samples.size()) { - samples.push_back(currentSample); - firstScin.push_back((int)m_dbManager->TICLfirstrow()); - lastScin.push_back((int)m_dbManager->TICLlastrow()); - } - } + while (m_dbManager->SetNextTiclInDet()) { + if (!((detector == TILE_REGION_CENTRAL)&&(sign_eta * m_dbManager->TICLncell() < 0))) { + // find if the sample of the cell is already in the samples vector + // and if not then add it + currentSample = (int)m_dbManager->TICLsample(); + for (index=0; index<samples.size(); index++) + if (currentSample==samples[index]) break; + if (index==samples.size()) { + samples.push_back(currentSample); + firstScin.push_back((int)m_dbManager->TICLfirstrow()); + lastScin.push_back((int)m_dbManager->TICLlastrow()); + } + } } - } - else - { + + } else { (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::fillDescriptor: No TICL structures for the detector: " << detector << endmsg; return; } nsamp = 0; - for(index=0; index<samples.size(); index++, indHardcoded++) - { + for (index=0; index<samples.size(); index++, indHardcoded++) { etaIndex = samples[index]; - if(etaIndex > nsamp) nsamp = etaIndex; + if (etaIndex > nsamp) nsamp = etaIndex; calculateEta(detector, - side, - etaIndex, - eta_min[etaIndex-1], // In TICL structures samples are numbered from 1 - eta_max[etaIndex-1], - deta[etaIndex-1], - neta[etaIndex-1]); + side, + etaIndex, + eta_min[etaIndex-1], // In TICL structures samples are numbered from 1 + eta_max[etaIndex-1], + deta[etaIndex-1], + neta[etaIndex-1]); calculateZ(detector, side, etaIndex, @@ -2671,15 +2600,12 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, dz[etaIndex-1]); // Fill in the hardcoded values - if(detector == TILE_REGION_CENTRAL) - { - rcenter[etaIndex-1] = rBarrel[indHardcoded]; - dr[etaIndex-1] = drBarrel[indHardcoded]; - } - else - { - rcenter[etaIndex-1] = rExtended[indHardcoded]; - dr[etaIndex-1] = drExtended[indHardcoded]; + if (detector == TILE_REGION_CENTRAL) { + rcenter[etaIndex-1] = rBarrel[indHardcoded]; + dr[etaIndex-1] = drBarrel[indHardcoded]; + } else { + rcenter[etaIndex-1] = rExtended[indHardcoded]; + dr[etaIndex-1] = drExtended[indHardcoded]; } calculateR(detector, etaIndex, @@ -2689,9 +2615,8 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, rcenter[etaIndex-1], dr[etaIndex-1]); } - } - else if(detector == TILE_REGION_GAP) - { + + } else if (detector == TILE_REGION_GAP) { // We are in GAP detectors (detector = 3 & 4) // Loop over all TICL structures of these detectors // Determine eta_min, eta_max, deta @@ -2701,31 +2626,30 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, // nsamp = 0; - for(unsigned int det = detector; det < detector+2; det++) - for(int status=m_dbManager->SetFirstTiclInDet(det); status>0; status=m_dbManager->SetNextTiclInDet()) - { + for (unsigned int det = detector; det < detector+2; det++) + for (int status=m_dbManager->SetFirstTiclInDet(det); status>0; status=m_dbManager->SetNextTiclInDet()) { if ((int)m_dbManager->TICLtower()>16) continue; - if(det==detector) - etaIndex = (int)m_dbManager->TICLsample(); - else - etaIndex = (int)m_dbManager->TICLtower(); - if(etaIndex > nsamp) nsamp = etaIndex; + if (det==detector) + etaIndex = (int)m_dbManager->TICLsample(); + else + etaIndex = (int)m_dbManager->TICLtower(); + if (etaIndex > nsamp) nsamp = etaIndex; // simple calculations of eta for one cell - neta[etaIndex-1] = 1; - deta[etaIndex-1] = m_dbManager->TICLdeta(); - eta_min[etaIndex-1] = m_dbManager->TICLeta() - m_dbManager->TICLdeta()/2; - eta_max[etaIndex-1] = m_dbManager->TICLeta() + m_dbManager->TICLdeta()/2; + neta[etaIndex-1] = 1; + deta[etaIndex-1] = m_dbManager->TICLdeta(); + eta_min[etaIndex-1] = m_dbManager->TICLeta() - m_dbManager->TICLdeta()/2; + eta_max[etaIndex-1] = m_dbManager->TICLeta() + m_dbManager->TICLdeta()/2; calculateZ(detector, side, etaIndex, zshift, zcenter[etaIndex-1], dz[etaIndex-1]); - - // Fill in the hardcoded values - rcenter[etaIndex-1] = rGap[indHardcoded]; - dr[etaIndex-1] = drGap[indHardcoded]; - indHardcoded++; + + // Fill in the hardcoded values + rcenter[etaIndex-1] = rGap[indHardcoded]; + dr[etaIndex-1] = drGap[indHardcoded]; + indHardcoded++; calculateR(detector, etaIndex, addPlates, @@ -2733,15 +2657,15 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, m_dbManager->TICLlastrow(), rcenter[etaIndex-1], dr[etaIndex-1]); - } - } - else // MBSCIN case - // - should not arrive to this place !!! - // TileDetDescrManager do not expect MBSCIN at all - // it is kept here just in case we'll want to describe - // them as a separate region - // - { + } + + } else { + // MBSCIN case + // - should not arrive to this place !!! + // TileDetDescrManager do not expect MBSCIN at all + // it is kept here just in case we'll want to describe + // them as a separate region + // assert (detector <= TILE_REGION_GAP); // diameter: 276 - 740 - 1964 @@ -2767,22 +2691,22 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, phi_min = -dphi/2; phi_max = nphi * dphi + phi_min; } - + descriptor->set(&*eta_min.begin(), - &*eta_max.begin(), - &*deta.begin(), - phi_min, - phi_max, - dphi, - zshift, - &*rcenter.begin(), - &*dr.begin(), - &*zcenter.begin(), - &*dz.begin(), - nsamp, - &*neta.begin(), - nphi, - sign_eta); + &*eta_max.begin(), + &*deta.begin(), + phi_min, + phi_max, + dphi, + zshift, + &*rcenter.begin(), + &*dr.begin(), + &*zcenter.begin(), + &*dz.begin(), + nsamp, + &*neta.begin(), + nphi, + sign_eta); // debug print @@ -2793,9 +2717,9 @@ void TileGeoSectionBuilder::fillDescriptor(TileDetDescriptor*& descriptor, /** - Method creating one TileCellDim object per particular type of Tile Cell - These objects can be accessed later through TileDetDescManager - providing Cell Identifier with module field = 0 + Method creating one TileCellDim object per particular type of Tile Cell + These objects can be accessed later through TileDetDescManager + providing Cell Identifier with module field = 0 */ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, @@ -2805,7 +2729,7 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, float zShiftNeg) { MLOG(DEBUG) << "TileGeoSectionBuilder::computeCellDim for detector=" - << detector << endmsg; + << detector << endmsg; /** Vectors holding rMin, rMax, zMin, zMax for each tilerow of the cell */ std::vector<double> rmins; @@ -2831,26 +2755,22 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, bool isSquare; float minTilesInRow; TileCellDim *cellDim =0, *cellDimNeg =0; - // -------- Auxiliary variables ---------- + // -------- Auxiliary variables ---------- MLOG(DEBUG) << "Auxiliary variables..." << endmsg; - // Barrel/Extended barrel regions - if(detector != TILE_REGION_GAP ) - { + // Barrel/Extended barrel regions + if (detector != TILE_REGION_GAP ) { MLOG(DEBUG) << "Barrel/ExtendedBarrel regions..." << endmsg; - - if(detector == TILE_REGION_CENTRAL) - { + + if (detector == TILE_REGION_CENTRAL) { m_dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); dzPeriod = m_barrelPeriodThickness; - } - else - { + } else { m_dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); dzPeriod = m_extendedPeriodThickness; } - MLOG(DEBUG) << "dzPeriod: " << dzPeriod << endmsg; + MLOG(DEBUG) << "dzPeriod: " << dzPeriod << "\n" << endmsg; rMin = m_dbManager->TILBrmin() *Gaudi::Units::cm; @@ -2862,18 +2782,18 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, Initial values for zMin - leftmost edge Initial values for zMax = 0 */ - for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { + for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { m_dbManager->SetCurrentScin(j); if ( (j == CurrentScin + m_dbManager->TILBnscin() - 1) && addPlates ) { - // use end of the master as end of last cell - rMax = m_dbManager->TILBrmax()*Gaudi::Units::cm; + // use end of the master as end of last cell + rMax = m_dbManager->TILBrmax()*Gaudi::Units::cm; + } else { double tileSize=m_dbManager->SCNTdr(); if (m_dbManager->SCNTdrw() > 0) - // round to integer for all tiles except gap scin - tileSize=round(tileSize); + // round to integer for all tiles except gap scin + tileSize=round(tileSize); rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*Gaudi::Units::cm; } @@ -2881,225 +2801,215 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, rmaxs.push_back(rMax); rMin = rMax; - if(detector == TILE_REGION_CENTRAL) { - zmins.push_back((-m_dbManager->TILBdzmast()/2 - m_barrelGlue*(1./Gaudi::Units::cm) + if (detector == TILE_REGION_CENTRAL) { + zmins.push_back((-m_dbManager->TILBdzmast()/2 - m_barrelGlue*(1./Gaudi::Units::cm) -(m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend1()))*Gaudi::Units::cm); zEnd1Lim = (-m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1())*Gaudi::Units::cm; zEnd2Lim = ( m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2())*Gaudi::Units::cm; zEnd1 = (-m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; zEnd2 = ( m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; - } - else { - zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*Gaudi::Units::cm); + + } else { + zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2 + m_dbManager->TILBdzend1())*Gaudi::Units::cm); zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*Gaudi::Units::cm; zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*Gaudi::Units::cm; zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; zEnd2 = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; } - + // init all zmaxs to 0. zmaxs.push_back(0.); } - // Iterate through region cells and fill in the Samples vector - if(m_dbManager->SetFirstTiclInDet(detector)) - { + // Iterate through region cells and fill in the Samples vector + if (m_dbManager->SetFirstTiclInDet(detector)) { samples.push_back((int)m_dbManager->TICLsample()); // iterate over all other TICLs in the detector - while(m_dbManager->SetNextTiclInDet()) - { - /// find if the sample of the cell is already in the samples vector and if not then add it - currentSample = (int)m_dbManager->TICLsample(); - for(index=0; index<samples.size(); index++) - if(currentSample==samples[index]) break; - if(index==samples.size()) samples.push_back(currentSample); + while (m_dbManager->SetNextTiclInDet()) { + /// find if the sample of the cell is already in the samples vector and if not then add it + currentSample = (int)m_dbManager->TICLsample(); + for (index=0; index<samples.size(); index++) + if (currentSample==samples[index]) break; + if (index==samples.size()) samples.push_back(currentSample); } - } - else - { + + } else { (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::computeCellDim: No TICL structures for the detector: " << detector << endmsg; return; } /** Iterate through cells by samples */ - for(index=0; index<samples.size(); index++) - { + for (index=0; index<samples.size(); index++) { currentSample = samples[index]; - if(m_dbManager->SetFirstTiclInDetSamp(detector, currentSample)) - { - nFirstRow = (int)m_dbManager->TICLfirstrow(); - // BC sample - if(m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) - nLastRow = nFirstRow + 2; - else - nLastRow = (int)m_dbManager->TICLlastrow(); - - nRows = nLastRow - nFirstRow + 1; + if (m_dbManager->SetFirstTiclInDetSamp(detector, currentSample)) { + nFirstRow = (int)m_dbManager->TICLfirstrow(); + // BC sample + if (m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) + nLastRow = nFirstRow + 2; + else + nLastRow = (int)m_dbManager->TICLlastrow(); + + nRows = nLastRow - nFirstRow + 1; + + do { + isSquare = true; + minTilesInRow = m_dbManager->TICLntilesrow(0); + for (unsigned int jj=1; jj<nRows; jj++) { + if (m_dbManager->TICLntilesrow(jj)!=minTilesInRow) + isSquare = false; + if (m_dbManager->TICLntilesrow(jj)<minTilesInRow) + minTilesInRow = m_dbManager->TICLntilesrow(jj); + } - do - { - isSquare = true; - minTilesInRow = m_dbManager->TICLntilesrow(0); - for(unsigned int jj=1; jj<nRows; jj++) - { - if(m_dbManager->TICLntilesrow(jj)!=minTilesInRow) - isSquare = false; - if(m_dbManager->TICLntilesrow(jj)<minTilesInRow) - minTilesInRow = m_dbManager->TICLntilesrow(jj); - } + if (isSquare) + dzCell = minTilesInRow * dzPeriod; + else + dzCell = (minTilesInRow + 0.5) * dzPeriod; - if(isSquare) - dzCell = minTilesInRow * dzPeriod; - else - dzCell = (minTilesInRow + 0.5) * dzPeriod; + MLOG(DEBUG) << "dzCell: " << dzCell << " minTilesInRow: " << minTilesInRow << " isSquare: " << isSquare << " dzPeriod: " << dzPeriod << endmsg; - MLOG(DEBUG) << "dzCell: " << dzCell << ", minTilesInRow:" << minTilesInRow << ", dzPeriod:" << dzPeriod << endmsg; - - for(unsigned int jj=nFirstRow; jj<=nLastRow; jj++) - zmaxs[jj-1] = zmins[jj-1] + dzCell; + for (unsigned int jj=nFirstRow; jj<=nLastRow; jj++) + zmaxs[jj-1] = zmins[jj-1] + dzCell; - /** -------- BC ---------- */ - if(m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) - { - isSquare = true; - int firstC = nLastRow + 1; - nLastRow +=3; - - minTilesInRow = m_dbManager->TICLntilesrow(firstC-nFirstRow); - - for(unsigned int jj=firstC-nFirstRow+1; jj<=nLastRow-nFirstRow; jj++) - { - if(m_dbManager->TICLntilesrow(jj)!=minTilesInRow) - isSquare = false; - if(m_dbManager->TICLntilesrow(jj)<minTilesInRow) - minTilesInRow = m_dbManager->TICLntilesrow(jj); - } + /** -------- BC ---------- */ + bool BCcell = (m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL); + if (BCcell) { + isSquare = true; + int firstC = nLastRow + 1; + nLastRow +=3; - if(isSquare) - dzCell = minTilesInRow*dzPeriod; - else - dzCell = (minTilesInRow + 0.5)*dzPeriod; + minTilesInRow = m_dbManager->TICLntilesrow(firstC-nFirstRow); + for (unsigned int jj=firstC-nFirstRow+1; jj<=nLastRow-nFirstRow; jj++) { + if (m_dbManager->TICLntilesrow(jj)!=minTilesInRow) + isSquare = false; + if (m_dbManager->TICLntilesrow(jj)<minTilesInRow) + minTilesInRow = m_dbManager->TICLntilesrow(jj); + } - MLOG(DEBUG) << "BC - dzCell: " << dzCell << endmsg; - - for(unsigned int jj=firstC; jj<=nLastRow; jj++) - zmaxs[jj-1] = zmins[jj-1] + dzCell; - } + if (isSquare) + dzCell = minTilesInRow*dzPeriod; + else + dzCell = (minTilesInRow + 0.5)*dzPeriod; - /** Create and fill in TileCellDim objects, one for Central Barrel two for extended (+/- side) */ - if(m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) - cellDim = new TileCellDim(2*nRows); - else - cellDim = new TileCellDim(nRows); - if(detector != TILE_REGION_CENTRAL) - cellDimNeg = new TileCellDim(nRows); + MLOG(DEBUG) << "BC - dzCell: " << dzCell << " minTilesInRow: " << minTilesInRow << " isSquare: " << isSquare << endmsg; - for(unsigned int jj=nFirstRow; jj<=nLastRow; jj++) - { - double Zmin=zmins[jj-1]; - double Zmax=zmaxs[jj-1]; - if (addPlates) { + for (unsigned int jj=firstC; jj<=nLastRow; jj++) + zmaxs[jj-1] = zmins[jj-1] + dzCell; + } + + /** Create and fill in TileCellDim objects, one for Central Barrel two for extended (+/- side) */ + if (m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) + cellDim = new TileCellDim(2*nRows); + else + cellDim = new TileCellDim(nRows); + + if (detector != TILE_REGION_CENTRAL) + cellDimNeg = new TileCellDim(nRows); + + for (unsigned int jj=nFirstRow; jj<=nLastRow; jj++) { + double Zmin=zmins[jj-1]; + double Zmax=zmaxs[jj-1]; + if (addPlates) { if (Zmin<zEnd1Lim) Zmin=zEnd1; else if (Zmin>zEnd2Lim) Zmin=zEnd2; if (Zmax<zEnd1Lim) Zmax=zEnd1; else if (Zmax>zEnd2Lim) Zmax=zEnd2; - } - - MLOG(DEBUG) << "Zmax: " << Zmax << ", " << "zShiftPos: " << zShiftPos << endmsg; + } - cellDim->addRMin(rmins[jj-1]); - cellDim->addRMax(rmaxs[jj-1]); - cellDim->addZMin(Zmin+zShiftPos); - cellDim->addZMax(Zmax+zShiftPos); + cellDim->addRMin(rmins[jj-1]); + cellDim->addRMax(rmaxs[jj-1]); + cellDim->addZMin(Zmin+zShiftPos); + cellDim->addZMax(Zmax+zShiftPos); - if(detector != TILE_REGION_CENTRAL) - { + if (detector != TILE_REGION_CENTRAL) { cellDimNeg->addRMin(rmins[jj-1]); cellDimNeg->addRMax(rmaxs[jj-1]); cellDimNeg->addZMin(-Zmax-zShiftNeg); cellDimNeg->addZMax(-Zmin-zShiftNeg); + if (jj==nFirstRow || (BCcell && jj==nLastRow)) + MLOG(DEBUG) << "Zmin: " << Zmin << " Zmax: " << Zmax << " zShiftPos: " << zShiftPos << " zShiftNeg: " << zShiftNeg << endmsg; + + } else { + if (jj==nFirstRow || (BCcell && jj==nLastRow)) + MLOG(DEBUG) << "Zmin: " << Zmin << " Zmax: " << Zmax << " zShift: " << zShiftPos << endmsg; + } } - } - for(unsigned int jj=nFirstRow; jj<=nLastRow; jj++) - zmins[jj-1] = zmaxs[jj-1]; - - if(m_dbManager->TICLncell()<0) - nSide = -1; - else - nSide = 1; - - nTower = abs((int)m_dbManager->TICLtower())-1; - nSample = currentSample - 1; + for (unsigned int jj=nFirstRow; jj<=nLastRow; jj++) + zmins[jj-1] = zmaxs[jj-1]; - if(detector == TILE_REGION_CENTRAL) { + if (m_dbManager->TICLncell()<0) + nSide = -1; + else + nSide = 1; + + nTower = abs((int)m_dbManager->TICLtower())-1; + nSample = currentSample - 1; + + if (detector == TILE_REGION_CENTRAL) { cellDim->computeVolume(); - manager->add_cellDim(detector, nSide, nTower, nSample, cellDim); - } else - { + manager->add_cellDim(detector, nSide, nTower, nSample, cellDim); + + } else { cellDim->computeVolume(); cellDimNeg->computeVolume(); - manager->add_cellDim(detector, 1, nTower, nSample, cellDim); - manager->add_cellDim(detector, -1, nTower, nSample, cellDimNeg); - } + manager->add_cellDim(detector, 1, nTower, nSample, cellDim); + manager->add_cellDim(detector, -1, nTower, nSample, cellDimNeg); + } - if(m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) nLastRow -=3; + if (m_dbManager->TICLsample()==2 && detector == TILE_REGION_CENTRAL) nLastRow -=3; - /* -------- DEBUG printouts -------------- */ + /* -------- DEBUG printouts -------------- */ if (m_verbose) { std::cout << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(2); std::cout << "\n **** Cell dimensions computed for : "; - std::cout << "(" << detector << ", " + std::cout << "(" << detector << ", " << nSide << ", " << nTower << ", " << nSample << ")\n"; std::cout << " >> CellDim contains " << cellDim->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDim->getNRows(); jj++) - std::cout << cellDim->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDim->getNRows(); jj++) + std::cout << cellDim->getRMin(jj) << " " << cellDim->getRMax(jj) << " " << cellDim->getZMin(jj) << " " << cellDim->getZMax(jj) << "\n"; std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; - if(detector != TILE_REGION_CENTRAL) - { + if (detector != TILE_REGION_CENTRAL) { std::cout << " >> CellDimNeg contains " << cellDimNeg->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) - std::cout << cellDimNeg->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) + std::cout << cellDimNeg->getRMin(jj) << " " << cellDimNeg->getRMax(jj) << " " << cellDimNeg->getZMin(jj) << " " << cellDimNeg->getZMax(jj) << "\n"; std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; } - std::cout << std::resetiosflags(std::ios::fixed); + std::cout << "\n" << std::resetiosflags(std::ios::fixed); } - /* ------------------------------------------------------------------------------------------------ */ - } - while(m_dbManager->SetNextTiclInDetSamp()); - } - else - { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::computeCellDim: No TICL structures in detector: " + /* ------------------------------------------------------------------------------------------------ */ + } + while (m_dbManager->SetNextTiclInDetSamp()); + + } else { + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::computeCellDim: No TICL structures in detector: " << detector << " for sample: " << nSample << endmsg; - return; + return; } } - } - else // ITC/GAP/CRACK - { - MLOG(DEBUG) << "ITC/GAP/CRACK regions..." << endmsg; + + } else { // ITC/GAP/CRACK + MLOG(DEBUG) << "ITC/GAP/CRACK regions...\n" << endmsg; nSide = 1; // Deal with ITC - for(unsigned int sec=0; sec<2; sec++) // PLUG1 & PLUG2 - { + for (unsigned int sec=0; sec<2; sec++) { // PLUG1 & PLUG2 rmins.clear(); rmaxs.clear(); zmins.clear(); @@ -3107,10 +3017,9 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, m_dbManager->SetFirstTiclInDet(detector); - if(sec) + if (sec) { m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); - else - { + } else { m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); m_dbManager->SetNextTiclInDet(); } @@ -3119,28 +3028,28 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, if (addPlates) rMin -= m_dbManager->TILBdrfront() *Gaudi::Units::cm; CurrentScin = 100*m_dbManager->TILBsection() + 1; - for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { + for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { m_dbManager->SetCurrentScin(j); if ( (j == CurrentScin + m_dbManager->TILBnscin() - 1) && addPlates ) { /** use end of the master as end of last cell */ - rMax = m_dbManager->TILBrmax()*Gaudi::Units::cm; + rMax = m_dbManager->TILBrmax()*Gaudi::Units::cm; /** subtract from C10 thickness of D4 front plate */ if (addPlates && sec) rMax -= m_dbManager->TILBdrfront()*Gaudi::Units::cm; + } else { double tileSize=m_dbManager->SCNTdr(); if (m_dbManager->SCNTdrw() > 0) /** round to integer for all tiles except gap scin */ - tileSize=round(tileSize); + tileSize=round(tileSize); rMax = (m_dbManager->TILBrmin() + m_dbManager->SCNTrc() + tileSize/2)*Gaudi::Units::cm; } rmins.push_back(rMin); rmaxs.push_back(rMax); rMin = rMax; - + zEnd1Lim = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2+m_dbManager->TILBdzend1()+0.001)*Gaudi::Units::cm; zEnd2Lim = (m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2-m_dbManager->TILBdzend2()-0.001)*Gaudi::Units::cm; zEnd1 = (m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm; @@ -3157,15 +3066,14 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, // Create TileCellDim objects if (m_dbManager->TILBnscin() < 0) { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::computeCellDim: Bad return from TILBnscin" << endmsg; - return; + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::computeCellDim: Bad return from TILBnscin" << endmsg; + return; } unsigned int nscin = static_cast<unsigned int>(m_dbManager->TILBnscin()); cellDim = new TileCellDim(nscin); cellDimNeg = new TileCellDim(nscin); - for(unsigned int jj=0; jj<nscin; jj++) - { + for (unsigned int jj=0; jj<nscin; jj++) { cellDim->addRMin(rmins[jj]); cellDim->addRMax(rmaxs[jj]); cellDim->addZMin(zmins[jj]+zShiftPos); @@ -3176,11 +3084,11 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, cellDimNeg->addZMin(-zmaxs[jj]-zShiftNeg); cellDimNeg->addZMax(-zmins[jj]-zShiftNeg); } - + MLOG(DEBUG) << "Zmin: " << zmins[0] << " Zmax: " << zmaxs[0] << " zShiftPos: " << zShiftPos << " zShiftNeg: " << zShiftNeg << endmsg; nTower = (int)m_dbManager->TICLtower()-1; nSample = (int)m_dbManager->TICLsample()-1; - + cellDim->computeVolume(); cellDimNeg->computeVolume(); manager->add_cellDim(detector, 1, nTower, nSample, cellDim); @@ -3191,140 +3099,137 @@ void TileGeoSectionBuilder::computeCellDim(TileDetDescrManager*& manager, std::cout << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(2); std::cout << "\n **** Cell dimension computed for : "; - std::cout << "(" << detector << ", " + std::cout << "(" << detector << ", " << nSide << ", " << nTower << ", " << nSample << ")\n"; std::cout << " >> CellDim contains " << cellDim->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDim->getNRows(); jj++) - std::cout << cellDim->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDim->getNRows(); jj++) + std::cout << cellDim->getRMin(jj) << " " << cellDim->getRMax(jj) << " " << cellDim->getZMin(jj) << " " << cellDim->getZMax(jj) << "\n"; std::cout<< " >> Cell Volume is " << cellDim->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; - + std::cout << " >> CellDimNeg contains " << cellDimNeg->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) - std::cout << cellDimNeg->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) + std::cout << cellDimNeg->getRMin(jj) << " " << cellDimNeg->getRMax(jj) << " " << cellDimNeg->getZMin(jj) << " " << cellDimNeg->getZMax(jj) << "\n"; std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; - std::cout << std::resetiosflags(std::ios::fixed); + std::cout << "\n" << std::resetiosflags(std::ios::fixed); } /* -------------------------------------------- */ } - for(unsigned int sec=0; sec<2; sec++) // GAP & CRACK - { + for (unsigned int sec=0; sec<2; sec++) { // GAP & CRACK rmins.clear(); rmaxs.clear(); zmins.clear(); zmaxs.clear(); - if(sec) - { - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); - CurrentScin = 100*m_dbManager->TILBsection()+1; - } - else - { - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); - CurrentScin = 100*m_dbManager->TILBsection()+1; + if (sec) { + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); + CurrentScin = 100*m_dbManager->TILBsection()+1; + } else { + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); + CurrentScin = 100*m_dbManager->TILBsection()+1; } double rMIN = m_dbManager->TILBrmin()*Gaudi::Units::cm; double rMAX = m_dbManager->TILBrmax()*Gaudi::Units::cm; // Initialize rMin, rMax, zMin, zMax vectors - for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) - { - m_dbManager->SetCurrentScin(j); + for (unsigned int j = CurrentScin; j < (CurrentScin + m_dbManager->TILBnscin()); j++) { + m_dbManager->SetCurrentScin(j); - double rCenter = rMIN + m_dbManager->SCNTrc()*Gaudi::Units::cm; - double dR2 = (0.5 * m_dbManager->SCNTdr() + m_dbManager->SCNTdrw()) *Gaudi::Units::cm; - if (addPlates) { - if (j==CurrentScin) { // cells E2, E4 - use rMin of mother volume, calculate rMax - rMin = rMIN; - rMax = rCenter + dR2; - } else { // cells E1, E3 - use rMax of mother volume, calculate rMin - rMin = rCenter - dR2; - rMax = rMAX; - } - } else { - rMin = rCenter - dR2; - rMax = rCenter + dR2; - } - - rmins.push_back(rMin); - rmaxs.push_back(rMax); - - zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm); - zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm); + double rCenter = rMIN + m_dbManager->SCNTrc()*Gaudi::Units::cm; + double dR2 = (0.5 * m_dbManager->SCNTdr() + m_dbManager->SCNTdrw()) *Gaudi::Units::cm; + if (addPlates) { + if (j==CurrentScin) { // cells E2, E4 - use rMin of mother volume, calculate rMax + rMin = rMIN; + rMax = rCenter + dR2; + } else { // cells E1, E3 - use rMax of mother volume, calculate rMin + rMin = rCenter - dR2; + rMax = rMAX; + } + } else { + rMin = rCenter - dR2; + rMax = rCenter + dR2; + } + + rmins.push_back(rMin); + rmaxs.push_back(rMax); + + zmins.push_back((m_dbManager->TILBzoffset() - m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm); + zmaxs.push_back((m_dbManager->TILBzoffset() + m_dbManager->TILBdzmodul()/2)*Gaudi::Units::cm); } // Iterate through scintillators and create corresponding TileCellDim objects (+/-) - for (unsigned int jj = 0; jj < (unsigned int)m_dbManager->TILBnscin(); jj++) - { - if(sec==0 && jj==0) - m_dbManager->SetFirstTiclInDet(detector+1); - else - m_dbManager->SetNextTiclInDet(); + for (unsigned int jj = 0; jj < (unsigned int)m_dbManager->TILBnscin(); jj++) { + if (sec==0 && jj==0) + m_dbManager->SetFirstTiclInDet(detector+1); + else + m_dbManager->SetNextTiclInDet(); if ((int)m_dbManager->TICLtower()>16) continue; - cellDim = new TileCellDim(1); - cellDimNeg = new TileCellDim(1); + cellDim = new TileCellDim(1); + cellDimNeg = new TileCellDim(1); - cellDim->addRMin(rmins[m_dbManager->TILBnscin() - jj - 1]); - cellDim->addRMax(rmaxs[m_dbManager->TILBnscin() - jj - 1]); - cellDim->addZMin(zmins[m_dbManager->TILBnscin() - jj - 1]+zShiftPos); - cellDim->addZMax(zmaxs[m_dbManager->TILBnscin() - jj - 1]+zShiftPos); + cellDim->addRMin(rmins[m_dbManager->TILBnscin() - jj - 1]); + cellDim->addRMax(rmaxs[m_dbManager->TILBnscin() - jj - 1]); + cellDim->addZMin(zmins[m_dbManager->TILBnscin() - jj - 1]+zShiftPos); + cellDim->addZMax(zmaxs[m_dbManager->TILBnscin() - jj - 1]+zShiftPos); - cellDimNeg->addRMin(rmins[m_dbManager->TILBnscin() - jj - 1]); - cellDimNeg->addRMax(rmaxs[m_dbManager->TILBnscin() - jj - 1]); - cellDimNeg->addZMin(-zmaxs[m_dbManager->TILBnscin() - jj - 1]-zShiftNeg); - cellDimNeg->addZMax(-zmins[m_dbManager->TILBnscin() - jj - 1]-zShiftNeg); + cellDimNeg->addRMin(rmins[m_dbManager->TILBnscin() - jj - 1]); + cellDimNeg->addRMax(rmaxs[m_dbManager->TILBnscin() - jj - 1]); + cellDimNeg->addZMin(-zmaxs[m_dbManager->TILBnscin() - jj - 1]-zShiftNeg); + cellDimNeg->addZMax(-zmins[m_dbManager->TILBnscin() - jj - 1]-zShiftNeg); + + MLOG(DEBUG) << "Zmin: " << zmins[m_dbManager->TILBnscin() - jj - 1] << " Zmax: " << zmaxs[m_dbManager->TILBnscin() - jj - 1] << " zShiftPos: " << zShiftPos << " zShiftNeg: " << zShiftNeg << endmsg; + + nTower = (int)m_dbManager->TICLtower()-1; + nSample = (int)m_dbManager->TICLsample()-1; - nTower = (int)m_dbManager->TICLtower()-1; - nSample = (int)m_dbManager->TICLsample()-1; - cellDim->computeVolume(); cellDimNeg->computeVolume(); - manager->add_cellDim(detector, 1, nTower, nSample, cellDim); - manager->add_cellDim(detector, -1, nTower, nSample, cellDimNeg); + manager->add_cellDim(detector, 1, nTower, nSample, cellDim); + manager->add_cellDim(detector, -1, nTower, nSample, cellDimNeg); /* -------- DEBUG printouts -------------- */ if (m_verbose) { std::cout << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(2); std::cout << "\n **** Cell dimension computed for : "; - std::cout << "(" << detector << ", " + std::cout << "(" << detector << ", " << nSide << ", " << nTower << ", " << nSample << ")\n"; std::cout << " >> CellDim contains " << cellDim->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDim->getNRows(); jj++) - std::cout << cellDim->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDim->getNRows(); jj++) + std::cout << cellDim->getRMin(jj) << " " << cellDim->getRMax(jj) << " " << cellDim->getZMin(jj) << " " << cellDim->getZMax(jj) << "\n"; std::cout << " >> Cell Volume is " << cellDim->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; - + std::cout << " >> CellDimNeg contains " << cellDimNeg->getNRows() << " rows\n"; - for(unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) - std::cout << cellDimNeg->getRMin(jj) << " " + for (unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++) + std::cout << cellDimNeg->getRMin(jj) << " " << cellDimNeg->getRMax(jj) << " " << cellDimNeg->getZMin(jj) << " " << cellDimNeg->getZMax(jj) << "\n"; std::cout << " >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./Gaudi::Units::cm3) << " cm^3\n"; - std::cout << std::resetiosflags(std::ios::fixed); + std::cout << "\n" << std::resetiosflags(std::ios::fixed); } /* -------------------------------------------- */ } } - } + } } + void TileGeoSectionBuilder::calculateZ(int detector, int side, int sample, @@ -3333,27 +3238,27 @@ void TileGeoSectionBuilder::calculateZ(int detector, float& dz) { switch(detector) { - case TILE_REGION_CENTRAL: - m_dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); - break; - case TILE_REGION_EXTENDED: - m_dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); - break; - case TILE_REGION_GAP: - if (sample==3) { // D4 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); - } else if (sample==2) { // C10 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); - } else if (sample<13) { // E1-E2 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); - } else { // E3-E4 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); - } - break; - default: - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateZ: Unexpected detector: " - << detector << endmsg; - return; + case TILE_REGION_CENTRAL: + m_dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); + break; + case TILE_REGION_EXTENDED: + m_dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); + break; + case TILE_REGION_GAP: + if (sample==3) { // D4 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); + } else if (sample==2) { // C10 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); + } else if (sample<13) { // E1-E2 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); + } else { // E3-E4 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); + } + break; + default: + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateZ: Unexpected detector: " + << detector << endmsg; + return; } // first - find position in ideal world before Z-shift and misalignment @@ -3361,9 +3266,9 @@ void TileGeoSectionBuilder::calculateZ(int detector, // need to split one cylinder in pos/neg halves float zmin=m_dbManager->TILBzoffset()/2 * Gaudi::Units::cm ; float zmax=zmin+m_dbManager->TILBdzmodul()/2 * Gaudi::Units::cm ; - if (sample==3) { // fix for D0 cell + if (sample==3) { // fix for D0 cell float D0size = 560.58/307*40 * Gaudi::Units::cm; // size of D0 along Z in Gaudi::Units::cm - // FIXME:: should be taken from DB + // FIXME:: should be taken from DB if (side>0) // positive zmin = - D0size/2; else @@ -3371,12 +3276,13 @@ void TileGeoSectionBuilder::calculateZ(int detector, } zcenter = (zmin+zmax)/2; dz = (zmax-zmin); - } else if (detector == TILE_REGION_GAP && (sample > 9) ){ + + } else if (detector == TILE_REGION_GAP && (sample > 9) ) { zcenter=m_dbManager->TILBzoffset() * Gaudi::Units::cm ; m_dbManager->SetCurrentScin(100*m_dbManager->TILBsection() + 1 ); dz = m_dbManager->SCNTdt()*Gaudi::Units::cm; - } - else { + + } else { zcenter=m_dbManager->TILBzoffset() * Gaudi::Units::cm ; dz=m_dbManager->TILBdzmodul() * Gaudi::Units::cm ; } @@ -3389,6 +3295,7 @@ void TileGeoSectionBuilder::calculateZ(int detector, return; } + void TileGeoSectionBuilder::calculateR(int detector, int sample, bool addPlates, @@ -3399,31 +3306,31 @@ void TileGeoSectionBuilder::calculateR(int detector, { int cell = 0; switch(detector) { - case TILE_REGION_CENTRAL: - m_dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); - break; - case TILE_REGION_EXTENDED: - m_dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); - break; - case TILE_REGION_GAP: - if (sample==3) { // D4 - cell = -2; - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); - } else if (sample==2) { // C10 - cell = -1; - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); - } else if (sample<13) { // E1-E2 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); - cell = firstScin - 2; // E2 has index 1, E1 has index 2 - } else { // E3-E4 - m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); - cell = firstScin; // E4 has index 1, E3 has index 2 - } - break; - default: - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateR: Unexpected detector: " - << detector << endmsg; - return; + case TILE_REGION_CENTRAL: + m_dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); + break; + case TILE_REGION_EXTENDED: + m_dbManager->SetCurrentSection(TileDddbManager::TILE_EBARREL); + break; + case TILE_REGION_GAP: + if (sample==3) { // D4 + cell = -2; + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); + } else if (sample==2) { // C10 + cell = -1; + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); + } else if (sample<13) { // E1-E2 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG3); + cell = firstScin - 2; // E2 has index 1, E1 has index 2 + } else { // E3-E4 + m_dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG4); + cell = firstScin; // E4 has index 1, E3 has index 2 + } + break; + default: + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateR: Unexpected detector: " + << detector << endmsg; + return; } float oldrc = rcenter; @@ -3445,6 +3352,7 @@ void TileGeoSectionBuilder::calculateR(int detector, rcenter = (rMax+rMin) * 0.5; dr = (rMax-rMin); } + } else { int first = 100*m_dbManager->TILBsection()+firstScin; int last = 100*m_dbManager->TILBsection()+lastScin; @@ -3471,6 +3379,7 @@ void TileGeoSectionBuilder::calculateR(int detector, m_dbManager->SetCurrentScin(first); rMin += m_dbManager->SCNTrc() - round(m_dbManager->SCNTdr())*0.5; } + } else { // keep only sensitive part of the cell without front/back planes m_dbManager->SetCurrentScin(last); rMax = rMin + m_dbManager->SCNTrc() + round(m_dbManager->SCNTdr())*0.5; @@ -3496,70 +3405,65 @@ void TileGeoSectionBuilder::calculateR(int detector, return; } + void TileGeoSectionBuilder::calculateEta(int detector, - int side, - int sample, - float& etamin, - float& etamax, - float& deta, - unsigned int& neta) + int side, + int sample, + float& etamin, + float& etamax, + float& deta, + unsigned int& neta) { - /** - The following actions need to be performed for Central/Extended Barrel - A. Find first cell. D0 goes to the positive side - B. Initialize etamax, etamin and neta. deta initialized but not changed later. - C. Iterate over all remaining cells in the sample and fill etamin, etamax, neta. - - Any other detectors are not expected! + /** + The following actions need to be performed for Central/Extended Barrel + A. Find first cell. D0 goes to the positive side + B. Initialize etamax, etamin and neta. deta initialized but not changed later. + C. Iterate over all remaining cells in the sample and fill etamin, etamax, neta. + + Any other detectors are not expected! */ int sign_eta = 1; if ((detector == TILE_REGION_CENTRAL) && (side<1)) sign_eta = -1; - switch(detector) - { - case TILE_REGION_CENTRAL: // Central Barrel - case TILE_REGION_EXTENDED: // Extended Barrel + switch(detector) { + case TILE_REGION_CENTRAL: // Central Barrel + case TILE_REGION_EXTENDED: // Extended Barrel { - if(m_dbManager->SetFirstTiclInDetSamp(detector, sample)) - { - // --- A --- - while(sign_eta * m_dbManager->TICLncell() < 0) - if (!(m_dbManager->SetNextTiclInDetSamp())) - { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateEta: No TICL structures of positive side " + if (m_dbManager->SetFirstTiclInDetSamp(detector, sample)) { + // --- A --- + while (sign_eta * m_dbManager->TICLncell() < 0) + if (!(m_dbManager->SetNextTiclInDetSamp())) { + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateEta: No TICL structures of positive side " << "in Central Barrel for sample: " << sample << endmsg; - return; - } + return; + } - // --- B --- - neta = 1; - deta = m_dbManager->TICLdeta(); - etamin = m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2; - etamax = m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2; + // --- B --- + neta = 1; + deta = m_dbManager->TICLdeta(); + etamin = m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2; + etamax = m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2; + + // --- C --- + while (m_dbManager->SetNextTiclInDetSamp()) { + if (!((detector == TILE_REGION_CENTRAL)&&(sign_eta * m_dbManager->TICLncell() <= 0))) { + neta++; + if (etamax < m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2) + etamax = m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2; + if (etamin > m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2) + etamin = m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2; + } + } - // --- C --- - while(m_dbManager->SetNextTiclInDetSamp()) - { - if(!((detector == TILE_REGION_CENTRAL)&&(sign_eta * m_dbManager->TICLncell() <= 0))) - { - neta++; - if (etamax < m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2) - etamax = m_dbManager->TICLeta()*sign_eta + m_dbManager->TICLdeta()/2; - if (etamin > m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2) - etamin = m_dbManager->TICLeta()*sign_eta - m_dbManager->TICLdeta()/2; - } - } - } - else - { - (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateEta: No TICL structures in detector: " + } else { + (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateEta: No TICL structures in detector: " << detector << " for sample: " << sample << endmsg; - return; + return; } break; } - default: + default: { (*m_log) << MSG::ERROR << "TileGeoSectionBuilder::calculateEta: Unexpected detector: " << detector << endmsg; @@ -3568,56 +3472,63 @@ void TileGeoSectionBuilder::calculateEta(int detector, } } + void TileGeoSectionBuilder::setBarrelPeriodThickness(double val) { m_barrelPeriodThickness = val; } + void TileGeoSectionBuilder::setBarrelGlue(double val) { m_barrelGlue = val; } + void TileGeoSectionBuilder::setExtendedPeriodThickness(double val) { m_extendedPeriodThickness = val; } + void TileGeoSectionBuilder::checktransfunc(double absorber, double period, int np, double center) { (*m_log) << MSG::VERBOSE << std::setprecision (std::numeric_limits<double>::digits10 + 1) - << " Absorber center = " << center - << " length = " << absorber - << " period = " << period - << " nperiods = " << np - << endmsg; - double zC,dZ,z1,z2=-absorber/2.+center; - for (int i=0; i<np; ++i) { - zC = (period*(2*i+1)-absorber)/2. + center; - z1 = zC - period/2.; - dZ = z1 - z2; - z2 = zC + period/2.; - (*m_log) << MSG::VERBOSE << std::setw(4) - << i << " z1= " << z1 << " z2= " << z2 - << " dist from previous= " << dZ << endmsg; - } + << " Absorber center = " << center + << " length = " << absorber + << " period = " << period + << " nperiods = " << np + << endmsg; + double zC,dZ,z1,z2=-absorber/2.+center; + for (int i=0; i<np; ++i) { + zC = (period*(2*i+1)-absorber)/2. + center; + z1 = zC - period/2.; + dZ = z1 - z2; + z2 = zC + period/2.; + (*m_log) << MSG::VERBOSE << std::setw(4) + << i << " z1= " << z1 << " z2= " << z2 + << " dist from previous= " << dZ << endmsg; + } } + void TileGeoSectionBuilder::printdouble(const char * name, double val) { - (*m_log) << MSG::VERBOSE << std::setprecision (std::numeric_limits<double>::digits10 + 1) - << name << val << endmsg; + (*m_log) << MSG::VERBOSE << std::setprecision (std::numeric_limits<double>::digits10 + 1) + << name << val << endmsg; } + const GeoShape * TileGeoSectionBuilder::makeHolesScint(const GeoShape * mother, double R, double H2, double off, double off0) { - GeoShape *hole = new GeoTubs(0., R, H2, 0., 360.0 * Gaudi::Units::deg); - const GeoShapeUnion& scintUnion = hole->add( *hole << GeoTrf::Translate3D((off0-off*2.0),0.,0.)); - GeoTrf::Transform3D tfHole = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(90*Gaudi::Units::deg); - const GeoShape & motherWithHoles = (mother->subtract(scintUnion<<tfHole)); - return &motherWithHoles; + GeoShape *hole = new GeoTubs(0., R, H2, 0., 360.0 * Gaudi::Units::deg); + const GeoShapeUnion& scintUnion = hole->add( *hole << GeoTrf::Translate3D((off0-off*2.0),0.,0.)); + GeoTrf::Transform3D tfHole = GeoTrf::Translate3D(0.,0.,(off0-off)) * GeoTrf::RotateY3D(90*Gaudi::Units::deg); + const GeoShape & motherWithHoles = (mother->subtract(scintUnion<<tfHole)); + return &motherWithHoles; } + const GeoShape * TileGeoSectionBuilder::makeHoles(const GeoShape * mother, double R, double H2, double off, double off0) { GeoShape *hole1 = new GeoTubs(0., R, H2, 0., 360.0 * Gaudi::Units::deg); GeoShape *hole2 = new GeoTubs(0., R, H2, 0., 360.0 * Gaudi::Units::deg); diff --git a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.h b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.h index 44446a6d4eb4062e5b9d7bdeb0a7643cd2acae8b..4a9a3d7560a1ed8d11432d01861e2720f2a698ca 100755 --- a/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.h +++ b/TileCalorimeter/TileGeoModel/src/TileGeoSectionBuilder.h @@ -32,9 +32,11 @@ class GeoMaterial; class GeoTrd; class GeoShape; -class TileGeoSectionBuilder + +class TileGeoSectionBuilder { public: + /** Constructor */ TileGeoSectionBuilder(StoredMaterialManager* matManager, TileDddbManager* pDbManager, @@ -46,7 +48,7 @@ class TileGeoSectionBuilder /** Section parameters are the following: @param sec_number Number of sector - @param tile_rmax Maximal radius + @param tile_rmax Maximal radius @param rminb Minimal radius @param dzglue Glue gap along dZ @param delta_phi Delta Phi @@ -67,9 +69,9 @@ class TileGeoSectionBuilder /** Girder parameters are the following: @param mother Pointer to mother volume @param tile_rmax Radius from TILE - @param tilb_rmax Radius from TILB - @param delta_ph Delta phi - @param thickness Thickness of Girder + @param tilb_rmax Radius from TILB + @param delta_ph Delta phi + @param thickness Thickness of Girder */ void fillGirder(GeoPhysVol*& mother, double tile_rmax, @@ -80,8 +82,8 @@ class TileGeoSectionBuilder /** Finger parameters are the following: @param mother Pointer to mother volume @param tile_rmax Radius from TILE - @param tilb_rmax Radius from TILB - @param delta_ph Delta phi + @param tilb_rmax Radius from TILB + @param delta_ph Delta phi @param ModuleNcp Module index @param corrected_dz dZ correction */ @@ -91,14 +93,14 @@ class TileGeoSectionBuilder double tilb_rmax, double delta_phi_not_used, bool testbeam, - int ModuleNcp = 0, + int ModuleNcp = 0, double corrected_dz = 0.); /** Period parameters are the following: @param mother Pointer to mother volume @param thickness Thickness of period @param dzglue Glue thickness in z direction - @param delta_ph Delta phi + @param delta_ph Delta phi @param period_type Type of period */ @@ -130,7 +132,7 @@ class TileGeoSectionBuilder @param manager Pointer to TileDetDescrManager @param detector Detector index @param addPlates 1 for adding plate - @param zShiftPos Positiv shift in Z direction [mm] + @param zShiftPos Positiv shift in Z direction [mm] @param zShiftNeg Negative shift in Z direction [mm] */ void computeCellDim(TileDetDescrManager*& manager, @@ -177,7 +179,7 @@ class TileGeoSectionBuilder float& etamax, float& deta, unsigned int& neta); - + /** Function for checking empty volumes: @param VolumeName The volume name @param print printig ON/OFF @@ -185,7 +187,7 @@ class TileGeoSectionBuilder @param XYZ checking variables */ void checking(const std::string& VolumeName, bool print, int level, - double X1, double X2, double Y1, double Y2, double Z); + double X1, double X2, double Y1, double Y2, double Z); // These methods should be used when section contents are not built // They initialize private data members used for computing cell dimensions diff --git a/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx b/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx index 15e1e8bbbd959a54e42260dd8d3d929d881d0865..e447b5218a02ddf35a4eb520a75eba083560263d 100755 --- a/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx +++ b/TileCalorimeter/TileGeoModel/src/TileTBFactory.cxx @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "TileTBFactory.h" @@ -34,44 +34,43 @@ #include "GaudiKernel/MsgStream.h" #include "GaudiKernel/SystemOfUnits.h" -#include <stdexcept> -#include <iostream> #include <algorithm> using namespace GeoGenfun; using namespace GeoXF; - + // Constructor: TileTBFactory::TileTBFactory(StoreGateSvc *pDetStore, TileDetDescrManager *manager, const TileSwitches & switches, MsgStream *log) - : m_detectorStore(pDetStore) - , m_detectorManager(manager) - , m_log(log) - , m_switches(switches) - , m_verbose(log->level()<=MSG::VERBOSE) + : m_detectorStore(pDetStore) + , m_detectorManager(manager) + , m_log(log) + , m_switches(switches) + , m_verbose(log->level()<=MSG::VERBOSE) { m_switches.testBeam = true; } - + + // Destructor: TileTBFactory::~TileTBFactory() { } - + + // Creation of geometry: -void TileTBFactory::create(GeoPhysVol *world) +void TileTBFactory::create(GeoPhysVol *world) { (*m_log) << MSG::INFO <<" Entering TileTBFactory::create()" << endmsg; // -------- -------- MATERIAL MANAGER -------- ---------- StoredMaterialManager* theMaterialManager = nullptr; - if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) - { - (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; - return; + if (StatusCode::SUCCESS != m_detectorStore->retrieve(theMaterialManager, "MATERIALS")) { + (*m_log) << MSG::ERROR << "Could not find Material Manager MATERIALS" << endmsg; + return; } const GeoMaterial* matAir = theMaterialManager->getMaterial("std::Air"); @@ -116,19 +115,18 @@ void TileTBFactory::create(GeoPhysVol *world) double FingerRmin = dbManager->TILBrmax(); int n_env = dbManager->GetNumberOfEnv(); - for(int i = 0; i < n_env ; ++i) - { + for (int i = 0; i < n_env ; ++i) { dbManager->SetCurrentEnvByIndex(i); tileTBEnvThickness += dbManager->GetEnvZLength(); - if(dbManager->GetEnvType() == 1){ + if (dbManager->GetEnvType() == 1) { IfB = true; //ZLengthBarrel = dbManager->GetEnvZLength(); } - if(dbManager->GetEnvType() == 2){ + if (dbManager->GetEnvType() == 2) { IfEBNeg = true; ZLengthEBarrelNeg = dbManager->GetEnvZLength(); } - if(dbManager->GetEnvType() == 3){ + if (dbManager->GetEnvType() == 3) { IfEBPos = true; ZLengthEBarrelPos = dbManager->GetEnvZLength(); } @@ -138,10 +136,10 @@ void TileTBFactory::create(GeoPhysVol *world) ROutMax= std::max(ROutMax, dbManager->GetEnvRout()); } - (*m_log) << MSG::DEBUG << "tileTBEnvThickness 1 " << tileTBEnvThickness << endmsg; + (*m_log) << MSG::DEBUG << "tileTBEnvThickness 1 " << tileTBEnvThickness << endmsg; - // enlarge mother volume by extra distance between barrel and positive ext.barrel - if(IfEBPos){ + // enlarge mother volume by extra distance between barrel and positive ext.barrel + if (IfEBPos) { dbManager->SetCurrentEnvByType(3); tileTBEnvThickness += dbManager->GetEnvDZ()*dbManager->GetEnvSide(); } @@ -149,16 +147,16 @@ void TileTBFactory::create(GeoPhysVol *world) (*m_log) << MSG::DEBUG << "tileTBEnvThickness 2 " << tileTBEnvThickness << endmsg; // enlarge mother volume by extra distance between barrel and negative ext.barrel - if(IfEBNeg){ + if (IfEBNeg) { dbManager->SetCurrentEnvByType(2); tileTBEnvThickness += dbManager->GetEnvDZ()*dbManager->GetEnvSide(); } - (*m_log) << MSG::DEBUG << "tileTBEnvThickness 3 " << tileTBEnvThickness << endmsg; + (*m_log) << MSG::DEBUG << "tileTBEnvThickness 3 " << tileTBEnvThickness << endmsg; // take into account extra DZ for barrel only if there are no Ext.Barrel modules // but keep the mother volume symmetric (i.e. add DZ on both sides) - if((!IfEBNeg)&&(!IfEBPos)){ + if ((!IfEBNeg)&&(!IfEBPos)) { dbManager->SetCurrentEnvByType(1); tileTBEnvThickness += 2 * fabs(dbManager->GetEnvDZ()); } @@ -176,22 +174,22 @@ void TileTBFactory::create(GeoPhysVol *world) //dbManager->SetCurrentSection(TileDddbManager::TILE_BARREL); //double deltaPhi = 360./dbManager->TILEnmodul(); GeoTubs* tileTBEnv = new GeoTubs(RInMin * Gaudi::Units::cm, - ROutMax * Gaudi::Units::cm, - tileTBEnvThickness/2.0 * Gaudi::Units::cm, - PhiMin*Gaudi::Units::deg, - (PhiMax - PhiMin)*Gaudi::Units::deg); - - (*m_log) << MSG::DEBUG << "TileTB envelope parameters: " - << " length=" << tileTBEnvThickness << " cm" - << " Rmin=" << RInMin << " cm" - << " Rmax=" << ROutMax << " cm" - << " PhiMin=" << PhiMin << " deg" - << " PhiMax=" << PhiMax << " deg" - << endmsg; + ROutMax * Gaudi::Units::cm, + tileTBEnvThickness/2.0 * Gaudi::Units::cm, + PhiMin*Gaudi::Units::deg, + (PhiMax - PhiMin)*Gaudi::Units::deg); + + (*m_log) << MSG::DEBUG << "TileTB envelope parameters: " + << " length=" << tileTBEnvThickness << " cm" + << " Rmin=" << RInMin << " cm" + << " Rmax=" << ROutMax << " cm" + << " PhiMin=" << PhiMin << " deg" + << " PhiMax=" << PhiMax << " deg" + << endmsg; GeoLogVol* lvTileTBEnv = new GeoLogVol("TileTBEnv",tileTBEnv,matAir); GeoFullPhysVol* pvTileTBEnv = new GeoFullPhysVol(lvTileTBEnv); - + GeoFullPhysVol *pvBarrelMother =0; GeoFullPhysVol *pvEBarrelMotherNeg =0, *pvEBarrelMotherPos =0; GeoFullPhysVol *pvFingerMotherNeg =0, *pvFingerMotherPos =0; @@ -199,218 +197,218 @@ void TileTBFactory::create(GeoPhysVol *world) GeoFullPhysVol *pvITCMotherPos =0, *pvITCMotherNeg =0; int NumberOfEnv = dbManager->GetNumberOfEnv(); - for(int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter){ //Loop over Envelopes + for (int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter) { //Loop over Envelopes dbManager->SetCurrentEnvByIndex(EnvCounter); int EnvType = dbManager->GetEnvType(); int NumberOfMod = dbManager->GetEnvNModules(); //----------------------- BUILDING ENVELOPES------------------------ - + // It may be usful on the way of universalization // GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - // (dbManager->GetEnvRout()) * Gaudi::Units::cm, - // (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, - // 0.0 * deltaPhi * Gaudi::Units::deg, - // (NumberOfMod)*deltaPhi*Gaudi::Units::deg); - - if(EnvType == 1) { + // (dbManager->GetEnvRout()) * Gaudi::Units::cm, + // (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, + // 0.0 * deltaPhi * Gaudi::Units::deg, + // (NumberOfMod)*deltaPhi*Gaudi::Units::deg); + + if (EnvType == 1) { GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - (dbManager->GetEnvRout()) * Gaudi::Units::cm, - (dbManager->GetEnvZLength() - 2 * BFingerLength)/2.0 * Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + (dbManager->GetEnvRout()) * Gaudi::Units::cm, + (dbManager->GetEnvZLength() - 2 * BFingerLength)/2.0 * Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); - GeoTubs* barrelMother = GeneralMother; + GeoTubs* barrelMother = GeneralMother; GeoLogVol* lvBarrelMother = new GeoLogVol("Barrel",barrelMother,matAir); pvBarrelMother = new GeoFullPhysVol(lvBarrelMother); - (*m_log) << MSG::DEBUG << "Barrel envelope parameters: " - << " length=" << (dbManager->GetEnvZLength() - 2 * BFingerLength) << " cm" - << " Rmin=" << (dbManager->GetEnvRin()) << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; - + (*m_log) << MSG::DEBUG << "Barrel envelope parameters: " + << " length=" << (dbManager->GetEnvZLength() - 2 * BFingerLength) << " cm" + << " Rmin=" << (dbManager->GetEnvRin()) << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; + //Envelopes for two barrel fingers dbManager->SetCurrentTifg(2); //use small size for barrel finger ! GeoTubs* fingerMother = new GeoTubs(FingerRmin*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - BFingerLength/2.*Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + dbManager->GetEnvRout()*Gaudi::Units::cm, + BFingerLength/2.*Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); GeoLogVol* lvFingerMother = new GeoLogVol("Finger",fingerMother,matAir); pvFingerMotherPos = new GeoFullPhysVol(lvFingerMother); pvFingerMotherNeg = new GeoFullPhysVol(lvFingerMother); - (*m_log) << MSG::DEBUG << "Barrel finger envelope parameters: " - << " length=" << BFingerLength << " cm" - << " Rmin=" << FingerRmin << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + (*m_log) << MSG::DEBUG << "Barrel finger envelope parameters: " + << " length=" << BFingerLength << " cm" + << " Rmin=" << FingerRmin << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; } - - if(EnvType == 3) { + + if (EnvType == 3) { GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - (dbManager->GetEnvRout()) * Gaudi::Units::cm, - (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + (dbManager->GetEnvRout()) * Gaudi::Units::cm, + (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); GeoTubs* ebarrelMotherPos = GeneralMother; GeoLogVol* lvEBarrelMotherPos = new GeoLogVol("EBarrel",ebarrelMotherPos,matAir); pvEBarrelMotherPos = new GeoFullPhysVol(lvEBarrelMotherPos); - (*m_log) << MSG::DEBUG << "Positive ext.barrel envelope parameters: " - << " length=" << (dbManager->GetEnvZLength() - EBFingerLength) << " cm" - << " Rmin=" << (dbManager->GetEnvRin()) << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + (*m_log) << MSG::DEBUG << "Positive ext.barrel envelope parameters: " + << " length=" << (dbManager->GetEnvZLength() - EBFingerLength) << " cm" + << " Rmin=" << (dbManager->GetEnvRin()) << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; //Envelope for finger separately GeoTubs* fingerMother = new GeoTubs(FingerRmin*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - EBFingerLength/2.*Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + dbManager->GetEnvRout()*Gaudi::Units::cm, + EBFingerLength/2.*Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir); pvEFingerMotherPos = new GeoFullPhysVol(lvEFingerMother); - - (*m_log) << MSG::DEBUG << "Positive ext.barrel finger envelope parameters: " - << " length=" << EBFingerLength << " cm" - << " Rmin=" << FingerRmin << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + + (*m_log) << MSG::DEBUG << "Positive ext.barrel finger envelope parameters: " + << " length=" << EBFingerLength << " cm" + << " Rmin=" << FingerRmin << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; } - - if(EnvType == 2) { + + if (EnvType == 2) { GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - (dbManager->GetEnvRout()) * Gaudi::Units::cm, - (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + (dbManager->GetEnvRout()) * Gaudi::Units::cm, + (dbManager->GetEnvZLength() - EBFingerLength)/2.0 * Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); GeoTubs* ebarrelMotherNeg = GeneralMother; - GeoLogVol* lvEBarrelMotherNeg = new GeoLogVol("EBarrel",ebarrelMotherNeg,matAir); + GeoLogVol* lvEBarrelMotherNeg = new GeoLogVol("EBarrel",ebarrelMotherNeg,matAir); pvEBarrelMotherNeg = new GeoFullPhysVol(lvEBarrelMotherNeg); - - (*m_log) << MSG::DEBUG << "Negative ext.barrel envelope parameters: " - << " length=" << (dbManager->GetEnvZLength() - EBFingerLength) << " cm" - << " Rmin=" << (dbManager->GetEnvRin()) << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + + (*m_log) << MSG::DEBUG << "Negative ext.barrel envelope parameters: " + << " length=" << (dbManager->GetEnvZLength() - EBFingerLength) << " cm" + << " Rmin=" << (dbManager->GetEnvRin()) << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; //Envelope for finger separately GeoTubs* fingerMother = new GeoTubs(FingerRmin*Gaudi::Units::cm, - dbManager->GetEnvRout()*Gaudi::Units::cm, - EBFingerLength/2.*Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); - + dbManager->GetEnvRout()*Gaudi::Units::cm, + EBFingerLength/2.*Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); + GeoLogVol* lvEFingerMother = new GeoLogVol("EFinger",fingerMother,matAir); pvEFingerMotherNeg = new GeoFullPhysVol(lvEFingerMother); - (*m_log) << MSG::DEBUG << "Negative ext.barrel finger envelope parameters: " - << " length=" << EBFingerLength << " cm" - << " Rmin=" << FingerRmin << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + (*m_log) << MSG::DEBUG << "Negative ext.barrel finger envelope parameters: " + << " length=" << EBFingerLength << " cm" + << " Rmin=" << FingerRmin << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; } - - if(EnvType == 5) { + + if (EnvType == 5) { GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - (dbManager->GetEnvRout()) * Gaudi::Units::cm, - (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); - + (dbManager->GetEnvRout()) * Gaudi::Units::cm, + (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); + GeoTubs* itcMother = GeneralMother; GeoLogVol* lvITCMother = new GeoLogVol("ITC",itcMother,matAir); pvITCMotherPos = new GeoFullPhysVol(lvITCMother); - (*m_log) << MSG::DEBUG << "Positive ITC envelope parameters: " - << " length=" << (dbManager->GetEnvZLength()) << " cm" - << " Rmin=" << (dbManager->GetEnvRin()) << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + (*m_log) << MSG::DEBUG << "Positive ITC envelope parameters: " + << " length=" << (dbManager->GetEnvZLength()) << " cm" + << " Rmin=" << (dbManager->GetEnvRin()) << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; } - - if(EnvType == 4) { + + if (EnvType == 4) { GeoTubs* GeneralMother = new GeoTubs((dbManager->GetEnvRin()) * Gaudi::Units::cm, - (dbManager->GetEnvRout()) * Gaudi::Units::cm, - (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, - 0.0 * Gaudi::Units::deg, - NumberOfMod*deltaPhi*Gaudi::Units::deg); + (dbManager->GetEnvRout()) * Gaudi::Units::cm, + (dbManager->GetEnvZLength())/2.0 * Gaudi::Units::cm, + 0.0 * Gaudi::Units::deg, + NumberOfMod*deltaPhi*Gaudi::Units::deg); GeoTubs* itcMotherNeg = GeneralMother; GeoLogVol* lvITCMotherNeg = new GeoLogVol("ITC",itcMotherNeg,matAir); pvITCMotherNeg = new GeoFullPhysVol(lvITCMotherNeg); - (*m_log) << MSG::DEBUG << "Negative ITC envelope parameters: " - << " length=" << (dbManager->GetEnvZLength()) << " cm" - << " Rmin=" << (dbManager->GetEnvRin()) << " cm" - << " Rmax=" << (dbManager->GetEnvRout()) << " cm" - << " nMod=" << NumberOfMod - << endmsg; + (*m_log) << MSG::DEBUG << "Negative ITC envelope parameters: " + << " length=" << (dbManager->GetEnvZLength()) << " cm" + << " Rmin=" << (dbManager->GetEnvRin()) << " cm" + << " Rmax=" << (dbManager->GetEnvRout()) << " cm" + << " nMod=" << NumberOfMod + << endmsg; } - - //Envelope 2-level has been made (it is tube); begin loop over modules - - // for(int ModCounter = 0; ModCounter < NumberOfMod; ModCounter++){ - // simple hack - we know that all modules are identical, - // let's put all of them with GeoSerialTransfomer, + + //Envelope 2-level has been made (it is tube); begin loop over modules + + // for (int ModCounter = 0; ModCounter < NumberOfMod; ModCounter++) { + // simple hack - we know that all modules are identical, + // let's put all of them with GeoSerialTransfomer, // i.e. execute this loop only once - for(int ModCounter = 0; ModCounter < NumberOfMod; ModCounter+=NumberOfMod){ + for (int ModCounter = 0; ModCounter < NumberOfMod; ModCounter+=NumberOfMod) { dbManager->SetCurrentModuleByIndex(ModCounter); int ModType = dbManager->GetModType(); int ModPositionNumber = dbManager->GetModNumber(); - (*m_log) << MSG::DEBUG - << "ModCounter is " << ModCounter - << " ModType is " << ModType - << " ModPositionNumber is " << ModPositionNumber - << endmsg; - + (*m_log) << MSG::DEBUG + << "ModCounter is " << ModCounter + << " ModType is " << ModType + << " ModPositionNumber is " << ModPositionNumber + << endmsg; + Variable varInd; - GENFUNCTION phiInd = deltaPhi*(varInd + ModCounter + 0.5) * Gaudi::Units::deg; + GENFUNCTION phiInd = deltaPhi*(varInd + ModCounter + 0.5) * Gaudi::Units::deg; //------------------- BARREL BLOCKS ------------------------------------- - - if( EnvType == 1 || EnvType == 0 ) { // normal barrel module or module zero - dbManager->SetCurrentSectionByNumber(ModType); + + if ( EnvType == 1 || EnvType == 0 ) { // normal barrel module or module zero + dbManager->SetCurrentSectionByNumber(ModType); thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - (dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) - dbManager->TILBdzmast()))/(2.*(2.*dbManager->TILBnperiod() - 1)); - + GeoTrd* barrelModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvBarrelModuleMother = new GeoLogVol("BarrelModule",barrelModuleMother,matAir); GeoPhysVol* pvBarrelModuleMother = new GeoPhysVol(lvBarrelModuleMother); - + //Fill the section sectionBuilder->fillSection(pvBarrelModuleMother, 1, dbManager->TILBrmaximal(), dbManager->TILBrminimal(), dzGlue, - deltaPhi); - + deltaPhi); + TRANSFUNCTION xfBarrelModuleMother = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stBarrelModuleMother = new GeoSerialTransformer(pvBarrelModuleMother, @@ -419,10 +417,10 @@ void TileTBFactory::create(GeoPhysVol *world) pvBarrelMother->add(new GeoSerialIdentifier(ModPositionNumber)); pvBarrelMother->add(stBarrelModuleMother); - + //--------------------------BARREL FINGERS MAKING------------------------------ - - dbManager->SetCurrentTifg(2); //at the testbeam put "small" barrel finger - the same as ext.barrel one + + dbManager->SetCurrentTifg(2); //at the testbeam put "small" barrel finger - the same as ext.barrel one //zEndSection = dbManager->TILBzoffset() + dbManager->TILBdzmodul()/2.; // Trd - one finger mother @@ -431,16 +429,16 @@ void TileTBFactory::create(GeoPhysVol *world) heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* fingerModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvFingerModuleMother = new GeoLogVol("FingerModule",fingerModuleMother,matAir); GeoPhysVol* pvFingerModuleMother = new GeoPhysVol(lvFingerModuleMother); - + // Fill the section sectionBuilder->fillFinger(pvFingerModuleMother, 1, dbManager->TILErmax(), @@ -449,16 +447,16 @@ void TileTBFactory::create(GeoPhysVol *world) m_switches.testBeam, ModuleNcp, thicknessWedgeMother*(1./Gaudi::Units::cm)); - + // --- Position N modules inside mother (positive/negative) ----- TRANSFUNCTION xfFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stFingerModuleMotherPos = new GeoSerialTransformer(pvFingerModuleMother, &xfFingerModuleMotherPos, NumberOfMod); // all modules at once pvFingerMotherPos->add(new GeoSerialIdentifier(ModPositionNumber)); pvFingerMotherPos->add(stFingerModuleMotherPos); - + TRANSFUNCTION xfFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stFingerModuleMotherNeg = new GeoSerialTransformer(pvFingerModuleMother, @@ -468,28 +466,28 @@ void TileTBFactory::create(GeoPhysVol *world) pvFingerMotherNeg->add(stFingerModuleMotherNeg); } - + //------------------- EBARREL BLOCKS POS -------------------------------- - if((ModType == 2)&&(EnvType == 3)){ + if ((ModType == 2)&&(EnvType == 3)) { dbManager->SetCurrentSectionByNumber(ModType); - // Trd - module mother + // Trd - module mother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* ebarrelModuleMotherPos = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvEBarrelModuleMotherPos = new GeoLogVol("EBarrelModule",ebarrelModuleMotherPos,matAir); GeoPhysVol* pvEBarrelModuleMotherPos = new GeoPhysVol(lvEBarrelModuleMotherPos); - + // Fill the section sectionBuilder->fillSection(pvEBarrelModuleMotherPos, 2, @@ -497,35 +495,35 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrminimal(), dzGlue, deltaPhi); - + TRANSFUNCTION xfEBarrelModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stEBarrelModuleMotherPos = new GeoSerialTransformer(pvEBarrelModuleMotherPos, &xfEBarrelModuleMotherPos, NumberOfMod); // all modules at once pvEBarrelMotherPos->add(new GeoSerialIdentifier(ModPositionNumber)); pvEBarrelMotherPos->add(stEBarrelModuleMotherPos); - - + + //--------------------------EBARREL FINGERS MAKING------------------------------ - + dbManager->SetCurrentTifg(2); //barrel efinger (small) - + // Trd - one finger mother thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); - + // Fill the section sectionBuilder->fillFinger(pvEFingerModuleMother, 2, @@ -533,40 +531,40 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrmax(), deltaPhi, m_switches.testBeam); - + // --- Position N modules inside mother (positive/negative) ----- - + TRANSFUNCTION xfEFingerModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stEFingerModuleMotherPos = new GeoSerialTransformer(pvEFingerModuleMother, &xfEFingerModuleMotherPos, NumberOfMod); // all modules at once pvEFingerMotherPos->add(new GeoSerialIdentifier(ModPositionNumber)); pvEFingerMotherPos->add(stEFingerModuleMotherPos); } - - + + //------------------- EBARREL BLOCKS NEG -------------------------------- - - if((ModType == 2)&&(EnvType == 2)){ + + if ((ModType == 2)&&(EnvType == 2)) { dbManager->SetCurrentSectionByNumber(ModType); - // Trd - module mother + // Trd - module mother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrminimal()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* ebarrelModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvEBarrelModuleMotherNeg = new GeoLogVol("EBarrelModule",ebarrelModuleMotherNeg,matAir); GeoPhysVol* pvEBarrelModuleMotherNeg = new GeoPhysVol(lvEBarrelModuleMotherNeg); - + // Fill the section sectionBuilder->fillSection(pvEBarrelModuleMotherNeg, 2, @@ -574,7 +572,7 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrminimal(), dzGlue, deltaPhi); - + TRANSFUNCTION xfEBarrelModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+dbManager->TILBrminimal())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stEBarrelModuleMotherNeg = new GeoSerialTransformer(pvEBarrelModuleMotherNeg, @@ -582,28 +580,28 @@ void TileTBFactory::create(GeoPhysVol *world) NumberOfMod); // all modules at once pvEBarrelMotherNeg->add(new GeoSerialIdentifier(ModPositionNumber)); pvEBarrelMotherNeg->add(stEBarrelModuleMotherNeg); - - + + //--------------------------EBARREL FINGERS MAKING------------------------------ - + dbManager->SetCurrentTifg(2); //barrel efinger (small) - + //zEndSection = extOffset + dbManager->TILBdzmodul()/2. + dbManager->TILEzshift(); // Trd - one finger mother thicknessWedgeMother = dbManager->TIFGdz() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILErmax() - dbManager->TILBrmax()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILErmax() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* efingerModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvEFingerModuleMother = new GeoLogVol("EFingerModule",efingerModuleMother,matAir); GeoPhysVol* pvEFingerModuleMother = new GeoPhysVol(lvEFingerModuleMother); - + // Fill the section sectionBuilder->fillFinger(pvEFingerModuleMother, 2, @@ -611,7 +609,7 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrmax(), deltaPhi, m_switches.testBeam); - + TRANSFUNCTION xfEFingerModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILErmax()+dbManager->TILBrmax())/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); GeoSerialTransformer* stEFingerModuleMotherNeg = new GeoSerialTransformer(pvEFingerModuleMother, @@ -620,51 +618,51 @@ void TileTBFactory::create(GeoPhysVol *world) pvEFingerMotherNeg->add(new GeoSerialIdentifier(ModPositionNumber)); pvEFingerMotherNeg->add(stEFingerModuleMotherNeg); } - - + + //------------------- ITC BLOCKS POS -------------------------------- - - if(((ModType == 6050403)||(ModType == 403))&&(EnvType == 5)){ - + + if (((ModType == 6050403)||(ModType == 403))&&(EnvType == 5)) { + dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); rMinITC = dbManager->TILBrminimal(); dzITC2 = dbManager->TILBdzmodul(); dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); - + // Common mother for ITC1/2 modules thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * Gaudi::Units::cm; dy1WedgeMother = rMinITC * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* itcModuleMotherPos = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, - heightWedgeMother/2.); - + heightWedgeMother/2.); + GeoLogVol* lvITCModuleMotherPos = new GeoLogVol("ITCModule",itcModuleMotherPos,matAir); GeoPhysVol* pvITCModuleMotherPos = new GeoPhysVol(lvITCModuleMotherPos); - + //Mother volume for ITC1 //In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: // 1. Mother for absorber and girder // 2. Mother for frontplate (since it's short) - + //First submother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* plug1SubMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + //Second submother thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; @@ -675,15 +673,15 @@ void TileTBFactory::create(GeoPhysVol *world) dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoTrf::Translate3D plug1SubOffset(-dzITC2*Gaudi::Units::cm/2., - 0., - (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); - + 0., + (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); + const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset); GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir); GeoPhysVol* pvPlug1ModuleMother = new GeoPhysVol(lvPlug1ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug1ModuleMother, 3, dbManager->TILBrmaximal(), @@ -692,15 +690,15 @@ void TileTBFactory::create(GeoPhysVol *world) deltaPhi, ModuleNcp, dzITC2); - + GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0., - 0., - (dbManager->TILBrmin()-rMinITC)*Gaudi::Units::cm/2.)); - - + 0., + (dbManager->TILBrmin()-rMinITC)*Gaudi::Units::cm/2.)); + + pvITCModuleMotherPos->add(tfPlug1ModuleMother); pvITCModuleMotherPos->add(pvPlug1ModuleMother); - + //Mother volume for ITC2 dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; @@ -708,16 +706,16 @@ void TileTBFactory::create(GeoPhysVol *world) dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1)); - + GeoTrd* plug2ModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvPlug2ModuleMother = new GeoLogVol("Plug2Module",plug2ModuleMother,matAir); GeoPhysVol* pvPlug2ModuleMother = new GeoPhysVol(lvPlug2ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug2ModuleMother, 4, @@ -725,17 +723,17 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrminimal(), dzGlue, deltaPhi); - - + + dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); GeoTransform* tfPlug2ModuleMother = new GeoTransform(GeoTrf::Translate3D((dbManager->TILBdzmodul() - dzITC2)*Gaudi::Units::cm/2., - 0., - (dbManager->TILBrmin() - dbManager->TILBrmaximal())*Gaudi::Units::cm/2.)); + 0., + (dbManager->TILBrmin() - dbManager->TILBrmaximal())*Gaudi::Units::cm/2.)); pvITCModuleMotherPos->add(tfPlug2ModuleMother); pvITCModuleMotherPos->add(pvPlug2ModuleMother); - + TRANSFUNCTION xfITCModuleMotherPos = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*Gaudi::Units::cm)*GeoTrf::RotateX3D(180*Gaudi::Units::deg)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stITCModuleMotherPos = new GeoSerialTransformer(pvITCModuleMotherPos, &xfITCModuleMotherPos, NumberOfMod); // all modules at once @@ -745,48 +743,48 @@ void TileTBFactory::create(GeoPhysVol *world) //------------------- ITC BLOCKS NEG -------------------------------- - - if(((ModType == 6050403)||(ModType == 403))&&(EnvType == 4)){ - + + if (((ModType == 6050403)||(ModType == 403))&&(EnvType == 4)) { + dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); rMinITC = dbManager->TILBrminimal(); dzITC2 = dbManager->TILBdzmodul(); dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); - + // Common mother for ITC1/2 modules thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - rMinITC) * Gaudi::Units::cm; dy1WedgeMother = rMinITC * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + GeoTrd* itcModuleMotherNeg = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, - heightWedgeMother/2.); - + heightWedgeMother/2.); + GeoLogVol* lvITCModuleMotherNeg = new GeoLogVol("ITCModule",itcModuleMotherNeg,matAir); GeoPhysVol* pvITCModuleMotherNeg = new GeoPhysVol(lvITCModuleMotherNeg); - + //Mother volume for ITC1 //In plug1 it's necessary to produce GeoShapeUnion for mother volume that is composed by two parts: // 1. Mother for absorber and girder // 2. Mother for frontplate (since it's short) - + //First submother thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmaximal() - dbManager->TILBrmin()) * Gaudi::Units::cm; dy1WedgeMother = dbManager->TILBrmin() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; - + dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - dbManager->TILBnperiod()*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()))/(4.*dbManager->TILBnperiod()); - + GeoTrd* plug1SubMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + //Second submother thicknessWedgeMother = (dbManager->TILBdzmodul() - dzITC2) * Gaudi::Units::cm; heightWedgeMother = (dbManager->TILBrmin() - dbManager->TILBrminimal()) * Gaudi::Units::cm; @@ -797,15 +795,15 @@ void TileTBFactory::create(GeoPhysVol *world) dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoTrf::Translate3D plug1SubOffset(-dzITC2*Gaudi::Units::cm/2., - 0., - (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); - + 0., + (dbManager->TILBrminimal()-dbManager->TILBrmaximal())*Gaudi::Units::cm/2.); + const GeoShapeUnion& plug1ModuleMother = plug1SubMother->add(*plug2SubMother<<plug1SubOffset); GeoLogVol* lvPlug1ModuleMother = new GeoLogVol("Plug1Module",&plug1ModuleMother,matAir); GeoPhysVol* pvPlug1ModuleMother = new GeoPhysVol(lvPlug1ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug1ModuleMother, 3, @@ -815,15 +813,15 @@ void TileTBFactory::create(GeoPhysVol *world) deltaPhi, ModuleNcp, dzITC2); - + GeoTransform* tfPlug1ModuleMother = new GeoTransform(GeoTrf::Translate3D(0., - 0., - (dbManager->TILBrmin()-rMinITC)*Gaudi::Units::cm/2.)); - - + 0., + (dbManager->TILBrmin()-rMinITC)*Gaudi::Units::cm/2.)); + + pvITCModuleMotherNeg->add(tfPlug1ModuleMother); pvITCModuleMotherNeg->add(pvPlug1ModuleMother); - + //Mother volume for ITC2 dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG2); thicknessWedgeMother = dbManager->TILBdzmodul() * Gaudi::Units::cm; @@ -831,16 +829,16 @@ void TileTBFactory::create(GeoPhysVol *world) dy1WedgeMother = dbManager->TILBrminimal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dy2WedgeMother = dbManager->TILBrmaximal() * tan(deltaPhi/2.*Gaudi::Units::deg) * Gaudi::Units::cm; dzGlue = (dbManager->TILBdzmodul() - dbManager->TILBdzend1() - dbManager->TILBdzend2() - ((dbManager->TILBnperiod()-1)*2.*(dbManager->TILBdzmast() + dbManager->TILBdzspac()) + dbManager->TILBdzspac()))/(4.*(dbManager->TILBnperiod() - 1)); - + GeoTrd* plug2ModuleMother = new GeoTrd(thicknessWedgeMother/2., thicknessWedgeMother/2., dy1WedgeMother, dy2WedgeMother, heightWedgeMother/2.); - + GeoLogVol* lvPlug2ModuleMother = new GeoLogVol("Plug2Module",plug2ModuleMother,matAir); GeoPhysVol* pvPlug2ModuleMother = new GeoPhysVol(lvPlug2ModuleMother); - + // Fill the section sectionBuilder->fillSection(pvPlug2ModuleMother, 4, @@ -848,37 +846,37 @@ void TileTBFactory::create(GeoPhysVol *world) dbManager->TILBrminimal(), dzGlue, deltaPhi); - - + + dbManager->SetCurrentSection(TileDddbManager::TILE_PLUG1); GeoTransform* tfPlug2ModuleMother = new GeoTransform(GeoTrf::Translate3D((dbManager->TILBdzmodul() - dzITC2)*Gaudi::Units::cm/2., - 0., - (dbManager->TILBrmin() - dbManager->TILBrmaximal())*Gaudi::Units::cm/2.)); + 0., + (dbManager->TILBrmin() - dbManager->TILBrmaximal())*Gaudi::Units::cm/2.)); pvITCModuleMotherNeg->add(tfPlug2ModuleMother); pvITCModuleMotherNeg->add(pvPlug2ModuleMother); - + TRANSFUNCTION xfITCModuleMotherNeg = Pow(GeoTrf::RotateZ3D(1.0),phiInd)*GeoTrf::TranslateX3D((dbManager->TILBrmaximal()+rMinITC)/2.*Gaudi::Units::cm)*GeoTrf::RotateY3D(90*Gaudi::Units::deg); - + GeoSerialTransformer* stITCModuleMotherNeg = new GeoSerialTransformer(pvITCModuleMotherNeg, &xfITCModuleMotherNeg, NumberOfMod); // all modules at once pvITCMotherNeg->add(new GeoSerialIdentifier(ModPositionNumber)); pvITCMotherNeg->add(stITCModuleMotherNeg); - } + } } - + double ztrans=0.0; - if(EnvType == 1 || EnvType == 0) { + if (EnvType == 1 || EnvType == 0) { GeoTransform* tfBarrelMother; // consider 3 options - with/without ext.barrels and take into account DZ correction - if((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { + if ((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { ztrans = dbManager->GetEnvDZ(); - } - else if(IfEBPos&&(!IfEBNeg)) { + } + else if (IfEBPos&&(!IfEBNeg)) { ztrans = dbManager->GetEnvDZ() + (-tileTBEnvThickness/2. + (dbManager->GetEnvZLength())/2.); - } - else if((!IfEBPos)&&IfEBNeg) { + } + else if ((!IfEBPos)&&IfEBNeg) { ztrans = dbManager->GetEnvDZ() + ( tileTBEnvThickness/2. - (dbManager->GetEnvZLength())/2.); } else { @@ -886,21 +884,21 @@ void TileTBFactory::create(GeoPhysVol *world) } tfBarrelMother = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning barrel with translation " << ztrans << " cm" << endmsg; - GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); + GeoNameTag* ntBarrelModuleMother = new GeoNameTag("Barrel"); pvTileTBEnv->add(tfBarrelMother); pvTileTBEnv->add(ntBarrelModuleMother); pvTileTBEnv->add(pvBarrelMother); - + GeoTransform* tfFingerMotherPos; - if((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { + if ((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { ztrans = dbManager->GetEnvDZ() + (dbManager->GetEnvZLength()/2. - BFingerLength/2.); } - else if((!IfEBPos)&&IfEBNeg) { + else if ((!IfEBPos)&&IfEBNeg) { ztrans = dbManager->GetEnvDZ() + (tileTBEnvThickness/2. - BFingerLength/2.); } - else if(IfEBPos&&(!IfEBNeg)) { + else if (IfEBPos&&(!IfEBNeg)) { ztrans = dbManager->GetEnvDZ() + (-tileTBEnvThickness/2. + dbManager->GetEnvZLength() - BFingerLength/2.); } else { @@ -908,7 +906,7 @@ void TileTBFactory::create(GeoPhysVol *world) } tfFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning positive barrel finger with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntFingerMotherPos = new GeoNameTag("TileFingerPos"); pvTileTBEnv->add(tfFingerMotherPos); pvTileTBEnv->add(ntFingerMotherPos); @@ -916,21 +914,21 @@ void TileTBFactory::create(GeoPhysVol *world) GeoTransform* tfFingerMotherNeg; - if((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { + if ((IfEBPos&&IfEBNeg)||((!IfEBPos)&&(!IfEBNeg))) { ztrans = dbManager->GetEnvDZ() + (-dbManager->GetEnvZLength()/2. + BFingerLength/2.); } - else if(IfEBPos&&(!IfEBNeg)) { + else if (IfEBPos&&(!IfEBNeg)) { ztrans = dbManager->GetEnvDZ() + (-tileTBEnvThickness/2. + BFingerLength/2.); } - else if((!IfEBPos)&&IfEBNeg) { + else if ((!IfEBPos)&&IfEBNeg) { ztrans = dbManager->GetEnvDZ() + ( tileTBEnvThickness/2. - dbManager->GetEnvZLength() + BFingerLength/2.); } else { ztrans = 0; } tfFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D((dbManager->GetEnvDPhi())*Gaudi::Units::deg)); - (*m_log) << MSG::DEBUG << "Positioning negative barrel finger with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + (*m_log) << MSG::DEBUG << "Positioning negative barrel finger with translation " << ztrans + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntFingerMotherNeg = new GeoNameTag("TileFingerNeg"); pvTileTBEnv->add(tfFingerMotherNeg); pvTileTBEnv->add(ntFingerMotherNeg); @@ -939,21 +937,21 @@ void TileTBFactory::create(GeoPhysVol *world) } - if(EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger + if (EnvType == 3) { // positive ext.barrel is always at positive boundary, after finger ztrans = (tileTBEnvThickness/2. - dbManager->GetEnvZLength()/2. - EBFingerLength/2.); GeoTransform* tfEBarrelMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning positive ext.barrel with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; - + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + GeoNameTag* ntEBarrelMotherPos = new GeoNameTag("EBarrelPos"); pvTileTBEnv->add(tfEBarrelMotherPos); pvTileTBEnv->add(ntEBarrelMotherPos); pvTileTBEnv->add(pvEBarrelMotherPos); - + ztrans = (tileTBEnvThickness/2. - EBFingerLength/2.); GeoTransform* tfEFingerMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning positive ext.barrel finger with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntEFingerMotherPos = new GeoNameTag("TileEFingerPos"); pvTileTBEnv->add(tfEFingerMotherPos); @@ -961,22 +959,22 @@ void TileTBFactory::create(GeoPhysVol *world) pvTileTBEnv->add(pvEFingerMotherPos); } - - if(EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger + + if (EnvType == 2) { // negative ext.barrel is always at negative boundary, after finger ztrans = (-tileTBEnvThickness/2. + dbManager->GetEnvZLength()/2. + EBFingerLength/2.); GeoTransform* tfEBarrelMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning negative ext.barrel with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; - + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + GeoNameTag* ntEBarrelMotherNeg = new GeoNameTag("EBarrelNeg"); pvTileTBEnv->add(tfEBarrelMotherNeg); pvTileTBEnv->add(ntEBarrelMotherNeg); pvTileTBEnv->add(pvEBarrelMotherNeg); - + ztrans = (-tileTBEnvThickness/2. + EBFingerLength/2.); GeoTransform* tfEFingerMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning negative ext.barrel finger with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntEFingerMotherNeg = new GeoNameTag("TileEFingerNeg"); pvTileTBEnv->add(tfEFingerMotherNeg); @@ -985,11 +983,11 @@ void TileTBFactory::create(GeoPhysVol *world) } - if(EnvType == 5) { // positive ITC attached to positive ext.barrel + if (EnvType == 5) { // positive ITC attached to positive ext.barrel ztrans = (tileTBEnvThickness/2. - ZLengthEBarrelPos - dbManager->GetEnvZLength()/2.); GeoTransform* tfITCMotherPos = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning positive ITC with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntITCMotherPos = new GeoNameTag("ITCPos"); pvTileTBEnv->add(tfITCMotherPos); @@ -997,11 +995,11 @@ void TileTBFactory::create(GeoPhysVol *world) pvTileTBEnv->add(pvITCMotherPos); } - if(EnvType == 4) { // negative ITC attached to negative ext.barrel + if (EnvType == 4) { // negative ITC attached to negative ext.barrel ztrans = (-tileTBEnvThickness/2. + ZLengthEBarrelNeg + dbManager->GetEnvZLength()/2.); GeoTransform* tfITCMotherNeg = new GeoTransform(GeoTrf::TranslateZ3D(ztrans*Gaudi::Units::cm) * GeoTrf::RotateZ3D(dbManager->GetEnvDPhi() * Gaudi::Units::deg)); (*m_log) << MSG::DEBUG << "Positioning negative ITC with translation " << ztrans - << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; + << " cm and rotation " << dbManager->GetEnvDPhi() << " deg " << endmsg; GeoNameTag* ntITCMotherNeg = new GeoNameTag("ITCNeg"); pvTileTBEnv->add(tfITCMotherNeg); @@ -1010,34 +1008,34 @@ void TileTBFactory::create(GeoPhysVol *world) } } - // creating Descriptiors and CaloDetDescrElements + // creating Descriptiors and CaloDetDescrElements int nModulesInSection[6] = {0,0,0,0,0,0}; float zShiftInSection[6] = {0.0,0.0,0.0,0.0,0.0,0.0,}; - + NumberOfEnv = dbManager->GetNumberOfEnv(); - for(int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter){ //Loop over Envelopes + for (int EnvCounter = 0; EnvCounter < NumberOfEnv; ++EnvCounter) { //Loop over Envelopes dbManager->SetCurrentEnvByIndex(EnvCounter); int EnvType = dbManager->GetEnvType(); int NumberOfMod = dbManager->GetEnvNModules(); float Zshift = dbManager->GetEnvZShift() * Gaudi::Units::cm; - (*m_log) << MSG::DEBUG - << "EnvCounter is " << EnvCounter - << " EnvType is " << EnvType - << " Nmodules is " << NumberOfMod - << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" - << endmsg; - - if(EnvType == 1 || EnvType == 0) { // central barrel + (*m_log) << MSG::DEBUG + << "EnvCounter is " << EnvCounter + << " EnvType is " << EnvType + << " Nmodules is " << NumberOfMod + << " Zshift is " << Zshift*(1./Gaudi::Units::cm) << " cm" + << endmsg; + + if (EnvType == 1 || EnvType == 0) { // central barrel nModulesInSection[0] = nModulesInSection[1] = NumberOfMod; zShiftInSection[0] = zShiftInSection[1] = Zshift; - } else if(EnvType < 6) { + } else if (EnvType < 6) { nModulesInSection[EnvType] = NumberOfMod; zShiftInSection[EnvType] = Zshift; } } - - TileCablingService * cabling = TileCablingService::getInstance_nc(); + + TileCablingService * cabling = TileCablingService::getInstance_nc(); const TileID* tileID = m_detectorManager->get_id(); int dete[6] = {TILE_REGION_CENTRAL,TILE_REGION_CENTRAL, @@ -1054,7 +1052,7 @@ void TileTBFactory::create(GeoPhysVol *world) zShiftInSection[ii+1], // zShiftPos zShiftInSection[ii]); // zShiftNeg } - + TileDetDescriptor* descriptor = new TileDetDescriptor(); sectionBuilder->fillDescriptor(descriptor, dete[ii], @@ -1063,22 +1061,21 @@ void TileTBFactory::create(GeoPhysVol *world) m_switches.addPlatesToCell, // add front/end plates to cell volume nModulesInSection[ii], // 0-3 modules zShiftInSection[ii]); // Z-shift - + Identifier idRegion = tileID->region_id(ii); descriptor->set(idRegion); - m_detectorManager->add(descriptor); + m_detectorManager->add(descriptor); m_detectorManager->add(new TileDetDescrRegion(idRegion, descriptor)); cabling->setConnected(dete[ii],side[ii],0,nModulesInSection[ii]); } - + // Set TileTB as tree top ----------- - GeoNameTag* nTag = new GeoNameTag("Tile"); + GeoNameTag* nTag = new GeoNameTag("Tile"); world->add(nTag); world->add(pvTileTBEnv); m_detectorManager->addTreeTop(pvTileTBEnv); delete sectionBuilder; } - diff --git a/TileCalorimeter/TileGeoModel/src/TileTBFactory.h b/TileCalorimeter/TileGeoModel/src/TileTBFactory.h index 2776740df76243b341625253256ee1510b46d10a..146af78757c2271b519d6eba87d2f61dab92d11b 100755 --- a/TileCalorimeter/TileGeoModel/src/TileTBFactory.h +++ b/TileCalorimeter/TileGeoModel/src/TileTBFactory.h @@ -26,28 +26,28 @@ class StoreGateSvc; class ATLAS_NOT_THREAD_SAFE TileTBFactory : public GeoVDetectorFactory // ^ modifies cabling during create { -public: - + public: + /** Constructor */ TileTBFactory(StoreGateSvc *pDetStore, TileDetDescrManager *manager, const TileSwitches & switches, MsgStream *log); - + /** Destructor */ ~TileTBFactory(); - + /** Creation of Test Beam Tile geometry */ virtual void create(GeoPhysVol *world) override; - + /** Access function to TileDetDescr geometry data */ virtual const TileDetDescrManager * getDetectorManager() const override { return m_detectorManager; } -private: - + private: + /** Detector pointer to Store Gate service */ StoreGateSvc *m_detectorStore; - /** Detector pointer to TileDetDescrManager */ - TileDetDescrManager *m_detectorManager; + /** Detector pointer to TileDetDescrManager */ + TileDetDescrManager *m_detectorManager; /** Get message SVC */ MsgStream *m_log; @@ -60,4 +60,3 @@ private: }; #endif - diff --git a/Tools/PyUtils/python/MetaReader.py b/Tools/PyUtils/python/MetaReader.py index 21034f5b985c697e967c2ac44efc7a48828791d8..68a4644525f93453b89dfd639feb96f4de3d742d 100644 --- a/Tools/PyUtils/python/MetaReader.py +++ b/Tools/PyUtils/python/MetaReader.py @@ -512,6 +512,12 @@ def read_metadata(filenames, file_type = None, mode = 'lite', promote = None, me msg.debug('Taking the luminosity block info from the first event (%i)', evt.lumi_block()) meta_dict[filename]['lumiBlockNumbers'] = [evt.lumi_block()] pass + # ATLASRECTS-7126: If there is no valid run number information + # in the ByteStream header, get the info from the first event. + if meta_dict[filename]['runNumbers'] == [0]: + msg.debug('Taking the run number info from the first event (%i)', evt.run_no()) + meta_dict[filename]['runNumbers'] = [evt.run_no()] + pass # fix for ATEAM-122 if len(bs_metadata.get('eventTypes', '')) == 0: # see: ATMETADATA-6 diff --git a/Tools/WorkflowTestRunner/python/References.py b/Tools/WorkflowTestRunner/python/References.py index 600deb27be566a1fef63369f7aee5e4e357c9bb9..5dc049631f53285c73377465196970410a919901 100644 --- a/Tools/WorkflowTestRunner/python/References.py +++ b/Tools/WorkflowTestRunner/python/References.py @@ -19,7 +19,7 @@ references_map = { "d1726": "v7", "d1759": "v5", # Reco - "q442": "v7", - "q445": "v17", - "q449": "v15", + "q442": "v9", + "q445": "v18", + "q449": "v16", } diff --git a/Tracking/TrkEventCnv/TrkJiveXML/TrkJiveXML/ATLAS_CHECK_THREAD_SAFETY b/Tracking/TrkEventCnv/TrkJiveXML/TrkJiveXML/ATLAS_CHECK_THREAD_SAFETY new file mode 100644 index 0000000000000000000000000000000000000000..552b64f2906602194ebe1f23c4e6030750c70e40 --- /dev/null +++ b/Tracking/TrkEventCnv/TrkJiveXML/TrkJiveXML/ATLAS_CHECK_THREAD_SAFETY @@ -0,0 +1 @@ +Tracking/TrkEventCnv/TrkJiveXML diff --git a/Tracking/TrkEventCnv/TrkJiveXML/src/SegmentRetriever.cxx b/Tracking/TrkEventCnv/TrkJiveXML/src/SegmentRetriever.cxx index 73cd7385470c0f0e20d2dc136c7c7dcc8565f35d..fe6e2f2f3a69cd7af33741079fe2decf319b0311 100644 --- a/Tracking/TrkEventCnv/TrkJiveXML/src/SegmentRetriever.cxx +++ b/Tracking/TrkEventCnv/TrkJiveXML/src/SegmentRetriever.cxx @@ -1,9 +1,8 @@ /* - Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration + Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration */ #include "TrkJiveXML/SegmentRetriever.h" -#include "StoreGate/DataHandle.h" #include "TrkSegment/Segment.h" #include "TrkSegment/TrackSegment.h" @@ -41,7 +40,7 @@ namespace JiveXML { if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Retrieving " << dataTypeName() <<endmsg; //Get an iterator over all segement collections - const DataHandle<Trk::SegmentCollection> CollectionItr, CollectionsEnd; + SG::ConstIterator<Trk::SegmentCollection> CollectionItr, CollectionsEnd; if ((evtStore()->retrieve(CollectionItr, CollectionsEnd)).isFailure()){ if (msgLvl(MSG::ERROR)) msg(MSG::ERROR) << "Unable to retrieve iterator for Segment collection" << endmsg; return StatusCode::RECOVERABLE; diff --git a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx index 29bdde252a284bdd4cec896769c28ca53c7c76fe..3ad9c61927b38d0139d89031699857359be3ab8f 100644 --- a/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx +++ b/Tracking/TrkEventCnv/TrkJiveXML/src/TrackRetriever.cxx @@ -427,7 +427,7 @@ namespace JiveXML { //If no collections had been requested explicitly, loop over all of them if (m_OtherTrackCollections.empty()) { //Get an iterator over all other track collections - const DataHandle<TrackCollection> trackCollIter, trackCollEnd; + SG::ConstIterator<TrackCollection> trackCollIter, trackCollEnd; if ((evtStore()->retrieve(trackCollIter, trackCollEnd)).isFailure()){ ATH_MSG_ERROR( "Unable to retrieve track collection iterator" ); return StatusCode::RECOVERABLE; diff --git a/Tracking/TrkEventCnv/TrkJiveXML/src/VertexRetriever.cxx b/Tracking/TrkEventCnv/TrkJiveXML/src/VertexRetriever.cxx index b3b8693081e2314db212af24e0dafc08f5b7faad..f2b671fb4bfb14e816a67b2ff5535c3f459e02be 100644 --- a/Tracking/TrkEventCnv/TrkJiveXML/src/VertexRetriever.cxx +++ b/Tracking/TrkEventCnv/TrkJiveXML/src/VertexRetriever.cxx @@ -24,7 +24,6 @@ #include "TrkParticleBase/LinkToTrackParticleBase.h" #include "TrkParameters/TrackParameters.h" -#include "StoreGate/DataHandle.h" namespace JiveXML { @@ -150,7 +149,7 @@ namespace JiveXML { //Get an iterator over all vertex collections, //return if there are none - const DataHandle<VxContainer> vtxCollectionItr, vtxCollectionsEnd; + SG::ConstIterator<VxContainer> vtxCollectionItr, vtxCollectionsEnd; if (evtStore()->retrieve(vtxCollectionItr,vtxCollectionsEnd).isFailure()) { if (msgLvl(MSG::DEBUG )) msg(MSG::DEBUG ) << "No VxContainer containers found in this event" << endmsg; return StatusCode::SUCCESS; @@ -261,10 +260,10 @@ namespace JiveXML { if (msgLvl(MSG::DEBUG)){ msg(MSG::DEBUG) << " collection " << vtxCollectionItr.key() << ": VertexType: " << vtx_type << endmsg; } //Store primary vertex candidate flag - if ( vtxCollectionItr == primaryVtxCollection ){ + if ( &(*vtxCollectionItr) == primaryVtxCollection ){ if ( Trk::PriVtx == vtx_type ){ primVxCand.push_back(DataType( 1 )); // type 1 'real' primary vertex }else{ primVxCand.push_back(DataType( 0 )); } // hack ! 'type 3 pileup' Should properly use 'vertexType' - }else if ( vtxCollectionItr == secondaryVtxCollection ){ + }else if ( &(*vtxCollectionItr) == secondaryVtxCollection ){ primVxCand.push_back(DataType( 2 )); // normally those are 'type 9 Kshort' }else{ primVxCand.push_back(DataType( 0 )); diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat index 99e8f1a580e814f1acb26d418627054a74df73c6..5b51cc1cb04f551520bdd423be3ad3aa99b392a0 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisUser/share/TIDAdata-chains-run3.dat @@ -52,13 +52,25 @@ testChains = { "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_tag:roi=HLT_Roi_FastElectron:te=0", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_probe:roi=HLT_Roi_FastElectron:te=1", + + # new chains + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_tag:roi=HLT_Roi_FastElectron:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_probe:roi=HLT_Roi_FastElectron:te=1", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_tag:te=0", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", + + # new chains + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", + # new chains + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", + "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauCore_FTF:HLT_Roi_TauCore", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_TauIso_FTF:HLT_Roi_TauIso", "HLT_tau25_idperf_tracktwo_L1TAU12IM:HLT_IDTrack_Tau_IDTrig:HLT_Roi_TauIso", @@ -102,9 +114,17 @@ testChains = { "HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_FTF:HLT_Roi_FastElectron_LRT:1", "HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_IDTrig:HLT_Roi_FastElectron_LRT:1", + # new chains + "HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_FTF:HLT_Roi_FastElectron_LRT:1", + "HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_IDTrig:HLT_Roi_FastElectron_LRT:1", + "HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_FTF:HLT_Roi_FastElectron_LRT:0", "HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_IDTrig:HLT_Roi_FastElectron_LRT:0", + # new chains + "HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_FTF:HLT_Roi_FastElectron_LRT:0", + "HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_IDTrig:HLT_Roi_FastElectron_LRT:0", + "HLT_tau25_idperf_tracktwoLLP_L1TAU12IM:HLT_IDTrack_TauCore_FTF:HLT_Roi_TauCore", "HLT_tau25_idperf_tracktwoLLP_L1TAU12IM:HLT_IDTrack_TauIso_FTF:HLT_Roi_TauIso", "HLT_tau25_idperf_tracktwoLLP_L1TAU12IM:HLT_IDTrack_Tau_IDTrig:HLT_Roi_TauIso", diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py index 5877b0708419f2a30b16430aa9d032943b580d30..59f472ddfd5c63af41097da3d24a073bb595ace5 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitCategoryMT.py @@ -130,7 +130,7 @@ validationTP_jpsiee = ['HLT_e5_lhtight_L1EM3'] validation_Zee = [ 'HLT_e26_lhtight_e15_etcut_Zee_L1EM22VHI', - 'HLT_e26_lhtight_e15_etcut_idperf_Zee_L1EM22VHI', + 'HLT_e26_lhtight_e15_idperf_tight_Zee_L1EM22VHI', 'HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM18I' ] # adding Zee/special chains later diff --git a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py index 961874f7c0becef5b8de950308b60060ae801eee..5e212afaf473dc82b112ce6929fd6dedeefb2379 100644 --- a/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py +++ b/Trigger/TrigMonitoring/TrigIDtrkMonitoring/python/TrigIDtrkMonitoringConfig.py @@ -99,6 +99,14 @@ def TrigIDtrkMonitoringTool( legacy_monitoring=False ): "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", + + # new chains + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:roi=HLT_Roi_FastElectron:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:roi=HLT_Roi_FastElectron:extra=el_probe:te=1", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", ] else: tidaegamma.ntupleChainNames += [ diff --git a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref index 83eddbd8f133fd4d7a2aac751c48b4c50282f9b4..49ee3091fbeb88cd14dc526977af0d78ce0fbefc 100644 --- a/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref +++ b/Trigger/TrigValidation/TrigAnalysisTest/share/ref_RDOtoRDOTrig_v1Dev_build.ref @@ -89,169 +89,195 @@ HLT_2e17_lhvloose_L12EM15VHI: stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 4 1: 3 - 2: 1 + 2: 3 + 3: 1 HLT_2e17_lhvloose_L12eEM18M: eventCount: 1 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 + 6: 1 stepFeatures: 0: 6 - 1: 8 - 2: 3 - 3: 2 + 1: 5 + 2: 8 + 3: 3 4: 2 5: 2 + 6: 2 HLT_2e24_lhvloose_L12EM20VH: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 4 - 1: 3 - 2: 1 + 1: 2 + 2: 3 + 3: 1 HLT_2e24_lhvloose_L12eEM24L: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 3 - 1: 3 - 2: 1 + 1: 2 + 2: 3 + 3: 1 HLT_2e5_lhmedium_j70_j50a_j0_DJMASS900j50_L1MJJ-500-NFF: eventCount: 0 stepCounts: 0: 4 - 1: 3 - 2: 1 + 1: 4 + 2: 3 3: 1 4: 1 + 5: 1 stepFeatures: 0: 13 - 1: 17 - 2: 7 - 3: 5 + 1: 13 + 2: 17 + 3: 7 4: 5 - 5: 1 + 5: 5 + 6: 1 HLT_2e5_lhmedium_j70_j50a_j0_DJMASS900j50_L1jMJJ-500-NFF: eventCount: 0 stepCounts: 0: 4 - 1: 3 - 2: 2 + 1: 4 + 2: 3 3: 2 4: 2 + 5: 2 stepFeatures: 0: 20 - 1: 31 - 2: 12 - 3: 11 + 1: 20 + 2: 31 + 3: 12 4: 11 - 5: 1 + 5: 11 + 6: 1 HLT_2e5_lhvloose_bBeeM6000_L14J15: eventCount: 0 stepCounts: 0: 6 - 1: 4 - 2: 2 + 1: 6 + 2: 4 3: 2 4: 2 + 5: 2 stepFeatures: 0: 26 - 1: 29 - 2: 10 - 3: 8 + 1: 22 + 2: 29 + 3: 10 4: 8 - 5: 4 + 5: 8 + 6: 4 HLT_2e5_lhvloose_bBeeM6000_L1All: eventCount: 0 stepCounts: 0: 12 - 1: 7 - 2: 5 + 1: 12 + 2: 7 3: 5 4: 5 + 5: 5 stepFeatures: 0: 43 - 1: 54 - 2: 17 - 3: 15 + 1: 36 + 2: 54 + 3: 17 4: 15 - 5: 6 + 5: 15 + 6: 6 HLT_2e5_lhvloose_bBeeM6000_L1BKeePrescaled: eventCount: 0 stepCounts: 0: 11 - 1: 10 - 2: 5 + 1: 11 + 2: 10 3: 5 4: 5 + 5: 5 stepFeatures: 0: 41 - 1: 53 - 2: 19 - 3: 15 + 1: 34 + 2: 53 + 3: 19 4: 15 - 5: 6 + 5: 15 + 6: 6 HLT_2e5_lhvloose_bBeeM6000_L1BKeePrimary: eventCount: 0 stepCounts: 0: 9 - 1: 6 - 2: 4 + 1: 9 + 2: 6 3: 4 4: 4 + 5: 4 stepFeatures: 0: 37 - 1: 41 - 2: 15 - 3: 13 + 1: 30 + 2: 41 + 3: 15 4: 13 - 5: 6 + 5: 13 + 6: 6 HLT_2e5_lhvloose_bBeeM6000_L1BPH-0M9-EM7-EM5_MU5VF: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 4 - 1: 6 + 1: 2 + 2: 6 HLT_2e5_lhvloose_bBeeM6000_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 - 2: 2 + 1: 4 + 2: 3 3: 2 4: 2 + 5: 2 stepFeatures: 0: 19 - 1: 17 - 2: 8 - 3: 7 + 1: 14 + 2: 17 + 3: 8 4: 7 - 5: 3 + 5: 7 + 6: 3 HLT_2e5_lhvloose_nogsf_bBeeM6000_L12EM3: eventCount: 0 stepCounts: 0: 12 - 1: 7 - 2: 5 + 1: 12 + 2: 7 3: 5 + 4: 5 stepFeatures: 0: 43 - 1: 54 - 2: 17 - 3: 15 - 4: 6 + 1: 36 + 2: 54 + 3: 17 + 4: 15 + 5: 6 HLT_2g10_loose_L1eEM9_mu20_L1MU14FCH: eventCount: 0 stepCounts: @@ -3515,14 +3541,16 @@ HLT_e10_lhmedium_ivarloose_j70_j50a_j0_DJMASS900j50_L1MJJ-500-NFF: 2: 2 3: 2 4: 2 - 5: 1 + 5: 2 + 6: 1 stepFeatures: 0: 2 - 1: 3 - 2: 2 + 1: 2 + 2: 3 3: 2 4: 2 - 5: 1 + 5: 2 + 6: 1 HLT_e10_lhmedium_ivarloose_j70_j50a_j0_DJMASS900j50_L1jMJJ-500-NFF: eventCount: 0 stepCounts: @@ -3532,6 +3560,7 @@ HLT_e10_lhmedium_ivarloose_j70_j50a_j0_DJMASS900j50_L1jMJJ-500-NFF: 3: 1 4: 1 5: 1 + 6: 1 stepFeatures: 0: 1 1: 1 @@ -3539,38 +3568,43 @@ HLT_e10_lhmedium_ivarloose_j70_j50a_j0_DJMASS900j50_L1jMJJ-500-NFF: 3: 1 4: 1 5: 1 + 6: 1 HLT_e10_lhvloose_L1EM7: eventCount: 7 stepCounts: 0: 10 1: 10 - 2: 7 + 2: 10 3: 7 4: 7 5: 7 + 6: 7 stepFeatures: 0: 15 - 1: 29 - 2: 9 + 1: 15 + 2: 29 3: 9 4: 9 - 5: 8 + 5: 9 + 6: 8 HLT_e10_lhvloose_L1eEM9: eventCount: 7 stepCounts: 0: 10 1: 10 - 2: 7 + 2: 10 3: 7 4: 7 5: 7 + 6: 7 stepFeatures: 0: 17 - 1: 35 - 2: 10 + 1: 17 + 2: 35 3: 10 4: 10 - 5: 9 + 5: 10 + 6: 9 HLT_e120_etcut_L1EM22VHI: eventCount: 0 HLT_e120_etcut_L1eEM26M: @@ -3595,34 +3629,34 @@ HLT_e140_lhloose_noringer_L1EM22VHI: eventCount: 0 HLT_e140_lhloose_noringer_L1eEM26M: eventCount: 0 -HLT_e14_etcut_idperf_L1EM7: - eventCount: 19 +HLT_e14_idperf_loose_L1EM7: + eventCount: 5 stepCounts: - 0: 20 - 1: 20 - 2: 19 - 3: 19 - 4: 19 + 0: 8 + 1: 8 + 2: 5 + 3: 5 + 4: 5 stepFeatures: - 0: 56 - 1: 56 - 2: 62 - 3: 62 - 4: 62 -HLT_e14_etcut_idperf_L1eEM9: - eventCount: 19 + 0: 12 + 1: 12 + 2: 9 + 3: 9 + 4: 9 +HLT_e14_idperf_loose_L1eEM9: + eventCount: 5 stepCounts: - 0: 20 - 1: 20 - 2: 19 - 3: 19 - 4: 19 + 0: 8 + 1: 8 + 2: 5 + 3: 5 + 4: 5 stepFeatures: - 0: 74 - 1: 74 - 2: 86 - 3: 86 - 4: 86 + 0: 12 + 1: 12 + 2: 9 + 3: 9 + 4: 9 HLT_e14_idperf_tight_L1EM7: eventCount: 5 stepCounts: @@ -3684,25 +3718,29 @@ HLT_e14_lhtight_e4_etcut_1invmAB5_L1JPSI-1M5-eEM15: stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 + 6: 1 stepFeatures: 0: 92 - 1: 107 - 2: 58 - 3: 1 + 1: 36 + 2: 107 + 3: 58 4: 1 5: 1 -HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12: + 6: 1 +HLT_e14_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: + eventCount: 0 +HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 -HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15: +HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 1 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 @@ -3710,25 +3748,27 @@ HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15: 7: 1 8: 1 9: 1 + 10: 1 stepFeatures: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 - 6: 17 - 7: 16 - 8: 33 - 9: 33 -HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM12: + 6: 1 + 7: 5 + 8: 5 + 9: 6 + 10: 6 +HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 -HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM15: +HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 1 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 @@ -3737,20 +3777,20 @@ HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM15: 8: 1 9: 1 10: 1 + 11: 1 stepFeatures: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 - 6: 17 - 7: 16 - 8: 33 - 9: 33 - 10: 33 -HLT_e14_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: - eventCount: 0 + 6: 1 + 7: 5 + 8: 5 + 9: 6 + 10: 6 + 11: 6 HLT_e14_lhtight_mu6_dRAB15_invmAB10_L1LFV-eEM15L-MU5VF: eventCount: 0 HLT_e14_lhvloose_L1EM10VH: @@ -3758,17 +3798,19 @@ HLT_e14_lhvloose_L1EM10VH: stepCounts: 0: 7 1: 7 - 2: 5 + 2: 7 3: 5 4: 5 5: 5 + 6: 5 stepFeatures: 0: 10 - 1: 14 - 2: 6 + 1: 10 + 2: 14 3: 6 4: 6 5: 6 + 6: 6 HLT_e14_lhvloose_L1eEM12L: eventCount: 5 stepCounts: @@ -3778,13 +3820,15 @@ HLT_e14_lhvloose_L1eEM12L: 3: 5 4: 5 5: 5 + 6: 5 stepFeatures: 0: 8 - 1: 11 - 2: 6 + 1: 8 + 2: 11 3: 6 4: 6 5: 6 + 6: 6 HLT_e17_lhloose_mu14_L1EM15VH_MU8F: eventCount: 0 HLT_e17_lhloose_mu14_L1eEM18L_MU8F: @@ -3797,23 +3841,25 @@ HLT_e17_lhmedium_ivarloose_tau25_mediumRNN_tracktwoMVA_03dRAB_L1EM15VHI_2TAU12IM 2: 3 3: 3 4: 3 - 5: 1 + 5: 3 6: 1 7: 1 8: 1 9: 1 + 10: 1 stepFeatures: 0: 5 - 1: 7 - 2: 3 + 1: 5 + 2: 7 3: 3 4: 3 - 5: 1 - 6: 2 + 5: 3 + 6: 1 7: 2 8: 2 9: 2 - 10: 1 + 10: 2 + 11: 1 HLT_e17_lhmedium_tau25_mediumRNN_tracktwoMVA_xe50_cell_03dRAB_L1EM15VHI_2TAU12IM_XE35: eventCount: 0 stepCounts: @@ -3822,12 +3868,14 @@ HLT_e17_lhmedium_tau25_mediumRNN_tracktwoMVA_xe50_cell_03dRAB_L1EM15VHI_2TAU12IM 2: 3 3: 3 4: 3 + 5: 3 stepFeatures: 0: 5 - 1: 7 - 2: 3 + 1: 5 + 2: 7 3: 3 4: 3 + 5: 3 HLT_e17_lhvloose_L1EM15VHI: eventCount: 5 stepCounts: @@ -3837,13 +3885,15 @@ HLT_e17_lhvloose_L1EM15VHI: 3: 5 4: 5 5: 5 + 6: 5 stepFeatures: 0: 7 - 1: 9 - 2: 5 + 1: 7 + 2: 9 3: 5 4: 5 5: 5 + 6: 5 HLT_e20_idperf_loose_lrtloose_L1EM15VH: eventCount: 5 stepCounts: @@ -3854,10 +3904,10 @@ HLT_e20_idperf_loose_lrtloose_L1EM15VH: 4: 5 stepFeatures: 0: 8 - 1: 7 - 2: 6 - 3: 6 - 4: 6 + 1: 8 + 2: 7 + 3: 7 + 4: 7 HLT_e20_idperf_loose_lrtloose_L1eEM18L: eventCount: 5 stepCounts: @@ -3868,10 +3918,10 @@ HLT_e20_idperf_loose_lrtloose_L1eEM18L: 4: 5 stepFeatures: 0: 8 - 1: 7 - 2: 6 - 3: 6 - 4: 6 + 1: 8 + 2: 7 + 3: 7 + 4: 7 HLT_e20_lhloose_L1EM15VH: eventCount: 4 stepCounts: @@ -3880,14 +3930,16 @@ HLT_e20_lhloose_L1EM15VH: 2: 5 3: 5 4: 5 - 5: 4 + 5: 5 + 6: 4 stepFeatures: 0: 8 - 1: 11 - 2: 5 + 1: 8 + 2: 11 3: 5 4: 5 - 5: 4 + 5: 5 + 6: 4 HLT_e20_lhmedium_L1EM15VH: eventCount: 3 stepCounts: @@ -3896,78 +3948,88 @@ HLT_e20_lhmedium_L1EM15VH: 2: 5 3: 5 4: 5 - 5: 3 + 5: 5 + 6: 3 stepFeatures: 0: 8 - 1: 11 - 2: 5 + 1: 8 + 2: 11 3: 5 4: 5 - 5: 3 + 5: 5 + 6: 3 HLT_e20_lhtight_L1EM15VH: eventCount: 3 stepCounts: 0: 5 - 1: 4 + 1: 5 2: 4 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 stepFeatures: 0: 7 - 1: 8 - 2: 4 + 1: 7 + 2: 8 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 HLT_e20_lhtight_ivarloose_L12EM7: eventCount: 3 stepCounts: 0: 5 - 1: 4 + 1: 5 2: 4 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 stepFeatures: 0: 7 - 1: 8 - 2: 4 + 1: 7 + 2: 8 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 HLT_e20_lhtight_ivarloose_L1EM15VH: eventCount: 3 stepCounts: 0: 5 - 1: 4 + 1: 5 2: 4 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 stepFeatures: 0: 7 - 1: 8 - 2: 4 + 1: 7 + 2: 8 3: 4 4: 4 - 5: 3 + 5: 4 + 6: 3 HLT_e20_lhtight_ivarloose_L1EM15VHI: eventCount: 2 stepCounts: 0: 5 - 1: 4 - 2: 3 + 1: 5 + 2: 4 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 6 1: 6 - 2: 3 + 2: 6 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM18M: eventCount: 1 stepCounts: @@ -3977,13 +4039,15 @@ HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM18M: 3: 1 4: 1 5: 1 + 6: 1 stepFeatures: 0: 1 - 1: 2 - 2: 1 + 1: 1 + 2: 2 3: 1 4: 1 5: 1 + 6: 1 HLT_e20_lhvloose_L1EM15VH: eventCount: 5 stepCounts: @@ -3993,13 +4057,15 @@ HLT_e20_lhvloose_L1EM15VH: 3: 5 4: 5 5: 5 + 6: 5 stepFeatures: 0: 8 - 1: 11 - 2: 5 + 1: 8 + 2: 11 3: 5 4: 5 5: 5 + 6: 5 HLT_e20_lhvloose_L1eEM18L: eventCount: 5 stepCounts: @@ -4009,13 +4075,15 @@ HLT_e20_lhvloose_L1eEM18L: 3: 5 4: 5 5: 5 + 6: 5 stepFeatures: 0: 8 - 1: 11 - 2: 5 + 1: 8 + 2: 11 3: 5 4: 5 5: 5 + 6: 5 HLT_e24_lhmedium_g12_loose_g12_loose_02dRAB_02dRAC_02dRBC_L1EM20VH_3EM10VH: eventCount: 0 stepCounts: @@ -4024,12 +4092,14 @@ HLT_e24_lhmedium_g12_loose_g12_loose_02dRAB_02dRAC_02dRBC_L1EM20VH_3EM10VH: 2: 2 3: 1 4: 1 + 5: 1 stepFeatures: 0: 31 - 1: 14 - 2: 12 + 1: 13 + 2: 14 3: 8 4: 1 + 5: 1 HLT_e24_lhmedium_g12_loose_g12_loose_02dRAB_02dRAC_02dRBC_L1eEM24L_3eEM12L: eventCount: 0 stepFeatures: @@ -4042,13 +4112,15 @@ HLT_e24_lhmedium_g25_medium_02dRAB_L12EM20VH: 2: 3 3: 3 4: 3 + 5: 3 stepFeatures: 0: 11 - 1: 11 - 2: 9 + 1: 10 + 2: 11 3: 6 4: 3 - 5: 1 + 5: 3 + 6: 1 HLT_e24_lhmedium_g25_medium_02dRAB_L12eEM24L: eventCount: 0 stepCounts: @@ -4057,12 +4129,14 @@ HLT_e24_lhmedium_g25_medium_02dRAB_L12eEM24L: 2: 2 3: 2 4: 2 + 5: 2 stepFeatures: 0: 7 - 1: 7 - 2: 5 + 1: 6 + 2: 7 3: 4 4: 2 + 5: 2 HLT_e24_lhmedium_ivarloose_tau20_mediumRNN_tracktwoMVA_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: @@ -4071,98 +4145,110 @@ HLT_e24_lhmedium_ivarloose_tau20_mediumRNN_tracktwoMVA_03dRAB_L1EM22VHI: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 - 6: 10 + 5: 4 + 6: 2 7: 10 8: 10 9: 10 - 10: 2 + 10: 10 + 11: 2 HLT_e24_lhmedium_ivarloose_tau20_mediumRNN_tracktwoMVA_03dRAB_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 10 + 5: 4 + 6: 2 7: 10 8: 10 9: 10 - 10: 2 + 10: 10 + 11: 2 HLT_e24_lhtight_ivarloose_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e24_lhtight_ivarloose_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e24_lhvloose_2e12_lhvloose_L1EM20VH_3EM10VH: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 8 - 1: 6 - 2: 2 + 1: 5 + 2: 6 + 3: 2 HLT_e24_lhvloose_2e12_lhvloose_L1eEM24L_3eEM12L: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 5 - 1: 6 - 2: 2 + 1: 5 + 2: 6 + 3: 2 HLT_e250_etcut_L1EM22VHI: eventCount: 0 HLT_e250_etcut_L1eEM26M: @@ -4175,13 +4261,15 @@ HLT_e25_mergedtight_g35_medium_90invmAB_02dRAB_L12EM20VH: 2: 2 3: 1 4: 1 + 5: 1 stepFeatures: 0: 11 - 1: 22 - 2: 7 + 1: 9 + 2: 20 3: 6 4: 2 5: 2 + 6: 2 HLT_e25_mergedtight_g35_medium_90invmAB_02dRAB_L12eEM24L: eventCount: 0 stepCounts: @@ -4190,13 +4278,15 @@ HLT_e25_mergedtight_g35_medium_90invmAB_02dRAB_L12eEM24L: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 5 - 1: 6 - 2: 3 + 1: 3 + 2: 6 3: 3 4: 2 5: 2 + 6: 2 HLT_e26_dnnloose_L1EM22VHI: eventCount: 2 stepCounts: @@ -4205,14 +4295,16 @@ HLT_e26_dnnloose_L1EM22VHI: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_dnnmedium_L1EM22VHI: eventCount: 2 stepCounts: @@ -4221,56 +4313,64 @@ HLT_e26_dnnmedium_L1EM22VHI: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_dnntight_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_dnntight_ivarloose_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - stepFeatures: + 5: 3 + 6: 2 + stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_etcut_L1EM22VHI: eventCount: 10 stepCounts: 0: 10 1: 10 2: 10 + 3: 10 stepFeatures: 0: 12 - 1: 31 - 2: 11 + 1: 12 + 2: 31 + 3: 11 HLT_e26_idperf_loose_L1EM22VHI: eventCount: 4 stepCounts: @@ -4359,429 +4459,473 @@ HLT_e26_lhmedium_mu8noL1_L1EM22VHI: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_lhtight_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_e14_etcut_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 34 - 1: 38 - 2: 14 - 3: 3 + 1: 17 + 2: 38 + 3: 14 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_e14_etcut_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 44 - 1: 60 - 2: 24 - 3: 4 + 1: 24 + 2: 60 + 3: 24 4: 4 - 5: 2 -HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI: + 5: 4 + 6: 2 +HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 7 + 5: 3 + 6: 2 7: 7 - 8: 9 - 9: 9 -HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1eEM26M: + 8: 7 + 9: 23 + 10: 9 +HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 + 5: 4 + 6: 2 7: 9 - 8: 13 - 9: 13 -HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI: - eventCount: 2 + 8: 9 + 9: 30 + 10: 13 +HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI: + eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 2 - 8: 2 - 9: 2 - 10: 2 + 7: 1 + 8: 1 + 9: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 7 - 7: 7 - 8: 9 - 9: 9 - 10: 9 -HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1eEM26M: - eventCount: 2 + 5: 3 + 6: 2 + 7: 3 + 8: 2 + 9: 2 + 10: 2 +HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1eEM26M: + eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 2 - 8: 2 - 9: 2 - 10: 2 + 7: 1 + 8: 1 + 9: 1 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 - 7: 9 - 8: 13 - 9: 13 - 10: 13 -HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1EM22VHI: - eventCount: 2 + 5: 4 + 6: 2 + 7: 3 + 8: 2 + 9: 2 + 10: 2 +HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI: + eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 2 - 8: 2 + 7: 1 + 8: 1 + 9: 1 + 10: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 7 - 7: 23 - 8: 9 -HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1eEM26M: - eventCount: 2 + 5: 3 + 6: 2 + 7: 3 + 8: 2 + 9: 2 + 10: 2 + 11: 2 +HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1eEM26M: + eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 2 - 8: 2 + 7: 1 + 8: 1 + 9: 1 + 10: 1 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 - 7: 30 - 8: 13 + 5: 4 + 6: 2 + 7: 3 + 8: 2 + 9: 2 + 10: 2 + 11: 2 HLT_e26_lhtight_ivarloose_2j20_0eta290_020jvt_boffperf_pf_ftf_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 + 9: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 13 + 7: 2 8: 13 + 9: 13 HLT_e26_lhtight_ivarloose_2j20_0eta290_020jvt_boffperf_pf_ftf_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 + 9: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 13 + 7: 2 8: 13 + 9: 13 HLT_e26_lhtight_ivarloose_2j20_roiftf_preselj20_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 + 8: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 16 + 7: 2 + 8: 16 HLT_e26_lhtight_ivarloose_2j20_roiftf_preselj20_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 + 8: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 16 + 7: 2 + 8: 16 HLT_e26_lhtight_ivarloose_L1EM22VH: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_ivarloose_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_ivarloose_L1eEM26: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_lhtight_ivarloose_L1eEM26L: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_lhtight_ivarloose_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_lhtight_ivarloose_L1eEM26T: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e26_lhtight_ivarloose_e12_lhvloose_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e12_lhvloose_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 -HLT_e26_lhtight_ivarloose_e14_etcut_idperf_probe_L1EM22VHI: + 7: 2 +HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 @@ -4789,833 +4933,934 @@ HLT_e26_lhtight_ivarloose_e14_etcut_idperf_probe_L1EM22VHI: 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 7 + 5: 3 + 6: 2 7: 7 - 8: 9 - 9: 9 + 8: 7 + 9: 23 10: 9 -HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1EM22VHI: - eventCount: 2 - stepCounts: - 0: 4 - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 5: 2 - 6: 2 - 7: 2 - 8: 2 - stepFeatures: - 0: 4 - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 5: 2 - 6: 7 - 7: 23 - 8: 9 HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 + 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 - 7: 30 - 8: 13 -HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1EM22VHI: - eventCount: 0 + 5: 4 + 6: 2 + 7: 9 + 8: 9 + 9: 30 + 10: 13 +HLT_e26_lhtight_ivarloose_e14_idperf_tight_probe_L1EM22VHI: + eventCount: 1 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 1 + 5: 3 + 6: 2 7: 1 8: 1 9: 1 10: 1 + 11: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 3 - 7: 4 + 5: 3 + 6: 2 + 7: 3 8: 2 9: 2 10: 2 + 11: 2 +HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1EM22VHI: + eventCount: 0 + stepCounts: + 0: 4 + 1: 4 + 2: 3 + 3: 3 + 4: 3 + 5: 3 + 6: 2 + 7: 1 + 8: 1 + 9: 1 + 10: 1 11: 1 + 12: 1 + stepFeatures: + 0: 4 + 1: 4 + 2: 3 + 3: 3 + 4: 3 + 5: 3 + 6: 2 + 7: 3 + 8: 2 + 9: 4 + 10: 2 + 11: 2 + 12: 2 + 13: 1 HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 - 6: 1 + 5: 4 + 6: 2 7: 1 8: 1 9: 1 10: 1 + 11: 1 + 12: 1 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 3 - 7: 4 + 5: 4 + 6: 2 + 7: 3 8: 2 - 9: 2 + 9: 4 10: 2 - 11: 1 -HLT_e26_lhtight_ivarloose_e15_etcut_idperf_probe_L1eEM26M: - eventCount: 2 + 11: 2 + 12: 2 + 13: 1 +HLT_e26_lhtight_ivarloose_e15_idperf_tight_probe_L1eEM26M: + eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 2 - 8: 2 - 9: 2 - 10: 2 + 7: 1 + 8: 1 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 - 7: 9 - 8: 9 - 9: 9 - 10: 9 + 5: 4 + 6: 2 + 7: 3 + 8: 2 + 9: 1 HLT_e26_lhtight_ivarloose_e17_lhvloose_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e17_lhvloose_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e20_lhtight_ivarloose_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e24_lhvloose_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e24_lhvloose_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e26_lhtight_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e26_lhtight_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 + 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 16 - 7: 43 - 8: 28 + 5: 3 + 6: 2 + 7: 16 + 8: 16 + 9: 43 + 10: 28 HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 + 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 24 - 7: 79 - 8: 49 + 5: 4 + 6: 2 + 7: 24 + 8: 24 + 9: 79 + 10: 49 +HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI: + eventCount: 2 + stepCounts: + 0: 4 + 1: 4 + 2: 3 + 3: 3 + 4: 3 + 5: 3 + 6: 2 + 7: 2 + 8: 2 + 9: 2 + 10: 2 + 11: 2 + stepFeatures: + 0: 4 + 1: 4 + 2: 3 + 3: 3 + 4: 3 + 5: 3 + 6: 2 + 7: 7 + 8: 7 + 9: 7 + 10: 7 + 11: 7 HLT_e26_lhtight_ivarloose_e5_lhtight_noringer_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 10: 2 + 11: 2 + 12: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 - 7: 23 + 5: 4 + 6: 2 + 7: 9 8: 9 - 9: 9 + 9: 23 10: 9 - 11: 2 + 11: 9 + 12: 9 + 13: 2 HLT_e26_lhtight_ivarloose_e5_lhtight_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 10: 2 + 11: 2 + 12: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 7 - 7: 11 + 5: 3 + 6: 2 + 7: 7 8: 7 - 9: 7 + 9: 11 10: 7 - 11: 2 + 11: 7 + 12: 7 + 13: 2 HLT_e26_lhtight_ivarloose_e5_lhtight_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 10: 2 + 11: 2 + 12: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 7 - 7: 11 - 8: 8 - 9: 8 - 10: 8 - 11: 2 -HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI: - eventCount: 2 - stepCounts: - 0: 4 - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 5: 2 + 5: 4 6: 2 - 7: 2 - 8: 2 - 9: 2 - 10: 2 - stepFeatures: - 0: 4 - 1: 3 - 2: 3 - 3: 3 - 4: 3 - 5: 2 - 6: 7 7: 7 8: 7 - 9: 7 - 10: 7 -HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1eEM26M: + 9: 11 + 10: 8 + 11: 8 + 12: 8 + 13: 2 +HLT_e26_lhtight_ivarloose_e5_loose_lrtloose_idperf_probe_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 10: 2 + 11: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 9 + 5: 4 + 6: 2 7: 9 8: 9 9: 9 10: 9 + 11: 9 HLT_e26_lhtight_ivarloose_e7_lhmedium_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 + 7: 2 HLT_e26_lhtight_ivarloose_e9_etcut_probe_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 + 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 10 - 7: 30 - 8: 16 + 5: 3 + 6: 2 + 7: 10 + 8: 10 + 9: 30 + 10: 16 HLT_e26_lhtight_ivarloose_e9_etcut_probe_L1eEM26M: eventCount: 2 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 + 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 16 - 7: 58 - 8: 26 + 5: 4 + 6: 2 + 7: 16 + 8: 16 + 9: 58 + 10: 26 HLT_e26_lhtight_ivarloose_e9_lhtight_probe_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 - 8: 1 - 9: 1 + 8: 2 + 9: 2 10: 1 + 11: 1 + 12: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 5 - 7: 9 - 8: 3 - 9: 2 - 10: 2 - 11: 1 + 5: 3 + 6: 2 + 7: 5 + 8: 5 + 9: 9 + 10: 3 + 11: 2 + 12: 2 + 13: 1 HLT_e26_lhtight_ivarloose_e9_lhtight_probe_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 - 8: 1 - 9: 1 + 8: 2 + 9: 2 10: 1 + 11: 1 + 12: 1 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 6 - 7: 11 - 8: 3 - 9: 2 - 10: 2 - 11: 1 + 5: 4 + 6: 2 + 7: 6 + 8: 6 + 9: 11 + 10: 3 + 11: 2 + 12: 2 + 13: 1 HLT_e26_lhtight_ivarloose_j20_pf_ftf_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 + 8: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 14 + 7: 2 + 8: 14 HLT_e26_lhtight_ivarloose_mu22noL1_2j20_0eta290_020jvt_bdl1d85_pf_ftf_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 - 8: 1 + 8: 2 + 9: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 13 - 8: 4 + 7: 2 + 8: 13 + 9: 4 HLT_e26_lhtight_ivarloose_mu22noL1_2j20_0eta290_020jvt_bgn185_pf_ftf_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 - 8: 1 + 8: 2 + 9: 1 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 13 - 8: 4 + 7: 2 + 8: 13 + 9: 4 HLT_e26_lhtight_ivarloose_mu22noL1_j20_0eta290_020jvt_boffperf_pf_ftf_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 + 9: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 13 + 7: 2 8: 13 + 9: 13 HLT_e26_lhtight_ivarloose_mu22noL1_j20_0eta290_020jvt_boffperf_pf_ftf_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 + 9: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 13 + 7: 2 8: 13 + 9: 13 HLT_e26_lhtight_ivarloose_mu22noL1_j20_0eta290_020jvt_pf_ftf_boffperf_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 + 9: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 13 + 7: 2 8: 13 + 9: 13 HLT_e26_lhtight_ivarloose_mu22noL1_j20_roiftf_preselj20_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 + 8: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 - 7: 16 + 7: 2 + 8: 16 HLT_e26_lhtight_ivarloose_mu22noL1_j20_roiftf_preselj20_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 + 8: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 - 7: 16 + 7: 2 + 8: 16 HLT_e26_lhtight_ivarloose_nogsf_L1EM22VH: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 - 4: 2 + 4: 3 + 5: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 - 4: 2 + 4: 3 + 5: 2 HLT_e26_lhtight_ivarloose_nogsf_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 - 4: 2 + 4: 3 + 5: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 - 4: 2 + 4: 3 + 5: 2 HLT_e26_lhtight_ivarloose_noringer_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_ivarloose_tau100_mediumRNN_tracktwoLLP_probe_03dRAB_L1EM22VHI: eventCount: 0 stepFeatures: @@ -5640,202 +5885,218 @@ HLT_e26_lhtight_ivarloose_tau20_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 10 + 5: 3 + 6: 2 7: 10 8: 10 9: 10 - 10: 2 + 10: 10 + 11: 2 HLT_e26_lhtight_ivarloose_tau20_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 10 + 5: 4 + 6: 2 7: 10 8: 10 9: 10 - 10: 2 + 10: 10 + 11: 2 HLT_e26_lhtight_ivarloose_tau25_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 - 6: 4 + 5: 3 + 6: 2 7: 4 8: 4 9: 4 - 10: 2 + 10: 4 + 11: 2 HLT_e26_lhtight_ivarloose_tau25_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 5 + 5: 4 + 6: 2 7: 5 8: 5 9: 5 - 10: 2 + 10: 5 + 11: 2 HLT_e26_lhtight_ivarloose_tau35_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 - 10: 1 + 10: 2 + 11: 1 HLT_e26_lhtight_ivarloose_tau35_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 5 + 5: 4 + 6: 2 7: 5 8: 5 9: 5 - 10: 2 + 10: 5 + 11: 2 HLT_e26_lhtight_ivarloose_tau40_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 - 10: 1 + 10: 2 + 11: 1 HLT_e26_lhtight_ivarloose_tau40_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: 0: 5 1: 5 - 2: 4 + 2: 5 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 8 - 2: 4 + 1: 6 + 2: 8 3: 4 4: 4 - 5: 2 - 6: 3 + 5: 4 + 6: 2 7: 3 8: 3 9: 3 - 10: 1 + 10: 3 + 11: 1 HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoLLP_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: @@ -5844,22 +6105,24 @@ HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoLLP_probe_03dRAB_L1EM22VHI: 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 1: 3 2: 3 3: 3 4: 3 - 5: 2 - 6: 3 + 5: 3 + 6: 2 7: 3 8: 3 9: 3 + 10: 3 HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoLLP_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: @@ -5868,22 +6131,24 @@ HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoLLP_probe_03dRAB_L1eEM26M: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: eventCount: 0 stepCounts: @@ -5892,22 +6157,24 @@ HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 4 1: 3 2: 3 3: 3 4: 3 - 5: 2 - 6: 3 + 5: 3 + 6: 2 7: 3 8: 3 9: 3 + 10: 3 HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: eventCount: 0 stepCounts: @@ -5916,22 +6183,24 @@ HLT_e26_lhtight_ivarloose_tau60_mediumRNN_tracktwoMVA_probe_03dRAB_L1eEM26M: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 stepFeatures: 0: 6 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 2 HLT_e26_lhtight_ivarloose_tau80_mediumRNN_tracktwoLLP_probe_03dRAB_L1EM22VHI: eventCount: 0 stepFeatures: @@ -5952,34 +6221,38 @@ HLT_e26_lhtight_ivarmedium_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e26_lhtight_ivartight_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e28_lhmedium_mu8noL1_L1EM24VHI: eventCount: 0 stepCounts: @@ -5988,30 +6261,34 @@ HLT_e28_lhmedium_mu8noL1_L1EM24VHI: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e28_lhtight_ivarloose_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e28_lhtight_ivarloose_L1eEM26M: eventCount: 2 stepCounts: @@ -6020,14 +6297,16 @@ HLT_e28_lhtight_ivarloose_L1eEM26M: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e28_lhtight_ivarloose_L1eEM26T: eventCount: 2 stepCounts: @@ -6036,46 +6315,52 @@ HLT_e28_lhtight_ivarloose_L1eEM26T: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 5 - 1: 6 - 2: 4 + 1: 5 + 2: 6 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 HLT_e28_lhtight_ivarloose_noringer_L1EM22VHI: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e28_lhtight_ivarloose_noringer_L1eEM26M: eventCount: 2 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e300_etcut_L1EM22VHI: eventCount: 0 HLT_e300_etcut_L1eEM26M: @@ -6112,30 +6397,34 @@ HLT_e30_lhloose_nopix_lrtmedium_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 5 - 1: 1 + 1: 5 2: 1 3: 1 4: 1 + 5: 1 HLT_e30_lhloose_nopix_lrtmedium_L1eEM26M: eventCount: 0 stepCounts: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 5 - 1: 1 + 1: 5 2: 1 3: 1 4: 1 + 5: 1 HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1EM20VH: eventCount: 0 stepCounts: @@ -6144,12 +6433,14 @@ HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1EM20VH: 2: 6 3: 4 4: 1 + 5: 1 stepFeatures: 0: 15 1: 9 2: 9 3: 4 4: 5 + 5: 2 HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1eEM24L: eventCount: 0 stepCounts: @@ -6158,257 +6449,331 @@ HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1eEM24L: 2: 6 3: 4 4: 1 + 5: 1 stepFeatures: 0: 12 1: 8 2: 7 3: 4 4: 5 + 5: 2 HLT_e30_lhvloose_L1EM22VHI: eventCount: 3 stepCounts: 0: 4 1: 4 - 2: 3 + 2: 4 3: 3 4: 3 5: 3 + 6: 3 stepFeatures: 0: 5 - 1: 6 - 2: 3 + 1: 5 + 2: 6 3: 3 4: 3 5: 3 + 6: 3 HLT_e30_lhvloose_L1eEM26M: eventCount: 3 stepCounts: 0: 4 1: 4 - 2: 3 + 2: 4 3: 3 4: 3 5: 3 + 6: 3 stepFeatures: 0: 5 - 1: 6 - 2: 3 + 1: 5 + 2: 6 3: 3 4: 3 5: 3 + 6: 3 HLT_e35_lhloose_nopix_lrtmedium_L1EM22VHI: eventCount: 0 stepCounts: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 HLT_e35_lhloose_nopix_lrtmedium_L1eEM26M: eventCount: 0 stepCounts: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 4 - 1: 1 + 1: 4 2: 1 3: 1 4: 1 + 5: 1 HLT_e40_lhvloose_L1EM22VHI: eventCount: 2 stepCounts: 0: 3 - 1: 2 + 1: 3 2: 2 3: 2 4: 2 5: 2 + 6: 2 stepFeatures: 0: 3 - 1: 2 + 1: 3 2: 2 3: 2 4: 2 5: 2 + 6: 2 HLT_e40_lhvloose_L1eEM26M: eventCount: 2 stepCounts: 0: 3 - 1: 2 + 1: 3 2: 2 3: 2 4: 2 5: 2 + 6: 2 stepFeatures: 0: 3 - 1: 2 + 1: 3 2: 2 3: 2 4: 2 5: 2 + 6: 2 HLT_e50_etcut_L1EM22VHI: eventCount: 6 stepCounts: 0: 6 1: 6 2: 6 + 3: 6 stepFeatures: 0: 6 - 1: 22 - 2: 6 + 1: 6 + 2: 22 + 3: 6 HLT_e50_etcut_L1eEM26M: eventCount: 5 stepCounts: 0: 5 1: 5 2: 5 + 3: 5 stepFeatures: 0: 5 - 1: 18 - 2: 5 + 1: 5 + 2: 18 + 3: 5 HLT_e5_dnnloose_L1EM3: eventCount: 6 stepCounts: 0: 19 - 1: 16 - 2: 13 + 1: 19 + 2: 16 3: 13 4: 13 - 5: 6 + 5: 13 + 6: 6 stepFeatures: 0: 43 - 1: 63 - 2: 23 + 1: 43 + 2: 63 3: 23 4: 23 - 5: 6 + 5: 23 + 6: 6 HLT_e5_dnnmedium_L1EM3: eventCount: 6 stepCounts: 0: 19 - 1: 16 - 2: 13 + 1: 19 + 2: 16 3: 13 4: 13 - 5: 6 + 5: 13 + 6: 6 stepFeatures: 0: 42 - 1: 62 - 2: 23 + 1: 42 + 2: 62 3: 23 4: 23 - 5: 6 + 5: 23 + 6: 6 HLT_e5_dnntight_L1EM3: eventCount: 6 stepCounts: 0: 19 - 1: 15 - 2: 12 + 1: 19 + 2: 15 3: 12 4: 12 - 5: 6 + 5: 12 + 6: 6 stepFeatures: 0: 39 - 1: 56 - 2: 21 + 1: 39 + 2: 56 3: 21 4: 21 - 5: 6 + 5: 21 + 6: 6 HLT_e5_etcut_L1EM3: eventCount: 20 stepCounts: 0: 20 1: 20 2: 20 + 3: 20 stepFeatures: 0: 146 - 1: 381 - 2: 195 + 1: 146 + 2: 381 + 3: 195 +HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH: + eventCount: 3 + stepCounts: + 0: 11 + 1: 6 + 2: 6 + 3: 4 + 4: 3 + 5: 3 + 6: 3 + 7: 3 + 8: 3 + stepFeatures: + 0: 15 + 1: 9 + 2: 9 + 3: 4 + 4: 13 + 5: 12 + 6: 10 + 7: 10 + 8: 10 +HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1eEM24L: + eventCount: 4 + stepCounts: + 0: 10 + 1: 7 + 2: 6 + 3: 4 + 4: 4 + 5: 4 + 6: 4 + 7: 4 + 8: 4 + stepFeatures: + 0: 12 + 1: 8 + 2: 7 + 3: 4 + 4: 17 + 5: 17 + 6: 14 + 7: 14 + 8: 14 HLT_e5_idperf_tight_L1EM3: eventCount: 13 stepCounts: 0: 19 - 1: 18 + 1: 19 2: 13 3: 13 4: 13 stepFeatures: 0: 39 - 1: 31 - 2: 23 - 3: 23 - 4: 23 + 1: 39 + 2: 24 + 3: 24 + 4: 24 HLT_e5_idperf_tight_L1eEM5: eventCount: 14 stepCounts: 0: 19 - 1: 18 + 1: 19 2: 14 3: 14 4: 14 stepFeatures: 0: 67 - 1: 51 - 2: 35 - 3: 35 - 4: 35 + 1: 67 + 2: 36 + 3: 36 + 4: 36 HLT_e5_idperf_tight_nogsf_L1EM3: eventCount: 13 stepCounts: 0: 19 - 1: 18 + 1: 19 2: 13 3: 13 stepFeatures: 0: 39 - 1: 31 - 2: 23 - 3: 23 + 1: 39 + 2: 24 + 3: 24 HLT_e5_idperf_tight_nogsf_L1eEM5: eventCount: 14 stepCounts: 0: 19 - 1: 18 + 1: 19 2: 14 3: 14 stepFeatures: 0: 67 - 1: 51 - 2: 35 - 3: 35 + 1: 67 + 2: 36 + 3: 36 HLT_e5_lhtight_L1EM3: eventCount: 4 stepCounts: 0: 19 - 1: 15 - 2: 12 + 1: 19 + 2: 15 3: 12 4: 12 - 5: 4 + 5: 12 + 6: 4 stepFeatures: 0: 39 - 1: 56 - 2: 21 + 1: 39 + 2: 56 3: 21 4: 21 - 5: 4 + 5: 21 + 6: 4 HLT_e5_lhtight_e14_etcut_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 2 1: 2 + 2: 2 HLT_e5_lhtight_e14_etcut_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 1 stepCounts: @@ -6417,27 +6782,33 @@ HLT_e5_lhtight_e14_etcut_1invmAB5_L1JPSI-1M5-eEM15: 2: 6 3: 6 4: 6 - 5: 1 + 5: 6 + 6: 1 stepFeatures: 0: 39 - 1: 100 - 2: 37 - 3: 17 + 1: 39 + 2: 100 + 3: 37 4: 17 - 5: 3 + 5: 17 + 6: 3 HLT_e5_lhtight_e14_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e5_lhtight_e9_etcut_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 4 - 1: 11 + 1: 4 + 2: 11 HLT_e5_lhtight_e9_etcut_1invmAB5_L1JPSI-1M5-eEM9: eventCount: 1 stepCounts: @@ -6446,36 +6817,42 @@ HLT_e5_lhtight_e9_etcut_1invmAB5_L1JPSI-1M5-eEM9: 2: 6 3: 6 4: 6 - 5: 1 + 5: 6 + 6: 1 stepFeatures: 0: 56 - 1: 164 - 2: 59 - 3: 17 + 1: 56 + 2: 164 + 3: 59 4: 17 - 5: 3 + 5: 17 + 6: 3 HLT_e5_lhtight_e9_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e5_lhtight_noringer_L1EM3: eventCount: 4 stepCounts: 0: 18 - 1: 17 + 1: 18 2: 17 3: 17 4: 17 - 5: 4 + 5: 17 + 6: 4 stepFeatures: 0: 64 - 1: 142 - 2: 45 + 1: 64 + 2: 142 3: 45 4: 45 - 5: 4 + 5: 45 + 6: 4 HLT_e5_lhvloose_bBeeM6000_2mu4_l2io_L1BPH-0DR3-EM7J15_2MU3V: eventCount: 0 stepCounts: @@ -6484,111 +6861,125 @@ HLT_e5_lhvloose_bBeeM6000_2mu4_l2io_L1BPH-0DR3-EM7J15_2MU3V: 2: 2 3: 2 4: 2 - 5: 1 + 5: 2 6: 1 + 7: 1 stepFeatures: 0: 3 - 1: 4 + 1: 3 2: 4 3: 4 4: 4 - 5: 3 - 6: 4 + 5: 4 + 6: 3 + 7: 4 HLT_e5_lhvloose_bBeeM6000_L14J15: eventCount: 1 stepCounts: 0: 10 - 1: 5 + 1: 10 2: 5 3: 5 4: 5 - 5: 1 + 5: 5 + 6: 1 stepFeatures: 0: 26 - 1: 34 - 2: 11 + 1: 26 + 2: 34 3: 11 4: 11 - 5: 6 + 5: 11 + 6: 6 HLT_e5_lhvloose_bBeeM6000_L1All: eventCount: 1 stepCounts: 0: 19 - 1: 8 + 1: 19 2: 8 3: 8 4: 8 - 5: 1 + 5: 8 + 6: 1 stepFeatures: 0: 43 - 1: 63 - 2: 18 + 1: 43 + 2: 63 3: 18 4: 18 - 5: 8 + 5: 18 + 6: 8 HLT_e5_lhvloose_bBeeM6000_L1BKeePrescaled: eventCount: 1 stepCounts: 0: 18 - 1: 15 - 2: 13 + 1: 18 + 2: 15 3: 13 4: 13 - 5: 1 + 5: 13 + 6: 1 stepFeatures: 0: 41 - 1: 62 - 2: 23 + 1: 41 + 2: 62 3: 23 4: 23 - 5: 11 + 5: 23 + 6: 11 HLT_e5_lhvloose_bBeeM6000_L1BKeePrimary: eventCount: 1 stepCounts: 0: 16 - 1: 7 + 1: 16 2: 7 3: 7 4: 7 - 5: 1 + 5: 7 + 6: 1 stepFeatures: 0: 37 - 1: 50 - 2: 16 + 1: 37 + 2: 50 3: 16 4: 16 - 5: 8 + 5: 16 + 6: 8 HLT_e5_lhvloose_bBeeM6000_L1BPH-0DR3-EM7J15_MU5VF: eventCount: 0 stepCounts: 0: 7 - 1: 5 - 2: 3 + 1: 7 + 2: 5 3: 3 4: 3 + 5: 3 stepFeatures: 0: 8 - 1: 10 - 2: 3 + 1: 8 + 2: 10 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 HLT_e5_lhvloose_bBeeM6000_L1EM22VHI: eventCount: 1 stepCounts: 0: 9 - 1: 3 + 1: 9 2: 3 3: 3 4: 3 - 5: 1 + 5: 3 + 6: 1 stepFeatures: 0: 19 - 1: 23 - 2: 8 + 1: 19 + 2: 23 3: 8 4: 8 - 5: 4 + 5: 8 + 6: 4 HLT_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0DR3-EM7J15_MU5VF: eventCount: 0 stepCounts: @@ -6597,6 +6988,7 @@ HLT_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0DR3-EM7J15_MU5VF: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 @@ -6605,40 +6997,45 @@ HLT_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0DR3-EM7J15_MU5VF: 4: 1 5: 1 6: 1 + 7: 1 HLT_e5_lhvloose_j70_j50a_j0_DJMASS1000j50_xe50_tcpufit_L1MJJ-500-NFF: eventCount: 0 stepCounts: 0: 4 - 1: 3 + 1: 4 2: 3 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 13 - 1: 17 - 2: 7 + 1: 13 + 2: 17 3: 7 4: 7 - 5: 3 - 6: 1 + 5: 7 + 6: 3 + 7: 1 HLT_e5_lhvloose_j70_j50a_j0_DJMASS1000j50_xe50_tcpufit_L1jMJJ-500-NFF: eventCount: 0 stepCounts: 0: 4 1: 4 - 2: 3 + 2: 4 3: 3 4: 3 - 5: 2 + 5: 3 + 6: 2 stepFeatures: 0: 22 - 1: 35 - 2: 13 + 1: 22 + 2: 35 3: 13 4: 13 - 5: 5 - 6: 1 + 5: 13 + 6: 5 + 7: 1 HLT_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: eventCount: 1 stepCounts: @@ -6646,65 +7043,25 @@ HLT_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: 1: 9 2: 9 3: 9 - 4: 1 + 4: 9 + 5: 1 stepFeatures: 0: 17 - 1: 30 - 2: 16 + 1: 17 + 2: 30 3: 16 - 4: 10 -HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH: - eventCount: 3 - stepCounts: - 0: 11 - 1: 6 - 2: 6 - 3: 4 - 4: 3 - 5: 3 - 6: 3 - 7: 3 - 8: 3 - stepFeatures: - 0: 15 - 1: 9 - 2: 9 - 3: 4 - 4: 13 + 4: 16 5: 10 - 6: 9 - 7: 9 - 8: 9 -HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1eEM24L: - eventCount: 4 - stepCounts: - 0: 10 - 1: 7 - 2: 6 - 3: 4 - 4: 4 - 5: 4 - 6: 4 - 7: 4 - 8: 4 - stepFeatures: - 0: 12 - 1: 8 - 2: 7 - 3: 4 - 4: 17 - 5: 15 - 6: 13 - 7: 13 - 8: 13 HLT_e60_dnnmedium_L1EM22VHI: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e60_idperf_medium_L1EM22VHI: eventCount: 0 stepCounts: @@ -6742,69 +7099,83 @@ HLT_e60_lhmedium_L1EM22VHI: stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e60_lhmedium_L1eEM26M: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e60_lhmedium_nogsf_L1EM22VHI: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e60_lhmedium_noringer_L1EM22VHI: eventCount: 0 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 + 5: 1 stepFeatures: 0: 2 - 1: 3 - 2: 1 + 1: 2 + 2: 3 3: 1 4: 1 + 5: 1 HLT_e60_lhmedium_noringer_L1eEM26M: eventCount: 0 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 + 5: 1 stepFeatures: 0: 2 - 1: 3 - 2: 1 + 1: 2 + 2: 3 3: 1 4: 1 + 5: 1 HLT_e60_lhvloose_L1EM22VHI: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e60_lhvloose_L1eEM26M: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e70_lhloose_xe70_cell_L1EM22VHI: eventCount: 0 HLT_e70_lhloose_xe70_cell_L1eEM26M: @@ -6813,98 +7184,106 @@ HLT_e7_lhmedium_L1eEM5_mu24_L1MU14FCH: eventCount: 1 stepCounts: 0: 5 - 1: 4 - 2: 3 + 1: 5 + 2: 4 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 stepFeatures: 0: 9 - 1: 17 - 2: 4 + 1: 9 + 2: 17 3: 4 4: 4 - 5: 3 - 6: 2 + 5: 4 + 6: 3 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 HLT_e7_lhmedium_L1eEM5_mu24_L1MU18VFCH: eventCount: 1 stepCounts: 0: 5 - 1: 4 - 2: 3 + 1: 5 + 2: 4 3: 3 4: 3 - 5: 2 + 5: 3 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 stepFeatures: 0: 9 - 1: 17 - 2: 4 + 1: 9 + 2: 17 3: 4 4: 4 - 5: 3 - 6: 2 + 5: 4 + 6: 3 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 HLT_e7_lhmedium_mu24_L1MU14FCH: eventCount: 1 stepCounts: 0: 4 - 1: 3 - 2: 2 + 1: 4 + 2: 3 3: 2 4: 2 5: 2 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 stepFeatures: 0: 4 - 1: 7 - 2: 2 + 1: 4 + 2: 7 3: 2 4: 2 5: 2 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 HLT_e7_lhmedium_mu24_L1MU18VFCH: eventCount: 1 stepCounts: 0: 4 - 1: 3 - 2: 2 + 1: 4 + 2: 3 3: 2 4: 2 5: 2 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 stepFeatures: 0: 4 - 1: 7 - 2: 2 + 1: 4 + 2: 7 3: 2 4: 2 5: 2 6: 2 7: 2 - 8: 1 + 8: 2 9: 1 + 10: 1 HLT_e80_lhvloose_L1EM22VHI: eventCount: 0 HLT_e80_lhvloose_L1eEM26M: @@ -6921,94 +7300,102 @@ HLT_e9_lhtight_e4_etcut_1invmAB5_L1JPSI-1M5-eEM9: 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 + 6: 2 stepFeatures: 0: 96 - 1: 175 - 2: 96 - 3: 5 + 1: 69 + 2: 175 + 3: 96 4: 5 - 5: 2 -HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7: + 5: 5 + 6: 2 +HLT_e9_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 -HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9: - eventCount: 2 +HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7: + eventCount: 0 +HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9: + eventCount: 1 stepCounts: 0: 4 1: 4 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 + 10: 1 stepFeatures: 0: 6 - 1: 14 - 2: 5 + 1: 6 + 2: 14 3: 5 4: 5 - 5: 2 - 6: 34 - 7: 33 - 8: 58 - 9: 58 -HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM7: + 5: 5 + 6: 2 + 7: 8 + 8: 8 + 9: 8 + 10: 8 +HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 -HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM9: - eventCount: 2 +HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM9: + eventCount: 1 stepCounts: 0: 4 1: 4 2: 4 3: 4 4: 4 - 5: 2 + 5: 4 6: 2 7: 2 8: 2 9: 2 10: 2 + 11: 1 stepFeatures: 0: 6 - 1: 14 - 2: 5 + 1: 6 + 2: 14 3: 5 4: 5 - 5: 2 - 6: 34 - 7: 33 - 8: 58 - 9: 58 - 10: 58 -HLT_e9_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: - eventCount: 0 + 5: 5 + 6: 2 + 7: 8 + 8: 8 + 9: 8 + 10: 8 + 11: 8 HLT_e9_lhvloose_L1eEM5_mu20_mu8noL1_L1MU14FCH: eventCount: 0 stepCounts: 0: 4 1: 4 - 2: 2 + 2: 4 3: 2 4: 2 - 5: 1 + 5: 2 6: 1 7: 1 8: 1 9: 1 + 10: 1 stepFeatures: 0: 5 - 1: 11 - 2: 3 + 1: 5 + 2: 11 3: 3 4: 3 - 5: 2 - 6: 1 + 5: 3 + 6: 2 7: 1 8: 1 9: 1 + 10: 1 HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_2mu4_l2io_L1BPH-0M9-EM7-EM5_2MU3V: eventCount: 0 stepFeatures: @@ -7017,29 +7404,33 @@ HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0M9-EM7-EM5_MU5VF: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 6 - 1: 10 + 1: 3 + 2: 10 HLT_e9_lhvloose_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0M9-EM7-EM5: eventCount: 0 stepCounts: 0: 5 - 1: 3 + 1: 5 2: 3 3: 3 + 4: 3 stepFeatures: 0: 31 - 1: 49 - 2: 16 - 3: 14 - 4: 6 - 5: 8 + 1: 24 + 2: 49 + 3: 16 + 4: 14 + 5: 6 + 6: 8 HLT_e9_lhvloose_mu20_mu8noL1_L1MU14FCH: eventCount: 0 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 @@ -7047,10 +7438,11 @@ HLT_e9_lhvloose_mu20_mu8noL1_L1MU14FCH: 7: 1 8: 1 9: 1 + 10: 1 stepFeatures: 0: 2 - 1: 4 - 2: 1 + 1: 2 + 2: 4 3: 1 4: 1 5: 1 @@ -7058,12 +7450,13 @@ HLT_e9_lhvloose_mu20_mu8noL1_L1MU14FCH: 7: 1 8: 1 9: 1 + 10: 1 HLT_e9_lhvloose_mu20_mu8noL1_L1MU18VFCH: eventCount: 0 stepCounts: 0: 2 1: 2 - 2: 1 + 2: 2 3: 1 4: 1 5: 1 @@ -7071,10 +7464,11 @@ HLT_e9_lhvloose_mu20_mu8noL1_L1MU18VFCH: 7: 1 8: 1 9: 1 + 10: 1 stepFeatures: 0: 2 - 1: 4 - 2: 1 + 1: 2 + 2: 4 3: 1 4: 1 5: 1 @@ -7082,6 +7476,7 @@ HLT_e9_lhvloose_mu20_mu8noL1_L1MU18VFCH: 7: 1 8: 1 9: 1 + 10: 1 HLT_e9_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: eventCount: 0 stepCounts: @@ -7089,12 +7484,14 @@ HLT_e9_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: 1: 9 2: 9 3: 9 + 4: 9 stepFeatures: 0: 16 - 1: 29 - 2: 12 + 1: 16 + 2: 29 3: 12 - 4: 9 + 4: 12 + 5: 9 HLT_fslrt0_L14J15: eventCount: 0 HLT_fslrt0_L1All: diff --git a/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py b/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py index f8fe61cfe768efa1d3f32356c492faf48ca3a58b..2f2f30f0dcfd0dc98764e86a3a1ade4615c45642 100644 --- a/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py +++ b/Trigger/TrigValidation/TrigInDetValidation/python/TrigInDetArtSteps.py @@ -99,6 +99,10 @@ class TrigInDetReco(ExecStep): chains += "'HLT_e30_idperf_loose_lrtloose_L1EM22VHI'," chains += "'HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI'," chains += "'HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH'," + + # new chains + chains += "'HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI'," + chains += "'HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH'," flags += 'doEgammaSlice=True;' if (i=='electron') : # chains += "'HLT_e5_etcut_L1EM3'," ## need an idperf chain once one is in the menu @@ -110,6 +114,10 @@ class TrigInDetReco(ExecStep): if (i=='electron-tnp') : chains += "'HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI'," chains += "'HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI'," + + # new chains + chains += "'HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI'," + chains += "'HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI'," flags += 'doEgammaSlice=True;' if (i=='tau') : chains += "'HLT_tau25_idperf_tracktwoMVA_L1TAU12IM'," @@ -408,3 +416,5 @@ class TrigInDetCpuCostStep(RefComparisonStep): self.args = self.input_file + " " + self.reference + " -o " + self.output_dir + " " + self.extra Step.configure(self, test) + + diff --git a/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py b/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py index d40b6413d534c4863b1c18afc96f976f92f3fc74..fdeeb4ffe826c7c9a6e04d7a64316e681e28c687 100644 --- a/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py +++ b/Trigger/TrigValidation/TrigInDetValidation/share/TrigInDetValidation_AODtoTrkNtuple.py @@ -222,26 +222,47 @@ if ( True ) : # electron lrt e tag "HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=1", "HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=1", + + # new chains + "HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=1", + "HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=1", "HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=1", "HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1EM22VHI:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=1", + # electron lrt photon tag "HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=0", "HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=0", + # new chains + "HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=0", + "HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=0", + "HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_FTF:roi=HLT_Roi_FastElectron_LRT:te=0", "HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1EM20VH:HLT_IDTrack_ElecLRT_IDTrig:roi=HLT_Roi_FastElectron_LRT:te=0", # double electron chains for tag and probe analysis "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_tag:roi=HLT_Roi_FastElectron:te=0", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_probe:roi=HLT_Roi_FastElectron:te=1", + + # new chains + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_tag:roi=HLT_Roi_FastElectron:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_FTF:extra=el_probe:roi=HLT_Roi_FastElectron:te=1", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_tag:te=0", "HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", + # new chains + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_IDTrig:extra=el_probe:te=1", + "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", "HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", + #new chains + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_tag:te=0", + "HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI:key=HLT_IDTrack_Electron_GSF:extra=el_probe:te=1", + # two stage tau FTF "HLT_tau.*_idperf.*tracktwo.*:HLT_IDTrack_TauCore_FTF:roi=HLT_Roi_TauCore", "HLT_tau.*_idperf.*tracktwo.*:HLT_IDTrack_TauIso_FTF:roi=HLT_Roi_TauIso", diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_pu40_TnP.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_pu40_TnP.py index 8c6fe6f39ada1cf6dc74b81e9026bd0acb8fb5a3..34f9965fe57919dc8a78d16b82e740ae993b47f9 100755 --- a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_pu40_TnP.py +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_pu40_TnP.py @@ -43,7 +43,14 @@ Jobs = [( "Truth", " TIDAdata-run3.dat -o data-hists.ro Comp = [( "L2ele", "L2electronTnP", "data-hists.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_etcut_idperf_50invmAB130_FTF_FE e26_e14_etcut_idperf_50invmAB130_FTF_FE_1_probe -d HLTL2-plots " ), ( "L2eleoffline", "L2electronTnP", "data-hists-offline.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_etcut_idperf_50invmAB130_FTF_FE e26_e14_etcut_idperf_50invmAB130_FTF_FE_1_probe -d HLTL2-plots-offline " ), ( "EFele", "EFelectronTnP", "data-hists.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_etcut_nogsf_idperf_50invmAB130_FTF_FE_1_probe e26_e14_etcut_nogsf_idperf_50invmAB130_IDTrig_1_probe e26_e14_etcut_idperf_50invmAB130_GSF_1_probe e26_e14_etcut_idperf_50invmAB130_GSF -d HLTEF-plots " ), - ( "EFeleoffline", "EFelectronTnP", "data-hists-offline.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_etcut_nogsf_idperf_50invmAB130_FTF_FE_1_probe e26_e14_etcut_nogsf_idperf_50invmAB130_IDTrig_1_probe e26_e14_etcut_idperf_50invmAB130_GSF_1_probe e26_e14_etcut_idperf_50invmAB130_GSF -d HLTEF-plots-offline " ) ] + ( "EFeleoffline", "EFelectronTnP", "data-hists-offline.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_etcut_nogsf_idperf_50invmAB130_FTF_FE_1_probe e26_e14_etcut_nogsf_idperf_50invmAB130_IDTrig_1_probe e26_e14_etcut_idperf_50invmAB130_GSF_1_probe e26_e14_etcut_idperf_50invmAB130_GSF -d HLTEF-plots-offline " ), + + # new chains + ( "L2ele", "L2electronTnP", "data-hists.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_idperf_tight_50invmAB130_FTF_FE e26_e14_idperf_tight_50invmAB130_FTF_FE_1_probe -d HLTL2-plots " ), + ( "L2eleoffline", "L2electronTnP", "data-hists-offline.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_idperf_tight_50invmAB130_FTF_FE e26_e14_idperf_tight_50invmAB130_FTF_FE_1_probe -d HLTL2-plots-offline " ), + ( "EFele", "EFelectronTnP", "data-hists.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_nogsf_idperf_tight_50invmAB130_FTF_FE_1_probe e26_e14_nogsf_idperf_tight_50invmAB130_IDTrig_1_probe e26_e14_idperf_tight_50invmAB130_GSF_1_probe e26_e14_idperf_tight_50invmAB130_GSF -d HLTEF-plots " ), + ( "EFeleoffline", "EFelectronTnP", "data-hists-offline.root", " -c TIDAhisto-panel-TnP.dat -l e26_e14_nogsf_idperf_tight_50invmAB130_FTF_FE_1_probe e26_e14_nogsf_idperf_tight_50invmAB130_IDTrig_1_probe e26_e14_idperf_tight_50invmAB130_GSF_1_probe e26_e14_idperf_tight_50invmAB130_GSF -d HLTEF-plots-offline " ), + ] diff --git a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_tier0_pu40_TnP.py b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_tier0_pu40_TnP.py index 527480c6583e877c19bfb169362c7c1d2b0b2344..d3b9d521187c41d5ef24c39ee1f9f93580b62edc 100755 --- a/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_tier0_pu40_TnP.py +++ b/Trigger/TrigValidation/TrigInDetValidation/test/test_trigID_el_zee_tier0_pu40_TnP.py @@ -40,7 +40,10 @@ preinclude_file = 'all:TrigInDetValidation/TIDV_cond_fix.py' #conditions fix for Jobs = [] Comp = [ ( "L2electron", "L2electronTnP", "data-hists-tier0.root", " -b HLT/TRIDT/Egamma/All -s '_HLT_IDTrack' '/HLT_IDTrack' -c TIDAhisto-tier0-TnP.dat -l e26_e14_etcut_idperf_50invmAB130_FTF_FE e26_e14_etcut_idperf_50invmAB130_FTF_FE_el_probe_1 --ncols 3 -d HLTL2-plots-electron " ), - ( "EFelectron", "EFelectronTnP", "data-hists-tier0.root", " -b HLT/TRIDT/Egamma/All -s '_HLT_IDTrack' '/HLT_IDTrack' -c TIDAhisto-tier0-TnP.dat -l e26_e14_etcut_idperf_50invmAB130_FTF_FE_el_probe_1 e26_e14_etcut_idperf_50invmAB130_IDTrig_el_probe_1 e26_e14_etcut_idperf_gsf_50invmAB130_GSF_el_probe_1 e26_e14_etcut_idperf_gsf_50invmAB130_GSF --ncols 3 -d HLTEF-plots-electron " ) ] + ( "EFelectron", "EFelectronTnP", "data-hists-tier0.root", " -b HLT/TRIDT/Egamma/All -s '_HLT_IDTrack' '/HLT_IDTrack' -c TIDAhisto-tier0-TnP.dat -l e26_e14_etcut_idperf_50invmAB130_FTF_FE_el_probe_1 e26_e14_etcut_idperf_50invmAB130_IDTrig_el_probe_1 e26_e14_etcut_idperf_gsf_50invmAB130_GSF_el_probe_1 e26_e14_etcut_idperf_gsf_50invmAB130_GSF --ncols 3 -d HLTEF-plots-electron " ), + ( "L2electron", "L2electronTnP", "data-hists-tier0.root", " -b HLT/TRIDT/Egamma/All -s '_HLT_IDTrack' '/HLT_IDTrack' -c TIDAhisto-tier0-TnP.dat -l e26_e14_idperf_tight_50invmAB130_FTF_FE e26_e14_idperf_tight_50invmAB130_FTF_FE_el_probe_1 --ncols 3 -d HLTL2-plots-electron " ), + ( "EFelectron", "EFelectronTnP", "data-hists-tier0.root", " -b HLT/TRIDT/Egamma/All -s '_HLT_IDTrack' '/HLT_IDTrack' -c TIDAhisto-tier0-TnP.dat -l e26_e14_idperf_tight_50invmAB130_FTF_FE_el_probe_1 e26_e14_idperf_tight_50invmAB130_IDTrig_el_probe_1 e26_e14_idperf_tight_gsf_50invmAB130_GSF_el_probe_1 e26_e14_idperf_tight_gsf_50invmAB130_GSF --ncols 3 -d HLTEF-plots-electron " ), + ] from AthenaCommon.Include import include include("TrigInDetValidation/TrigInDetValidation_Base.py") diff --git a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref index 80efa20be3ea193c8d27cc5b3b7b0dcb7c50f8da..e8ece9e68173428d52af4483c8507a714b4ae171 100644 --- a/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref +++ b/Trigger/TrigValidation/TrigP1Test/share/ref_v1Dev_decodeBS_build.ref @@ -42,59 +42,69 @@ HLT_2e5_lhvloose_bBeeM6000_L1All: eventCount: 0 stepCounts: 0: 13 - 1: 3 - 2: 2 + 1: 13 + 2: 3 3: 2 4: 2 + 5: 2 stepFeatures: 0: 52 - 1: 55 - 2: 4 + 1: 36 + 2: 55 3: 4 4: 4 + 5: 4 HLT_2e5_lhvloose_bBeeM6000_L1BKeePrescaled: eventCount: 0 stepCounts: 0: 6 - 1: 5 - 2: 3 + 1: 6 + 2: 5 3: 3 4: 3 + 5: 3 stepFeatures: 0: 24 - 1: 43 - 2: 8 - 3: 7 + 1: 20 + 2: 43 + 3: 8 4: 7 + 5: 7 HLT_2e5_lhvloose_bBeeM6000_L1BKeePrimary: eventCount: 0 stepCounts: 0: 4 - 1: 1 + 1: 4 + 2: 1 stepFeatures: 0: 13 - 1: 24 + 1: 12 + 2: 24 HLT_2e5_lhvloose_bBeeM6000_L1BPH-0M9-EM7-EM5_MU5VF: eventCount: 0 HLT_2e5_lhvloose_bBeeM6000_L1EM22VHI: eventCount: 0 stepCounts: 0: 3 + 1: 3 stepFeatures: 0: 10 - 1: 16 + 1: 10 + 2: 16 HLT_2e5_lhvloose_nogsf_bBeeM6000_L12EM3: eventCount: 0 stepCounts: 0: 13 - 1: 3 - 2: 2 + 1: 13 + 2: 3 3: 2 + 4: 2 stepFeatures: 0: 48 - 1: 55 - 2: 4 + 1: 36 + 2: 55 3: 4 + 4: 4 HLT_2g10_loose_L1eEM9_mu20_L1MU14FCH: eventCount: 0 stepFeatures: @@ -1335,29 +1345,33 @@ HLT_e10_lhvloose_L1EM7: stepCounts: 0: 6 1: 6 - 2: 5 + 2: 6 3: 5 4: 5 + 5: 5 stepFeatures: 0: 7 - 1: 16 - 2: 5 + 1: 7 + 2: 16 3: 5 4: 5 + 5: 5 HLT_e10_lhvloose_L1eEM9: eventCount: 0 stepCounts: 0: 10 1: 10 - 2: 7 + 2: 10 3: 7 4: 7 + 5: 7 stepFeatures: 0: 13 - 1: 24 - 2: 8 + 1: 13 + 2: 24 3: 8 4: 8 + 5: 8 HLT_e120_etcut_L1EM22VHI: eventCount: 0 HLT_e120_etcut_L1eEM26M: @@ -1382,76 +1396,86 @@ HLT_e140_lhloose_noringer_L1EM22VHI: eventCount: 0 HLT_e140_lhloose_noringer_L1eEM26M: eventCount: 0 -HLT_e14_etcut_idperf_L1EM7: - eventCount: 17 +HLT_e14_idperf_loose_L1EM7: + eventCount: 2 stepCounts: - 0: 20 - 1: 20 - 2: 17 - 3: 17 - 4: 17 + 0: 5 + 1: 5 + 2: 2 + 3: 2 + 4: 2 stepFeatures: - 0: 24 - 1: 22 - 2: 18 - 3: 18 - 4: 18 -HLT_e14_etcut_idperf_L1eEM9: - eventCount: 17 + 0: 6 + 1: 6 + 2: 2 + 3: 2 + 4: 2 +HLT_e14_idperf_loose_L1eEM9: + eventCount: 2 stepCounts: - 0: 20 - 1: 20 - 2: 17 - 3: 17 - 4: 17 + 0: 7 + 1: 7 + 2: 2 + 3: 2 + 4: 2 stepFeatures: - 0: 31 - 1: 29 - 2: 24 - 3: 24 - 4: 24 + 0: 9 + 1: 9 + 2: 2 + 3: 2 + 4: 2 HLT_e14_idperf_tight_L1EM7: - eventCount: 0 + eventCount: 1 stepCounts: 0: 2 1: 2 + 2: 1 + 3: 1 + 4: 1 stepFeatures: 0: 3 - 1: 2 + 1: 3 + 2: 1 + 3: 1 + 4: 1 HLT_e14_idperf_tight_L1eEM9: - eventCount: 1 + eventCount: 2 stepCounts: 0: 6 1: 6 - 2: 1 - 3: 1 - 4: 1 + 2: 2 + 3: 2 + 4: 2 stepFeatures: 0: 8 - 1: 7 - 2: 1 - 3: 1 - 4: 1 + 1: 8 + 2: 2 + 3: 2 + 4: 2 HLT_e14_idperf_tight_nogsf_L1EM7: - eventCount: 0 + eventCount: 1 stepCounts: 0: 2 1: 2 + 2: 1 + 3: 1 stepFeatures: 0: 3 - 1: 2 + 1: 3 + 2: 1 + 3: 1 HLT_e14_idperf_tight_nogsf_L1eEM9: - eventCount: 1 + eventCount: 2 stepCounts: 0: 6 1: 6 - 2: 1 - 3: 1 + 2: 2 + 3: 2 stepFeatures: 0: 8 - 1: 7 - 2: 1 - 3: 1 + 1: 8 + 2: 2 + 3: 2 HLT_e14_lhtight_e4_etcut_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 stepFeatures: @@ -1460,15 +1484,15 @@ HLT_e14_lhtight_e4_etcut_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 0 stepFeatures: 0: 191 -HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12: +HLT_e14_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 -HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15: +HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 -HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM12: +HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 0 -HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM15: +HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 -HLT_e14_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: +HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 0 HLT_e14_lhtight_mu6_dRAB15_invmAB10_L1LFV-eEM15L-MU5VF: eventCount: 0 @@ -1476,30 +1500,34 @@ HLT_e14_lhvloose_L1EM10VH: eventCount: 0 stepCounts: 0: 5 - 1: 4 - 2: 1 + 1: 5 + 2: 4 3: 1 4: 1 + 5: 1 stepFeatures: 0: 5 - 1: 10 - 2: 1 + 1: 5 + 2: 10 3: 1 4: 1 + 5: 1 HLT_e14_lhvloose_L1eEM12L: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 2 - 1: 1 + 1: 2 2: 1 3: 1 4: 1 + 5: 1 HLT_e17_lhloose_mu14_L1EM15VH_MU8F: eventCount: 0 HLT_e17_lhloose_mu14_L1eEM18L_MU8F: @@ -1512,8 +1540,10 @@ HLT_e17_lhvloose_L1EM15VHI: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_idperf_loose_lrtloose_L1EM15VH: eventCount: 1 stepCounts: @@ -1546,54 +1576,70 @@ HLT_e20_lhloose_L1EM15VH: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhmedium_L1EM15VH: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhtight_L1EM15VH: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhtight_ivarloose_L12EM7: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhtight_ivarloose_L1EM15VH: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhtight_ivarloose_L1EM15VHI: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhtight_ivarloose_L1ZAFB-25DPHI-eEM18M: eventCount: 0 HLT_e20_lhvloose_L1EM15VH: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e20_lhvloose_L1eEM18L: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 + 2: 1 stepFeatures: 0: 2 - 1: 1 + 1: 2 + 2: 1 HLT_e24_lhmedium_g12_loose_g12_loose_02dRAB_02dRAC_02dRBC_L1EM20VH_3EM10VH: eventCount: 0 HLT_e24_lhmedium_g12_loose_g12_loose_02dRAB_02dRAC_02dRBC_L1eEM24L_3eEM12L: @@ -1635,11 +1681,13 @@ HLT_e26_etcut_L1EM22VHI: stepCounts: 0: 4 1: 4 - 2: 3 + 2: 4 + 3: 3 stepFeatures: 0: 4 - 1: 5 - 2: 3 + 1: 4 + 2: 5 + 3: 3 HLT_e26_idperf_loose_L1EM22VHI: eventCount: 0 HLT_e26_idperf_loose_L1eEM26M: @@ -1662,17 +1710,17 @@ HLT_e26_lhtight_e14_etcut_L1EM22VHI: 0: 5 HLT_e26_lhtight_e14_etcut_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI: +HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1EM22VHI: eventCount: 0 -HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1eEM26M: +HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI: +HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI: eventCount: 0 -HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1eEM26M: +HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1EM22VHI: +HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI: eventCount: 0 -HLT_e26_lhtight_e14_etcut_probe_50invmAB130_L1eEM26M: +HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1eEM26M: eventCount: 0 HLT_e26_lhtight_ivarloose_2j20_0eta290_020jvt_boffperf_pf_ftf_L1EM22VHI: eventCount: 0 @@ -1698,17 +1746,17 @@ HLT_e26_lhtight_ivarloose_e12_lhvloose_probe_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_e12_lhvloose_probe_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_ivarloose_e14_etcut_idperf_probe_L1EM22VHI: - eventCount: 0 HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1eEM26M: eventCount: 0 +HLT_e26_lhtight_ivarloose_e14_idperf_tight_probe_L1EM22VHI: + eventCount: 0 HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_ivarloose_e15_etcut_idperf_probe_L1eEM26M: +HLT_e26_lhtight_ivarloose_e15_idperf_tight_probe_L1eEM26M: eventCount: 0 HLT_e26_lhtight_ivarloose_e17_lhvloose_probe_L1EM22VHI: eventCount: 0 @@ -1736,15 +1784,15 @@ HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1eEM26M: eventCount: 0 +HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI: + eventCount: 0 HLT_e26_lhtight_ivarloose_e5_lhtight_noringer_probe_L1eEM26M: eventCount: 0 HLT_e26_lhtight_ivarloose_e5_lhtight_probe_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_e5_lhtight_probe_L1eEM26M: eventCount: 0 -HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI: - eventCount: 0 -HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1eEM26M: +HLT_e26_lhtight_ivarloose_e5_loose_lrtloose_idperf_probe_L1eEM26M: eventCount: 0 HLT_e26_lhtight_ivarloose_e7_lhmedium_probe_L1EM22VHI: eventCount: 0 @@ -1784,12 +1832,14 @@ HLT_e26_lhtight_ivarloose_noringer_L1EM22VHI: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 2: 1 3: 1 4: 1 + 5: 1 HLT_e26_lhtight_ivarloose_tau100_mediumRNN_tracktwoLLP_probe_03dRAB_L1EM22VHI: eventCount: 0 HLT_e26_lhtight_ivarloose_tau160_mediumRNN_tracktwoMVA_probe_03dRAB_L1EM22VHI: @@ -1852,12 +1902,14 @@ HLT_e28_lhtight_ivarloose_noringer_L1EM22VHI: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 2: 1 3: 1 4: 1 + 5: 1 HLT_e28_lhtight_ivarloose_noringer_L1eEM26M: eventCount: 0 HLT_e300_etcut_L1EM22VHI: @@ -1906,203 +1958,241 @@ HLT_e5_dnnloose_L1EM3: eventCount: 0 stepCounts: 0: 28 - 1: 18 - 2: 14 + 1: 28 + 2: 18 3: 14 4: 14 + 5: 14 stepFeatures: 0: 46 - 1: 62 - 2: 17 + 1: 46 + 2: 62 3: 17 4: 17 + 5: 17 HLT_e5_dnnmedium_L1EM3: eventCount: 0 stepCounts: 0: 28 - 1: 19 - 2: 14 + 1: 28 + 2: 19 3: 14 4: 14 + 5: 14 stepFeatures: 0: 49 - 1: 68 - 2: 19 + 1: 49 + 2: 68 3: 19 4: 19 + 5: 19 HLT_e5_dnntight_L1EM3: eventCount: 0 stepCounts: 0: 25 - 1: 15 - 2: 10 + 1: 25 + 2: 15 3: 10 4: 10 + 5: 10 stepFeatures: 0: 42 - 1: 56 - 2: 14 + 1: 42 + 2: 56 3: 14 4: 14 + 5: 14 HLT_e5_etcut_L1EM3: eventCount: 33 stepCounts: 0: 38 - 1: 33 + 1: 38 2: 33 + 3: 33 stepFeatures: 0: 132 - 1: 205 - 2: 116 + 1: 132 + 2: 205 + 3: 116 +HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH: + eventCount: 0 + stepCounts: + 0: 7 + 1: 4 + 2: 3 + 3: 1 + stepFeatures: + 0: 7 + 1: 4 + 2: 3 + 3: 1 +HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1eEM24L: + eventCount: 0 HLT_e5_idperf_tight_L1EM3: - eventCount: 13 + eventCount: 14 stepCounts: 0: 25 - 1: 19 - 2: 13 - 3: 13 - 4: 13 + 1: 25 + 2: 14 + 3: 14 + 4: 14 stepFeatures: 0: 42 - 1: 30 - 2: 18 - 3: 18 - 4: 18 + 1: 42 + 2: 20 + 3: 20 + 4: 20 HLT_e5_idperf_tight_L1eEM5: - eventCount: 22 + eventCount: 26 stepCounts: 0: 48 - 1: 46 - 2: 22 - 3: 22 - 4: 22 + 1: 48 + 2: 26 + 3: 26 + 4: 26 stepFeatures: 0: 349 - 1: 226 - 2: 38 - 3: 38 - 4: 38 + 1: 349 + 2: 48 + 3: 48 + 4: 48 HLT_e5_idperf_tight_nogsf_L1EM3: - eventCount: 13 + eventCount: 14 stepCounts: 0: 25 - 1: 19 - 2: 13 - 3: 13 + 1: 25 + 2: 14 + 3: 14 stepFeatures: 0: 42 - 1: 30 - 2: 18 - 3: 18 + 1: 42 + 2: 20 + 3: 20 HLT_e5_idperf_tight_nogsf_L1eEM5: - eventCount: 22 + eventCount: 26 stepCounts: 0: 48 - 1: 46 - 2: 22 - 3: 22 + 1: 48 + 2: 26 + 3: 26 stepFeatures: 0: 349 - 1: 226 - 2: 38 - 3: 38 + 1: 349 + 2: 48 + 3: 48 HLT_e5_lhtight_L1EM3: eventCount: 0 stepCounts: 0: 25 - 1: 15 - 2: 10 + 1: 25 + 2: 15 3: 10 4: 10 + 5: 10 stepFeatures: 0: 42 - 1: 56 - 2: 14 + 1: 42 + 2: 56 3: 14 4: 14 + 5: 14 HLT_e5_lhtight_e14_etcut_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 2 - 1: 7 + 1: 2 + 2: 7 HLT_e5_lhtight_e14_etcut_1invmAB5_L1JPSI-1M5-eEM15: eventCount: 0 stepCounts: 0: 6 1: 6 - 2: 1 + 2: 6 3: 1 4: 1 + 5: 1 stepFeatures: 0: 48 - 1: 70 - 2: 7 - 3: 1 + 1: 48 + 2: 70 + 3: 7 4: 1 + 5: 1 HLT_e5_lhtight_e14_etcut_probe_1invmAB5_L1JPSI-1M5-EM12: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 1 + 1: 1 HLT_e5_lhtight_e9_etcut_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 6 - 1: 16 - 2: 2 - 3: 1 + 1: 6 + 2: 16 + 3: 2 4: 1 + 5: 1 HLT_e5_lhtight_e9_etcut_1invmAB5_L1JPSI-1M5-eEM9: eventCount: 0 stepCounts: 0: 8 1: 8 - 2: 2 + 2: 8 3: 2 4: 2 + 5: 2 stepFeatures: 0: 71 - 1: 104 - 2: 27 - 3: 3 + 1: 71 + 2: 104 + 3: 27 4: 3 + 5: 3 HLT_e5_lhtight_e9_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 4 - 1: 6 - 2: 1 + 1: 4 + 2: 6 3: 1 4: 1 + 5: 1 HLT_e5_lhtight_noringer_L1EM3: eventCount: 0 stepCounts: 0: 31 - 1: 23 - 2: 19 + 1: 31 + 2: 23 3: 19 4: 19 + 5: 19 stepFeatures: 0: 51 - 1: 65 - 2: 25 + 1: 51 + 2: 65 3: 25 4: 25 + 5: 25 HLT_e5_lhvloose_bBeeM6000_2mu4_l2io_L1BPH-0DR3-EM7J15_2MU3V: eventCount: 0 HLT_e5_lhvloose_bBeeM6000_L14J15: @@ -2111,53 +2201,63 @@ HLT_e5_lhvloose_bBeeM6000_L1All: eventCount: 0 stepCounts: 0: 29 - 1: 4 - 2: 3 + 1: 29 + 2: 4 3: 3 4: 3 + 5: 3 stepFeatures: 0: 52 - 1: 71 - 2: 5 + 1: 52 + 2: 71 3: 5 4: 5 + 5: 5 HLT_e5_lhvloose_bBeeM6000_L1BKeePrescaled: eventCount: 0 stepCounts: 0: 10 - 1: 9 - 2: 6 + 1: 10 + 2: 9 3: 6 4: 6 + 5: 6 stepFeatures: 0: 24 - 1: 48 - 2: 10 + 1: 24 + 2: 48 3: 10 4: 10 + 5: 10 HLT_e5_lhvloose_bBeeM6000_L1BKeePrimary: eventCount: 0 stepCounts: 0: 5 - 1: 1 + 1: 5 + 2: 1 stepFeatures: 0: 13 - 1: 25 + 1: 13 + 2: 25 HLT_e5_lhvloose_bBeeM6000_L1BPH-0DR3-EM7J15_MU5VF: eventCount: 0 stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 2 - 1: 8 + 1: 2 + 2: 8 HLT_e5_lhvloose_bBeeM6000_L1EM22VHI: eventCount: 0 stepCounts: 0: 3 + 1: 3 stepFeatures: 0: 10 - 1: 16 + 1: 10 + 2: 16 HLT_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0DR3-EM7J15_MU5VF: eventCount: 0 HLT_e5_lhvloose_j70_j50a_j0_DJMASS1000j50_xe50_tcpufit_L1MJJ-500-NFF: @@ -2165,9 +2265,11 @@ HLT_e5_lhvloose_j70_j50a_j0_DJMASS1000j50_xe50_tcpufit_L1MJJ-500-NFF: stepCounts: 0: 1 1: 1 + 2: 1 stepFeatures: 0: 1 1: 1 + 2: 1 HLT_e5_lhvloose_j70_j50a_j0_DJMASS1000j50_xe50_tcpufit_L1jMJJ-500-NFF: eventCount: 0 HLT_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: @@ -2177,25 +2279,13 @@ HLT_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: 1: 5 2: 5 3: 5 + 4: 5 stepFeatures: 0: 7 - 1: 14 - 2: 5 + 1: 7 + 2: 14 3: 5 -HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH: - eventCount: 0 - stepCounts: - 0: 7 - 1: 4 - 2: 3 - 3: 1 - stepFeatures: - 0: 7 - 1: 4 - 2: 3 - 3: 1 -HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1eEM24L: - eventCount: 0 + 4: 5 HLT_e60_dnnmedium_L1EM22VHI: eventCount: 0 HLT_e60_idperf_medium_L1EM22VHI: @@ -2232,12 +2322,14 @@ HLT_e7_lhmedium_L1eEM5_mu24_L1MU14FCH: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 2: 1 3: 1 4: 1 + 5: 1 HLT_e7_lhmedium_L1eEM5_mu24_L1MU18VFCH: eventCount: 0 stepCounts: @@ -2246,12 +2338,14 @@ HLT_e7_lhmedium_L1eEM5_mu24_L1MU18VFCH: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 2: 1 3: 1 4: 1 + 5: 1 HLT_e7_lhmedium_mu24_L1MU14FCH: eventCount: 0 HLT_e7_lhmedium_mu24_L1MU18VFCH: @@ -2268,33 +2362,39 @@ HLT_e9_lhtight_e4_etcut_1invmAB5_L1JPSI-1M5-eEM9: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 + 2: 1 stepFeatures: 0: 259 - 1: 73 - 2: 27 -HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7: + 1: 60 + 2: 73 + 3: 27 +HLT_e9_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 -HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9: +HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7: + eventCount: 0 +HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 + 2: 1 stepFeatures: 0: 3 - 1: 6 -HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM7: + 1: 3 + 2: 6 +HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM7: eventCount: 0 -HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM9: +HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM9: eventCount: 0 stepCounts: 0: 2 - 1: 1 + 1: 2 + 2: 1 stepFeatures: 0: 3 - 1: 6 -HLT_e9_lhtight_e4_etcut_probe_1invmAB5_L1JPSI-1M5-EM7: - eventCount: 0 + 1: 3 + 2: 6 HLT_e9_lhvloose_L1eEM5_mu20_mu8noL1_L1MU14FCH: eventCount: 0 stepCounts: @@ -2303,12 +2403,14 @@ HLT_e9_lhvloose_L1eEM5_mu20_mu8noL1_L1MU14FCH: 2: 1 3: 1 4: 1 + 5: 1 stepFeatures: 0: 1 1: 1 2: 1 3: 1 4: 1 + 5: 1 HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_2mu4_l2io_L1BPH-0M9-EM7-EM5_2MU3V: eventCount: 0 HLT_e9_lhvloose_e5_lhvloose_bBeeM6000_mu6_l2io_L1BPH-0M9-EM7-EM5_MU5VF: @@ -2317,10 +2419,12 @@ HLT_e9_lhvloose_e5_lhvloose_nogsf_bBeeM6000_L1BPH-0M9-EM7-EM5: eventCount: 0 stepCounts: 0: 1 + 1: 1 stepFeatures: 0: 7 - 1: 12 - 2: 2 + 1: 5 + 2: 12 + 3: 2 HLT_e9_lhvloose_mu20_mu8noL1_L1MU14FCH: eventCount: 0 HLT_e9_lhvloose_mu20_mu8noL1_L1MU18VFCH: @@ -2330,13 +2434,15 @@ HLT_e9_lhvloose_nogsf_bBeeM6000_L1BPH-0DR3-EM7J15: stepCounts: 0: 5 1: 5 - 2: 3 + 2: 5 3: 3 + 4: 3 stepFeatures: 0: 6 - 1: 14 - 2: 3 + 1: 6 + 2: 14 3: 3 + 4: 3 HLT_fslrt0_L14J15: eventCount: 0 HLT_fslrt0_L1All: diff --git a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py index 8a1d05e2a60ada02d5a61c9572000938560005a2..21499feff7a50ccf6c288856a13ada1de473ae9a 100644 --- a/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py +++ b/Trigger/TriggerCommon/TrigEDMConfig/python/TriggerEDMRun3.py @@ -452,10 +452,10 @@ TriggerHLTListRun3 = [ ('xAOD::TrigElectronContainer#HLT_FastElectrons_LRT', 'BS ESD AODCOMM', 'Egamma', 'inViews:EMElectronViews_LRT'), ('xAOD::TrigElectronAuxContainer#HLT_FastElectrons_LRTAux.', 'BS ESD AODCOMM', 'Egamma'), - ('xAOD::TrackParticleContainer#HLT_IDTrack_Electron_FTF', 'BS ESD AODCOMM', 'Egamma', 'inViews:EMElectronViews'), + ('xAOD::TrackParticleContainer#HLT_IDTrack_Electron_FTF', 'BS ESD AODCOMM', 'Egamma', 'inViews:EMFastTrackingViews'), ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_Electron_FTFAux.', 'BS ESD AODCOMM', 'Egamma'), - ('xAOD::TrackParticleContainer#HLT_IDTrack_ElecLRT_FTF', 'BS ESD AODCOMM', 'Egamma', 'inViews:EMElectronViews_LRT'), + ('xAOD::TrackParticleContainer#HLT_IDTrack_ElecLRT_FTF', 'BS ESD AODCOMM', 'Egamma', 'inViews:EMFastTrackingViews_LRT'), ('xAOD::TrackParticleAuxContainer#HLT_IDTrack_ElecLRT_FTFAux.', 'BS ESD AODCOMM', 'Egamma'), ('xAOD::TrackParticleContainer#HLT_IDTrack_Electron_IDTrig', 'BS ESD AODFULL', 'Egamma', 'inViews:precisionTrackingViews'), @@ -1247,3 +1247,4 @@ def addExtraCollectionsToEDMList(edmList, extraList): else: # asking to add some collection which is already in the list - do nothing pass + diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Egamma/TrigEgammaKeys.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Egamma/TrigEgammaKeys.py index 2517da41f8b61e87b9e21ca4c360ee4a1dad94c7..45685bf3e4fea1c3170cc774601f07bb35acc2c2 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Egamma/TrigEgammaKeys.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Egamma/TrigEgammaKeys.py @@ -19,7 +19,7 @@ class TrigEgammaKeysBase(object): """Static class to collect all string manipulation in fast electron sequences """ - self.fastElectronRoIContainer = recordable("HLT_Roi_FastElectron") + self.fastTrackingRoIContainer = recordable("HLT_Roi_FastElectron") self.fastElectronContainer = recordable("HLT_FastElectrons") """Static class to collect all string manipulation in fast photon sequences """ @@ -67,6 +67,9 @@ class TrigEgammaKeysBase(object): def IDTrigConfig(self): return self._IDTrigConfig + @property + def fastTrackParticleContainer(self): + return self._IDTrigConfig.tracks_FTF() @@ -75,7 +78,7 @@ class TrigEgammaKeys_LRT(TrigEgammaKeysBase): def __init__(self,ion): TrigEgammaKeysBase.__init__(self,ion) - self.fastElectronRoIContainer = recordable("HLT_Roi_FastElectron_LRT") + self.fastTrackingRoIContainer = recordable("HLT_Roi_FastElectron_LRT") self.fastElectronContainer = recordable('HLT_FastElectrons_LRT') self.precisionElectronEMClusterContainer = recordable('HLT_TrigEMClusters_Electrons_LRT') self.precisionElectronCaloClusterContainer = recordable("HLT_CaloEMClusters_LRT") diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/ElectronChainConfiguration.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/ElectronChainConfiguration.py index 93035fc707c9169aad6de9180da91891be62bdfc..b4f130a34a6cb58dab790754c7bd726d2848fca6 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/ElectronChainConfiguration.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/ElectronChainConfiguration.py @@ -13,6 +13,7 @@ else: from ..CommonSequences.CaloSequences import fastCaloMenuSequence from ..CommonSequences.CaloSequences_FWD import fastCaloMenuSequence_FWD + from ..Electron.FastTrackingMenuSequences import fastTrackingMenuSequence, fastTrackingMenuSequence_LRT from ..Electron.FastElectronMenuSequences import fastElectronMenuSequence, fastElectronMenuSequence_LRT from ..Electron.PrecisionCaloMenuSequences import precisionCaloMenuSequence, precisionCaloMenuSequence_LRT from ..Electron.PrecisionElectronMenuSequences import precisionElectronMenuSequence, precisionElectronMenuSequence_LRT @@ -29,17 +30,17 @@ from AthenaMonitoringKernel.GenericMonitoringTool import GenericMonitoringTool, def electronFastCaloCfg( flags, is_probe_leg=False ): return fastCaloMenuSequence(flags, "Electron", is_probe_leg=is_probe_leg) -def fastElectronSequenceCfg( flags, is_probe_leg=False ): - return fastElectronMenuSequence(do_idperf=False, is_probe_leg=is_probe_leg) +def fastTrackingSequenceCfg( flags, is_probe_leg=False ): + return fastTrackingMenuSequence('Electron', is_probe_leg=is_probe_leg) -def fastElectronSequenceCfg_idperf( flags, is_probe_leg=False ): - return fastElectronMenuSequence(do_idperf=True, is_probe_leg=is_probe_leg) +def fastTrackingSequenceCfg_lrt( flags, is_probe_leg=False ): + return fastTrackingMenuSequence_LRT('Electron', is_probe_leg=is_probe_leg) -def fastElectronSequenceCfg_lrt( flags, is_probe_leg=False ): - return fastElectronMenuSequence_LRT(do_idperf=False, is_probe_leg=is_probe_leg) +def fastElectronSequenceCfg( flags, is_probe_leg=False ): + return fastElectronMenuSequence(is_probe_leg=is_probe_leg) -def fastElectronSequenceCfg_lrt_idperf( flags, is_probe_leg=False ): - return fastElectronMenuSequence_LRT(do_idperf=True, is_probe_leg=is_probe_leg) +def fastElectronSequenceCfg_lrt( flags, is_probe_leg=False ): + return fastElectronMenuSequence_LRT(is_probe_leg=is_probe_leg) def precisionCaloSequenceCfg( flags, is_probe_leg=False ): return precisionCaloMenuSequence('Electron', is_probe_leg=is_probe_leg) @@ -80,6 +81,8 @@ def precisionGSFElectronSequenceCfg_lrt( flags, is_probe_leg=False): def precisionElectronSequenceCfg_lrt( flags, is_probe_leg=False): return precisionElectronMenuSequence_LRT(is_probe_leg=is_probe_leg) + + # this must be moved to the HypoTool file: from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaTopoHypoTool @@ -157,9 +160,19 @@ class ElectronChainConfiguration(ChainConfigurationBase): else: stepNames += ['getFastCalo'] - # Step2 # Now lets do Fast Electron. Possible Flavours: + # getFastTracking + # getFastTracking_lrt + + if self.chainPart['lrtInfo']: + stepNames += ['getFastTracking_lrt'] + else: + stepNames += ['getFastTracking'] + + + # Step3 + # Now lets do Fast Electron. Possible Flavours: # getFastElectron # getFastElectron_lrt @@ -169,7 +182,7 @@ class ElectronChainConfiguration(ChainConfigurationBase): stepNames += ['getFastElectron'] - # Step3 + # Step4 # After Fast Electron we have to build PrecisionCalo for electorns. Current available variantas are: # getPrecisionCaloElectron # getPrecisionCaloElectron_lrt @@ -190,7 +203,7 @@ class ElectronChainConfiguration(ChainConfigurationBase): log.debug("This is an etcut chain. Returning here") return stepNames - # Step4 + # Step5 # After precisionCalo Electron we have to do precision tracking next. Current available variantas are: # getPrecisionTracking # getPrecisionTracking_lrt @@ -200,7 +213,7 @@ class ElectronChainConfiguration(ChainConfigurationBase): else: stepNames += ['getPrecisionTracking'] - # Step5 + # Step6 # Now if a chain is configured to do gsf refitting we need to add another tracking step for the GSF refitting: # getPrecisionTrack_GSFRefitted # getPrecisionTrack_GSFRefitted_lrt @@ -224,7 +237,7 @@ class ElectronChainConfiguration(ChainConfigurationBase): return stepNames - # Step6 + # Step7 # and Finally! once we have precision tracking adn precision calo, we can build our electrons!. Current available variantas are: # getPrecisionElectron # getPrecisionGSFElectron @@ -277,62 +290,70 @@ class ElectronChainConfiguration(ChainConfigurationBase): fastCaloCfg = electronFastCaloCfg return self.getStep(1,stepName,[ fastCaloCfg], is_probe_leg=is_probe_leg) + def getFastTracking(self,is_probe_leg=False): + stepName = "fast_tracking" + return self.getStep(2,stepName,[ fastTrackingSequenceCfg],is_probe_leg=is_probe_leg) + + def getFastTracking_lrt(self,is_probe_leg=False): + stepName = "fast_tracking_lrt" + return self.getStep(2,stepName,[ fastTrackingSequenceCfg_lrt],is_probe_leg=is_probe_leg) + def getFastElectron(self,is_probe_leg=False): from TrigBphysHypo.TrigMultiTrkComboHypoConfig import StreamerNoMuonDiElecFastComboHypoCfg, StreamerDiElecFastComboHypoCfg if "bBeeM6000" in self.chainDict['topo'] and 'BPH-0DR3-EM7J15' not in self.chainDict['L1item']: signatures = self.chainDict['signatures'] if signatures.count(signatures[0]) == len(signatures): stepName = "noMuon_fast_electron_bBee" - return self.getStep(2,stepName,sequenceCfgArray=[fastElectronSequenceCfg], comboHypoCfg=StreamerNoMuonDiElecFastComboHypoCfg, is_probe_leg=is_probe_leg) + return self.getStep(3,stepName,sequenceCfgArray=[fastElectronSequenceCfg], comboHypoCfg=StreamerNoMuonDiElecFastComboHypoCfg, is_probe_leg=is_probe_leg) else: stepName = "fast_electron_bBee" - return self.getStep(2,stepName,sequenceCfgArray=[fastElectronSequenceCfg], comboHypoCfg=StreamerDiElecFastComboHypoCfg, is_probe_leg=is_probe_leg) - elif 'idperf' in self.chainPart['idperfInfo']: - stepName = "fast_electron_idperf" - return self.getStep(2,stepName,[ fastElectronSequenceCfg_idperf], is_probe_leg=is_probe_leg) + return self.getStep(3,stepName,sequenceCfgArray=[fastElectronSequenceCfg], comboHypoCfg=StreamerDiElecFastComboHypoCfg, is_probe_leg=is_probe_leg) + elif self.chainPart['idperfInfo']: + stepName = "fast_electron_empty" + return self.getEmptyStep(3,stepName) else: stepName = "fast_electron" - return self.getStep(2,stepName,[ fastElectronSequenceCfg],is_probe_leg=is_probe_leg) + return self.getStep(3,stepName,[ fastElectronSequenceCfg],is_probe_leg=is_probe_leg) def getFastElectron_lrt(self,is_probe_leg=False): - if 'idperf' in self.chainPart['idperfInfo']: - stepName = "fast_electron_lrt_idperf" - return self.getStep(2,stepName,[ fastElectronSequenceCfg_lrt_idperf],is_probe_leg=is_probe_leg) + if self.chainPart['idperfInfo']: + stepName = "fast_electron_lrt_empty" + return self.getEmptyStep(3,stepName) else: stepName = "fast_electron_lrt" - return self.getStep(2,stepName,[ fastElectronSequenceCfg_lrt],is_probe_leg=is_probe_leg) + return self.getStep(3,stepName,[ fastElectronSequenceCfg_lrt],is_probe_leg=is_probe_leg) def getPrecisionCaloElectron(self,is_probe_leg=False): if self.chainPart['extra'] == 'ion': stepName = 'precisionCalo_ion_electron' - return self.getStep(3, stepName, [precisionCaloSequenceCfg_ion], is_probe_leg=is_probe_leg) + return self.getStep(4, stepName, [precisionCaloSequenceCfg_ion], is_probe_leg=is_probe_leg) stepName = "precisionCalo_electron" - return self.getStep(3,stepName,[ precisionCaloSequenceCfg], is_probe_leg=is_probe_leg) + return self.getStep(4,stepName,[ precisionCaloSequenceCfg], is_probe_leg=is_probe_leg) def getPrecisionCaloElectron_lrt(self,is_probe_leg=False): stepName = "precisionCalo_electron_lrt" - return self.getStep(3,stepName,[ precisionCaloSequenceCfg_lrt],is_probe_leg=is_probe_leg) + return self.getStep(4,stepName,[ precisionCaloSequenceCfg_lrt],is_probe_leg=is_probe_leg) def getPrecisionTracking(self,is_probe_leg=False): if self.chainPart['extra'] == 'ion': stepName = 'precisionTracking_ion_electron' - return self.getStep(4, stepName, [precisionTrackingSequenceCfg_ion], is_probe_leg=is_probe_leg) + return self.getStep(5, stepName, [precisionTrackingSequenceCfg_ion], is_probe_leg=is_probe_leg) stepName = "precisionTracking_electron" - return self.getStep(4,stepName,[ precisionTrackingSequenceCfg], is_probe_leg=is_probe_leg) + return self.getStep(5,stepName,[ precisionTrackingSequenceCfg], is_probe_leg=is_probe_leg) def getPrecisionTracking_lrt(self,is_probe_leg=False): stepName = "precisionTracking_electron_lrt" - return self.getStep(4,stepName,[ precisionTrackingSequenceCfg_lrt],is_probe_leg=is_probe_leg) + return self.getStep(5,stepName,[ precisionTrackingSequenceCfg_lrt],is_probe_leg=is_probe_leg) def getPrecisionTrack_GSFRefitted(self,is_probe_leg=False): stepName = "PrecisionTrack_GSFRefitted_electron" - return self.getStep(5,stepName,[precisionTrack_GSFRefittedSequenceCfg], is_probe_leg=is_probe_leg) + return self.getStep(6,stepName,[precisionTrack_GSFRefittedSequenceCfg], is_probe_leg=is_probe_leg) def getPrecisionTrack_GSFRefitted_lrt(self,is_probe_leg=False): stepName = "PrecisionTrack_GSFRefitted_electron_lrt" - return self.getStep(5,stepName,[precisionTrack_GSFRefittedSequenceCfg_lrt], is_probe_leg=is_probe_leg) + return self.getStep(6,stepName,[precisionTrack_GSFRefittedSequenceCfg_lrt], is_probe_leg=is_probe_leg) def getPrecisionElectron(self,is_probe_leg=False): @@ -341,28 +362,28 @@ class ElectronChainConfiguration(ChainConfigurationBase): if "Zee" in self.chainDict['topo']: stepName = "precision_electron_Zee"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronZeeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronZeeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif "Jpsiee" in self.chainDict['topo']: stepName = "precision_topoelectron_Jpsiee"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronJpsieeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diElectronJpsieeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif "Heg" in self.chainDict['topo']: stepName = "precision_electron_Heg"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diEgammaHegMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboTools=[diEgammaHegMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif "bBeeM6000" in self.chainDict['topo']: from TrigBphysHypo.TrigMultiTrkComboHypoConfig import NoMuonDiElecPrecisionComboHypoCfg, DiElecPrecisionComboHypoCfg, TrigMultiTrkComboHypoToolFromDict signatures = self.chainDict['signatures'] if signatures.count(signatures[0]) == len(signatures): stepName = "noMuon_precision_electron_bBee"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=NoMuonDiElecPrecisionComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=NoMuonDiElecPrecisionComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) else: stepName = "precision_electron_bBee"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=DiElecPrecisionComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=DiElecPrecisionComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif self.chainPart['extra'] == 'ion': stepName = "precision_ion_electron" + str(isocut) - return self.getStep(6,stepName,[precisionElectronSequenceCfg_ion], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,[precisionElectronSequenceCfg_ion], is_probe_leg=is_probe_leg) else: stepName = "precision_electron_nominal"+str(isocut) - return self.getStep(6,stepName,[ precisionElectronSequenceCfg ], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,[ precisionElectronSequenceCfg ], is_probe_leg=is_probe_leg) def getPrecisionGSFElectron(self,is_probe_leg=False): @@ -371,41 +392,41 @@ class ElectronChainConfiguration(ChainConfigurationBase): if "Zee" in self.chainDict['topo']: stepName = "precision_topoelectron_Zee_GSF"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionGSFElectronSequenceCfg], comboTools=[diElectronZeeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionGSFElectronSequenceCfg], comboTools=[diElectronZeeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif "Jpsiee" in self.chainDict['topo']: stepName = "precision_topoelectron_Jpsiee_GSF"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionGSFElectronSequenceCfg], comboTools=[diElectronJpsieeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionGSFElectronSequenceCfg], comboTools=[diElectronJpsieeMassComboHypoToolFromDict], is_probe_leg=is_probe_leg) elif "bBeeM6000" in self.chainDict['topo']: from TrigBphysHypo.TrigMultiTrkComboHypoConfig import NoMuonDiElecPrecisionGSFComboHypoCfg, DiElecPrecisionGSFComboHypoCfg, TrigMultiTrkComboHypoToolFromDict signatures = self.chainDict['signatures'] if signatures.count(signatures[0]) == len(signatures): stepName = "noMuon_precision_electron_bBee_GSF"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=NoMuonDiElecPrecisionGSFComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=NoMuonDiElecPrecisionGSFComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) else: stepName = "precision_electron_bBee_GSF"+str(isocut) - return self.getStep(6,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=DiElecPrecisionGSFComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,sequenceCfgArray=[precisionElectronSequenceCfg], comboHypoCfg=DiElecPrecisionGSFComboHypoCfg, comboTools=[TrigMultiTrkComboHypoToolFromDict], is_probe_leg=is_probe_leg) else: stepName = "precision_electron_GSF"+str(isocut) - return self.getStep(6,stepName,[ precisionGSFElectronSequenceCfg], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,[ precisionGSFElectronSequenceCfg], is_probe_leg=is_probe_leg) def getPrecisionGSFElectron_lrt(self,is_probe_leg=False): isocut = self.chainPart['isoInfo'] log.debug(' isolation cut = ' + str(isocut)) stepName = "precision_electron_LRTGSF"+str(isocut) - return self.getStep(6,stepName,[ precisionGSFElectronSequenceCfg_lrt], is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,[ precisionGSFElectronSequenceCfg_lrt], is_probe_leg=is_probe_leg) def getPrecisionElectron_lrt(self,is_probe_leg=False): isocut = self.chainPart['isoInfo'] log.debug(' isolation cut = ' + str(isocut)) stepName = "precision_electron_lrt"+str(isocut) - return self.getStep(6,stepName,[ precisionElectronSequenceCfg_lrt],is_probe_leg=is_probe_leg) + return self.getStep(7,stepName,[ precisionElectronSequenceCfg_lrt],is_probe_leg=is_probe_leg) def getFastCalo_fwd(self,is_probe_leg=False): stepName = "FastCalo_FWD_electron" return self.getStep(1, stepName, [electronFastCaloCfg_fwd], is_probe_leg=is_probe_leg) def getEmptyRefitStep(self, is_probe_leg=False): - return self.getEmptyStep(5,'nonGSFEmptyRefit') + return self.getEmptyStep(6,'nonGSFEmptyRefit') diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronMenuSequences.py index 991f92ef0d2f65e755b7407c90bb9580f56d170a..b34f79f9283f62d675bc3788ce0978a40a4842e9 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronMenuSequences.py @@ -1,5 +1,5 @@ # -# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration # from AthenaConfiguration.AllConfigFlags import ConfigFlags @@ -8,103 +8,68 @@ from AthenaConfiguration.AllConfigFlags import ConfigFlags from TriggerMenuMT.HLT.Config.MenuComponents import MenuSequence, RecoFragmentsPool, algorithmCAToGlobalWrapper from AthenaCommon.CFElements import parOR, seqAND from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm -from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool +from DecisionHandling.DecisionHandlingConf import ViewCreatorPreviousROITool from TriggerMenuMT.HLT.Egamma.TrigEgammaKeys import getTrigEgammaKeys def fastElectronSequence(ConfigFlags, variant=''): """ second step: tracking.....""" - - TrigEgammaKeys = getTrigEgammaKeys(variant) - IDTrigConfig = TrigEgammaKeys.IDTrigConfig + InViewRoIs = "EMFastElectronRoIs"+variant - from TrigInDetConfig.InDetTrigFastTracking import makeInDetTrigFastTracking - RoIs = "EMIDRoIs"+variant # contract with the fastCalo - viewAlgs, viewVerify = makeInDetTrigFastTracking( config = IDTrigConfig, rois = RoIs ) - - # A simple algorithm to confirm that data has been inherited from parent view - # Required to satisfy data dependencies - from TriggerMenuMT.HLT.CommonSequences.CaloSequences import CaloMenuDefs - viewVerify.DataObjects += [( 'xAOD::TrigEMClusterContainer' , 'StoreGateSvc+%s' % CaloMenuDefs.L2CaloClusters ), - ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )] - - TrackParticlesName = "" - for viewAlg in viewAlgs: - if "InDetTrigTrackParticleCreatorAlg" in viewAlg.name(): - TrackParticlesName = viewAlg.TrackParticlesName - - - from TrigEgammaRec.TrigEgammaFastElectronConfig import TrigEgammaFastElectron_ReFastAlgo_Clean - theElectronFex = TrigEgammaFastElectron_ReFastAlgo_Clean("EgammaFastElectronFex_Clean_gen"+variant) - - theElectronFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters - theElectronFex.TrackParticlesName = TrackParticlesName - theElectronFex.ElectronsName=TrigEgammaKeys.fastElectronContainer - theElectronFex.DummyElectronsName= "HLT_FastDummyElectrons" - # EVCreator: - l2ElectronViewsMaker = EventViewCreatorAlgorithm("IMl2Electron"+variant) - l2ElectronViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI - # Spawn View on SuperRoI encompassing all clusters found within the L1 RoI - roiTool = ViewCreatorCentredOnClusterROITool() - roiTool.AllowMultipleClusters = False # If True: SuperROI mode. If False: highest eT cluster in the L1 ROI - roiTool.RoisWriteHandleKey = TrigEgammaKeys.fastElectronRoIContainer - roiTool.RoIEtaWidth = IDTrigConfig.etaHalfWidth - roiTool.RoIPhiWidth = IDTrigConfig.phiHalfWidth - l2ElectronViewsMaker.RoITool = roiTool - l2ElectronViewsMaker.InViewRoIs = RoIs - l2ElectronViewsMaker.Views = "EMElectronViews"+variant - l2ElectronViewsMaker.ViewFallThrough = True - l2ElectronViewsMaker.RequireParentView = True - - theElectronFex.RoIs = l2ElectronViewsMaker.InViewRoIs - electronInViewAlgs = parOR("electronInViewAlgs"+variant, viewAlgs + [ theElectronFex ]) - l2ElectronViewsMaker.ViewNodeName = "electronInViewAlgs"+variant + fastElectronViewsMaker = EventViewCreatorAlgorithm("IMfastElectron"+variant) + fastElectronViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI + fastElectronViewsMaker.RoITool = ViewCreatorPreviousROITool() + fastElectronViewsMaker.InViewRoIs = InViewRoIs + fastElectronViewsMaker.Views = "EMElectronViews"+variant + fastElectronViewsMaker.ViewFallThrough = True + fastElectronViewsMaker.RequireParentView = True + + # Configure the reconstruction algorithm sequence + from TriggerMenuMT.HLT.Electron.FastElectronRecoSequences import fastElectronRecoSequence + (fastElectronRec, sequenceOut) = fastElectronRecoSequence(InViewRoIs, variant) + + # Suffix to distinguish probe leg sequences + fastElectronInViewAlgs = parOR("fastElectronInViewAlgs" + variant, [fastElectronRec]) + fastElectronViewsMaker.ViewNodeName = "fastElectronInViewAlgs" + variant from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Si - robPrefetchAlg = algorithmCAToGlobalWrapper(ROBPrefetchingAlgCfg_Si, ConfigFlags, nameSuffix=l2ElectronViewsMaker.name())[0] - - electronAthSequence = seqAND("electronAthSequence"+variant, [l2ElectronViewsMaker, robPrefetchAlg, electronInViewAlgs ] ) - return (electronAthSequence, l2ElectronViewsMaker) + robPrefetchAlg = algorithmCAToGlobalWrapper(ROBPrefetchingAlgCfg_Si, ConfigFlags, nameSuffix=fastElectronViewsMaker.name())[0] + fastElectronAthSequence = seqAND("fastElectronAthSequence" + variant, [fastElectronViewsMaker, robPrefetchAlg, fastElectronInViewAlgs] ) + return (fastElectronAthSequence, fastElectronViewsMaker, sequenceOut) def fastElectronSequence_LRT(ConfigFlags): # This is SAME as fastElectronSequence but for variant "_LRT" return fastElectronSequence(ConfigFlags,"_LRT") - -def fastElectronMenuSequence(do_idperf,is_probe_leg=False, variant=''): +def fastElectronMenuSequence(is_probe_leg=False, variant=''): """ Creates 2nd step Electron MENU sequence""" - # retrieve the reco sequence+IM + # retrieve the reco sequence+EVC theSequence = { '' : fastElectronSequence, '_LRT' : fastElectronSequence_LRT } - (electronAthSequence, l2ElectronViewsMaker) = RecoFragmentsPool.retrieve(theSequence[variant], ConfigFlags) - + (fastElectronAthSequence, fastElectronViewsMaker, sequenceOut) = RecoFragmentsPool.retrieve(theSequence[variant], ConfigFlags) # make the Hypo from TrigEgammaHypo.TrigEgammaHypoConf import TrigEgammaFastElectronHypoAlg TrigEgammaKeys = getTrigEgammaKeys(variant) - if do_idperf is True: - theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg_idperf"+variant) - theElectronHypo.Electrons = "HLT_FastDummyElectrons" - else: - theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg"+variant) - theElectronHypo.Electrons = TrigEgammaKeys.fastElectronContainer + theElectronHypo = TrigEgammaFastElectronHypoAlg("TrigEgammaFastElectronHypoAlg"+variant) + theElectronHypo.Electrons = TrigEgammaKeys.fastElectronContainer theElectronHypo.RunInView=True from TrigEgammaHypo.TrigEgammaFastElectronHypoTool import TrigEgammaFastElectronHypoToolFromDict - return MenuSequence( Maker = l2ElectronViewsMaker, - Sequence = electronAthSequence, + return MenuSequence( Maker = fastElectronViewsMaker, + Sequence = fastElectronAthSequence, Hypo = theElectronHypo, HypoToolGen = TrigEgammaFastElectronHypoToolFromDict, IsProbe=is_probe_leg) -def fastElectronMenuSequence_LRT(do_idperf,is_probe_leg=False): +def fastElectronMenuSequence_LRT(is_probe_leg=False): # This is to call fastElectronMenuSequence for the _LRT variant - return fastElectronMenuSequence(do_idperf,is_probe_leg=is_probe_leg, variant='_LRT') + return fastElectronMenuSequence(is_probe_leg=is_probe_leg, variant='_LRT') diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronRecoSequences.py new file mode 100644 index 0000000000000000000000000000000000000000..96bb4f4e987bd3137730709956e4d63f7397f61e --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastElectronRecoSequences.py @@ -0,0 +1,43 @@ +# +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +# +from AthenaCommon.CFElements import parOR + +#logging +from AthenaCommon.Logging import logging +log = logging.getLogger(__name__) + +from TriggerMenuMT.HLT.Egamma.TrigEgammaKeys import getTrigEgammaKeys + + +def fastElectronRecoSequence(RoIs, variant=''): + + import AthenaCommon.CfgMgr as CfgMgr + + TrigEgammaKeys = getTrigEgammaKeys(variant) + trackParticlesName = TrigEgammaKeys.fastTrackParticleContainer + + # A simple algorithm to confirm that data has been inherited from parent view + # Required to satisfy data dependencies + ViewVerifyTrk = CfgMgr.AthViews__ViewDataVerifier("FastTrackViewDataVerifier_FTF"+variant) + from TriggerMenuMT.HLT.CommonSequences.CaloSequences import CaloMenuDefs + ViewVerifyTrk.DataObjects += [( 'xAOD::TrigEMClusterContainer' , 'StoreGateSvc+%s' % CaloMenuDefs.L2CaloClusters ), + ( 'xAOD::TrackParticleContainer' , 'StoreGateSvc+%s' % trackParticlesName ), + ( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )] + + from TrigEgammaRec.TrigEgammaFastElectronConfig import TrigEgammaFastElectron_ReFastAlgo_Clean + theElectronFex = TrigEgammaFastElectron_ReFastAlgo_Clean("EgammaFastElectronFex_Clean_gen"+variant) + + theElectronFex.TrigEMClusterName = CaloMenuDefs.L2CaloClusters + theElectronFex.RoIs = RoIs + theElectronFex.TrackParticlesName = trackParticlesName + theElectronFex.ElectronsName=TrigEgammaKeys.fastElectronContainer + theElectronFex.DummyElectronsName= "HLT_FastDummyElectrons" + + fastElectronRecoSequence = parOR( "fastElectron"+RoIs) + fastElectronRecoSequence += ViewVerifyTrk + fastElectronRecoSequence += theElectronFex + + collectionOut = TrigEgammaKeys.fastElectronContainer + + return fastElectronRecoSequence, collectionOut diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingMenuSequences.py new file mode 100644 index 0000000000000000000000000000000000000000..8b649aaab968ce6ef825313f0c2ed9aacbd31645 --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingMenuSequences.py @@ -0,0 +1,67 @@ +# +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +# + +from AthenaConfiguration.AllConfigFlags import ConfigFlags + +# menu components +from TriggerMenuMT.HLT.Config.MenuComponents import MenuSequence, RecoFragmentsPool,algorithmCAToGlobalWrapper +from AthenaCommon.CFElements import parOR, seqAND +from ViewAlgs.ViewAlgsConf import EventViewCreatorAlgorithm +from DecisionHandling.DecisionHandlingConf import ViewCreatorCentredOnClusterROITool + + +def fastTrackingSequence(ConfigFlags, variant=''): + """ second step: tracking.....""" + from TriggerMenuMT.HLT.Egamma.TrigEgammaKeys import getTrigEgammaKeys + TrigEgammaKeys = getTrigEgammaKeys(variant) + IDTrigConfig = TrigEgammaKeys.IDTrigConfig + RoIs = "EMIDRoIs"+variant + # EVCreator: + fastTrackingViewsMaker = EventViewCreatorAlgorithm("IMfastTracking"+variant) + fastTrackingViewsMaker.mergeUsingFeature=True + fastTrackingViewsMaker.RoIsLink = "initialRoI" # Merge inputs based on their initial L1 ROI + # Spawn View on SuperRoI encompassing all clusters found within the L1 RoI + roiTool = ViewCreatorCentredOnClusterROITool() + roiTool.AllowMultipleClusters = False # If True: SuperROI mode. If False: highest eT cluster in the L1 ROI + roiTool.RoisWriteHandleKey = TrigEgammaKeys.fastTrackingRoIContainer + roiTool.RoIEtaWidth = IDTrigConfig.etaHalfWidth + roiTool.RoIPhiWidth = IDTrigConfig.phiHalfWidth + fastTrackingViewsMaker.RoITool = roiTool + fastTrackingViewsMaker.InViewRoIs = RoIs + fastTrackingViewsMaker.Views = "EMFastTrackingViews"+variant + fastTrackingViewsMaker.ViewFallThrough = True + fastTrackingViewsMaker.RequireParentView = True + + # calling fast tracking + from TriggerMenuMT.HLT.Electron.FastTrackingRecoSequences import fastTracking + fastTrackingInViewSequence, trackParticles = fastTracking(RoIs,variant) + + fastTrackingInViewAlgs = parOR("fastTrackingInViewAlgs"+variant, [fastTrackingInViewSequence]) + fastTrackingViewsMaker.ViewNodeName = "fastTrackingInViewAlgs"+variant + + # connect EVC and reco + from TrigGenericAlgs.TrigGenericAlgsConfig import ROBPrefetchingAlgCfg_Si + robPrefetchAlg = algorithmCAToGlobalWrapper(ROBPrefetchingAlgCfg_Si,ConfigFlags,nameSuffix=fastTrackingViewsMaker.name())[0] + theSequence = seqAND("fastTrackingSequence"+variant, [fastTrackingViewsMaker, robPrefetchAlg, fastTrackingInViewAlgs] ) + return (theSequence,fastTrackingViewsMaker,trackParticles) + + +def fastTrackingMenuSequence(name, is_probe_leg=False, variant=''): + """ Creates precisionCalo MENU sequence """ + (sequence, fastTrackingViewsMaker, trackParticles) = RecoFragmentsPool.retrieve(fastTrackingSequence, ConfigFlags , variant=variant) + + from TrigStreamerHypo.TrigStreamerHypoConf import TrigStreamerHypoAlg, TrigStreamerHypoTool + theFastTrackingHypo = TrigStreamerHypoAlg(name + "fastTrackingHypo"+variant) + theFastTrackingHypo.FeatureIsROI = False + def acceptAllHypoToolGen(chainDict): + return TrigStreamerHypoTool(chainDict["chainName"], Pass = True) + return MenuSequence( Sequence = sequence, + Maker = fastTrackingViewsMaker, + Hypo = theFastTrackingHypo, + HypoToolGen = acceptAllHypoToolGen, + IsProbe = is_probe_leg) + + +def fastTrackingMenuSequence_LRT(name, is_probe_leg=False): + return fastTrackingMenuSequence(name, is_probe_leg=is_probe_leg, variant='_LRT') diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingRecoSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingRecoSequences.py new file mode 100644 index 0000000000000000000000000000000000000000..53a2e6496d3863b48a33d444572ba0fe85d0ea7f --- /dev/null +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/FastTrackingRecoSequences.py @@ -0,0 +1,20 @@ +# +# Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration +# + +from TriggerMenuMT.HLT.Egamma.TrigEgammaKeys import getTrigEgammaKeys + + +def fastTracking(RoIs, variant=''): + TrigEgammaKeys = getTrigEgammaKeys(variant) + IDTrigConfig = TrigEgammaKeys.IDTrigConfig + from TrigInDetConfig.InDetTrigFastTracking import makeInDetTrigFastTracking + viewAlgs, viewVerify = makeInDetTrigFastTracking( config = IDTrigConfig, rois = RoIs ) + viewVerify.DataObjects += [( 'TrigRoiDescriptorCollection' , 'StoreGateSvc+%s' % RoIs )] + + TrackParticlesName = "" + for viewAlg in viewAlgs: + if "InDetTrigTrackParticleCreatorAlg" in viewAlg.name(): + TrackParticlesName = viewAlg.TrackParticlesName + + return viewAlgs, TrackParticlesName diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionCaloMenuSequences.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionCaloMenuSequences.py index 785fa76635f13df1184bdb39f6e055308aac92c7..91d922967eafea031f7ac9d0ab52a9d32b3ef178 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionCaloMenuSequences.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Electron/PrecisionCaloMenuSequences.py @@ -30,7 +30,7 @@ def precisionCaloSequence(flags, ion=False, variant=''): # Note: This step processes Decision Objects which have followed either Electron reco, Photon reco, or both. # For Decision Object which have followed both, there is an ambiguity about which ROI should be used in this # merged step. In such cases we break the ambiguity by specifying that the Electron ROI is to be used. - roiTool.RoISGKey = TrigEgammaKeys.fastElectronRoIContainer + roiTool.RoISGKey = TrigEgammaKeys.fastTrackingRoIContainer precisionCaloViewsMaker.RoITool = roiTool precisionCaloViewsMaker.InViewRoIs = InViewRoIs precisionCaloViewsMaker.Views = tag(ion) + 'Views' + variant diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py index 9482b5adefa712b1dcc12beb3bef5e41bb02adc6..33ab5c7033a4cbb91f6d1ef4a52deca49ed725a1 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py @@ -555,15 +555,15 @@ def setupMenu(): # Support # T&P chains for displaced electrons - ChainProp(name='HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1EM22VHI',l1SeedThresholds=['EM22VHI','PROBEEM3'],groups=TagAndProbeLegGroup+SingleElectronGroup), + ChainProp(name='HLT_e26_lhtight_ivarloose_e5_idperf_loose_lrtloose_probe_L1EM22VHI',l1SeedThresholds=['EM22VHI','PROBEEM3'],groups=TagAndProbeLegGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1EM22VHI',l1SeedThresholds=['EM22VHI','PROBEEM22VHI'],groups=TagAndProbeLegGroup+SingleElectronGroup), - ChainProp(name='HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1EM20VH',l1SeedThresholds=['PROBEEM3','EM20VH'],groups=SupportLegGroup+SingleElectronGroup+['RATE:CPS_EM20VH']), + ChainProp(name='HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1EM20VH',l1SeedThresholds=['PROBEEM3','EM20VH'],groups=SupportLegGroup+SingleElectronGroup+['RATE:CPS_EM20VH']), ChainProp(name='HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1EM20VH',l1SeedThresholds=['PROBEEM22VHI','EM20VH'],groups=SupportLegGroup+SingleElectronGroup+['RATE:CPS_EM20VH']), - ChainProp(name='HLT_e26_lhtight_ivarloose_e5_lhvloose_nopix_lrtloose_idperf_probe_L1eEM26M',l1SeedThresholds=['eEM26M','PROBEeEM5'],groups=TagAndProbePhIGroup+SingleElectronGroup), + ChainProp(name='HLT_e26_lhtight_ivarloose_e5_loose_lrtloose_idperf_probe_L1eEM26M',l1SeedThresholds=['eEM26M','PROBEeEM5'],groups=TagAndProbePhIGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_lrtmedium_probe_L1eEM26M',l1SeedThresholds=['eEM26M','PROBEeEM26M'],groups=TagAndProbePhIGroup+SingleElectronGroup), - ChainProp(name='HLT_e5_lhvloose_nopix_lrtloose_idperf_probe_g25_medium_L1eEM24L',l1SeedThresholds=['PROBEeEM5','eEM24L'],groups=SupportPhIGroup+SingleElectronGroup+['RATE:CPS_eEM24L']), + ChainProp(name='HLT_e5_idperf_loose_lrtloose_probe_g25_medium_L1eEM24L',l1SeedThresholds=['PROBEeEM5','eEM24L'],groups=SupportPhIGroup+SingleElectronGroup+['RATE:CPS_eEM24L']), ChainProp(name='HLT_e30_lhloose_nopix_lrtmedium_probe_g25_medium_L1eEM24L',l1SeedThresholds=['PROBEeEM26M','eEM24L'],groups=SupportPhIGroup+SingleElectronGroup+['RATE:CPS_eEM24L']), ChainProp(name='HLT_e26_lhtight_ivarloose_e30_lhloose_nopix_probe_L1EM22VHI',l1SeedThresholds=['EM22VHI','PROBEEM22VHI'],groups=TagAndProbeLegGroup+SingleElectronGroup), @@ -583,44 +583,45 @@ def setupMenu(): ChainProp(name='HLT_e26_idperf_tight_L1EM22VHI', stream=[PhysicsStream,'express'], groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM22VHI'], monGroups=['idMon:shifter','idMon:t0']), ChainProp(name='HLT_e60_idperf_medium_L1EM22VHI', groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM22VHI'], monGroups=['idMon:t0']), ChainProp(name='HLT_e60_idperf_medium_nogsf_L1EM22VHI', groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM22VHI'], monGroups=['idMon:t0']), - ChainProp(name='HLT_e14_etcut_idperf_L1EM7', stream=[PhysicsStream], groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM7']), + ChainProp(name='HLT_e14_idperf_loose_L1EM7', stream=[PhysicsStream], groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM7']), ChainProp(name='HLT_e14_idperf_tight_L1EM7', stream=[PhysicsStream], groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM7'], monGroups=['idMon:t0']), ChainProp(name='HLT_e14_idperf_tight_nogsf_L1EM7', stream=[PhysicsStream], groups=SingleElectronGroup+SupportLegGroup+['RATE:CPS_EM7'], monGroups=['idMon:t0']), ChainProp(name='HLT_2e17_idperf_loose_nogsf_L12EM15VHI', groups=MultiElectronGroup+SupportLegGroup+['RATE:CPS_2EM15VHI']), ChainProp(name='HLT_2e17_idperf_loose_L12EM15VHI', groups=MultiElectronGroup+SupportLegGroup+['RATE:CPS_2EM15VHI']), + # LRT idperf ChainProp(name='HLT_e30_idperf_loose_lrtloose_L1EM22VHI', stream=[PhysicsStream,'express'], groups=SupportLegGroup+SingleElectronGroup+['RATE:CPS_EM22VHI'], monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1EM22VHI', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=PrimaryLegGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1EM22VHI', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=PrimaryLegGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM7', stream=[PhysicsStream], l1SeedThresholds=['EM7','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM7']+LegacyTopoGroup), - ChainProp(name='HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7', stream=[PhysicsStream], l1SeedThresholds=['EM7','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM7']+LegacyTopoGroup), - ChainProp(name='HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-EM12', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM12','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM12']+LegacyTopoGroup, monGroups=['idMon:t0']), - ChainProp(name='HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM12','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM12']+LegacyTopoGroup, monGroups=['idMon:t0']), + + ChainProp(name='HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1EM22VHI', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=PrimaryLegGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), + ChainProp(name='HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1EM22VHI', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=PrimaryLegGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), + ChainProp(name='HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM7', stream=[PhysicsStream], l1SeedThresholds=['EM7','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM7']+LegacyTopoGroup), + ChainProp(name='HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM7', stream=[PhysicsStream], l1SeedThresholds=['EM7','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM7']+LegacyTopoGroup), + ChainProp(name='HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-EM12', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM12','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM12']+LegacyTopoGroup, monGroups=['idMon:t0']), + ChainProp(name='HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-EM12', stream=[PhysicsStream,'express'], l1SeedThresholds=['EM12','PROBEEM3'], groups=SupportLegGroup+MultiElectronGroup+['RATE:CPS_JPSI-1M5-EM12']+LegacyTopoGroup, monGroups=['idMon:t0']), ChainProp(name='HLT_e5_idperf_tight_L1eEM5', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM5'], monGroups=['idMon:t0']), ChainProp(name='HLT_e5_idperf_tight_nogsf_L1eEM5', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM5'], monGroups=['idMon:t0']), #------------ ATR-25648:Raise threshold on Phase-I seeded LRT electrons ChainProp(name='HLT_e20_idperf_loose_lrtloose_L1eEM18L', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM18L'], monGroups=['idMon:t0']), - ChainProp(name='HLT_e26_idperf_loose_L1eEM26M', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM26M']), ChainProp(name='HLT_e26_idperf_tight_nogsf_L1eEM26M', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM26M'], monGroups=['idMon:shifter','idMon:t0']), ChainProp(name='HLT_e26_idperf_tight_L1eEM26M', stream=[PhysicsStream,'express'], groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM26M'], monGroups=['idMon:shifter','idMon:t0']), ChainProp(name='HLT_e60_idperf_medium_L1eEM26M', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM26M'], monGroups=['idMon:t0']), ChainProp(name='HLT_e60_idperf_medium_nogsf_L1eEM26M', groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM26M'], monGroups=['idMon:t0']), - ChainProp(name='HLT_e14_etcut_idperf_L1eEM9', stream=[PhysicsStream], groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM9']), + ChainProp(name='HLT_e14_idperf_loose_L1eEM9', stream=[PhysicsStream], groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM9']), ChainProp(name='HLT_e14_idperf_tight_L1eEM9', stream=[PhysicsStream], groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM9'], monGroups=['idMon:t0']), ChainProp(name='HLT_e14_idperf_tight_nogsf_L1eEM9', stream=[PhysicsStream], groups=SingleElectronGroup+SupportPhIGroup+['RATE:CPS_eEM9'], monGroups=['idMon:t0']), ChainProp(name='HLT_2e17_idperf_loose_L12eEM18M', groups=MultiElectronGroup+SupportPhIGroup+['RATE:CPS_2eEM18M']), ChainProp(name='HLT_2e17_idperf_loose_nogsf_L12eEM18M', groups=MultiElectronGroup+SupportPhIGroup+['RATE:CPS_2eEM18M']), ChainProp(name='HLT_e30_idperf_loose_lrtloose_L1eEM26M', stream=[PhysicsStream,'express'], groups=SupportPhIGroup+SingleElectronGroup+['RATE:CPS_eEM26M'], monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e26_lhtight_e14_etcut_idperf_probe_50invmAB130_L1eEM26M', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=PrimaryPhIGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e26_lhtight_e14_etcut_idperf_nogsf_probe_50invmAB130_L1eEM26M', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=PrimaryPhIGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), - ChainProp(name='HLT_e9_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM9', stream=[PhysicsStream], l1SeedThresholds=['eEM9','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM9']), - ChainProp(name='HLT_e9_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9', stream=[PhysicsStream], l1SeedThresholds=['eEM9','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM9']), - ChainProp(name='HLT_e14_lhtight_e4_etcut_idperf_probe_1invmAB5_L1JPSI-1M5-eEM15', stream=[PhysicsStream,'express'], l1SeedThresholds=['eEM15','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM15'], monGroups=['idMon:t0']), - ChainProp(name='HLT_e14_lhtight_e4_etcut_idperf_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM15','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM15'], monGroups=['idMon:t0']), + ChainProp(name='HLT_e26_lhtight_e14_idperf_tight_probe_50invmAB130_L1eEM26M', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=PrimaryPhIGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), + ChainProp(name='HLT_e26_lhtight_e14_idperf_tight_nogsf_probe_50invmAB130_L1eEM26M', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=PrimaryPhIGroup+MultiElectronGroup, monGroups=['idMon:shifter','idMon:t0']), + ChainProp(name='HLT_e9_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM9', stream=[PhysicsStream], l1SeedThresholds=['eEM9','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM9']), + ChainProp(name='HLT_e9_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM9', stream=[PhysicsStream], l1SeedThresholds=['eEM9','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM9']), + ChainProp(name='HLT_e14_lhtight_e4_idperf_tight_probe_1invmAB5_L1JPSI-1M5-eEM15', stream=[PhysicsStream,'express'], l1SeedThresholds=['eEM15','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM15'], monGroups=['idMon:t0']), + ChainProp(name='HLT_e14_lhtight_e4_idperf_tight_nogsf_probe_1invmAB5_L1JPSI-1M5-eEM15', stream=[PhysicsStream, 'express'], l1SeedThresholds=['eEM15','PROBEeEM5'], groups=SupportPhIGroup+MultiElectronGroup+Topo2Group+['RATE:CPS_JPSI-1M5-eEM15'], monGroups=['idMon:t0']), #----------- egamma Tag&Probe ChainProp(name='HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM3'], groups=TagAndProbeLegGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), @@ -628,7 +629,7 @@ def setupMenu(): ChainProp(name='HLT_e26_lhtight_ivarloose_e17_lhvloose_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM15VHI'], groups=TagAndProbeLegGroup+SingleElectronGroup, monGroups=['egammaMon:online','egammaMon:shifter_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e24_lhvloose_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM20VH'], groups=TagAndProbeLegGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e26_lhtight_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM22VHI'], groups=TagAndProbeLegGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), - ChainProp(name='HLT_e26_lhtight_ivarloose_e14_etcut_idperf_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=TagAndProbeLegGroup+SingleElectronGroup), + ChainProp(name='HLT_e26_lhtight_ivarloose_e14_idperf_tight_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=TagAndProbeLegGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=TagAndProbeLegGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM7'], groups=TagAndProbeLegGroup+SingleElectronGroup), @@ -637,15 +638,13 @@ def setupMenu(): ChainProp(name='HLT_e26_lhtight_ivarloose_e5_lhtight_probe_L1EM22VHI', l1SeedThresholds=['EM22VHI','PROBEEM3'], groups=TagAndProbeLegGroup+SingleElectronGroup), - - ChainProp(name='HLT_e26_lhtight_ivarloose_e4_etcut_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM5'], groups=TagAndProbePhIGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e12_lhvloose_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM12L'], groups=TagAndProbePhIGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e17_lhvloose_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM18M'], groups=TagAndProbePhIGroup+SingleElectronGroup, monGroups=['egammaMon:online','egammaMon:shifter_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e24_lhvloose_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM24L'], groups=TagAndProbePhIGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e26_lhtight_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM26M'], groups=TagAndProbePhIGroup+SingleElectronGroup, monGroups=['egammaMon:t0_topo']), ChainProp(name='HLT_e26_lhtight_ivarloose_e20_lhtight_ivarloose_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM18M'], groups=TagAndProbePhIGroup+SingleElectronGroup), - ChainProp(name='HLT_e26_lhtight_ivarloose_e15_etcut_idperf_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=TagAndProbePhIGroup+SingleElectronGroup), + ChainProp(name='HLT_e26_lhtight_ivarloose_e15_idperf_tight_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=TagAndProbePhIGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e14_lhtight_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=TagAndProbePhIGroup+SingleElectronGroup), ChainProp(name='HLT_e26_lhtight_ivarloose_e14_etcut_probe_L1eEM26M', l1SeedThresholds=['eEM26M','PROBEeEM9'], groups=TagAndProbePhIGroup+SingleElectronGroup),