489 TObjArray* aoms=
fEvt->GetDevices(
"IceAOM");
506 Int_t nrIterations=(Int_t)(7*
fSigmaA+0.5);
507 Int_t npeaks=0, ibin=0, lookforsteepestuntilbin=0, steep=0;
508 Float_t maxval=0, rise=0, rc=0, yyy=0;
509 Bool_t pulsegoingon=
false;
521 for (Int_t iom=0; iom<aoms->GetEntries(); iom++)
523 omx=(
IceAOM*)aoms->At(iom);
542 maxval=wf->GetMaximum();
544 if(wf->GetNbinsX() > 2*nrIterations+1)
553 for(ibin=2;ibin<diff.GetNbinsX();ibin++)
555 diff.SetBinContent(ibin,wf->GetBinContent(ibin)-wf->GetBinContent(ibin-1));
557 diff.SetBinContent(1,0);
565 for(Int_t ipeak=0; ipeak<npeaks; ipeak++)
574 lowend[ipeak]=upend[ipeak-1]+1;
575 baseline[ipeak]=
fBasefracA*htemp.GetBinContent(lowend[ipeak]);
581 upend[ipeak]=htemp.GetMinimumBin()-1;
586 upend[ipeak]=wf->GetNbinsX();
589 lookforsteepestuntilbin=wf->FindBin(spec.
GetPositionX()[index[ipeak]]);
592 htemp.SetAxisRange(wf->GetBinCenter(lowend[ipeak]),wf->GetBinCenter(lookforsteepestuntilbin));
593 steep=htemp.GetMaximumBin();
594 rise=htemp.GetBinContent(steep);
597 yyy=wf->GetBinContent(steep)-baseline[ipeak];
598 rc=rise/htemp.GetBinWidth(steep);
599 if(rc>0) leadingedge[ipeak]=wf->GetBinCenter(steep)-yyy/rc;
else leadingedge[ipeak]=0;
604 if(rc<0.1 && wf->GetBinContent(wf->FindBin(spec.
GetPositionX()[index[ipeak]])) == maxval)
610 else if(wf->GetBinLowEdge(lowend[ipeak]) - leadingedge[ipeak] > spec.
GetPositionX()[index[ipeak]] - wf->GetBinLowEdge(lowend[ipeak]))
613 if(ipeak>0) baseline[ipeak]=baseline[ipeak-1];
617 startcharge[ipeak]=wf->FindBin(leadingedge[ipeak]);
618 if(lowend[ipeak]>startcharge[ipeak]) startcharge[ipeak]=lowend[ipeak];
621 stopcharge[ipeak]=upend[ipeak];
622 for(ibin=wf->FindBin(spec.
GetPositionX()[index[ipeak]]); ibin<=upend[ipeak]; ibin++)
624 if(wf->GetBinContent(ibin)<0)
626 stopcharge[ipeak]=ibin-1;
632 tot[ipeak]=wf->GetBinLowEdge(stopcharge[ipeak]+1)-wf->GetBinLowEdge(startcharge[ipeak]);
636 for(ibin=startcharge[ipeak]; ibin<=stopcharge[ipeak]; ibin++)
638 charge[ipeak]+=wf->GetBinContent(ibin);
644 for(
int ipeak=npeaks-1; ipeak>=0; ipeak--)
648 if(status[ipeak]==1 && ipeak>0)
650 charge[ipeak-1]+=charge[ipeak];
652 tot[ipeak-1]+=tot[ipeak];
677 for(ibin=1; ibin<=wf->GetNbinsX(); ibin++)
685 leadingedge[npeaks]=wf->GetBinLowEdge(ibin);
686 charge[npeaks]=wf->GetBinContent(ibin);
691 charge[npeaks]+=wf->GetBinContent(ibin);
699 tot[npeaks]=wf->GetBinLowEdge(ibin)-leadingedge[npeaks];
726 delete[] startcharge;
729 delete[] leadingedge;
744 TObjArray* idoms=
fEvt->GetDevices(
"IceDOM");
770 Int_t nrIterations=(Int_t)(7*
fSigmaI+0.5);
771 Int_t npeaks=0, ibin=0, lookforsteepestuntilbin=0, steep=0;
772 Float_t maxval=0, base1=0, rise=0, rc=0, yyy=0;
773 Bool_t pulsegoingon=
false;
776 TString wfnamepattern;
777 Int_t patternmatch=0;
783 Float_t wfbinvalue=0;
786 Float_t basemedian=0;
787 Float_t basespread=0;
789 TString hitclass=
"none";
800 for (Int_t iom=0; iom<idoms->GetEntries(); iom++)
821 for (Int_t iwf=1; iwf<=nwf; iwf++)
825 wfname=wf->GetName();
829 for (Int_t ipat=0; ipat<npatterns; ipat++)
831 TObjString* sx=(TObjString*)
fUseNamesI->At(ipat);
833 wfnamepattern=sx->GetString();
834 if (wfname.Contains(wfnamepattern))
841 if (!patternmatch)
continue;
846 if (wfname.Contains(
"CAL-ATWD")) hitclass=
"CAL-ATWD";
847 if (wfname.Contains(
"CAL-FADC")) hitclass=
"CAL-FADC";
848 if (wfname.Contains(
"RAW-ATWD0")) hitclass=
"RAW-ATWD0";
849 if (wfname.Contains(
"RAW-ATWD1")) hitclass=
"RAW-ATWD1";
850 if (wfname.Contains(
"RAW-ATWD2")) hitclass=
"RAW-ATWD2";
851 if (wfname.Contains(
"RAW-ATWD3")) hitclass=
"RAW-ATWD3";
852 if (wfname.Contains(
"RAW-FADC")) hitclass=
"RAW-FADC";
853 if (wfname.Contains(
"STAMP"))
860 maxval=wf->GetMaximum();
862 cutlevel=base1+0.2*(maxval-base1);
866 if (hitclass.Contains(
"RAW") && (cutlevel-base1)<1.1) cutlevel=base1+1.1;
869 nbinswf=wf->GetNbinsX();
871 for (Int_t jbin=1; jbin<=nbinswf; jbin++)
873 wfbinvalue=wf->GetBinContent(jbin);
874 if (wfbinvalue<cutlevel) amplitudes.
Enter(wfbinvalue);
888 if (hitclass.Contains(
"CAL-ATWD") && cutlevel>1) cutlevel=1;
889 if (hitclass.Contains(
"RAW") && (cutlevel-basemedian)<1.1) cutlevel=basemedian+1.1;
892 slotname=
"BASELINE-WF";
899 if(nbinswf > 2*nrIterations+1)
902 if ((cutlevel-basemedian) && (maxval-basemedian))
904 npeaks=spec.
Search(wf,
fSigmaI,
"goff",fabs((cutlevel-basemedian)/(maxval-basemedian)));
915 for(ibin=2;ibin<diff.GetNbinsX();ibin++)
917 diff.SetBinContent(ibin,wf->GetBinContent(ibin)-wf->GetBinContent(ibin-1));
919 diff.SetBinContent(1,0);
921 baseline[0]=basemedian;
928 for(Int_t ipeak=0; ipeak<npeaks; ipeak++)
938 lowend[ipeak]=upend[ipeak-1]+1;
939 baseline[ipeak]=baseline[ipeak-1]+
fBasefracI*(htemp.GetBinContent(lowend[ipeak])-baseline[ipeak-1]);
940 if (htemp.GetBinContent(lowend[ipeak])<=basemedian) baseline[ipeak]=basemedian;
945 upend[ipeak]=htemp.GetMinimumBin()-1;
949 upend[ipeak]=wf->GetNbinsX();
953 lookforsteepestuntilbin=wf->FindBin(spec.
GetPositionX()[index[ipeak]]);
956 htemp.SetAxisRange(wf->GetBinCenter(lowend[ipeak]),wf->GetBinCenter(lookforsteepestuntilbin));
957 steep=htemp.GetMaximumBin();
958 rise=htemp.GetBinContent(steep);
961 yyy=wf->GetBinContent(steep)-baseline[ipeak];
962 rc=rise/htemp.GetBinWidth(steep);
965 leadingedge[ipeak]=wf->GetBinCenter(steep)-yyy/rc;
969 leadingedge[ipeak]=0;
975 if ((hitclass.Contains(
"RAW") || hitclass.Contains(
"STAMP")) &&
976 rc<1./wf->GetBinWidth(1) && wf->GetBinContent(wf->FindBin(spec.
GetPositionX()[index[ipeak]])) == maxval)
983 if (wf->GetBinLowEdge(lowend[ipeak])-leadingedge[ipeak]>spec.
GetPositionX()[index[ipeak]]-wf->GetBinLowEdge(lowend[ipeak]) &&
984 ipeak>0 && status[ipeak-1]!=5)
987 if(ipeak>0) baseline[ipeak]=baseline[ipeak-1];
993 if (upend[ipeak]-wf->FindBin(spec.
GetPositionX()[index[ipeak]])<0) status[ipeak]=5;
996 if(wf->GetBinContent(lookforsteepestuntilbin) < cutlevel) status[ipeak]=3;
999 startcharge[ipeak]=wf->FindBin(leadingedge[ipeak]);
1000 if(lowend[ipeak]>startcharge[ipeak]) startcharge[ipeak]=lowend[ipeak];
1003 stopcharge[ipeak]=upend[ipeak];
1004 for (ibin=wf->FindBin(spec.
GetPositionX()[index[ipeak]]); ibin<=upend[ipeak]; ibin++)
1006 if(wf->GetBinContent(ibin)<=baseline[ipeak])
1008 stopcharge[ipeak]=ibin-1;
1014 tot[ipeak]=wf->GetBinLowEdge(stopcharge[ipeak]+1)-wf->GetBinLowEdge(startcharge[ipeak]);
1018 for(ibin=startcharge[ipeak]; ibin<=stopcharge[ipeak]; ibin++)
1020 charge[ipeak]+=(wf->GetBinContent(ibin))-baseline[ipeak];
1026 for(
int ipeak=npeaks-1; ipeak>=0; ipeak--)
1029 if(status[ipeak]==1 && ipeak>0)
1031 charge[ipeak-1]+=charge[ipeak];
1033 tot[ipeak-1]+=tot[ipeak];
1038 if (status[ipeak-1]==5)
1040 charge[ipeak]+=charge[ipeak-1];
1042 tot[ipeak]+=tot[ipeak-1];
1044 leadingedge[ipeak]=leadingedge[ipeak-1];
1045 leadingedge[ipeak-1]=0;
1049 if(status[ipeak]==0 && charge[ipeak]>0)
1078 for(ibin=1; ibin<=wf->GetNbinsX(); ibin++)
1086 leadingedge[npeaks]=wf->GetBinLowEdge(ibin);
1087 charge[npeaks]=(wf->GetBinContent(ibin))-basemedian;
1092 charge[npeaks]+=(wf->GetBinContent(ibin))-basemedian;
1100 tot[npeaks]=wf->GetBinLowEdge(ibin)-leadingedge[npeaks];
1105 hit.
SetSignal(leadingedge[npeaks],
"LE");
1137 delete[] startcharge;
1138 delete[] stopcharge;
1140 delete[] leadingedge;