# ==========================================================================
#############################################################################
# ==========================================================================
#                              General
# ==========================================================================
#############################################################################
# ==========================================================================

# -------------------------------------------------------------------------
# Use this if you want to setup the logging stream for the jobs
# (overwrites command line options)
# -------------------------------------------------------------------------
MLog.VerbosityLevel: 4
#MLog.DebugLevel:     1
#MLog.NoColors:       yes

# ==========================================================================
#############################################################################
# ==========================================================================
#                                   Ceres
# ==========================================================================
#############################################################################
# ==========================================================================

# -------------------------------------------------------------------------
# Use this if you want to write the MJStar output somewhere
# If you don't want it, it is written to the calibration output anyhow.
# -------------------------------------------------------------------------
#PathOut: .
#PathIn: .


# -------------------------------------------------------------------------
# Configure Eventloop
# -------------------------------------------------------------------------
#MaxEvents: 10000
#Overwrite: yes,no


# -------------------------------------------------------------------------
# Use this to setup binnings. For more details see: MBinning::ReadEnv
# -------------------------------------------------------------------------
# BinningEnergy.Raw:      100      1    100000  log
# BinningSize.Raw:        100      1  10000000  log
BinningImpact.Raw:       40   0       1000
# BinningHeight.Raw:       50      0        12
# BinningAz.Raw:          360   -360       360
# BinningZd.Raw:           70      0        70
# BinningViewCone.Raw:    155      0        31
BinningTrigPos.Raw:     300    -25       275
# BinningEvtWidth.Raw:    150      0        25
# BinningDist.Raw:        100      0       2.5
# BinningDistC.Raw:       100      0       2.5
# BinningThreshold.Raw:    35    0.9     90000  log
# BinningEnergyEst.Raw:   100    0.9     90000  log


# -------------------------------------------------------------------------
# Initialize random number generator (see MJob::InitRandomNumberGenerator)
# -------------------------------------------------------------------------
RandomNumberGenerator: TRandom3
#RandomNumberSeedValue: 0


# -------------------------------------------------------------------------
# Ceres general setup
# -------------------------------------------------------------------------

# Switch off the camera "electronics"
#Camera: Off

# Force the use of the "hardware" trigger for calibration data
#ForceTrigger: Yes


# -------------------------------------------------------------------------
# Some setup for the atmosphere. The default should be well suited.
# -------------------------------------------------------------------------
#MSimAtmosphere.FileAerosols: resmc/fact/atmopshere-aerosols.txt
#MSimAtmosphere.FileOzone:    resmc/fact/atmopshere-ozone.txt


# -------------------------------------------------------------------------
# Here you can control the poiting of the telescope. To switch on
# off-target observations set a value for the distance !=0 [deg].
# For details see MSimPointingPos
# -------------------------------------------------------------------------
#MSimPointingPos.OffTargetDistance: 0.4
#MSimPointingPos.OffTargetPhi: -1


# -------------------------------------------------------------------------
# Setup the reflector and camera geometry
# -------------------------------------------------------------------------
Reflector.Constructor: MReflector

# For the file definition see MReflector::ReadFile

Reflector.FileName: resmc/fact/fact-reflector.txt
# Units mm: ~0.02° 
#Reflector.SetSigmaPSF: 1.8
# Units mm: ~0.03°
#Reflector.SetSigmaPSF: 2.6
#Reflector.SetSigmaPSF: 1.66

# new Value from 7.12.2012:
# 0.95 of the reflected light was inside a circle with a radius of 2.25mm. 
# This corresponds to a SigmaPSF of 1.3 mm
# This value is based on a direct measurement of the mirrors. There
# is no way it can be wrong. Only the ray-tracing algorithm could be wrong.
Reflector.SetSigmaPSF: 1.3

# --- DWARF ---
# distance from mirror to camera [cm]
#focal_distance     489.73
# TRUE focal of the paraboloid (must correspond to that of the mirror positions defined below!)
#paraboloid_focal   488.87

#MGeomCam.Constructor:   MGeomCamDwarf(189.8,  9.5,  4.8887);
MGeomCam.Constructor:   MGeomCamFACT();

#MSimBundlePhotons.FileName: resmc/fact/dwarf-fact.txt

# Set the APD type (1: 30x30 <default>, 2: 60x60, 3:60x60(ct=15%))
MSimAPD.Type: 4
MSimExcessNoise.ExcessNoise: 0.12

# -------------------------------------------------------------------------
# Setup the absorption, conversion efficiency and angular acceptance
# -------------------------------------------------------------------------
MirrorReflectivity.FileName:           resmc/fact/MirrorReflectivity_Lustermann_FACT_bearbeitet.txt
PhotonDetectionEfficiency.FileName:    resmc/fact/fact-pde-1.0V.txt
ConesAngularAcceptance.FileName:       resmc/fact/fact-cones-angular-acceptance.txt
ConesTransmission.FileName:            resmc/fact/Transmittance_1439Cones_FACT_bearbeitet.txt

