Skip to content

Commit

Permalink
Change ITS3 to simulate TDR description
Browse files Browse the repository at this point in the history
  • Loading branch information
f3sch committed Nov 24, 2023
1 parent a13ea07 commit 745ac73
Show file tree
Hide file tree
Showing 3 changed files with 421 additions and 404 deletions.
101 changes: 101 additions & 0 deletions Detectors/Upgrades/ITS3/base/include/ITS3Base/Specs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
// All rights not expressly granted are reserved.
//
// This software is distributed under the terms of the GNU General Public
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
//
// In applying this license CERN does not waive the privileges and immunities
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

/// \file Specs.h
/// \brief TDR specs of ITS3
/// \author felix.schlepper@cern.ch

#include "Rtypes.h"

namespace o2::its3
{
namespace 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};
namespace pixelarray
{
constexpr double length{9.197 * mm};
constexpr double width{3.571 * mm};
constexpr EColor color{kGreen};
constexpr unsigned int nCols{156};
constexpr unsigned int nRows{440};
constexpr unsigned int nPixels{nCols * nRows};
namespace pixel
{
constexpr double pitchCol{width / static_cast<double>(nCols)};
constexpr double pitchRow{length / static_cast<double>(nRows)};
} // namespace pixel
} // namespace pixelarray
namespace tile
{
namespace biasing
{
constexpr double length{0.06 * mm};
constexpr double width{3.571 * mm};
constexpr EColor color{kYellow};
static_assert(width == pixelarray::width);
} // namespace biasing
namespace powerswitches
{
constexpr double length{9.257 * mm};
constexpr double width{0.02 * mm};
constexpr double z{pixelarray::width};
constexpr EColor color{kBlue};
} // namespace powerswitches
namespace readout
{
constexpr double length{0.525 * mm};
constexpr double width{3.591 * mm};
constexpr EColor color{kMagenta};
static_assert(width == (biasing::width + powerswitches::width));
} // namespace readout
constexpr double width{readout::width};
constexpr double length{powerswitches::length + readout::length};
} // namespace tile
namespace rsu
{
namespace databackbone
{
constexpr double length{9.782 * mm};
constexpr double width{0.06 * mm};
constexpr EColor color{kRed};
} // namespace databackbone
constexpr double length{19.564 * mm};
constexpr double width{21.666 * mm};
} // namespace rsu
namespace segment
{
constexpr double length{rsu::length};
namespace lec
{
constexpr double length{segment::length};
constexpr double width{4.5 * mm};
constexpr EColor color{kCyan};
} // namespace lec
namespace rec
{
constexpr double length{segment::length};
constexpr double width{1.5 * mm};
constexpr EColor color{kCyan};
} // namespace rec
constexpr unsigned int nRSUs{12};
constexpr double width{nRSUs * rsu::width + lec::width + rec::width};
} // namespace segment
constexpr unsigned int nLayers{3};
constexpr std::array<double, nLayers> radii{19 * mm, 25.2 * mm, 31.5 * mm}; // middle radius e.g. inner radius+thickness/2.
constexpr double equatorialGap{1 * mm};
constexpr std::array<unsigned int, nLayers> nSegments{3, 4, 5};
constexpr double thickness{50 * mu};
constexpr double effThickness{66 * mu};
} // namespace constants
} // namespace o2::its3
105 changes: 43 additions & 62 deletions Detectors/Upgrades/ITS3/simulation/include/ITS3Simulation/ITS3Layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,81 +12,62 @@
/// \file ITS3Layer.h
/// \brief Definition of the ITS3Layer class
/// \author Fabrizio Grosa <fgrosa@cern.ch>
/// \author felix.schlepper@cern.ch

#ifndef ALICEO2_ITS3_ITS3LAYER_H
#define ALICEO2_ITS3_ITS3LAYER_H

#include <TGeoManager.h>
#include <TGeoVolume.h>

class TGeoVolume;

