Commit ca92fc05 authored by Christopher Rob Jones's avatar Christopher Rob Jones
Browse files

Merge branch 'RichTTFUStudies' into 'RichTTFUStudies'

Update RichTTFUStudies

See merge request !144
parents 3f755e0f cea81dfa
......@@ -508,14 +508,22 @@ class Boole(LHCbConfigurableUser):
if tae == "":
from Configurables import RichDigiSysConf
self.setOtherProp(RichDigiSysConf(),"UseSpillover")
self.setOtherProp(RichDigiSysConf(),"DataType")
RichDigiSysConf().Sequencer = GaudiSequencer("DigiRichSeq")
# Apply some additional settings if using upgrade Rich
if [det for det in self.getProp("DetectorDigi") if det in ["Rich1Pmt", "Rich2Pmt"]]:
RichDigiSysConf().ChargeShareModel = "None"
RichDigiSysConf().ResponseModel = "Copy"
RichDigiSysConf().OutputLevel = INFO
RichDigiSysConf().RawDataFormatVersion = 6
RichDigiSysConf().UseSpillover = False
#if [det for det in self.getProp("DetectorDigi") if det in ["Rich1Pmt", "Rich2Pmt"]]:
#self.setOtherProp(RichDigiSysConf(),"DataType")
else:
raise RuntimeError("TAE not implemented for RICH")
......
<?xml version="1.0" ?><!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
<extension class="GaudiTest.GaudiExeTest" kind="test">
<argument name="program"><text>gaudirun.py</text></argument>
<argument name="args"><set>
<text>$BOOLEROOT/options/boole-minimalist-upgrade-xdigi-reprocessing.py</text>
<text>$BOOLEROOT/tests/options/boole-upgrade-reprocessing-xdigi.py</text>
</set></argument>
<argument name="reference"><text>../refs/boole-reprocess-xdigi.ref</text></argument>
<argument name="validator"><text>
from Boole.QMTest.BooleExclusions import preprocessor
validateWithReference(preproc = preprocessor)
</text></argument>
</extension>
<?xml version="1.0" ?><!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
<extension class="GaudiTest.GaudiExeTest" kind="test">
<argument name="program"><text>gaudirun.py</text></argument>
<argument name="args"><set>
<text>$BOOLEROOT/options/boole-minimalist-upgrade-xdigi-reprocessing.py</text>
<text>$BOOLEROOT/tests/options/boole-upgrade-reprocessing-xdigi.py</text>
</set></argument>
<argument name="options"><text>
from Configurables import Boole
Boole().DisableTiming = True
</text></argument>
<argument name="reference"><text>../refs/boole-reprocess-xdigi.ref</text></argument>
<argument name="validator"><text>
from Boole.QMTest.BooleExclusions import preprocessor
validateWithReference(preproc = preprocessor)
</text></argument>
</extension>
<?xml version="1.0" ?><!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
<extension class="GaudiTest.GaudiExeTest" kind="test">
<argument name="program"><text>gaudirun.py</text></argument>
<argument name="args"><set>
<text>$BOOLEROOT/options/boole-minimalist-upgrade-reprocessing.py</text>
<text>$BOOLEROOT/tests/options/boole-upgrade-reprocessing-xdst.py</text>
</set></argument>
<argument name="reference"><text>../refs/boole-reprocess-xdst.ref</text></argument>
<argument name="validator"><text>
from Boole.QMTest.BooleExclusions import preprocessor
validateWithReference(preproc = preprocessor)
</text></argument>
</extension>
<?xml version="1.0" ?><!DOCTYPE extension PUBLIC '-//QM/2.3/Extension//EN' 'http://www.codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
<extension class="GaudiTest.GaudiExeTest" kind="test">
<argument name="program"><text>gaudirun.py</text></argument>
<argument name="args"><set>
<text>$BOOLEROOT/options/boole-minimalist-upgrade-reprocessing.py</text>
<text>$BOOLEROOT/tests/options/boole-upgrade-reprocessing-xdst.py</text>
</set></argument>
<argument name="options"><text>
from Configurables import Boole
Boole().DisableTiming = True
</text></argument>
<argument name="reference"><text>../refs/boole-reprocess-xdst.ref</text></argument>
<argument name="validator"><text>
from Boole.QMTest.BooleExclusions import preprocessor
validateWithReference(preproc = preprocessor)
</text></argument>
</extension>
......@@ -11,6 +11,7 @@ from PRConfig import TestFileDB
Boole().DataType="Upgrade"
Boole().Monitors = ["SC","FPE"]
Boole().DisableTiming = True
TestFileDB.test_file_db['upgrade-baseline-FT61-sim'].run()
......
......@@ -6,7 +6,7 @@
<text>$APPCONFIGOPTS/Boole/Boole-Upgrade-NoSPDPRS.py</text>
<text>$APPCONFIGOPTS/Boole/patchUpgrade1.py</text>
</set></argument>
<argument name="options"><text>from Configurables import Boole; Boole().DataType="Upgrade"; Boole().Monitors = ["SC", "FPE"]; from PRConfig import TestFileDB; TestFileDB.test_file_db['upgrade-calo_nospdprs-sim'].run();</text></argument>
<argument name="options"><text>from Configurables import Boole; Boole().DataType="Upgrade"; Boole().Monitors = ["SC", "FPE"]; Boole().DisableTiming = True; from PRConfig import TestFileDB; TestFileDB.test_file_db['upgrade-calo_nospdprs-sim'].run();</text></argument>
<argument name="reference"><text>$BOOLEROOT/tests/refs/boole-upgrade-calo_nospdprs.ref</text></argument>
<argument name="error_reference"><text>$BOOLEROOT/tests/refs/boole-upgrade-err.ref</text></argument>
<argument name="validator"><text>
......
......@@ -5,7 +5,7 @@
<text>$APPCONFIGOPTS/Boole/Boole-Upgrade-Reference.py</text>
<text>$APPCONFIGOPTS/Boole/patchUpgrade1.py</text>
</set></argument>
<argument name="options"><text>from Configurables import Boole; Boole().Monitors = ["SC", "FPE"]; from PRConfig import TestFileDB; TestFileDB.test_file_db['upgrade-minimal-sim'].run();</text></argument>
<argument name="options"><text>from Configurables import Boole; Boole().Monitors = ["SC", "FPE"]; Boole().DisableTiming = True; from PRConfig import TestFileDB; TestFileDB.test_file_db['upgrade-minimal-sim'].run();</text></argument>
<argument name="reference"><text>$BOOLEROOT/tests/refs/boole-upgrade-minimal.ref</text></argument>
<argument name="error_reference"><text>$BOOLEROOT/tests/refs/boole-upgrade-err.ref</text></argument>
<argument name="validator"><text>
......
......@@ -63,7 +63,7 @@ void FTLiteClusterMonitor::operator()(const FTLiteClusters& clusters,
int clustersInSiPM = 0;
// Loop over FTLiteCluster
for ( const auto cluster : clusters ) {
for ( const auto& cluster : clusters ) {
// Get the FTChannelID
LHCb::FTChannelID chanID = cluster.channelID();
// Get all MCHits linked to this (lite)cluster
......
......@@ -54,7 +54,7 @@ StatusCode FTSiPMTool::initialize(){
// Set thermal noise probability in 25 ns window
m_noiseProb = (m_rateThermalNoise/m_readoutFrequency)
* (m_sipmIrradiation / m_referenceIrradiation)
* pow(2, (m_sipmTemperature - m_referenceTemperature)/m_temperatureCoefficient);
* std::pow(2, (m_sipmTemperature - m_referenceTemperature)/m_temperatureCoefficient);
// Number of noise deposits over total detector, in m_numNoiseWindows readout windows.
int nChan = m_deFT->nChannels();
......
......@@ -54,10 +54,10 @@ LHCb::FTChannelID MCFTDistributionChannelTool::targetChannel(double posX,
const DeFTMat& mat) {
// check if photon hits sipm in z dir
if( std::abs( findFinalPosSlope(posZ, dZdY) ) <= m_channelSizeZ/2. ) {
double frac = 0.0;
float frac = 0.0;
LHCb::FTChannelID channel =
mat.calculateChannelAndFrac( findFinalPosSlope(posX, dXdY), frac );
return ( std::abs(frac) < 0.5 ) ? channel : LHCb::FTChannelID(0);
return ( std::abs(frac) < 0.5f ) ? channel : LHCb::FTChannelID(0);
}
else {
return {0};
......
......@@ -65,7 +65,7 @@ std::vector<std::pair<Gaudi::XYZPoint,double>>
// Calculate slopes and total path
double path_x = exPoint.X() - enPoint.X();
double path_z = exPoint.Z() - enPoint.Z();
double path_total = sqrt( pow(path_x,2) + pow(path_z,2) );
double path_total = sqrt( std::pow(path_x,2) + std::pow(path_z,2) );
double dx_over_dz = path_x/path_z;
double dy_over_dz = (exPoint.Y() - enPoint.Y())/path_z;
......@@ -100,7 +100,7 @@ std::vector<std::pair<Gaudi::XYZPoint,double>>
m_fibreCoreRadius) {
double minDist = MCFT::minDistanceFromLineToPoint( vec_en, vec_ex,
vec_fibre_center );
double secant_halflength = sqrt(pow(m_fibreCoreRadius,2) - pow(minDist,2));
double secant_halflength = sqrt(std::pow(m_fibreCoreRadius,2) - std::pow(minDist,2));
// Split needed to handle the case where MCHit does not fully traverse layer.
double dist_in_core = 0.;
......@@ -199,7 +199,7 @@ std::vector<std::pair<Gaudi::XYZPoint,double>>
double MCFT::distanceToSquared( const Vec2& v, const Vec2& p )
{
return pow(p(0)-v(0),2) + pow(p(1)-v(1),2);
return std::pow(p(0)-v(0),2) + std::pow(p(1)-v(1),2);
}
double MCFT::distanceTo( const Vec2& v, const Vec2& p )
......
......@@ -35,6 +35,12 @@ class RichDigiSysConf(LHCbConfigurableUser):
,"RawDataFormatVersion" : 129
,"Sequencer" : None
,"OutputLevel" : INFO
,"Threshold" : 0.1
,"ElectronicNoise" : False
,"SpilloverModel" : "None"
,"CrossTalk" : False
,"ChargeSharing" : False
,"DataType" : ""
}
def makeComponent(self, type, name):
......@@ -46,6 +52,23 @@ class RichDigiSysConf(LHCbConfigurableUser):
# @param sequence The GaudiSequencer to add the RICH digitisation to
def applyConf(self) :
if self.getProp("DataType") == "Upgrade":
#default behaviour for RICH Upgrade
if not self.isPropertySet("ChargeShareModel"):
self.ChargeShareModel = "None"
if not self.isPropertySet("ResponseModel"):
self.ResponseModel = "DetailedPMT"
if not self.isPropertySet("OutputLevel"):
self.OutputLevel = INFO
if not self.isPropertySet("RawDataFormatVersion"):
self.RawDataFormatVersion = 3
#if not self.isPropertySet("UseSpillover"):
# self.UseSpillover = False
if self.getProp("UseSpillover") == True:
if not self.isPropertySet("SpilloverModel"):
self.SpilloverModel = "PrevNext"
sequence = self.getProp("Sequencer")
# Process the raw hit signals.
......@@ -79,6 +102,13 @@ class RichDigiSysConf(LHCbConfigurableUser):
response = self.makeComponent(Rich__MC__Digi__CopySummedDepositsToDigits,"RichPDResponse")
elif hpdModel == "DetailedPMT" :
response = self.makeComponent(Rich__MC__Digi__DetailedFrontEndResponsePMT,"RichPDResponse")
response.Threshold = self.getProp("Threshold")
response.SpilloverModel = self.getProp("SpilloverModel")
#response.ElectronicNoise = self.getProp("ElectronicNoise")
response.CrossTalk = self.getProp("CrossTalk")
response.ChargeSharing = self.getProp("ChargeSharing");
else :
raise RuntimeError("ERROR : Unknown HPD Response model '%s'"%hpdModel)
sequence.Members += [response]
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
......@@ -6,6 +6,7 @@ using namespace Rich::MC::Digi;
//-----------------------------------------------------------------------------
// Implementation file for class : RichDetailedFrontEndResponsePMT
// 2015-10-08 : Marcin Kucharczyk, Mariusz Witek
// 2017-07-22: Bartosz Malecki
//-----------------------------------------------------------------------------
DECLARE_COMPONENT( DetailedFrontEndResponsePMT )
......@@ -19,8 +20,9 @@ DetailedFrontEndResponsePMT::DetailedFrontEndResponsePMT(
LHCb::MCRichDigitLocation::Default);
declareProperty("ChargeSharing",m_chargeSharing = false);
declareProperty("CrossTalk",m_crossTalk = false);
declareProperty("Spillover",m_spillover = false);
declareProperty("SpilloverModel",m_spillover = "None");
declareProperty("ElectronicNoise",m_electronicNoise = false);
declareProperty("Threshold",m_threshold = 0.1);
}
StatusCode DetailedFrontEndResponsePMT::initialize()
......@@ -37,7 +39,8 @@ StatusCode DetailedFrontEndResponsePMT::initialize()
// Load parameters from database
m_propertyTool = tool<RichChannelPropertiesPMT>("RichChannelPropertiesPMT",
this);
m_propertyTool->ReadChannelParameters(pixels);
sc = m_propertyTool->ReadChannelParameters(pixels);
if(!sc) return Error("Failed to read channel parameters",sc);
// Parameters - temporary solution!
// In the future they will be loaded for every pixel from database using
// RichChannelPropertiesPMT tool
......@@ -70,7 +73,17 @@ StatusCode DetailedFrontEndResponsePMT::initialize()
m_claroShape.reserve(m_frameLength);
getClaroShape();
// Random number generators
sc = m_gaussGain.initialize(randSvc(),Rndm::Gauss(0.0,1.0));
//temporary solution for getting realistic pixel gain (m_marocGain gives values in 0-1: needs to be *=3)
int myPdf_array[] = {0,26801,22610,23930,27468,35280,61312,65897,77483,81007,71960,64249,29524,15574,7972,4810,4182,2745,2420,1974,1590,1389,716,479,307,195,149,56,61,39,25,28,9,7,2,2,0,3,3,1,1,0,0,0,0,0,0,0,0,0};
const std::vector<double> m_marocPdf (myPdf_array, myPdf_array + sizeof(myPdf_array) / sizeof(int) );
//his_ref = histoSvc()->book( "MyPdf", "MyPdf", 50, 0., 3.);
//his_ref_1 = histoSvc()->book( "summedDeposit", "summedDeposit/0.02", 50, 0., 5.);
//his_ref_2 = histoSvc()->book( "NPhotons", "NPhotons", 50, 0., 3.);
//his_ref_3 = histoSvc()->book( "NE", "NE", 50, 0., 3.);
sc = m_marocGain.initialize(randSvc(),Rndm::DefinedPdf(m_marocPdf,0));
if(sc.isFailure()) return Error("Failed to initialize Rndm",sc);
sc = m_gaussTZero.initialize(randSvc(),Rndm::Gauss(m_meanTZero,m_sigmaTZero));
if(sc.isFailure()) return Error("Failed to initialize Rndm",sc);
......@@ -84,7 +97,7 @@ StatusCode DetailedFrontEndResponsePMT::initialize()
StatusCode DetailedFrontEndResponsePMT::finalize()
{
const auto sc = (m_gaussGain.finalize() &&
const auto sc = (m_marocGain.finalize() &&
m_gaussENoise.finalize() &&
m_gaussTZero.finalize());
if( !sc ) {
......@@ -128,17 +141,14 @@ StatusCode DetailedFrontEndResponsePMT::Analog()
_ri_debug << "Pixel size (0:small, 1:large) = " << grandPixel << endmsg;
// Equivalence of given summed deposit in nr of photons (E = 0.02)
const int nrPhotons = (int)((*iSD)->summedEnergy() / 0.02);
//his_ref_1->fill((*iSD)->summedEnergy() / 0.02,1.0);
//his_ref_2->fill(nrPhotons,1.0);
// Nr of electrons from single photon - gain in pixel (up to 3-4)
double gain = -1.0;
if(!grandPixel) {
while(gain < 0.0) gain = getPixelGain(m_meanGainSmallPix,
m_sigmaGainSmallPix);
} else {
while(gain < 0.0) gain = getPixelGain(m_meanGainLargePix,
m_sigmaGainLargePix);
}
float gain = getPixelGain();
// Number of electrons per channel (in mln)
double NE = nrPhotons * gain;
float NE = nrPhotons * gain;
//his_ref_3->fill(NE,1.0);
// Load information for every channel
PMTChannel channel;
channel.summedDeposit = *iSD;
......@@ -159,9 +169,9 @@ StatusCode DetailedFrontEndResponsePMT::Analog()
LHCb::RichSmartID smartID = channel.richPMTSmartID;
unsigned int pixelRow = smartID.pixelRow();
unsigned int pixelCol = smartID.pixelCol();
double meanXTalkHorz = m_meanXTalkHorzSmall;
double meanXTalkVert = m_meanXTalkVertSmall;
double meanXTalkDiag = m_meanXTalkDiagSmall;
float meanXTalkHorz = m_meanXTalkHorzSmall;
float meanXTalkVert = m_meanXTalkVertSmall;
float meanXTalkDiag = m_meanXTalkDiagSmall;
if(channel.grandPixel) {
meanXTalkHorz = m_meanXTalkHorzLarge;
meanXTalkVert = m_meanXTalkVertLarge;
......@@ -242,7 +252,7 @@ StatusCode DetailedFrontEndResponsePMT::Analog()
// TIME SAMPLING
for(unsigned int i = 0; i < channels.size() ; ++i) {
std::vector<double> timeShape;
std::vector<float> timeShape;
timeShape.reserve(m_frameLength);
timeShape = timeSampling(channels.at(i).NE);
channels.at(i).timeShape = timeShape;
......@@ -264,19 +274,19 @@ StatusCode DetailedFrontEndResponsePMT::Digital()
for(unsigned int i = 0; i < m_channels.size() ; ++i) {
iLoop++;
// Threshold (cut off 5% of NE distribution (from left))
double threshold = m_thresholdSmall * m_amplification;
if(m_channels.at(i).grandPixel) threshold = m_thresholdLarge *
m_amplification;
// Smearing from electronic noise
float threshold = m_threshold;
//float threshold = m_thresholdSmall * m_amplification;
//if(m_channels.at(i).grandPixel) threshold = m_thresholdLarge * m_amplification;
// Smearing from electronic noise
if(m_electronicNoise) threshold += m_gaussENoise();
int iTimeShift = 0;
double timeShift = 999999.0;
float timeShift = 999999.0;
int aboveThreshold = 0;
for(std::vector<double>::iterator iTS =
m_channels.at(i).timeShape.begin();
for(std::vector<float>::iterator iTS =
m_channels.at(i).timeShape.begin();
iTS != m_channels.at(i).timeShape.end(); ++iTS) {
if((*iTS) > threshold) {
timeShift = (double)iTimeShift * (m_FPGAwindow / m_frameLength);
timeShift = (float)iTimeShift * (m_FPGAwindow / m_frameLength);
aboveThreshold = 1;
break;
}
......@@ -286,9 +296,14 @@ StatusCode DetailedFrontEndResponsePMT::Digital()
// SPILLOVER
// Do not save digit if there was a signal in corresponding
// channel from 'Prev' signal photon
if(m_spillover) {
if(!m_spillover.compare("PrevNext") ) {
if(m_channels.at(i).summedDeposit->history().prevEvent()) continue;
if(m_channels.at(i).summedDeposit->history().nextEvent()) continue;
}
else if (!m_spillover.compare("Prev") ) {
if(m_channels.at(i).summedDeposit->history().prevEvent()) continue;
}
// Create MCRichHit links
LHCb::MCRichDigitHit::Vector hitVect;
const auto & deps = m_channels.at(i).summedDeposit->deposits();
......@@ -334,10 +349,9 @@ void DetailedFrontEndResponsePMT::getClaroShape()
//=============================================================================
// Get pixel gain
//=============================================================================
double DetailedFrontEndResponsePMT::getPixelGain(double mean, double sigma)
float DetailedFrontEndResponsePMT::getPixelGain()
{
double pixelGain = m_gaussGain();
pixelGain = pixelGain * sigma + mean;
float pixelGain = m_marocGain()*3;
return pixelGain;
}
......@@ -345,12 +359,12 @@ double DetailedFrontEndResponsePMT::getPixelGain(double mean, double sigma)
//=============================================================================
// Time sampling (shape from CLARO)
//=============================================================================
std::vector<double> DetailedFrontEndResponsePMT::timeSampling(double NE)
std::vector<float> DetailedFrontEndResponsePMT::timeSampling(float NE)
{
std::vector<double> timeShape;
std::vector<float> timeShape;
timeShape.reserve(m_frameLength);
// Time zero: from detection to aquisition (up to 10 ns (~2 sigma))
double tZero = -1.0;
float tZero = -1.0;
while((tZero < 0.0) || (tZero > m_maxTZero)) tZero = m_gaussTZero();
// Bin number corresponding to timeZero
const unsigned int binZero = (int)(tZero / (m_FPGAwindow / m_frameLength));
......@@ -393,11 +407,11 @@ LHCb::RichSmartID DetailedFrontEndResponsePMT::setRichPmtSmartID(
StatusCode DetailedFrontEndResponsePMT::addChannel(LHCb::RichSmartID smartID,
LHCb::MCRichSummedDeposit*
summedDeposit,
double NE,
float NE,
unsigned int pixelRow,
unsigned int pixelCol,
double chSharing,
double crossTalk)
float chSharing,
float crossTalk)
{
LHCb::RichSmartID newSmartID = setRichPmtSmartID(smartID.rich(),
smartID.panel(),
......@@ -425,9 +439,9 @@ StatusCode DetailedFrontEndResponsePMT::addChannel(LHCb::RichSmartID smartID,
PMTChannel newChannel;
newChannel.summedDeposit = summedDeposit;
newChannel.richPMTSmartID = newSmartID;
double chSharingNE = 0.0;
float chSharingNE = 0.0;
if(m_chargeSharing) chSharingNE = NE * chSharing;
double crossTalkNE = 0.0;
float crossTalkNE = 0.0;
if(m_crossTalk) crossTalkNE = NE * crossTalk;
newChannel.NE = chSharingNE + crossTalkNE;
newChannel.isCSCT = 1;
......
......@@ -42,6 +42,10 @@
#include "RichBase.h"
#include "RichChannelPropertiesPMT.h"
//#include "GaudiKernel/IHistogramSvc.h"
//#include "AIDA/IHistogram1D.h"
//using AIDA::IHistogram1D;
/** @class DetailedFrontEndResponsePMT DetailedFrontEndResponsePMT.h
*
......@@ -75,8 +79,8 @@ namespace Rich
StatusCode Analog();
StatusCode Digital();
int getPixelSize(LHCb::RichSmartID smartID);
double getPixelGain(double mean, double sigma);
std::vector<double> timeSampling(double NE);
float getPixelGain();
std::vector<float> timeSampling(float NE);
LHCb::RichSmartID setRichPmtSmartID(Rich::DetectorType rich,
Rich::Side panel,
unsigned int pdCol,
......@@ -85,16 +89,16 @@ namespace Rich
unsigned int pixelCol);
StatusCode addChannel(LHCb::RichSmartID smartID,
LHCb::MCRichSummedDeposit* summedDeposit,
double NE,
float NE,
unsigned int pixelRow,
unsigned int pixelCol,
double chSharing,
double crossTalk);
float chSharing,
float crossTalk);
bool checkSpillover(std::vector<const LHCb::MCRichHit*> mcRichHits,
const std::string& hitLocation,
LHCb::RichSmartID RichSmartID,
double timeOffset,
double timeShift);
float timeOffset,
float timeShift);
private:
......@@ -103,50 +107,56 @@ namespace Rich
RichChannelPropertiesPMT* m_propertyTool = nullptr;
bool m_chargeSharing;
bool m_crossTalk;
bool m_spillover;
std::string m_spillover;
bool m_electronicNoise;
LHCb::MCRichSummedDeposits* m_sDeposits = nullptr;
Rndm::Numbers m_gaussGain;
double m_meanGainSmallPix;
double m_sigmaGainSmallPix;
double m_meanGainLargePix;
double m_sigmaGainLargePix;
double m_horizontalChSharing;
double m_verticalChSharing;
double m_diagonalChSharing;
double m_meanXTalkHorzSmall;
double m_meanXTalkVertSmall;
double m_meanXTalkDiagSmall;
double m_meanXTalkHorzLarge;
double m_meanXTalkVertLarge;
double m_meanXTalkDiagLarge;
double m_amplification;
double m_FPGAwindow;
double m_claroShapePar1;
double m_claroShapePar2;
Rndm::Numbers m_marocGain;
//IHistogram1D* his_ref;
//IHistogram1D* his_ref_1;
//IHistogram1D* his_ref_2;
//IHistogram1D* his_ref_3;
float m_meanGainSmallPix;
float m_sigmaGainSmallPix;
float m_meanGainLargePix;
float m_sigmaGainLargePix;
float m_horizontalChSharing;
float m_verticalChSharing;
float m_diagonalChSharing;
float m_meanXTalkHorzSmall;
float m_meanXTalkVertSmall;
float m_meanXTalkDiagSmall;
float m_meanXTalkHorzLarge;
float m_meanXTalkVertLarge;
float m_meanXTalkDiagLarge;
float m_amplification;
float m_FPGAwindow;
float m_claroShapePar1;
float m_claroShapePar2;
unsigned int m_frameLength;
std::vector<double> m_claroShape;
std::vector<float> m_claroShape;
Rndm::Numbers m_gaussTZero;
double m_meanTZero;
double m_sigmaTZero;
double m_maxTZero;
float m_meanTZero;
float m_sigmaTZero;
float m_maxTZero;
Rndm::Numbers m_gaussENoise;
double m_meanENoise;
double m_sigmaENoise;
double m_thresholdSmall;
double m_thresholdLarge;
float m_meanENoise;
float m_sigmaENoise;
float m_thresholdSmall;
float m_thresholdLarge;
float m_threshold;
class PMTChannel {
public:
LHCb::MCRichSummedDeposit* summedDeposit;
LHCb::RichSmartID richPMTSmartID;
bool grandPixel;
double NE;
std::vector<double> timeShape;
float NE;
std::vector<float> timeShape;
int isCSCT;
};
std::vector<PMTChannel> m_channels;
std::vector<PMTChannel> m_channelsToCheck;
std::vector<double> m_timeShift;
std::vector<float> m_timeShift;
};
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment