Diana Software
QTriggerTTL.cc
Go to the documentation of this file.
1 #include "QTriggerTTL.hh"
2 #include "QReader.hh"
3 #include <vector>
4 
5 ClassImp(Diana::QTriggerTTL);
6 using std::cout;
7 using std::endl;
8 
10 
12  if(reader==0){
13  cout<<"NO READER PASSED TO TRIGGER"<<endl;
14  exit(-1);
15  }
16 
17  SetCFGParameters(reader->GetDouble(("TTLThreshold"+triggerLabel).c_str(),600.),reader->GetBool(("TTLUseDiff"+triggerLabel).c_str(),true));
18 }
19 
20 void QTriggerTTL::TriggerStream(const vector<double>& stream){
21  //if parameters not read from cfg
22  if (!read_parameters){
24  }
25  //empty triggers
26  triggers.clear();
27  triggerHeights.clear();
28 
29  //check sampling frequency and windowsize
30  if(samplingFrequency ==0 or windowsize==0)cout<<"Sampling frequecy "<< samplingFrequency<<"\tWindow Size = "<<windowsize<<endl;
31 
32  //start triggering
33  size_t first_trig=stream.size()+1;
34  size_t prev_trig=first_trig;
35  double height =0;
36  int sample;
37  filteredStream.resize(stream.size());
38  /*
39  double mean = 0;
40  for(size_t i=0; i<stream.size();i++){
41  mean +=stream[i];
42  }
43  mean/=stream.size();
44  for(size_t i=0; i<stream.size();i++){
45  filteredStream[i] = stream[i]-mean;
46  }
47  */
48  if(fuseDiff==true){
49  for(size_t i=1; i<stream.size();i++){
50  filteredStream[i] = stream[i]-stream[i-1];
51  }
52 
54  }else{
55  filteredStream=stream;
56  }
57  for(size_t i=0; i<filteredStream.size();i++){
58  if(filteredStream[i]>=triggerLevel){//If sample triggers
59  if(first_trig==filteredStream.size()+1){//first trigger point in chunk
60  first_trig = i;
61  prev_trig = i;
62  }else if (i==prev_trig+1){//same peak
63  prev_trig=i;
64  }else if(i>prev_trig+1){//new peak
65  first_trig=i;
66  prev_trig=i;
67  }
68  }
69 
70  if((i==prev_trig+1 and filteredStream[i]<triggerLevel) or(i == filteredStream.size()-1 and i ==prev_trig)){//as soon as the peak ends or if the peak is ongoing and we are at the end of the filteredStream
71  if(triggers.size()==0){//if first trigger
72  for(size_t j =first_trig; j<=prev_trig;j++){
73  if(j==first_trig){
74  height=filteredStream[j];
75  sample=(int)j;
76  }else{
77  if(height<filteredStream[j]){
78  height=filteredStream[j];
79  sample=(int)j;
80  }
81  }
82  }
83  size_t min = first_trig -5;
84  if(min<0){
85  min = i;
86  }
87  if(min >= filteredStream.size()){
88  min = first_trig;
89  }
90  triggers.push_back(sample);
91  triggerHeights.push_back(stream[sample]-stream[min]);
92  }else{
93  if((double)((int)first_trig-triggers[triggers.size()-1]) >= (double)debounce){//don't trigger if trigger is too near the previous one
94  for(size_t j =first_trig; j<=prev_trig;j++){
95  if(j==first_trig){
96  height=filteredStream[j];
97  sample=(int)j;
98  }else{
99  if(height<filteredStream[j]){
100  height=filteredStream[j];
101  sample=(int)j;
102  }
103  }
104  }
105  triggers.push_back(sample);
106  size_t min = first_trig -5;
107  if(min<0){
108  min = i;
109  }
110  if(min >= stream.size()){
111  min = first_trig;
112  }
113  triggerHeights.push_back(stream[sample]-stream[min]);
114  }
115  }
116  }
117  }
118 }
119 
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
ClassImp(Diana::QTriggerTTL)
double min(const Diana::QVector &v)
Definition: QVector.cc:878
double GetDouble(const std::string &parname, double defVal, bool warnCfg=true) const
Get a double parameter from config file.
Definition: QBaseModule.cc:184
bool GetBool(const std::string &parname, bool defVal, bool warnCfg=true) const
Get a bool parameter from config file ( see GetDouble() )
Definition: QBaseModule.cc:256
void GetParametersFromCFG()
Definition: QTriggerTTL.cc:11
double triggerLevel
Definition: QTriggerTTL.hh:55
void TriggerStream(const vector< double > &stream)
Definition: QTriggerTTL.cc:20
bool read_parameters
Definition: QTriggerTTL.hh:56
void SetCFGParameters(double trigLevl=5., bool useDiff=true)
Definition: QTriggerTTL.hh:26
int windowsize
Definition: QTrigger.hh:104
vector< int > triggers
Definition: QTrigger.hh:98
double samplingFrequency
Definition: QTrigger.hh:102
string triggerLabel
Definition: QTrigger.hh:112
vector< double > triggerHeights
Definition: QTrigger.hh:99
vector< double > filteredStream
Definition: QTrigger.hh:100
int debounce
Definition: QTrigger.hh:106
const QBaseModule * reader
Definition: QTrigger.hh:110