ATLAS Offline Software
RegionSelectionSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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 
31 StatusCode RegionSelectionSvc::queryInterface(const InterfaceID &riid, void **ppvUnknown) {
32  ATH_MSG_VERBOSE("StatusCode RegionSelectionSvc::queryInterface");
33 
34  if (interfaceID().versionMatch(riid)) {
35  *ppvUnknown = (RegionSelectionSvc *)this;
36  } else {
37  return AthService::queryInterface(riid, ppvUnknown);
38  }
39 
40  return StatusCode::SUCCESS;
41 }
42 
44  ATH_MSG_INFO("initialize RegionSelectionSvc");
45 
46  if (!ProcessString(m_region_string)) return StatusCode::FAILURE;
47 
48  // detector stre - id to fixed id ...
49  StoreGateSvc *detStore{nullptr};
50  ATH_CHECK(serviceLocator()->service("DetectorStore", detStore));
51  ATH_MSG_DEBUG("Retrieved DetectorStore");
52  ATH_CHECK(m_idHelperSvc.retrieve());
53  ATH_CHECK(detStore->retrieve(m_detMgr));
54  ATH_CHECK(m_idToFixedIdTool.retrieve());
55  ATH_MSG_INFO("Retrieved " << m_idToFixedIdTool);
56 
59 
60  return StatusCode::SUCCESS;
61 }
62 
63 bool RegionSelectionSvc ::isInRegion(const MuonCalib::MuonFixedId &id) const { return m_master_region->Result(id); }
64 
66 const std::vector<MuonCalib ::NtupleStationId> &RegionSelectionSvc ::GetStationsInRegions() const { return m_stations_in_region; }
67 int RegionSelectionSvc ::AddRegionNtuples(const std::string &infile, TChain *chain) {
68  std::list<std::string> dirnames;
69  return AddRegionNtuples(infile, chain, dirnames);
70 }
71 int RegionSelectionSvc ::AddRegionNtuples(const std::string &infile, TChain *chain, std::list<std::string> &dirnames) {
72  int n_trees(0);
73  if (dirnames.empty()) {
74  // open file
75  std::unique_ptr<TFile> inf{TFile::Open(infile.c_str(), "READ")};
76  TIter nextkey(inf->GetListOfKeys());
77  TKey *key;
78  // take a list here because erase does not invalidate iterators
79  while ((key = (TKey *)nextkey())) { dirnames.push_back(key->GetName()); }
80  }
81  // loop over found ntuples and selected region
82  for (std::set<MuonCalib::NtupleStationId>::const_iterator it = m_unique_chambers.begin(); it != m_unique_chambers.end(); ++it)
83  for (std::list<std::string>::iterator nt_it = dirnames.begin(); nt_it != dirnames.end(); ++nt_it) {
84  // truncate region name
85  std::string regname(it->regionId(), 0, nt_it->size());
86  if (regname == (*nt_it)) {
87  chain->AddFile(infile.c_str(), TChain::kBigNumber, ((*nt_it) + "/" + "Segments").c_str());
88  std::list<std::string>::iterator new_it = nt_it;
89  --new_it;
90  dirnames.erase(nt_it);
91  nt_it = new_it;
92  ++n_trees;
93  }
94  }
95  return n_trees;
96 }
97 
98 void RegionSelectionSvc ::Print(std::ostream &os) const {
99  if (!m_master_region) {
100  os << "ERROR";
101  return;
102  }
103  m_master_region->Print(os);
104 }
105 
107  MdtIdHelper::const_id_iterator it = m_idHelperSvc->mdtIdHelper().module_begin();
108  MdtIdHelper::const_id_iterator it_end = m_idHelperSvc->mdtIdHelper().module_end();
109  for (; it != it_end; ++it) {
110  const MuonGM::MdtReadoutElement *detEl = m_detMgr->getMdtReadoutElement(m_idHelperSvc->mdtIdHelper().channelID(*it, 1, 1, 1));
111  if (!detEl) continue;
112  // get number of mls;
113  int n_mls = m_idHelperSvc->mdtIdHelper().numberOfMultilayers(*it);
114  // fixed id
115  MuonCalib::MuonFixedId fixed_id(m_idToFixedIdTool->idToFixedId(*it));
116  std::vector<MuonCalib::NtupleStationId> the_ids;
117  for (int i = 1; i <= n_mls; i++) {
118  fixed_id.setMdtMultilayer(i);
119  if (isInRegion(fixed_id)) {
120  NtupleStationId the_id(fixed_id);
121  the_ids.push_back(the_id);
122  }
123  }
124  // all multilayers are in the region - inser the whole station
125  if (static_cast<int>(the_ids.size()) == n_mls) {
126  NtupleStationId full_station(fixed_id);
127  full_station.SetMultilayer(0);
128  m_stations_in_region.push_back(full_station);
129  } else {
130  for (std::vector<MuonCalib::NtupleStationId>::iterator it2 = the_ids.begin(); it2 != the_ids.end(); ++it2) {
131  m_stations_in_region.push_back(*it2);
132  }
133  }
134  }
135  // create a set of chambers (not multilayers)
136  std::vector<int> tower(3);
138  MuonCalib::NtupleStationId station(*it2);
139  station.SetMultilayer(0);
140  m_unique_chambers.insert(station);
141  }
142 }
143 
144 bool RegionSelectionSvc ::ProcessString(const std::string &input) {
145  m_master_region = RegionSelectorBase::GetRegion(input);
146  return (m_master_region != nullptr);
147 }
148 
150  ATH_MSG_INFO("Selected regions: " << m_stations_in_region.size());
151  msg(MSG::INFO) << "Selected regions: ";
152  for (std::vector<MuonCalib::NtupleStationId>::const_iterator it = m_stations_in_region.begin(); it != m_stations_in_region.end();
153  ++it) {
154  msg(MSG::INFO) << " " << it->regionId();
155  }
156  msg(MSG::INFO) << endmsg;
157 }
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
RegionSelectionSvc::initialize
StatusCode initialize()
initialize
Definition: RegionSelectionSvc.cxx:43
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::m_region_string
Gaudi::Property< std::string > m_region_string
region string - job option
Definition: RegionSelectionSvc.h:63
RegionSelectionSvc::queryInterface
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvUnknown)
just some crazy atheta function
Definition: RegionSelectionSvc.cxx:31
MuonCalib::NtupleStationId
Definition: NtupleStationId.h:36
RegionSelectionSvc::m_idToFixedIdTool
ToolHandle< MuonCalib::IIdToFixedIdTool > m_idToFixedIdTool
Definition: RegionSelectionSvc.h:74
skel.it
it
Definition: skel.GENtoEVGEN.py:423
RegionSelectionSvc::GetRegionSelection
std::string GetRegionSelection() const
get region selection
Definition: RegionSelectionSvc.cxx:65
RegionSelectionSvc
Definition: RegionSelectionSvc.h:35
RegionSelectionSvc::~RegionSelectionSvc
virtual ~RegionSelectionSvc()
destructor
RegionSelectionSvc::interfaceID
static const InterfaceID & interfaceID()
Definition: RegionSelectionSvc.h:41
IdToFixedIdTool.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
RegionSelectionSvc::m_detMgr
const MuonGM::MuonDetectorManager * m_detMgr
Definition: RegionSelectionSvc.h:71
RegionSelectionSvc::ProcessString
bool ProcessString(const std::string &input)
process string
Definition: RegionSelectionSvc.cxx:144
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:69
RegionSelectionSvc::isInRegion
bool isInRegion(const MuonCalib::MuonFixedId &id) const
return true if id is in selected region
Definition: RegionSelectionSvc.cxx:63
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:66
MuonGM::MuonDetectorManager::getMdtReadoutElement
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:204
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:50
lumiFormat.i
int i
Definition: lumiFormat.py:92
Atlas.StoreGateSvc
StoreGateSvc
Definition: Atlas.UnixStandardJob.py:25
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:106
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:149
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
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:65
RegionSelectionSvc::m_unique_chambers
std::set< MuonCalib::NtupleStationId > m_unique_chambers
Definition: RegionSelectionSvc.h:70
RegionSelectionSvc::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
search for chambers and multilayers in selected region towers in selected region
Definition: RegionSelectionSvc.h:73
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:98
RegionSelectionSvc::m_master_region
std::unique_ptr< MuonCalib ::RegionSelectorBase > m_master_region
master region
Definition: RegionSelectionSvc.h:67
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:67
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
RegionSelectionSvc.h