41 std::vector<std::vector<int> >
SumPulses(std::vector<std::vector<TPulseIsland*> > timeHeightMapsVector,
double time_difference);
79 for(std::map<std::string, std::string>::iterator mapIter = bank_to_detector_map.begin();
80 mapIter != bank_to_detector_map.end(); mapIter++) {
82 std::string bankname = mapIter->first;
85 if (detname.substr(0,4) ==
"SiL1" && detname.substr(7,1) ==
"S")
86 left_thin_banknames.push_back(bankname);
87 else if (detname.substr(0,4) ==
"SiR1" && detname.substr(7,1) ==
"S")
88 right_thin_banknames.push_back(bankname);
91 long max_adc_value = 13000;
94 std::string histname =
"hSiL1PulseShapes";
95 std::string histtitle =
"Plot of the combined pulse shapes in SiL1";
96 hSiL1PulseShapes =
new TH2D(histname.c_str(), histtitle.c_str(), 64,-0.5,63.5,max_adc_value+1,0,max_adc_value+1);
101 histname =
"hSiR1PulseShapes";
102 histtitle =
"Plot of the combined pulse shapes in SiR1";
103 hSiR1PulseShapes =
new TH2D(histname.c_str(), histtitle.c_str(), 64,-0.5,63.5,max_adc_value+1,0,max_adc_value+1);
108 histname =
"hSiL1PulseHeights";
109 histtitle =
"Plot of the combined pulse heights in SiL1";
110 hSiL1PulseHeights =
new TH1I(histname.c_str(), histtitle.c_str(), max_adc_value+1,0,max_adc_value+1);
115 histname =
"hSiR1PulseHeights";
116 histtitle =
"Plot of the combined pulse heights in SiR1";
117 hSiR1PulseHeights =
new TH1I(histname.c_str(), histtitle.c_str(), max_adc_value+1,0,max_adc_value+1);
139 int midas_event_number = pheader->serial_number;
143 typedef pair<string, vector<TPulseIsland*> > TStringPulseIslandPair;
144 typedef map<string, vector<TPulseIsland*> >::iterator map_iterator;
148 TStringPulseIslandMap& pulse_islands_map =
154 std::vector<std::vector<TPulseIsland*> > thinSiLeftPulses;
155 for (std::vector<std::string>::iterator bankNameIter = left_thin_banknames.begin();
156 bankNameIter != left_thin_banknames.end(); bankNameIter++) {
160 if (temp_vector.size() == 0)
continue;
162 thinSiLeftPulses.push_back(temp_vector);
164 std::vector<std::vector<int> > allPulses =
SumPulses(thinSiLeftPulses, 1000);
166 for (std::vector<std::vector<int> >::iterator allPulseIter = allPulses.begin(); allPulseIter != allPulses.end(); ++allPulseIter) {
169 int min_sample_value = 99999;
170 for (std::vector<int>::iterator sampleIter = (*allPulseIter).begin(); sampleIter != (*allPulseIter).end(); ++sampleIter) {
173 if (*sampleIter < min_sample_value)
174 min_sample_value = *sampleIter;
180 if (min_sample_value < 6000)
181 min_sample_value /= 2;
182 else if (min_sample_value < 9000)
183 min_sample_value /= 3;
184 else if (min_sample_value < 12000)
185 min_sample_value /= 4;
187 hSiL1PulseHeights->Fill( -1*(min_sample_value - ((thinSiLeftPulses[0])[0])->GetPedestal(10)) );
196 std::vector<std::vector<TPulseIsland*> > thinSiRightPulses;
197 for (std::vector<std::string>::iterator bankNameIter = right_thin_banknames.begin();
198 bankNameIter != right_thin_banknames.end(); bankNameIter++) {
202 if (temp_vector.size() == 0)
continue;
204 thinSiRightPulses.push_back(temp_vector);
206 allPulses =
SumPulses(thinSiRightPulses, 1000);
208 for (std::vector<std::vector<int> >::iterator allPulseIter = allPulses.begin(); allPulseIter != allPulses.end(); ++allPulseIter) {
211 int min_sample_value = 99999;
212 for (std::vector<int>::iterator sampleIter = (*allPulseIter).begin(); sampleIter != (*allPulseIter).end(); ++sampleIter) {
215 if (*sampleIter < min_sample_value)
216 min_sample_value = *sampleIter;
222 if (min_sample_value < 6000)
223 min_sample_value /= 2;
224 else if (min_sample_value < 9000)
225 min_sample_value /= 3;
226 else if (min_sample_value < 12000)
227 min_sample_value /= 4;
229 hSiR1PulseHeights->Fill( -1*(min_sample_value - ((thinSiRightPulses[0])[0])->GetPedestal(10)) );
238 std::vector<std::vector<int> >
SumPulses(std::vector<std::vector<TPulseIsland*> > pulses,
double time_difference) {
241 std::vector<std::vector<TPulseIsland*>::iterator > pulseIters;
242 std::vector<std::vector<TPulseIsland*>::iterator > backwardIters;
244 for (
int b = 0; b < pulses.size(); b++) {
245 pulseIters.push_back((pulses.at(b)).begin());
246 backwardIters.push_back((pulses.at(b)).end());
250 std::vector<std::vector<int> > output;
252 while ( pulseIters.size() > 0 ) {
259 double min_time = 99999999999.;
260 for (
int b = 0; b < pulseIters.size(); ++b){
261 double time = (*(pulseIters.at(b)))->GetPulseTime();
262 min_time = std::min(min_time , time);
269 std::vector<int> temp_output;
270 for (
int b = 0; b < pulseIters.size(); ++b){
273 if ( std::abs(pulse->
GetPulseTime() - min_time) < time_difference ) {
276 std::vector<int> theSamples = pulse->
GetSamples();
279 if (temp_output.size() == 0) {
280 for (
int i = 0;
i < theSamples.size(); ++
i) {
281 temp_output.push_back(0);
285 else if (temp_output.size() >= theSamples.size())
286 temp_output.erase(temp_output.end() - (temp_output.size() - theSamples.size()), temp_output.end());
288 for (std::vector<int>::iterator sampleIter = theSamples.begin(); sampleIter != theSamples.end(); ++sampleIter) {
291 if ( (sampleIter - theSamples.begin()) >= temp_output.size() )
294 temp_output.at(sampleIter - theSamples.begin()) += *sampleIter;
298 ++(pulseIters.at(b));
301 output.push_back(temp_output);
305 for (
int b = pulseIters.size()-1; b >= 0 ; --b){
306 if (pulseIters.at(b) == backwardIters.at(b)){
307 pulseIters.erase(pulseIters.begin() + b);
308 backwardIters.erase(backwardIters.begin() + b);