Print

Print


Author: [log in to unmask]
Date: Thu Aug 13 15:25:42 2015
New Revision: 3367

Log:
copying mods over from ECALGAINCALIB branch for calibration work

Added:
    java/branches/ecal-branch-442/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
    java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim
    java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim
Modified:
    java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
    java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java

Modified: java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java
 =============================================================================
--- java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	(original)
+++ java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverter.java	Thu Aug 13 15:25:42 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;
@@ -50,6 +54,42 @@
  * min/max to data stream. 
  */
 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;
@@ -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;
+        }
+        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,9 @@
     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/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java
 =============================================================================
--- java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	(original)
+++ java/branches/ecal-branch-442/ecal-recon/src/main/java/org/hps/recon/ecal/EcalRawConverterDriver.java	Thu Aug 13 15:25:42 2015
@@ -46,6 +46,8 @@
     public EcalRawConverterDriver() {
         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/branches/ecal-branch-442/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java
 =============================================================================
--- java/branches/ecal-branch-442/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java	(added)
+++ java/branches/ecal-branch-442/recon/src/main/java/org/hps/recon/filtering/FEEFilterDriver.java	Thu Aug 13 15:25:42 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.GenericObject;
+
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+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) {
+/*
+    // only keep singles triggers:
+    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"))
+    {
+      // try to drop clusters:
+      //if (cc.getEnergy() < 0.6 ||
+      //    ClusterUtilities.findSeedHit(cc).getRawEnergy() < 0.4)
+      //  cc.Delete();
+
+      // keep events with a cluster over 600 MeV with seed over 400 MeV:
+      if (cc.getEnergy() > 0.6 && 
+          ClusterUtilities.findSeedHit(cc).getRawEnergy() > 0.4) 
+        return;
+    }
+
+    throw new Driver.NextEventException();
+  }
+}

Added: java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim
 =============================================================================
--- java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim	(added)
+++ java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile.lcsim	Thu Aug 13 15:25:42 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/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim
 =============================================================================
--- java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim	(added)
+++ java/branches/ecal-branch-442/steering-files/src/main/resources/org/hps/steering/users/baltzell/EngRun2015EcalOnly_GainFile_FilterFEE.lcsim	Thu Aug 13 15:25:42 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>