@@ -31,7 +31,7 @@ TPCFastTransformPOD* TPCFastTransformPOD::create(aligned_unique_buffer_ptr<TPCFa
3131{
3232 size_t size = estimateSize (src);
3333 destVector.alloc (size); // allocate exact size
34- LOGP (debug, " OrigCorrSize:{} SelfSize: {} Estimated POS size: {}" , src.getCorrection ().getFlatBufferSize (), sizeof (TPCFastTransformPOD), size);
34+ LOGP (debug, " OrigCorrSize:{} SelfSize: {} Estimated POD size: {}" , src.getCorrection ().getFlatBufferSize (), sizeof (TPCFastTransformPOD), size);
3535 auto res = create (destVector.getraw (), size, src);
3636 res->setTimeStamp (src.getTimeStamp ());
3737 res->setVDrift (src.getVDrift ());
@@ -48,7 +48,7 @@ TPCFastTransformPOD* TPCFastTransformPOD::create(aligned_unique_buffer_ptr<TPCFa
4848 // create filling only part corresponding to TPCFastSpaceChargeCorrection. Data members coming from TPCFastTransform (e.g. VDrift, T0..) are not set
4949 size_t size = estimateSize (origCorr);
5050 destVector.alloc (size);
51- LOGP (debug, " OrigCorrSize:{} SelfSize: {} Estimated POS size: {}" , origCorr.getFlatBufferSize (), sizeof (TPCFastTransformPOD), size);
51+ LOGP (debug, " OrigCorrSize:{} SelfSize: {} Estimated POD size: {}" , origCorr.getFlatBufferSize (), sizeof (TPCFastTransformPOD), size);
5252 return create (destVector.getraw (), size, origCorr);
5353}
5454
@@ -67,19 +67,7 @@ size_t TPCFastTransformPOD::estimateSize(const TPCFastSpaceChargeCorrection& ori
6767 }
6868 // space for splines data
6969 for (int is = 0 ; is < 3 ; is++) {
70- for (int sector = 0 ; sector < origCorr.mGeo .getNumberOfSectors (); sector++) {
71- for (int row = 0 ; row < NROWS; row++) {
72- const auto & spline = origCorr.getSplineForRow (row);
73- int nPar = spline.getNumberOfParameters ();
74- if (is == 1 ) {
75- nPar = nPar / 3 ;
76- }
77- if (is == 2 ) {
78- nPar = nPar * 2 / 3 ;
79- }
80- nextDynOffs += nPar * sizeof (float );
81- }
82- }
70+ nextDynOffs += origCorr.mSectorDataSizeBytes [is] * TPCFastTransformGeo::getNumberOfSectors ();
8371 }
8472 nextDynOffs = alignOffset (nextDynOffs);
8573 return nextDynOffs;
@@ -177,18 +165,18 @@ TPCFastTransformPOD* TPCFastTransformPOD::create(char* buff, size_t buffSize, co
177165 // metadata
178166 size_t sectorDataSizeBytes = origCorr.mSectorDataSizeBytes [is];
179167
180- for (int sector = 0 ; sector < origCorr. mGeo . getNumberOfSectors (); sector++) {
181- podMap.mSplineDataOffsets [sector][is] = sectorDataSizeBytes * sector;
168+ for (int sector = 0 ; sector < TPCFastTransformGeo:: getNumberOfSectors (); sector++) {
169+ podMap.mSplineDataOffsets [sector][is] = nextDynOffs + sectorDataSizeBytes * sector;
182170 }
183- if (buffSize < nextDynOffs + sectorDataSizeBytes * origCorr.mGeo .getNumberOfSectors ()) {
171+ size_t dataSize = TPCFastTransformGeo::getNumberOfSectors () * sectorDataSizeBytes;
172+ if (buffSize < nextDynOffs + dataSize) {
184173 throw std::runtime_error (fmt::format (" attempt to copy {} bytes of data for spline{} to {}, overflowing the buffer of size {}" , sectorDataSizeBytes, is, nextDynOffs, buffSize));
185174 }
186175 const char * dataOr = origCorr.mCorrectionData [is];
187- size_t dataSize = origCorr.mGeo .getNumberOfSectors () * sectorDataSizeBytes;
188176 std::memcpy (data, dataOr, dataSize);
189177 nextDynOffs += dataSize;
190178 }
191-
179+ nextDynOffs = alignOffset (nextDynOffs);
192180 podMap.mTotalSize = nextDynOffs;
193181 if (buffSize != podMap.mTotalSize ) {
194182 throw std::runtime_error (fmt::format (" Estimated buffer size {} differs from filled one {}" , buffSize, podMap.mTotalSize ));
0 commit comments