Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions Detectors/ITSMFT/ITS/base/include/ITSBase/GeometryTGeo.h
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,6 @@ class GeometryTGeo : public o2::itsmft::GeometryTGeo
/// Sym name of the chip in the given layer/halfbarrel/stave/substave/module
static const char* composeSymNameChip(int lr, int hba, int sta, int ssta, int mod, int chip, bool isITS3 = false);

// create matrix for transformation from tracking frame to local one for ITS3
const Mat3D getT2LMatrixITS3(int isn, float alpha);

TString getMatrixPath(int index) const;

/// Get the transformation matrix of the SENSOR (not necessary the same as the chip)
Expand Down
13 changes: 0 additions & 13 deletions Detectors/ITSMFT/ITS/base/src/GeometryTGeo.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -899,19 +899,6 @@ TGeoHMatrix& GeometryTGeo::createT2LMatrix(int isn)
return t2l;
}

//__________________________________________________________________________
const o2::math_utils::Transform3D GeometryTGeo::getT2LMatrixITS3(int isn, float alpha)
{
// create for sensor isn the TGeo matrix for Tracking to Local frame transformations with correction for effective thickness
static TGeoHMatrix t2l;
t2l.Clear();
t2l.RotateZ(alpha * RadToDeg()); // rotate in direction of normal to the tangent to the cylinder
const TGeoHMatrix& matL2G = getMatrixL2G(isn);
const auto& matL2Gi = matL2G.Inverse();
t2l.MultiplyLeft(&matL2Gi);
return Mat3D(t2l);
}

//__________________________________________________________________________
int GeometryTGeo::extractVolumeCopy(const char* name, const char* prefix) const
{
Expand Down
25 changes: 19 additions & 6 deletions Detectors/Upgrades/ITS3/base/include/ITS3Base/SpecsV2.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
// color: for visulisation
namespace o2::its3::constants
{
constexpr double cm{1e+2}; // This is the default unit of TGeo so we use this as scale
constexpr double mu{1e-6 * cm};
constexpr double mm{1e-3 * cm};
constexpr double cm{1.0}; // This is the default unit of TGeo so we use this as scale
constexpr double mu{1e-4 * cm};
constexpr double mm{1e-1 * cm};
namespace pixelarray
{
constexpr double width{9.197 * mm};
Expand Down Expand Up @@ -102,13 +102,14 @@ constexpr double lengthSensitive{nRSUs * rsu::length};
namespace carbonfoam
{
// TODO: Waiting for the further information from WP5(Corrado)
constexpr double longeronsWidth{2.0 * mm}; // what is the height of the longerons?
constexpr double longeronsLength{263 * mm}; // from blueprint
constexpr double HringLength{6.0 * mm}; // from blueprint
constexpr double longeronsWidth{2.0 * mm}; // what is the height of the longerons?
constexpr double longeronsLength{segment::length - 2 * HringLength}; // 263mm from blueprint; overrriden to be consitent
constexpr double edgeBetwChipAndFoam{1.0 * mm}; // from blueprint but not used cause forms are already overlapping
constexpr double gapBetwHringsLongerons{0.05 * mm}; // from blueprint
constexpr std::array<int, 3> nHoles{11, 11, 11}; // how many holes for each layer?
constexpr std::array<double, 3> radiusHoles{1.0 * mm, 1.0 * mm, 2.0 * mm}; // what is the radius of the holes for each layer?
constexpr std::array<double, 3> radiusHoles{1.0 * mm, 1.0 * mm, 2.0 * mm}; // TODO what is the radius of the holes for each layer?
constexpr double thicknessOuterFoam{7 * mm}; // TODO: lack of carbon foam radius for layer 2, use 0.7 cm as a temporary value
constexpr EColor color{kGray};
} // namespace carbonfoam
namespace metalstack
Expand Down Expand Up @@ -212,6 +213,18 @@ inline bool isDetITS3(T detID)
}

} // namespace detID

// services
namespace services
{
// FIXME these value are hallucinated since this not yet defined
constexpr double thickness{2.2 * mm}; // thickness of structure
constexpr double radiusInner{radiiOuter[2] + carbonfoam::thicknessOuterFoam}; // inner radius of services
constexpr double radiusOuter{radiusInner + thickness}; // outer radius of services
constexpr double length{20 * cm}; // length
constexpr EColor color{kBlue};
} // namespace services

} // namespace o2::its3::constants

