5 #include "GaudiKernel/ConcurrencyFlags.h"
14 declareInterface<NSWL1::IStripSegmentTool>(
this);
23 return StatusCode::SUCCESS;
35 moduleList.push_back(regSelector->Module(moduleHashId));
43 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->_etaMin()) < std::abs(M2->_etaMin());} );
45 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->_etaMax()) > std::abs(M2->_etaMax());} );
47 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->rMin()) < std::abs(M2->rMin());} );
49 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->rMax()) > std::abs(M2->rMax());} );
51 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->zMin()) < std::abs(M2->zMin());} );
53 std::sort(
moduleList.begin(),
moduleList.end(),[](
const auto& M1,
const auto& M2){ return std::abs(M1->zMax()) > std::abs(M2->zMax());} );
56 if(rmin<=0 || rmax<=0)
ATH_MSG_WARNING(
"Unable to fetch NSW r/z boundaries");
60 env.upper_eta = etamax;
63 ATH_MSG_DEBUG(
"rmin=" << rmin <<
" rmax=" << rmax <<
" zmin=" <<
zmin <<
" zmax=" <<
zmax <<
" etamin=" <<
etamin <<
" etamax=" << etamax);
64 return StatusCode::SUCCESS;
69 std::pair<float,float>
range;
100 const std::unique_ptr<Muon::NSW_TrigRawDataContainer>& trgContainer)
const {
106 return StatusCode::SUCCESS;
109 std::map<uint32_t, std::vector<std::unique_ptr<StripClusterData>>[2] > cluster_map;
121 sectorid=
cl->sectorId();
122 if(
cl->isSmall()) sectorNumber=2*sectorid;
123 else sectorNumber=2*sectorid-1;
124 hash=16*sideid+sectorNumber;
134 auto item =cluster_map.find(hash_bandid);
135 if (
item != cluster_map.end()){
136 item->second[
cl->wedge()-1].push_back(std::move(
cl));
139 cluster_map[hash_bandid][
cl->wedge()-1].push_back(std::move(
cl));
145 for(
const auto& band : cluster_map){
146 int bandId=band.first;
147 if (band.second[0].size() == 0){
148 ATH_MSG_WARNING(
"Cluster size is zero for inner wedge trg with bandId "<<bandId<<
"...skipping");
151 if(band.second[1].size() == 0){
152 ATH_MSG_WARNING(
"Cluster size is zero for outer wedge trg with bandId "<<bandId<<
"...skipping");
172 char sectorSide =
'-';
173 for(
const auto&
cl : band.second[0] ){
174 z1+=
cl->globZ()*
cl->charge();
175 glx1+=
cl->globX()*
cl->charge();
176 gly1+=
cl->globY()*
cl->charge();
177 charge1+=
cl->charge();
178 sectorID = (
cl->isSmall()) ? 2*
cl->sectorId()-1 : 2*(
cl->sectorId()-1);
179 sectorSide = (
cl->sideId() == 0) ?
'C' :
'A';
182 auto trgRawData=std::make_unique< Muon::NSW_TrigRawData>(sectorID, sectorSide, bcID);
186 for(
const auto&
cl : band.second[1] ){
187 z2+=
cl->globZ()*
cl->charge();
188 glx2+=
cl->globX()*
cl->charge();
189 gly2+=
cl->globY()*
cl->charge();
190 charge2+=
cl->charge();
191 sectorID = (
cl->isSmall()) ? 2*
cl->sectorId()-1 : 2*(
cl->sectorId()-1);
192 sectorSide = (
cl->sideId() == 0) ?
'C' :
'A';
194 if (( sectorID != trgRawData->sectorId() ) ||
195 ( sectorSide != trgRawData->sectorSide() ) ||
196 ( bcID != trgRawData->bcId() ))
ATH_MSG_WARNING(
"Possible mismatch between inner and outer wedge RDO parameters");
210 ROOT::Math::XYZVector v3_centr1(glx1,gly1,z1), v3_centr2(glx2,gly2,z2);
211 ROOT::Math::XYZVector v3_segment = v3_centr2 - v3_centr1;
212 phi=v3_segment.Phi();
213 theta=v3_segment.Theta();
214 eta=v3_segment.Eta();
217 theta_inf=v3_centr1.Theta();
218 eta_inf=v3_centr1.Eta();
219 dtheta=(theta-theta_inf)*1000;
221 ATH_MSG_DEBUG(
"StripSegmentTool: phi:" <<
phi <<
" theta:" << theta <<
" eta: " <<
eta <<
" theta_inf: " << theta_inf <<
" eta_inf: " << eta_inf <<
" dtheta: " << dtheta);
224 int phiId=band.second[0].at(0)->phiId();
230 return StatusCode::SUCCESS;
239 rIndex=
findRIdx(std::abs(eta_inf), envelope);
250 if(std::abs(dtheta)>15)
continue;
251 auto rdo_segment= std::make_unique<Muon::NSW_TrigRawDataSegment>( dtheta_int, (
uint8_t)phiId, (rIndex), lowRes, phiRes);
252 trgRawData->push_back(std::move(rdo_segment));
253 trgContainer->
push_back(std::move(trgRawData));
256 return StatusCode::SUCCESS;