1 #ifndef _DivisiveClusterizer1D_H_ 2 #define _DivisiveClusterizer1D_H_ 29 float zsep = 0.05,
bool wei =
true );
33 std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
operator()
34 (
const std::vector < Cluster1D<T> > & )
const;
90 std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
92 (
const std::vector < Cluster1D<T> > &
input )
const 94 std::vector < Cluster1D<T> > discardedCluster1Ds;
95 std::vector < Cluster1D<T> >
output;
97 return std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
111 std::vector <
Cluster1D<T> > & totDiscardedTracks )
const 115 std::vector < Cluster1D<T> >
input = inputo;
116 std::vector < Cluster1D<T> > discardedTracks;
124 std::vector < Cluster1D<T> > partOfPTracks;
125 partOfPTracks.push_back(input.front());
126 for(
typename std::vector <
Cluster1D<T> >::const_iterator ic=(input.begin())+1;
127 ic != input.end(); ic++)
130 if ( fabs( (*ic).position().value()-(*(ic-1)).position().value() )
133 partOfPTracks.push_back((*ic));
141 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclus=clusters.begin();
142 iclus != clusters.end(); iclus++)
144 finalCluster1Ds.push_back(*iclus);
152 partOfPTracks.clear();
153 partOfPTracks.push_back((*ic));
160 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclus = clusters.begin();
161 iclus != clusters.end(); iclus++)
163 finalCluster1Ds.push_back(*iclus);
172 sort(finalCluster1Ds.begin(), finalCluster1Ds.end(),
180 std::vector < Cluster1D<T> >
185 std::vector < Cluster1D<T> > finalCluster1Ds;
186 discardedTracks.clear();
187 std::vector<Cluster1D<T> > pvClu0 =
clusters;
188 std::vector<Cluster1D<T> > pvCluNew = pvClu0;
192 int nDiscardedAtIteration = 100;
193 while ( nDiscardedAtIteration !=0 )
196 std::vector<Cluster1D<T> >
197 tracksAtIteration =
theCleaner->discardedCluster1Ds();
198 nDiscardedAtIteration = tracksAtIteration.size();
199 if ( nDiscardedAtIteration!=0 )
205 unsigned ntkclus = pvCluNew.size();
206 unsigned ndiscard = discardedTracks.size();
214 pvClu0 = discardedTracks;
215 discardedTracks.clear();
228 return finalCluster1Ds;
236 if (clusou.size() == 0)
238 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclu = clusou.begin();
239 iclu != clusou.end(); iclu++)
241 cludest.push_back(*iclu);
257 std::vector<const T* >
260 std::vector<const T* >
tracks;
261 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclu = clu.begin();
262 iclu != clu.end(); iclu++)
264 std::vector < const T * > clutks = iclu->tracks();
265 for (
typename std::vector< const T * >::const_iterator
i=clutks.begin();
266 i!=clutks.end() ; ++
i )
268 tracks.push_back ( *
i );
284 result = (*theMerger)( old , *iclu );
virtual DivisiveClusterizer1D * clone() const
std::vector< const T * > takeTracks(const std::vector< Cluster1D< T > > &) const
std::vector< Cluster1D< T > > makeCluster1Ds(std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const
static std::string const input
Cluster1DCleaner< T > * theCleaner
DivisiveClusterizer1D(float zoffset=5., int ntkmin=5, bool useError=true, float zsep=0.05, bool wei=true)
Cluster1DMerger< T > * theMerger
Cluster1D< T > mergeCluster1Ds(std::vector< Cluster1D< T > > &) const
void findCandidates(const std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const
void insertTracks(std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const