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
25 changes: 24 additions & 1 deletion Detectors/FIT/FT0/base/include/FT0Base/Geometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,34 @@ class Geometry
return o2::base::GeometryManager::getPNEntry(getDetID(), index);
}

// NEW:
// Calculate the coordinates of all the channels.
void calculateChannelCenter();
// Get the coordinates of the center of the channel channelId.
TVector3 getChannelCenter(UInt_t channelId) const { return mChannelCenter[channelId]; }

private:
TVector3 mMCP[52];
TVector3 mAngles[28];
std::array<TVector3, Nchannels> mChannelCenter; ///< NEW: Center of each channel in FT0 A (96) and C (112) combined.

// Convert the local ordering of the channels to the official one and apply it to the channel map.
// localChannelOrder[local channel index] = official channel.
Int_t localChannelOrder[Nchannels] = {
58, 56, 59, 57, 54, 52, 55, 53, 50, 49, 51, 48, 47, 45, 46, 44, 43, 42, 41, 40,
61, 60, 63, 62, 14, 12, 15, 13, 10, 9, 11, 8, 7, 6, 5, 4, 39, 38, 37, 36,
65, 64, 66, 67, 17, 16, 18, 19, 3, 2, 0, 1, 35, 34, 32, 33,
68, 69, 70, 71, 20, 21, 22, 23, 24, 27, 25, 26, 29, 31, 28, 30, 94, 95, 92, 93,
72, 73, 74, 75, 76, 78, 77, 79, 80, 83, 81, 82, 85, 87, 84, 86, 89, 91, 88, 90,
173, 172, 175, 174, 206, 207, 204, 205, 169, 168, 171, 170, 202, 203, 200, 201,
117, 116, 119, 118, 142, 143, 140, 141, 114, 112, 115, 113, 137, 139, 136, 138,
166, 164, 167, 165, 197, 199, 196, 198, 110, 108, 111, 109, 133, 135, 132, 134,
162, 160, 163, 161, 193, 195, 192, 194, 107, 105, 106, 104, 128, 130, 129, 131,
159, 157, 158, 156, 188, 190, 189, 191, 99, 98, 97, 96, 120, 121, 122, 123,
103, 102, 101, 100, 124, 125, 126, 127, 155, 153, 154, 152, 184, 186, 185, 187,
147, 146, 145, 144, 176, 177, 178, 179, 151, 150, 149, 148, 180, 181, 182, 183};

ClassDefNV(Geometry, 2);
ClassDefNV(Geometry, 3);
};
} // namespace ft0
} // namespace o2
Expand Down
58 changes: 58 additions & 0 deletions Detectors/FIT/FT0/base/src/Geometry.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,61 @@ void Geometry::setCsideModules()
mMCP[i + NCellsA].SetXYZ(xc2[i], yc2[i], zc2[i]);
}
}
void Geometry::calculateChannelCenter()
{
// This method calculates the position of each channel center composing both FT0-A
// and FT0-C, based on the position of their corresponding modules given by
// "Geometry::setAsideModules()" and "Geometry::setCsideModules()".

// Ensure the positions of the modules are well defined.
setAsideModules();
setCsideModules();

// Calculate first the positions for the channels for FT0-A. These correspond to the
// channels 0-95 in the modules mMCP[0-23].
Double_t delta = 5.3 / 4.; // Half-channel width (TODO: ask if it actually corresponds to ChannelWidth)
Double_t xLocalChannels[Nchannels]; // x-positions of all channels ordered according to xi and internal numbering.
Double_t yLocalChannels[Nchannels]; // y-positions of all channels ordered according to yi and internal numbering.
Double_t zLocalChannels[Nchannels]; // z-positions of all channels ordered according to zi and internal numbering.
// INFO: We assume here the modules are perpendicular to z, so z(channel) = z(module).

for (int iModA = 0; iModA < NCellsA; iModA++) {
xLocalChannels[4 * iModA + 0] = mMCP[iModA].X() - delta;
xLocalChannels[4 * iModA + 1] = mMCP[iModA].X() + delta;
xLocalChannels[4 * iModA + 2] = mMCP[iModA].X() - delta;
xLocalChannels[4 * iModA + 3] = mMCP[iModA].X() + delta;

yLocalChannels[4 * iModA + 0] = mMCP[iModA].Y() + delta;
yLocalChannels[4 * iModA + 1] = mMCP[iModA].Y() + delta;
yLocalChannels[4 * iModA + 2] = mMCP[iModA].Y() - delta;
yLocalChannels[4 * iModA + 3] = mMCP[iModA].Y() - delta;

zLocalChannels[4 * iModA + 0] = mMCP[iModA].Z();
zLocalChannels[4 * iModA + 1] = mMCP[iModA].Z();
zLocalChannels[4 * iModA + 2] = mMCP[iModA].Z();
zLocalChannels[4 * iModA + 3] = mMCP[iModA].Z();
}

// Calculate then the positions for the channels for FT0-C, corresponding to the
// channels 96-207 in the modules mMCP[24-51].
for (int iModC = 0; iModC < NCellsC; iModC++) {
xLocalChannels[4 * (iModC + NCellsA) + 0] = mMCP[iModC + NCellsA].X() - delta;
xLocalChannels[4 * (iModC + NCellsA) + 1] = mMCP[iModC + NCellsA].X() + delta;
xLocalChannels[4 * (iModC + NCellsA) + 2] = mMCP[iModC + NCellsA].X() - delta;
xLocalChannels[4 * (iModC + NCellsA) + 3] = mMCP[iModC + NCellsA].X() + delta;

yLocalChannels[4 * (iModC + NCellsA) + 0] = mMCP[iModC + NCellsA].Y() + delta;
yLocalChannels[4 * (iModC + NCellsA) + 1] = mMCP[iModC + NCellsA].Y() + delta;
yLocalChannels[4 * (iModC + NCellsA) + 2] = mMCP[iModC + NCellsA].Y() - delta;
yLocalChannels[4 * (iModC + NCellsA) + 3] = mMCP[iModC + NCellsA].Y() - delta;

zLocalChannels[4 * (iModC + NCellsA) + 0] = mMCP[iModC + NCellsA].Z();
zLocalChannels[4 * (iModC + NCellsA) + 1] = mMCP[iModC + NCellsA].Z();
zLocalChannels[4 * (iModC + NCellsA) + 2] = mMCP[iModC + NCellsA].Z();
zLocalChannels[4 * (iModC + NCellsA) + 3] = mMCP[iModC + NCellsA].Z();
}

for (int iChannel = 0; iChannel < Nchannels; iChannel++) {
mChannelCenter[localChannelOrder[iChannel]].SetXYZ(xLocalChannels[iChannel], yLocalChannels[iChannel], zLocalChannels[iChannel]);
}
}