Project

General

Profile

Test Beam Detector fcl parameters

The purpose of this page is to summarize all parameter tables for the Test Beam Detector simulation. Most of these have been copied from the FarDet or NearDet parameter tables, and will need tuning for Test Beam. We can keep track of any tuning here.

Running simulation jobs

To access the gain_setting table in the database, the following is required for most TestBeam jobs:

services.RunHistory.DetGainTag: "" 

To specify TestBeam geometry, you will also want to include:

services.Geometry: @local::tb_geo
services.Geometry.ForceUseFCLOnly: true
services.Geometry.GDML: "Geometry/gdml/testbeam-2x2-2block-xtru-vacuum-stagger.gdml" 

Geometry

Values copied from ND. Probably no tuning required.

  tb:
  {
    BigBoxUsed: false
    BigBoxRange: 1500   #in cm
    FiducialVolumeXHi: 20
    FiducialVolumeXLo: 20
    FiducialVolumeYHi: 20
    FiducialVolumeYLo: 20
    FiducialVolumeZHi: 20
    FiducialVolumeZLo: 20
  }

Photon Transport

Values copied from ND.

 #These values still need tuning for TestBeam (copied from ND).
 tb:
 {
  PhotonsPerMeV:          3159.07         #number of blue photons created/MeV of deposited energy (2/100 eV for anthracene; BC-517P = 21% of that; ours, 80% of BC-517P)
  CerenkovEff:            0.470838     #Absorption and re-emisssion efficiency for Cerenkov light
  XViewFactor:            1.07461      #scale factor for the x-view
  YViewFactor:            1.04805      #scale factor for the y-view
  QuantumEff:             0.85        #APD quantum efficiency QE*CE*PhotonsPerMeV sets light level
  FiberIndexOfRefraction: 1.59        #core, cladding is n=1.49 and n=1.42
  EmissionTau:            9.0        #time constant of fluor de-excitation in ns
  AttenPars:              [0.2667,  254.0, 0.2139, 860.0] #parameters for fiber transmission function. Derived from DocDB-10150
  TimeClustering:         2.0         #group equivalent photons into clusters this many ns wide
  Step:                   2.0         #step size for walking along each segment 
  WriteEmptySignals:      false       #whether to write a photon signal for an FLSHit if the PE would be zero. Required for fully accurate tracking of PoissonLambda
  ApplyBirks:             true        #use Birks suppressed energy stored in FLSHits
  MessageLevel:           0           #0:fatal, 10:error, 20: info, 30: debug
  CollectionRateFile:     "PhotonTransport/dT_dZ_CollectionRate.root" 
  ApplyFiberSmearing:     true       #use time smearing due to bouncing down the fiber
  SmearingHistoFile:      "PhotonTransport/Dt_per_z_distribution.root" 
  BrightnessMode:         "None"      #Correcting to the fiber brightness measured at the factory. Either "ByCell", "ByModule", "ByPlane", "ByBin", or "None" 
  BrightnessMapName:      "BrightnessByBin" 
  BrightnessValueName:    "BrightnessValue" 
  BrightnessValueMapName:    "BrightnessByCell" 
  BrightnessFile:         "PhotonTransport/ndBrightnessFromCosmics.root" 
  ApplyTweak:             false
  TweakFile:              ""          #A data driven correction of the attenuation profile in each view
 }

...

birksmodB_photrans.tb.XViewFactor: 0.129
birksmodB_photrans.tb.YViewFactor: 0.109

...

birksmodC_photrans.tb.XViewFactor: 0.125
birksmodC_photrans.tb.YViewFactor: 0.105

ReadoutSim

