48 MuFilter* MuFilterDet =
dynamic_cast<MuFilter*
> (gROOT->GetListOfGlobals()->FindObject(
"MuFilter"));
53 Float_t timeResol = MuFilterDet->
GetConfParF(
"MuFilter/timeResol");
56 Float_t siPMcalibration=0;
57 Float_t siPMcalibrationS=0;
59 if (floor(detID/10000)==3) {
60 if (
nSides==2){attLength = MuFilterDet->
GetConfParF(
"MuFilter/DsAttenuationLength");}
61 else {attLength = MuFilterDet->
GetConfParF(
"MuFilter/DsTAttenuationLength");}
62 siPMcalibration = MuFilterDet->
GetConfParF(
"MuFilter/DsSiPMcalibration");
63 propspeed = MuFilterDet->
GetConfParF(
"MuFilter/DsPropSpeed");
66 if (floor(detID/10000)==1 &&
nSides==1){
68 attLength = 2*MuFilterDet->
GetConfParF(
"MuFilter/VTAttenuationLength");
70 else {attLength = MuFilterDet->
GetConfParF(
"MuFilter/VandUpAttenuationLength");}
71 siPMcalibration = MuFilterDet->
GetConfParF(
"MuFilter/VandUpSiPMcalibrationL");
72 siPMcalibrationS = MuFilterDet->
GetConfParF(
"MuFilter/VandUpSiPMcalibrationS");
73 propspeed = MuFilterDet->
GetConfParF(
"MuFilter/VandUpPropSpeed");
76 for (
unsigned int j=0; j<16; ++j){
80 LOG(DEBUG) <<
"detid "<<detID<<
" size "<<
nSiPMs<<
" side "<<
nSides;
83 Float_t signalLeft = 0;
84 Float_t signalRight = 0;
85 Float_t earliestToAL = 1E20;
86 Float_t earliestToAR = 1E20;
87 for(
auto p = std::begin(V); p!= std::end(V); ++p) {
89 Double_t signal = (*p)->GetEnergyLoss();
92 TVector3 vLeft,vRight;
93 TVector3 impact((*p)->GetX(),(*p)->GetY() ,(*p)->GetZ() );
95 Double_t distance_Left = (vLeft-impact).Mag();
96 Double_t distance_Right = (vRight-impact).Mag();
98 signalLeft+=signal/
nSides*TMath::Exp(-distance_Left/attLength);
99 signalRight+=signal/
nSides*TMath::Exp(-distance_Right/attLength);
102 Double_t ptime = (*p)->GetTime();
103 Double_t t_Left = ptime + distance_Left/propspeed;
104 Double_t t_Right = ptime + distance_Right/propspeed;
105 if ( t_Left <earliestToAL){earliestToAL = t_Left ;}
106 if ( t_Right <earliestToAR){earliestToAR = t_Right ;}
110 for (
unsigned int j=0; j<
nSiPMs; ++j){
111 if ( floor(detID/10000)==2 && (j==2 or j==5)){
113 times[j] = gRandom->Gaus(earliestToAL, timeResol);
116 times[j] = gRandom->Gaus(earliestToAL, timeResol);
120 times[j+
nSiPMs] = gRandom->Gaus(earliestToAR, timeResol);
124 for (Int_t i=0;i<16;i++){
fMasked[i]=kFALSE;}
125 LOG(DEBUG) <<
"signal created";
162 std::map<Int_t,Float_t> allSignals;
164 for (
unsigned int s=0; s<
nSides; ++s){
165 for (
unsigned int j=0; j<
nSiPMs; ++j){
166 unsigned int channel = j+s*
nSiPMs;
167 if (
signals[channel]<-900){
continue;}
168 if (
signals[channel]> 0 || !positive){
169 if (!
fMasked[channel] || !mask){
170 if (!
isShort(channel) || use_small_sipms){
171 if (use_calibration){
181 if (calibrationConstant > 0.){
182 allSignals[channel] = (
signals[channel]/calibrationConstant + constantOffset) / (1 + constantOffset);
186 allSignals[channel] =
signals[channel];
219 Float_t mean[] = {0,0};
220 Int_t count[] = {0,0};
222 for (
unsigned int s=0; s<
nSides; ++s){
223 for (
unsigned int j=0; j<
nSiPMs; ++j){
224 unsigned int channel = j+s*
nSiPMs;
225 if (
signals[channel]> 0 || !positive){
226 if (!
fMasked[channel] || !mask){
227 if (!
isShort(channel) || use_small_sipms){
228 mean[s] +=
times[channel];
235 if (count[0]>0 && count[1]>0) {
236 dT = mean[0]/count[0] - mean[1]/count[1];
243 Float_t first[] = {1E20,1E20};
245 for (
unsigned int s=0; s<
nSides; ++s){
246 for (
unsigned int j=0; j<
nSiPMs; ++j){
247 unsigned int channel = j+s*
nSiPMs;
248 if (
signals[channel]> 0 || !positive){
249 if (!
fMasked[channel] || !mask){
250 if (!
isShort(channel) || use_small_sipms){
251 if (
times[channel]<first[s]) {first[s] =
times[channel];}
257 if (first[0]<1E10 && first[1]<1E10) {
258 dT = first[0] - first[1];
267 Float_t mean[] = {0,0};
268 Int_t count[] = {0,0};
271 MuFilter* MuFilterDet =
dynamic_cast<MuFilter*
> (gROOT->GetListOfGlobals()->FindObject(
"MuFilter"));
273 dL = MuFilterDet->
GetConfParF(
"MuFilter/DownstreamBarX") / MuFilterDet->
GetConfParF(
"MuFilter/DsPropSpeed");}
275 dL = MuFilterDet->
GetConfParF(
"MuFilter/UpstreamBarX") / MuFilterDet->
GetConfParF(
"MuFilter/VandUpPropSpeed");}
277 dL = MuFilterDet->
GetConfParF(
"MuFilter/VetoBarX") / MuFilterDet->
GetConfParF(
"MuFilter/VandUpPropSpeed");}
279 for (
unsigned int s=0; s<
nSides; ++s){
280 for (
unsigned int j=0; j<
nSiPMs; ++j){
281 unsigned int channel = j+s*
nSiPMs;
282 if (
signals[channel]> 0 || !positive){
283 if (!
fMasked[channel] || !mask){
284 if (!
isShort(channel) || use_small_sipms){
285 mean[s] +=
times[channel];
292 if (count[0]>0 && count[1]>0) {
293 dT = (mean[0]/count[0] + mean[1]/count[1])/2.*ShipUnit::snd_TDC2ns - dL/2.;
304 Float_t dT =
GetDeltaT(mask,positive,use_small_sipms);
309 MuFilter* MuFilterDet =
dynamic_cast<MuFilter*
> (gROOT->GetListOfGlobals()->FindObject(
"MuFilter"));
310 Float_t bar_length = MuFilterDet->
GetConfParF(
"MuFilter/UpstreamBarX");
311 Float_t signal_speed = MuFilterDet->
GetConfParF(
"MuFilter/VandUpPropSpeed");
313 signal_speed = MuFilterDet->
GetConfParF(
"MuFilter/DsPropSpeed");
314 bar_length = MuFilterDet->
GetConfParF(
"MuFilter/DownstreamBarX");
317 bar_length = MuFilterDet->
GetConfParF(
"MuFilter/UpstreamBarX");
320 bar_length = MuFilterDet->
GetConfParF(
"MuFilter/VetoBarX");
322 double timeConversion = 1.;
323 if (!isMC) timeConversion = ShipUnit::snd_TDC2ns;
324 return 0.5*(bar_length + dT*timeConversion*signal_speed);