2 #include "Parameters.h"
12 using std::cout;
using std::cerr;
using std::endl;
17 if(last < first || last >=
fData.size() || first < 0){
18 cerr <<
"TOctalFADCIsland::GetMax() : Error! arguments out of range." << endl;
21 return *(std::max_element(
fData.begin() + first,
fData.begin() + last + 1));
26 if(last < first || last >=
fData.size() || first < 0)
28 cout <<
"first = " << first <<
" last : " << last <<
" size : " <<
fData.size() << endl;
29 cerr <<
"TOctalFADCIsland::GetMaxBin() : Error! arguments out of range." << endl;
33 return std::max_element(
fData.begin()+first,
fData.begin()+last+1)
41 if(last < first || last >=
fData.size() || first < 0 || nAv < 0){
42 cerr <<
"TOctalFADCIsland::GetAverageMax() : Error! arguments out of range." << endl;
46 int sum = *(std::max_element(
fData.begin()+first,
fData.begin()+last+1));
50 for(
int i = 1;
i <= nAv;
i++)
52 ind = maxbin +
static_cast<int>((
i/2.+ 0.5)*pow(-1,
i));
53 if(ind > first && ind < last){sum = sum +
fData[ind];}
57 return static_cast<double>(sum)/(nAv+1.-skipped);
64 if(last < first || last >=
fData.size() || first < 0){
65 cerr <<
"TOctalFADCIsland::GetMaxBinBlockTime() : Error! arguments out of range." << endl;
72 if(last < first || last >= fData.size() || first < 0){
73 cerr <<
"TOctalFADCIsland::GetCFBlockTime() : Error! arguments out of range."
76 return GetCFBin(first,last)+
GetTime();
81 if(last < first || last >= fData.size() || first < 0){
82 cerr <<
"TOctalFADCIsland::GetCFBlockTime() : Error! arguments out of range." << endl;
86 int max = GetMax(first,last)-fData[first];
87 int maxbin = GetMaxBin(first,last);
88 double halfmax = max/2.;
89 int constantFraction = first;
92 while( value < halfmax && constantFraction < maxbin)
94 value =
static_cast<double>(fData[constantFraction]);
98 return constantFraction;
103 if(last < first ){
return -1.;}
104 if(first<0){first=0;}
105 if(last >=
fData.size()){last =
fData.size();}
110 for(
int i = first;
i <=
last;
i++)
116 return static_cast<double>(sum)/N;
128 if(last < first ){
return -1.;}
129 if(first<0){first=0;}
130 if(last >=
fData.size()){last =
fData.size();}
134 for(
int i = first;
i <=
last;
i++)
139 return static_cast<double>(sum);
147 int secondSample = 1;
148 int oneButLast =
fData.size() - 1;
153 if(
fData.size()*clockPeriod < static_cast<double>(shapTime) && level >= 1){
SetPulseQuality(1);
return false;}
159 else if( ( static_cast<double>(maxbin) <
fData.size()/12. ||
static_cast<double>(maxbin) > 11*
fData.size()/12. ) && level >=2) {
SetPulseQuality(2);
return false;}
172 int secondSample = 1;
173 int oneButLast =
fData.size() - 1;
175 double max =
static_cast<double>(
GetMax());
176 double leftAv =
GetAverage(maxbin-40,maxbin-30);
177 double rightAv =
GetAverage(maxbin+30,maxbin+40);
179 double pedestal =
static_cast<double>(
ped);
186 if((runnr >= 51683) &&(runnr <= 51984))
188 if(channel == 1){ampCut_a = 2500; avCut_a = 0.04; ampCut_b = 2700; avCut_b = 0.75;}
189 if(channel == 2){ampCut_a = 1380; avCut_a = 0.032; ampCut_b = 1385; avCut_b = 0.975;}
191 if((runnr >= 51985) &&(runnr <= 52280))
193 if(channel == 1){ampCut_a = 2500; avCut_a = 0.04; ampCut_b = 2500; avCut_b = 0.8;}
194 if(channel == 2){ampCut_a = 1500; avCut_a = 0.022; ampCut_b = 1510; avCut_b = 0.935;}
198 if(
fData.size()*clockPeriod < static_cast<double>(shapTime) && level >= 1){
SetPulseQuality(1);
return false;}
204 else if( ( static_cast<double>(maxbin) <
fData.size()/12. ||
static_cast<double>(maxbin) > 11*
fData.size()/12. ) && level >=2){
SetPulseQuality(2);
return false;}
209 else if( level >=4 && ( fabs((leftAv - max)/(max - pedestal)) < avCut_a && max > ampCut_a) ){
SetPulseQuality(4);
return false;}
210 else if( level >=4 && ( fabs((rightAv - max)/(max - pedestal)) < avCut_a && max > ampCut_a) ){
SetPulseQuality(4);
return false;}
213 else if( level >=5 && ( totalAv/max > avCut_b && max > ampCut_b ) ) {
SetPulseQuality(5);
return false;}
226 if(
GetMaxBin() - left < 1) {
return 0; }
227 if(
GetMaxBin() + right > size -1) {
return 0; }
229 TH1I* hIsland =
new TH1I(
"hIsland",
"The OctalFADCIsland as a Histogram instead of a vector",size,0,size);
230 for(
int i = 0;
i<
size;
i++) { hIsland->SetBinContent(
i+1,
fData[
i]);}
233 myG->SetParLimits(1, left+1., right-1.);
234 myG->SetParLimits(2, shapTime/(4.*clockPeriod), (shapTime*4.)/clockPeriod);
235 myG->FixParameter(3, pedestal*1.);
238 hIsland->Fit(
"myG",
"RQ");
240 double chiSqr = myG->GetChisquare();
241 double maxbin = myG->GetParameter(1);
242 double max = myG->GetMaximum();
243 int NDF = myG->GetNDF();
254 if(chiSqr/NDF > 5.){
return 0; }