114
114
bool trigger_found = false;
115
115
while (fgets(line,400,tof_spectrum_events)) {
117
int _momatq9,__runid,__spillid,__triggerid;
118
float _tof01,_P_e_tof01,_p_e_tof01,_P_mu_tof01,_p_mu_tof01,_P_pi_tof01,_p_pi_tof01;
119
float _tof02,_P_e_tof02,_p_e_tof02,_P_mu_tof02,_p_mu_tof02,_P_pi_tof02,_p_pi_tof02;
120
float _tof12,_P_e_tof12,_p_e_tof12,_P_mu_tof12,_p_mu_tof12,_P_pi_tof12,_p_pi_tof12;
121
sscanf(line,"%*s %s %d %d %d %d %*s %f %f %f %f %f %f %f %*s %f %f %f %f %f %f %f %*s %f %f %f %f %f %f %f",
122
_beam,&_momatq9,&__runid,&__spillid,&__triggerid,
123
&_tof01,&_P_e_tof01,&_p_e_tof01,&_P_mu_tof01,&_p_mu_tof01,&_P_pi_tof01,&_p_pi_tof01,
124
&_tof02,&_P_e_tof02,&_p_e_tof02,&_P_mu_tof02,&_p_mu_tof02,&_P_pi_tof02,&_p_pi_tof02,
125
&_tof12,&_P_e_tof12,&_p_e_tof12,&_P_mu_tof12,&_p_mu_tof12,&_P_pi_tof12,&_p_pi_tof12);
127
if (__runid==_runid && __spillid==_spillCount && __triggerid==iTrigger ) {
128
trigger_found = true;
117
int _momatq9,__runid,__spillid,__triggerid;
118
float _tof01,_P_e_tof01,_p_e_tof01,_P_mu_tof01,_p_mu_tof01,_P_pi_tof01,_p_pi_tof01;
119
float _tof02,_P_e_tof02,_p_e_tof02,_P_mu_tof02,_p_mu_tof02,_P_pi_tof02,_p_pi_tof02;
120
float _tof12,_P_e_tof12,_p_e_tof12,_P_mu_tof12,_p_mu_tof12,_P_pi_tof12,_p_pi_tof12;
121
sscanf(line,"%*s %s %d %d %d %d %*s %f %f %f %f %f %f %f %*s %f %f %f %f %f %f %f %*s %f %f %f %f %f %f %f",
122
_beam,&_momatq9,&__runid,&__spillid,&__triggerid,
123
&_tof01,&_P_e_tof01,&_p_e_tof01,&_P_mu_tof01,&_p_mu_tof01,&_P_pi_tof01,&_p_pi_tof01,
124
&_tof02,&_P_e_tof02,&_p_e_tof02,&_P_mu_tof02,&_p_mu_tof02,&_P_pi_tof02,&_p_pi_tof02,
125
&_tof12,&_P_e_tof12,&_p_e_tof12,&_P_mu_tof12,&_p_mu_tof12,&_P_pi_tof12,&_p_pi_tof12);
127
if (__runid==_runid && __spillid==_spillCount && __triggerid==iTrigger ) {
128
trigger_found = true;
132
132
fclose(tof_spectrum_events);
133
printf(">>> run:%d spill:%d trigger:%d\n",_runid,_spillCount,iTrigger);
133
134
if (initial_trigger && !trigger_found) continue;
134
//printf(">>> run:%d spill:%d trigger:%d\n",_runid,_spillCount,iTrigger);
137
137
int nBarsTotal = 0;
147
147
int nBars = plHit->GetEMRBarArray().size();
149
149
for (int ibar=0; ibar<nBars; ibar++) {
151
EMRBar *bar = plHit->GetEMRBarArray().at(ibar);
152
int xBar = bar->GetBar();
154
// skip calibration channel
155
if (xBar==0) continue;
157
int nBarHits = bar->GetEMRBarHitArray().size();
159
for (int ibh=0; ibh<nBarHits; ibh++) {
161
EMRBarHit barHit = bar->GetEMRBarHitArray().at(ibh);
162
int xTot = barHit.GetTot();
163
int xDeltaT = barHit.GetDeltaT();
164
int xHitTime = barHit.GetHitTime();
165
double g4X = barHit.Get_g4_x_mm();
166
double g4Y = barHit.Get_g4_y_mm();
167
double g4Z = barHit.Get_g4_z_mm();
168
double g4_edep_mev = barHit.Get_g4_edep_mev();
169
double g4_time_ns = barHit.Get_g4_time_ns();
176
bHit.SetDeltaT(xDeltaT);
177
bHit.SetHitTime(xHitTime);
181
bHit.Set_g4_x_mm(g4X);
182
bHit.Set_g4_y_mm(g4Y);
183
bHit.Set_g4_z_mm(g4Z);
184
bHit.Set_g4_edep_mev(g4_edep_mev);
185
bHit.Set_g4_time_ns(g4_time_ns);
186
// fill collection of pre-selected events
187
_emr_dbb_events_tmp[iTrigger][xPlane][xBar].push_back(bHit);
151
EMRBar *bar = plHit->GetEMRBarArray().at(ibar);
152
int xBar = bar->GetBar();
154
// skip calibration channel
155
if (xBar==0) continue;
157
int nBarHits = bar->GetEMRBarHitArray().size();
159
for (int ibh=0; ibh<nBarHits; ibh++) {
161
EMRBarHit barHit = bar->GetEMRBarHitArray().at(ibh);
162
int xTot = barHit.GetTot();
163
int xDeltaT = barHit.GetDeltaT();
164
int xHitTime = barHit.GetHitTime();
165
double g4X = barHit.Get_g4_x_mm();
166
double g4Y = barHit.Get_g4_y_mm();
167
double g4Z = barHit.Get_g4_z_mm();
168
double g4_edep_mev = barHit.Get_g4_edep_mev();
169
double g4_time_ns = barHit.Get_g4_time_ns();
176
bHit.SetDeltaT(xDeltaT);
177
bHit.SetHitTime(xHitTime);
181
bHit.Set_g4_x_mm(g4X);
182
bHit.Set_g4_y_mm(g4Y);
183
bHit.Set_g4_z_mm(g4Z);
184
bHit.Set_g4_edep_mev(g4_edep_mev);
185
bHit.Set_g4_time_ns(g4_time_ns);
186
// fill collection of pre-selected events
187
_emr_dbb_events_tmp[iTrigger][xPlane][xBar].push_back(bHit);
191
191
int xOri = plHit->GetOrientation();
240
240
for (int iBar=1; iBar<=59; iBar++) {
241
241
int nHits = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar].size();
242
242
for (int iHit=0; iHit<nHits; iHit++) {
243
EMRBarHit bHit = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar][iHit];
244
int xTot = bHit.GetTot();/*dbb counts*/
245
int hitTime = bHit.GetHitTime();/*dbb counts*/
246
if (xTot>_secondary_trigger_minTot) hitTimeVector.push_back(hitTime);
243
EMRBarHit bHit = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar][iHit];
244
int xTot = bHit.GetTot();/*dbb counts*/
245
int hitTime = bHit.GetHitTime();/*dbb counts*/
246
if (xTot>_secondary_trigger_minTot) hitTimeVector.push_back(hitTime);
281
281
for (int iTrigger=0; iTrigger<_nTriggers; iTrigger++) {
282
282
for (int iPlane=0; iPlane<48; iPlane++) {
283
283
for (int iBar=1; iBar<=59; iBar++) {
284
int nHits = _emr_dbb_events_tmp[iTrigger][iPlane][iBar].size();
285
for (int iHit=0; iHit<nHits; iHit++) {
286
EMRBarHit bHit = _emr_dbb_events_tmp[iTrigger][iPlane][iBar][iHit];
287
_emr_dbb_events[0][iTrigger][iPlane][iBar].push_back(bHit);
288
_g4_edep_mev_tmp[iTrigger] += bHit.Get_g4_edep_mev();
284
int nHits = _emr_dbb_events_tmp[iTrigger][iPlane][iBar].size();
285
for (int iHit=0; iHit<nHits; iHit++) {
286
EMRBarHit bHit = _emr_dbb_events_tmp[iTrigger][iPlane][iBar][iHit];
287
_emr_dbb_events[0][iTrigger][iPlane][iBar].push_back(bHit);
288
_g4_edep_mev_tmp[iTrigger] += bHit.Get_g4_edep_mev();
291
291
if (iTrigger<_nTriggers-2) {
293
data._orientation = _emr_fadc_events_tmp[iTrigger][iPlane]._orientation;
294
data._charge = _emr_fadc_events_tmp[iTrigger][iPlane]._charge;
295
data._pedestal_area = _emr_fadc_events_tmp[iTrigger][iPlane]._pedestal_area;
296
data._arrival_time = _emr_fadc_events_tmp[iTrigger][iPlane]._arrival_time;
297
data._g4_edep_mev = _emr_fadc_events_tmp[iTrigger][iPlane]._g4_edep_mev;
298
data._samples = _emr_fadc_events_tmp[iTrigger][iPlane]._samples;
299
_emr_fadc_events[iTrigger][iPlane] = data;
293
data._orientation = _emr_fadc_events_tmp[iTrigger][iPlane]._orientation;
294
data._charge = _emr_fadc_events_tmp[iTrigger][iPlane]._charge;
295
data._pedestal_area = _emr_fadc_events_tmp[iTrigger][iPlane]._pedestal_area;
296
data._arrival_time = _emr_fadc_events_tmp[iTrigger][iPlane]._arrival_time;
297
data._g4_edep_mev = _emr_fadc_events_tmp[iTrigger][iPlane]._g4_edep_mev;
298
data._samples = _emr_fadc_events_tmp[iTrigger][iPlane]._samples;
299
_emr_fadc_events[iTrigger][iPlane] = data;
311
311
for (int iPlane=0; iPlane<48; iPlane++) {
312
312
for (int iBar=1; iBar<=59; iBar++) {
313
int nHits = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar].size();
315
for (int iHit=0; iHit<nHits; iHit++) {
316
EMRBarHit bHit = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar][iHit];
317
int hitTime = bHit.GetHitTime();/*dbb counts*/
318
int xTot = bHit.GetTot();/*dbb counts*/
319
int deltat = hitTimeGroup.at(iHitTimeGroup) - hitTime;
321
if (deltat>=0 && deltat<_secondary_hits_bunching_width) {
322
_emr_dbb_events[0][secondaryEventsTrigId+iHitTimeGroup+1][iPlane][iBar].push_back(bHit);
324
// cout << iPlane << " " << iBar << " " << iHit << " " << bHit.GetTot() << " " << deltat << " " << hitTime << endl;
313
int nHits = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar].size();
315
for (int iHit=0; iHit<nHits; iHit++) {
316
EMRBarHit bHit = _emr_dbb_events_tmp[secondaryEventsTrigId][iPlane][iBar][iHit];
317
int hitTime = bHit.GetHitTime();/*dbb counts*/
318
int xTot = bHit.GetTot();/*dbb counts*/
319
int deltat = hitTimeGroup.at(iHitTimeGroup) - hitTime;
321
if (deltat>=0 && deltat<_secondary_hits_bunching_width) {
322
_emr_dbb_events[0][secondaryEventsTrigId+iHitTimeGroup+1][iPlane][iBar].push_back(bHit);
324
// cout << iPlane << " " << iBar << " " << iHit << " " << bHit.GetTot() << " " << deltat << " " << hitTime << endl;
357
357
// hits selection
358
358
if (iTrigger<_nTriggers-2 &&
359
(xPlaneHits<_primary_trigger_minXhits ||
360
yPlaneHits<_primary_trigger_minYhits ||
361
(xPlaneHits+yPlaneHits)<_primary_trigger_minNhits)) continue;
359
(xPlaneHits<_primary_trigger_minXhits ||
360
yPlaneHits<_primary_trigger_minYhits ||
361
(xPlaneHits+yPlaneHits)<_primary_trigger_minNhits)) continue;
362
362
if (iTrigger>=_nTriggers &&
363
(xPlaneHits<_secondary_trigger_minXhits ||
364
yPlaneHits<_secondary_trigger_minYhits ||
365
(xPlaneHits+yPlaneHits)<_secondary_trigger_minNhits)) continue;
363
(xPlaneHits<_secondary_trigger_minXhits ||
364
yPlaneHits<_secondary_trigger_minYhits ||
365
(xPlaneHits+yPlaneHits)<_secondary_trigger_minNhits)) continue;
367
367
_has_primary_tmp[iTrigger] = 1;
373
373
for (int iBar=1; iBar<=59; iBar++) {
374
int nHits = _emr_dbb_events[0][iTrigger][iPlane][iBar].size();
376
for (int iHit=0; iHit<nHits; iHit++) {
377
EMRBarHit bHit = _emr_dbb_events[0][iTrigger][iPlane][iBar][iHit];
378
int xTot = bHit.GetTot();
379
if (xTot > xTotMax) {
374
int nHits = _emr_dbb_events[0][iTrigger][iPlane][iBar].size();
376
for (int iHit=0; iHit<nHits; iHit++) {
377
EMRBarHit bHit = _emr_dbb_events[0][iTrigger][iPlane][iBar][iHit];
378
int xTot = bHit.GetTot();
379
if (xTot > xTotMax) {
387
387
for (int iBar=1; iBar<=59; iBar++) {
388
int nHits = _emr_dbb_events[0][iTrigger][iPlane][iBar].size();
389
for (int iHit=0; iHit<nHits; iHit++) {
390
EMRBarHit bHit = _emr_dbb_events[0][iTrigger][iPlane][iBar][iHit];
391
if (iBar==xBarMax && iHit==xHitMax && bHit.GetTot()>_secondary_trigger_minTot){
392
_emr_dbb_events[1][iTrigger][iPlane][iBar].push_back(bHit);
388
int nHits = _emr_dbb_events[0][iTrigger][iPlane][iBar].size();
389
for (int iHit=0; iHit<nHits; iHit++) {
390
EMRBarHit bHit = _emr_dbb_events[0][iTrigger][iPlane][iBar][iHit];
391
if (iBar==xBarMax && iHit==xHitMax && bHit.GetTot()>_secondary_trigger_minTot){
392
_emr_dbb_events[1][iTrigger][iPlane][iBar].push_back(bHit);
403
403
if (reconEvents->size() == 0) {
404
404
for (int iTrigger=0; iTrigger<_nTriggers+_nSeconTrig; iTrigger++)
405
405
reconEvents->push_back(new ReconEvent);
408
// cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_spillCount=" << _spillCount << endl;
408
cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_spillCount=" << _spillCount << endl;
410
410
//printf("run:%d spill:%d triggers:%d\n",_runid,_spillCount,_nTriggers-2);
412
412
for (int iTrigger=0; iTrigger<_nTriggers+_nSeconTrig; iTrigger++) {
414
// cout << ">>>>>>>>>>>>>>>>>>>>>>>iTrigger=" << iTrigger << endl;
414
cout << ">>>>>>>>>>>>>>>>>>>>>>>iTrigger=" << iTrigger << endl;
416
416
EMREvent *evt = new EMREvent;
437
437
plHit->SetSamples(xSamples);
438
438
plHit->Set_g4_edep_mev(g4_edep_mev);
440
// cout << "------------------------xPlane=" << xPlane << endl;
441
// cout << "xCharge=" << xCharge << endl;
442
// cout << "g4_edep_mev=" << g4_edep_mev << endl;
444
440
EMRBarArray barArray;
445
441
EMRBarArray barArrayPrimary;
446
442
EMRBarArray barArraySecondary;
447
443
for (int i=0; i<3; i++) {
448
for (int ibar=1; ibar<=59; ibar++) {
449
int nHits = _emr_dbb_events[i][iTrigger][xPlane][ibar].size();
451
EMRBar *bar = new EMRBar;
453
bar->SetEMRBarHitArray( _emr_dbb_events[i][iTrigger][xPlane][ibar] );
454
if (i==0) barArray.push_back(bar);
455
if (i==1) barArrayPrimary.push_back(bar);
456
if (i==2) barArraySecondary.push_back(bar);
444
for (int ibar=1; ibar<=59; ibar++) {
445
int nHits = _emr_dbb_events[i][iTrigger][xPlane][ibar].size();
447
EMRBar *bar = new EMRBar;
449
bar->SetEMRBarHitArray( _emr_dbb_events[i][iTrigger][xPlane][ibar] );
450
if (i==0) barArray.push_back(bar);
451
if (i==1) barArrayPrimary.push_back(bar);
452
if (i==2) barArraySecondary.push_back(bar);
461
// cout << "barArray.size()=" << barArray.size() << endl;
462
// cout << "barArrayPrimary.size()=" << barArrayPrimary.size() << endl;
463
// cout << "barArraySecondary.size()=" << barArraySecondary.size() << endl;
465
457
plHit->SetEMRBarArray(barArray);
466
458
plHit->SetEMRBarArrayPrimary(barArrayPrimary);
467
459
plHit->SetEMRBarArraySecondary(barArraySecondary);
468
if ( barArray.size() || barArrayPrimary.size() || barArraySecondary.size() || xCharge) {
469
plArray.push_back(plHit);
460
if ( barArray.size() || barArrayPrimary.size() || barArraySecondary.size() || xCharge) {
461
cout << "------------------------xPlane=" << xPlane << endl;
462
cout << "xCharge=" << xCharge << endl;
463
cout << "g4_edep_mev=" << g4_edep_mev << endl;
464
cout << "barArray.size()=" << barArray.size() << endl;
465
cout << "barArrayPrimary.size()=" << barArrayPrimary.size() << endl;
466
cout << "barArraySecondary.size()=" << barArraySecondary.size() << endl;
467
plArray.push_back(plHit);
472
470
evt->SetEMRPlaneHitArray(plArray);
584
582
// find primary hit
585
583
for (int iBar=1; iBar<=59; iBar++) {
586
if (Hit0Found) break;
587
if (_emr_dbb_events[1][iTrigger][iPlane][iBar].size()) {
588
Hit0 = _emr_dbb_events[1][iTrigger][iPlane][iBar][0];
584
if (Hit0Found) break;
585
if (_emr_dbb_events[1][iTrigger][iPlane][iBar].size()) {
586
Hit0 = _emr_dbb_events[1][iTrigger][iPlane][iBar][0];
595
593
if (!Hit0Found) continue;
597
595
// look backwards for hits
598
596
for (int aPlane=iPlane-1; aPlane>=0; aPlane=aPlane-2 ) {
599
if (Hit1Found) break;
600
for (int aBar=1; aBar<=59; aBar++) {
601
if (_emr_dbb_events[1][iTrigger][aPlane][aBar].size()) {
597
if (Hit1Found) break;
598
for (int aBar=1; aBar<=59; aBar++) {
599
if (_emr_dbb_events[1][iTrigger][aPlane][aBar].size()) {
611
609
// look forward for hits
612
610
for (int bPlane=iPlane+1; bPlane<48; bPlane=bPlane+2 ) {
613
if (Hit1Found && Hit2Found) break;
614
for (int bBar=1; bBar<=59; bBar++) {
615
if (_emr_dbb_events[1][iTrigger][bPlane][bBar].size()) {
616
if (Hit2Found && !Hit1Found) {
611
if (Hit1Found && Hit2Found) break;
612
for (int bBar=1; bBar<=59; bBar++) {
613
if (_emr_dbb_events[1][iTrigger][bPlane][bBar].size()) {
614
if (Hit2Found && !Hit1Found) {
630
628
// look backwards for the second hit if nothing found in the forward direction
631
629
for (int aPlane=iPlane-1; aPlane>=0; aPlane=aPlane-2 ) {
632
if (Hit1Found && Hit2Found) break;
633
if (aPlane==x1) continue;
634
for (int aBar=1; aBar<=59; aBar++) {
635
if (_emr_dbb_events[1][iTrigger][aPlane][aBar].size()) {
636
if (Hit1Found && !Hit2Found) {
630
if (Hit1Found && Hit2Found) break;
631
if (aPlane==x1) continue;
632
for (int aBar=1; aBar<=59; aBar++) {
633
if (_emr_dbb_events[1][iTrigger][aPlane][aBar].size()) {
634
if (Hit1Found && !Hit2Found) {
645
643
if (Hit1Found && Hit2Found) {
646
a = ((double)y2-(double)y1)/((double)x2-(double)x1);
647
b = ((double)y1*(double)x2-(double)y2*(double)x1)/((double)x2-(double)x1);
644
a = ((double)y2-(double)y1)/((double)x2-(double)x1);
645
b = ((double)y1*(double)x2-(double)y2*(double)x1)/((double)x2-(double)x1);
651
649
if (Hit1Found && !Hit2Found) {
655
653
if (!Hit1Found && Hit2Found) {
659
657
if (iPlane%2==0) {
660
_emr_dbb_events[1][iTrigger][x0][barid][0].SetX(barid);
661
_emr_dbb_events[1][iTrigger][x0][barid][0].SetY(y0);
658
_emr_dbb_events[1][iTrigger][x0][barid][0].SetX(barid);
659
_emr_dbb_events[1][iTrigger][x0][barid][0].SetY(y0);
663
661
if (iPlane%2==1) {
664
_emr_dbb_events[1][iTrigger][x0][barid][0].SetX(y0);
665
_emr_dbb_events[1][iTrigger][x0][barid][0].SetY(barid);
662
_emr_dbb_events[1][iTrigger][x0][barid][0].SetX(y0);
663
_emr_dbb_events[1][iTrigger][x0][barid][0].SetY(barid);
667
665
_emr_dbb_events[1][iTrigger][x0][barid][0].SetZ(x0);
670
668
// cout << x1 << ":" << x2 << "::"<< y1 << ":"<< y2 << "::"<< a << ":"<< b << " - "
671
// << Hit0.GetX() << " " << Hit0.GetY() << " " << Hit0.GetZ() << endl;
669
// << Hit0.GetX() << " " << Hit0.GetY() << " " << Hit0.GetZ() << endl;