Base values copied from ND. FEB version-dependent values copied from appropriate detector (v4:FD, v5:ND).
ReadoutSim is run twice (once for each FEB version) and then a merging module is run to combine the RawDigits from each list dependent on location in detector.

  #TestBeam - These values still need tuning for TestBeam (copied from ND).
  tb:
  {
    # TDC and ADC scales
    Clocktick:            62.5      # ns, 1/16 MHz
    NumClockticksInSpill: 8800      # total length of simulated spill window
    NumClockticksPerDigitization: 2 # How many ticks between each ADC
    ADCMaxE:              170500    # ADCMaxE/(gain*(4096-1)) is the PE/count conversion factor.

    # ASIC parameters
    UseLegacyShaper:              false
    ASICBaselineInADCCounts:      250 # Baseline output level of ASIC given no input, in ADC counts.
    ASICRiseLegacy:               136    # ns Rise time for the legacy pulse shaper
    ASICFallLegacy:               4500   # ns Fall time for the legacy pulse shaper
    ASICRiseTime:                 107    # ns updated 9/15 to reflect rise-time seen in data
    ASICFallInt:                  6728   # ns these parameters are not measured at the ND yet
    ASICFallSlope:                0.9    # ns
    ASICPreAmpTime:               119278 # ns    
    ASICMaxStep:                  125    # ns

    #The baseline distribution derived from DSO scans
    VaryBaseline:                 true
    BaselineMean:                 593.7
    BaselineSigma:                77.27

    # FPGA parameters
    FPGAAlgorithm: "DualCorrelatedSampling" #DualCorrelatedSampling, MatchedFiltering or DumpASICOutput

    # DCS parameters
    FPGA_DCS_ThresholdADC:       53.5
    FPGA_DCS_LookbackSamples:    3      # How many samples back to do bkg subraction
    FPGA_DCS_RetriggerThreshold: 0.5    # How far must fall before can retrigger
    FPGA_DCS_NanosliceVersion:   3      # Zero for DCS readout, 2 or 3 for multipoint readout (fine timing)

    # MatchedFiltering parameters
    FPGA_MatchedFiltering_BaselineTime:        -500 # ns
    FPGA_MatchedFiltering_EndTime:             2500 # ns
    FPGA_MatchedFiltering_ThresholdMatchValue: 18.7 # tuned for ~12.5 PE
    ForceGain:          0  #0 uses RunHistory to select the gain
                                  #An integer value selects the corresponding gain parameter set
    Gain100: 
    {
      Gain:                    100
      LeakageCurrent:          0.0968
      VoltageNoiseDensity:     2.06
      UseNewEmptyCellNoise:    true
      EmptyCellNoiseFile:      "ReadoutSim/emptycellnoise_nd_v3.root" 
      GainFile:                "ReadoutSim/nd_gainDist.root" 
    }

    ScaleEmptyCellNoiseRate: 1.0 # Arbitrary factor to make slicer behave
    UseRandomGains:          true
    GeneratePhysicsCellNoise: true   

    UseNewExcessNoise:           true  #model excess noise based on APD theory
    APDExcessNoiseFigure:        0.2   #raise gain to this power to get the variance of the APD's output in units of the shot noise variance
    DetectorCapacitance:         10     #pF, see docdb-4401
    NumNormSamples:              100000 #noise samples to use to determine on the fly normalization

    UseDBThresholds:         false
    UseRandomThresholds:     true
    ThresholdFile:           "ReadoutSim/nd_thresholdDist.root" 

    VaryNoiseByThreshold:    true
    ThresholdSigma:          5.0

    # Read: docdbs 7992, 12802, 12917, 12918, 12924, 12937
    Sag:                     true
    SagFrac:                 0.0186 # docdb 7992
    FEBFlashThreshold:       5000 # simulate sag on all channels in an FEB if any channel has a deposit greater than this in ADC units 
  }

...

tbv4_rsim:                                 @local::standard_rsim
tbv4_rsim.tb.NumClockticksPerDigitization: 8
tbv4_rsim.tb.ADCMaxE:                      180700
tbv4_rsim.tb.ASICRiseTime:                 420
tbv4_rsim.tb.ASICFallInt:                  10373
tbv4_rsim.tb.ASICFallSlope:                2.4
tbv4_rsim.tb.ASICPreAmpTime:               112557
tbv4_rsim.tb.ASICMaxStep:                  500

tbv4_rsim.tb.BaselineMean:                 411.5
tbv4_rsim.tb.BaselineSigma:                88.40
tbv4_rsim.tb.FPGA_DCS_ThresholdADC:        24.5
tbv4_rsim.tb.FPGA_MatchedFiltering_BaslineTime: -1500
tbv4_rsim.tb.FPGA_MatchedFiltering_EndTime:     10000

tbv5_rsim:                                 @local::standard_rsim
tbv5_rsim.tb.NumClockticksPerDigitization: 2
tbv5_rsim.tb.ADCMaxE:                      170500
tbv5_rsim.tb.ASICRiseTime:                 107
tbv5_rsim.tb.ASICFallInt:                  6728
tbv5_rsim.tb.ASICFallSlope:                0.9
tbv5_rsim.tb.ASICPreAmpTime:               119278
tbv5_rsim.tb.ASICMaxStep:                  125

tbv5_rsim.tb.BaselineMean:                 593.7
tbv5_rsim.tb.BaselineSigma:                77.27
tbv5_rsim.tb.FPGA_DCS_ThresholdADC:        53.5
tbv5_rsim.tb.FPGA_MatchedFiltering_BaslineTime: -500
tbv5_rsim.tb.FPGA_MatchedFiltering_EndTime:     2500

Your job fcl will need to include:

physics.producers.daqv4.tb.ForceGain: 100
physics.producers.daqv5.tb.ForceGain: 100

MergeTBDaqCollections (in NovaSimMixer)

These values should not need changing - just adding here for completeness.

standard_tbdaqmerge:
{
  module_type:                 "MergeTBDaqCollections" 
  FirstDaqCollection:          "daqv4" 
  SecondDaqCollection:         "daqv5" 
  InstanceLabel:               "" 
}

Calibrator

