22 trackerTopology_(trackerTopology),
23 alignableIndexer_(alignableIndexer)
30 alignmentLevels_.push_back(
std::move(level));
36 alignmentLevels_.clear();
43 auto highestLevel = alignmentLevels_.back()->levelType;
45 std::ostringstream
ss;
46 ss <<
"building CompositeAlignables for "
49 unsigned int numCompositeAlignables = 0;
50 for (
unsigned int level = 1;
level < alignmentLevels_.size(); ++
level) {
51 numCompositeAlignables += buildLevel(
level, alignableMap, ss);
54 ss <<
"built " << numCompositeAlignables <<
" CompositeAlignables for "
57 <<
"@SUB=AlignableCompositeBuilder::buildAll" << ss.str();
59 return numCompositeAlignables;
72 std::ostringstream&
ss)
74 unsigned int childLevel = parentLevel - 1;
75 unsigned int maxNumParents = maxNumComponents(parentLevel);
77 auto childType = alignmentLevels_[childLevel] ->levelType;
78 auto parentType = alignmentLevels_[parentLevel]->levelType;
89 for (
auto*
child: children) {
91 const auto index = getIndexOfStructure(
child->id(), parentLevel);
99 if (alignmentLevels_[parentLevel]->isFlat) {
101 child->globalRotation());
110 parent->addComponent(
child);
113 ss <<
" built " <<
parents.size() <<
" "
115 <<
"(s) (theoretical maximum: " << maxNumParents
116 <<
") consisting of " << children.size() <<
" "
129 for (
unsigned int level = startLevel;
130 level < alignmentLevels_.size();
132 components *= alignmentLevels_[
level]->maxNumComponents;
143 auto indexOf = alignableIndexer_.get(alignmentLevels_[level]->levelType);
145 if (alignmentLevels_.size() - 1 >
level) {
146 return getIndexOfStructure(
id, level + 1)
147 * alignmentLevels_[
level]->maxNumComponents
148 + indexOf(
id, trackerTopology_) - 1;
151 return indexOf(
id, trackerTopology_) - 1;
TkRotation< Scalar > RotationType
unsigned int buildLevel(unsigned int parentLevel, AlignableMap &, std::ostringstream &)
Builds the components for a given level in the hierarchy.
std::vector< Alignable * > Alignables
unsigned int getIndexOfStructure(align::ID, unsigned int level) const
unsigned int buildAll(AlignableMap &)
Alignables & get(const std::string &name="")
Alignables & find(const std::string &name="")
void clearAlignmentLevels()
Resets the alignment-levels.
unsigned int maxNumComponents(unsigned int startLevel) const
static const char * idToString(align::StructureType type)
AlignableCompositeBuilder(const TrackerTopology *, AlignableIndexer &)
void addAlignmentLevel(std::unique_ptr< AlignmentLevel > level)