Skip to content

Commit

Permalink
Merge pull request #3 from Arash-Jofrehei/Phase2Digitizer_XTALK_011118
Browse files Browse the repository at this point in the history
Phase2 digitizer xtalk 011118
  • Loading branch information
suchandradutta authored Nov 3, 2018
2 parents e72e7bf + 6e920a7 commit a1dfcd4
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ Phase2TrackerDigitizerAlgorithm::Phase2TrackerDigitizerAlgorithm(const edm::Para
GeVperElectron(3.61E-09), // 1 electron(3.61eV, 1keV(277e, mod 9/06 d.k.
alpha2Order(conf_specific.getParameter<bool>("Alpha2Order")), // switch on/off of E.B effect
addXtalk(conf_specific.getParameter<bool>("AddXTalk")),
interstripCoupling(conf_specific.getParameter<double>("InterstripCoupling")), // Interstrip Coupling
interstripCoupling(conf_specific.getParameter<double>("InterstripCoupling")), // Interstrip Coupling - Not used in PixelDigitizerAlgorithm

Sigma0(conf_specific.getParameter<double>("SigmaZero")), // Charge diffusion constant 7->3.7
SigmaCoeff(conf_specific.getParameter<double>("SigmaCoeff")), // delta in the diffusion across the strip pitch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class Phase2TrackerDigitizerAlgorithm {
//-- drift
const bool alpha2Order; // Switch on/off of E.B effect
const bool addXtalk;
const float interstripCoupling;
const float interstripCoupling;
const float Sigma0; //=0.0007 // Charge diffusion in microns for 300 micron Si
const float SigmaCoeff; // delta in the diffusion across the strip pitch

Expand Down
47 changes: 38 additions & 9 deletions SimTracker/SiPhase2Digitizer/plugins/PixelDigitizerAlgorithm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ void PixelDigitizerAlgorithm::init(const edm::EventSetup& es) {

PixelDigitizerAlgorithm::PixelDigitizerAlgorithm(const edm::ParameterSet& conf) :
Phase2TrackerDigitizerAlgorithm(conf.getParameter<ParameterSet>("AlgorithmCommon"),
conf.getParameter<ParameterSet>("PixelDigitizerAlgorithm"))
conf.getParameter<ParameterSet>("PixelDigitizerAlgorithm")),
odd_row_interchannelCoupling_next_row(conf.getParameter<double>("Odd_row_interchannelCoupling_next_row")),
even_row_interchannelCoupling_next_row(conf.getParameter<double>("Even_row_interchannelCoupling_next_row")),
odd_column_interchannelCoupling_next_column(conf.getParameter<double>("Odd_column_interchannelCoupling_next_column")),
even_column_interchannelCoupling_next_column(conf.getParameter<double>("Even_column_interchannelCoupling_next_column"))
{
pixelFlag = true;
LogInfo("PixelDigitizerAlgorithm") << "Algorithm constructed "
Expand Down Expand Up @@ -129,25 +133,49 @@ void PixelDigitizerAlgorithm::add_cross_talk(const Phase2TrackerGeomDetUnit* pix
signal_map_type signalNew;
const Phase2TrackerTopology* topol = &pixdet->specificTopology();
int numRows = topol->nrows();
int numColumns = topol->ncolumns();

for (auto & s : theSignal) {
float signalInElectrons = s.second.ampl(); // signal in electrons
std::pair<int,int> hitChan;
hitChan = PixelDigi::channelToPixel(s.first);

float signalInElectrons_Xtalk = signalInElectrons * interstripCoupling;
//subtract the charge which will be shared
s.second.set(signalInElectrons-signalInElectrons_Xtalk);
float signalInElectrons_odd_row_Xtalk_next_row = signalInElectrons * odd_row_interchannelCoupling_next_row;
float signalInElectrons_even_row_Xtalk_next_row = signalInElectrons * even_row_interchannelCoupling_next_row;
float signalInElectrons_odd_column_Xtalk_next_column = signalInElectrons * odd_column_interchannelCoupling_next_column;
float signalInElectrons_even_column_Xtalk_next_column = signalInElectrons * even_column_interchannelCoupling_next_column;

if (hitChan.first != 0) {
//subtract the charge which will be shared
s.second.set(signalInElectrons-signalInElectrons_odd_row_Xtalk_next_row-signalInElectrons_even_row_Xtalk_next_row-signalInElectrons_odd_column_Xtalk_next_column-signalInElectrons_even_column_Xtalk_next_column);

if (hitChan.first != 0) {
std::pair<int,int> XtalkPrev = std::pair<int,int>(hitChan.first-1, hitChan.second);
int chanXtalkPrev = PixelDigi::pixelToChannel(XtalkPrev.first, XtalkPrev.second);
signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev, DigitizerUtility::Amplitude(signalInElectrons_Xtalk, nullptr, -1.0)));
int chanXtalkPrev = (pixelFlag) ? PixelDigi::pixelToChannel(XtalkPrev.first, XtalkPrev.second)
: Phase2TrackerDigi::pixelToChannel(XtalkPrev.first, XtalkPrev.second);
if (hitChan.first % 2 == 1) signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev, DigitizerUtility::Amplitude(signalInElectrons_even_row_Xtalk_next_row, nullptr, -1.0)));
else signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev, DigitizerUtility::Amplitude(signalInElectrons_odd_row_Xtalk_next_row, nullptr, -1.0)));
}
if (hitChan.first < (numRows-1)) {
std::pair<int,int> XtalkNext = std::pair<int,int>(hitChan.first+1, hitChan.second);
int chanXtalkNext = PixelDigi::pixelToChannel(XtalkNext.first, XtalkNext.second);
signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext, DigitizerUtility::Amplitude(signalInElectrons_Xtalk, nullptr, -1.0)));
int chanXtalkNext = (pixelFlag) ? PixelDigi::pixelToChannel(XtalkNext.first, XtalkNext.second)
: Phase2TrackerDigi::pixelToChannel(XtalkNext.first, XtalkNext.second);
if (hitChan.first % 2 == 1) signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext, DigitizerUtility::Amplitude(signalInElectrons_odd_row_Xtalk_next_row, nullptr, -1.0)));
else signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext, DigitizerUtility::Amplitude(signalInElectrons_even_row_Xtalk_next_row, nullptr, -1.0)));
}

