320 {
321
323
324
325
326 double It0;
327 double dbuff;
329
330
331 ATH_MSG_DEBUG(
" **** Start of High gain Pulse shapes in TileInfo " );
332
333
336
337
338 if (file_hi.empty()) {
340 return StatusCode::FAILURE;
341 }
342
343 std::ifstream shape_file_hi(file_hi.c_str());
344 if (!shape_file_hi.is_open()) {
346 return StatusCode::FAILURE;
347 }
348
349 if (std::getline(shape_file_hi, line)) {
351 }
352
353 if (std::getline(shape_file_hi, line)) {
354 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsNBinsHi) == 1)
355 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsNBinsHi <<
" number of bins in shaping function" );
356 }
357
358 if (std::getline(shape_file_hi, line)) {
359 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsTime0BinHi) == 1)
360 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsTime0BinHi <<
" index of in-time bin" );
361 }
362
363 if (std::getline(shape_file_hi, line)) {
364 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsBinsPerXHi) == 1)
365 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsBinsPerXHi <<
" bins per beam crossing" );
366 }
367
368
369 info.m_digitsFullShapeHi.resize(
info.m_digitsNBinsHi, 0.);
370 size_t jt = 0;
371 while (std::getline(shape_file_hi, line) && jt <
info.m_digitsFullShapeHi.size()) {
372 int nread = sscanf(
line.c_str(),
"%80lf %80lf", &It0, &dbuff);
373 if (nread > 1)
info.m_digitsFullShapeHi[jt++] = dbuff;
375 }
376
377 shape_file_hi.close();
378
379
380 ATH_MSG_DEBUG(
" **** Start of Low gain Pulse shapes in TileInfo " );
381
382
385
386
387 if (file_lo.empty()) {
389 return StatusCode::FAILURE;
390 }
391
392 std::ifstream shape_file_lo(file_lo.c_str());
393 if (!shape_file_lo.is_open()) {
395 return StatusCode::FAILURE;
396 }
397
398 if (std::getline(shape_file_lo, line)) {
400 }
401
402 if (std::getline(shape_file_lo, line)) {
403 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsNBinsLo) == 1)
404 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsNBinsLo <<
" number of bins in shaping function" );
405 }
406
407 if (std::getline(shape_file_lo, line)) {
408 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsTime0BinLo) == 1)
409 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsTime0BinLo <<
" index of in-time bin" );
410 }
411
412 if (std::getline(shape_file_lo, line)) {
413 if (sscanf(
line.c_str(),
"%80d", &
info.m_digitsBinsPerXLo) == 1)
414 ATH_MSG_DEBUG( std::setw(3) <<
info.m_digitsBinsPerXLo <<
" bins per beam crossing" );
415 }
416
417
418 info.m_digitsFullShapeLo.resize(
info.m_digitsNBinsLo, 0.);
419 jt = 0;
420 while (std::getline(shape_file_lo, line) && jt <
info.m_digitsFullShapeLo.size()) {
421 int nread = sscanf(
line.c_str(),
"%80lf %80lf", &It0, &dbuff);
422 if (nread > 1)
info.m_digitsFullShapeLo[jt++] = dbuff;
424 }
425
426 shape_file_lo.close();
427
428
429 int it0_hi = 0;
430 int it0_lo = 0;
431 double peak_hi = 0;
432 double peak_lo = 0;
433 for (
int i = 0;
i <
info.m_digitsNBinsHi;
i++) {
434 if (
info.m_digitsFullShapeHi[i] > peak_hi) {
435 peak_hi =
info.m_digitsFullShapeHi[
i];
437 }
438 }
439
440 for (
int i = 0;
i <
info.m_digitsNBinsLo;
i++) {
441 if (
info.m_digitsFullShapeLo[i] > peak_lo) {
442 peak_lo =
info.m_digitsFullShapeLo[
i];
444 }
445 }
446
448 msg(MSG::DEBUG) <<
" High Gain: Peak value = " << peak_hi
449 << " at bin = " << it0_hi
450 <<
", info.m_digitsTime0BinHi = " <<
info.m_digitsTime0BinHi <<
endmsg;
451
452 msg(MSG::DEBUG) <<
" Low Gain: Peak value = " << peak_lo
453 << " at bin = " << it0_lo
454 <<
", info.m_digitsTime0BinLow = " <<
info.m_digitsTime0BinLo <<
endmsg;
455 }
456
457
458 info.m_digitsShapeHi.resize(
info.m_nSamples, 0.);
459 info.m_digitsShapeLo.resize(
info.m_nSamples, 0.);
460
461
462 for (
int i = 0;
i <
info.m_nSamples;
i++) {
463 int j =
info.m_digitsTime0BinHi + (
i -
info.m_iTrigSample) *
info.m_digitsBinsPerXHi;
464 if (j < 0) j = 0;
465 if (j >=
info.m_digitsNBinsHi) j =
info.m_digitsNBinsHi-1;
466 info.m_digitsShapeHi[
i] =
info.m_digitsFullShapeHi[j];
467 int k =
info.m_digitsTime0BinLo + (
i -
info.m_iTrigSample) *
info.m_digitsBinsPerXLo;
469 if (k >=
info.m_digitsNBinsLo)
k =
info.m_digitsNBinsLo-1;
470 info.m_digitsShapeLo[
i] =
info.m_digitsFullShapeLo[
k];
471 }
472
474 msg(MSG::DEBUG) <<
" Shaping profile at beam crossings: "
475 <<
" Number of samples = " <<
info.m_nSamples
476 <<
", Sample at Time 0 = " <<
info.m_iTrigSample <<
endmsg;
477
478 msg(MSG::DEBUG) <<
" High gain Shape factor = ";
479 for (
int i = 0;
i <
info.m_nSamples;
i++) {
480 msg(MSG::DEBUG) << std::setiosflags(std::ios::fixed)
481 << std::setiosflags(std::ios::showpoint) << std::setw(9) << std::setprecision(5)
482 <<
info.m_digitsShapeHi[
i];
483 }
484
486
487 msg(MSG::DEBUG) <<
" Low gain Shape factor = ";
488 for (
int i = 0;
i <
info.m_nSamples;
i++) {
489 msg(MSG::DEBUG) << std::setiosflags(std::ios::fixed)
490 << std::setiosflags(std::ios::showpoint) << std::setw(9) << std::setprecision(5)
491 <<
info.m_digitsShapeLo[
i];
492 }
494
495 }
496
497
498 info.m_digitsDerivativeHi.resize(
info.m_digitsNBinsHi, 0.);
499 info.m_digitsDerivativeLo.resize(
info.m_digitsNBinsLo, 0.);
500 for (
int i = 1;
i <
info.m_digitsNBinsHi - 1;
i++) {
501 info.m_digitsDerivativeHi[
i] = (
info.m_digitsFullShapeHi[
i + 1]
502 -
info.m_digitsFullShapeHi[
i - 1]) / 2;
503 }
504
505 for (
int i = 1;
i <
info.m_digitsNBinsLo - 1;
i++) {
506 info.m_digitsDerivativeLo[
i] = (
info.m_digitsFullShapeLo[
i + 1]
507 -
info.m_digitsFullShapeLo[
i - 1]) / 2;
508 }
509
510 return StatusCode::SUCCESS;
511}
bool msgLvl(const MSG::Level lvl) const