1 package org.lcsim.recon.calorimetry;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6
7 import org.lcsim.event.EventHeader;
8 import org.lcsim.event.SimCalorimeterHit;
9 import org.lcsim.event.EventHeader.LCMetaData;
10 import org.lcsim.event.base.BaseSimCalorimeterHit;
11 import org.lcsim.util.Driver;
12 import org.lcsim.lcio.LCIOConstants;
13 import org.lcsim.lcio.LCIOUtil;
14
15
16
17
18
19
20
21
22 public class ResetCalorimeterHitEnergy extends Driver {
23
24 protected List<String> ignoreCollections;
25
26 public ResetCalorimeterHitEnergy() {
27 ignoreCollections = new ArrayList<String>();
28 }
29
30 public void setIgnoreCollection(String collectionName) {
31 ignoreCollections.add(collectionName);
32 }
33
34 public void setIgnoreCollections(String[] collectionNames) {
35 ignoreCollections.addAll(Arrays.asList(collectionNames));
36 }
37
38 @Override
39 protected void process(EventHeader event) {
40
41 List<List<SimCalorimeterHit>> caloHitCollections = event.get(SimCalorimeterHit.class);
42
43 for (List<SimCalorimeterHit> caloHitCollection : caloHitCollections) {
44 LCMetaData metaData = event.getMetaData(caloHitCollection);
45 String collectionName = metaData.getName();
46 if (ignoreCollections.contains(collectionName)) {
47 continue;
48 }
49 boolean hasPDG = LCIOUtil.bitTest(metaData.getFlags(),LCIOConstants.CHBIT_PDG);
50 List<SimCalorimeterHit> resetHits = new ArrayList<SimCalorimeterHit>();
51 for (SimCalorimeterHit caloHit : caloHitCollection) {
52 long id = caloHit.getCellID();
53 double totalEnergy = 0.;
54 double time = caloHit.getTime();
55 int nMCP = caloHit.getMCParticleCount();
56 Object[] mcparts = new Object[nMCP];
57 float[] energies = new float[nMCP];
58 float[] times = new float[nMCP];
59 int[] pdgs = null;
60 List<float[]> steps = new ArrayList<float[]>();
61 if (hasPDG) pdgs = new int[nMCP];
62
63 for (int i = 0; i != nMCP; i++) {
64 mcparts[i] = caloHit.getMCParticle(i);
65 energies[i] = (float) caloHit.getContributedEnergy(i);
66 totalEnergy += energies[i];
67 times[i] = (float) caloHit.getContributedTime(i);
68 if (hasPDG){
69 pdgs[i] = caloHit.getPDG(i);
70 steps.add(caloHit.getStepPosition(i));
71 }
72 }
73
74 BaseSimCalorimeterHit resetHit = new BaseSimCalorimeterHit(id, totalEnergy, time, mcparts, energies, times, pdgs, steps, metaData);
75 resetHits.add(resetHit);
76 }
77 caloHitCollection.clear();
78 caloHitCollection.addAll(resetHits);
79 }
80
81 }
82
83 }