9 from scipy.fftpack
import fft, ifft
11 from ROOT
import TFile
13 from array
import array
19 def EvalGamComp(tin, ttrg):
23 FastTau = 851.28 * (0.88348588)
24 SlowTau = 5802.0 * (0.88348588)
25 val = Ratio * ((1. / FastTau) * np.exp(-(tin - ttrg) / FastTau)) + \
26 (1 - Ratio) * ((1. / SlowTau) * np.exp(-(tin - ttrg) / SlowTau))
30 def EvalHadronComp(tin, ttrg):
31 HadronTau = 630. * (0.88348588)
34 val = ((1. / HadronTau) * np.exp(-(tin - ttrg) / HadronTau))
38 def EvalAnyComp(tin, ttrg, TauIn):
42 val = ((1. / TauIn) * np.exp(-(tin - ttrg) / TauIn))
46 def CalcShaperOutput(muonShaper, muonInitial, inputPreShaper, ITER):
47 impulse = ((ifft((fft(muonShaper) / fft(muonInitial)))))
48 outputShaper = np.real(ifft(fft(impulse) * fft(inputPreShaper)))
49 base = outputShaper[ITER]
51 while i < len(outputShaper):
52 outputShaper[i] -= base
55 print(outputShaper.max())
59 def GetShaperOutput(ratio, flg, shaperMuonFunc):
65 PMT_trigger_time = 1000. * to_ns
69 ShaperDSP_output_muon_array = []
70 PMT_output_muon_array = []
73 for i
in range(0, Ns):
77 ShaperDSP_output_muon_array.append(shaperMuonFunc[i])
78 PMT_output_muon_array.append(EvalGamComp(t, PMT_trigger_time))
80 PMT_output_array.append((1 - ratio) * EvalGamComp(t, PMT_trigger_time) + ratio * (EvalHadronComp(t, PMT_trigger_time)))
82 PMT_output_array.append((2 - ratio) * EvalGamComp(t, PMT_trigger_time) +
83 (ratio - 1) * (EvalAnyComp(t, PMT_trigger_time, 10)))
86 return Time, PMT_output_array
88 return Time, PMT_output_muon_array
90 return Time, ShaperDSP_output_muon_array
92 ShaperDSP_output_array = []
94 ShaperDSP_output_array = CalcShaperOutput(ShaperDSP_output_muon_array, PMT_output_muon_array, PMT_output_array, 0)
96 ShaperDSP_output_array = CalcShaperOutput(ShaperDSP_output_muon_array, PMT_output_muon_array, PMT_output_array, 30)
100 Time_us.append(Time[j] / (1000.))
102 return Time_us, ShaperDSP_output_array
106 if(OutputDirectory ==
""):
107 print(
"Error set ouput directory")
110 Low = int(sys.argv[1])
111 High = int(sys.argv[2])
113 f1 = ROOT.TFile(OutputDirectory +
"PhotonShapes_Low" + str(Low) +
"_High" + str(High) +
".root",
"update")
116 entries = mt.GetEntries()
121 outFile = TFile(OutputDirectory +
"HadronShapes_Low" + str(Low) +
"_High" + str(High) +
".root",
"RECREATE")
122 outTree = ROOT.TTree(
"HadronTree",
"")
123 TimeAll_A = array(
'd', 1000 * [0.])
124 ValuePhoton_A = array(
'd', 1000 * [0.])
125 ValueHadron_A = array(
'd', 1000 * [0.])
126 ValueDiode_A = array(
'd', 1000 * [0.])
127 outTree.Branch(
"TimeAll_A", TimeAll_A,
'TimeAll_A[1000]/D')
128 outTree.Branch(
"ValuePhoton_A", ValuePhoton_A,
'ValuePhoton_A[1000]/D')
129 outTree.Branch(
"ValueHadron_A", ValueHadron_A,
'ValueHadron_A[1000]/D')
130 outTree.Branch(
"ValueDiode_A", ValueDiode_A,
'ValueDiode_A[1000]/D')
133 for i
in range(entries):
135 if(mt.PhotonArray[1] < -100):
136 for j
in range(1000):
137 ValuePhoton_A[j] = -999
139 ValueHadron_A[j] = -999
140 ValueDiode_A[j] = -999
143 Time3, ValuesHadron_A = GetShaperOutput(1, flag, mt.PhotonArray)
144 Time4, ValuesDiode_A = GetShaperOutput(2, flag, mt.PhotonArray)
145 Time6, ValuesPhoton_A = GetShaperOutput(0, flag, mt.PhotonArray)
148 for j
in range(1000):
150 ValuePhoton_A[j] = mt.PhotonArray[j * factor]
152 ValuePhoton_A[j] = ValuesPhoton_A[j * factor]
153 TimeAll_A[j] = Time3[j * factor]
154 ValueHadron_A[j] = ValuesHadron_A[j * factor]
155 ValueDiode_A[j] = ValuesDiode_A[j * factor]