121 const std::string s[8] = {
"",
"pixel",
"sct",
"trt",
"ftk",
"mm",
"stgc",
"rpc" };
145 std::vector<int> subdetid;
147 for ( std::vector<RegSelModule>::iterator mptr =
m_modules.begin() ;
149 int detid = mptr->detector();
152 for (
int j=subdetid.size() ; j-- ; )
if ( subdetid[j]==detid ) found =
true;
154 if ( !found ) subdetid.push_back(detid);
164 for (
int i=subdetid.size() ; i-- ; ) {
166 m_idmap.insert( std::map<int, int>::value_type(subdetid[i], i) );
184 for ( std::vector<RegSelModule>::iterator mptr =
m_modules.begin() ;
186 m_map[(*mptr).hashID()] = &(*mptr);
209 std::set<uint32_t> robids;
211 std::vector<RegSelModule>::const_iterator mptr(
m_modules.begin());
212 std::vector<RegSelModule>::const_iterator eptr(
m_modules.end());
213 for ( ; mptr!=eptr ; ++mptr ) {
214 if ( (*mptr).enabled() ) {
216 robids.insert((*mptr).robID());
220 std::set<uint32_t>::iterator ritr(robids.begin());
221 while ( ritr!=robids.end() ) {
233 for ( std::vector<RegSelSubDetector>::iterator sptr(
m_SubDet.begin()) ;
235 (*sptr).setupDisabledModules();
243 std::map<const IdentifierHash, const RegSelModule*>::const_iterator hptr(
m_map.find(
h));
244 if ( hptr!=
m_map.end() )
return hptr->second;
252 std::map<int,int>::iterator sitr =
m_idmap.find(
id);
257 std::map<int,int>::iterator sitr =
m_idmap.find(
id);
262 std::map<int,int>::iterator sitr =
m_idmap.find(
id);
267 std::map<int,int>::iterator sitr =
m_idmap.find(
id);
279 for (
unsigned i=0 ; i<
m_SubDet.size() ; i++ ) {
280 bool inSubDet =
m_SubDet[i].inRoI(roi);
283 if ( inSubDet )
m_SubDet[i].getModules(roi, modules);
296 modules.reserve(256);
299 bool subdetflag = layer/1000;
301 int ilayer = layer%100;
302 if ( subdetflag ) subdet = (layer%1000)/100;
304 for (
unsigned i=0 ; i<
m_SubDet.size() ; i++ ) {
305 if ( !subdetflag || ( subdetflag && subdet==std::fabs(
m_SubDet[i].
ID()) ) )
m_SubDet[i].getModules( ilayer, modules);
322 int ilayer = layer%100;
324 bool subdetflag = layer/1000;
326 if ( subdetflag ) subdet = (layer%1000)/100;
328 for (
unsigned i=0 ; i<
m_SubDet.size() ; i++ ) {
330 if ( !subdetflag || ( subdetflag && subdet==std::fabs(
m_SubDet[i].
ID()) ) ) {
331 bool inSubDet =
m_SubDet[i].inRoI(roi);
333 if ( inSubDet )
m_SubDet[i].getModules(roi, ilayer, modules);
356 if ( subdetector<
m_SubDet.size() ) {
357 inDet =
m_SubDet[subdetector].inRoI(roi);
358 if ( inDet )
m_SubDet[subdetector].getModules(roi, layer, modules);
384 if ( fabs(
a)>1 ) { status =
false;
return 0; }
388 double phip = asin(
a)+
phi;
393 if ( phip>
M_PI ) phip = phip-2*
M_PI;
394 if ( phip<-
M_PI ) phip = phip+2*
M_PI;
403bool philimits(
double x,
double y,
double rmin,
double rmax,
double& phimin,
double& phimax ) {
445 for (
unsigned i=0 ; i<
m_SubDet.size() ; i++ ) {
449 const std::vector<RegSelLayer>& layers =
m_SubDet[i].getLayers();
451 for (
unsigned j=0 ; j<layers.size() ; j++ ) {
453 double rmin = layers[j].rMin();
454 double rmax = layers[j].rMax();
463 if (
philimits(
x,
y, rmin, rmax, phimin, phimax) ) {
470 bool inLayer = layers[j].inRoI(troi);
474 if ( inLayer ) layers[j].getModules(troi, modules);
497 bool inSubDet =
m_SubDet[i].inRoI(troi);
499 if ( inSubDet )
m_SubDet[i].getModules(troi, modules);
517 if (
x==0 &&
y==0 )
return getRoIData(roi, subdetector, layer, modules);
525 if ( subdetector<
m_SubDet.size() ) {
527 const std::vector<RegSelLayer>& layers =
m_SubDet[subdetector].getLayers();
529 if ( layer<layers.size() ) {
531 double rmin = layers[layer].rMin();
532 double rmax = layers[layer].rMax();
540 if (
philimits(
x,
y, rmin, rmax, phimin, phimax) ) {
547 bool inLayer = layers[layer].inRoI(troi);
551 if ( inLayer ) layers[layer].getModules(troi, modules);
574 for (
unsigned i=0 ; i<
m_modules.size() ; i++ ) {
580 std::ofstream outfile(s.c_str());
590 std::vector<const RegSelModule*> modules;
591 if ( modules.size()<256 ) modules.reserve(256);
598 std::set<uint32_t> uroblist;
600 hashlist.reserve(modules.size());
601 roblist.reserve(modules.size());
602 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
603 while ( mptr!=modules.end() ) {
604 hashlist.push_back((*mptr)->hashID());
605 roblist.push_back((*mptr++)->robID());
623 std::vector<const RegSelModule*> modules;
624 if ( modules.size()<256 ) modules.reserve(256);
631 std::set<uint32_t> uroblist;
633 hashlist.reserve(modules.size());
634 roblist.reserve(modules.size());
635 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
636 while ( mptr!=modules.end() ) {
637 hashlist.push_back((*mptr)->hashID());
638 roblist.push_back((*mptr++)->robID());
654 std::vector<const RegSelModule*> modules;
655 if ( modules.size()<256 ) modules.reserve(256);
666 std::set<uint32_t> uroblist;
668 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
669 while ( mptr!=modules.end() ) {
670 uroblist.insert((*mptr++)->robID());
673 roblist.reserve(uroblist.size());
674 std::set<uint32_t>::iterator plist(uroblist.begin());
675 while ( plist!=uroblist.end() ) {
676 roblist.push_back(*plist++);
683 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
685 roblist.reserve(modules.size());
686 while ( mptr!=modules.end() ) roblist.push_back((*mptr++)->robID());
705 std::vector<const RegSelModule*> modules;
706 if ( modules.size()<256 ) modules.reserve(256);
713 std::set<uint32_t> uroblist;
715 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
716 while ( mptr!=modules.end() ) {
717 uroblist.insert((*mptr++)->robID());
720 roblist.reserve(uroblist.size());
721 std::set<uint32_t>::iterator plist(uroblist.begin());
722 while ( plist!=uroblist.end() ) {
723 roblist.push_back(*plist++);
728 roblist.reserve(modules.size());
729 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
730 while ( mptr!=modules.end() ) roblist.push_back((*mptr++)->robID());
742 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
743 while ( itr!=
m_modules.end() ) (*itr++).enable();
752 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
753 while ( itr!=
m_modules.end() ) (*itr++).disable();
764 std::set<uint32_t> robset;
765 for (
unsigned i=0 ; i<roblist.size() ; i++ ) robset.insert(roblist[i]);
767 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
770 if ( robset.find((*itr).robID())!=robset.end() ) (*itr).disable();
781 std::set<uint32_t> robset;
782 for (
unsigned i=0 ; i<roblist.size() ; i++ ) robset.insert(roblist[i]);
784 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
787 if ( robset.find((*itr).robID())!=robset.end() ) (*itr).enable();
801 std::set<IdentifierHash> hashset;
802 for (
unsigned i=0 ; i<hashlist.size() ; i++ ) hashset.insert(hashlist[i]);
804 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
807 if ( hashset.find((*itr).hashID())!=hashset.end() ) (*itr).disable();
818 std::set<IdentifierHash> hashset;
819 for (
unsigned i=0 ; i<hashlist.size() ; i++ ) hashset.insert(hashlist[i]);
821 std::vector<RegSelModule>::iterator itr(
m_modules.begin());
824 if ( hashset.find((*itr).hashID())!=hashset.end() ) (*itr).enable();
842 std::vector<const RegSelModule*> modules;
843 if ( modules.size()<256 ) modules.reserve(256);
849 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
851 hashlist.reserve(modules.size());
852 for ( ; mptr!=modules.end() ; ++mptr ) {
853 hashlist.push_back((*mptr)->hashID());
870 std::vector<const RegSelModule*> modules;
871 if ( modules.size()<256 ) modules.reserve(256);
879 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
881 hashlist.reserve(modules.size());
882 for ( ; mptr!=modules.end() ; ++mptr ) {
883 hashlist.push_back((*mptr)->hashID());
906 std::vector<RegSelModule>::const_iterator mptr(
m_modules.begin());
907 std::vector<RegSelModule>::const_iterator eptr(
m_modules.end());
908 for ( ; mptr!=eptr ; ++mptr ) {
909 if ( (*mptr).enabled() ) hashlist.push_back((*mptr).hashID());
921 std::vector<const RegSelModule*> modules;
927 hashlist.reserve(modules.size());
928 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
929 while ( mptr!=modules.end() ) {
930 hashlist.push_back((*mptr++)->hashID());
950 roblist.reserve(256);
952 std::set<uint32_t> uroblist;
953 std::vector<RegSelModule>::const_iterator mptr(
m_modules.begin());
954 for ( ; mptr!=
m_modules.end() ; ++mptr ) {
955 if ( (*mptr).enabled() ) uroblist.insert((*mptr).robID());
958 std::set<uint32_t>::iterator rlist(uroblist.begin());
959 while ( rlist!=uroblist.end() ) {
960 roblist.push_back(*rlist++);
976 roblist.reserve(256);
979 std::set<uint32_t> uroblist;
980 std::vector<RegSelModule>::const_iterator mptr(
m_modules.begin());
981 for ( ; mptr!=
m_modules.end() ; ++mptr ) {
982 if ( (*mptr).enabled() ) {
983 uroblist.insert((*mptr).robID());
984 hashlist.push_back((*mptr).hashID());
988 std::set<uint32_t>::iterator rlist(uroblist.begin());
989 while ( rlist!=uroblist.end() ) {
990 roblist.push_back(*rlist++);
1002 std::vector<const RegSelModule*> modules;
1003 if ( modules.size()<256 ) modules.reserve(256);
1012 hashlist.reserve(modules.size());
1013 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
1014 while ( mptr!=modules.end() ) {
1015 hashlist.push_back((*mptr++)->hashID());
1034 std::vector<const RegSelModule*> modules;
1035 if ( modules.size()<256 ) modules.reserve(256);
1041 for ( std::vector<RegSelSubDetector>::const_iterator sptr(
m_SubDet.begin()) ;
1044 if ( (*sptr).inRoI(roi) ) {
1046 const std::vector<RegSelLayer>& lyrs = (*sptr).getLayers();
1048 if ( layer<lyrs.size() ) {
1061 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
1062 while ( mptr!=modules.end() ) {
1063 roblist.push_back((*mptr++)->robID());
1071 if ( removeduplicates || roblist.size()>4000 )
removeDuplicates( roblist );
1087 std::vector<const RegSelModule*> modules;
1091 roblist.reserve(256);
1093 std::set<uint32_t> uroblist;
1094 std::vector<const RegSelModule*>::const_iterator mptr(modules.begin());
1095 for ( ; mptr!=modules.end() ; ++mptr ) {
1096 if ( (*mptr)->enabled() ) roblist.push_back((*mptr)->robID());
1117 std::vector<const RegSelModule*> modules;
1118 if ( modules.size()<256 ) modules.reserve(256);
1121 for ( std::vector<RegSelSubDetector>::const_iterator sptr(
m_SubDet.begin()) ;
1124 if ( (*sptr).inRoI(roi) ) {
1126 const std::vector<RegSelLayer>& lyrs = (*sptr).getLayers();
1128 if ( layer<lyrs.size() ) {
1138 std::vector<const RegSelModule*>::iterator mptr(modules.begin());
1139 while ( mptr!=modules.end() ) {
1140 hashlist.push_back((*mptr++)->hashID());
1150 std::set<int> disabled_layers;
1152 for ( std::vector<RegSelSubDetector>::const_iterator sptr(
m_SubDet.begin()) ;
1157 if ( subdetector!=sptr->ID() )
continue;
1159 if ( (*sptr).inRoI(roi) ) {
1161 const std::vector<RegSelLayer>& lyrs = (*sptr).getLayers();
1163 for (
int layer=lyrs.size() ; layer-- ; ) {
1165 std::vector<const RegSelModule*> modules;
1166 if ( modules.size()<256 ) modules.reserve(256);
1171 if ( lyr.
inRoI(roi) ) {
1174 if ( modules.size() ) layers.push_back(layer);
1182 std::set<int>::iterator bitr(disabled_layers.begin());
1183 std::set<int>::iterator eitr(disabled_layers.end());
1184 while ( bitr!=eitr ) { layers.push_back(*bitr++); }
1198 std::ifstream infile(s.c_str());
1200 return read(infile);
1206 unsigned Nmodules = 0;
1212 bool newformat =
false;
1221 else if (Nmodules > 1000000u) {
1223 std::cerr <<
"read(): Unreasonable Nmodules " << Nmodules <<
"\n";
1227 unsigned modcount=0;
1229 for ( ; newformat || modcount<Nmodules ; modcount++ ) {
1242 if ( (!newformat) && (modcount<Nmodules ) )
return false;
Scalar phi() const
phi method
bool getModule(std::istream &s, RegSelModule &m)
double phiprime(double x, double y, double phi, double r, bool &status)
bool philimits(double x, double y, double rmin, double rmax, double &phimin, double &phimax)
emacs: this is -*- c++ -*-
Header file for AthHistogramAlgorithm.
void IDList_layer(long layer, const IRoiDescriptor &roi, std::vector< T > &idlist, handler_layer< C, T > lister) const
static void removeDuplicates(std::vector< T > &vec)
useful for removing duplicates if required ...
void IDList(const IRoiDescriptor &roi, std::vector< T > &idlist, handler< C, T > lister) const
Describes the API of the Region of Ineterest geometry.
virtual bool isFullscan() const =0
is this a full detector RoI?
virtual double phiPlus() const =0
extreme phi values
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
virtual double phiMinus() const =0
virtual double zedMinus() const =0
virtual double etaMinus() const =0
virtual double etaPlus() const =0
This is a "hash" representation of an Identifier.
void getModules(const RegSelRoI &roi, std::vector< const RegSelModule * > &modules) const
Fixme: This is the completely correct solution, where each module is allowed to be at a completely di...
void getDisabledModules(const RegSelRoI &roi, std::vector< const RegSelModule * > &modules) const
const std::string & getName() const
RegSelName(const std::string &s="")
bool read(std::istream &s)
void write(std::ostream &s=std::cout) const
std::vector< RegSelModule > m_modules
virtual void ROBIDList_internal(const IRoiDescriptor &roi, std::vector< uint32_t > &roblist) const
rob methods
void initialiseDisabledModules()
std::vector< RegSelSubDetector > m_SubDet
std::map< int, int > m_idmap
void disableModuleList(const std::vector< IdentifierHash > &hashlist)
void getDisabledLayers(const RegSelRoI &roi, int subdetector, std::vector< int > &layers) const
std::vector< uint32_t > m_allROBids
std::vector< IdentifierHash > m_allHashes
std::map< const IdentifierHash, const RegSelModule * > m_map
void addModule(RegSelModule &module)
void initialiseFullScan()
virtual void getRobList(const RegSelRoI &roi, unsigned layer, std::vector< uint32_t > &roblist, bool removeduplicates=true) const
bool getRoIData(const RegSelRoI &r, std::vector< const RegSelModule * > &modules) const
virtual void HashIDList(const IRoiDescriptor &roi, std::vector< IdentifierHash > &idlist) const override
implementation of the IRegSelUT interface hash id methods
void enableRobList(const std::vector< uint32_t > &roblist)
static void cleanup(std::vector< IdentifierHash > &idvec)
annoying cleanup function specifically for the RPC, but we have to add it here since we have abstract...
virtual void getHashList(const RegSelRoI &roi, std::vector< IdentifierHash > &hashlist) const
void disableLayer(int id, unsigned layer)
void disableRobList(const std::vector< uint32_t > &roblist)
const std::vector< RegSelModule > & getModules() const
virtual void HashIDList_internal(const IRoiDescriptor &roi, std::vector< IdentifierHash > &idlist) const
horrible internal interface methods
void enableModuleList(const std::vector< IdentifierHash > &hashlist)
void disableSubDetector(int id)
const RegSelModule * Module(const IdentifierHash &h) const
void enableLayer(int id, unsigned layer)
virtual void getRobHashList(std::vector< uint32_t > &roblist, std::vector< IdentifierHash > &hashlist) const
virtual void ROBIDList(const IRoiDescriptor &roi, std::vector< uint32_t > &roblist) const override
rob methods
void addModules(const std::vector< RegSelModule > &m)
void enableSubDetector(int id)
void getDisabledHashList(const RegSelRoI &roi, unsigned layer, std::vector< IdentifierHash > &hashlist) const
virtual bool inRoI(const RegSelRoI &roi) const