// ******** Header of base class to support the building of HypGe cluster geometries ************* // by steinen@kph.uni-mainz.de #ifndef PNDGEOHYPGECLUSTER_H #define PNDGEOHYPGECLUSTER_H #include "PndGeoHypGeCrystal.h" #include "TGeoArb8.h" #include "TGeoXtru.h" class PndGeoHypGeCluster { protected: //Media TGeoMedium *Ge; TGeoMedium *Al; Int_t ClusterNumber; Int_t StartClusterNumber; TGeoVolume *ClusterAssembly; PndGeoHypGeCrystal *Crystal1; PndGeoHypGeCrystal *Crystal2; PndGeoHypGeCrystal *Crystal3; Int_t Crystal1Number; Int_t Crystal2Number; Int_t Crystal3Number; Double_t TripleXOffset; Double_t TripleYOffset; TGeoRotation *Crystal1Rotation; TGeoRotation *Crystal2Rotation; TGeoRotation *Crystal3Rotation; TGeoCombiTrans *Crystal1Position; TGeoCombiTrans *Crystal2Position; TGeoCombiTrans *Crystal3Position; //objects/variables to build the cryostat Double_t CryostatHeight; Double_t CryostatFrontThickness; Double_t CryostatUpperPartHeight; // lots of storage for coordinates Double_t *CryostatOuterArb8XY_1; Double_t *CryostatOuterArb8XY_2; Double_t *CryostatOuterArb8XY_3; Double_t *CryostatOuterArb8XY_4; Double_t *CryostatOuterArb8XY_5; Double_t *CryostatInnerArb8XY_1; Double_t *CryostatInnerArb8XY_2; Double_t *CryostatInnerArb8XY_3; Double_t *CryostatInnerArb8XY_4; Double_t *CryostatInnerArb8XY_5; //upper parts Double_t *CryostatUpperArb8XY_1; Double_t *CryostatUpperArb8XY_2; Double_t *CryostatUpperArb8XY_3; Double_t *CryostatUpperArb8XY_4; Double_t *CryostatUpperArb8XY_5; Double_t *CryostatUpperArb8XY_6; Double_t *CryostatUpperArb8XY_7; Double_t *CryostatUpperArb8XY_8; Double_t *CryostatUpperArb8XY_9; Double_t *CryostatUpperArb8XY_10; Double_t *CryostatUpperArb8XY_11; Double_t *CryostatUpperArb8XY_12; //top //the single parts of the cryostat TGeoArb8 *CryostatOuterArb8_1; TGeoArb8 *CryostatOuterArb8_2; TGeoArb8 *CryostatOuterArb8_3; TGeoArb8 *CryostatOuterArb8_4; TGeoArb8 *CryostatOuterArb8_5; TGeoArb8 *CryostatInnerArb8_1; TGeoArb8 *CryostatInnerArb8_2; TGeoArb8 *CryostatInnerArb8_3; TGeoArb8 *CryostatInnerArb8_4; TGeoArb8 *CryostatInnerArb8_5; //upper TGeoArb8 *CryostatUpperArb8_1; TGeoArb8 *CryostatUpperArb8_2; TGeoArb8 *CryostatUpperArb8_3; TGeoArb8 *CryostatUpperArb8_4; TGeoArb8 *CryostatUpperArb8_5; TGeoArb8 *CryostatUpperArb8_6; TGeoArb8 *CryostatUpperArb8_7; TGeoArb8 *CryostatUpperArb8_8; TGeoArb8 *CryostatUpperArb8_9; TGeoArb8 *CryostatUpperArb8_10; TGeoArb8 *CryostatUpperArb8_11; TGeoArb8 *CryostatUpperArb8_12; //top Double_t *CryostatTopXCoordinates; Double_t *CryostatTopYCoordinates; Double_t CryostatTopThickness; TGeoXtru *CryostatTopShape; // combination TGeoTranslation *CryostatInnerZTranslation; TGeoTranslation *CryostatUpperPartsZTranslation; TGeoCompositeShape *CryostatShape; TGeoCombiTrans *CryostatCombiTrans; TGeoVolume *Cryostat; TGeoCombiTrans *CryostatTopCombiTrans; TGeoVolume *CryostatTop; Int_t CryostatTransparency; Double_t ClusterPositionX; Double_t ClusterPositionY; Double_t ClusterPositionZ; Double_t ClusterEulerAnglePsi; //first angle aroud z-axis Double_t ClusterEulerAngleTheta; //second angle around new x-axis (x') Double_t ClusterEulerAnglePhi; //third angle around new z-axis (z'') public: PndGeoHypGeCluster(){}; // do not use! ~PndGeoHypGeCluster() {}; // -------- gives the copy number of the last placed cluster. If no cluster placed yet, returns the starting cluster number ---- Int_t GetClusterNumber(); // -------- gives the starting cluster number (number giving @ construction) ------ Int_t GetStartClusterNumber(); // -------- gives the number of placed clusters ----- Int_t GetNumberOfCopies(); virtual void BuildCrystals(Int_t *CrystalNumber) = 0; virtual void BuildCryostat() = 0; virtual void PrintNodes(Int_t nLevels ) =0; void SetCryostatTransparency(Int_t ExtTransparency ); void SetCryostatColor( Color_t ExtColor); void PlaceCluster(TGeoVolume *top, TGeoMatrix* ClusterPlaceAndDirectionTranslation,Int_t *CrystalNumber); // places the triple cluster void PlaceCluster(TGeoVolume *top, Double_t x, Double_t y, Double_t z, Double_t GlobalZOffset , Double_t phi, Double_t theta, Double_t psi,Int_t *CrystalNumber); void PlaceCluster(TGeoVolume *top, Double_t GlobalZOffset, Double_t Radius , Double_t phi, Double_t theta, Double_t psi,Int_t *CrystalNumber);// can be used for radial-symmetric arrangements ClassDef(PndGeoHypGeCluster,0); // Class for GeoHypGeTripleCluster }; #endif /* !PNDGEOHYPGECLUSTER_H */