Author: [log in to unmask]
Date: Tue Aug 11 05:37:54 2015
New Revision: 3363
Log:
adding ecal calibrations stuff
Added:
java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim
java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim
Modified:
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java Tue Aug 11 05:37:54 2015
@@ -4,7 +4,11 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Map;
import org.hps.conditions.database.DatabaseConditionsManager;
@@ -51,6 +55,42 @@
*/
public class EcalRawConverter {
+ private Map<Integer,Double> gainFileGains = new HashMap<Integer,Double>();
+ public String gainFileName = null;
+
+ private void readGainFile() {
+ gainFileGains.clear();
+ System.out.println("Reading ECal Gains from: "+gainFileName);
+ File file = new File(gainFileName);
+ try {
+ FileReader reader = new FileReader(file);
+ char[] chars = new char[(int) file.length()];
+ reader.read(chars);
+ String content = new String(chars);
+ reader.close();
+ String lines[]=content.split("\n");
+ int nlines = 0;
+ for (String line : lines) {
+ String columns[] = line.split(" ");
+ if (nlines++ > 0) {
+ final int channelid = Integer.valueOf(columns[0]);
+ final double gain = Double.valueOf(columns[1]);
+ if (gainFileGains.containsKey(channelid)) {
+ System.err.println("Duplicate Entries in ECal Gain File.");
+ System.exit(2);
+ }
+ gainFileGains.put(channelid,gain);
+ }
+ }
+ if (nlines != 442+1) {
+ System.err.println("Invalid Gain File.");
+ System.exit(3);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
private boolean useTimeWalkCorrection = false;
private boolean useRunningPedestal = false;
private boolean constantGain = false;
@@ -574,7 +614,12 @@
if(useDAQConfig) {
//float gain = ConfigurationManager.getInstance().getFADCConfig().getGain(ecalConditions.getChannelCollection().findGeometric(cellID));
return config.getGain(cellID) * adcSum * EcalUtils.MeV;
- } else if(use2014Gain) {
+ }
+ else if (gainFileName!=null) {
+ //System.err.println(findChannelId(cellID)+" "+gainFileGains.get(findChannelId(cellID)));
+ return gainFileGains.get(findChannelId(cellID)) * adcSum * EcalUtils.MeV; //gain is defined as MeV/integrated ADC
+ }
+ else if(use2014Gain) {
if (constantGain) {
return adcSum * EcalUtils.gainFactor * EcalUtils.ecalReadoutPeriod;
} else {
@@ -598,6 +643,7 @@
// ECAL combined conditions object.
ecalConditions = DatabaseConditionsManager.getInstance().getEcalConditions();
pulseFitter.setDetector(detector);
+ if (gainFileName != null) readGainFile();
}
/**
@@ -609,5 +655,8 @@
public EcalChannelConstants findChannel(long cellID) {
return ecalConditions.getChannelConstants(ecalConditions.getChannelCollection().findGeometric(cellID));
}
+ public Integer findChannelId(long cellID) {
+ return ecalConditions.getChannelCollection().findGeometric(cellID).getChannelId();
+ }
}
Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
=============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java (original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java Tue Aug 11 05:37:54 2015
@@ -47,6 +47,8 @@
converter = new EcalRawConverter();
}
+ public void setGainFile(String filename) { converter.gainFileName=filename; }
+
/*
* Set to <code>true</code> to use pulse fitting instead of arithmetic integration:<br/>
*/
Added: java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
=============================================================================
--- java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java (added)
+++ java/trunk/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java Tue Aug 11 05:37:54 2015
@@ -0,0 +1,56 @@
+package org.hps.recon.filtering;
+
+import org.hps.recon.ecal.triggerbank.AbstractIntData;
+import org.hps.recon.ecal.triggerbank.TIData;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.util.Driver;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.hps.record.epics.EpicsData;
+
+public class FEEFilterDriver extends Driver
+{
+ public void process(EventHeader event) {
+
+/*
+ if (!event.hasCollection(GenericObject.class,"TriggerBank"))
+ throw new Driver.NextEventException();
+
+ boolean isSingles=false;
+ for (GenericObject gob : event.get(GenericObject.class,"TriggerBank"))
+ {
+ if (!(AbstractIntData.getTag(gob) == TIData.BANK_TAG)) continue;
+ TIData tid = new TIData(gob);
+ if (tid.isSingle0Trigger() || tid.isSingle1Trigger())
+ {
+ isSingles=true;
+ break;
+ }
+ }
+ if (!isSingles) throw new Driver.NextEventException();
+*/
+
+ // don't drop any events with EPICS data:
+ // (could also do this via event tag=31)
+ final EpicsData data = EpicsData.read(event);
+ if (data != null) return;
+
+ if (!event.hasCollection(Cluster.class, "EcalClusters"))
+ throw new Driver.NextEventException();
+
+ for (Cluster cc : event.get(Cluster.class,"EcalClusters"))
+ {
+ //if (cc.getEnergy() < 0.6 ||
+ // ClusterUtilities.findSeedHit(cc).getRawEnergy() < 0.4)
+ // cc.Delete();
+
+ if (cc.getEnergy() > 0.6 &&
+ ClusterUtilities.findSeedHit(cc).getRawEnergy() > 0.4)
+ return;
+
+ }
+
+ throw new Driver.NextEventException();
+ }
+}
Added: java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim (added)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim Tue Aug 11 05:37:54 2015
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+<!--
+ Offline reconstruction for 2015 (engineering run with SVT+ECal) data.
+ @author Sho Uemura <[log in to unmask]>
+-->
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <!--<driver name="RawTrackerHitSensorSetup"/>-->
+ <!--<driver name="RawTrackerHitFitterDriver" />-->
+ <!--<driver name="TrackerHitDriver"/>-->
+ <!--<driver name="HelicalTrackHitDriver"/>-->
+ <!--<driver name="TrackerReconDriver"/>-->
+ <driver name="EcalRunningPedestal"/>
+ <driver name="EcalRawConverter" />
+ <driver name="ReconClusterer" />
+ <driver name="GTPOnlineClusterer" />
+ <!--<driver name="CopyCluster" />-->
+ <!--<driver name="ReconParticle" />-->
+ <!--<driver name="TrackDataDriver" />-->
+ <!--<driver name="GBLDriver"/>-->
+ <driver name="LCIOWriter"/>
+ <driver name="CleanupDriver"/>
+ </execute>
+ <drivers>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1000</eventInterval>
+ </driver>
+ <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup">
+ <readoutCollections>SVTRawTrackerHits</readoutCollections>
+ </driver>
+ <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">
+ <fitAlgorithm>Pileup</fitAlgorithm>
+ <useTimestamps>false</useTimestamps>
+ <correctTimeOffset>true</correctTimeOffset>
+ <correctT0Shift>true</correctT0Shift>
+ <useTruthTime>false</useTruthTime>
+ <subtractTOF>true</subtractTOF>
+ <subtractTriggerTime>true</subtractTriggerTime>
+ <correctChanT0>true</correctChanT0>
+ <debug>false</debug>
+ </driver>
+ <driver name="TrackerHitDriver" type="org.hps.recon.tracking.DataTrackerHitDriver">
+ <neighborDeltaT>8.0</neighborDeltaT>
+ </driver>
+ <driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
+ <debug>false</debug>
+ <clusterTimeCut>12.0</clusterTimeCut>
+ <maxDt>16.0</maxDt>
+ <clusterAmplitudeCut>400.0</clusterAmplitudeCut>
+ </driver>
+ <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
+ <strategyResource>HPS-Full.xml</strategyResource>
+ <debug>false</debug>
+ <rmsTimeCut>8.0</rmsTimeCut>
+ </driver>
+ <driver name="GBLDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver">
+ <debug>0</debug>
+ <isMC>false</isMC>
+ <gblFileName></gblFileName>
+ </driver>
+ <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
+ <logLevel>CONFIG</logLevel>
+ <minLookbackEvents>5</minLookbackEvents>
+ <maxLookbackEvents>40</maxLookbackEvents>
+ </driver>
+ <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
+ <use2014Gain>false</use2014Gain>
+ <useTimestamps>false</useTimestamps>
+ <useTruthTime>false</useTruthTime>
+ <useRunningPedestal>true</useRunningPedestal>
+ <useTimeWalkCorrection>false</useTimeWalkCorrection>
+ <emulateFirmware>true</emulateFirmware>
+ <emulateMode7>true</emulateMode7>
+ <leadingEdgeThreshold>12</leadingEdgeThreshold>
+ <nsa>100</nsa>
+ <nsb>20</nsb>
+ <nPeak>3</nPeak>
+ <useFit>true</useFit>
+ <fixShapeParameter>true</fixShapeParameter>
+ <gainFile>ecalGains.txt</gainFile>
+ </driver>
+ <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
+ <logLevel>WARNING</logLevel>
+ <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>
+ <hitEnergyThreshold>0.0075</hitEnergyThreshold>
+ <seedEnergyThreshold>0.050</seedEnergyThreshold>
+ <clusterEnergyThreshold>0.100</clusterEnergyThreshold>
+ <minTime>0.0</minTime>
+ <timeWindow>25.0</timeWindow>
+ <useTimeCut>true</useTimeCut>
+ <writeRejectedHitCollection>false</writeRejectedHitCollection>
+ </driver>
+ <driver name="GTPOnlineClusterer" type="org.hps.recon.ecal.cluster.ClusterDriver">
+ <logLevel>WARNING</logLevel>
+ <clustererName>GTPOnlineClusterer</clustererName>
+ <outputClusterCollectionName>EcalClustersGTP</outputClusterCollectionName>
+ <!-- seedMinEnergy -->
+ <cuts>0.100</cuts>
+ </driver>
+ <driver name="CopyCluster" type="org.hps.recon.ecal.cluster.CopyClusterCollectionDriver">
+ <inputCollectionName>EcalClusters</inputCollectionName>
+ <outputCollectionName>EcalClustersCorr</outputCollectionName>
+ <storeHits>true</storeHits>
+ </driver>
+ <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>
+ </driver>
+ <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
+ <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
+ <outputFilePath>${outputFile}.slcio</outputFilePath>
+ <!--<ignoreCollections>SVTRawTrackerHits EcalReadoutHits</ignoreCollections>-->
+ </driver>
+ <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
+ <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
+ <outputFileName>${outputFile}.root</outputFileName>
+ </driver>
+ </drivers>
+</lcsim>
Added: java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim
=============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim (added)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim Tue Aug 11 05:37:54 2015
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+<!--
+ Offline reconstruction for 2015 (engineering run with SVT+ECal) data.
+ @author Sho Uemura <[log in to unmask]>
+-->
+ <execute>
+ <driver name="EventMarkerDriver"/>
+ <!--<driver name="RawTrackerHitSensorSetup"/>-->
+ <!--<driver name="RawTrackerHitFitterDriver" />-->
+ <!--<driver name="TrackerHitDriver"/>-->
+ <!--<driver name="HelicalTrackHitDriver"/>-->
+ <!--<driver name="TrackerReconDriver"/>-->
+ <driver name="EcalRunningPedestal"/>
+ <driver name="EcalRawConverter" />
+ <driver name="ReconClusterer" />
+ <driver name="FEEFilterDriver" />
+ <!--<driver name="GTPOnlineClusterer" />-->
+ <!--<driver name="CopyCluster" />-->
+ <!--<driver name="ReconParticle" />-->
+ <!--<driver name="TrackDataDriver" />-->
+ <!--<driver name="GBLDriver"/>-->
+ <driver name="LCIOWriter"/>
+ <driver name="CleanupDriver"/>
+ </execute>
+ <drivers>
+ <driver name="FEEFilterDriver" type="org.hps.recon.filtering.FEEFilterDriver">
+ </driver>
+ <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+ <eventInterval>1000</eventInterval>
+ </driver>
+ <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup">
+ <readoutCollections>SVTRawTrackerHits</readoutCollections>
+ </driver>
+ <driver name="RawTrackerHitFitterDriver" type="org.hps.recon.tracking.RawTrackerHitFitterDriver">
+ <fitAlgorithm>Pileup</fitAlgorithm>
+ <useTimestamps>false</useTimestamps>
+ <correctTimeOffset>true</correctTimeOffset>
+ <correctT0Shift>true</correctT0Shift>
+ <useTruthTime>false</useTruthTime>
+ <subtractTOF>true</subtractTOF>
+ <subtractTriggerTime>true</subtractTriggerTime>
+ <correctChanT0>true</correctChanT0>
+ <debug>false</debug>
+ </driver>
+ <driver name="TrackerHitDriver" type="org.hps.recon.tracking.DataTrackerHitDriver">
+ <neighborDeltaT>8.0</neighborDeltaT>
+ </driver>
+ <driver name="HelicalTrackHitDriver" type="org.hps.recon.tracking.HelicalTrackHitDriver">
+ <debug>false</debug>
+ <clusterTimeCut>12.0</clusterTimeCut>
+ <maxDt>16.0</maxDt>
+ <clusterAmplitudeCut>400.0</clusterAmplitudeCut>
+ </driver>
+ <driver name="TrackerReconDriver" type="org.hps.recon.tracking.TrackerReconDriver">
+ <strategyResource>HPS-Full.xml</strategyResource>
+ <debug>false</debug>
+ <rmsTimeCut>8.0</rmsTimeCut>
+ </driver>
+ <driver name="GBLDriver" type="org.hps.recon.tracking.gbl.GBLOutputDriver">
+ <debug>0</debug>
+ <isMC>false</isMC>
+ <gblFileName></gblFileName>
+ </driver>
+ <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.EcalRunningPedestalDriver">
+ <logLevel>CONFIG</logLevel>
+ <minLookbackEvents>5</minLookbackEvents>
+ <maxLookbackEvents>40</maxLookbackEvents>
+ </driver>
+ <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+ <ecalCollectionName>EcalCalHits</ecalCollectionName>
+ <use2014Gain>false</use2014Gain>
+ <useTimestamps>false</useTimestamps>
+ <useTruthTime>false</useTruthTime>
+ <useRunningPedestal>true</useRunningPedestal>
+ <useTimeWalkCorrection>false</useTimeWalkCorrection>
+ <emulateFirmware>true</emulateFirmware>
+ <emulateMode7>true</emulateMode7>
+ <leadingEdgeThreshold>12</leadingEdgeThreshold>
+ <nsa>100</nsa>
+ <nsb>20</nsb>
+ <nPeak>3</nPeak>
+ <useFit>true</useFit>
+ <fixShapeParameter>true</fixShapeParameter>
+ <gainFile>ecalGains.txt</gainFile>
+ </driver>
+ <driver name="ReconClusterer" type="org.hps.recon.ecal.cluster.ReconClusterDriver">
+ <logLevel>WARNING</logLevel>
+ <outputClusterCollectionName>EcalClusters</outputClusterCollectionName>
+ <hitEnergyThreshold>0.0075</hitEnergyThreshold>
+ <seedEnergyThreshold>0.050</seedEnergyThreshold>
+ <clusterEnergyThreshold>0.100</clusterEnergyThreshold>
+ <minTime>0.0</minTime>
+ <timeWindow>25.0</timeWindow>
+ <useTimeCut>true</useTimeCut>
+ <writeRejectedHitCollection>false</writeRejectedHitCollection>
+ </driver>
+ <driver name="GTPOnlineClusterer" type="org.hps.recon.ecal.cluster.ClusterDriver">
+ <logLevel>WARNING</logLevel>
+ <clustererName>GTPOnlineClusterer</clustererName>
+ <outputClusterCollectionName>EcalClustersGTP</outputClusterCollectionName>
+ <!-- seedMinEnergy -->
+ <cuts>0.100</cuts>
+ </driver>
+ <driver name="CopyCluster" type="org.hps.recon.ecal.cluster.CopyClusterCollectionDriver">
+ <inputCollectionName>EcalClusters</inputCollectionName>
+ <outputCollectionName>EcalClustersCorr</outputCollectionName>
+ <storeHits>true</storeHits>
+ </driver>
+ <driver name="ReconParticle" type="org.hps.recon.particle.HpsReconParticleDriver">
+ <ecalClusterCollectionName>EcalClustersCorr</ecalClusterCollectionName>
+ </driver>
+ <driver name="TrackDataDriver" type="org.hps.recon.tracking.TrackDataDriver" />
+ <driver name="LCIOWriter" type="org.lcsim.util.loop.LCIODriver">
+ <outputFilePath>${outputFile}.slcio</outputFilePath>
+ <!--<writeOnlyCollections>EcalCalHits EcalClusters </writeOnlyCollections>-->
+ <ignoreCollections>SVTRawTrackerHits EcalReadoutHits FADCGenericHits</ignoreCollections>
+ </driver>
+ <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
+ <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
+ <outputFileName>${outputFile}.root</outputFileName>
+ </driver>
+ </drivers>
+</lcsim>
|