1 package org.lcsim.recon.tracking.trffit;
2 import java.util.List;
3 import java.util.ArrayList;
4 import java.util.Iterator;
5
6 import org.lcsim.recon.tracking.trfutil.RandomGenerator;
7
8 import org.lcsim.recon.tracking.trfbase.Surface;
9 import org.lcsim.recon.tracking.trfbase.Cluster;
10 import org.lcsim.recon.tracking.trfbase.Hit;
11 import org.lcsim.recon.tracking.trfbase.Propagator;
12 import org.lcsim.recon.tracking.trfbase.PropStat;
13 import org.lcsim.recon.tracking.trfbase.TrackVector;
14 import org.lcsim.recon.tracking.trfbase.HitGenerator;
15 import org.lcsim.recon.tracking.trfbase.VTrack;
16 import org.lcsim.recon.tracking.trfbase.ETrack;
17 import org.lcsim.recon.tracking.trfbase.TrackError;
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class HTrackGenerator extends RandomGenerator
34 {
35
36
37 private List _hgens;
38
39
40 private Surface _srf;
41
42
43 private TrackError _terr;
44
45
46 private Propagator _prop;
47
48
49
50
51
52
53
54
55
56
57 public HTrackGenerator( List hgens, Propagator prop,
58 Surface srf, TrackError terr)
59 {
60 _hgens = hgens;
61 _terr = new TrackError(terr);
62 _prop = prop.newPropagator();
63 _srf = srf.newPureSurface();
64 }
65
66
67
68
69
70
71
72
73
74
75 public HTrack newTrack( VTrack trv)
76 {
77 HTrack trh = null;
78 VTrack newtrv = new VTrack(trv);
79
80 List track_hits = new ArrayList();
81
82
83 for ( Iterator ihgen=_hgens.iterator(); ihgen.hasNext(); )
84 {
85 HitGenerator hgen = (HitGenerator) ihgen.next();
86
87 PropStat pstat = _prop.vecProp(newtrv,hgen.surface());
88 if ( ! pstat.success() ) break;
89
90 Cluster clu = hgen.newCluster(newtrv,0);
91 if ( clu == null ) break;
92
93 List hits = clu.predict( new ETrack(newtrv,_terr), clu );
94 if ( hits.size() == 0 ) break;
95 track_hits.add( hits.get(0) );
96 }
97
98
99 if ( track_hits.size() != _hgens.size() ) return trh;
100
101 VTrack starttrv = new VTrack(trv);
102 PropStat pstat = _prop.vecProp(starttrv,_srf);
103 if ( ! pstat.success() ) return trh;
104 ETrack tre = new ETrack(starttrv,_terr);
105 trh = new HTrack(tre);
106
107 for ( Iterator ihit=track_hits.iterator(); ihit.hasNext(); )
108 trh.addHit((Hit) ihit.next());
109 return trh;
110 }
111
112
113
114
115
116
117
118 public String toString()
119 {
120 return getClass().getName();
121 }
122
123 }