using UTILS libprespecUTILS.so
using AGATA  libprespecAGATA.so
using LYCCA   libprespecLYCCA.so

import ../Daq/unpack_agata.config
import ../Daq/unpack_user.config

########################################################################
# AGAVA accepted trigger signal 
########################################################################
processor    Agata/Sc41Time           UTILS.MhTdcPreprocessor
	input[0]       <-   UserCrate.mhtdc[1]  # Scintillator S41-left
	reference      <-   UserCrate.mhtdc[7]  # AGAVA accepted trigger
	
	display input
	display reference   1,0.1,4096,200  |  reference_gate
	display diff        1,0.1,4096,200  |  diff_gate      in Sc41Time/diff
	display output      1,0.1,4096,200                    in Sc41Time/output
end

########################################################################
# Additional paticle-gamma time measurement taken between the 
# AGATA digitizer inspection lines and the scintillator Sc41
########################################################################
processor    Agata/ParticleGammaTime           UTILS.MhTdcPreprocessor
	input[0:31]       <-   AgataTimeCrate.mhtdc[0:31]
	ref_array[0]      <-   AgataTimeCrate.mhtdc[30]
	
	display ref_array    1,0.1,4096,200  |  reference_gate  
	#display diff         1,0.1,4096,200  |  diff_gate        in ParticleGammaTime/diff
	display diff         4000,-100000,500000  |  diff_gate        in ParticleGammaTime/diff
	display output       1,0.1,4096,200                      in ParticleGammaTime/output
end

########################################################################
# AGATA adapter to combine all relevant AGATA information and 
# deliver information that can be directly used by gamma tracking 
# processors
########################################################################
processor    Agata/Adapter       AGATA.AgataAdapter
	crystal[0:179]            <-   AgataPsa.psa[0:179]
	particle_gamma_time[04]   <-   Agata/ParticleGammaTime.output[0]
	particle_gamma_time[05]   <-   Agata/ParticleGammaTime.output[1]
	particle_gamma_time[18]   <-   Agata/ParticleGammaTime.output[2]
	particle_gamma_time[19]   <-   Agata/ParticleGammaTime.output[3]
	particle_gamma_time[20]   <-   Agata/ParticleGammaTime.output[4]
	particle_gamma_time[21]   <-   Agata/ParticleGammaTime.output[5]
	particle_gamma_time[22]   <-   Agata/ParticleGammaTime.output[6]
	particle_gamma_time[23]   <-   Agata/ParticleGammaTime.output[7]
	particle_gamma_time[15]   <-   Agata/ParticleGammaTime.output[10]
	particle_gamma_time[16]   <-   Agata/ParticleGammaTime.output[11]
	particle_gamma_time[17]   <-   Agata/ParticleGammaTime.output[12]
	particle_gamma_time[37]   <-   Agata/ParticleGammaTime.output[17]
	particle_gamma_time[13]   <-   Agata/ParticleGammaTime.output[18]
	particle_gamma_time[14]   <-   Agata/ParticleGammaTime.output[19]
	particle_gamma_time[39]   <-   Agata/ParticleGammaTime.output[20]
	particle_gamma_time[40]   <-   Agata/ParticleGammaTime.output[21]
	particle_gamma_time[41]   <-   Agata/ParticleGammaTime.output[22]
	particle_gamma_time[42]   <-   Agata/ParticleGammaTime.output[23]
	particle_gamma_time[43]   <-   Agata/ParticleGammaTime.output[24]
	particle_gamma_time[44]   <-   Agata/ParticleGammaTime.output[25]
	
	
	timestamp_agava_high24    <-   TrloCrate.agava[1]
	timestamp_agava_low24     <-   TrloCrate.agava[2]
	dt_sc41_agava_acc         <-   Agata/Sc41Time.output[0]
	
	display         time_alignment_energy | time_alignment_energy_gate
	display         psa_hit_e_all:psa_hit_ct_all                   512,0,512:128,0,1
	display         psa_hit_e_all                                  4096,0,2048
	display         psa_hit_spherical_x:psa_hit_spherical_y        256,-80,80:256,-80,80
	display         core_pgtime_low::aligned_particle_gamma_time   10024,0,20000:1024,0,4000
	
	display         core_energy_low::aligned_particle_gamma_time   1024,0,8192:512,-10,2048
	display         core_energy_high::core_pgtime_high             2048,0,8192:512,-10,2048
	display         core_energy_low::core_pgtime_low               10024,0,20000:1024,0,4000
	
	display         core_energy_high                4096,0,8192  in Adapter/Cores_high
	display         core_energy_low                 4096,0,32768 in Adapter/Cores_low
	display         core_energy_low::core_pgtime_low               10024,0,20000:1024,0,4000 in Adapter/Cores_low

	display        core_pgtime_low                               4096,0,32768 in Adapter/Cores_pg_low
	display        dt_sc41_agava_acc                              in Adapter/Cores_abs_low
	
	display         aligned_particle_gamma_time     1024,0,2048  in Adapter/AlignedTime   
	display         gated_particle_gamma_time       1024,0,2048  in Adapter/GatedTime
	
	rate      n_particle_gamma_time_valid:n_gammas    100,5000
	rate      n_particle_gamma_time_invalid:n_gammas  100,5000
	rate      n_agava_acc_valid:n_gammas              100,5000
	rate      n_agava_acc_invalid:n_gammas            100,5000
	rate      n_gammas:n_events                       100,5000
end

########################################################################
# Dead-time spectra
# Distance in time of two events to determine dead time of the DACQ
########################################################################
processor Agata/Adapter/TimeDifferenceBetweenEvents UTILS.Delay
	input <- Agata/Adapter.GTStimestamp_agava
	#display difference 2048,0,1000000000  in DeadTime
	display difference  
	#display difference                     in DeadTime
end

########################################################################
# Find out the lookup table of crystal-ID to MH-TDC channel
#  (that is mysteriously missing in all the LUT provided by DAQ)
########################################################################
#for $ch in [0:27]
#	for $id in [0:179] 
#		processor Agata/Lut_Finder_$ch_$id UTILS.DoubleArray
#			x[0] <- Agata/ParticleGammaTime.output[$ch]
#			y[0] <- Agata/Adapter.core_pgtime_low[$id]
#			display x:y in Lut_Finder_$ch
#		end
#	end
#end


########################################################################
# Find out the lookup table of crystal-ID to SIS3302 channel
#  (that is mysteriously missing in all the LUT provided by DAQ)
#########################################################################
#for $ch in [0:7]
#	for $id in [0:179] 
#		processor Agata/LutSIS_Finder_$ch_$id UTILS.DoubleArray
#			x[0] <- AgataSIS.agataSIS[$ch]
#			y[0] <- Agata/Adapter.core_energy_low[$id]
#			display x:y in LutSIS_Finder_$ch 500,0,500000:500,0,2000
#		end
#	end
#end


########################################################################
# create sum spectra for the low and high gain
########################################################################
for $gain in low high
	processor Agata/Adapter_Sum_$gain UTILS.DoubleArray
		for $id in [0:179]
			x[0] <- Agata/Adapter.core_energy_$gain[$id]
			y[0] <- Agata/Adapter.core_pgtime_$gain[$id]
		end
		display x    16384,0,8192                in Adapter
		display x:y   8192,0,8192:100,700,1100   in Adapter
	end
end