#endif
11 changes: 3 additions & 8 deletions Detectors/Upgrades/ITS3/macros/align/CheckResidualsITS3.C
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,11 @@ std::optional<Cluster> propagateTo(Track& trk, const o2::itsmft::CompClusterExt&
++cTotal;
auto chipID = clus.getSensorID();
float sigmaY2{0}, sigmaZ2{0}, sigmaYZ{0};
auto isITS3 = o2::its3::constants::detID::isDetITS3(chipID);
const float alpha = o2::its::GeometryTGeo::Instance()->getSensorRefAlpha(clus.getSensorID()); // alpha for the tracking frame
const auto locC = o2::its3::ioutils::extractClusterData(clus, pattIt, mDict, sigmaY2, sigmaZ2); // get cluster in sensor local frame with errors
Point3D trkC;
auto isITS3 = o2::its3::constants::detID::isDetITS3(chipID);
if (isITS3) {
trkC = o2::its::GeometryTGeo::Instance()->getT2LMatrixITS3(chipID, alpha) ^ (locC); // cluster position in the tracking frame
} else {
trkC = o2::its::GeometryTGeo::Instance()->getMatrixT2L(chipID) ^ (locC); // cluster position in the tracking frame
}
const auto gloC = o2::its::GeometryTGeo::Instance()->getMatrixL2G(chipID)(locC); // global cluster position
Point3D trkC = o2::its::GeometryTGeo::Instance()->getMatrixT2L(chipID) ^ (locC); // cluster position in the tracking frame
const auto gloC = o2::its::GeometryTGeo::Instance()->getMatrixL2G(chipID)(locC); // global cluster position
const auto bz = o2::base::Propagator::Instance()->getNominalBz();

// rotate the parameters to the tracking frame then propagate to the clusters'x
Expand Down
124 changes: 60 additions & 64 deletions Detectors/Upgrades/ITS3/macros/test/buildMatBudLUT.C
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "DetectorsBase/GeometryManager.h"
#include "ITSMFTReconstruction/ChipMappingITS.h"
#include "ITS3Simulation/DescriptorInnerBarrelITS3.h"
#include "ITS3Base/SpecsV2.h"
#include "CommonUtils/NameConf.h"
#include <TFile.h>
#include <TSystem.h>
Expand All @@ -30,7 +31,7 @@ o2::base::MatLayerCylSet mbLUT;

bool testMBLUT(const std::string& lutFile = "matbud.root");

bool buildMatBudLUT(int nTst = 30, int maxLr = -1, const std::string& outFile = "matbud.root", const std::string& geomName = "");
bool buildMatBudLUT(int nTst = 60, int maxLr = -1, const std::string& outFile = "matbud.root", const std::string& geomName = "");

struct LrData {
float rMin = 0.f;
Expand All @@ -50,7 +51,7 @@ bool buildMatBudLUT(int nTst, int maxLr, const std::string& outFile, const std::
auto geomName = o2::base::NameConf::getGeomFileName(geomNameInput);
if (gSystem->AccessPathName(geomName.c_str())) { // if needed, create geometry
std::cout << geomName << " does not exist. Will create it\n";
gSystem->Exec("$O2_ROOT/bin/o2-sim -n 0");
gSystem->Exec("$O2_ROOT/bin/o2-sim -n 0 --detectorList ALICE2.1");
}
o2::base::GeometryManager::loadGeometry(geomNameInput);
configLayers();
Expand All @@ -62,7 +63,7 @@ bool buildMatBudLUT(int nTst, int maxLr, const std::string& outFile, const std::
}
for (int i = 0; i < maxLr; i++) {
auto& l = lrData[i];
printf("L:%3d %6.2f<R<%6.2f ZH=%5.1f | dz = %6.2f drph = %6.2f\n", i, l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
printf("L:%3d %6.4f<R<%6.4f ZH=%5.4f | dz = %6.4f drph = %6.4f\n", i, l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
mbLUT.addLayer(l.rMin, l.rMax, l.zHalf, l.dZMin, l.dRPhiMin);
}

Expand Down Expand Up @@ -185,87 +186,78 @@ void configLayers()
const float kToler = 1e-3; //
float drStep = 0.f, zSpanH = 0.f, zBin = 0.f, rphiBin = 0.f, phiBin = 0.f;

o2::itsmft::ChipMappingITS mp;
int nStave = 0;
// rMin rMax zHalf
lrData.emplace_back(0.0f, 1.65f, 30.f);
// Vacuum inside beam pipe
lrData.emplace_back(0.0f, 1.6f, 30.f);

// beam pipe
lrData.emplace_back(lrData.back().rMax, 1.8f, 30.f);
lrData.emplace_back(lrData.back().rMax, 1.65f, 30.f);

//===================================================================================
// ITS3 Inner Barrel
drStep = 0.2;
drStep = 0.1;
zSpanH = 20.;
rphiBin = 0.2; // 0.1
zBin = 0.5;
float drStepChip = 0.054; // gap and chip width
float drStepChip4Layer = 0.074; // gap and chip width
rphiBin = 0.1;
zBin = 0.1;

// Layer 1
lrData.emplace_back(LrData(1.8f, 1.8f + drStepChip, zSpanH, zBin, rphiBin));
// Air
do {
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 2.4f - drStep + kToler);
lrData.emplace_back(LrData(lrData.back().rMax, 2.4f, zSpanH, zBin, rphiBin));
// air and sensitive layers
for (int iLayer{0}; iLayer < (int)o2::its3::constants::nLayers; ++iLayer) {
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::radiiInner[iLayer], zSpanH, zBin, rphiBin);
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::radiiOuter[iLayer], zSpanH, zBin, rphiBin);
}

// Layer 2
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStepChip, zSpanH, zBin, rphiBin));
// Air
do {
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 3.0f - drStep + kToler);
lrData.emplace_back(LrData(lrData.back().rMax, 3.0f, zSpanH, zBin, rphiBin));
rphiBin = 0.1;
zBin = 0.5;

// Layer 3
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStepChip, zSpanH, zBin, rphiBin));
// services
lrData.emplace_back(lrData.back().rMax, o2::its3::constants::services::radiusOuter, zSpanH, zBin, rphiBin);

//===================================================================================
// air space between Inner and Middle Barrels
int nStave = 0;
zSpanH = 40.;
zBin = 5.;
rphiBin = 2.;
lrData.emplace_back(LrData(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 19.0, zSpanH, zBin, rphiBin);

//===================================================================================
// ITS Middle Barrel
o2::itsmft::ChipMappingITS mp;
nStave = mp.getNStavesOnLr(3); // Lr 3
zSpanH = 55.;
zBin = 0.5;
drStep = 0.2;
drStep = 0.3;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 20.5 + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 21.4 - kToler);

drStep = 0.5;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 24. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 23.4 - kToler);

nStave = mp.getNStavesOnLr(3); // Lr 4
drStep = 0.2;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 25.6 + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 26.2 - kToler);
drStep = 0.5;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 29. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 29. - kToler);

//===================================================================================

// air space between Middle and Outer Barrels
zSpanH = 80.f;
lrData.emplace_back(LrData(lrData.back().rMax, 33.5, zSpanH));
lrData.emplace_back(lrData.back().rMax, 33.5, zSpanH);

//===================================================================================
// ITS Outer barrel
Expand All @@ -276,62 +268,66 @@ void configLayers()
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 36. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 36. - kToler);

drStep = 1.;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 38.5 + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 38.5 - kToler);

