diff --git a/sim/detectors/fsd/CbmFsdDigitize.cxx b/sim/detectors/fsd/CbmFsdDigitize.cxx index b889b53a559bbe24c9dca0ed6ffa20f9e29b3b21..13cf305f421890ed1351f827eba39fe62f43264b 100644 --- a/sim/detectors/fsd/CbmFsdDigitize.cxx +++ b/sim/detectors/fsd/CbmFsdDigitize.cxx @@ -182,10 +182,15 @@ void CbmFsdDigitize::Exec(Option_t*) // not within time cut -> send the digi from buffer and replace by the new one CbmFsdDigi* oldDigi = new CbmFsdDigi(it->second.first->GetAddress(), it->second.first->GetTime(), it->second.first->GetEdep()); - CbmMatch* oldDigiMatch = new CbmMatch(*it->second.second); - if (fCreateMatches) SendData(oldDigi->GetTime(), oldDigi, oldDigiMatch); - else + if (fCreateMatches) { + CbmMatch* oldDigiMatch = new CbmMatch(*it->second.second); + SendData(oldDigi->GetTime(), oldDigi, oldDigiMatch); + delete it->second.second; + } + else { SendData(oldDigi->GetTime(), oldDigi); + } + delete it->second.first; fDigiBuffer.erase(it); CbmFsdDigi* digi = new CbmFsdDigi(address, time, eloss); @@ -248,10 +253,16 @@ void CbmFsdDigitize::ReleaseBuffer(Bool_t sendEverything) for (const auto& dp : fDigiBuffer) { CbmFsdDigi* digi = new CbmFsdDigi(dp.second.first->GetAddress(), dp.second.first->GetTime(), dp.second.first->GetEdep()); - CbmMatch* digiMatch = new CbmMatch(*dp.second.second); - if (fCreateMatches) SendData(digi->GetTime(), digi, digiMatch); - else + if (fCreateMatches) { + CbmMatch* digiMatch = new CbmMatch(*dp.second.second); + SendData(digi->GetTime(), digi, digiMatch); + delete dp.second.first; + delete dp.second.second; + } + else { SendData(digi->GetTime(), digi); + delete dp.second.first; + } } // # digi buffer fDigiBuffer.clear(); } @@ -266,11 +277,14 @@ void CbmFsdDigitize::ReleaseBuffer(Bool_t sendEverything) // send this digi CbmFsdDigi* digi = new CbmFsdDigi(dp.second.first->GetAddress(), dp.second.first->GetTime(), dp.second.first->GetEdep()); - CbmMatch* digiMatch = new CbmMatch(*dp.second.second); - if (fCreateMatches) SendData(digi->GetTime(), digi, digiMatch); - else + if (fCreateMatches) { + CbmMatch* digiMatch = new CbmMatch(*dp.second.second); + SendData(digi->GetTime(), digi, digiMatch); + delete dp.second.second; + } + else { SendData(digi->GetTime(), digi); - + } // save which keys were sent and should be removed keysSent.push_back(dp.first); } // ? time diff --git a/sim/detectors/much/CbmMuchDigitizeGem.cxx b/sim/detectors/much/CbmMuchDigitizeGem.cxx index 05b89110b8e83e1a75f6660934c93db0733a0bee..bf63798dc25fcde31df003272c339e86d900a91b 100644 --- a/sim/detectors/much/CbmMuchDigitizeGem.cxx +++ b/sim/detectors/much/CbmMuchDigitizeGem.cxx @@ -702,7 +702,6 @@ void CbmMuchDigitizeGem::ReadAndRegister(Long_t eventTime) for (std::vector<CbmMuchSignal*>::iterator LoopOver = SignalList.begin(); LoopOver != SignalList.end(); LoopOver++) { CbmMuchDigi* digi = ConvertSignalToDigi(*LoopOver); - CbmMatch* digiMatch = new CbmMatch(*(*LoopOver)->GetMatch()); // must be copied from signal // assert(digi); if (!digi) { LOG(debug2) << GetName() << ": Digi not created as signal is below threshold."; @@ -711,7 +710,13 @@ void CbmMuchDigitizeGem::ReadAndRegister(Long_t eventTime) LOG(debug2) << GetName() << ": New digi: sector = " << CbmMuchAddress::GetSectorIndex(digi->GetAddress()) << " channel= " << CbmMuchAddress::GetChannelIndex(digi->GetAddress()); - SendData(digi->GetTime(), digi, digiMatch); + if (fCreateMatches) { + CbmMatch* digiMatch = new CbmMatch(*(*LoopOver)->GetMatch()); // must be copied from signal + SendData(digi->GetTime(), digi, digiMatch); + } + else { + SendData(digi->GetTime(), digi); + } fNofDigis++; } } diff --git a/sim/detectors/psd/CbmPsdSimpleDigitizer.cxx b/sim/detectors/psd/CbmPsdSimpleDigitizer.cxx index d1c9fe4937401bf6eeec338ed9ef8afd18bff2a4..aa8a41adbc6fd170dd2c4677cb3f9137fee38c83 100644 --- a/sim/detectors/psd/CbmPsdSimpleDigitizer.cxx +++ b/sim/detectors/psd/CbmPsdSimpleDigitizer.cxx @@ -154,7 +154,12 @@ void CbmPsdSimpleDigitizer::Exec(Option_t*) eLossSmeared += eNoise; CbmPsdDigi* digi = new CbmPsdDigi(entry.second.first.GetAddress(), entry.second.first.GetTime() + fCurrentEventTime, eLossSmeared); - SendData(digi->GetTime(), digi, entry.second.second); + if (fCreateMatches) { + SendData(digi->GetTime(), digi, entry.second.second); + } + else { + SendData(digi->GetTime(), digi); + } nDigis++; LOG(debug1) << fName << ": Digi " << nDigis << " Time " << entry.second.first.GetTime() + fCurrentEventTime << " Section " << entry.second.first.GetSectionID() << " Module " << entry.second.first.GetModuleID() diff --git a/sim/detectors/tof/CbmTofDigitize.cxx b/sim/detectors/tof/CbmTofDigitize.cxx index 32f8b487d16a00daab503276874d12ce05a04d93..5647b8c40b74a33ffb32b8decd558cf86a1f589e 100644 --- a/sim/detectors/tof/CbmTofDigitize.cxx +++ b/sim/detectors/tof/CbmTofDigitize.cxx @@ -1055,8 +1055,13 @@ Bool_t CbmTofDigitize::MergeSameChanDigis() Double_t dHitTime = fCurrentEventTime + gRandom->Gaus(0., 0.04); const Double_t dHitTot = 2.; CbmTofDigi* tDigi = new CbmTofDigi(uChanUId, dHitTime, dHitTot); - CbmMatch* tMatch = new CbmMatch(); - SendData(tDigi->GetTime(), tDigi, tMatch); // Send digi to DAQ + if (fCreateMatches) { + CbmMatch* tMatch = new CbmMatch(); + SendData(tDigi->GetTime(), tDigi, tMatch); // Send digi to DAQ + } + else { + SendData(tDigi->GetTime(), tDigi); // Send digi to DAQ + } fiNbDigis++; LOG(debug) << Form("Add fake diamond digis 0x%08x mode with t = %7.3f", uChanUId, dHitTime); //delete tDigi; @@ -1146,12 +1151,16 @@ Bool_t CbmTofDigitize::MergeSameChanDigis() // The original digi will be deleted below, together with the unused digis from the buffer. CbmTofDigi* digi = new CbmTofDigi(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].first)); - CbmMatch* match = - new CbmMatch(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].second)); - digi->SetTime(digi->GetTime() * fdDigiTimeConvFactor + fCurrentEventTime); // ns->ps - SendData(digi->GetTime(), digi, match); // Send digi to DAQ - fiNbDigis++; + if (fCreateMatches) { + CbmMatch* match = + new CbmMatch(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].second)); + SendData(digi->GetTime(), digi, match); // Send digi to DAQ + } + else { + SendData(digi->GetTime(), digi); // Send digi to DAQ + } + fiNbDigis++; // TOF QA if (fbMonitorHistos && NULL != digiMatch) { @@ -1186,10 +1195,16 @@ Bool_t CbmTofDigitize::MergeSameChanDigis() // The original digi will be deleted below, together with the unused digis from the buffer. CbmTofDigi* digi = new CbmTofDigi(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].first)); - CbmMatch* match = - new CbmMatch(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].second)); digi->SetTime(digi->GetTime() * fdDigiTimeConvFactor + fCurrentEventTime); // ns->ps - SendData(digi->GetTime(), digi, match); // Send digi to DAQ + if (fCreateMatches) { + CbmMatch* match = + new CbmMatch(*(fStorDigi[iSmType][iSm * iNbRpc + iRpc][iNbSides * iCh + iSide][iDigi0].second)); + SendData(digi->GetTime(), digi, match); // Send digi to DAQ + } + else { + SendData(digi->GetTime(), digi); // Send digi to DAQ + } + fiNbDigis++; if (fbMonitorHistos) { diff --git a/sim/detectors/trd/CbmTrdDigitizer.cxx b/sim/detectors/trd/CbmTrdDigitizer.cxx index 432c618cf8d3dfe0b3261209b7fcc724afd4f4bf..7f0b83d8954ccafc4f2cf90a69c8350eab94966b 100644 --- a/sim/detectors/trd/CbmTrdDigitizer.cxx +++ b/sim/detectors/trd/CbmTrdDigitizer.cxx @@ -225,7 +225,12 @@ void CbmTrdDigitizer::Exec(Option_t*) for (std::map<Int_t, pair<CbmTrdDigi*, CbmMatch*>>::iterator it = digis->begin(); it != digis->end(); it++) { assert(it->second.second); CbmTrdDigi* digi = it->second.first; - SendData(digi->GetTime(), digi, it->second.second); + if (fCreateMatches) { + SendData(digi->GetTime(), digi, it->second.second); + } + else { + SendData(digi->GetTime(), digi); + } nDigis++; } //# modules digis->clear(); @@ -263,7 +268,12 @@ void CbmTrdDigitizer::FlushBuffers() for (std::map<Int_t, pair<CbmTrdDigi*, CbmMatch*>>::iterator it = digis->begin(); it != digis->end(); it++) { assert(it->second.second); CbmTrdDigi* digi = it->second.first; - SendData(digi->GetTime(), digi, it->second.second); + if (fCreateMatches) { + SendData(digi->GetTime(), digi, it->second.second); + } + else { + SendData(digi->GetTime(), digi); + } nDigis++; } //# modules digis->clear(); diff --git a/sim/detectors/trd/CbmTrdModuleSimR.cxx b/sim/detectors/trd/CbmTrdModuleSimR.cxx index be6f1a092d7914307272d3a09ca529b8a8426691..01ed0883b926d934aa34df8d3ad82e32adf2d6ac 100644 --- a/sim/detectors/trd/CbmTrdModuleSimR.cxx +++ b/sim/detectors/trd/CbmTrdModuleSimR.cxx @@ -400,6 +400,7 @@ void CbmTrdModuleSimR::ProcessPulseBuffer(Int_t address, Bool_t FNcall, Bool_t M fDigiMap[address] = std::make_pair(digi, digiMatch); + delete fPulseBuffer[address].second; fPulseBuffer.erase(address); if (!FNcall && !MultiCall && trigger == 1) {