BmnRoot
Loading...
Searching...
No Matches
BmnGemStripLayer.cxx
Go to the documentation of this file.
1#include "BmnGemStripLayer.h"
2
3Int_t BmnGemStripLayer::fUniqueIdL = 0;
4Int_t BmnGemStripLayer::fUniqueIdU = 0;
5
7{
8
9 Verbosity = true;
10
11 LayerZoneNumber = 0;
12 LayerType = LowerStripLayer;
13
14 XMinLayer = 0.0;
15 XMaxLayer = 10.0;
16 YMinLayer = 0.0;
17 YMaxLayer = 10.0;
18
19 Pitch = 0.08; // cm
20 AngleDeg = 15.0; // in degrees from a vertical line where a plus value is clockwise
21 AngleRad = AngleDeg * Pi() / 180; // in radians
22
23 StripOrder = LeftToRight;
24
25 if (AngleDeg <= 0.0 && AngleDeg >= -90.0) {
27 } else {
28 if (AngleDeg > 0.0 && AngleDeg <= 90.0) {
30 }
31 }
32
33 // AZ ClusterFindingThreshold = 0.0;
34 ClusterFindingThreshold = 1.0;
35
36 TotalClusterThreshold = 40.0;
37
39}
40
42 StripLayerType layer_type,
43 Double_t xsize,
44 Double_t ysize,
45 Double_t xorig,
46 Double_t yorig,
47 Double_t pitch,
48 Double_t adeg)
49{
50
51 Verbosity = true;
52
53 LayerZoneNumber = zone_number;
54 LayerType = layer_type;
55
56 XMinLayer = xorig;
57 XMaxLayer = xorig + xsize;
58 YMinLayer = yorig;
59 YMaxLayer = yorig + ysize;
60
61 Pitch = pitch;
62 AngleDeg = adeg; // in degrees from a vertical line where a plus value is clockwise
63 AngleRad = AngleDeg * Pi() / 180; // in radians
64
65 StripOrder = LeftToRight;
66
67 if (AngleDeg <= 0.0 && AngleDeg >= -90.0) {
69 } else {
70 if (AngleDeg > 0.0 && AngleDeg <= 90.0) {
72 }
73 }
74
75 // AZ ClusterFindingThreshold = 0.0;
76 ClusterFindingThreshold = 1.0;
77
78 TotalClusterThreshold = 40.0;
79
81}
82
84
86{
87 Int_t NStrips = GetNStrips();
88
89 // strips
90 Strips.clear();
91 Strips.resize(NStrips, 0.0);
92
93 // matches
96
97 // strip hits
99
100 BmnGemStripLayer::fUniqueIdL = 0;
101 BmnGemStripLayer::fUniqueIdU = 0;
102}
103
108
110{
111 Double_t xleft_layer = ConvertNormalPointToStripX(XLeftPointOfStripNumbering, YLeftPointOfStripNumbering);
112 Double_t xright_layer = ConvertNormalPointToStripX(XRightPointOfStripNumbering, YRightPointOfStripNumbering);
113 Double_t n_strips = (xright_layer - xleft_layer) / Pitch;
114
115 if ((n_strips - (Int_t)n_strips) < 1E-10) {
116 return (Int_t)n_strips;
117 } else {
118 return (Int_t)(n_strips + 1);
119 }
120}
121
122void BmnGemStripLayer::SetPitch(Double_t pitch)
123{
124 Pitch = pitch;
125
127}
128
129void BmnGemStripLayer::SetLayerSizes(Double_t xsize, Double_t ysize, Double_t xorig, Double_t yorig)
130{
131 XMinLayer = xorig;
132 XMaxLayer = xorig + xsize;
133 YMinLayer = yorig;
134 YMaxLayer = yorig + ysize;
135
137}
138
140{
141 if (Abs(deg) <= 90.0) {
142 AngleDeg = deg;
143 } else {
144 AngleDeg = 0.0;
145 if (Verbosity)
146 cerr << "WARNING: BmnGemStripLayer::SetAngleDeg(): the strip angle is incorrect and has been set to zero\n";
147 }
148
149 AngleRad = AngleDeg * Pi() / 180;
150
152}
153
154Bool_t BmnGemStripLayer::SetStripNumberingBorders(Double_t x_left, Double_t y_left, Double_t x_right, Double_t y_right)
155{
156 if (x_right < x_left)
157 return false;
158
159 XLeftPointOfStripNumbering = x_left;
160 YLeftPointOfStripNumbering = y_left;
161 XRightPointOfStripNumbering = x_right;
162 YRightPointOfStripNumbering = y_right;
163
164 ResetLayer();
165
166 return true;
167}
168
170{
171
172 if (left != LeftTop && left != LeftBottom) {
173 if (Verbosity)
174 cerr << "WARNING: SetStripNumberingBorders: left strip border point is incorrect\n";
175 return false;
176 }
177 if (right != RightTop && right != RightBottom) {
178 if (Verbosity)
179 cerr << "WARNING: SetStripNumberingBorders: right strip border point is incorrect\n";
180 return false;
181 }
182
183 XLeftPointOfStripNumbering = XMinLayer;
184 XRightPointOfStripNumbering = XMaxLayer;
185
186 switch (left) {
187 case LeftTop:
188 YLeftPointOfStripNumbering = YMaxLayer;
189 break;
190 case LeftBottom:
191 YLeftPointOfStripNumbering = YMinLayer;
192 break;
193 default:
194 return false;
195 }
196
197 switch (right) {
198 case RightTop:
199 YRightPointOfStripNumbering = YMaxLayer;
200 break;
201 case RightBottom:
202 YRightPointOfStripNumbering = YMinLayer;
203 break;
204 default:
205 return false;
206 }
207
208 ResetLayer();
209
210 return true;
211}
212
214{
215 StripOrder = strip_direction;
216
217 ResetLayer();
218
219 return true;
220}
221
222Bool_t BmnGemStripLayer::AddDeadZone(Int_t n_points, Double_t* x_points, Double_t* y_points)
223{
224 DeadZoneOfStripLayer dead_zone;
225 Bool_t status = dead_zone.SetDeadZone(n_points, x_points, y_points);
226 if (status == true) {
227 DeadZones.push_back(dead_zone);
228 return true;
229 } else {
230 return false;
231 }
232}
233
235{
236 if (dead_zone.GetNPoints() > 2) {
237 DeadZones.push_back(dead_zone);
238 return true;
239 } else {
240 return false;
241 }
242}
243
244Bool_t BmnGemStripLayer::IsPointInsideDeadZones(Double_t x, Double_t y)
245{
246 for (size_t izone = 0; izone < DeadZones.size(); ++izone) {
247 if (DeadZones[izone].IsInside(x, y))
248 return true;
249 }
250
251 return false;
252}
253
254Bool_t BmnGemStripLayer::IsPointInsideStripLayer(Double_t x, Double_t y)
255{
256 if (x >= XMinLayer && x <= XMaxLayer && y >= YMinLayer && y <= YMaxLayer && !IsPointInsideDeadZones(x, y))
257 return true;
258 else
259 return false;
260}
261
262Bool_t BmnGemStripLayer::SetStripSignal(Int_t strip_num, Double_t signal)
263{
264 if (strip_num >= 0 && strip_num < (int)Strips.size()) {
265 Strips[strip_num] = signal;
266 return true;
267 } else
268 return false;
269}
270
271Bool_t BmnGemStripLayer::AddStripSignal(Int_t strip_num, Double_t signal)
272{
273 if (strip_num >= 0 && strip_num < (int)Strips.size()) {
274 Strips[strip_num] += signal;
275 return true;
276 } else
277 return false;
278}
279
280Double_t BmnGemStripLayer::GetStripSignal(Int_t strip_num)
281{
282 if (strip_num >= 0 && strip_num < (int)Strips.size()) {
283 return Strips[strip_num];
284 } else
285 return -1;
286}
287
288Bool_t BmnGemStripLayer::SetStripMatch(Int_t strip_num, BmnMatch mc_match)
289{
290 if (strip_num >= 0 && strip_num < (int)StripMatches.size()) {
291 StripMatches[strip_num] = mc_match;
292 return true;
293 } else
294 return false;
295}
296
297Bool_t BmnGemStripLayer::AddLinkToStripMatch(Int_t strip_num, Double_t weight, Int_t mc_num)
298{
299 if (strip_num >= 0 && strip_num < (int)StripMatches.size()) {
300 StripMatches[strip_num].AddLink(weight, mc_num);
301 return true;
302 } else
303 return false;
304}
305
306Bool_t BmnGemStripLayer::SetStripDigitNumberMatch(Int_t strip_num, BmnMatch digit_num_match)
307{
308 if (strip_num >= 0 && strip_num < (int)StripDigitNumberMatches.size()) {
309 StripDigitNumberMatches[strip_num] = digit_num_match;
310 return true;
311 } else
312 return false;
313}
314
315Bool_t BmnGemStripLayer::AddLinkToStripDigitNumberMatch(Int_t strip_num, Double_t weight, Int_t digit_num)
316{
317 if (strip_num >= 0 && strip_num < (int)StripDigitNumberMatches.size()) {
318 StripDigitNumberMatches[strip_num].AddLink(weight, digit_num);
319 return true;
320 } else
321 return false;
322}
323
325{
326 if (strip_num >= 0 && strip_num < (int)StripMatches.size()) {
327 return StripMatches[strip_num];
328 } else
329 return BmnMatch(); // return an empty match
330}
331
333{
334 if (strip_num >= 0 && strip_num < (int)StripDigitNumberMatches.size()) {
335 return StripDigitNumberMatches[strip_num];
336 } else
337 return BmnMatch(); // return an empty match
338}
339
341{
342 Int_t NStrips = GetNStrips();
343
344 StripMatches.clear();
345 StripMatches.resize(NStrips, BmnMatch());
346}
347
349{
350 Int_t NStrips = GetNStrips();
351
352 StripDigitNumberMatches.clear();
353 StripDigitNumberMatches.resize(NStrips, BmnMatch());
354}
355
357{
358 if (num >= 0 && num < (int)StripHits.size()) {
359 return StripHits[num];
360 }
361 return -1.0;
362}
363
365{
366 if (num >= 0 && num < (int)StripHitsTotalSignal.size()) {
367 return StripHitsTotalSignal[num];
368 }
369 return -1.0;
370}
371
373{
374 if (num >= 0 && num < (int)StripHitsErrors.size()) {
375 return StripHitsErrors[num];
376 }
377 return -1.0;
378}
379
381{
382 if (num >= 0 && num < (int)StripHitsClusterSize.size()) {
383 return StripHitsClusterSize[num];
384 }
385 return -1.0;
386}
387
389{
390 StripHits.clear();
391 StripHitsTotalSignal.clear();
392 StripHitsErrors.clear();
393 StripHitsClusterSize.clear();
394 StripClusters.clear();
395}
396
397Double_t BmnGemStripLayer::ConvertNormalPointToStripX(Double_t x, Double_t y)
398{
399 Double_t XRotationCenter;
400 Double_t YRotationCenter;
401
402 if (StripOrder == LeftToRight) {
403 XRotationCenter = XLeftPointOfStripNumbering;
404 YRotationCenter = YLeftPointOfStripNumbering;
405 } else {
406 if (StripOrder == RightToLeft) {
407 XRotationCenter = XRightPointOfStripNumbering;
408 YRotationCenter = YRightPointOfStripNumbering;
409 }
410 }
411 Double_t StripX =
412 (x - XRotationCenter) * Cos(-AngleRad) + (y - YRotationCenter) * Sin(-AngleRad) + XRotationCenter; // see
413 return StripX;
414}
415
416Double_t BmnGemStripLayer::ConvertNormalPointToStripY(Double_t x, Double_t y)
417{
418 Double_t XRotationCenter;
419 Double_t YRotationCenter;
420
421 if (StripOrder == LeftToRight) {
422 XRotationCenter = XLeftPointOfStripNumbering;
423 YRotationCenter = YLeftPointOfStripNumbering;
424 } else {
425 if (StripOrder == RightToLeft) {
426 XRotationCenter = XRightPointOfStripNumbering;
427 YRotationCenter = YRightPointOfStripNumbering;
428 }
429 }
430 Double_t StripY =
431 -(x - XRotationCenter) * Sin(-AngleRad) + (y - YRotationCenter) * Cos(-AngleRad) + YRotationCenter; // see
432 return StripY;
433}
434
435Double_t BmnGemStripLayer::ConvertPointToStripPosition(Double_t x, Double_t y)
436{
437 // This function returns real(double) value,
438 // where integer part - number of a strip, fractional part - position on this strip (as ratio from begin)
439
440 if (StripOrder == LeftToRight) {
441 return (ConvertNormalPointToStripX(x, y) - XLeftPointOfStripNumbering) / Pitch;
442 } else {
443 if (StripOrder == RightToLeft) {
444 return (XRightPointOfStripNumbering - ConvertNormalPointToStripX(x, y)) / Pitch;
445 }
446 }
447
448 return 0;
449}
450
452{
453
454 Double_t b;
455
456 if (Abs(AngleDeg) != 90.0) { // case: y=a*x+b
457 Double_t x_strip_shift = (strip_pos * Pitch) / Cos(Abs(AngleRad));
458 Double_t xcoord;
459
460 if (StripOrder == LeftToRight) {
461 xcoord = XLeftPointOfStripNumbering + x_strip_shift;
462 b = YLeftPointOfStripNumbering - Tan(PiOver2() - AngleRad) * xcoord;
463 } else {
464 if (StripOrder == RightToLeft) {
465 xcoord = XRightPointOfStripNumbering - x_strip_shift;
466 b = YRightPointOfStripNumbering - Tan(PiOver2() - AngleRad) * xcoord;
467 }
468 }
469 } else { // case: y=b
470 Double_t y_strip_shift = strip_pos * Pitch * Sin(AngleRad);
471
472 if (StripOrder == LeftToRight) {
473 b = YLeftPointOfStripNumbering - y_strip_shift;
474 } else {
475 if (StripOrder == RightToLeft) {
476 b = YRightPointOfStripNumbering + y_strip_shift;
477 }
478 }
479 }
480
481 return b;
482}
483
485{
486
488
489 Double_t threshold = ClusterFindingThreshold;
490 // Double_t threshold = 500.0;
491
492 StripCluster cluster;
493
494 Bool_t ascent = false;
495 Bool_t descent = false;
496
497 // Processing strips
498 vector<Double_t> AnalyzableStrips = Strips;
499
500 // Smooth strip signal ------------------------------------------------------
501 // if(Pitch > 0.079) SmoothStripSignal(AnalyzableStrips, 1, 1, 1.0);
502 // else SmoothStripSignal(AnalyzableStrips, 2, 1, 1.0);
503 //--------------------------------------------------------------------------
504
505 for (Int_t is = 0; is < (int)AnalyzableStrips.size(); is++) {
506
507 if (AnalyzableStrips.at(is) <= threshold) {
508 if (descent || ascent) {
509 descent = false;
510 ascent = false;
511 // make strip hit
512 MakeStripHit(cluster, AnalyzableStrips, is);
513 }
514 continue;
515 }
516
517 if (cluster.GetClusterSize() > 0) {
518 // AZ-210322 if( AnalyzableStrips.at(is) >= (cluster.Signals.at(cluster.GetClusterSize()-1)) ) {
519 if (int(AnalyzableStrips.at(is)) > int(cluster.Signals.at(cluster.GetClusterSize() - 1))) { // AZ-210322
520 if (descent) {
521 ascent = false;
522 descent = false;
523 // make strip hit
524 MakeStripHit(cluster, AnalyzableStrips, is);
525 // continue;
526 }
527 ascent = true;
528 descent = false;
529 } else {
530 ascent = false;
531 descent = true;
532 }
533 } else {
534 ascent = true;
535 descent = false;
536 }
537
538 cluster.AddStrip(is, AnalyzableStrips.at(is));
539 }
540
541 if (cluster.GetClusterSize() != 0) {
542 // make strip hit
543 Int_t lastnum = AnalyzableStrips.size() - 1;
544 MakeStripHit(cluster, AnalyzableStrips, lastnum);
545 }
546}
547
548void BmnGemStripLayer::MakeStripHit(StripCluster& cluster, vector<Double_t>& AnalyzableStrips, Int_t& curcnt)
549{
550
551 Double_t mean_strip_position = 0.0;
552 Double_t total_cluster_signal = 0.0;
553 Double_t cluster_rms = 0.0;
554
555 Int_t NStripsInCluster = cluster.GetClusterSize();
556
557 // Share the common strip signal of two adjacent clusters in half
558 if (true) {
559 if (AnalyzableStrips.at(curcnt) >= AnalyzableStrips.at(curcnt - 1)) {
560 cluster.Signals.at(cluster.Signals.size() - 1) *= 0.5;
561 AnalyzableStrips.at(curcnt - 1) *= 0.5;
562 }
563 }
564
565 // mean position and cluster signal -----------------------------------------
566 for (Int_t i = 0; i < NStripsInCluster; ++i) {
567 Double_t strip_num = cluster.Strips.at(i);
568 Double_t signal = cluster.Signals.at(i);
569 total_cluster_signal += signal;
570 mean_strip_position += (strip_num + 0.5) * signal;
571 }
572 mean_strip_position /= total_cluster_signal;
573
574 if (mean_strip_position < 0.0)
575 mean_strip_position = 0.0;
576 if (mean_strip_position >= AnalyzableStrips.size())
577 mean_strip_position = AnalyzableStrips.size() - 0.001;
578 //--------------------------------------------------------------------------
579
580 // cluster standard deviation (sigma): RMS ----------------------------------
581 // if(NStripsInCluster > 1) {
582 // for(Int_t i = 0; i < NStripsInCluster; ++i) {
583 // Double_t strip_num = cluster.Strips.at(i);
584 // Double_t signal = cluster.Signals.at(i);
585 // Double_t residual = (strip_num+0.5) - mean_strip_position;
586 // cluster_rms += residual*residual*signal;
587 // }
588 // cluster_rms /= total_cluster_signal;
589 // cluster_rms = TMath::Sqrt(cluster_rms);
590 // }
591 // else {
592 // cluster_rms = 1.0/TMath::Sqrt(12.0);
593 // }
594 //
595
596 // AZ, STS, method2
597 Double_t sumW = total_cluster_signal;
598 Double_t sumWX = 0.;
599 Double_t sumWX2 = 0.;
600 if (NStripsInCluster > 1) {
601 for (Int_t i = 0; i < NStripsInCluster; ++i) {
602 Double_t strip_num = cluster.Strips.at(i);
603 Double_t signal = cluster.Signals.at(i);
604 sumWX += strip_num * signal;
605 sumWX2 += strip_num * strip_num * signal;
606 }
607 cluster_rms = (sumWX2 - sumWX * sumWX / sumW) / sumW;
608 }
609
610 else
611 {
612 cluster_rms = 1.0 / TMath::Sqrt(12.0);
613 }
614
615 // // AZ, STS, Real CF, method3
616 // Double_t sumW = total_cluster_signal;
617 // Double_t maxStripSignal = 0.;
618 //
619 // if(NStripsInCluster > 0) {
620 // for(Int_t i = 0; i < NStripsInCluster; ++i) {
621 // Double_t signal = cluster.Signals.at(i);
622 // if (signal > maxStripSignal)
623 // maxStripSignal = signal;
624 //
625 // }
626 // cluster_rms = sumW / maxStripSignal;
627 // }
628 //--------------------------------------------------------------------------
629
630 if (total_cluster_signal > TotalClusterThreshold) { // AZ-220322
631 StripHits.push_back(mean_strip_position);
632 StripHitsTotalSignal.push_back(total_cluster_signal);
633 StripHitsErrors.push_back(cluster_rms);
634 StripHitsClusterSize.push_back(NStripsInCluster);
635 if (LayerType == LowerStripLayer) {
636 cluster.SetType(0);
637 cluster.SetUniqueID(fUniqueIdL++);
638 } else {
639 cluster.SetType(1);
640 cluster.SetUniqueID(fUniqueIdU++);
641 }
642 } // AZ
643
644 cluster.SetWidth(NStripsInCluster);
645 cluster.MeanPosition = mean_strip_position;
646 cluster.TotalSignal = total_cluster_signal;
647 cluster.Error = cluster_rms;
648 /*AZ-240322
649 if (LayerType == LowerStripLayer) {
650 cluster.SetType(0);
651 cluster.SetUniqueID(fUniqueIdL++);
652 } else {
653 cluster.SetType(1);
654 cluster.SetUniqueID(fUniqueIdU++);
655 }
656 */
657
658 // AZ-220322 StripClusters.push_back(cluster);
659 if (total_cluster_signal > TotalClusterThreshold)
660 StripClusters.push_back(cluster); // AZ-220322
661
662 // return to a previous strip
663 curcnt--;
664 if (curcnt < 0)
665 curcnt = 0;
666
667 cluster.Clear();
668}
669
670void BmnGemStripLayer::SmoothStripSignal(vector<Double_t>& AnalyzableStrips,
671 Int_t NIterations,
672 Int_t SmoothWindow,
673 Double_t Weight)
674{
675 // It's the Simple Moving Average (SMA) method
676 // AnalyzableStrips - analyzable strip layer (ref)
677 // NIterations - number of smooth iterations (usually 1)
678 // SmoothWindow - number of strips on the left-right of the current strip (usually 1)
679 // Weight - weight of the current strip (usually 1.0 - for simplicity, greater - for weighted value))
680
681 SmoothStrips.clear();
682 Int_t NStrips = AnalyzableStrips.size();
683
684 for (Int_t iteration = 0; iteration < NIterations; ++iteration) {
685 SmoothStrips.clear();
686 for (Int_t istrip = 0; istrip < NStrips; ++istrip) {
687 Double_t mean_value = 0.0;
688 for (Int_t iw = istrip - SmoothWindow; iw <= istrip + SmoothWindow; ++iw) {
689 if (iw >= 0 && iw < NStrips) {
690 if (iw == istrip)
691 mean_value += AnalyzableStrips[iw] * Weight;
692 else
693 mean_value += AnalyzableStrips[iw];
694 }
695 }
696 mean_value /= 2.0 * SmoothWindow + Weight;
697 SmoothStrips.push_back(mean_value);
698 }
699 AnalyzableStrips = SmoothStrips;
700 }
701
702 return;
703}
int i
Definition P4_F32vec4.h:22
StripBorderPoint
@ LeftTop
@ RightBottom
@ LeftBottom
@ RightTop
StripNumberingDirection
@ RightToLeft
@ LeftToRight
StripLayerType
@ LowerStripLayer
Double_t GetStripHitError(Int_t num)
void SmoothStripSignal(vector< Double_t > &AnalyzableStrips, Int_t NIterations, Int_t SmoothWindow, Double_t Weight)
Double_t ConvertPointToStripPosition(Double_t x, Double_t y)
Bool_t SetStripNumberingOrder(StripNumberingDirection strip_direction)
BmnMatch GetStripDigitNumberMatch(Int_t strip_num)
Bool_t SetStripMatch(Int_t strip_num, BmnMatch mc_match)
Bool_t IsPointInsideStripLayer(Double_t x, Double_t y)
void MakeStripHit(StripCluster &cluster, vector< Double_t > &AnalyzableStrips, Int_t &curcnt)
Double_t ConvertNormalPointToStripY(Double_t x, Double_t y)
void SetLayerSizes(Double_t xsize, Double_t ysize, Double_t xorig=0.0, Double_t yorig=0.0)
Bool_t SetStripSignal(Int_t strip_num, Double_t signal)
Bool_t IsPointInsideDeadZones(Double_t x, Double_t y)
Double_t CalculateStripEquationB(Double_t strip_pos)
Bool_t AddStripSignal(Int_t strip_num, Double_t signal)
Int_t GetStripHitClusterSize(Int_t num)
void SetPitch(Double_t pitch)
Bool_t SetStripDigitNumberMatch(Int_t strip_num, BmnMatch digit_num_match)
BmnMatch GetStripMatch(Int_t strip_num)
Double_t GetStripHitPos(Int_t num)
Double_t GetStripHitTotalSignal(Int_t num)
Double_t GetStripSignal(Int_t strip_num)
Bool_t AddLinkToStripMatch(Int_t strip_num, Double_t weight, Int_t mc_num)
Bool_t AddLinkToStripDigitNumberMatch(Int_t strip_num, Double_t weight, Int_t digit_num)
Bool_t AddDeadZone(Int_t n_points, Double_t *x_points, Double_t *y_points)
void SetAngleDeg(Double_t deg)
Bool_t SetStripNumberingBorders(Double_t x_left, Double_t y_left, Double_t x_right, Double_t y_right)
Double_t ConvertNormalPointToStripX(Double_t x, Double_t y)
Bool_t SetDeadZone(Int_t n_points, Double_t *xpoints, Double_t *ypoints)
Double_t TotalSignal
Int_t GetClusterSize()
Double_t MeanPosition
Double_t Error
void SetWidth(Int_t w)
void AddStrip(Int_t strip_num, Double_t strip_signal)
void SetType(Int_t type)
vector< Int_t > Strips
vector< Double_t > Signals