diff --git a/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/STGC_DigitToRDO.cxx b/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/STGC_DigitToRDO.cxx index f30e3d92a5e5c2eb039f383d2076fd6594341af6..7da306246ab6551d7b8d4d86044dbe32d05d848e 100644 --- a/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/STGC_DigitToRDO.cxx +++ b/MuonSpectrometer/MuonCnv/MuonByteStreamCnvTest/src/STGC_DigitToRDO.cxx @@ -54,7 +54,8 @@ StatusCode STGC_DigitToRDO::execute(const EventContext& ctx) const uint16_t bcTag = digit->bcTag(); // keep the time as a float for now, but it should also become an int float time = digit->time(); - uint16_t charge = (uint16_t) digit->charge_10bit(); + //uint16_t charge = (uint16_t) digit->charge_10bit(); + uint16_t charge = (uint16_t) digit->charge(); // 10bit charge conversion to PDO is done else where as a quick fix for now; correct version incoming in the next few days bool isDead = digit->isDead(); STGC_RawData* rdo = new STGC_RawData(id, bcTag, time, charge, isDead); coll->push_back(rdo); diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/share/sTGC_Digitization_VMM.config b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/share/sTGC_Digitization_VMM.config index ddb55a4577ddcb3f3a35ed7c9e71d7b6d51e74f8..f74723dcaa1dc16db822d0ec6bb9b76bbaafd8ad 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/share/sTGC_Digitization_VMM.config +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/share/sTGC_Digitization_VMM.config @@ -1,4 +1,4 @@ neighborON 1 -mainThreshold 0.05 +mainThreshold 0.02 neighborThreshold 0.0 -readoutTick 1 \ No newline at end of file +readoutTick 1 diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx index 83e62ecae4c011e17d55f21736a8dad8db1006a9..596d29c1d5d597d4a2c118a06b000f6c788078d7 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx @@ -275,10 +275,18 @@ sTgcDigitCollection* sTgcDigitMaker::executeDigi(const sTGCSimHit* hit, const fl int NumberOfStrips = detEl->numberOfStrips(newId); double stripHalfWidth = detEl->channelPitch(newId)*0.5; // 3.2/2 = 1.6 mm + //************************************ conversion of energy to charge ************************************** + + // Constant determined from ionization study within Garfield + // Note titled Charge Energy Relation which outlines conversion can be found here https://cernbox.cern.ch/index.php/apps/files/?dir=/__myshares/Documents (id:274113) + double ionized_charge = (5.65E-6)*energyDeposit/CLHEP::keV; // initial ionized charge in pC per keV deposited + double gain = 1.6E5; // mean value for total gain due to E field; needs to be verified; statistical flucuation calculation incoming + double total_charge = gain*ionized_charge; // total charge after avalanche using average gain of 2E5 + //************************************ spread charge among readout element ************************************** //spread charge to a gaussian distribution float charge_width = CLHEP::RandGauss::shoot(m_engine, m_GausMean, m_GausSigma); - float norm = 1000. * energyDeposit/(charge_width*std::sqrt(2.*M_PI)); //normalization: 1Kev --> Intergral=1 + float norm = 0.5*total_charge/(charge_width*std::sqrt(2.*M_PI)); // each readout plane reads about half the total charge produced on the wire TF1 *charge_spread = new TF1("fgaus", "gaus(0)", -1000., 1000.); charge_spread->SetParameters(norm, posOnSurf_strip.x(), charge_width); diff --git a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx index 2d3c42d5d3a61554d6f7345a93cdf24ad4a26570..ab7c01b86386dae168175ce88c20520d0c31f25f 100644 --- a/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx +++ b/MuonSpectrometer/MuonDigitization/sTGC_Digitization/src/sTgcDigitizationTool.cxx @@ -988,6 +988,13 @@ StatusCode sTgcDigitizationTool::doDigitization(const EventContext& ctx) { if ( acceptDigit ) { + if ( m_idHelperSvc->stgcIdHelper().channelType(it_digit->identify()) == 1 ) { + //Only strips since strips are readout in PDO counts and not charge + chargeAfterSmearing = 1000*chargeAfterSmearing; // VMM gain setting for conversion from charge to potential, 1mV=1fC; from McGill cosmics tests + chargeAfterSmearing = chargeAfterSmearing*1.0304 + 59.997; // conversion from potential to PDO for VMM1 configuration, mV*1.0304 + 59.997; from Shandong cosmics tests + // link to study outlining conversion https://doi.org/10.1016/j.nima.2019.02.061 + } + std::unique_ptr<sTgcDigit> finalDigit = std::make_unique<sTgcDigit>(it_digit->identify(), it_digit->bcTag(), it_digit->time(),