Uses default values. FEB-dependent parameters are not tuned at the fcl level for Calibrator.
For now, to run Calibrator, set all database-dependent fcl parameters to false:

  UseAttenEpochs:  false
  UseTimingEpochs: false 
  UseAbsEpochs:    false
  UseDriftEpochs:  false

...

  UseTimingOffsets: false

Slicer(4D)

Values copied from FD (at Michael's suggestion) since the electronics are mostly FEBv4 (i.e. same timing resolution as FD).

  # Paramters for TestBeam - These values still need tuning for TestBeam (copied from FD).
  tb:
  {
    Epsilon:            2.0        # minimum causal separation value squared for neighbors
    MinPts:             4          # minimum number of causally related points within Epsilon to be a core point in a cluster
    UseLowPEPen:        false      # add penalty term for low PE
    PEPen:              0.0        # PE value for which the low PE penalty will be 1
    DistPen:            100.0       # distance in cm for which the distance penalty will be 1 - roughly one strong interaction length
    OppViewPlanePen:    4.0        # allowed plane gap for hits in opposite views for which the distance penalty will be 1 - this number need not be an integer
    MinHitsPerView:     3          # minimum number of hits per view to make a cluster
  }

TDSlicer

Values copied from ND (at Junting's suggestion).

TDSlicer.fcl:

   tb:
   {
      CalcDT2D:      false      # calculate time differences just based on number of planes ( false) or 2D metric of planes and slices (true)
      TimeScale:     16         # scaling factor for timing separation - value taken from ND, not tuned for TB
      CellScale:     16         # scaling factor for cell separation
      PlaneScale:    12         # scaling factor for plane separation
      MinDens:       3          # threshold for local timing density - value taken from ND, not tuned for TB
      MinIsol:       8          # threshold for minimun timing separation to a higher threshold timing density hit - value taken from ND, not tuned for TB
      TimeThreshold: 10         # threshold for attaching hits to timing centroids
      MinPrimDist:   5          # threshold for cutting the minimun spanning tree - value taken from ND, not tuned for TB
      MinCell:       2          # minimum cell hit count in X or Y view - value taken from ND, not tuned for TB
      MaxEventHits:  100000     # Don't slice Events with more hits. -1 to disable
   }

SliceMergeViews.fcl:

   # Values copied from ND. Needs tuning for TB.
   tb:
   {
      MinCell:   2              # minimum number of hits in each view
      ZScale:    200            # scaling factor for slice start/end difference in Z between X and Y views
      TScale:    6              # scaling factor for slice timing difference between X and Y views
      Tolerance: 6              # threshold for merging
   }

CosmicVeto (in Preselection)

Values copied from NDOS.

  # Parameters for Test Beam (copied from ndos - still need tuning)
  tb:
  {
    DoTrackAngleCut: false  # Cut on the longest Track and its angle wrt beam
    DoNCellLowCut:   false  # Cut on low number of cells in slice
    DoNCellHighCut:  false  # Cut on high number of cells in slice
    DoContainment:   false
    DoSlicePlanesCut:false  # Apply cut on the number of planes the slice passes through    
    UseBetterCut:    false
    DoOutsideCut:    false
    DoMinPCut:       false
    NCellLow:        0      # Number of cells (low; cut will reject <= this value)
    NCellHigh:       0      # Number of cells (high; cut will reject > this value)
    FwdCut:          0      # Projected distance from track to wall, forward from track end
    BakCut:          0      # Projected distance from track to wall, backward from track start point
    MinPZ:           0      # Minimum slice coordinate in Z (cm)
    Ratio:           -1   # Ratio of track cellhits to slice cellhits
    AngVarCutValue:  0.2
    KeepNuMIInTime:  false  # Don't apply veto to slices in the NuMI time window?
  }

KalmanTrack (in TrackFit)

Parameters defined in KalmanGeoHelper.cxx (some basic tuning done by Andrew S., otherwise copied from ND):

    // not sure how the effpars are defined so for test beam just use nd setup
    else if(tb){
      fclipperLength = 1.5;
      fwlow = -130;
      fwhigh = 130;
      flengthmax = 6.0;
      effpar0 = TF1("par0","pol4",fwlow,fwhigh);
      effpar1 = TF1("par1","pol4",fwlow,fwhigh);
      effpar2 = TF1("par2","pol5",fwlow,fwhigh);
      effpar3 = TF1("par3","pol4",fwlow,fwhigh);

      // low threshold tuning this produces a dist with relatively flat efficiencies as a fn of W
      effpar0.SetParameters(0.139861,   -5.05093E-5,  2.66785E-7, -3.65295E-10, -1.46979E-11);
      effpar1.SetParameters(0.525903,    2.00583E-4, -4.07681E-7,  5.28495E-10,  2.01945E-11);
      effpar2.SetParameters(0.0239177,  -6.04344E-5, -1.08969E-7, -3.69116E-10,  2.01116E-11, 5.79678E-14);
      effpar3.SetParameters(-1.03056E-3, 1.7984E-5,  -3.04568E-7, -7.85076E-10,  3.55217E-12);
    }