First of all, you need the make the detector tag known to org.lcsim, which is done in

 .lcsim/alias.properties

and add a line to it in the format detector tag: directory containing the geometry files (compact.xml, clichcalstack.heprep)

clichcalstack: file:///home/marcel/demo/stack

this allows you to use the correct geometry. Analysisng then is quite straightforward, the following driver shows some ideas

 import hep.aida.IHistogram1D;
import java.util.List;
import org.lcsim.event.EventHeader;
import org.lcsim.event.SimCalorimeterHit;
import org.lcsim.geometry.util.CalorimeterIDDecoder;
import org.lcsim.util.Driver;
import org.lcsim.util.aida.AIDA;


public class StackAnalysis extends Driver{
	String calcolname = "HCALCalorimeterHits";
	private AIDA aida = AIDA.defaultInstance();
	public StackAnalysis(){


	}
	protected void process(EventHeader event) {
		super.process(event);

		List<SimCalorimeterHit>calorimeterhits =
			event.get(SimCalorimeterHit.class,calcolname);
// make a histogramm
		IHistogram1D hitlayer=aida.histogram1D("Layer Profile", 100, 0, 100);
		IHistogram1D hit_x=aida.histogram1D("Hit Pos X", 500, -500, 500);
		IHistogram1D hit_y=aida.histogram1D("Hit Pos Y",  500, -500, 500);
		IHistogram1D hit_z=aida.histogram1D("Hit Pos Z", 1000, 2000, 5000);
// loop over hits ...
		for (SimCalorimeterHit calhit: calorimeterhits) {
			aida.cloud1D("Hit Energy").fill(calhit.getRawEnergy());
// get the CellID decoder
			CalorimeterIDDecoder iddecoder = (CalorimeterIDDecoder)calhit.getIDDecoder();
			iddecoder.setID(calhit.getCellID());
//get the layer
			hitlayer.fill(iddecoder.getLayer());
// get x and y
			hit_x.fill(calhit.getPosition()[0]);
			hit_y.fill(calhit.getPosition()[1]);
			aida.cloud2D("Hit x vs y").fill(calhit.getPosition()[0],calhit.getPosition()[1]);
			hit_z.fill(calhit.getPosition()[2]);
			aida.cloud2D("Hit z vs layer").fill(calhit.getPosition()[2],iddecoder.getLayer());
// get the timing
			aida.cloud1D("Hit Timing").fill(calhit.getTime());
		}

	}
}
  • No labels