diff --git a/InnerDetector/InDetDigitization/FastTRT_Digitization/FastTRT_Digitization/TRTFastDigitizationTool.h b/InnerDetector/InDetDigitization/FastTRT_Digitization/FastTRT_Digitization/TRTFastDigitizationTool.h index d1d7b4d2b6c1498ae9a5f17f6387d569b2749c5c..98737ba392c91b78caa464812458a10360d0a40f 100644 --- a/InnerDetector/InDetDigitization/FastTRT_Digitization/FastTRT_Digitization/TRTFastDigitizationTool.h +++ b/InnerDetector/InDetDigitization/FastTRT_Digitization/FastTRT_Digitization/TRTFastDigitizationTool.h @@ -153,6 +153,8 @@ private: // numerical constants. Might wish to move these to a DB in the future double m_trtTailFraction; // fraction in tails double m_trtSigmaDriftRadiusTail; // sigma of one TRT straw in R + double m_trtHighProbabilityBoostBkg; + double m_trtHighProbabilityBoostEle; double m_cFit[ 8 ][ 5 ]; // efficiency and resolution }; diff --git a/InnerDetector/InDetDigitization/FastTRT_Digitization/src/TRTFastDigitizationTool.cxx b/InnerDetector/InDetDigitization/FastTRT_Digitization/src/TRTFastDigitizationTool.cxx index f866f55467d738f4cee7d83cf9c114d3349e562f..13235a403f8e34faab6fa8939cd5b6dced9b357e 100644 --- a/InnerDetector/InDetDigitization/FastTRT_Digitization/src/TRTFastDigitizationTool.cxx +++ b/InnerDetector/InDetDigitization/FastTRT_Digitization/src/TRTFastDigitizationTool.cxx @@ -193,6 +193,8 @@ StatusCode TRTFastDigitizationTool::initializeNumericalConstants() { m_trtTailFraction = 4.7e-4; // part of the fraction in Tails m_trtSigmaDriftRadiusTail = 4./sqrt(12.); // sigma of one TRT straw in R (Tail) [mm] + m_trtHighProbabilityBoostBkg = 1.3; // for all particles but electrons + m_trtHighProbabilityBoostEle = 1.; // for electrons return StatusCode::SUCCESS; @@ -204,18 +206,22 @@ StatusCode TRTFastDigitizationTool::setNumericalConstants() { // Efficiency and resolution dependence on pileup // Resolution is parametrized with a double gaussian so there are two parameters (res1 = core, res2= tail) - static const float eff_corr_pileup_dependence = -0.001; // variation of efficiency with the number of Xing - static const float res1_corr_pileup_dependence = 0.01; // variation of core resolution (fractional) with the number of Xing + static const float eff_corr_pileup_dependence = -0.0005; // variation of efficiency with the number of Xing + static const float res1_corr_pileup_dependence = 0.005; // variation of core resolution (fractional) with the number of Xing static const float res2_corr_pileup_dependence = 0.015; // variation of tail resolution (fractional) with the number of Xing // scale factors relative to the value for mu=20 - float effcorr = 1-eff_corr_pileup_dependence*(m_NCollPerEvent-20); + float effcorr = 1+eff_corr_pileup_dependence*(m_NCollPerEvent-20); float res1corr = 1+res1_corr_pileup_dependence*(m_NCollPerEvent-20); float res2corr = 1+res2_corr_pileup_dependence*(m_NCollPerEvent-20); // Now the numerical parameters for efficiency and resolution static const float tailRes = 3.600; // scale factor for tail resolution - static const float coreFrac_Xe = 0.900; // fraction of events in resolution core (Xe) - static const float coreFrac_Ar = 0.800; // fraction of events in resolution core (Ar) + //static const float coreFrac_Xe = 0.900; // fraction of events in resolution core (Xe) + //static const float coreFrac_Ar = 0.800; // fraction of events in resolution core (Ar) + static const float coreFracEndcap_Xe = 0.40; // fraction of events in resolution core (Xe) + static const float coreFracEndcap_Ar = 0.40; // fraction of events in resolution core (Ar) + static const float coreFracBarrel_Xe = 0.250; // fraction of events in resolution core (Xe) + static const float coreFracBarrel_Ar = 0.250; // fraction of events in resolution core (Ar) static const float eff_BarrelA_Xe = 0.840; // efficiency scale factor static const float eff_EndcapA_Xe = 0.875; @@ -231,49 +237,49 @@ StatusCode TRTFastDigitizationTool::setNumericalConstants() { static const float err_Barrel_Ar = 1.020; static const float err_Endcap_Ar = 1.040; - static const float coreRes_Barrel_Xe = 1.545; // scale factor for core resolution - static const float coreRes_Endcap_Xe = 1.455; - static const float coreRes_Barrel_Ar = 1.495; - static const float coreRes_Endcap_Ar = 1.405; + static const float coreRes_Barrel_Xe = 0.4; // 1.545; // scale factor for core resolution + static const float coreRes_Endcap_Xe = 0.5; // 1.455; + static const float coreRes_Barrel_Ar = 0.4; // 1.495; + static const float coreRes_Endcap_Ar = 0.5; // 1.405; m_cFit[ 0 ][ 0 ] = effcorr*eff_BarrelA_Xe; // Barrel A-side Xenon m_cFit[ 0 ][ 1 ] = err_Barrel_Xe; - m_cFit[ 0 ][ 2 ] = coreFrac_Xe; + m_cFit[ 0 ][ 2 ] = coreFracBarrel_Xe; m_cFit[ 0 ][ 3 ] = res1corr*coreRes_Barrel_Xe; m_cFit[ 0 ][ 4 ] = res2corr*tailRes; m_cFit[ 1 ][ 0 ] = effcorr*eff_EndcapA_Xe; // Endcap A-side Xenon m_cFit[ 1 ][ 1 ] = err_Endcap_Xe; - m_cFit[ 1 ][ 2 ] = coreFrac_Xe; + m_cFit[ 1 ][ 2 ] = coreFracEndcap_Xe; m_cFit[ 1 ][ 3 ] = res1corr*coreRes_Endcap_Xe; m_cFit[ 1 ][ 4 ] = res2corr*tailRes; m_cFit[ 2 ][ 0 ] = effcorr*eff_BarrelC_Xe; // Barrel C-side Xenon m_cFit[ 2 ][ 1 ] = err_Barrel_Xe; - m_cFit[ 2 ][ 2 ] = coreFrac_Xe; + m_cFit[ 2 ][ 2 ] = coreFracBarrel_Xe; m_cFit[ 2 ][ 3 ] = res1corr*coreRes_Barrel_Xe; m_cFit[ 2 ][ 4 ] = res2corr*tailRes; m_cFit[ 3 ][ 0 ] = effcorr*eff_EndcapC_Xe; // Endcap C-side Xenon m_cFit[ 3 ][ 1 ] = err_Endcap_Xe; - m_cFit[ 3 ][ 2 ] = coreFrac_Xe; + m_cFit[ 3 ][ 2 ] = coreFracEndcap_Xe; m_cFit[ 3 ][ 3 ] = res1corr*coreRes_Endcap_Xe; m_cFit[ 3 ][ 4 ] = res2corr*tailRes; m_cFit[ 4 ][ 0 ] = effcorr*eff_BarrelA_Ar; // Barrel A-side Argon m_cFit[ 4 ][ 1 ] = err_Barrel_Ar; - m_cFit[ 4 ][ 2 ] = coreFrac_Ar; + m_cFit[ 4 ][ 2 ] = coreFracBarrel_Ar; m_cFit[ 4 ][ 3 ] = res1corr*coreRes_Barrel_Ar; m_cFit[ 4 ][ 4 ] = res2corr*tailRes; m_cFit[ 5 ][ 0 ] = effcorr*eff_EndcapA_Ar; // Endcap A-side Argon m_cFit[ 5 ][ 1 ] = err_Endcap_Ar; - m_cFit[ 5 ][ 2 ] = coreFrac_Ar; + m_cFit[ 5 ][ 2 ] = coreFracEndcap_Ar; m_cFit[ 5 ][ 3 ] = res1corr*coreRes_Endcap_Ar; m_cFit[ 5 ][ 4 ] = res2corr*tailRes; m_cFit[ 6 ][ 0 ] = effcorr*eff_BarrelC_Ar; // Barrel C-side Argon m_cFit[ 6 ][ 1 ] = err_Barrel_Ar; - m_cFit[ 6 ][ 2 ] = coreFrac_Ar; + m_cFit[ 6 ][ 2 ] = coreFracBarrel_Ar; m_cFit[ 6 ][ 3 ] = res1corr*coreRes_Barrel_Ar; m_cFit[ 6 ][ 4 ] = res2corr*tailRes; m_cFit[ 7 ][ 0 ] = effcorr*eff_EndcapC_Ar; // Endcap C-side Argon m_cFit[ 7 ][ 1 ] = err_Endcap_Ar; - m_cFit[ 7 ][ 2 ] = coreFrac_Ar; + m_cFit[ 7 ][ 2 ] = coreFracEndcap_Ar; m_cFit[ 7 ][ 3 ] = res1corr*coreRes_Endcap_Ar; m_cFit[ 7 ][ 4 ] = res2corr*tailRes; @@ -385,8 +391,15 @@ StatusCode TRTFastDigitizationTool::produceDriftCircles() { if ( m_useTrtElectronPidTool ) { double position = ( fabs(BEC) == 1 ? hitGlobalPosition.z() : hitGlobalPosition.perp() ); - // double probability = getProbHT( particleEncoding, kineticEnergy, straw_id, driftRadiusLoc, position ); - double probability = getProbHT( particleEncoding, kineticEnergy, straw_id, smearedRadius, position); + double probability; + if ( abs( particleEncoding ) == 11 && kineticEnergy > 5000. ) { // electron + probability = m_trtHighProbabilityBoostEle*getProbHT( particleEncoding, kineticEnergy, straw_id, smearedRadius, position); + } + else{ + probability = m_trtHighProbabilityBoostBkg*getProbHT( particleEncoding, kineticEnergy, straw_id, smearedRadius, position); + } + + // double probability = getProbHT( particleEncoding, kineticEnergy, straw_id, smearedRadius, position); if ( CLHEP::RandFlat::shoot( m_randomEngine ) < probability ) word |= maskHT; } else {