namespace o2
namespace o2::its3
{
namespace its3
{
/// This class defines the Geometry for the ITS3 using TGeo. This is a work class used
/// to study different configurations during the development of the new ITS structure
class ITS3Layer : public TObject

/// This class defines the Geometry for the ITS3 using TGeo.
class ITS3Layer
{
// The hierarchy will be the following:
// ITS2 -> ITS3
// ---------------------------------
// Sensor PixelArray
// Chip Tile
// Module RSU
// HalfStave Segment
// Stave Chip
// HalfBarrel CarbonForm
// Layer Layer
public:
// Default constructor
ITS3Layer() = default;

/// Constructor setting layer number
ITS3Layer(int lay);

/// Copy constructor
ITS3Layer(const ITS3Layer&) = default;

/// Assignment operator
ITS3Layer& operator=(const ITS3Layer&) = default;
// Create one layer of ITS3 and attach it to the motherVolume.
void createLayer(TGeoVolume* motherVolume, int layer = 0);

/// Default destructor
~ITS3Layer() override;

void createLayer(TGeoVolume* motherVolume, double radiusBetweenLayer);
void createLayerWithDeadZones(TGeoVolume* motherVolume, double radiusBetweenLayer);
void create4thLayer(TGeoVolume* motherVolume);
void createCarbonFoamStructure(TGeoVolume* motherVolume, double deltaR, bool fourthLayer = false);

void setChipThick(double thick) { mChipThickness = thick; }
void setLayerRadius(double radius) { mRadius = radius; }
void setLayerZLen(double zLen) { mZLen = zLen; }
void setGapBetweenEmispheres(double gap) { mGapY = gap; }
void setGapBetweenEmispheresInPhi(double gap) { mGapPhi = gap; }
void setChipID(int chipID) { mChipTypeID = chipID; }
void setFringeChipWidth(double fringeChipWidth) { mFringeChipWidth = fringeChipWidth; }
void setMiddleChipWidth(double middleChipWidth) { mMiddleChipWidth = middleChipWidth; }
void setNumSubSensorsHalfLayer(int numSubSensorsHalfLayer) { mNumSubSensorsHalfLayer = numSubSensorsHalfLayer; }
void setHeightStripFoam(double heightStripFoam) { mHeightStripFoam = heightStripFoam; }
void setLengthSemiCircleFoam(double lengthSemiCircleFoam) { mLengthSemiCircleFoam = lengthSemiCircleFoam; }
void setThickGluedFoam(double thickGluedFoam) { mThickGluedFoam = thickGluedFoam; }
void setGapXDirection(double gapXDirection) { mGapXDirection = gapXDirection; }
void setBuildLevel(int buildLevel) { mBuildLevel = buildLevel; }
void setAdditionalMaterial(double addMat) { mAddMaterial = addMat; }
private:
void init();
void createPixelArray();
void createTile();
void createRSU();
void createSegment();
void createChip();
void createCarbonForm();
void createLayerImpl();

private:
int mLayerNumber{0}; //! layer number
double mChipThickness{0.}; //! chip thickness
double mSensorThickness{0.}; //! sensor thickness
double mRadius{0.}; //! radius of layer
double mZLen{0.}; //! length of a layer
double mGapY{0.}; //! gap between emispheres in Y direction
double mGapPhi{0.}; //! gap between emispheres in phi (distance in Y direction)
int mChipTypeID{0}; //! chip ID
double mFringeChipWidth{0.}; //! fringe chip width
double mMiddleChipWidth{0.}; //! middle chip width
int mNumSubSensorsHalfLayer{0}; //! num of subsensors in half layer
double mHeightStripFoam{0.}; //! strip foam height
double mLengthSemiCircleFoam{0.}; //! semi-circle foam length
double mThickGluedFoam{0.}; //! glued foam thickness
double mGapXDirection{0.}; //! gap between quarter layer(only for layer 4)
double mAddMaterial{0.}; //! additional material to mimic services
int mBuildLevel{0}; //! build level for material budget studies
uint8_t mNLayer{0}; // Layer number
double mR{0}; // Middle Radius
double mRmin{}; // Minimum Radius
double mRmax{0}; // Maximum Radius

// Individual Pieces
TGeoVolume* mPixelArray{nullptr};
TGeoVolumeAssembly* mTile{nullptr};
TGeoVolumeAssembly* mRSU{nullptr};
TGeoVolumeAssembly* mSegment{nullptr};
TGeoVolumeAssembly* mChip{nullptr};
TGeoVolumeAssembly* mCarbonForm{nullptr};
TGeoVolumeAssembly* mLayer{nullptr};

ClassDefOverride(ITS3Layer, 0); // ITS3 geometry
}; // namespace its3
} // namespace its3
} // namespace o2
ClassDefNV(ITS3Layer, 0);
};
} // namespace o2::its3

#endif
Loading

0 comments on commit 745ac73

Please sign in to comment.