5 modified files
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.4 -r1.5
--- BuildCCDs.java 17 Feb 2007 02:00:18 -0000 1.4
+++ BuildCCDs.java 9 May 2008 00:35:32 -0000 1.5
@@ -13,16 +13,19 @@
/**
* creates vector of CCD objects according to particular detector geometry
* @author sinev U of Oregon; [log in to unmask]; SLAC x2970;
- * @version $Id: BuildCCDs.java,v 1.4 2007/02/17 02:00:18 sinev Exp $
+ * @version $Id: BuildCCDs.java,v 1.5 2008/05/09 00:35:32 sinev Exp $
* @see CCD
*/
public class BuildCCDs
{
+ private boolean debug = false;
private Vector ccds= new Vector();
- private final int MaxLayers = 20;
+ private final int MaxLayers = 30;
private double[] lrsrad = new double[MaxLayers];
private int NLayers = 0;
private int NBarrels = 0;
+ private String[] bar_sdnms = {"VertexBarrel","BarrelVertex" };
+ private String[] ec_sdnms = {"VertexEndcap","EndcapVertex" };
/**
* default constructor creates BuildCCDs object and clears Vector of built CCDs.
@@ -30,6 +33,13 @@
public BuildCCDs()
{
ccds.clear();
+ }
+
+ public BuildCCDs(String[] bnames, String[] enames)
+ {
+ bar_sdnms = bnames;
+ ec_sdnms = enames;
+ ccds.clear();
}
/**
@@ -69,11 +79,14 @@
double actthk = 0.;
for(Subdetector subDet : subDets)
{
- String sdnam = subDet.getName();
cyl = false;
eca=false;
- if(sdnam.equals("VertexBarrel")||sdnam.equals("VertexEndcap")||(sdnam.equals("BarrelVertex"))
- ||(sdnam.equals("EndcapVertex")))
+ boolean vsbd = false;
+ String sdnam = subDet.getName();
+ if(debug) System.out.println("Found subdetector with name: "+sdnam);
+ for(String bvnm:bar_sdnms) if(sdnam.equals(bvnm)) {vsbd=true; eca=false;}
+ for(String evnm:ec_sdnms) if(sdnam.equals(evnm)) {vsbd=true; eca=true;}
+ if(vsbd)
{
if(subDet instanceof MultiLayerTracker)
{
@@ -126,13 +139,13 @@
if(eca)
{
ccd = new CCD(rmin[i],rdef,zdef[i],eca,spec,esp);
+ if(debug) System.out.println("Building Disk CCD, lr "+i+" with radius "+rdef+" at Z "+zdef[i]);
ccdmi = new CCD(rmin[i],rdef,-zdef[i],eca,spec,esp);
+ if(debug) System.out.println("Building Disk CCD, lr "+i+" with radius "+rdef+" at Z "+(-zdef[i]));
}
if(ccd != null)
{
- if(cyl) System.out.println("Building cylindrical CCD, lr "+i+" with radius "+rdef+" and Z max "+zdef[i]);
- if(eca) System.out.println("Building Disk CCD, lr "+i+" with radius "+rdef+" at Z "+zdef[i]);
- if(eca) System.out.println("Building Disk CCD, lr "+i+" with radius "+rdef+" at Z "+(-zdef[i]));
+ if((cyl) && debug) System.out.println("Building cylindrical CCD, lr "+i+" with radius "+rdef+" and Z max "+zdef[i]);
ccd.setLayerNumber(i);
ccds.addElement(ccd);
if(ccdmi != null)
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.5 -r1.6
--- CCD.java 3 Mar 2007 02:45:58 -0000 1.5
+++ CCD.java 9 May 2008 00:35:32 -0000 1.6
@@ -8,7 +8,7 @@
* including CCD parameters and all signal parameters, including digitized signals
* in each CCD pixel
* @author sinev U of Oregon; [log in to unmask] ; SLAC x2970
- * @version $Id: CCD.java,v 1.5 2007/03/03 02:45:58 sinev Exp $
+ * @version $Id: CCD.java,v 1.6 2008/05/09 00:35:32 sinev Exp $
*/
public class CCD
{
@@ -175,9 +175,9 @@
{
NRows = (int) ((2.*maxRad)/(pixToL*PixelSizeY));
NColumns = (int) ((2.*maxRad)/(pixToL*PixelSizeX));
-// System.out.println("Making endcap CCD with min radius "+minRad+" max rad"+maxRad+" Z "+minZ);
-// System.out.println("Pixel size x = "+PixelSizeX+" Pixel size y = "+PixelSizeY);
-// System.out.println("N rows = "+NRows+" N columns = "+NColumns);
+// System.out.println("Making endcap CCD with min radius "+minRad+" max rad"+maxRad+" Z "+minZ);
+// System.out.println("Pixel size x = "+PixelSizeX+" Pixel size y = "+PixelSizeY);
+// System.out.println("N rows = "+NRows+" N columns = "+NColumns);
}
Rlist = new int[NRows];
RDlist = new int[NRows];
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.7 -r1.8
--- CCDSim.java 18 Dec 2007 01:08:10 -0000 1.7
+++ CCDSim.java 9 May 2008 00:35:32 -0000 1.8
@@ -18,7 +18,7 @@
* November 2006 - Nick Sinev - added diffusion in depleted region,
* Lorentz Angle, output TrackerHit, not SimTrackerHit
* @author sinev U of Oregon, SLAC. x2970 <BR>
- * @version $Id: CCDSim.java,v 1.7 2007/12/18 01:08:10 sinev Exp $
+ * @version $Id: CCDSim.java,v 1.8 2008/05/09 00:35:32 sinev Exp $
*
*/
public class CCDSim
@@ -556,6 +556,11 @@
*/
public int simTrack(CCD ccd, RawTrackSegment ts)
{
+ MCParticle mcp = ts.getMCParticle();
+ Hep3Vector mcpm = mcp.getMomentum();
+ double mcPt = Math.sqrt(mcpm.x()*mcpm.x()+mcpm.y()*mcpm.y());
+ double tlm = mcpm.z()/mcPt;
+ double cothe = tlm/Math.sqrt(tlm*tlm+1.);
double x = ts.getCenter()[0];
double y = ts.getCenter()[1];
double z = ts.getCenter()[2];
@@ -576,12 +581,14 @@
cy = y/vs;
cz = z/vs;
}
- if(ccd.isEndcap() && (Math.abs(cz) < 0.2))
+ if(ccd.isEndcap() && (Math.abs(cz) < Math.abs(cothe)) && (!(ts.getHits().size()==1)))
{
double vs = Math.sqrt(x*x+y*y+z*z);
cx = x/vs;
cy = y/vs;
cz = z/vs;
+ Hep3Vector nd = new BasicHep3Vector(cx,cy,cz);
+ ts.setDirection(nd);
}
parent = ts;
if(debug)
@@ -593,10 +600,6 @@
}
if((doHist) && (dir != null) && (!ccd.isEndcap()))
{
- MCParticle mcp = ts.getMCParticle();
- Hep3Vector mcpm = mcp.getMomentum();
- double mcPt = Math.sqrt(mcpm.x()*mcpm.x()+mcpm.y()*mcpm.y());
- double tlm = mcpm.z()/mcPt;
double tls = cz/Math.sqrt(cx*cx+cy*cy);
double deltl = tls-tlm;
if((tlm>0.) && (Math.abs(deltl)<0.2)) aida.cloud1D("CCDsim/ diff ts tl and MC tl, pos tl").fill(deltl);
@@ -607,16 +610,17 @@
int status = 0;
if(!ccd.isEndcap() && Math.abs(cdr) < 0.01) status = simBlob(ccd,ts);
if((ts.isBlob() || (ts.getHits().size() < 3))&&(status!=1)) status = simBlob(ccd,ts);
- if(!ts.isBlob() && (status != 1))
- status = simTrack(ccd,x,y,z,cx,cy,cz);
- if(status != 1)
+ if((!ts.isBlob()) && (status != 1))
+ status = simTrack(ccd,x,y,z,cx,cy,cz);
+ if(debug && (status != 1))
{
- if(!ts.isBlob()) System.out.println("Failed to simulate track segment consisting of hits with r,z: ");
- if(ts.isBlob()) System.out.println("Failed to simulate blob of hits consisting of hits with r,z: ");
+ if(!ts.isBlob()) System.out.println("Failed to simulate track segment consisting of hits with coordinates: ");
+ if(ts.isBlob()) System.out.println("Failed to simulate blob of hits consisting of hits with coordinates,energy deposit and depth:");
List<SimTrackerHit> hits = ts.getHits();
for(SimTrackerHit hit:hits)
{
- System.out.println(Math.sqrt(hit.getPoint()[0]*hit.getPoint()[0]+hit.getPoint()[1]*hit.getPoint()[1])+" "+hit.getPoint()[2]);
+ System.out.println(hit.getPoint()[0]+" "+hit.getPoint()[1]+" "+hit.getPoint()[2]+" "+hit.getdEdx()*1.E9+
+ " eV "+(ccd.getDepDir()*(hit.getPoint()[2] - ccd.getMinZ()) * 1000.)+" microns");
}
}
return status;
@@ -684,10 +688,10 @@
}
if(ccd.isEndcap())
{
- if(ccd.getStype() == 0) return -1;
+ if(ccd.getStype() == 0) {System.out.println("Wrong surface type in endcap CCD!"); return -1;}
depth = (float) (ddep * (zc - minz) * 1000.);
-// System.out.println("CCD is endcap, depth: "+depth+" ddep= "+ddep+" zc= "+zc+" r "+hr);
- if((depth > 0.) && (depth < EPIDEP))
+ if(depth < 0.) System.out.println("CCD is endcap, depth: "+depth+" ddep= "+ddep+" zc= "+zc+" r "+hr);
+ if((depth >= 0.) && (depth < EPIDEP))
{
if(firstht)
{
@@ -729,7 +733,8 @@
if(napad == 0)
{
if(debug) System.out.println("No signal was generated by blob started in CCD lr "+ccd.getLayerNumber()+" col "+coln+" row "+rown);
- }
+
+ }
return -1;
}
@@ -968,17 +973,20 @@
}
if(napad > 0) { ccd.incPartCount(); return 1;}
if(napad == 0)
- {
- if(!ccd.isEndcap())
- {
- System.out.println("Failed hit on barr. lr "+ccd.getLayerNumber()+" col. offs. "+
+ {
+ if(debug)
+ {
+ if(!ccd.isEndcap())
+ {
+ System.out.println("Failed hit on barr. lr "+ccd.getLayerNumber()+" col. offs. "+
ofsx+" row offs. "+ofsy);
- System.out.println(" x0,y0,z0 "+x0+" "+y0+" "+z0+" original x,y,z "+x+" "+y+" "+z);
- System.out.println(" local dir: "+il+" "+jl+" "+kl+" original dir: "+ic+" "+jc+" "+kc);
- System.out.println(" or. hit r: "+r+" rref "+rref+" cdr: "+cdr+" dL "+dL);
- }
- if(ccd.isEndcap()) System.out.println("Failed hit on ec lr "+ccd.getLayerNumber()+" col. offs. "+
+ System.out.println(" x0,y0,z0 "+x0+" "+y0+" "+z0+" original x,y,z "+x+" "+y+" "+z);
+ System.out.println(" local dir: "+il+" "+jl+" "+kl+" original dir: "+ic+" "+jc+" "+kc);
+ System.out.println(" or. hit r: "+r+" rref "+rref+" cdr: "+cdr+" dL "+dL);
+ }
+ if(ccd.isEndcap()) System.out.println("Failed hit on ec lr "+ccd.getLayerNumber()+" col. offs. "+
ofsx+" row offs. "+ofsy+", x0,y0,z0 "+x0+" "+y0+" "+z0+" local dir: "+il+" "+jl+" "+kl);
+ }
return -1;
}
System.out.println("How do we get here !?");
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.7 -r1.8
--- FullCCDSimulation.java 18 Dec 2007 01:08:10 -0000 1.7
+++ FullCCDSimulation.java 9 May 2008 00:35:32 -0000 1.8
@@ -31,7 +31,7 @@
* objects, which emplement SimTrackerHit interface, so can be used instead
* of original Simulated Tracker Hits generated by Geant4.
* @author sinev U of Oregon; SLAC x2970; [log in to unmask]
- * @version $Id: FullCCDSimulation.java,v 1.7 2007/12/18 01:08:10 sinev Exp $
+ * @version $Id: FullCCDSimulation.java,v 1.8 2008/05/09 00:35:32 sinev Exp $
*/
public class FullCCDSimulation extends Driver
{
@@ -51,12 +51,18 @@
private double brlRspn = 0.02;
private double brlAspn = 0.1;
private double brlTspn = 0.05;
- private double ecZspn = 0.02;
+ private double ecZspn = 0.3;
private double ecAspn = 0.1;
- private double ecTspn = 0.05;
+ private double ecTspn = 0.1;
private double Bfield = 5.;
private boolean simEveryColl = false;
-
+ private String[] bar_sdets = {"VertexBarrel","BarrelVertex"};
+ private String[] ec_sdets = {"VertexEndcap","EndcapVertex"};
+ private String[] bar_data = {"VtxBarrHits"};
+ private String[] ec_data = {"VtxEndcapHits"};
+
+
+
/*.................................................................................
| here are resolution tables parametrized as function of tan of angle btw track and Z
| axis (_resalf) and track and axis perpendicular to B and R (_rescrfp and _rescrfn)
@@ -88,6 +94,26 @@
_tinitd = false;
}
+ public void defineBarrelSDNames(String[] names)
+ {
+ bar_sdets = names;
+ }
+
+ public void defineBarrelHitNames(String[] names)
+ {
+ bar_data = names;
+ }
+
+ public void defineEndcapSDNames(String[] names)
+ {
+ ec_sdets = names;
+ }
+
+ public void defineEndcapHitNames(String[] names)
+ {
+ ec_data = names;
+ }
+
public void setBField(double B)
{
Bfield = B;
@@ -114,13 +140,14 @@
simhits = new Vector();
if(event.getDetector() != d)
{
+ bccd=new BuildCCDs(bar_sdets,ec_sdets);
d = event.getDetector();
ccds=bccd.build(d,sp,esp);
nbarrels = bccd.getNVxBrls();
ccdsim = new CCDSim(sp,esp);
ccdsim.setBField(Bfield);
ccdsim.simulateEveryCollision(simEveryColl);
- System.out.println("Full CCD sim. has build "+ccds.size()+" CCDs for detector "+d.getName());
+ System.out.println("Full CCD sim. has build "+ccds.size()+" CCDs for detector "+d.getName()+", "+nbarrels+" of them-barrels");
cfn.setPixelThreshold(esp.getSinglePixThr());
cfn.setClusterThreshold(esp.getClustThr());
if(!_tinitd) initResTables();
@@ -133,154 +160,166 @@
}
Vector svbrts = new Vector();
Vector sverts = new Vector();
- List<SimTrackerHit> hits = event.get(SimTrackerHit.class,"VtxBarrHits");
- double pax = 0.;
- double pay = 0.;
- double paz = 0.;
- double clx = 0.;
- double cly = 0.;
- double clz = 0.;
- double dxy = 0.;
- double dz = 0.;
- LCMetaData meta = event.getMetaData(hits);
- IDDecoder decoder = meta.getIDDecoder();
- for (SimTrackerHit th : hits )
- {
- double point[] = th.getPoint();
- decoder.setID(th.getCellID());
- int lnmb = decoder.getLayer();
- boolean newcl = true;
- if(svbrts.size()>0)
- {
- for(int i=0; i<svbrts.size(); i++)
- {
- RawTrackSegment rts = (RawTrackSegment) svbrts.get(i);
- MCParticle mcpc = rts.getMCParticle();
- MCParticle mcph = th.getMCParticle();
- double[] rtsc = rts.getCenter();
- int cllr = rts.getLayer();
- if(lnmb == cllr)
+ List<List<SimTrackerHit>> evhits = event.get(SimTrackerHit.class);
+ for(List<SimTrackerHit> hits:evhits)
+ {
+ boolean bar_col = false;
+ boolean ec_col = false;
+ EventHeader.LCMetaData md = event.getMetaData(hits);
+ String cname = md.getName();
+ for(int nhc=0; nhc < bar_data.length; nhc++) if(cname.equals(bar_data[nhc])) bar_col=true;
+ for(int nhc=0; nhc < ec_data.length; nhc++) if(cname.equals(ec_data[nhc])) ec_col=true;
+ if(bar_col)
+ {
+ double pax = 0.;
+ double pay = 0.;
+ double paz = 0.;
+ double clx = 0.;
+ double cly = 0.;
+ double clz = 0.;
+ double dxy = 0.;
+ double dz = 0.;
+ IDDecoder decoder = md.getIDDecoder();
+ for (SimTrackerHit th : hits )
+ {
+ double point[] = th.getPoint();
+ decoder.setID(th.getCellID());
+ int lnmb = decoder.getLayer();
+ boolean newcl = true;
+ if(svbrts.size()>0)
{
- if(mcph == mcpc)
+ for(int i=0; i<svbrts.size(); i++)
{
- double rcl = Math.sqrt(rtsc[0]*rtsc[0]+rtsc[1]*rtsc[1]);
- double rht = Math.sqrt(point[0]*point[0]+point[1]*point[1]);
- if(Math.abs(rcl-rht) < brlRspn)
+ RawTrackSegment rts = (RawTrackSegment) svbrts.get(i);
+ MCParticle mcpc = rts.getMCParticle();
+ MCParticle mcph = th.getMCParticle();
+ double[] rtsc = rts.getCenter();
+ int cllr = rts.getLayer();
+ if(lnmb == cllr)
{
- double[] prhc = new double[3];
- for(int j=0; j<3; j++)
- prhc[j]=point[j]*rcl/rht;
- double dx = prhc[0]-rtsc[0];
- double dy = prhc[1]-rtsc[1];
- dz = prhc[2]-rtsc[2];
- double sdist = Math.sqrt(dx*dx+dy*dy+dz*dz);
- if(sdist < brlTspn)
+ if(mcph == mcpc)
{
- newcl = false;
- rts.addHit(th,lnmb);
- }
- }
- }
+ double rcl = Math.sqrt(rtsc[0]*rtsc[0]+rtsc[1]*rtsc[1]);
+ double rht = Math.sqrt(point[0]*point[0]+point[1]*point[1]);
+ if(Math.abs(rcl-rht) < brlRspn)
+ {
+ double[] prhc = new double[3];
+ for(int j=0; j<3; j++)
+ prhc[j]=point[j]*rcl/rht;
+ double dx = prhc[0]-rtsc[0];
+ double dy = prhc[1]-rtsc[1];
+ dz = prhc[2]-rtsc[2];
+ double sdist = Math.sqrt(dx*dx+dy*dy+dz*dz);
+ if(sdist < brlTspn)
+ {
+ newcl = false;
+ rts.addHit(th,lnmb);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(newcl)
+ {
+ RawTrackSegment nrts = new RawTrackSegment(lnmb);
+ nrts.addHit(th,lnmb);
+ svbrts.add(nrts);
+ }
+ }
+ if(svbrts.size() != 0)
+ {
+ for(int i=0; i<svbrts.size(); i++)
+ {
+ RawTrackSegment rts = (RawTrackSegment) svbrts.get(i);
+ int lnmb = rts.getLayer();
+ for(int j=0; j<ccds.size(); j++)
+ {
+ CCD c = (CCD) ccds.get(j);
+ if(!c.isEndcap() && (c.getLayerNumber() == lnmb))
+ {
+ int stat = ccdsim.simTrack(c,rts);
+ if(debug)
+ {
+ double[] cohc = rts.getCenter();
+ System.out.println("Processing raw track segm in CCD "+j+" lr "+lnmb+" with center coord: "+cohc[0]+" "+cohc[1]+" "+cohc[2]);
+ }
+ if(stat == -1) System.out.println("Error in processing Barr hit!");
+ }
+ }
}
- }
- }
- if(newcl)
- {
- RawTrackSegment nrts = new RawTrackSegment(lnmb);
- nrts.addHit(th,lnmb);
- svbrts.add(nrts);
- }
- }
- if(svbrts.size() != 0)
- {
- for(int i=0; i<svbrts.size(); i++)
- {
- RawTrackSegment rts = (RawTrackSegment) svbrts.get(i);
- int lnmb = rts.getLayer();
- for(int j=0; j<ccds.size(); j++)
- {
- CCD c = (CCD) ccds.get(j);
- if(!c.isEndcap() && (c.getLayerNumber() == lnmb))
- {
- int stat = ccdsim.simTrack(c,rts);
- if(debug)
- {
- double[] cohc = rts.getCenter();
- System.out.println("Processing raw track segm in CCD "+j+" lr "+lnmb+" with center coord: "+cohc[0]+" "+cohc[1]+" "+cohc[2]);
- }
- if(stat == -1) System.out.println("Error in processing Barr hit!");
- }
}
}
- }
- hits = event.get(SimTrackerHit.class,"VtxEndcapHits");
- meta = event.getMetaData(hits);
- decoder = meta.getIDDecoder();
- for (SimTrackerHit th : hits )
- {
- double point[] = th.getPoint();
- decoder.setID(th.getCellID());
- int lnmb = decoder.getLayer();
- boolean newcl = true;
- if(sverts.size()>0)
+ if(ec_col)
{
- for(int i=0; i<sverts.size(); i++)
- {
- RawTrackSegment rts = (RawTrackSegment) sverts.get(i);
- MCParticle mcpc = rts.getMCParticle();
- MCParticle mcph = th.getMCParticle();
- double[] rtsc = rts.getCenter();
- int cllr = rts.getLayer();
- if(lnmb == cllr)
+ IDDecoder decoder = md.getIDDecoder();
+ for (SimTrackerHit th : hits )
+ {
+ double point[] = th.getPoint();
+ decoder.setID(th.getCellID());
+ int lnmb = decoder.getLayer();
+ boolean newcl = true;
+ if(sverts.size()>0)
{
- if(mcph == mcpc)
+ for(int i=0; i<sverts.size(); i++)
{
- if(Math.abs(rtsc[2]-point[2]) < ecZspn)
+ RawTrackSegment rts = (RawTrackSegment) sverts.get(i);
+ MCParticle mcpc = rts.getMCParticle();
+ MCParticle mcph = th.getMCParticle();
+ double[] rtsc = rts.getCenter();
+ int cllr = rts.getLayer();
+ if(lnmb == cllr)
{
- double[] prhc = new double[3];
- for(int j=0; j<3; j++)
- prhc[j]=point[j]*Math.abs(rtsc[2])/Math.abs(point[2]);
- double dx = prhc[0]-rtsc[0];
- double dy = prhc[1]-rtsc[1];
- dz = prhc[2]-rtsc[2];
- double sdist = Math.sqrt(dx*dx+dy*dy+dz*dz);
- if(sdist < ecTspn)
+ if(Math.abs(rtsc[2]-point[2]) < ecZspn)
{
- newcl = false;
- rts.addHit(th,lnmb);
- }
- }
- }
+ if(mcph == mcpc)
+ {
+ double[] prhc = new double[3];
+ for(int j=0; j<3; j++)
+ prhc[j]=point[j]*Math.abs(rtsc[2])/Math.abs(point[2]);
+ double dx = prhc[0]-rtsc[0];
+ double dy = prhc[1]-rtsc[1];
+ double dz = prhc[2]-rtsc[2];
+ double sdist = Math.sqrt(dx*dx+dy*dy+dz*dz);
+ if(sdist < ecTspn)
+ {
+ newcl = false;
+ rts.addHit(th,lnmb);
+ }
+ }
+ }
+ }
+ }
+ }
+ if(newcl)
+ {
+ RawTrackSegment nrts = new RawTrackSegment(lnmb);
+ nrts.addHit(th,lnmb);
+ sverts.add(nrts);
+ double[] clcntr = nrts.getCenter();
+ }
+ }
+ if(sverts.size() != 0)
+ {
+ for(int i=0; i<sverts.size(); i++)
+ {
+ RawTrackSegment rts = (RawTrackSegment) sverts.get(i);
+ double[] ccnt = rts.getCenter();
+ int lnmb = rts.getLayer();
+ for(int j=0; j<ccds.size(); j++)
+ {
+ CCD c = (CCD) ccds.get(j);
+ double ccdz = c.getMinZ();
+ if(c.isEndcap() && (c.getLayerNumber() == lnmb) &&(Math.abs(ccdz-ccnt[2]) < ecZspn))
+ {
+ int stat = ccdsim.simTrack(c,rts);
+// if(stat == -1) System.out.println("Error in processing EC hit in layer "+lnmb+" X "+ccnt[0]+" Y "+ccnt[1]+" Z "+ccnt[2]);
+ }
+ }
}
- }
- }
- if(newcl)
- {
- RawTrackSegment nrts = new RawTrackSegment(lnmb);
- nrts.addHit(th,lnmb);
- sverts.add(nrts);
- }
- }
- if(sverts.size() != 0)
- {
- for(int i=0; i<sverts.size(); i++)
- {
- RawTrackSegment rts = (RawTrackSegment) sverts.get(i);
- double[] ccnt = rts.getCenter();
- int lnmb = rts.getLayer();
- for(int j=0; j<ccds.size(); j++)
- {
- CCD c = (CCD) ccds.get(j);
- double ccdz = c.getMinZ();
- if(c.isEndcap() && (c.getLayerNumber() == lnmb) &&(ccdz*ccnt[2] > 0.))
- {
- int stat = ccdsim.simTrack(c,rts);
- if(stat == -1) System.out.println("Error in processing EC hit in layer "+lnmb+" X "+ccnt[0]+" Y "+ccnt[1]+" Z "+ccnt[2]);
- }
}
}
}
-
for(int i=0; i<ccds.size(); i++)
{
CCD c = (CCD) ccds.get(i);
@@ -334,6 +373,7 @@
{
double[] point=sht.getPosition();
double shr= Math.sqrt(point[0]*point[0]+point[1]*point[1]);
+ double shp = Math.atan2(point[1],point[0]);
double tl = shr/Math.abs(point[2]);
int ti=0;
for(int k=0; k<20; k++)
@@ -349,10 +389,19 @@
double over = tl-_tangs[ti-1];
double resy = re1+over*slo;
double resx = _rescrfp[0];
+ int npix = sht.getClusterSize();
double[] V = new double[3];
- V[0]=resx;
- V[1]=resy;
+ V[0]=resx*npix;
+ V[1]=resy*npix;
V[2]=0.;
+ if(npix > 8)
+ {
+ double pszx = sp.getPixelSizeX() * 0.001;
+ double pszy = sp.getPixelSizeY() * 0.001;
+ double psz = Math.sqrt(pszx*pszx+pszy*pszy);
+ V[0]+=0.5*npix*psz;
+ V[1]+=0.5*npix*psz;
+ }
double[] cm = _cmt.disk2Cart(V,point);
sht.setCovarianceMatrix(cm);
ecsimhits.addElement((Object) sht);
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.2 -r1.3
--- RawTrackSegment.java 3 Mar 2007 02:45:58 -0000 1.2
+++ RawTrackSegment.java 9 May 2008 00:35:32 -0000 1.3
@@ -20,7 +20,7 @@
/**
* @author sinev U of Oregon; SLAC x2970; [log in to unmask]
- * @version $Id: RawTrackSegment.java,v 1.2 2007/03/03 02:45:58 sinev Exp $
+ * @version $Id: RawTrackSegment.java,v 1.3 2008/05/09 00:35:32 sinev Exp $
*/
public class RawTrackSegment
@@ -58,12 +58,23 @@
{
if(lrn != layer)
{
- System.out.println("ClusterOfHits.addHit: attempt to add hit into wrong layer");
+ System.out.println("RawTrackSegment.addHit: attempt to add hit into wrong layer");
return;
}
hits.add(hit);
dedx+=hit.getdEdx();
atime+=hit.getTime();
+ if(nhits == 0)
+ {
+ double[] epnt = hit.getEndPoint();
+ double[] spnt = hit.getStartPoint();
+ double dx = epnt[0]-spnt[0];
+ double dy = epnt[1]-spnt[1];
+ double dz = epnt[2]-spnt[2];
+ Hep3Vector hvec = new BasicHep3Vector(dx,dy,dz);
+ Hep3Vector ndir = VecOp.unit(hvec);
+ dir = new BasicHep3Vector(ndir.x(),ndir.y(),ndir.z());
+ }
nhits++;
double[] pnt = hit.getPoint();
double rht = Math.sqrt(pnt[0]*pnt[0]+pnt[1]*pnt[1]);
@@ -140,6 +151,7 @@
time = atime/nhits;
}
+ public void setDirection(Hep3Vector d) { dir = d; }
public boolean isBlob() { return _isblob; }
public double getdEdx() {return dedx;}
public double getTime() {return time;}
CVSspam 0.2.8