1 #ifndef _DivisiveClusterizer1D_H_ 2 #define _DivisiveClusterizer1D_H_ 34 float zsep = 0.05,
bool wei =
true );
38 std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
operator()
39 (
const std::vector < Cluster1D<T> > & )
const override;
97 std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
99 (
const std::vector < Cluster1D<T> > &
input )
const 101 std::vector < Cluster1D<T> > discardedCluster1Ds;
102 std::vector < Cluster1D<T> >
output;
104 return std::pair < std::vector < Cluster1D<T> >, std::vector < const T * > >
118 std::vector <
Cluster1D<T> > & totDiscardedTracks )
const 122 std::vector < Cluster1D<T> >
input = inputo;
123 std::vector < Cluster1D<T> > discardedTracks;
131 std::vector < Cluster1D<T> > partOfPTracks;
132 partOfPTracks.push_back(input.front());
133 for(
typename std::vector <
Cluster1D<T> >::const_iterator ic=(input.begin())+1;
134 ic != input.end(); ic++)
137 if ( fabs( (*ic).position().value()-(*(ic-1)).position().value() )
140 partOfPTracks.push_back((*ic));
148 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclus=clusters.begin();
149 iclus != clusters.end(); iclus++)
151 finalCluster1Ds.push_back(*iclus);
159 partOfPTracks.clear();
160 partOfPTracks.push_back((*ic));
167 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclus = clusters.begin();
168 iclus != clusters.end(); iclus++)
170 finalCluster1Ds.push_back(*iclus);
179 sort(finalCluster1Ds.begin(), finalCluster1Ds.end(),
187 std::vector < Cluster1D<T> >
192 std::vector < Cluster1D<T> > finalCluster1Ds;
193 discardedTracks.clear();
194 std::vector<Cluster1D<T> > pvClu0 =
clusters;
195 std::vector<Cluster1D<T> > pvCluNew = pvClu0;
199 int nDiscardedAtIteration = 100;
200 while ( nDiscardedAtIteration !=0 )
203 std::vector<Cluster1D<T> >
204 tracksAtIteration =
theCleaner->discardedCluster1Ds();
205 nDiscardedAtIteration = tracksAtIteration.size();
206 if ( nDiscardedAtIteration!=0 )
212 unsigned ntkclus = pvCluNew.size();
213 unsigned ndiscard = discardedTracks.size();
221 pvClu0 = discardedTracks;
222 discardedTracks.clear();
235 return finalCluster1Ds;
245 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclu = clusou.begin();
246 iclu != clusou.end(); iclu++)
248 cludest.push_back(*iclu);
264 std::vector<const T* >
267 std::vector<const T* >
tracks;
268 for (
typename std::vector<
Cluster1D<T> >::const_iterator iclu = clu.begin();
269 iclu != clu.end(); iclu++)
271 std::vector < const T * > clutks = iclu->tracks();
272 for (
typename std::vector< const T * >::const_iterator
i=clutks.begin();
273 i!=clutks.end() ; ++
i )
275 tracks.push_back ( *
i );
291 result = (*theMerger)( old , *iclu );
pixeltemp::Cluster1DMerger< T > * theMerger
std::vector< Cluster1D< T > > makeCluster1Ds(std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const
void insertTracks(std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const
~DivisiveClusterizer1D() override
static std::string const input
DivisiveClusterizer1D * clone() const override
void findCandidates(const std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &, std::vector< Cluster1D< T > > &) const
Cluster1D< T > mergeCluster1Ds(std::vector< Cluster1D< T > > &) const
XYZPointD XYZPoint
point in space with cartesian internal representation
void setBeamSpot(const math::XYZPoint &bs)
DivisiveClusterizer1D(float zoffset=5., int ntkmin=5, bool useError=true, float zsep=0.05, bool wei=true)
std::vector< const T * > takeTracks(const std::vector< Cluster1D< T > > &) const
pixeltemp::Cluster1DCleaner< T > * theCleaner