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;