if (hitChan.second != 0) {
std::pair<int,int> XtalkPrev = std::pair<int,int>(hitChan.first, hitChan.second-1);
int chanXtalkPrev = (pixelFlag) ? PixelDigi::pixelToChannel(XtalkPrev.first, XtalkPrev.second)
: Phase2TrackerDigi::pixelToChannel(XtalkPrev.first, XtalkPrev.second);
if (hitChan.second % 2 == 1) signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev, DigitizerUtility::Amplitude(signalInElectrons_even_column_Xtalk_next_column, nullptr, -1.0)));
else signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkPrev, DigitizerUtility::Amplitude(signalInElectrons_odd_column_Xtalk_next_column, nullptr, -1.0)));
}
if (hitChan.second < (numColumns-1)) {
std::pair<int,int> XtalkNext = std::pair<int,int>(hitChan.first, hitChan.second+1);
int chanXtalkNext = (pixelFlag) ? PixelDigi::pixelToChannel(XtalkNext.first, XtalkNext.second)
: Phase2TrackerDigi::pixelToChannel(XtalkNext.first, XtalkNext.second);
if (hitChan.second % 2 == 1) signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext, DigitizerUtility::Amplitude(signalInElectrons_odd_column_Xtalk_next_column, nullptr, -1.0)));
else signalNew.insert(std::pair<int,DigitizerUtility::Amplitude>(chanXtalkNext, DigitizerUtility::Amplitude(signalInElectrons_even_column_Xtalk_next_column, nullptr, -1.0)));
}
}
for (auto const & l : signalNew) {
Expand All @@ -161,3 +189,4 @@ void PixelDigitizerAlgorithm::add_cross_talk(const Phase2TrackerGeomDetUnit* pix
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,10 @@ class PixelDigitizerAlgorithm: public Phase2TrackerDigitizerAlgorithm {
const Phase2TrackerGeomDetUnit* pixdet,
const GlobalVector& bfield) override;
virtual void add_cross_talk(const Phase2TrackerGeomDetUnit* pixdet) override;
// Addition four xtalk-related parameters to PixelDigitizerAlgorithm specific parameters initialized in Phase2TrackerDigitizerAlgorithm
const double odd_row_interchannelCoupling_next_row;
const double even_row_interchannelCoupling_next_row;
const double odd_column_interchannelCoupling_next_column;
const double even_column_interchannelCoupling_next_column;
};
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@
Nbins = cms.int32(200),
xmin = cms.double(0.0),
xmax = cms.double(2000.))
pixDigiMon.ChargeXYMapH = cms.PSet(
Nxbins = cms.int32(450),
xmin = cms.double(0.5),
xmax = cms.double(450.5),
Nybins = cms.int32(1350),
ymin = cms.double(0.5),
ymax = cms.double(1350.5))
pixDigiMon.PositionOfDigisH = cms.PSet(
Nxbins = cms.int32(1350),
xmin = cms.double(0.5),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@
xmin = cms.double(-0.0001),
xmax = cms.double(0.005)
),
ChargeXYMapH = cms.PSet(
Nxbins = cms.int32(450),
xmin = cms.double(0.5),
xmax = cms.double(450.5),
Nybins = cms.int32(1350),
ymin = cms.double(0.5),
ymax = cms.double(1350.5)
),
PositionOfDigisH = cms.PSet(
Nxbins = cms.int32(1016),
xmin = cms.double(0.5),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
),
# Specific parameters
#Pixel Digitizer Algorithm
Odd_row_interchannelCoupling_next_row = cms.double(0.10), #D.B.
Even_row_interchannelCoupling_next_row = cms.double(0.01), #D.B.
Odd_column_interchannelCoupling_next_column = cms.double(0.01), #D.B.
Even_column_interchannelCoupling_next_column = cms.double(0.01), #D.B.
PixelDigitizerAlgorithm = cms.PSet(
ElectronPerAdc = cms.double(600.0),
ReadoutNoiseInElec = cms.double(0.0),
Expand All @@ -38,7 +42,7 @@
Alpha2Order = cms.bool(True), #D.B.: second order effect, does not switch off magnetic field as described
AddNoise = cms.bool(False),
AddXTalk = cms.bool(True), #D.B.
InterstripCoupling = cms.double(0.05), #D.B.
InterstripCoupling = cms.double(0.0), #D.B. # No need to be used in PixelDigitizerAlgorithm
SigmaZero = cms.double(0.00037), #D.B.: 3.7um spread for 300um-thick sensor, renormalized in digitizerAlgo
SigmaCoeff = cms.double(1.80), #D.B.: to be confirmed with simulations in CMSSW_6.X
ClusterWidth = cms.double(3), #D.B.: this is used as number of sigmas for charge collection (3=+-3sigmas)
Expand Down
14 changes: 13 additions & 1 deletion SimTracker/SiPhase2Digitizer/test/Phase2TrackerMonitorDigi.cc
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ void Phase2TrackerMonitorDigi::fillITPixelDigiHistos(const edm::Handle<edm::DetS
nDigi++;
edm::LogInfo("Phase2TrackerMonitorDigi")<< " column " << col << " row " << row <<
std::dec << std::endl;
local_mes.ChargeXYMap->Fill(col, row, adc);
local_mes.PositionOfDigis->Fill(row+1, col+1);
if (local_mes.ChargeOfDigis) local_mes.ChargeOfDigis->Fill(adc);
if (row_last == -1 ) {
Expand Down Expand Up @@ -425,7 +426,18 @@ void Phase2TrackerMonitorDigi::bookLayerHistos(DQMStore::IBooker & ibooker, unsi
local_mes.EtaOccupancyProfP = ibooker.bookProfile(HistoName.str(), HistoName.str(),
EtaParameters.getParameter<int32_t>("Nbins"),EtaParameters.getParameter<double>("xmin"),EtaParameters.getParameter<double>("xmax"),
Parameters.getParameter<double>("xmin"),Parameters.getParameter<double>("xmax"),"");


Parameters = config_.getParameter<edm::ParameterSet>("ChargeXYMapH");
HistoName.str("");
HistoName << "ChargeXYMap_" << fname2.str().c_str();
local_mes.ChargeXYMap = ibooker.book2D(HistoName.str(), HistoName.str(),
Parameters.getParameter<int32_t>("Nxbins"),
Parameters.getParameter<double>("xmin"),
Parameters.getParameter<double>("xmax"),
Parameters.getParameter<int32_t>("Nybins"),
Parameters.getParameter<double>("ymin"),
Parameters.getParameter<double>("ymax"));

Parameters = config_.getParameter<edm::ParameterSet>("PositionOfDigisH");
HistoName.str("");
HistoName << "PositionOfDigis_" << fname2.str().c_str();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ class Phase2TrackerMonitorDigi : public DQMEDAnalyzer{
MonitorElement* NumberOfDigisPerDet;
MonitorElement* DigiOccupancyP;
MonitorElement* DigiOccupancyS;
MonitorElement* ChargeXYMap;
MonitorElement* PositionOfDigis;
MonitorElement* ChargeOfDigis;
MonitorElement* ChargeOfDigisVsWidth;
Expand Down

0 comments on commit a1dfcd4

Please sign in to comment.