diff --git a/core/data/test/trd/_GTestCbmTrdDigi.cxx b/core/data/test/trd/_GTestCbmTrdDigi.cxx index f531d96b4bb4967d690b525062854f341c9c1d0e..c69dd509027faadcf5abf71f88a663b3a7e9d5d7 100644 --- a/core/data/test/trd/_GTestCbmTrdDigi.cxx +++ b/core/data/test/trd/_GTestCbmTrdDigi.cxx @@ -22,13 +22,14 @@ TEST(_GTestCbmTrdDigi , CheckStandardConstructor) // Create object // This creates a Spadic standard digi, fasp test to be added here Int_t padChNr = 42; + Int_t uniqueModuleId = (Int_t) ECbmModuleId::kTrd; // Unique ModuleId of first module Double_t charge = 42.42; ULong64_t digiTime = 42001; Int_t errClass = 0; - CbmTrdDigi test(padChNr, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass); + CbmTrdDigi test(padChNr, uniqueModuleId, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass); compareTrdDigiDataMembers(test, padChNr, ECbmModuleId::kTrd, digiTime, charge); - CbmTrdDigi* test1 = new CbmTrdDigi(padChNr, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass); + CbmTrdDigi* test1 = new CbmTrdDigi(padChNr, uniqueModuleId, charge, digiTime, ((Int_t)CbmTrdDigi::kSelf), errClass); compareTrdDigiDataMembers(*test1, padChNr, ECbmModuleId::kTrd, digiTime, charge);; diff --git a/core/data/test/trd/compareTrdDigi.h b/core/data/test/trd/compareTrdDigi.h index 632cfa379f1efcf016f26a671e6df6cc18cd849d..16f1cea035dece97ea132e3b986b573d7e05a283 100644 --- a/core/data/test/trd/compareTrdDigi.h +++ b/core/data/test/trd/compareTrdDigi.h @@ -12,9 +12,8 @@ void compareTrdDigiDataMembers(CbmTrdDigi& test, retValInt = test.GetAddressChannel(); EXPECT_EQ(padChNr, retValInt); - test.SetAddressModule(5); retValInt = test.GetAddressModule(); - EXPECT_EQ(5, retValInt); + EXPECT_EQ((Int_t) systemid, retValInt); // GetAddress() returns the full Address part of the fInfo data member. However, since Module-5 translated via CbmTrdAddress corresponds to the value 0 it should return the setted channel number. retValInt = test.GetAddress(); diff --git a/core/data/trd/CbmTrdDigi.cxx b/core/data/trd/CbmTrdDigi.cxx index eeecdad8a620fabdb2145a067a93d56f95d4ba0d..fce1f44395c9dbf68f4059dfb502ef0fb3eb254b 100644 --- a/core/data/trd/CbmTrdDigi.cxx +++ b/core/data/trd/CbmTrdDigi.cxx @@ -55,7 +55,7 @@ CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t chargeT, Float_t chargeR, ULong64_ } //__________________________________________________________________________________________ -CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass) +CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Int_t uniqueModuleId, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass) : fInfo(0) ,fCharge(0.) ,fTime(time) @@ -71,7 +71,8 @@ CbmTrdDigi::CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t trig * fCharge definition UInt_t(charge*fgPrecission) */ SetAsic(kSPADIC); - SetChannel(padChNr); + SetChannel(padChNr); + SetAddress(uniqueModuleId); SetCharge(charge); SetTriggerType(triggerType); SetErrorClass(errClass); diff --git a/core/data/trd/CbmTrdDigi.h b/core/data/trd/CbmTrdDigi.h index fde30164662acd400c1318a4eba21213d255c9cd..f85c9d82ddd63e991d1c5a46eaa5ad1426cf8894 100644 --- a/core/data/trd/CbmTrdDigi.h +++ b/core/data/trd/CbmTrdDigi.h @@ -50,7 +50,7 @@ public: * \param[in] triggerType SPADIC trigger type see CbmTrdTriggerType. * \param[in] errClass SPADIC signal error parametrization based on message type. */ - CbmTrdDigi(Int_t padChNr, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass/*nrSamples*/); + CbmTrdDigi(Int_t padChNr, Int_t uniqueModuleId, Float_t charge, ULong64_t time, Int_t triggerType, Int_t errClass/*nrSamples*/); /** * \brief Constructor for backward compatibillity. diff --git a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx index 7f7d32cd15b96ee71123c69a63f576e178fe7738..27de8e7bc0210b42c603aadde973e8cc43b35bbf 100644 --- a/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx +++ b/fles/mcbm2018/unpacker/CbmMcbm2018UnpackerAlgoTrdR.cxx @@ -842,14 +842,14 @@ std::shared_ptr<CbmTrdDigi> CbmMcbm2018UnpackerAlgoTrdR::MakeDigi(CbmTrdRawMessa } asicAddress = mapIt->second; Int_t uniqueModuleId = asicAddress / 1000; - Int_t layerId(CbmTrdAddress::GetLayerId(uniqueModuleId)); - Int_t moduleId(CbmTrdAddress::GetModuleId(uniqueModuleId)); + // Int_t layerId(CbmTrdAddress::GetLayerId(uniqueModuleId)); + // Int_t moduleId(CbmTrdAddress::GetModuleId(uniqueModuleId)); Int_t asicChannelId(0); asicChannelId = (raw.GetElinkId() % 2) == fIsFirstChannelsElinkEven ? raw.GetChannelId() : raw.GetChannelId() + NSPADICCH/2; digiAddress = (fAsicChannelMap.find(asicAddress))->second.at(asicChannelId); - std::shared_ptr<CbmTrdDigi> digi = std::make_shared<CbmTrdDigi> ( CbmTrdDigi(digiAddress, digiCharge, digiTime, digiTriggerType, digiErrClass) ); - digi->SetAddress(CbmTrdAddress::GetAddress(layerId, moduleId, 0, 0, 0)); // TODO this could be skipped, it is shifting the address components back and forth, however the digi setter would need to be enhanced + std::shared_ptr<CbmTrdDigi> digi = std::make_shared<CbmTrdDigi> ( CbmTrdDigi(digiAddress, uniqueModuleId, digiCharge, digiTime, digiTriggerType, digiErrClass) ); + // digi->SetAddress(CbmTrdAddress::GetAddress(layerId, moduleId, 0, 0, 0)); // Int_t channelAddress = digi->GetAddressChannel(); // Int_t address = digi->GetAddress(); diff --git a/sim/detectors/trd/CbmTrdModuleSimR.cxx b/sim/detectors/trd/CbmTrdModuleSimR.cxx index 68dd1f176d21fb21bb2934e97b215efe651bc381..879912a42a37ef469cfabfa0afeb27a5f507cfc1 100644 --- a/sim/detectors/trd/CbmTrdModuleSimR.cxx +++ b/sim/detectors/trd/CbmTrdModuleSimR.cxx @@ -123,7 +123,7 @@ void CbmTrdModuleSimR::AddDigi(Int_t address, Double_t charge, Double_t /*charge digiMatch->AddLink(CbmLink(weighting, fPointId, fEventId, fInputId)); AddNoise(charge); - CbmTrdDigi *digi = new CbmTrdDigi(channel, charge*1e6, ULong64_t(time), 0, 0); + CbmTrdDigi *digi = new CbmTrdDigi(channel, fModAddress, charge*1e6, ULong64_t(time), 0, 0); digi->SetFlag(0,true); if(fDigiPar->GetPadSizeY(sec) == 1.5) digi->SetErrorClass(1); @@ -134,7 +134,7 @@ void CbmTrdModuleSimR::AddDigi(Int_t address, Double_t charge, Double_t /*charge fDigiMap[address] = std::make_pair(digi, digiMatch); it = fDigiMap.find(address); - it->second.first->SetAddressModule(fModAddress);//module); + // it->second.first->SetAddressModule(fModAddress);//module); <- now handled in the digi contructor if(trigger==1) it->second.first->SetTriggerType(CbmTrdDigi::kSelf); if(trigger==2) it->second.first->SetTriggerType(CbmTrdDigi::kNeighbor); } @@ -227,9 +227,9 @@ void CbmTrdModuleSimR::ProcessPulseBuffer(Int_t address, Bool_t FNcall, Bool_t M } } - CbmTrdDigi* digi=NULL; - if(fTimeBuffer[address] + corr - shift > 0.) digi = fMessageConverter->MakeDigi(temp,channel,0,0,fTimeBuffer[address] + corr - shift,true); - else digi = fMessageConverter->MakeDigi(temp,channel,0,0,fTimeBuffer[address] + corr,true); + CbmTrdDigi* digi = nullptr; + if(fTimeBuffer[address] + corr - shift > 0.) digi = fMessageConverter->MakeDigi(temp, channel, fModAddress, fTimeBuffer[address] + corr - shift,true); + else digi = fMessageConverter->MakeDigi(temp, fModAddress, channel, fTimeBuffer[address] + corr,true); if(fDigiPar->GetPadSizeY(sec) == 1.5) digi->SetErrorClass(1); if(fDigiPar->GetPadSizeY(sec) == 4.) digi->SetErrorClass(2); @@ -342,7 +342,7 @@ void CbmTrdModuleSimR::ProcessPulseBuffer(Int_t address, Bool_t FNcall, Bool_t M } - digi->SetAddressModule(fModAddress); + // digi->SetAddressModule(fModAddress); Not required anymore, now handled in the digi c'tor if(trigger==1){ digi->SetTriggerType(CbmTrdDigi::kSelf); @@ -438,9 +438,8 @@ void CbmTrdModuleSimR::AddDigitoBuffer(Int_t address, Double_t charge, Double_t channel += ncols * row + col; // std::cout<<charge*1e6<<" "<<fTimeBuffer[address]/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)<<std::endl; - CbmTrdDigi* digi= new CbmTrdDigi(channel, charge*1e6, ULong64_t(time/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)), 0, 0); + CbmTrdDigi* digi= new CbmTrdDigi(channel, fModAddress, charge*1e6, ULong64_t(time/CbmTrdDigi::Clk(CbmTrdDigi::kSPADIC)), 0, 0); - digi->SetAddressModule(fModAddress);//module); if(trigger==1) digi->SetTriggerType(CbmTrdDigi::kSelf); if(trigger==2) digi->SetTriggerType(CbmTrdDigi::kNeighbor); //digi->SetMatch(digiMatch); diff --git a/sim/detectors/trd/CbmTrdRawToDigiR.cxx b/sim/detectors/trd/CbmTrdRawToDigiR.cxx index 79c8ccf36fa9c8638245040514ea78891529f67b..b453d9568972a11599a26b0bbb11f50f76b6cad6 100644 --- a/sim/detectors/trd/CbmTrdRawToDigiR.cxx +++ b/sim/detectors/trd/CbmTrdRawToDigiR.cxx @@ -339,7 +339,7 @@ void CbmTrdRawToDigiR::ReadMaps(std::string file){ } -CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel,Int_t module,Int_t layer,ULong64_t time,Bool_t FN){ +CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel, Int_t uniqueModuleId, ULong64_t time, Bool_t FN){ Float_t digicharge=0; Int_t samplesum=0; for(size_t i=0;i<fSampleMask.size();i++){ @@ -369,9 +369,8 @@ CbmTrdDigi* CbmTrdRawToDigiR::MakeDigi(std::vector<Int_t> samples, Int_t channel } - CbmTrdDigi* digi= new CbmTrdDigi(channel, digicharge, time, 0, 0); - digi->SetAddress(CbmTrdAddress::GetAddress(layer, module, 0, 0, 0)); - + CbmTrdDigi* digi= new CbmTrdDigi(channel, uniqueModuleId, digicharge, time, 0, 0); + return digi; } diff --git a/sim/detectors/trd/CbmTrdRawToDigiR.h b/sim/detectors/trd/CbmTrdRawToDigiR.h index ef55599ef3820b3eb37a688eb35ea9e88e2aa5e8..6d04da1279a0699b0460301a5ffa789e14a3292d 100644 --- a/sim/detectors/trd/CbmTrdRawToDigiR.h +++ b/sim/detectors/trd/CbmTrdRawToDigiR.h @@ -38,7 +38,7 @@ class CbmTrdRawToDigiR : public TObject virtual ~CbmTrdRawToDigiR() {;} // CbmTrdDigi* MakeDigi(CbmSpadicRawMessage22* raw); - CbmTrdDigi* MakeDigi(std::vector<Int_t> samples, Int_t channel,Int_t module,Int_t layer,ULong64_t time,Bool_t FN=false); + CbmTrdDigi* MakeDigi(std::vector<Int_t> samples, Int_t channel, Int_t uniqueModuleId, ULong64_t time,Bool_t FN=false); Float_t GetTimeShift(std::vector<Int_t> samples); Double_t GetCharge(std::vector<Int_t> samples, Int_t shift=-1);