# A backward motivated overall PDE adjustment. Introduced by Fabian T. to produce the ICRC2015 Crab spectrum. Fabian, please comment a bit more on this. In case this is only about the additional shielding of our camera support structure, then we schould actually name it like this.

AdditionalPhotonAcceptance.Function.Name:  0.8
AdditionalPhotonAcceptance.Function.Npx:   100L
AdditionalPhotonAcceptance.Function.Xmin:  290L
AdditionalPhotonAcceptance.Function.Xmax:  900L

# -------------------------------------------------------------------------
# Setup what in MMCS would be called "additional spot size"
# -------------------------------------------------------------------------
#MSimPSF.Sigma: -1
#MSimReflector.DetectorMargin: 0

# -------------------------------------------------------------------------
# Setup the dark counts (FrequencyFixed) and the NSB noise per cm^2
# -------------------------------------------------------------------------
# Dark Counts per APD: ~4MHz
#MSimRandomPhotons.FrequencyFixed: 0.004
# NSB photon rate per cm^2 ~40MHz (folded with the cones' angular
# acceptance and the wavelength acceptance of the camera (window, apd, etc)
# 0.040 1/ns/cm^2 NSB-rate:
#MSimRandomPhotons.FrequencyNSB:   0.025

# FIXME: With a class describing the cones we could give NSB as
# per sr and cm^2

# -------------------------------------------------------------------------
# Setup the trigger
# -------------------------------------------------------------------------
# This line could be omitted but then the discriminator would be
# evaluated for all pixels not just for the pixels which are
# later "connected" in the trigger (used in the coincidence map)
# MSimTrigger.FileNameRouteAC:         resmc/fact/magic-trigger-1NN.txt

MSimTrigger.FileNameRouteAC: resmc/fact/fact-trigger-sum.txt

# DiscriminatorThreshold is 9*offset(-1850)+21*gain(22.375)=16180.125
MSimTrigger.DiscriminatorThreshold: -16180.125

# Every Pixel(!) should see the same signal independant of its size
MSimCalibrationSignal.NumPhotons: 24
MSimCalibrationSignal.NumEvents:  1000

IntendedPulsePos.Val: 25

#PulseShape.Function.Name: exp(-(x/2)^2/2)
#PulseShape.FileName: resmc/fact/dwarf-pulse.txt

# -------------------------------------------------------------------------
# Description how a pedestal/calibration signal is produced
# -------------------------------------------------------------------------

#MSimCalibrationSignal.NumEvents:  1000
#MSimCalibrationSignal.NumPhotons:    5
#MSimCalibrationSignal.TimeJitter:  1.0


# -------------------------------------------------------------------------
# Setup the FADC
# -------------------------------------------------------------------------

MRawRunHeader.SamplingFrequency: 2000
MRawRunHeader.NumSamples:         300
MRawRunHeader.NumBytesPerSample:    2
MRawRunHeader.FadcResolution:      12

MSimCamera.DefaultOffset: -1850.0
MSimCamera.DefaultNoise:    2.8125
MSimCamera.DefaultGain:    22.375

# Value for the fudgefactor in the calculation of the accoupling:
MSimCamera.ACFudgeFactor: 0.3367
MSimCamera.ACTimeConstant: 20

#MSimReadout.fConversionFactor: 1

# The number of sampling points is almost irrelevant because they
# are equidistant, i.e. calculated and no search is necessary.
# Nevertheless, you must make sure that there are enough points
# to sample the function accuratly enough.
# Attention: x in the function is given in slices, so if you change the sampling
# frequency you have to change also this function
PulseShape.Function.Name:  (1.626*(1-exp(-0.3803*0.5*x))*exp(-0.0649*0.5*x))
PulseShape.Function.Npx:   300
PulseShape.Function.Xmin:   0
PulseShape.Function.Xmax:   300

# -------------------------------------------------------------------------
# Setup an image cleaning on the pure gamma signal (without noise)
# -------------------------------------------------------------------------

#MImgCleanStd.CleanLevel1:   6.0
#MImgCleanStd.CleanLevel2:   6.0

# -------------------------------------------------------------------------
# This is a cut executed after the calculation of the image parameters
# -------------------------------------------------------------------------
Cut.Inverted: Yes

#Cut.Condition: MNewImagePar.fNumUsedPixels>3 && MHillas.fSize>6
Cut.Condition: MHillas.fSize>10
#&& MHillas.fSize>30
#MSimTrigger.SimulateElectronics: Off

# Does not trigger anyway
ContEmpty3.Condition: MPhotonEvent.GetNumPhotons<10

MFixTimeOffset.FileName: resmc/fact/pixel_delays_ALL_ZERO.csv
# MFixTimeOffset.FileName: resmc/fact/AllPhidoFiles_delays.csv

ResidualTimeSpread.Val: 0.0

# last line comment
