5 modified files
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.1 -r1.2
--- CCD.java 30 Sep 2005 18:31:48 -0000 1.1
+++ CCD.java 4 Oct 2005 18:53:41 -0000 1.2
@@ -158,18 +158,18 @@
{
NColumns = (int) ((maxPhi-minPhi)*getSurfRad() /(pixToL*PixelSizeX));
PixelSizeX = (1./pixToL) * ((maxPhi-minPhi)*getSurfRad())/NColumns;
- System.out.println("Making cylindrical CCD with min radius "+minRad+" max rad"+maxRad);
- System.out.println("Pixel size x = "+PixelSizeX+" Pixel size y = "+PixelSizeY);
- System.out.println("N rows = "+NRows+" N columns = "+NColumns);
+// System.out.println("Making cylindrical CCD with min radius "+minRad+" max rad"+maxRad);
+// System.out.println("Pixel size x = "+PixelSizeX+" Pixel size y = "+PixelSizeY);
+// System.out.println("N rows = "+NRows+" N columns = "+NColumns);
}
}
if(isEndcap)
{
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];
@@ -250,7 +250,7 @@
**/
public boolean rowIsActiveD(int rn)
{
- if(rn < NRows)
+ if((rn < NRows)&&(rn > -1))
{
return(RDlist[rn] != -1);
}
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.1 -r1.2
--- CCDClustFinder.java 30 Sep 2005 18:31:48 -0000 1.1
+++ CCDClustFinder.java 4 Oct 2005 18:53:41 -0000 1.2
@@ -76,82 +76,9 @@
CCDPixel pix = ar.getPixel(j);
if(pix.getADC() < PTHR) continue;
if(pix.isAttached()) continue;
- // System.out.println("processing pixel r: "+pix.getRowNumber()+" c: "+
- // pix.getColumnNumber());
- boolean attached = false;
- int attachedto =-1;
- for(int k=0; k<Candidates.size(); k++)
- {
- ClusterCandidate cc = (ClusterCandidate) Candidates.get(k);
- // System.out.println("Trying cl "+k);
- if(cc.tryAttach(pix))
- {
- attached = true;
- pix.setAttachedTo(k);
-// System.out.println("Attaching pix r: "+pix.getRowNumber()+" c: "+
-// pix.getColumnNumber()+" to cl: "+k);
- int nxr = i+1;
- int dnx = 1;
- while((ccd.rowIsActiveD(nxr)) && (nxr > i))
- {
- // System.out.println("checking row: "+nxr);
- boolean rowhas = false;
- CCDActiveRow nar = ccd.getActiveDRow(nxr);
- for(int m=0; m<nar.getNpixels(); m++)
- {
- CCDPixel pt = nar.getPixel(m);
- if(pt.getADC() < PTHR) continue;
- if(pt.isAttached()) continue;
- if(cc.tryAttach(pt))
- {
- rowhas = true;
- pt.setAttachedTo(k);
- // System.out.println("Attaching pix r: "+pt.getRowNumber()+" c: "+
- // pt.getColumnNumber()+" to cl: "+k);
- }
- }
- if(!rowhas) dnx = -1;
- if(!ccd.rowIsActiveD(nxr+1)) dnx=-1;
- nxr = nxr + dnx;
- }
- break;
- }
- }
- if(!attached)
- {
- if(!pix.isAttached())
- {
-// System.out.println("Creating cluster candidate");
- ClusterCandidate cc = new ClusterCandidate(ccd,pix);
- int k = Candidates.size();
- pix.setAttachedTo(k);
-// System.out.println("Attaching pix r: "+pix.getRowNumber()+" c: "+
-// pix.getColumnNumber()+" to cl: "+k);
- Candidates.addElement(cc);
- int nxr = i+1;
- int dnx = 1;
- while((ccd.rowIsActiveD(nxr)) && (nxr > i))
- {
- boolean rowhas = false;
- CCDActiveRow nar = ccd.getActiveDRow(nxr);
- for(int m=0; m<nar.getNpixels(); m++)
- {
- CCDPixel pt = nar.getPixel(m);
- if(pt.isAttached()) continue;
- if(cc.tryAttach(pt))
- {
- rowhas = true;
- pt.setAttachedTo(k);
- // System.out.println("Attaching pix r: "+pt.getRowNumber()+" c: "+
- // pt.getColumnNumber()+" to cl: "+k);
- }
- }
- if(!rowhas) dnx = -1;
- if(!ccd.rowIsActiveD(nxr+1)) dnx=-1;
- nxr = nxr + dnx;
- }
- }
- }
+ int cind = Candidates.size();
+ ClusterCandidate ncc = new ClusterCandidate(ccd, pix,cind);
+ Candidates.addElement(ncc);
}
}
}
@@ -186,9 +113,10 @@
private int maxc = -1;
private CCD ccd;
- ClusterCandidate(CCD c,CCDPixel pix)
+ ClusterCandidate(CCD c,CCDPixel pix,int ind)
{
ccd = c;
+ pix.setAttachedTo(ind);
CCDActiveRow ar = new CCDActiveRow(pix.getRowNumber(),c.getNColumns());
ar.addPixel(pix);
Rows.addElement(ar);
@@ -198,69 +126,116 @@
maxr = pr;
minc = pc;
maxc = pc;
+ build(pix, ind);
}
-
- Vector getClusters() { return Clust; }
-
- boolean tryAttach(CCDPixel pix)
+
+ void build(CCDPixel pix,int ind)
{
- int pr = pix.getRowNumber();
- int pc = pix.getColumnNumber();
- if((pr < (minr-1)) || (pr > (maxr+1)))
- {
-// System.out.println(pr + "not in "+(minr-1)+"..."+(maxr+1));
- return false;
- }
- if((pc < (minc-1)) || (pc > (maxc+1)))
- {
-// System.out.println(pc + "not in "+(minc-1)+"..."+(maxc+1));
- return false;
- }
- boolean belongs = false;
- for(int k=0; k<Rows.size(); k++)
- {
- CCDActiveRow lr = (CCDActiveRow) Rows.get(k);
- int trn = lr.getRowNumber();
-// System.out.print("row: "+trn+" : ");
- for(int i=0; i<lr.getNpixels(); i++)
- {
- int tcn = (lr.getPixel(i)).getColumnNumber();
- // System.out.print(tcn+" ");
- if((Math.abs(tcn - pc) < 2) && (Math.abs(trn - pr) <2))
- belongs = true;
- }
- // System.out.println("");
- }
- if(belongs)
- {
- if((pr >= minr) && (pr <= maxr))
- {
- for(int k=0; k<Rows.size(); k++)
- {
- CCDActiveRow lr = (CCDActiveRow) Rows.get(k);
- int trn = lr.getRowNumber();
- if(trn == pr) lr.addPixel(pix);
- }
- }
- if((pr < minr) || (pr > maxr))
- {
- CCDActiveRow nr = new CCDActiveRow(pix.getRowNumber(),ccd.getNColumns());
- nr.addPixel(pix);
- Rows.addElement(nr);
- }
- if(pr < minr) minr = pr;
- if(pr > maxr) maxr = pr;
- if(pc < minc) minc = pc;
- if(pc > maxc) maxc = pc;
-// System.out.println("rows "+minr+":"+maxr+" col "+minc+":"+maxc);
- return true;
- }
-// System.out.println("does not belong");
- return false;
+ int cwrp = ccd.getNColumns();
+ boolean cleanbor = false;
+ int maxsr = minr+1;
+ int minsr = minr-1;
+ int maxsc = minc+1;
+ int minsc = minc-1;
+ int ring = 0;
+ while((!cleanbor)&&(ring<100))
+ {
+ cleanbor = true;
+ for(int crow = minsr; crow < maxsr+1; crow++)
+ {
+ if(ccd.rowIsActiveD(crow))
+ {
+ CCDActiveRow ar = ccd.getActiveDRow(crow);
+ if(ar != null)
+ {
+ for(int j=0; j<ar.getNpixels(); j++)
+ {
+ CCDPixel cpi = ar.getPixel(j);
+ if(cpi.isAttached()) continue;
+ int ccol = cpi.getColumnNumber();
+ boolean ofint=false;
+ if((ccol>=minsc) && (ccol <= maxsc)&&((crow==minsr)||(crow==maxsr))) ofint = true;
+ if((ccol==minsc)||(ccol==maxsc)) ofint=true;
+ if(!ccd.isEndcap())
+ {
+ if((crow==minsr)||(crow==maxsr))
+ {
+ if((ccol+cwrp>=minsc)&&(ccol+cwrp<=maxsc)) ofint=true;
+ if((ccol-cwrp>=minsc)&&(ccol-cwrp<=maxsc)) ofint=true;
+ }
+ if((ccol+cwrp==minsc)||(ccol+cwrp==maxsc)) ofint=true;
+ if((ccol-cwrp==minsc)||(ccol-cwrp==maxsc)) ofint=true;
+ }
+ if(ofint)
+ {
+ boolean belongs = false;
+ for(int ii=crow-1; ii<crow+2; ii++)
+ {
+ if(ccd.rowIsActiveD(ii))
+ {
+ CCDActiveRow nar = ccd.getActiveRow(ii);
+ if(nar != null)
+ {
+ for(int jj=0; jj<nar.getNpixels(); jj++)
+ {
+ CCDPixel npi = nar.getPixel(jj);
+ int ncn = npi.getColumnNumber();
+ boolean consider = false;
+ if((ncn >= ccol-1) && (ncn <= ccol+1)) consider = true;
+ if(!ccd.isEndcap())
+ {
+ if((ncn+cwrp>=ccol-1)&&(ncn+cwrp<=ccol+1)) consider=true;
+ if((ncn-cwrp>=ccol-1)&&(ncn-cwrp<=ccol+1)) consider=true;
+ }
+ if((npi.isAttachedTo()==ind )&&consider)
+ {
+ belongs = true;
+ cpi.setAttachedTo(ind);
+ }
+ }
+ }
+ }
+ }
+ if(belongs)
+ {
+ cleanbor = false;
+ boolean newr = true;
+ for(int k=0; k<Rows.size(); k++)
+ {
+ CCDActiveRow lr = (CCDActiveRow) Rows.get(k);
+ int trn = lr.getRowNumber();
+ if(trn == crow)
+ {
+ lr.addPixel(cpi);
+ newr = false;
+ }
+ }
+ if(newr)
+ {
+ CCDActiveRow nacr = new CCDActiveRow(crow,ccd.getNColumns());
+ nacr.addPixel(cpi);
+ Rows.addElement(nacr);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ ring++;
+ minsr--;
+ minsc--;
+ maxsr++;
+ maxsc++;
+ }
}
+
+ Vector getClusters() { return Clust; }
+
void findLocalMax()
{
+ int cwrp = ccd.getNColumns();
Vector TMpix = new Vector();
for(int i=0; i<Rows.size(); i++)
{
@@ -279,7 +254,15 @@
for(int n=0; n<nr.getNpixels(); n++)
{
CCDPixel np = nr.getPixel(n);
- if(Math.abs(np.getColumnNumber()-pix.getColumnNumber())<2)
+ int npcn = np.getColumnNumber();
+ boolean compet = false;
+ if(Math.abs(npcn-pix.getColumnNumber())<2) compet = true;
+ if(!ccd.isEndcap())
+ {
+ if(Math.abs(npcn+cwrp-pix.getColumnNumber())<2) compet=true;
+ if(Math.abs(npcn-cwrp-pix.getColumnNumber())<2) compet=true;
+ }
+ if(compet)
{
if(np.getADC() > pix.getADC()) lmax = false;
}
@@ -298,9 +281,18 @@
for(int j=i+1; j<TMpix.size(); j++)
{
CCDPixel p2 = (CCDPixel) TMpix.get(j);
- if(p1.getADC() == p2.getADC())
+ if((p1.getADC() == p2.getADC())&&(!remove[j]))
{
- if(Math.abs(p1.getColumnNumber()-p2.getColumnNumber())<2)
+ boolean compet = false;
+ int p1cn = p1.getColumnNumber();
+ int p2cn = p2.getColumnNumber();
+ if(Math.abs(p1cn-p2cn)<2) compet = true;
+ if(!ccd.isEndcap())
+ {
+ if(Math.abs(p1cn+cwrp-p2cn)<2) compet = true;
+ if(Math.abs(p1cn-cwrp-p2cn)<2) compet = true;
+ }
+ if(compet)
{
if(Math.abs(p1.getRowNumber()-p2.getRowNumber())<2)
{
@@ -315,6 +307,7 @@
void makeClusters()
{
+ int cwrp = ccd.getNColumns();
findLocalMax();
int nm = Mpix.size();
// System.out.println("Making clusters from "+nm+" local maximum pixels");
@@ -367,7 +360,7 @@
CCDPixel smp = (CCDPixel) Mpix.get(l);
int c1 = smp.getColumnNumber();
int r1 = smp.getRowNumber();
- boolean inshadow = false;
+/* boolean inshadow = false;
for(int k=0; k<nm; k++)
{
if(k != l)
@@ -385,8 +378,17 @@
|| ((c1<=cp) && (c2<=cp) && (c2>=c1))))) inshadow = true;
}
}
- if(inshadow) continue;
- double dx = p.getColumnNumber() - smp.getColumnNumber();
+ if(inshadow) continue; */
+ int pcn = p.getColumnNumber();
+ int smpcn = smp.getColumnNumber();
+ double dx = Math.abs(pcn-smpcn);
+ if(!ccd.isEndcap())
+ {
+ double dx1 = Math.abs(pcn+cwrp-smpcn);
+ if(dx1 < dx) dx = dx1;
+ dx1 = Math.abs(pcn-cwrp-smpcn);
+ if(dx1 < dx) dx = dx1;
+ }
double dy = p.getRowNumber() - smp.getRowNumber();
double wt = ((double) smp.getADC())/(dx*dx+dy*dy);
weights[l] = wt;
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.1 -r1.2
--- CCDClusterCenter.java 30 Sep 2005 18:31:48 -0000 1.1
+++ CCDClusterCenter.java 4 Oct 2005 18:53:41 -0000 1.2
@@ -13,6 +13,7 @@
private int CenterMethod = 0;
private int totalAmp;
private double NONDFR = 0.3;
+ private final double maxcfr = 0.1; // allowed maximum size of a cluster as fraction of CCD width
private SimTrackerHit parent = null;
private final double _ctab[] = {6.29,3.48,2.76,2.21,1.87,1.62,1.44,1.28,1.15,1.};
@@ -47,16 +48,20 @@
public void findCenter(CCDCluster cls)
{
double avr,avc,dep;
- int am,ta,mri,mpi,ma,dec;
+ int am,ta,mri,mpi,ma,dec,ncc;
double r,c,acr,acc;
CCDActiveRow ar;
CCDPixel p;
CCD ccd;
ccd = cls.getCCD();
+ ncc = ccd.getNColumns();
+ double wrp = (double) ncc;
+ double maxcd = ncc*maxcfr;
dep = 0.0005 * (ccd.getDepDepth() + ccd.getEpiDepth());
// note: factor 10E-3 is due to micron - mm convertion
acr = 0.;
acc = 0.;
+ avc = 0.;
ta = 0;
ma = 0;
mri = 0;
@@ -74,11 +79,15 @@
r = (double) p.getRowNumber();
c = (double) p.getColumnNumber();
am = p.getADC();
+ if(i==0) avc = c+0.5;
if(am < 0) System.out.println("pixel row "+r+" column "+c+" has ADC count "+am+" !");
if(am > 1000) System.out.println("Signal from single pixel "+am+" !");
acr = acr + (r+0.5)*am;
- acc = acc + (c+0.5)*am;
+ if(Math.abs(c-avc) < maxcd) acc = acc + (c+0.5)*am;
+ if(((c-avc)>maxcd) && (Math.abs(c-wrp-avc) < maxcd)) acc = acc +(c-wrp+0.5)*am;
+ if(((avc-c)>maxcd) && (Math.abs(c+wrp-avc) < maxcd)) acc = acc +(c+wrp+0.5)*am;
ta = ta+am;
+ if(ta > 0.) avc = acc/ta;
if(am > ma)
{
ma = am;
@@ -94,7 +103,7 @@
{
if(CenterMethod == 0)
{
- cls.setCenterCol(acc/ta);
+ cls.setCenterCol(avc);
cls.setCenterRow(acr/ta);
}
if((CenterMethod == 1) || (CenterMethod == 3))
@@ -107,7 +116,9 @@
dec = (int) (totalAmp * NONDFR);
if(dec > (int) (0.75*am)) dec = (int) (0.75 *am);
System.out.println("acr= "+acr+" dec= "+dec+" ta= "+ta);
- acc = acc - (c+0.5)*dec;
+ if((c-avc)<maxcd) acc = acc - (c+0.5)*dec;
+ if(((c-avc)>maxcd) && (Math.abs(c-wrp-avc) < maxcd)) acc = acc -(c-wrp+0.5)*dec;
+ if(((avc-c)>maxcd) && (Math.abs(c+wrp-avc) < maxcd)) acc = acc -(c+wrp+0.5)*dec;
acr = acr - (r+0.5)*dec;
ta = ta - dec;
if(CenterMethod == 1)
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.2 -r1.3
--- CCDSim.java 30 Sep 2005 22:41:23 -0000 1.2
+++ CCDSim.java 4 Oct 2005 18:53:41 -0000 1.3
@@ -12,7 +12,7 @@
* Dec. 3, 2003 - Java version N. A. Graf (stand alone) <BR>
* March 5,2004 - Nick Sinev, JAS version (hep.lcd....) <BR>
* September 2005 - Nick Sinev, org.lcsim version <BR>
- *
+ * @version $Id: CCDSim.java,v 1.3 2005/10/04 18:53:41 sinev Exp $
*
*/
public class CCDSim
@@ -737,22 +737,26 @@
int napad = 0;
for(i=0; i<NPXMAXX; i++)
{
+ int ig = i+ofsx;
for(j=0; j<NPXMAXY; j++)
{
+ int jg =j+ofsy;
exsv = pxls[i][j] * lfact;
exss = (float) (Math.sqrt((double)exsv));
pxls[i][j]= exsv + exss * (float) _ran.nextGaussian();
- if((pxls[i][j] > 1.)&&((i+ofsx) > 0)&&((i+ofsx)<ccd.getNColumns())
- &&((j+ofsy) > 0)&&((j+ofsy)<ccd.getNRows()))
+ if((ig >= ccd.getNColumns()) && !ccd.isEndcap()) ig-=ccd.getNColumns();
+ if((ig < 0) && !ccd.isEndcap()) ig+=ccd.getNColumns();
+ if((pxls[i][j] > 1.)&&(ig >= 0)&&(ig < ccd.getNColumns())
+ &&(jg >= 0)&&(jg < ccd.getNRows()))
{
- ccd.addSignal(j+ofsy,i+ofsx,pxls[i][j],parent);
+ ccd.addSignal(jg,ig,pxls[i][j],parent);
napad++;
}
}
}
if(napad > 0) { ccd.incPartCount(); return 1;}
- if(napad == 0) System.out.println("Failed hit lr "+ccd.getLayerNumber()+" col. offs. "+
- ofsx+" row offs. "+ofsy);
+// if(napad == 0) System.out.println("Failed hit lr "+ccd.getLayerNumber()+" col. offs. "+
+// ofsx+" row offs. "+ofsy);
return -1;
}
lcsim/src/org/lcsim/mc/CCDSim
diff -u -r1.2 -r1.3
--- FullCCDSimulation.java 30 Sep 2005 21:33:26 -0000 1.2
+++ FullCCDSimulation.java 4 Oct 2005 18:53:41 -0000 1.3
@@ -28,7 +28,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 "%I%,%G%"
+ * @version $Id: FullCCDSimulation.java,v 1.3 2005/10/04 18:53:41 sinev Exp $
*/
public class FullCCDSimulation extends Driver
{
@@ -108,7 +108,7 @@
if(c.getLayerNumber() == lnmb)
{
int stat = ccdsim.simTrack(c,th);
- if(stat == -1) System.out.println("Error in processing Barr hit!");
+// if(stat == -1) System.out.println("Error in processing Barr hit!");
}
}
}
@@ -125,7 +125,7 @@
if((c.getLayerNumber() == eln)&&(point[2]*c.getMinZ() >= 0.))
{
int stat = ccdsim.simTrack(c,th);
- if(stat == -1) System.out.println("Error in processing EC hit!");
+// if(stat == -1) System.out.println("Error in processing EC hit!");
}
}
}
CVSspam 0.2.8