81 std::vector<std::pair<typename Lattice::pos_t, op_t> > ops = term.operators;
83 std::sort(ops.begin(), ops.end(), compare<std::pair<typename Lattice::pos_t, op_t> >);
85 vector<size_t> positions;
86 for (
typename vector<pair<typename Lattice::pos_t, op_t> >::const_iterator
88 it != ops.end(); ++it)
89 positions.push_back( it->first );
90 size_t minp = *min_element(positions.begin(), positions.end());
91 size_t maxp = *max_element(positions.begin(), positions.end());
93 size_t use_b = maximum++;
95 vector<bool> done(length,
false);
96 for (
typename vector<pair<typename Lattice::pos_t, op_t> >::const_iterator it = ops.begin();
97 it != ops.end(); ++it)
99 size_t first_use_b = (it->first == minp ? 0 : use_b);
100 size_t second_use_b = (it->first == maxp ? 1 : use_b);
101 assert( it->first < prempo.size() );
103 prempo[it->first].push_back(boost::make_tuple(first_use_b, second_use_b, it->second));
104 used_dims[it->first].insert(use_b);
106 site_terms[it->first] += it->second;
107 done[it->first] =
true;
110 for (
size_t p = minp; p <= maxp; ++p)
112 op_t
const& current_filling = (term.with_sign) ? fillings[lat.
get_prop<
int>(
"type",p)] : identities[lat.
get_prop<
int>(
"type",p)];
113 prempo[p].push_back( boost::make_tuple(use_b, use_b, current_filling));
114 used_dims[p].insert(use_b);
118 leftmost_right = std::min(leftmost_right, maxp);
T get_prop(std::string property, pos_t site) const