112 std::vector<TriggerPrimitive> trackHits;
113 std::vector<TriggerPrimitive> finalHits;
117 unsigned int channel = 0;
118 unsigned int next_channel = 0;
119 unsigned int next = 0;
120 unsigned int tol_count = 0;
123 std::vector<TriggerPrimitive> hitList;
125 hitList.push_back(tp);
128 { return a.channel < b.channel; });
136 for (
int i = 0; i < hitList.size(); ++i) {
138 next = (i + 1) % hitList.size();
139 channel = hitList.at(i).channel;
140 next_channel = hitList.at(next).channel;
142 if (trackHits.size() == 0 ){ trackHits.push_back(hitList.at(i)); }
145 if (next_channel == 0) { next_channel = channel - 1; }
148 if (next_channel == channel) {
149 trackHits.push_back(hitList.at(next));
153 else if (next_channel == channel + 1){
154 trackHits.push_back(hitList.at(next));
159 else if (((next_channel == channel + 2) || (next_channel == channel + 3) ||
160 (next_channel == channel + 4) || (next_channel == channel + 5))
162 trackHits.push_back(hitList.at(next));
164 for (
int i = 0 ; i < next_channel-channel ; ++i){ ++tol_count; }
173 for (
auto h : trackHits){
174 finalHits.push_back(h);
196 std::vector<float> adc_means_list;
197 uint16_t convolve_value = 6;
200 for (uint16_t i = 0; i < trackHits.size(); ++i){
205 for (uint16_t j = i; j < i+convolve_value; ++j){
206 int hit = (j) % trackHits.size();
207 adc_sum += trackHits.at(hit).adc_integral;
210 adc_mean = adc_sum / convolve_value;
211 adc_means_list.push_back(adc_mean);
216 float ped = std::accumulate(adc_means_list.begin(), adc_means_list.end(), 0.0) / adc_means_list.size();
218 std::vector<float> charge_dumps;
221 for (
auto a : adc_means_list){
225 else if( a < ped && charge !=0 ){
226 charge_dumps.push_back(charge);
232 float max_charge = *max_element(charge_dumps.begin(), charge_dumps.end());
233 if(max_charge == charge_dumps.front() || max_charge == charge_dumps.back()){ bragg=
true; }
242 std::vector<float> runningGradient;
243 std::vector<float> runningMeanGradient;
252 for (
int i=0 ; i < finalHits.size()-2; i++){
255 if (finalHits.at(i+2).channel == finalHits.at(i).channel || (finalHits.at(i+2).time_start == finalHits.at(i).time_start) ) {
continue; }
260 int diff = finalHits.at(i+2).time_start - finalHits.at(i).time_start;
261 if((std::abs(diff) > 1000) || ((std::abs(
channel_diff_t(finalHits.at(i+2).channel) -
channel_diff_t(finalHits.at(i).channel)) > 6))) {
continue; }
265 float dz = (finalHits.at(i+2).channel - finalHits.at(i).channel)*4.67;
266 long long int dt = finalHits.at(i+2).time_start - finalHits.at(i).time_start;
270 runningGradient.push_back(g);
276 if ( runningGradient.size() > 10 ){
279 for(
int g=0 ; g < runningGradient.size()-1 ; g++){
280 float gsum = runningGradient.at(g) + runningGradient.at(g+1);
281 runningMeanGradient.push_back(gsum/2);
286 if(runningMeanGradient.size() > 10 ){
288 float mean = (std::abs(std::accumulate(runningMeanGradient.begin(), runningMeanGradient.end(), 0.0)))/(runningMeanGradient.size());
291 if((std::abs(runningMeanGradient.front()) + mean > 2.5*mean) || ((std::abs(runningMeanGradient.back() + mean)) > 2.5*mean)){ kinks=
true; }
316 std::ofstream outfile;
317 outfile.open(
"window_record_tam.csv", std::ios_base::app);
320 outfile << window.time_start <<
",";
321 outfile << window.inputs.back().time_start <<
",";
322 outfile << window.inputs.back().time_start - window.time_start <<
",";
323 outfile << window.adc_integral <<
",";
324 outfile << window.n_channels_hit() <<
",";
325 outfile << window.inputs.size() <<
",";
326 outfile << window.inputs.back().channel <<
",";
327 outfile << window.inputs.front().channel <<
",";