2 import matplotlib.pyplot
as plt
4 from scipy.fftpack
import fft, ifft
5 from scipy
import signal
7 from ROOT
import TCanvas, TGraph, TFile
11 import libPyROOT
as _backend
12 from array
import array
18 def EvalGamComp(tin, ttrg):
22 FastTau = 851.28 * (0.88348588)
23 SlowTau = 5802.0 * (0.88348588)
24 val = Ratio * ((1. / FastTau) * np.exp(-(tin - ttrg) / FastTau)) + \
25 (1 - Ratio) * ((1. / SlowTau) * np.exp(-(tin - ttrg) / SlowTau))
29 def EvalHadronComp(tin, ttrg):
30 HadronTau = 630. * (0.88348588)
33 val = ((1. / HadronTau) * np.exp(-(tin - ttrg) / HadronTau))
37 def EvalAnyComp(tin, ttrg, TauIn):
41 val = ((1. / TauIn) * np.exp(-(tin - ttrg) / TauIn))
45 def CalcShaperOutput(muonShaper, muonInitial, inputPreShaper, ITER):
46 impulse = ((ifft((fft(muonShaper) / fft(muonInitial)))))
47 outputShaper = np.real(ifft(fft(impulse) * fft(inputPreShaper)))
48 base = outputShaper[ITER]
50 while i < len(outputShaper):
51 outputShaper[i] -= base
54 print(outputShaper.max())
58 def GetShaperOutput(ratio, flg, shaperMuonFunc):
64 PMT_trigger_time = 1000. * to_ns
68 ShaperDSP_output_muon_array = []
69 PMT_output_muon_array = []
72 for i
in range(0, Ns):
76 ShaperDSP_output_muon_array.append(shaperMuonFunc[i])
77 PMT_output_muon_array.append(EvalGamComp(t, PMT_trigger_time))
79 PMT_output_array.append((1 - ratio) * EvalGamComp(t, PMT_trigger_time) + ratio * (EvalHadronComp(t, PMT_trigger_time)))
81 PMT_output_array.append((2 - ratio) * EvalGamComp(t, PMT_trigger_time) +
82 (ratio - 1) * (EvalAnyComp(t, PMT_trigger_time, 10)))
85 return Time, PMT_output_array
87 return Time, PMT_output_muon_array
89 return Time, ShaperDSP_output_muon_array
91 ShaperDSP_output_array = []
93 ShaperDSP_output_array = CalcShaperOutput(ShaperDSP_output_muon_array, PMT_output_muon_array, PMT_output_array, 0)
95 ShaperDSP_output_array = CalcShaperOutput(ShaperDSP_output_muon_array, PMT_output_muon_array, PMT_output_array, 30)
99 Time_us.append(Time[j] / (1000.))
101 return Time_us, ShaperDSP_output_array
105 if(OutputDirectory ==
""):
106 print(
"Error set ouput directory")
109 Low = int(sys.argv[1])
110 High = int(sys.argv[2])
112 f1 = ROOT.TFile(OutputDirectory +
"PhotonShapes_Low" + str(Low) +
"_High" + str(High) +
".root",
"update")
115 entries = mt.GetEntries()
120 outFile = TFile(OutputDirectory +
"HadronShapes_Low" + str(Low) +
"_High" + str(High) +
".root",
"RECREATE")
121 outTree = ROOT.TTree(
"HadronTree",
"")
122 TimeAll_A = array(
'd', 1000 * [0.])
123 ValuePhoton_A = array(
'd', 1000 * [0.])
124 ValueHadron_A = array(
'd', 1000 * [0.])
125 ValueDiode_A = array(
'd', 1000 * [0.])
126 outTree.Branch(
"TimeAll_A", TimeAll_A,
'TimeAll_A[1000]/D')
127 outTree.Branch(
"ValuePhoton_A", ValuePhoton_A,
'ValuePhoton_A[1000]/D')
128 outTree.Branch(
"ValueHadron_A", ValueHadron_A,
'ValueHadron_A[1000]/D')
129 outTree.Branch(
"ValueDiode_A", ValueDiode_A,
'ValueDiode_A[1000]/D')
132 for i
in range(entries):
134 if(mt.PhotonArray[1] < -100):
135 for j
in range(1000):
136 ValuePhoton_A[j] = -999
138 ValueHadron_A[j] = -999
139 ValueDiode_A[j] = -999
142 Time3, ValuesHadron_A = GetShaperOutput(1, flag, mt.PhotonArray)
143 Time4, ValuesDiode_A = GetShaperOutput(2, flag, mt.PhotonArray)
144 Time6, ValuesPhoton_A = GetShaperOutput(0, flag, mt.PhotonArray)
147 for j
in range(1000):
149 ValuePhoton_A[j] = mt.PhotonArray[j * factor]
151 ValuePhoton_A[j] = ValuesPhoton_A[j * factor]
152 TimeAll_A[j] = Time3[j * factor]
153 ValueHadron_A[j] = ValuesHadron_A[j * factor]
154 ValueDiode_A[j] = ValuesDiode_A[j * factor]