ATLAS Offline Software
RegionSelectionSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // MuonGeoModel
8 
9 // MuonCalibTools
11 
12 // MuonCalibIdentifier
14 
15 // MuonCalibStandAloneBase
20 
21 // root
22 #include "TDirectory.h"
23 #include "TFile.h"
24 #include "TKey.h"
25 #include "TTree.h"
26 
27 using namespace MuonCalib;
29 RegionSelectionSvc ::RegionSelectionSvc(const std::string &name, ISvcLocator *svc_locator) : AthService(name, svc_locator) {}
30 
32  ATH_MSG_INFO("initialize RegionSelectionSvc");
33 
34  if (!ProcessString(m_region_string)) return StatusCode::FAILURE;
35 
36  // detector stre - id to fixed id ...
37  SmartIF<StoreGateSvc> detStore{service("DetectorStore")};
38  ATH_CHECK(detStore.isValid());
39  ATH_MSG_DEBUG("Retrieved DetectorStore");
40  ATH_CHECK(m_idHelperSvc.retrieve());
41  ATH_CHECK(detStore->retrieve(m_detMgr));
42  ATH_CHECK(m_idToFixedIdTool.retrieve());
43  ATH_MSG_INFO("Retrieved " << m_idToFixedIdTool);
44 
47 
48  return StatusCode::SUCCESS;
49 }
50 
51 bool RegionSelectionSvc ::isInRegion(const MuonCalib::MuonFixedId &id) const { return m_master_region->Result(id); }
52 
53 const std::string& RegionSelectionSvc ::GetRegionSelection() const { return m_region_string; }
54 const std::vector<MuonCalib ::NtupleStationId> &RegionSelectionSvc ::GetStationsInRegions() const { return m_stations_in_region; }
55 int RegionSelectionSvc ::AddRegionNtuples(const std::string &infile, TChain *chain) {
56  std::list<std::string> dirnames;
57  return AddRegionNtuples(infile, chain, dirnames);
58 }
59 int RegionSelectionSvc ::AddRegionNtuples(const std::string &infile, TChain *chain, std::list<std::string> &dirnames) {
60  int n_trees(0);
61  if (dirnames.empty()) {
62  // open file
63  std::unique_ptr<TFile> inf{TFile::Open(infile.c_str(), "READ")};
64  TIter nextkey(inf->GetListOfKeys());
65  TKey *key;
66  // take a list here because erase does not invalidate iterators
67  while ((key = (TKey *)nextkey())) { dirnames.push_back(key->GetName()); }
68  }
69  // loop over found ntuples and selected region
70  for (std::set<MuonCalib::NtupleStationId>::const_iterator it = m_unique_chambers.begin(); it != m_unique_chambers.end(); ++it)
71  for (std::list<std::string>::iterator nt_it = dirnames.begin(); nt_it != dirnames.end(); ++nt_it) {
72  // truncate region name
73  std::string regname(it->regionId(), 0, nt_it->size());
74  if (regname == (*nt_it)) {
75  chain->AddFile(infile.c_str(), TChain::kBigNumber, ((*nt_it) + "/" + "Segments").c_str());
76  std::list<std::string>::iterator new_it = nt_it;
77  --new_it;
78  dirnames.erase(nt_it);
79  nt_it = new_it;
80  ++n_trees;
81  }
82  }
83  return n_trees;
84 }
85 
86 void RegionSelectionSvc ::Print(std::ostream &os) const {
87  if (!m_master_region) {
88  os << "ERROR";
89  return;
90  }
91  m_master_region->Print(os);
92 }
93 
95  MdtIdHelper::const_id_iterator it = m_idHelperSvc->mdtIdHelper().module_begin();
96  MdtIdHelper::const_id_iterator it_end = m_idHelperSvc->mdtIdHelper().module_end();
97  for (; it != it_end; ++it) {
98  const MuonGM::MdtReadoutElement *detEl = m_detMgr->getMdtReadoutElement(m_idHelperSvc->mdtIdHelper().channelID(*it, 1, 1, 1));
99  if (!detEl) continue;
100  // get number of mls;
101  int n_mls = m_idHelperSvc->mdtIdHelper().numberOfMultilayers(*it);
102  // fixed id
103  MuonCalib::MuonFixedId fixed_id(m_idToFixedIdTool->idToFixedId(*it));
104  std::vector<MuonCalib::NtupleStationId> the_ids;
105  for (int i = 1; i <= n_mls; i++) {
106  fixed_id.setMdtMultilayer(i);
107  if (isInRegion(fixed_id)) {
108  NtupleStationId the_id(fixed_id);
109  the_ids.push_back(the_id);
110  }
111  }
112  // all multilayers are in the region - inser the whole station
113  if (static_cast<int>(the_ids.size()) == n_mls) {
114  NtupleStationId full_station(fixed_id);
115  full_station.SetMultilayer(0);
116  m_stations_in_region.push_back(full_station);
117  } else {
118  for (std::vector<MuonCalib::NtupleStationId>::iterator it2 = the_ids.begin(); it2 != the_ids.end(); ++it2) {
119  m_stations_in_region.push_back(*it2);
120  }
121  }
122  }
123  // create a set of chambers (not multilayers)
124  std::vector<int> tower(3);
126  MuonCalib::NtupleStationId station(*it2);
127  station.SetMultilayer(0);
128  m_unique_chambers.insert(station);
129  }
130 }
131 
132 bool RegionSelectionSvc ::ProcessString(const std::string &input) {
133  m_master_region = RegionSelectorBase::GetRegion(input);
134  return (m_master_region != nullptr);
135 }
136 
138  ATH_MSG_INFO("Selected regions: " << m_stations_in_region.size());
139  msg(MSG::INFO) << "Selected regions: ";
140  for (std::vector<MuonCalib::NtupleStationId>::const_iterator it = m_stations_in_region.begin(); it != m_stations_in_region.end();
141  ++it) {
142  msg(MSG::INFO) << " " << it->regionId();
143  }
144  msg(MSG::INFO) << endmsg;
145 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MuonCalib::MuonFixedId::setMdtMultilayer
bool setMdtMultilayer(int num)
Mdt specific: set multilayer to num.
Definition: MuonFixedId.h:827
MdtReadoutElement.h
MuonCalib::NtupleStationId::SetMultilayer
void SetMultilayer(const int &ml)
Definition: NtupleStationId.h:110
runLayerRecalibration.chain
chain
Definition: runLayerRecalibration.py:175
run.infile
string infile
Definition: run.py:13
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
RegionSelectionSvc::initialize
virtual StatusCode initialize() override
initialize
Definition: RegionSelectionSvc.cxx:31
RegionSelectionSvc::m_region_string
Gaudi::Property< std::string > m_region_string
region string - job option
Definition: RegionSelectionSvc.h:57
MuonCalib::NtupleStationId
Definition: NtupleStationId.h:36
RegionSelectionSvc::m_idToFixedIdTool
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idToFixedIdTool
Definition: RegionSelectionSvc.h:68
skel.it
it
Definition: skel.GENtoEVGEN.py:407
RegionSelectionSvc::~RegionSelectionSvc
virtual ~RegionSelectionSvc()
destructor
IdToFixedIdTool.h
RegionSelectionSvc::m_detMgr
const MuonGM::MuonDetectorManager * m_detMgr
Definition: RegionSelectionSvc.h:65
RegionSelectionSvc::ProcessString
bool ProcessString(const std::string &input)
process string
Definition: RegionSelectionSvc.cxx:132
inf
TStreamerInfo * inf
Definition: liststreamerinfos.cxx:12
RegionLogicalOperation.h
RegionSelectionSvc::m_stations_in_region
std::vector< MuonCalib::NtupleStationId > m_stations_in_region
chambers/mutlilayers in calibraition region
Definition: RegionSelectionSvc.h:63
RegionSelectionSvc::isInRegion
bool isInRegion(const MuonCalib::MuonFixedId &id) const
return true if id is in selected region
Definition: RegionSelectionSvc.cxx:51
RegionSelectionSvc::RegionSelectionSvc
RegionSelectionSvc(const std::string &name, ISvcLocator *svc_locator)
contructor
Definition: RegionSelectionSvc.cxx:29
RegionSelectionSvc::GetStationsInRegions
const std::vector< MuonCalib ::NtupleStationId > & GetStationsInRegions() const
get stations/multilayers in region
Definition: RegionSelectionSvc.cxx:54
MuonGM::MuonDetectorManager::getMdtReadoutElement
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:206
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:51
lumiFormat.i
int i
Definition: lumiFormat.py:85
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthService
Definition: AthService.h:32
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
MuonCalib
CscCalcPed - algorithm that finds the Cathode Strip Chamber pedestals from an RDO.
Definition: CscCalcPed.cxx:22
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RegionSelectionSvc::search_chambers_in_region
void search_chambers_in_region()
Definition: RegionSelectionSvc.cxx:94
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
RegionSelectionSvc::print_list_of_selected_chambers
void print_list_of_selected_chambers() const
print a list of selected chambers - debug function
Definition: RegionSelectionSvc.cxx:137
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
MuonCalib::MuonFixedId
Definition: MuonFixedId.h:50
MuonDetectorManager.h
RegionSelectionSvc::m_print_list_of_selected_chambers
Gaudi::Property< bool > m_print_list_of_selected_chambers
print list of selected chambers if set to true - job option
Definition: RegionSelectionSvc.h:59
RegionSelectionSvc::m_unique_chambers
std::set< MuonCalib::NtupleStationId > m_unique_chambers
Definition: RegionSelectionSvc.h:64
RegionSelectionSvc::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
search for chambers and multilayers in selected region towers in selected region
Definition: RegionSelectionSvc.h:67
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
RegionSelectorBase.h
AthCommonMsg< Service >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
RegionElement.h
MuonIdHelper::const_id_iterator
std::vector< Identifier >::const_iterator const_id_iterator
Definition: MuonIdHelper.h:143
RegionSelectionSvc::Print
void Print(std::ostream &os) const
debug print
Definition: RegionSelectionSvc.cxx:86
RegionSelectionSvc::m_master_region
std::unique_ptr< MuonCalib ::RegionSelectorBase > m_master_region
master region
Definition: RegionSelectionSvc.h:61
MuonFixedId.h
RegionSelectionSvc::AddRegionNtuples
int AddRegionNtuples(const std::string &infile, TChain *chain)
add region ntuples which are relevant for this region to TChain
Definition: RegionSelectionSvc.cxx:55
RegionSelectionSvc::GetRegionSelection
const std::string & GetRegionSelection() const
get region selection
Definition: RegionSelectionSvc.cxx:53
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
RegionSelectionSvc.h