nStave = mp.getNStavesOnLr(6); // Lr 6
drStep = 0.25;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 41. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 41. - kToler);

drStep = 1.;
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (nStave * 10);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 44. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 44. - kToler);

//===================================================================================

zSpanH = 100.f;
zBin = 5.;
lrData.emplace_back(LrData(lrData.back().rMax, 47., zSpanH, zBin));
lrData.emplace_back(lrData.back().rMax, 44.8, zSpanH, zBin);
lrData.emplace_back(lrData.back().rMax, 46.2, zSpanH, zBin);
lrData.emplace_back(lrData.back().rMax, 47.0, zSpanH, zBin);

drStep = 2.;
zBin = 5.;
rphiBin = 2.;
do {
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 53. + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 55. - kToler);

zSpanH = 120.f;
lrData.emplace_back(LrData(lrData.back().rMax, 56.5, zSpanH));
lrData.emplace_back(lrData.back().rMax, 56.5, zSpanH);
lrData.emplace_back(lrData.back().rMax, 60.5, zSpanH);
lrData.emplace_back(lrData.back().rMax, 61.5, zSpanH);

zSpanH = 150.f;
drStep = 4.;
drStep = 3.5;
zBin = 15.;
rphiBin = 10;
do {
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
} while (lrData.back().rMax < 68.5 + kToler);
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 68.5 - kToler);

zSpanH = 250.f;
zBin = 25.;
rphiBin = 5;
{
auto rmean = (lrData.back().rMax + 76) / 2.;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 2);
lrData.emplace_back(LrData(lrData.back().rMax, 76, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 76, zSpanH, zBin, rphiBin);
}
// TPC inner vessel
// up to r = 78.5
Expand All @@ -340,33 +336,33 @@ void configLayers()
{
auto rmean = (lrData.back().rMax + 78.5) / 2;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
lrData.emplace_back(LrData(lrData.back().rMax, 78.5, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 78.8, zSpanH, zBin, rphiBin);
}
//
zSpanH = 250.f;
zBin = 2;
{
auto rmean = (lrData.back().rMax + 78.5) / 2;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
lrData.emplace_back(LrData(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 84.5, zSpanH, zBin, rphiBin);
}

// TPC drum
zSpanH = 250.f;
lrData.emplace_back(LrData(lrData.back().rMax, 250.0, zSpanH));
lrData.emplace_back(lrData.back().rMax, 250.0, zSpanH);

//===============================

// TPC outer vessel
zSpanH = 247.f; // ignore large lumps of material at |z|>247
rphiBin = 2.;
zBin = 3.;
lrData.emplace_back(LrData(lrData.back().rMax, 258., zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 258., zSpanH, zBin, rphiBin);

zSpanH = 247.f; // ignore large lumps of material at |z|>247
rphiBin = 2.;
zBin = 999.; // no segmentation in Z
lrData.emplace_back(LrData(lrData.back().rMax, 280., zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, 280., zSpanH, zBin, rphiBin);

// TRD

Expand All @@ -376,7 +372,7 @@ void configLayers()
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 370);

// TOF
Expand All @@ -387,7 +383,7 @@ void configLayers()
do {
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 400);

// rest
Expand All @@ -398,7 +394,7 @@ void configLayers()
zSpanH = lrData.back().rMax;
auto rmean = lrData.back().rMax + drStep / 2;
rphiBin = rmean * TMath::Pi() * 2 / (NSect * 12);
lrData.emplace_back(LrData(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin));
lrData.emplace_back(lrData.back().rMax, lrData.back().rMax + drStep, zSpanH, zBin, rphiBin);
} while (lrData.back().rMax < 500);
}

Expand Down
Loading