View Javadoc

1   package org.lcsim.recon.tracking.trfxyp;
2   
3   import java.util.List;
4   import java.util.ArrayList;
5   
6   import org.lcsim.recon.tracking.trfutil.Assert;
7   
8   import org.lcsim.recon.tracking.trfbase.McCluster;
9   import org.lcsim.recon.tracking.trfbase.ETrack;
10  import org.lcsim.recon.tracking.trfbase.Cluster;
11  import org.lcsim.recon.tracking.trfbase.Surface;
12  import org.lcsim.recon.tracking.trfbase.Hit;
13  import org.lcsim.recon.tracking.trfbase.TrackVector;
14  import org.lcsim.recon.tracking.trfbase.TrackError;
15  
16  /** Describes a (v,z) measurement on a XYPlane.
17   *<p>
18   * This is a very simple hit.  It produces one prediction with fixed
19   * measurement which is simply the (v,z) of the track.
20   *
21   *@author Norman A. Graf
22   *@version 1.0
23   *
24   */
25  public class ClusXYPlane2 extends McCluster
26  {
27      
28      // static methods
29      
30      // Return the type name.
31      public static String typeName()
32      { return "ClusXYPlane2"; }
33      
34      // Return the type.
35      public static String staticType()
36      { return typeName(); }
37      
38      // cluster parameter indices
39      
40      public static final int IV=0;
41      public static final int IZ=1;
42      
43      // attributes
44      
45      // the surface
46      private SurfXYPlane _sxyp;
47      
48      // measurement
49      private double _v,_z;
50      
51      // the error matrix for the measurement
52      private double _dv2;
53      private double _dz2;
54      private double _dvdz;
55      
56      // methods
57      
58      // equality
59      public boolean equal( Cluster clus)
60      {
61          Assert.assertTrue( type().equals(clus.type()) );
62          ClusXYPlane2 ccp = (ClusXYPlane2) clus;
63          return ( _v == ccp._v ) &&
64                  ( _z == ccp._z ) &&
65                  ( _dv2 == ccp._dv2 ) &&
66                  ( _dz2 == ccp._dz2 ) &&
67                  ( _dvdz == ccp._dvdz ) &&
68                  ( _sxyp.equals(ccp._sxyp) );
69      }
70      
71      // generate first (and only) track prediction
72      public List predict( ETrack tre)
73      {
74          List hits =  new ArrayList();
75          TrackVector  vec = tre.vector();
76          TrackError  err = tre.error();
77          
78          hits.add(  new
79                  HitXYPlane2( vec.get(SurfXYPlane.IV),vec.get(SurfXYPlane.IZ),
80                  err.get(SurfXYPlane.IV,SurfXYPlane.IV),
81                  err.get(SurfXYPlane.IZ,SurfXYPlane.IZ),
82                  err.get(SurfXYPlane.IV,SurfXYPlane.IZ)
83                  ) );
84          return hits;
85      }
86      
87      // methods
88      
89      // constructor
90      public ClusXYPlane2(double dist,double phi, double v, double z,
91              double dv2, double dz2, double dvdz )
92      {
93          _sxyp = new SurfXYPlane(dist,phi);
94          _v = v;
95          _z=  z;
96          _dv2 = dv2;
97          _dz2 = dz2;
98          _dvdz = dvdz;
99          
100         Assert.assertTrue( _dv2 >= 0.0 && _dz2 >=0. );
101         
102         // check that determinant of _dhm is positive
103         Assert.assertTrue( _dv2*_dz2 - _dvdz*_dvdz >= 0.0);
104         
105     }
106     
107     // constructor from a single mc id
108     
109     public ClusXYPlane2(double dist,double phi, double v, double z,
110             double dv2, double dz2, double dvdz, int mcid )
111     {
112         super(mcid);
113         _sxyp = new SurfXYPlane(dist,phi);
114         _v = v;
115         _z=  z;
116         _dv2 = dv2;
117         _dz2 = dz2;
118         _dvdz = dvdz;
119         
120         Assert.assertTrue( _dv2 >= 0.0 && _dz2 >=0. );
121         
122         // check that determinant of _dhm is positive
123         Assert.assertTrue( _dv2*_dz2 - _dvdz*_dvdz >= 0.0);
124         
125     }
126     
127     // constructor from a list of mc ids
128     
129     public ClusXYPlane2(double dist,double phi, double v, double z,
130             double dv2, double dz2, double dvdz, List mcids )
131     {
132         super(mcids);
133         _sxyp = new SurfXYPlane(dist,phi);
134         _v = v;
135         _z=  z;
136         _dv2 = dv2;
137         _dz2 = dz2;
138         _dvdz = dvdz;
139         
140         Assert.assertTrue( _dv2 >= 0.0 && _dz2 >=0. );
141         
142         // check that determinant of _dhm is positive
143         Assert.assertTrue( _dv2*_dz2 - _dvdz*_dvdz >= 0.0);
144         
145     }
146     
147     // copy constructor
148     public ClusXYPlane2( ClusXYPlane2 clus)
149     {
150         super(clus);
151         _sxyp = clus._sxyp;
152         _v = clus.
153                 _v;_z = clus._z;
154                 _dv2 = clus._dv2;
155                 _dz2 = clus._dz2;
156                 _dvdz = clus._dvdz;
157     }
158     
159     // return the type
160     public String type()
161     { return staticType();  };
162     
163     // return the surface
164     public Surface surface()
165     { return _sxyp; };
166     public double v()
167     { return _v; }
168     public double z()
169     { return _z; }
170     public double dV2()
171     { return _dv2; }
172     public double dZ2()
173     { return _dz2; }
174     public double dVdZ()
175     { return _dvdz; }
176     
177     // there are no more predictions.
178     public Hit newNextPrediction()
179     { return null; };
180     
181     public String toString()
182     {
183         return " vz " + _sxyp
184                 + ": vz =  [" + _v + " , " + _z + " ] +/- " +
185                 "[ " + _dv2 + " , " + _dz2 +" , " + _dvdz + " ] ";
186     }
187     
188 }