Skip to content
Snippets Groups Projects
Commit 906049ce authored by Frank Gaede's avatar Frank Gaede
Browse files

- added missing IDDescriptor description string

  - tried to change encoding (starting with LSB)
     did not work : commented out again
parent dedb54b4
No related branches found
No related tags found
No related merge requests found
...@@ -35,7 +35,7 @@ namespace DD4hep { ...@@ -35,7 +35,7 @@ namespace DD4hep {
* @date 2012/07/31 * @date 2012/07/31
*/ */
struct IDDescriptor : public Ref_t { struct IDDescriptor : public Ref_t {
public: public:
typedef unsigned long long int VolumeID; typedef unsigned long long int VolumeID;
//typedef std::pair<int,int> Field; //typedef std::pair<int,int> Field;
struct Field { struct Field {
...@@ -43,9 +43,12 @@ namespace DD4hep { ...@@ -43,9 +43,12 @@ namespace DD4hep {
VolumeID mask; VolumeID mask;
VolumeID encode(int value) const { VolumeID encode(int value) const {
VolumeID v = value; VolumeID v = value;
//FGxx return ( ( v << first ) & mask ) ;
return mask|((v<<(64-second))>>first); return mask|((v<<(64-second))>>first);
} }
int decode(VolumeID value) const { int decode(VolumeID value) const {
//FGxx return ( mask & value ) >> first ;
return (~mask&value)>>(64-second-first); return (~mask&value)>>(64-second-first);
} }
}; };
......
...@@ -39,6 +39,8 @@ namespace { ...@@ -39,6 +39,8 @@ namespace {
o->maxBit = 0; o->maxBit = 0;
o->fieldIDs.clear(); o->fieldIDs.clear();
o->fieldMap.clear(); o->fieldMap.clear();
o->description = dsc ;
for(Elements::const_iterator i=elements.begin();i!=elements.end();++i) { for(Elements::const_iterator i=elements.begin();i!=elements.end();++i) {
const string& s = *i; const string& s = *i;
f.clear(); f.clear();
...@@ -48,7 +50,10 @@ namespace { ...@@ -48,7 +50,10 @@ namespace {
field.first = f.size() == 3 ? ::atoi(f[1].c_str()) : pos; field.first = f.size() == 3 ? ::atoi(f[1].c_str()) : pos;
field.second = f.size() == 3 ? ::atoi(f[2].c_str()) : ::atoi(f[1].c_str()); field.second = f.size() == 3 ? ::atoi(f[2].c_str()) : ::atoi(f[1].c_str());
field.second = ::abs(field.second); field.second = ::abs(field.second);
//FG: field.mask = ( ( 0x0001LL << (field.second) ) - 1 ) << field.first ;
field.mask = ~((~0x0ull<<(64-field.second))>>(64-field.second)<<(64-field.first-field.second)); field.mask = ~((~0x0ull<<(64-field.second))>>(64-field.second)<<(64-field.first-field.second));
pos = field.first + ::abs(field.second); pos = field.first + ::abs(field.second);
if ( pos>o->maxBit ) o->maxBit = pos; if ( pos>o->maxBit ) o->maxBit = pos;
o->fieldIDs.push_back(make_pair(o->fieldMap.size(),f[0])); o->fieldIDs.push_back(make_pair(o->fieldMap.size(),f[0]));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment