Skip to content

Commit 404577e

Browse files
authored
Merge dd0823e into sapling-pr-archive-ktf
2 parents e8fb89b + dd0823e commit 404577e

2 files changed

Lines changed: 55 additions & 14 deletions

File tree

Detectors/Upgrades/ALICE3/TRK/simulation/src/TRKServices.cxx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -568,8 +568,9 @@ void TRKServices::createMLServicesPeacock(TGeoVolume* motherVolume)
568568
// Get geometry information from TRK which is already present
569569
float rMinMiddleServices = 35.f;
570570
float rMinMiddleBarrel = rMinMiddleServices;
571-
const float zLengthCylinderMiddleServices = 40.5f;
571+
const float zLengthMiddleBarrel = 64.5f;
572572
const float zLengthMiddleServices = 143.f;
573+
const float zLengthCylinderMiddleServices = zLengthMiddleServices - zLengthMiddleBarrel;
573574

574575
// Middle layer barrel services are only on A side
575576
rMinMiddleServices = 35.f;
@@ -578,7 +579,6 @@ void TRKServices::createMLServicesPeacock(TGeoVolume* motherVolume)
578579
// Middle barrel connection disks
579580
const float rMinMiddleBarrelDisk = 5.68f;
580581
const float rMaxMiddleBarrelDisk = 35.f;
581-
const float zLengthMiddleBarrel = 64.5f;
582582
auto orientation = Orientation::kASide;
583583
float diskCircumference = rMaxMiddleBarrelDisk * 3.14; // Use only half circumference
584584

