5 modified files
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.1 -r1.2
--- SimpleSvtReadout.java 16 Aug 2012 01:06:30 -0000 1.1
+++ SimpleSvtReadout.java 16 Aug 2012 22:01:30 -0000 1.2
@@ -10,6 +10,7 @@
//--- lcsim ---//
import org.lcsim.detector.tracker.silicon.ChargeCarrier;
import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.detector.tracker.silicon.SiTrackerIdentifierHelper;
import org.lcsim.event.EventHeader;
import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.base.BaseRawTrackerHit;
@@ -22,11 +23,12 @@
import org.lcsim.recon.tracking.digitization.sisim.SiSensorSim;
import org.lcsim.recon.tracking.digitization.sisim.config.SimTrackerHitReadoutDriver;
import org.lcsim.util.Driver;
+import org.lcsim.util.lcio.LCIOConstants;
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: SimpleSvtReadout.java,v 1.1 2012/08/16 01:06:30 meeg Exp $
+ * @version $Id: SimpleSvtReadout.java,v 1.2 2012/08/16 22:01:30 meeg Exp $
*/
public class SimpleSvtReadout extends Driver {
@@ -39,6 +41,7 @@
double readoutOffset = 0.0;
private String readout = "TrackerHits";
private SimTrackerHitReadoutDriver readoutDriver = new SimTrackerHitReadoutDriver();
+ private int readoutCycle = 0;
public SimpleSvtReadout() {
add(readoutDriver);
@@ -53,7 +56,7 @@
String[] readouts = {readout};
readoutDriver.setCollections(readouts);
-
+
pipelineMap.clear();
for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
pipelineMap.put(sensor, new APV25Pipeline[HPSSVTConstants.TOTAL_STRIPS_PER_SENSOR]);
@@ -77,7 +80,7 @@
}
}
}
- Apv25Full.apv25ClockCycle++;
+ readoutCycle++;
}
for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
@@ -114,9 +117,11 @@
if (pipelines[channel] == null) {
pipelines[channel] = new APV25Pipeline();
}
-
+ double resistorValue = 100; // Ohms
+ double inputStageGain = 1.5;
+ double amplitude = (charge / Apv25Constants.MIP) * resistorValue * inputStageGain * Math.pow(2, 14) / 2000;
for (int i = 0; i < 20; i++) {
- pipelines[channel].addToCell(i, charge * pulseAmplitude((i + 1) * readoutPeriod + readoutTime() - ClockSingleton.getTime(), 50.0));
+ pipelines[channel].addToCell(i, amplitude * pulseAmplitude((i + 1) * readoutPeriod + readoutTime() - ClockSingleton.getTime(), 50.0));
}
}
}
@@ -138,13 +143,14 @@
for (SiSensor sensor : SvtUtils.getInstance().getSensors()) {
APV25Pipeline[] pipelines = pipelineMap.get(sensor);
- for (int i = 0; i < pipelines.length; i++) {
- if (pipelines[i] != null) {
+ for (int channel = 0; channel < pipelines.length; channel++) {
+ if (pipelines[channel] != null) {
short[] samples = new short[6];
for (int j = 0; j < 6; j++) {
- samples[j] = (short) pipelines[i].getValue(j);
+ samples[j] = (short) (pipelines[channel].getValue(j) + HPSSVTCalibrationConstants.getPedestal(sensor, channel));
// System.out.println(samples[j]);
}
+// System.out.println();
// Find the side number (is 1)
int sideNumber;
@@ -153,19 +159,39 @@
} else {
sideNumber = ChargeCarrier.ELECTRON.charge();
}
- long cell_id = sensor.makeStripId(i, sideNumber).getValue();
-
+ long cell_id = sensor.makeStripId(channel, sideNumber).getValue();
RawTrackerHit hit = new BaseRawTrackerHit(0, cell_id, samples, null, sensor);
// System.out.println("Making RTH");
- hits.add(hit);
+ if (samplesAboveThreshold(hit)) {
+ hits.add(hit);
+ }
+ SiTrackerIdentifierHelper _sid_helper = (SiTrackerIdentifierHelper) sensor.getIdentifierHelper();
+ System.out.println(_sid_helper.getSideValue(hit.getIdentifier()));
+ System.out.println(hit.getIdentifier());
}
}
}
- event.put(outputCollection, hits, RawTrackerHit.class, 0);
+ int flags = 1 << LCIOConstants.TRAWBIT_ID1;
+ event.put(outputCollection, hits, RawTrackerHit.class, flags, readout);
+ }
+ }
+ private boolean samplesAboveThreshold(RawTrackerHit hit) {
+ SiSensor sensor = (SiSensor) hit.getDetectorElement();
+ int channel = hit.getIdentifierFieldValue("strip");
+ HPSSVTCalibrationConstants.getChannelConstants(sensor, channel);
+ double pedestal = HPSSVTCalibrationConstants.getPedestal(sensor, channel);
+ double noise = HPSSVTCalibrationConstants.getNoise(sensor, channel);
+ int count = 0;
+ short[] samples = hit.getADCValues();
+ for (int i = 0; i < samples.length; i++) {
+ if (samples[i] - pedestal > noise * 3.0) {
+ count++;
+ }
}
+ return count >= 3;
}
public class APV25Pipeline extends RingBuffer {
@@ -220,6 +246,6 @@
}
private double readoutTime() {
- return Apv25Full.apv25ClockCycle * readoutPeriod + readoutOffset;
+ return readoutCycle * readoutPeriod + readoutOffset;
}
}
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.5 -r1.6
--- TestRunTriggeredReconToLcio.java 6 Aug 2012 21:15:21 -0000 1.5
+++ TestRunTriggeredReconToLcio.java 16 Aug 2012 22:01:30 -0000 1.6
@@ -29,7 +29,7 @@
private int eventsWritten = 0;
// HPSEcalConditions ecalIDConverter = null;
ECalHitWriter ecalWriter = null;
- SVTHitWriter svtWriter = null;
+ SVTHitWriter_RTH svtWriter = null;
TriggerDataWriter triggerWriter = null;
List<HitWriter> writers = null;
LCIOWriter lcioWriter = null;
@@ -70,7 +70,7 @@
ecalWriter.setHitCollectionName(rawCalorimeterHitCollectionName);
writers.add(ecalWriter);
- svtWriter = new SVTHitWriter();
+ svtWriter = new SVTHitWriter_RTH();
writers.add(svtWriter);
triggerWriter = new TriggerDataWriter();
hps-java/src/main/java/org/lcsim/hps/evio
diff -u -r1.1 -r1.2
--- SVTHitWriter_RTH.java 16 Aug 2012 01:06:30 -0000 1.1
+++ SVTHitWriter_RTH.java 16 Aug 2012 22:01:30 -0000 1.2
@@ -18,16 +18,20 @@
import org.lcsim.hps.recon.tracking.HPSSVTConstants;
import org.lcsim.hps.recon.tracking.HPSSVTData;
import org.lcsim.hps.recon.tracking.SvtUtils;
+import org.lcsim.util.lcio.LCIOConstants;
+import org.lcsim.util.lcio.LCIOUtil;
/**
*
* @author Sho Uemura <[log in to unmask]>
- * @version $Id: SVTHitWriter_RTH.java,v 1.1 2012/08/16 01:06:30 meeg Exp $
+ * @version $Id: SVTHitWriter_RTH.java,v 1.2 2012/08/16 22:01:30 meeg Exp $
*/
public class SVTHitWriter_RTH implements HitWriter {
boolean debug = false;
private String hitCollectionName = "SVTRawTrackerHits";
+ private String fpgaDataCollectionName = "FPGAData";
+ String readoutName = "TrackerHits";
public SVTHitWriter_RTH() {
}
@@ -36,25 +40,36 @@
this.hitCollectionName = hitCollectionName;
}
+ @Override
public boolean hasData(EventHeader event) {
return event.hasCollection(RawTrackerHit.class, hitCollectionName);
}
- public void writeData(EventHeader event, EventBuilder builder) {
+ //make some dummy FpgaData to use in case there isn't any real FpgaData
+ private static List<FpgaData> makeFpgaData() {
double[] temps = new double[HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID];
for (int i = 0; i < HPSSVTConstants.TOTAL_HYBRIDS_PER_FPGA * HPSSVTConstants.TOTAL_TEMPS_PER_HYBRID; i++) {
temps[i] = 23.0;
}
+ List<FpgaData> fpgaData = new ArrayList<FpgaData>();
+ for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
+ fpgaData.add(new FpgaData(fpgaNumber, temps, 0));
+ }
+
+ return fpgaData;
+ }
+
+ public void writeData(EventHeader event, EventBuilder builder) {
List<RawTrackerHit> hits = event.get(RawTrackerHit.class, hitCollectionName);
- List<FpgaData> fpgaData = new ArrayList<FpgaData>();
+ List<FpgaData> fpgaData = makeFpgaData();
System.out.println("Writing " + hits.size() + " SVT hits");
+ System.out.println("Writing " + fpgaData.size() + " FPGA data");
List<List<int[]>> fpgaHits = new ArrayList<List<int[]>>();
for (int fpgaNumber = 0; fpgaNumber < SVT_TOTAL_NUMBER_FPGAS; fpgaNumber++) {
fpgaHits.add(new ArrayList<int[]>());
- fpgaData.add(new FpgaData(fpgaNumber, temps, 0));
}
for (RawTrackerHit hit : hits) {
@@ -113,10 +128,6 @@
builder.addChild(svtBank, frameBank);
// Add the SVT data to the FPGA bank
frameBank.appendIntData(dataBuffer);
- builder.getEvent().setAllHeaderLengths();
- System.out.println(frameBank.getTotalBytes());
- System.out.println(svtBank.getTotalBytes());
- System.out.println(builder.getEvent().getTotalBytes());
} catch (EvioException e) {
throw new RuntimeException(e);
}
@@ -132,7 +143,16 @@
@Override
public void writeData(EventHeader event, EventHeader toEvent) {
List<RawTrackerHit> rawTrackerHits = event.get(RawTrackerHit.class, hitCollectionName);
+
+
+
System.out.println("Writing " + rawTrackerHits.size() + " SVT hits");
- toEvent.put(hitCollectionName, rawTrackerHits, RawTrackerHit.class, 0);
+ int flags = 1 << LCIOConstants.TRAWBIT_ID1;
+ toEvent.put(hitCollectionName, rawTrackerHits, RawTrackerHit.class, flags, readoutName);
+
+ List<FpgaData> fpgaData = makeFpgaData();
+ System.out.println("Writing " + fpgaData.size() + " FPGA data");
+
+ toEvent.put(fpgaDataCollectionName, fpgaData, FpgaData.class, 0);
}
}
hps-java/src/main/resources/org/lcsim/hps/steering
diff -u -r1.2 -r1.3
--- HPSTestRunReconToLcio.lcsim 3 Aug 2012 23:14:39 -0000 1.2
+++ HPSTestRunReconToLcio.lcsim 16 Aug 2012 22:01:30 -0000 1.3
@@ -15,7 +15,6 @@
<driver name="EcalConverter"/>
<driver name="EcalClusterer"/>
<driver name="EcalTrigger"/>
- <driver name="SVTSensorSetup"/>
<driver name="SVTReadout"/>
<driver name="ClockDriver"/>
<driver name="TestRunReconToLcio"/>
@@ -61,13 +60,7 @@
<deadTime>10</deadTime>
</driver>
- <driver name="SVTSensorSetup"
- type="org.lcsim.hps.recon.tracking.HPSSVTSensorSetup">
- </driver>
-
- <driver name="SVTReadout"
- type="org.lcsim.hps.recon.tracking.apv25.HPSSiSensorReadout">
- <addNoise>true</addNoise>
+ <driver name="SVTReadout" type="org.lcsim.hps.recon.tracking.SimpleSvtReadout">
</driver>
<driver name="ClockDriver"
hps-java/src/main/resources/org/lcsim/hps/steering
diff -u -r1.2 -r1.3
--- SVTMonitoring.lcsim 14 Aug 2012 00:58:03 -0000 1.2
+++ SVTMonitoring.lcsim 16 Aug 2012 22:01:30 -0000 1.3
@@ -6,21 +6,22 @@
<driver name="SVTPulsePlots"/>
<driver name="RawTrackerHitFitterDriver" />
- <driver name="SVTPulseFitPlots"/>
- <driver name="SVTMonitoringPlots"/>
+<!-- <driver name="SVTPulseFitPlots"/>
+ <driver name="SVTMonitoringPlots"/>-->
<driver name="TrackerHitDriver" />
- <driver name="SVTHitRecoPlots"/>
+<!-- <driver name="SVTHitRecoPlots"/>-->
- <driver name="TrackerReconDriver" />
+<!-- <driver name="TrackerReconDriver" />
<driver name="SVTSimpleEventDisplay"/>
<driver name="TrackTimePlots"/>
<driver name="EcalRawConverter" />
<driver name="EcalClusterer" />
- <driver name="TrackingReconstructionPlots" />
+ <driver name="TrackingReconstructionPlots" />-->
<driver name="CleanupDriver" />
+ <driver name="LoadCalibrationsDriver"/>
</execute>
<drivers>
<driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
@@ -72,5 +73,6 @@
<driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
<collectionNames>TrackerHits</collectionNames>
</driver>
+ <driver name="LoadCalibrationsDriver" type="org.lcsim.hps.recon.tracking.LoadCalibrationsDriver"/>
</drivers>
</lcsim>
\ No newline at end of file
CVSspam 0.2.12