lcsim/src/org/lcsim/contrib/proulx/eventoverlay
diff -N EventOverlay.java
--- EventOverlay.java 21 Feb 2007 18:20:53 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,355 +0,0 @@
-package org.lcsim.contrib.proulx.eventoverlay;
-
-import java.io.*;
-import java.lang.*;
-import java.util.*;
-import org.lcsim.util.lcio.*;
-import org.lcsim.event.*;
-import org.lcsim.geometry.*;
-
-public class EventOverlay
-{
- private HashMap<String,HitCollectionOverlay> map
- = new HashMap<String,HitCollectionOverlay>();
-
- public static void main(String [] args) throws Exception
- {
- LCIOWriter writer
- = new LCIOWriter(new File("eventoverlay/testEventOverlay.slcio"));
- for (int i=0; i<args.length; ++i) {
- EventOverlay overlay = new EventOverlay();
- EventHeader e = overlay.getGuineapigEvent(args[i]);
- //(new TestDriver()).process(e);
- writer.write(e);
- }
- writer.close();
- /* -- debug code to test storage of calorimeter hit ids
- LCIOReader reader
- = new LCIOReader(new File("eventoverlay/testEventOverlay.slcio"));
- EventHeader eNew = reader.read();
- (new TestDriver()).process(eNew);
- */
- }
-
- public EventHeader getGuineapigEvent(String filename) throws Exception
- {
- LCIOReader reader = new LCIOReader(new File(filename));
- EventHeader e = null;
- boolean eof = false;
- int iEvent = 0;
- System.out.println("\nProcessing file: "+filename);
- while (!eof) {
- try {
- EventHeader currentEvent = reader.read();
- System.out.println(" reading event "+(iEvent++));
- updateLists(currentEvent);
- if (e==null) e = currentEvent;
- }
- catch (IOException ioe) {
- eof = true;
- }
- }
-
- // replace the calorimeter hits
- for (String collectionName : map.keySet()) {
- e.remove(collectionName);
- e.put(collectionName,
- map.get(collectionName).getHits(),
- map.get(collectionName).meta.getType(),
- map.get(collectionName).meta.getFlags(),
- collectionName);
- }
- // remove the mc particles
- for (List<MCParticle> list : e.get(MCParticle.class)) {
- e.remove(e.getMetaData(list).getName());
- }
-
- return e;
- }
-
- public void overlayGuineapigEvent(EventHeader event,
- EventHeader gpEvent)
- {
- map.clear();
- updateLists(event, true);
- updateLists(gpEvent, false);
-
- // replace the calorimeter hits
- for (String collectionName : map.keySet()) {
- //event.remove(collectionName);
- event.put(collectionName+"Overlay",
- map.get(collectionName).getHits(),
- map.get(collectionName).meta.getType(),
- map.get(collectionName).meta.getFlags(),
- collectionName+"Overlay");
- }
-
- map.clear();
- updateLists(gpEvent, false);
- for (String collectionName : map.keySet()) {
- //event.remove(collectionName);
- event.put(collectionName+"Guineapig",
- map.get(collectionName).getHits(),
- map.get(collectionName).meta.getType(),
- map.get(collectionName).meta.getFlags(),
- collectionName+"Guineapig");
- }
- //return event;
- }
-
- private void updateLists(EventHeader e)
- {
- this.updateLists(e, false);
- }
-
- private void updateLists(EventHeader e,
- boolean retainMCInformation)
- {
- for (List<SimCalorimeterHit> hitList : e.get(SimCalorimeterHit.class)) {
- EventHeader.LCMetaData meta = e.getMetaData(hitList);
- String name = meta.getName();
- if (name.equals("LuminosityMonitorHits")) {
- System.out.println(" Updating hit collection "+name);
- System.out.println(" SIZE = "+hitList.size());
- }
- if (! map.containsKey(name)) {
- map.put(name,new HitCollectionOverlay());
- map.get(name).meta = meta;
- }
- int sizeBefore = map.get(name).getNHits();
- map.get(name).addHits(hitList, retainMCInformation);
- int sizeAfter = map.get(name).getNHits();
- if (name.equals("LuminosityMonitorHits")) {
- System.out.println(" nNew/nHits = "+(sizeAfter-sizeBefore)+
- "/"+sizeAfter);
- }
- }
- }
-}
-
-class HitCollectionOverlay
-{
- public EventHeader.LCMetaData meta;
-
- private int NMAXHITS = 10000;
- private Vector<SimCalorimeterHitOverlay> hits
- = new Vector<SimCalorimeterHitOverlay>(NMAXHITS);
- //private double [] energy = new double[NMAXHITS];
- private long [] ids = new long[NMAXHITS];
- private int nHits = 0;
-
- //public HitCollectionOverlay()
- //{
- //for (int i=0; i<NMAXHITS; ++i) {
- //ids[i] = 0;
- //}
- //}
-
- public void addHits(List<SimCalorimeterHit> newHits,
- boolean retainMCInformation)
- {
- int nNew = 0;
- for (SimCalorimeterHit h : newHits) {
- //System.out.println("hit");
-
- long id = h.getCellID();
- int i;
- // find the index of this hit (or whether it's new)
- for (i=0; i<nHits && id != ids[i]; ++i) ;
- if (i==nHits) {
- hits.add(new SimCalorimeterHitOverlay(h,retainMCInformation));
- ids[i] = id;
- nHits++;
- nNew++;
- if (nHits == NMAXHITS) { resizeIDArray(); }
- } else {
- hits.get(i).overlayHit(h);
- }
- //energy[i] += h.getRawEnergy();
- }
- //System.out.println(" nNew/nHits = "+nNew+"/"+nHits);
- }
-
- private void resizeIDArray()
- {
- NMAXHITS *= 2;
- long [] newIDArray = new long[NMAXHITS];
- for (int i=0; i<nHits; ++i) {
- newIDArray[i] = ids[i];
- }
- ids = newIDArray;
- }
-
- public int getNHits()
- {
- return nHits;
- }
-
- public List<SimCalorimeterHit> getHits()
- {
- Vector<SimCalorimeterHit> simHits
- = new Vector<SimCalorimeterHit>(hits.size());
- simHits.addAll(hits);
- return simHits;
- }
-}
-
-class SimCalorimeterHitOverlay implements SimCalorimeterHit
-{
- // fields for SimCalorimeterHit interface
- private double [] contributedEnergy = null;
- private double [] contributedTime = null;
- private MCParticle [] mcParticles = null;
- private int mcParticleCount = 0;
-
- // fields for CalorimeterHit interface
- private long cellID = -1;
- private double correctedEnergy = 0;
- private IDDecoder decoder = null;
- private EventHeader.LCMetaData meta = null;
- private double [] position = new double[3];
- private double rawEnergy = 0;
- private Subdetector sub = null;
- private double time = 0;
-
-
- private SimCalorimeterHitOverlay()
- {
- }
-
- public SimCalorimeterHitOverlay(SimCalorimeterHit hit1,
- SimCalorimeterHit hit2)
- {
- this(hit1, hit2, true);
- }
-
- public SimCalorimeterHitOverlay(SimCalorimeterHit hit1,
- SimCalorimeterHit hit2,
- boolean retainMCInformation)
- {
- this(hit1, retainMCInformation);
- this.overlayHit(hit2);
- }
-
- public SimCalorimeterHitOverlay(SimCalorimeterHit hit)
- {
- this(hit, true);
- }
-
- public SimCalorimeterHitOverlay(SimCalorimeterHit hit,
- boolean retainMCInformation)
- {
- if (retainMCInformation) {
- setMCInformation(hit);
- }
-
- cellID = hit.getCellID();
- //correctedEnergy = hit.getCorrectedEnergy();
- correctedEnergy = hit.getRawEnergy();
- decoder = hit.getIDDecoder();
- meta = hit.getLCMetaData();
- position[0] = hit.getPosition()[0];
- position[1] = hit.getPosition()[1];
- position[2] = hit.getPosition()[2];
- rawEnergy = hit.getRawEnergy();
- sub = hit.getSubdetector();
- time = hit.getTime();
- }
-
- private void setMCInformation(SimCalorimeterHit hit)
- {
- mcParticleCount = hit.getMCParticleCount();
-
- contributedEnergy = new double[mcParticleCount];
- contributedTime = new double[mcParticleCount];
- mcParticles = new MCParticle[mcParticleCount];
-
- for (int i=0; i<mcParticleCount; ++i) {
- contributedEnergy[i] = hit.getContributedEnergy(i);
- contributedTime[i] = hit.getContributedTime(i);
- mcParticles[i] = hit.getMCParticle(i);
- }
- }
-
- public void overlayHit(SimCalorimeterHit hit)
- {
- // will NOT
- // time averaged over contributing hits, weighted by energy (not important)
- time = hit.getTime()*hit.getRawEnergy() + this.getTime()*this.getRawEnergy();
- // increment energy
- //correctedEnergy += hit.getCorrectedEnergy();
- correctedEnergy += hit.getRawEnergy();
- rawEnergy += hit.getRawEnergy();
-
- if (this.getRawEnergy() != 0) {
- time /= this.getRawEnergy();
- }
- }
-
- // methods required by SimCalorimeterHit
- public double getContributedEnergy(int index)
- {
- return contributedEnergy[index];
- }
-
- public double getContributedTime(int index)
- {
- return contributedTime[index];
- }
-
- public MCParticle getMCParticle(int index)
- {
- return mcParticles[index];
- }
-
- public int getMCParticleCount()
- {
- return mcParticleCount;
- }
-
- public int getPDG(int index)
- {
- return mcParticles[index].getPDGID();
- }
-
- // methods required by CalorimeterHit
- public long getCellID()
- {
- return cellID;
- }
-
- public double getCorrectedEnergy()
- {
- return correctedEnergy;
- }
-
- public IDDecoder getIDDecoder()
- {
- return decoder;
- }
-
- public EventHeader.LCMetaData getLCMetaData()
- {
- return meta;
- }
-
- public double[] getPosition()
- {
- return position;
- }
-
- public double getRawEnergy()
- {
- return rawEnergy;
- }
-
- public Subdetector getSubdetector()
- {
- return sub;
- }
-
- public double getTime()
- {
- return time;
- }
-}
lcsim/src/org/lcsim/contrib/proulx/eventoverlay
diff -N GuineapigOverlayDriver.java
--- GuineapigOverlayDriver.java 21 Feb 2007 18:20:53 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,120 +0,0 @@
-package org.lcsim.contrib.proulx.eventoverlay;
-
-import java.io.*;
-import java.lang.*;
-import java.util.*;
-import org.lcsim.util.lcio.*;
-import org.lcsim.event.*;
-import org.lcsim.util.*;
-import org.lcsim.geometry.*;
-
-public class GuineapigOverlayDriver extends Driver
-{
- private static Random rand = new Random();
- private EventOverlay overlay = new EventOverlay();
- private int nevents = 0;
- private String gpFileName;
-
- public static void main(String [] args) throws Exception
- {
- LCIOWriter writer
- = new LCIOWriter(new File("eventoverlay/test_BDK_GP_overlay.slcio"));
- GuineapigOverlayDriver d = new GuineapigOverlayDriver();
- for (int iFile = 0; iFile < args.length; ++iFile) {
- System.out.println("Reading events from file "+args[iFile]);
-
- // count the events in the file
- LCIOReader reader = new LCIOReader(new File(args[iFile]));
- boolean eof = false;
- int nevents = 0;
- while (!eof) {
- try {
- reader.skipEvents(1);
- nevents++;
- }
- catch (IOException ioe) {
- eof = true;
- }
- }
-
- //
- reader = new LCIOReader(new File(args[iFile]));
- eof = false;
- int ievent = 0;
- while (!eof) {
- try {
- if (ievent<nevents) {
- System.out.println(" Overlaying event "+(ievent++)+
- " of "+nevents);
- }
- EventHeader e = reader.read();
- d.process(e);
- writer.write(e);
- }
- catch (IOException ioe) {
- eof = true;
- }
- }
- }
- }
-
- public GuineapigOverlayDriver() throws Exception
- {
- this("/nfs/data18/nlc/proulx/java/eventoverlay/testEventOverlay.slcio");
- }
-
- public GuineapigOverlayDriver(String filename, int nEvents)
- {
- gpFileName = filename;
- nevents = nEvents;
- }
-
- public GuineapigOverlayDriver(String filename) throws Exception
- {
- gpFileName = filename;
- nevents = 0;
-
- System.out.println("initializing number of events");
- LCIOReader reader = new LCIOReader(new File(gpFileName));
- boolean eof = false;
- while (!eof) {
- try {
- reader.skipEvents(1);
- nevents++;
- }
- catch (IOException ioe) {
- eof = true;
- }
- }
- System.out.println("nevents = "+nevents);
- System.out.println("done with GuineapigOverlayDriver initialization.");
- }
-
- public void process(EventHeader event)
- {
- EventHeader gpEvent = getGPEvent(rand.nextInt(nevents));
- if (gpEvent != null) {
- overlay.overlayGuineapigEvent(event,gpEvent);
- }
- }
-
- private EventHeader getGPEvent(int iEvent)
- {
- try {
- LCIOReader reader = new LCIOReader(new File(gpFileName));
- reader.skipEvents(iEvent);
- return reader.read();
- }
- catch (Exception e) {
- System.err.println("Exception while looking up guinea pig file:");
- System.err.println(e.toString());
- e.printStackTrace(System.err);
- }
- return null;
- }
-
- public static void setRandomNumberSeed(long seed)
- {
- rand.setSeed(seed);
- }
-}