@@ -628,29 +628,29 @@ void TRKServices::createMLServicesPeacock(TGeoVolume* motherVolume)
628628
// create data fiber volumes
629629
double rCur = rMinMiddleServices;
630630
double dR = siO2FiberAreaD / (3.14 * rCur);
631-
TGeoTubeSeg* middleDiskFiberSIO2 = new TGeoTubeSeg(Form("TRK_MLD_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
631+
TGeoTubeSeg* middleDiskFiberSIO2 = new TGeoTubeSeg(Form("TRK_MLD_FIBER_SIO2sh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
632632
TGeoVolume* middleDiskFiberSIO2Volume = new TGeoVolume(Form("TRK_MLD_FIBER_SIO2_%s%d", orLabel.c_str(), iSide), middleDiskFiberSIO2, medSiO2);
633633
middleDiskFiberSIO2Volume->SetLineColor(kGray);
634634

635635
rCur += dR;
636636
dR = peFiberAreaD / (3.14 * rCur);
637-
TGeoTubeSeg* middleDiskFiberPE = new TGeoTubeSeg(Form("TRK_MLD_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
637+
TGeoTubeSeg* middleDiskFiberPE = new TGeoTubeSeg(Form("TRK_MLD_FIBER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
638638
TGeoVolume* middleDiskFiberPEVolume = new TGeoVolume(Form("TRK_MLD_FIBER_PE_%s%d", orLabel.c_str(), iSide), middleDiskFiberPE, medPE);
639639
middleDiskFiberPEVolume->SetLineColor(kGray);
640-
auto* combiTrans = new TGeoCombiTrans(0, 0, (int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices), new TGeoRotation("", refAngle + iSide * 180., 0, 0));
640+
auto* combiTrans = new TGeoCombiTrans(0, 0, (int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices / 2), new TGeoRotation("", refAngle + iSide * 180., 0, 0));
641641
motherVolume->AddNode(middleDiskFiberSIO2Volume, 1, combiTrans);
642642
motherVolume->AddNode(middleDiskFiberPEVolume, 1, combiTrans);
643643

644644
// Create powerlines
645645
rCur += dR;
646646
dR = cuPowerAreaD / (3.14 * rCur);
647-
TGeoTubeSeg* middleDiskPowerCu = new TGeoTubeSeg(Form("TRK_MLD_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
647+
TGeoTubeSeg* middleDiskPowerCu = new TGeoTubeSeg(Form("TRK_MLD_POWER_CUsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
648648
TGeoVolume* middleDiskPowerCuVolume = new TGeoVolume(Form("TRK_MLD_POWER_CU_%s%d", orLabel.c_str(), iSide), middleDiskPowerCu, medCu);
649649
middleDiskPowerCuVolume->SetLineColor(kGray);
650650

651651
rCur += dR;
652652
dR = pePowerAreaD / (3.14 * rCur);
653-
TGeoTubeSeg* middleDiskPowerPE = new TGeoTubeSeg(Form("TRK_MLD_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
653+
TGeoTubeSeg* middleDiskPowerPE = new TGeoTubeSeg(Form("TRK_MLD_POWER_PEsh_%s%d", orLabel.c_str(), iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
654654
TGeoVolume* middleDiskPowerPEVolume = new TGeoVolume(Form("TRK_MLD_POWER_PE_%s%d", orLabel.c_str(), iSide), middleDiskPowerPE, medPE);
655655
middleDiskPowerPEVolume->SetLineColor(kGray);
656656

@@ -662,29 +662,29 @@ void TRKServices::createMLServicesPeacock(TGeoVolume* motherVolume)
662662
// create data fiber volumes
663663
rCur += dR;
664664
dR = siO2FiberAreaB / (3.14 * rCur);
665-
TGeoTubeSeg* middleBarrelFiberSIO2 = new TGeoTubeSeg(Form("TRK_MLB_FIBER_SIO2sh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
665+
TGeoTubeSeg* middleBarrelFiberSIO2 = new TGeoTubeSeg(Form("TRK_MLB_FIBER_SIO2sh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
666666
TGeoVolume* middleBarrelFiberSIO2Volume = new TGeoVolume(Form("TRK_MLB_FIBER_SIO2_A%d", iSide), middleBarrelFiberSIO2, medSiO2);
667667
middleBarrelFiberSIO2Volume->SetLineColor(kGray);
668668

669669
rCur += dR;
670670
dR = peFiberAreaB / (3.14 * rCur);
671-
TGeoTubeSeg* middleBarrelFiberPE = new TGeoTubeSeg(Form("TRK_MLB_FIBER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
671+
TGeoTubeSeg* middleBarrelFiberPE = new TGeoTubeSeg(Form("TRK_MLB_FIBER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
672672
TGeoVolume* middleBarrelFiberPEVolume = new TGeoVolume(Form("TRK_MLB_FIBER_PE_A%d", iSide), middleBarrelFiberPE, medPE);
673673
middleBarrelFiberPEVolume->SetLineColor(kGray);
674-
auto* combiTrans = new TGeoCombiTrans(0, 0, (int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices), new TGeoRotation(nullptr, refAngle + iSide * 180., 0, 0));
674+
auto* combiTrans = new TGeoCombiTrans(0, 0, (int)orientation * (zLengthMiddleServices - zLengthCylinderMiddleServices / 2), new TGeoRotation(nullptr, refAngle + iSide * 180., 0, 0));
675675
motherVolume->AddNode(middleBarrelFiberSIO2Volume, 1, combiTrans);
676676
motherVolume->AddNode(middleBarrelFiberPEVolume, 1, combiTrans);
677677

678678
// Create powerlines
679679
rCur += dR;
680680
dR = cuPowerAreaB / (3.14 * rCur);
681-
TGeoTubeSeg* middleBarrelPowerCu = new TGeoTubeSeg(Form("TRK_MLB_POWER_CUsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
681+
TGeoTubeSeg* middleBarrelPowerCu = new TGeoTubeSeg(Form("TRK_MLB_POWER_CUsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
682682
TGeoVolume* middleBarrelPowerCuVolume = new TGeoVolume(Form("TRK_MLB_POWER_CU_A%d", iSide), middleBarrelPowerCu, medCu);
683683
middleBarrelPowerCuVolume->SetLineColor(kGray);
684684

685685
rCur += dR;
686686
dR = pePowerAreaB / (3.14 * rCur);
687-
TGeoTubeSeg* middleBarrelPowerPE = new TGeoTubeSeg(Form("TRK_MLB_POWER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices, -45, 45);
687+
TGeoTubeSeg* middleBarrelPowerPE = new TGeoTubeSeg(Form("TRK_MLB_POWER_PEsh_A%d", iSide), rCur, rCur + dR, zLengthCylinderMiddleServices / 2, -45, 45);
688688
TGeoVolume* middleBarrelPowerPEVolume = new TGeoVolume(Form("TRK_MLB_POWER_PE_A%d", iSide), middleBarrelPowerPE, medPE);
689689
middleBarrelPowerPEVolume->SetLineColor(kGray);
690690

Framework/AODMerger/src/aodMerger.cxx

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,21 @@ int main(int argc, char* argv[])
286286
}
287287
outputDir->cd();
288288
auto outputTree = inputTree->CloneTree(-1, (fastCopy) ? "fast" : "");
289+
// Validate that all branches have the same number of entries after CloneTree.
290+
// Fast copy from remote (xrootd) sources can silently produce corrupt trees
291+
// if a read fails mid-transfer.
292+
{
293+
auto expectedEntries = outputTree->GetEntries();
294+
TObjArray* clonedBranches = outputTree->GetListOfBranches();
295+
for (int ib = 0; ib < clonedBranches->GetEntriesFast(); ++ib) {
296+
auto* br = (TBranch*)clonedBranches->UncheckedAt(ib);
297+
if (br->GetEntries() != expectedEntries) {
298+
printf(" *** FATAL ***: After CloneTree, branch %s has %lld entries but tree has %lld\n",
299+
br->GetName(), br->GetEntries(), expectedEntries);
300+
exitCode = 7;
301+
}
302+
}
303+
}
289304
currentDirSize += inputTree->GetTotBytes(); // NOTE outputTree->GetTotBytes() is 0, so we use the inputTree here
290305
alreadyCopied = true;
291306
outputTree->SetAutoFlush(0);
@@ -307,7 +322,30 @@ int main(int argc, char* argv[])
307322

308323
// detect VLA
309324
if (((TLeaf*)br->GetListOfLeaves()->First())->GetLeafCount() != nullptr) {
310-
int maximum = ((TLeaf*)br->GetListOfLeaves()->First())->GetLeafCount()->GetMaximum();
325+
auto* sizeLeaf = ((TLeaf*)br->GetListOfLeaves()->First())->GetLeafCount();
326+
// GetMaximum() can be unreliable (may return 0 or a stale value).
327+
// Scan the size branch to find the true maximum.
328+
int maximum = sizeLeaf->GetMaximum();
329+
auto* sizeBranch = sizeLeaf->GetBranch();
330+
if (sizeBranch) {
331+
for (Long64_t e = 0, n = sizeBranch->GetEntries(); e < n; ++e) {
332+
sizeBranch->GetEntry(e);
333+
int val = sizeLeaf->GetValue();
334+
if (val > maximum) {
335+
printf(" *** WARNING ***: VLA size branch %s has a cached maximum %d which is smaller than the actual one (%d).",
336+
sizeLeaf->GetName(), maximum, val);
337+
maximum = val;
338+
}
339+
}
340+
}
341+
if (maximum < 0) {
342+
printf(" *** FATAL ***: VLA size branch %s has negative maximum %d\n", sizeLeaf->GetName(), maximum);
343+
exitCode = 6;
344+
break;
345+
}
346+
if (maximum == 0) {
347+
maximum = 1; // all entries are empty arrays, but we still need a valid buffer
348+
}
311349

312350
// get type
313351
static TClass* cls;
@@ -351,6 +389,9 @@ int main(int argc, char* argv[])
351389
}
352390
}
353391

392+
if (exitCode > 0) {
393+
break;
394+
}
354395
if (indexList.size() > 0) {
355396
auto entries = inputTree->GetEntries();
356397
int minIndexOffset = unassignedIndexOffset[treeName];
@@ -477,4 +518,4 @@ int main(int argc, char* argv[])
477518
printf("\n");
478519

479520
return exitCode;
480-
}
521+
}

0 commit comments

Comments
 (0)