lcsim/src/org/lcsim/recon/cluster/density
diff -u -r1.3 -r1.4
--- DirectedTreeClusterer.java 27 Dec 2005 16:33:50 -0000 1.3
+++ DirectedTreeClusterer.java 30 Dec 2005 22:02:58 -0000 1.4
@@ -60,11 +60,11 @@
if(_runPar.ClusterSeparately()) {
_calType = "EM";
processCollection(event, embName, embhitmap);
-// processCollection(event, emeName, emehitmap);
+ processCollection(event, emeName, emehitmap);
_calType = "HD";
processCollection(event, hdbName, hdbhitmap);
-// processCollection(event, hdeName, hdehitmap);
+ processCollection(event, hdeName, hdehitmap);
}
else {
assert false : "Sorry, single-pass clustering unavailable for now.";
@@ -305,7 +305,6 @@
caTrees.get(i).add(ihit);
for(int j=0;j<startingPoints.size();j++) {
CalorimeterHit parentHit = branches.get(j).lastElement();
-// if(_evtnum==81) System.out.println(myhit1+" "+parentHit+" "+startingPoints.size()+" "+j);
if(parentHit.equals(ihit)) {
for( CalorimeterHit jhit : branches.get(j) ) {
if(!caTrees.get(i).contains(jhit)){
@@ -370,7 +369,7 @@
recoClusColl = clusBuilder.makeClusters( trees );
if (recoClusColl.size() > 0) {
String newName = new String(colName+"DTreeClusters");
- event.put( newName, recoClusColl );
+ event.put( newName, recoClusColl, Cluster.class, (1<<31) );
}
// int nhits = hitmap.size();
lcsim/src/org/lcsim/recon/cluster/density
diff -u -r1.3 -r1.4
--- DTreeAnalysis.java 27 Dec 2005 16:33:50 -0000 1.3
+++ DTreeAnalysis.java 30 Dec 2005 22:02:58 -0000 1.4
@@ -21,7 +21,7 @@
public class DTreeAnalysis extends Driver {
- private int _debug=0;
+ private int _debug=1;
public DTreeAnalysis() {
_runPar = RunControlParameters.getInstance();
@@ -65,12 +65,16 @@
if(_runPar.ClusterSeparately()){
_calType = "EM";
+ _nClusEM = 0; _nMCClusEM = 0;
processCollection(event,embName,embhitmap);
-// processCollection(event,emeName,emehitmap);
+ processCollection(event,emeName,emehitmap);
_calType = "HD";
+ _nClusHD = 0; _nMCClusHD = 0;
processCollection(event,hdbName,hdbhitmap);
-// processCollection(event,hdeName,hdehitmap);
+ processCollection(event,hdeName,hdehitmap);
+
+ finalizeTuple();
}
else {
assert false : "Sorry, single-pass clustering unavailable for now.";
@@ -128,31 +132,34 @@
// Fill tuples with reco info
int tag = 0;
+ if(_calType=="EM") tag = _nClusEM;
+ if(_calType=="HD") tag = _nClusHD;
Map<CalorimeterHit,Integer> recTagMap
= new HashMap<CalorimeterHit,Integer>();
for(BasicCluster clust : recon ) {
List<CalorimeterHit> cellVec = clust.getCalorimeterHits();
-// System.out.println(tag+" "+cellVec.size());
+// System.out.println("reco tag: "+tag+", #hits="+cellVec.size());
if(cellVec.size()==0)
System.out.println("*** bad cellVec in "+_calType);
for(CalorimeterHit ihit : cellVec) {
Integer tagObject = new Integer(tag);
-// System.out.println("putting <"+MyTools.printID(ihit.getCellID())+" -> "+tagObject+">");
+// System.out.println("putting <"+MyTools.printID(ihit.getCellID())+" -> "+tagObject+">");
recTagMap.put(ihit,tagObject);
double[] pos = ihit.getPosition();
double cdens = _loader.getDensity(ihit);
long jid = ihit.getCellID();
- int ily1 = MyTools.getLayer(jid);
- int iz = MyTools.getThetaBin(jid);
- int iphi = MyTools.getPhiBin(jid);
decoder.setID( ihit.getCellID() );
- int ily = decoder.getValue(0);
- int iu = decoder.getValue(3);
- int iv = decoder.getValue(4);
-// System.out.println("ilay="+ily1+" "+ily+", iu="+iphi+" "+iu+", iv="+iz+" "+iv);
- assert ily==ily1 : "problem in layer index";
- assert iphi==iu : "problem in phi/iU index";
- assert iz==iv : "problem in iz/iV index";
+ int ily = decoder.getValue(0); // layer
+ int iu = decoder.getValue(3); // either theta, phi or x
+ int iv = decoder.getValue(4); // either phi, z or y
+
+// int ily1 = MyTools.getLayer(jid);
+// int iz = MyTools.getThetaBin(jid);
+// int iphi = MyTools.getPhiBin(jid);
+// System.out.println("ilay="+ily1+" "+ily+", iu="+iphi+" "+iu+", iv="+iz+" "+iv);
+// assert ily==ily1 : "problem in layer index";
+// assert iphi==iu : "problem in phi/iU index";
+// assert iz==iv : "problem in iz/iV index";
ITuple cellFolder = null;
if(_calType=="EM") cellFolder = emCellFolder;
@@ -184,32 +191,38 @@
}
tag++;
}
+ if(_calType=="EM") _nClusEM = tag;
+ if(_calType=="HD") _nClusHD = tag;
+// System.out.println("calType="+_calType+", tag="+tag+", nrecoEM="+_nClusEM+", nrecoHD="+_nClusHD);
// Fill tuples with MC info
tag = 0;
+ if(_calType=="EM") tag = _nMCClusEM;
+ if(_calType=="HD") tag = _nMCClusHD;
for( BasicCluster clust : mctruth ) {
for( CalorimeterHit ihit : clust.getCalorimeterHits() ) {
Integer tagObject = recTagMap.get(ihit);
-// System.out.println("getting: "+ihit+" -> "+tagObject);
int rtag = -1;
if(tagObject!=null) rtag = tagObject.intValue();
// int rtag = tagObject.intValue();
+// System.out.println("getting <"+MyTools.printID(ihit.getCellID())+" -> "+rtag+">");
double[] pos = ihit.getPosition();
double cdens = _loader.getDensity(ihit);
if(cdens==0) continue; // skip hits below energy cut
long jid = ihit.getCellID();
- int ily1 = MyTools.getLayer(jid);
- int iz = MyTools.getThetaBin(jid);
- int iphi = MyTools.getPhiBin(jid);
decoder.setID( ihit.getCellID() );
- int ily = decoder.getValue(0);
- int iu = decoder.getValue(3);
- int iv = decoder.getValue(4);
-// System.out.println("ilay="+ily1+" "+ily+", iu="+iz+" "+iu+", iv="+iphi+" "+iv);
- assert ily==ily1 : "problem in layer index";
- assert iphi==iv : "problem in phi/iV index";
- assert iz==iu : "problem in iz/iU index";
+ int ily = decoder.getValue(0); // layer
+ int iu = decoder.getValue(3); // either theta, phi or x
+ int iv = decoder.getValue(4); // either phi, z or y
+
+// int ily1 = MyTools.getLayer(jid);
+// int iz = MyTools.getThetaBin(jid);
+// int iphi = MyTools.getPhiBin(jid);
+// System.out.println("ilay="+ily1+" "+ily+", iu="+iz+" "+iu+", iv="+iphi+" "+iv);
+// assert ily==ily1 : "problem in layer index";
+// assert iphi==iv : "problem in phi/iV index";
+// assert iz==iu : "problem in iz/iU index";
double cellR = Math.sqrt(pos[0]*pos[0]+pos[1]*pos[1]);
double theta = Math.atan2(cellR,pos[2]);
@@ -234,7 +247,7 @@
mcCellFolder.fill(2,(float)pos[1]);
mcCellFolder.fill(3,(float)pos[2]);
mcCellFolder.fill(4,(float) cdens);
-// System.out.println("Gtag="+tag+", Rtag="+rtag);
+// System.out.println("Gtag="+tag+", Rtag="+rtag);
mcCellFolder.fill(5,tag);
mcCellFolder.fill(6,rtag);
mcCellFolder.fill(7,ily);
@@ -284,32 +297,33 @@
tag++;
}
}
-
- if(_calType=="EM"){
- int nreco = recon.size();
- _tupleEM.fill(0,nreco);
- _tupleEM.fill(3,_evtnum);
- _tupleEM.addRow();
- _tupleMCem.fill(0,mctruth.size());
- _tupleMCem.fill(3,_evtnum);
- _tupleMCem.addRow();
- System.out.println("Adding nclusEM="+recon.size());
- _tupleEvt.fill(0,_evtnum);
- _tupleEvt.addRow();
- }
- if(_calType=="HD"){
- _tupleHD.fill(0,recon.size());
- _tupleHD.fill(3,_evtnum);
- _tupleHD.addRow();
- _tupleMChd.fill(0,mctruth.size());
- _tupleMChd.fill(3,_evtnum);
- _tupleMChd.addRow();
- System.out.println("Adding nclusHD="+recon.size());
- }
+ if(_calType=="EM") _nMCClusEM = tag;
+ if(_calType=="HD") _nMCClusHD = tag;
+// System.out.println("calType="+_calType+", tag="+tag+", nMCEM="+_nMCClusEM+", nMCHD="+_nMCClusHD);
recTagMap.clear();
}
+ public void finalizeTuple() {
+ // EM
+ _tupleEM.fill(0,_nClusEM);
+ _tupleEM.fill(3,_evtnum);
+ _tupleEM.addRow();
+ _tupleMCem.fill(0,_nMCClusEM);
+ _tupleMCem.fill(3,_evtnum);
+ _tupleMCem.addRow();
+ // HD
+ _tupleHD.fill(0,_nClusHD);
+ _tupleHD.fill(3,_evtnum);
+ _tupleHD.addRow();
+ _tupleMChd.fill(0,_nMCClusHD);
+ _tupleMChd.fill(3,_evtnum);
+ _tupleMChd.addRow();
+ // event
+ _tupleEvt.fill(0,_evtnum);
+ _tupleEvt.addRow();
+ }
+
private void processCollection(EventHeader event, String colName,
Map<Long,CalorimeterHit> hitmap)
{
@@ -363,15 +377,26 @@
}
int nNNclus = nnClusColl==null ? 0 : nnClusColl.size();
+ // Analyze DirectedTree clusters
+ int dthits=0;
+ for( BasicCluster iclus : recoClusColl ) {
+ double pos[] = iclus.getPosition();
+ List<CalorimeterHit> iHits = iclus.getCalorimeterHits();
+ dthits += iHits.size(); // includes hits below threshold
+ }
+ int nDTclus = recoClusColl==null ? 0 : recoClusColl.size();
+
if(_debug>0) {
- System.out.println(" Comparing cheat clusters: "
- +" cheater="+nclusCheat
- +" NN="+nNNclus
+ System.out.println(" Comparing #clusters: "
+ +" MCclus="+nclusCheat
+ +" NNclus="+nNNclus
+ +" DTclus="+nDTclus
);
System.out.println(" Comparing total #hits: "
+" in event: "+hitmap.size()
- +", in MCClusters="+mchits
- +", in NNClusters="+nnhits );
+ +", in MCclus="+mchits
+ +", in NNclus="+nnhits
+ +", in DTclus="+dthits );
}
int nhits = hitmap.size();
@@ -419,4 +444,6 @@
private ClusterBuilder clusBuilder = new ClusterBuilder();
private int layerIndex, uIndex, vIndex;
private double _emEcut, _hdEcut;
+
+ private int _nClusEM,_nMCClusEM,_nClusHD,_nMCClusHD;
}