Skip to content
Snippets Groups Projects
Commit d75c95c9 authored by adrien-matta's avatar adrien-matta
Browse files

* fixing warning in annular S1

parent 03d89a53
No related branches found
No related tags found
No related merge requests found
...@@ -61,22 +61,22 @@ class TS1Data : public TObject { ...@@ -61,22 +61,22 @@ class TS1Data : public TObject {
///////////////////// GETTERS //////////////////////// ///////////////////// GETTERS ////////////////////////
// (Th,E) // (Th,E)
const int GetS1ThetaEMult() const {return fS1_Theta_E_DetNbr.size();} const unsigned int GetS1ThetaEMult() const {return fS1_Theta_E_DetNbr.size();}
const int GetS1ThetaEDetectorNbr(const int& i) const {return fS1_Theta_E_DetNbr.at(i);} const int GetS1ThetaEDetectorNbr(const int& i) const {return fS1_Theta_E_DetNbr.at(i);}
const int GetS1ThetaEStripNbr(const int& i) const {return fS1_Theta_E_StripNbr.at(i);} const int GetS1ThetaEStripNbr(const int& i) const {return fS1_Theta_E_StripNbr.at(i);}
const double GetS1ThetaEEnergy(const int& i) const {return fS1_Theta_E_Energy.at(i);} const double GetS1ThetaEEnergy(const int& i) const {return fS1_Theta_E_Energy.at(i);}
// (Th,T) // (Th,T)
const int GetS1ThetaTMult() const {return fS1_Theta_T_DetNbr.size();} const unsigned int GetS1ThetaTMult() const {return fS1_Theta_T_DetNbr.size();}
const int GetS1ThetaTDetectorNbr(const int& i) const {return fS1_Theta_T_DetNbr.at(i);} const int GetS1ThetaTDetectorNbr(const int& i) const {return fS1_Theta_T_DetNbr.at(i);}
const int GetS1ThetaTStripNbr(const int& i) const {return fS1_Theta_T_StripNbr.at(i);} const int GetS1ThetaTStripNbr(const int& i) const {return fS1_Theta_T_StripNbr.at(i);}
const double GetS1ThetaTTime(const int& i) const {return fS1_Theta_T_Time.at(i);} const double GetS1ThetaTTime(const int& i) const {return fS1_Theta_T_Time.at(i);}
// (Ph,E) // (Ph,E)
const int GetS1PhiEMult() const {return fS1_Phi_E_DetNbr.size();} const unsigned int GetS1PhiEMult() const {return fS1_Phi_E_DetNbr.size();}
const int GetS1PhiEDetectorNbr(const int& i) const {return fS1_Phi_E_DetNbr.at(i);} const int GetS1PhiEDetectorNbr(const int& i) const {return fS1_Phi_E_DetNbr.at(i);}
const int GetS1PhiEStripNbr(const int& i) const {return fS1_Phi_E_StripNbr.at(i);} const int GetS1PhiEStripNbr(const int& i) const {return fS1_Phi_E_StripNbr.at(i);}
const double GetS1PhiEEnergy(const int& i) const {return fS1_Phi_E_Energy.at(i);} const double GetS1PhiEEnergy(const int& i) const {return fS1_Phi_E_Energy.at(i);}
// (Ph,T) // (Ph,T)
const int GetS1PhiTMult() const {return fS1_Phi_T_DetNbr.size();} const unsigned int GetS1PhiTMult() const {return fS1_Phi_T_DetNbr.size();}
const int GetS1PhiTDetectorNbr(const int& i) const {return fS1_Phi_T_DetNbr.at(i);} const int GetS1PhiTDetectorNbr(const int& i) const {return fS1_Phi_T_DetNbr.at(i);}
const int GetS1PhiTStripNbr(const int& i) const {return fS1_Phi_T_StripNbr.at(i);} const int GetS1PhiTStripNbr(const int& i) const {return fS1_Phi_T_StripNbr.at(i);}
const double GetS1PhiTTime(const int& i) const {return fS1_Phi_T_Time.at(i);} const double GetS1PhiTTime(const int& i) const {return fS1_Phi_T_Time.at(i);}
......
...@@ -149,7 +149,7 @@ void AnnularS1::VolumeMaker(G4int DetecNumber, ...@@ -149,7 +149,7 @@ void AnnularS1::VolumeMaker(G4int DetecNumber,
// Wafer Shape to be substracted to the PCB // Wafer Shape to be substracted to the PCB
G4Tubs* solidWaferShapeBase = new G4Tubs("WaferShape", G4Tubs* solidWaferShapeBase = new G4Tubs("WaferShape",
WaferInnerRadius, 0,
WaferOutterRadius, WaferOutterRadius,
PCBThickness, PCBThickness,
0*deg, 0*deg,
...@@ -179,17 +179,10 @@ void AnnularS1::VolumeMaker(G4int DetecNumber, ...@@ -179,17 +179,10 @@ void AnnularS1::VolumeMaker(G4int DetecNumber,
// PCB final // PCB final
G4SubtractionSolid* solidPCB1 = new G4SubtractionSolid("AnnularS1_PCB1", G4SubtractionSolid* solidPCB = new G4SubtractionSolid("AnnularS1_PCB1",
solidPCBBase, solidPCBBase,
solidWaferShape); solidWaferShape);
G4Tubs* solidTub =
new G4Tubs("central_hole",0,PCBInnerRadius,PCBThickness,0,360*deg);
G4SubtractionSolid* solidPCB = new G4SubtractionSolid("AnnularS1_PCB",
solidPCB1,
solidTub);
G4LogicalVolume* logicPCB = new G4LogicalVolume(solidPCB, Vacuum, "AnnularS1_PCB", 0, 0, 0); G4LogicalVolume* logicPCB = new G4LogicalVolume(solidPCB, Vacuum, "AnnularS1_PCB", 0, 0, 0);
new G4PVPlacement(G4Transform3D(*norotation, G4ThreeVector()), new G4PVPlacement(G4Transform3D(*norotation, G4ThreeVector()),
......
...@@ -119,8 +119,8 @@ namespace ANNULARS1{ ...@@ -119,8 +119,8 @@ namespace ANNULARS1{
// PCB // PCB
const G4double PCBPointsX[8]={-40,40,60,60,40,-40,-60,-60}; const G4double PCBPointsX[8]={-40,40,60,60,40,-40,-60,-60};
const G4double PCBPointsY[8]={60,60,40,-40,-60,-60,-40,40}; const G4double PCBPointsY[8]={60,60,40,-40,-60,-60,-40,40};
const G4double PCBThickness=2*mm; const G4double PCBThickness=3.2*mm;
const G4double PCBInnerRadius=20*mm; const G4double PCBInnerRadius=0*mm;
// Wafer // Wafer
const G4double WaferOutterRadius = 50*mm; const G4double WaferOutterRadius = 50*mm;
const G4double WaferInnerRadius = 23*mm; const G4double WaferInnerRadius = 23*mm;
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr * * Original Author: Adrien MATTA contact address: matta@ipno.in2p3.fr *
* * * *
* Creation Date : January 2009 * * Creation Date : January 2009 *
* Last update : October 2009 * * Last update : May 2014 *
*---------------------------------------------------------------------------* *---------------------------------------------------------------------------*
* Decription: * * Decription: *
* This file describe the MUST2 charge particle Detector * * This file describe the MUST2 charge particle Detector *
...@@ -28,9 +28,10 @@ ...@@ -28,9 +28,10 @@
#include "G4Trd.hh" #include "G4Trd.hh"
#include "G4Box.hh" #include "G4Box.hh"
#include "G4Trap.hh" #include "G4Trap.hh"
#include "G4ExtrudedSolid.hh"
#include "G4SubtractionSolid.hh"
//G4 various object //G4 various object
#include "G4MaterialTable.hh" #include "G4MaterialTable.hh"
#include "G4Element.hh" #include "G4Element.hh"
#include "G4ElementTable.hh" #include "G4ElementTable.hh"
...@@ -62,6 +63,13 @@ using namespace MUST2 ; ...@@ -62,6 +63,13 @@ using namespace MUST2 ;
MUST2Array::MUST2Array(){ MUST2Array::MUST2Array(){
m_Event = new TMust2Data() ; m_Event = new TMust2Data() ;
InitializeMaterial(); InitializeMaterial();
// Common vis attribute:
m_PCBVisAtt = new G4VisAttributes(G4Colour(0.2, 0.5, 0.2)) ;
m_SiliconVisAtt = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)) ;
m_SiLiVisAtt = new G4VisAttributes(G4Colour(0.3, 1, 0.3));
m_CsIVisAtt = new G4VisAttributes(G4Colour(1, 0.5, 0));
m_CoolingVisAtt = new G4VisAttributes(G4Colour(0.5, 0.25, 0.25));
} }
MUST2Array::~MUST2Array(){ MUST2Array::~MUST2Array(){
...@@ -70,7 +78,6 @@ MUST2Array::~MUST2Array(){ ...@@ -70,7 +78,6 @@ MUST2Array::~MUST2Array(){
delete m_MaterialCsI; delete m_MaterialCsI;
delete m_MaterialVacuum ; delete m_MaterialVacuum ;
delete m_MaterialMyl; delete m_MaterialMyl;
delete m_MaterialHarvar;
} }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
...@@ -129,6 +136,447 @@ void MUST2Array::AddTelescope( G4double R, ...@@ -129,6 +136,447 @@ void MUST2Array::AddTelescope( G4double R,
m_X1_Y128 .push_back(empty) ; m_X1_Y128 .push_back(empty) ;
m_X128_Y128 .push_back(empty) ; m_X128_Y128 .push_back(empty) ;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4LogicalVolume* MUST2Array::GetLogicalVolumeMUST2Short(){
////////////////////////////////////////////////////////////////
////////////// Starting Volume Definition //////////////////////
////////////////////////////////////////////////////////////////
G4Trd* solidMM = new G4Trd("MUST2Telescope" + DetectorNumber, 0.5*FaceFront, 0.5*FaceBack, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length);
G4LogicalVolume* logicMM = new G4LogicalVolume(solidMM, m_MaterialIron, "MUST2Telescope" + DetectorNumber, 0, 0, 0);
G4String Name = "MUST2Telescope" + DetectorNumber ;
new G4PVPlacement( G4Transform3D(*MMrot, MMpos),
logicMM ,
Name ,
world ,
false ,
0 );
if (m_non_sensitive_part_visiualisation){
G4VisAttributes* FrameVisAtt = new G4VisAttributes(G4Colour(0.80, 0.80, 0.80));
FrameVisAtt->SetForceWireframe(true);
logicMM->SetVisAttributes(FrameVisAtt) ;
}
else logicMM->SetVisAttributes(G4VisAttributes::Invisible) ;
G4ThreeVector positionVacBox = G4ThreeVector(0, 0, VacBox_PosZ);
G4Trd* solidVacBox =
new G4Trd("solidVacBox", 0.5*ActiveWaferSize, 0.5*CsIFaceFront, 0.5*ActiveWaferSize, 0.5*CsIFaceFront, 0.5*VacBoxThickness);
G4LogicalVolume* logicVacBox = new G4LogicalVolume(solidVacBox, m_MaterialVacuum, "logicVacBox", 0, 0, 0);
new G4PVPlacement(0, positionVacBox, logicVacBox, Name + "_VacBox", logicMM, false, 0);
logicVacBox->SetVisAttributes(G4VisAttributes::Invisible);
////////////////////////////////////////////////////////////////
/////////////////Si Strip Construction//////////////////////////
////////////////////////////////////////////////////////////////
// A no rotation matrix is always handy ;)
G4RotationMatrix* norotation = new G4RotationMatrix();
// Create the front support frame for Si and SiLi
vector<G4TwoVector> polygon;
for(unsigned int i = 0 ; i < 4 ; i++){
G4TwoVector Point(PCBPointsX[i],PCBPointsY[i]);
polygon.push_back(Point);
}
// The PCB lenth is used to rescale different part of the detector
G4double PCBlength = PCBPointsX[0] - PCBPointsX[1];
G4ExtrudedSolid* solidFrontFrameBase = new G4ExtrudedSolid("Must2 Front Frame",
polygon,
FrontFrameThickness*0.5,
G4TwoVector(0,0),FrontFrameFrontSize/PCBlength,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength);
G4ExtrudedSolid* solidCavityShape1 = new G4ExtrudedSolid("Cavity1",
polygon,
FrontFrameThickness*0.5+PCBThickness,
G4TwoVector(0,0),CavityShape1FrontSize/PCBlength,
G4TwoVector(0,0),CavityShape1BackSize/PCBlength);
G4SubtractionSolid* solidFrontFrame1 = new G4SubtractionSolid("Frame1",
solidFrontFrameBase,
solidCavityShape1,
G4Transform3D(*norotation,G4ThreeVector(0,0,0)));
G4Box* solidCavityShape2 = new G4Box("Cavity2", 0.5*CavityShape2Width, (0.5+0.5)*CavityShape2Width, 0.5*CavityShape2Thickness);
G4SubtractionSolid* solidFrontFrame2 = new G4SubtractionSolid("Frame2",
solidFrontFrame1,
solidCavityShape2,
G4Transform3D(*norotation,G4ThreeVector(0,0.5*CavityShape2Width,CavityShape2Center)));
G4ExtrudedSolid* solidCutOut = new G4ExtrudedSolid("Cutout",
polygon,
FrontFrameThickness*0.8,
G4TwoVector(0,0),1.1*FrontFrameBackSize/PCBlength,
G4TwoVector(0,0),1.1*FrontFrameBackSize/PCBlength);
G4SubtractionSolid* solidFrontFrame3 = new G4SubtractionSolid("Must2 Front Frame",
solidFrontFrame2,
solidCutOut,
G4Transform3D(*norotation,G4ThreeVector(0,FrontFrameBackSize*0.5*1.1+66*mm,0)));
G4SubtractionSolid* solidFrontFrame = new G4SubtractionSolid("Must2 Front Frame",
solidFrontFrame3,
solidCutOut,
G4Transform3D(*norotation,G4ThreeVector(-FrontFrameBackSize*0.5*1.1-66*mm,0,0)));
G4LogicalVolume* logicFrontFrame = new G4LogicalVolume(solidFrontFrame,m_MaterialAluminium,"Must2 Front Frame", 0, 0, 0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,Silicon_PosZ+FrontFrameThickness*0.5+0.5*PCBThickness)),
logicFrontFrame,
"Must2 Front Fame",
logicMM,
false,
0);
// Electronic bloc
G4Box* solidMUFEE = new G4Box("solidMUFEE", 0.5*MUFEESize, 0.5*MUFEESize, 0.5*MUFEEThickness);
G4Box* solidCooling = new G4Box("solidCooling", 0.5*MUFEESize, 0.5*MUFEESize, 0.5*CoolingThickness);
G4ExtrudedSolid* solidElecFrameShort = new G4ExtrudedSolid("SolidElecFrame",
polygon,
CoolingThickness*0.5,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength);
G4LogicalVolume* logicMUFEE = new G4LogicalVolume(solidMUFEE,m_MaterialAluminium,"Must2 MUFEE", 0, 0, 0);
G4LogicalVolume* logicCooling = new G4LogicalVolume(solidCooling,m_MaterialAluminium,"Must2 Cooling", 0, 0, 0);
G4LogicalVolume* logicElecFrame = new G4LogicalVolume(solidElecFrameShort,m_MaterialAluminium,"Must2 Frame", 0, 0, 0);
logicMUFEE->SetVisAttributes(m_PCBVisAtt);
logicCooling->SetVisAttributes(m_CoolingVisAtt);
G4double CoolingPosition = FrontFrameThickness+Silicon_PosZ+0.5*CoolingThickness;
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition)),
logicCooling,
"Must2 Cooling",
logicMM,
false,
0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition)),
logicElecFrame,
"Must2 Fame",
logicMM,
false,
0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition-0.5*MUFEEThickness-0.5*CoolingThickness)),
logicMUFEE,
"Must2 Front Fame",
logicMM,
false,
0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition+0.5*MUFEEThickness+0.5*CoolingThickness)),
logicMUFEE,
"Must2 Front Fame",
logicMM,
false,
0);
if (wSi) {
// Volume containing the Silicon detector
G4ExtrudedSolid* solidSilicon = new G4ExtrudedSolid(Name,
polygon,
PCBThickness*0.5,
G4TwoVector(0,0),1,
G4TwoVector(0,0),1);
G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon,m_MaterialVacuum, Name, 0, 0, 0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,Silicon_PosZ)),
logicSilicon,
"Silicon",
logicMM,
false,
0);
logicSilicon->SetVisAttributes(G4VisAttributes::Invisible);
// PCB Base
G4ExtrudedSolid* solidPCBBase = new G4ExtrudedSolid("PCBBase",
polygon,
PCBThickness*0.5,
G4TwoVector(0,0),1,
G4TwoVector(0,0),1);
// Wafer Shape
G4Box* solidWaferShape = new G4Box("solidWaferShape", 0.5*WaferSize, 0.5*WaferSize, 0.6*PCBThickness);
// PCB
G4SubtractionSolid* solidPCB = new G4SubtractionSolid("PCB",
solidPCBBase,
solidWaferShape,
G4Transform3D(*norotation,G4ThreeVector(0,0,0)));
G4LogicalVolume* logicPCB = new G4LogicalVolume(solidPCB, m_MaterialSilicon, "logicPCB", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicPCB, Name + "_Silicon", logicSilicon, false, 0);
logicPCB->SetVisAttributes(m_PCBVisAtt);
// Wafer
G4Box* solidWafer = new G4Box("solidWaferShape", 0.5*WaferSize, 0.5*WaferSize, 0.5*WaferThickness);
G4LogicalVolume* logicWafer = new G4LogicalVolume(solidWafer, m_MaterialSilicon, "logicWafer", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicWafer, Name + "_Silicon", logicSilicon, false, 0);
// Active Wafer
G4Box* solidActiveWafer = new G4Box("solidActiveWaferShape", 0.5*ActiveWaferSize, 0.5*ActiveWaferSize, 0.5*WaferThickness);
G4LogicalVolume* logicActiveWafer = new G4LogicalVolume(solidActiveWafer, m_MaterialSilicon, "logicActiveWafer", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicActiveWafer, Name + "_Silicon", logicSilicon, false, 0);
G4ThreeVector positionAluStripFront = G4ThreeVector(0, 0, 0.5*WaferThickness+0.5*AluStripThickness);
G4ThreeVector positionAluStripBack = G4ThreeVector(0, 0, -0.5*WaferThickness-0.5*AluStripThickness);
G4Box* solidAluStrip = new G4Box("AluBox", 0.5*ActiveWaferSize, 0.5*ActiveWaferSize, 0.5*AluStripThickness);
G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, m_MaterialAluminium, "logicAluStrip", 0, 0, 0);
new G4PVPlacement(0, positionAluStripFront, logicAluStrip, "AluStripFront", logicSilicon, false, 0);
new G4PVPlacement(0, positionAluStripBack, logicAluStrip, "AluStripBack", logicSilicon, false, 0);
logicAluStrip->SetVisAttributes(G4VisAttributes::Invisible);
G4ThreeVector positionSilicon = G4ThreeVector(0, 0, Silicon_PosZ);
new G4PVPlacement(0, G4ThreeVector(0, 0, Silicon_PosZ), logicSilicon, "Silicon", logicMM, false, 0);
// Set Silicon strip sensible
logicActiveWafer->SetSensitiveDetector(m_StripScorer);
// Visualisation of Silicon Strip
logicWafer->SetVisAttributes(m_SiliconVisAtt);
logicActiveWafer->SetVisAttributes(m_SiliconVisAtt);
}
////////////////////////////////////////////////////////////////
//////////////////// SiLi Construction ////////////////////////
////////////////////////////////////////////////////////////////
if (wSiLi) {
G4double SiLiSpace = 8 * mm;
G4RotationMatrix* rotSiLi = new G4RotationMatrix(0,0,0);
G4Box* solidSiLi = new G4Box("SiLi", 0.5*ActiveWaferSize+0.5*SiLiSpace, 0.5*ActiveWaferSize, 0.5*SiLiThickness);
G4LogicalVolume* logicSiLi = new G4LogicalVolume(solidSiLi, m_MaterialAluminium, Name + "_SiLi" , 0, 0, 0);
logicSiLi->SetVisAttributes(G4VisAttributes::Invisible);
new G4PVPlacement( G4Transform3D(*rotSiLi, G4ThreeVector(0,0,0) ) ,
logicSiLi ,
Name + "_SiLi",
logicVacBox ,
false ,
0);
// SiLi are placed inside of the VacBox...
// Left/Right define when looking to detector from Si to CsI
G4double SiLi_HighY_Upper = 19.86 * mm;
G4double SiLi_HighY_Center = 25.39 * mm;
G4double SiLi_WidthX_Left = 22.85 * mm;
G4double SiLi_WidthX_Right = 24.9 * mm;
G4double SiLi_ShiftX = 0.775 * mm;
// SiLi are organized by two group of 8 Up(9 to 15) and Down(1 to 8).
G4ThreeVector ShiftSiLiUp = G4ThreeVector(-0.25 * ActiveWaferSize - 0.5 * SiLiSpace, 0, 0) ;
G4ThreeVector ShiftSiLiDown = G4ThreeVector(0.25 * ActiveWaferSize + 0.5 * SiLiSpace, 0, 0) ;
// SiLi : left side of SiLi detector
G4Box* solidSiLi_LT = new G4Box("SiLi_LT" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness);
G4Box* solidSiLi_RT = new G4Box("SiLi_RT" , 0.5*SiLi_WidthX_Right , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness);
G4Box* solidSiLi_LC1 = new G4Box("SiLi_LC1" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Center , 0.5*SiLiThickness);
G4Box* solidSiLi_RC1 = new G4Box("SiLi_RC1" , 0.5*SiLi_WidthX_Right , 0.5*SiLi_HighY_Center , 0.5*SiLiThickness);
G4Box* solidSiLi_LB = new G4Box("SiLi_LB" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness);
G4Box* solidSiLi_RB = new G4Box("SiLi_RB" , 0.5*SiLi_WidthX_Right , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness);
G4Box* solidSiLi_LC2 = new G4Box("SiLi_LC2" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Center , 0.5*SiLiThickness);
G4Box* solidSiLi_RC2 = new G4Box("SiLi_RC2" , 0.5*SiLi_WidthX_Right , 0.5*SiLi_HighY_Center , 0.5*SiLiThickness);
G4LogicalVolume* logicSiLi_LT = new G4LogicalVolume(solidSiLi_LT , m_MaterialSilicon , "SiLi_LT" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_RT = new G4LogicalVolume(solidSiLi_RT , m_MaterialSilicon , "SiLi_RT" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_LC1 = new G4LogicalVolume(solidSiLi_LC1 , m_MaterialSilicon , "SiLi_LC1" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_RC1 = new G4LogicalVolume(solidSiLi_RC1 , m_MaterialSilicon , "SiLi_RC1" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_LB = new G4LogicalVolume(solidSiLi_LB , m_MaterialSilicon , "SiLi_LB" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_RB = new G4LogicalVolume(solidSiLi_RB , m_MaterialSilicon , "SiLi_RB" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_LC2 = new G4LogicalVolume(solidSiLi_LC2 , m_MaterialSilicon , "SiLi_LC2" , 0 , 0 , 0);
G4LogicalVolume* logicSiLi_RC2 = new G4LogicalVolume(solidSiLi_RC2 , m_MaterialSilicon , "SiLi_RC2" , 0 , 0 , 0);
G4double interSiLi = 0.5 * mm;
// Top
G4ThreeVector positionSiLi_LT_up = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX ,
0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi,
0);
positionSiLi_LT_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_RT_up = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi,
0);
positionSiLi_RT_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_LC1_up = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX ,
0.5 * SiLi_HighY_Center + 0.5 * interSiLi,
0);
positionSiLi_LC1_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_RC1_up = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
0.5 * SiLi_HighY_Center + 0.5 * interSiLi,
0);
positionSiLi_RC1_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_LB_up = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX ,
-0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi ,
0);
positionSiLi_LB_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_RB_up = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX ,
-0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi ,
0);
positionSiLi_RB_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_LC2_up = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX ,
-0.5 * SiLi_HighY_Center - 0.5 * interSiLi,
0);
positionSiLi_LC2_up += ShiftSiLiUp ;
G4ThreeVector positionSiLi_RC2_up = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX ,
-0.5 * SiLi_HighY_Center - 0.5 * interSiLi ,
0);
positionSiLi_RC2_up += ShiftSiLiUp ;
// Down
G4ThreeVector positionSiLi_LT_down = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX,
0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi,
0);
positionSiLi_LT_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_RT_down = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
0.5 * SiLi_HighY_Upper + SiLi_HighY_Center + 1.5 * interSiLi,
0);
positionSiLi_RT_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_LC1_down = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX,
0.5 * SiLi_HighY_Center + 0.5 * interSiLi,
0);
positionSiLi_LC1_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_RC1_down = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
0.5 * SiLi_HighY_Center + 0.5 * interSiLi ,
0);
positionSiLi_RC1_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_LB_down = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX,
-0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi,
0);
positionSiLi_LB_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_RB_down = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
-0.5 * SiLi_HighY_Upper - SiLi_HighY_Center - 1.5 * interSiLi,
0);
positionSiLi_RB_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_LC2_down = G4ThreeVector( -0.5 * SiLi_WidthX_Left - interSiLi - SiLi_ShiftX,
-0.5 * SiLi_HighY_Center - 0.5 * interSiLi,
0);
positionSiLi_LC2_down += ShiftSiLiDown ;
G4ThreeVector positionSiLi_RC2_down = G4ThreeVector( 0.5 * SiLi_WidthX_Right - SiLi_ShiftX,
-0.5 * SiLi_HighY_Center - 0.5 * interSiLi,
0);
positionSiLi_RC2_down += ShiftSiLiDown ;
// up
new G4PVPlacement(0 , positionSiLi_LT_up , logicSiLi_LT , Name + "_SiLi_Pad9" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RT_up , logicSiLi_RT , Name + "_SiLi_Pad10" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_LC1_up , logicSiLi_LC1 , Name + "_SiLi_Pad11" , logicSiLi , false , 0);
new G4PVPlacement(0 , positionSiLi_RC1_up , logicSiLi_RC1 , Name + "_SiLi_Pad12" , logicSiLi , false , 0);
new G4PVPlacement(0 , positionSiLi_LB_up , logicSiLi_LB , Name + "_SiLi_Pad16" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RB_up , logicSiLi_RB , Name + "_SiLi_Pad15" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_LC2_up , logicSiLi_LC2 , Name + "_SiLi_Pad14" , logicSiLi , false , 0);
new G4PVPlacement(0 , positionSiLi_RC2_up , logicSiLi_RC2 , Name + "_SiLi_Pad13" , logicSiLi , false , 0);
// down
new G4PVPlacement(0 , positionSiLi_LT_down , logicSiLi_LT , Name + "_SiLi_Pad2" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RT_down , logicSiLi_RT , Name + "_SiLi_Pad1" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_LC1_down , logicSiLi_LC1 , Name + "_SiLi_Pad4" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RC1_down , logicSiLi_RC1 , Name + "_SiLi_Pad3" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_LB_down , logicSiLi_LB , Name + "_SiLi_Pad7" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RB_down , logicSiLi_RB , Name + "_SiLi_Pad8" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_LC2_down , logicSiLi_LC2 , Name + "_SiLi_Pad5" , logicSiLi , false , 0) ;
new G4PVPlacement(0 , positionSiLi_RC2_down , logicSiLi_RC2 , Name + "_SiLi_Pad6" , logicSiLi , false , 0) ;
// Set SiLi sensible
logicSiLi_LT->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_RT->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_LC1->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_RC1->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_LB->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_RB->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_LC2->SetSensitiveDetector(m_SiLiScorer);
logicSiLi_RC2->SetSensitiveDetector(m_SiLiScorer);
// Mark blue a SiLi to see telescope orientation
logicSiLi_LT->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RT->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LC1->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RC1->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LB->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RB->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LC2->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RC2->SetVisAttributes(m_SiLiVisAtt);
delete rotSiLi;
}
} }
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
...@@ -146,7 +594,8 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -146,7 +594,8 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
Number << NbrTelescopes ; Number << NbrTelescopes ;
DetectorNumber = Number.str(); DetectorNumber = Number.str();
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////// Starting Volume Definition ////////////////////// ////////////// Starting Volume Definition //////////////////////
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
G4Trd* solidMM = new G4Trd("MUST2Telescope" + DetectorNumber, 0.5*FaceFront, 0.5*FaceBack, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length); G4Trd* solidMM = new G4Trd("MUST2Telescope" + DetectorNumber, 0.5*FaceFront, 0.5*FaceBack, 0.5*FaceFront, 0.5*FaceBack, 0.5*Length);
...@@ -165,49 +614,218 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -165,49 +614,218 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
FrameVisAtt->SetForceWireframe(true); FrameVisAtt->SetForceWireframe(true);
logicMM->SetVisAttributes(FrameVisAtt) ; logicMM->SetVisAttributes(FrameVisAtt) ;
} }
else logicMM->SetVisAttributes(G4VisAttributes::Invisible) ;
else logicMM->SetVisAttributes(G4VisAttributes::Invisible) ;
G4ThreeVector positionVacBox = G4ThreeVector(0, 0, VacBox_PosZ); G4ThreeVector positionVacBox = G4ThreeVector(0, 0, VacBox_PosZ);
G4Trd* solidVacBox = new G4Trd("solidVacBox", 0.5*SiliconFace, 0.5*CsIFaceFront, 0.5*SiliconFace, 0.5*CsIFaceFront, 0.5*VacBoxThickness); G4Trd* solidVacBox =
new G4Trd("solidVacBox", 0.5*ActiveWaferSize, 0.5*CsIFaceFront, 0.5*ActiveWaferSize, 0.5*CsIFaceFront, 0.5*VacBoxThickness);
G4LogicalVolume* logicVacBox = new G4LogicalVolume(solidVacBox, m_MaterialVacuum, "logicVacBox", 0, 0, 0); G4LogicalVolume* logicVacBox = new G4LogicalVolume(solidVacBox, m_MaterialVacuum, "logicVacBox", 0, 0, 0);
new G4PVPlacement(0, positionVacBox, logicVacBox, Name + "_VacBox", logicMM, false, 0); new G4PVPlacement(0, positionVacBox, logicVacBox, Name + "_VacBox", logicMM, false, 0);
logicVacBox->SetVisAttributes(G4VisAttributes::Invisible); logicVacBox->SetVisAttributes(G4VisAttributes::Invisible);
G4VisAttributes* SiliconVisAtt = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)) ;
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
/////////////////Si Strip Construction////////////////////////// /////////////////Si Strip Construction//////////////////////////
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// A no rotation matrix is always handy ;)
G4RotationMatrix* norotation = new G4RotationMatrix();
// Create the front support frame for Si and SiLi
vector<G4TwoVector> polygon;
for(unsigned int i = 0 ; i < 4 ; i++){
G4TwoVector Point(PCBPointsX[i],PCBPointsY[i]);
polygon.push_back(Point);
}
// The PCB lenth is used to rescale different part of the detector
G4double PCBlength = PCBPointsX[0] - PCBPointsX[1];
G4ExtrudedSolid* solidFrontFrameBase = new G4ExtrudedSolid("Must2 Front Frame",
polygon,
FrontFrameThickness*0.5,
G4TwoVector(0,0),FrontFrameFrontSize/PCBlength,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength);
G4ExtrudedSolid* solidCavityShape1 = new G4ExtrudedSolid("Cavity1",
polygon,
FrontFrameThickness*0.5+PCBThickness,
G4TwoVector(0,0),CavityShape1FrontSize/PCBlength,
G4TwoVector(0,0),CavityShape1BackSize/PCBlength);
G4SubtractionSolid* solidFrontFrame1 = new G4SubtractionSolid("Frame1",
solidFrontFrameBase,
solidCavityShape1,
G4Transform3D(*norotation,G4ThreeVector(0,0,0)));
G4Box* solidCavityShape2 = new G4Box("Cavity2", 0.5*CavityShape2Width, (0.5+0.5)*CavityShape2Width, 0.5*CavityShape2Thickness);
G4SubtractionSolid* solidFrontFrame2 = new G4SubtractionSolid("Frame2",
solidFrontFrame1,
solidCavityShape2,
G4Transform3D(*norotation,G4ThreeVector(0,0.5*CavityShape2Width,CavityShape2Center)));
G4ExtrudedSolid* solidCutOut = new G4ExtrudedSolid("Cutout",
polygon,
FrontFrameThickness*0.8,
G4TwoVector(0,0),1.1*FrontFrameBackSize/PCBlength,
G4TwoVector(0,0),1.1*FrontFrameBackSize/PCBlength);
G4SubtractionSolid* solidFrontFrame3 = new G4SubtractionSolid("Must2 Front Frame",
solidFrontFrame2,
solidCutOut,
G4Transform3D(*norotation,G4ThreeVector(0,FrontFrameBackSize*0.5*1.1+66*mm,0)));
G4SubtractionSolid* solidFrontFrame = new G4SubtractionSolid("Must2 Front Frame",
solidFrontFrame3,
solidCutOut,
G4Transform3D(*norotation,G4ThreeVector(-FrontFrameBackSize*0.5*1.1-66*mm,0,0)));
G4LogicalVolume* logicFrontFrame = new G4LogicalVolume(solidFrontFrame,m_MaterialAluminium,"Must2 Front Frame", 0, 0, 0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,Silicon_PosZ+FrontFrameThickness*0.5+0.5*PCBThickness)),
logicFrontFrame,
"Must2 Front Fame",
logicMM,
false,
TelescopeNumber);
// Electronic bloc
G4Box* solidMUFEE = new G4Box("solidMUFEE", 0.5*MUFEESize, 0.5*MUFEESize, 0.5*MUFEEThickness);
G4Box* solidCooling = new G4Box("solidCooling", 0.5*MUFEESize, 0.5*MUFEESize, 0.5*CoolingThickness);
G4ExtrudedSolid* solidElecFrameShort = new G4ExtrudedSolid("SolidElecFrame",
polygon,
CoolingThickness*0.5,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength,
G4TwoVector(0,0),FrontFrameBackSize/PCBlength);
G4LogicalVolume* logicMUFEE = new G4LogicalVolume(solidMUFEE,m_MaterialAluminium,"Must2 MUFEE", 0, 0, 0);
G4LogicalVolume* logicCooling = new G4LogicalVolume(solidCooling,m_MaterialAluminium,"Must2 Cooling", 0, 0, 0);
G4LogicalVolume* logicElecFrame = new G4LogicalVolume(solidElecFrameShort,m_MaterialAluminium,"Must2 Frame", 0, 0, 0);
logicMUFEE->SetVisAttributes(m_PCBVisAtt);
logicCooling->SetVisAttributes(m_CoolingVisAtt);
G4double CoolingPosition = FrontFrameThickness+Silicon_PosZ+0.5*CoolingThickness;
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition)),
logicCooling,
"Must2 Cooling",
logicMM,
false,
TelescopeNumber);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition)),
logicElecFrame,
"Must2 Fame",
logicMM,
false,
TelescopeNumber);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition-0.5*MUFEEThickness-0.5*CoolingThickness)),
logicMUFEE,
"Must2 Front Fame",
logicMM,
false,
TelescopeNumber);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,CoolingPosition+0.5*MUFEEThickness+0.5*CoolingThickness)),
logicMUFEE,
"Must2 Front Fame",
logicMM,
false,
TelescopeNumber);
if (wSi) { if (wSi) {
G4ThreeVector positionAluStripFront = G4ThreeVector(0, 0, AluStripFront_PosZ);
G4ThreeVector positionAluStripBack = G4ThreeVector(0, 0, AluStripBack_PosZ);
G4Box* solidAluStrip = new G4Box("AluBox", 0.5*SiliconFace, 0.5*SiliconFace, 0.5*AluStripThickness); // Volume containing the Silicon detector
G4ExtrudedSolid* solidSilicon = new G4ExtrudedSolid(Name,
polygon,
PCBThickness*0.5,
G4TwoVector(0,0),1,
G4TwoVector(0,0),1);
G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon,m_MaterialVacuum, Name, 0, 0, 0);
new G4PVPlacement(G4Transform3D(*norotation,G4ThreeVector(0,0,Silicon_PosZ)),
logicSilicon,
"Silicon",
logicMM,
false,
TelescopeNumber);
logicSilicon->SetVisAttributes(G4VisAttributes::Invisible);
// PCB Base
G4ExtrudedSolid* solidPCBBase = new G4ExtrudedSolid("PCBBase",
polygon,
PCBThickness*0.5,
G4TwoVector(0,0),1,
G4TwoVector(0,0),1);
// Wafer Shape
G4Box* solidWaferShape = new G4Box("solidWaferShape", 0.5*WaferSize, 0.5*WaferSize, 0.6*PCBThickness);
// PCB
G4SubtractionSolid* solidPCB = new G4SubtractionSolid("PCB",
solidPCBBase,
solidWaferShape,
G4Transform3D(*norotation,G4ThreeVector(0,0,0)));
G4LogicalVolume* logicPCB = new G4LogicalVolume(solidPCB, m_MaterialSilicon, "logicPCB", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicPCB, Name + "_Silicon", logicSilicon, false, 0);
logicPCB->SetVisAttributes(m_PCBVisAtt);
// Wafer
G4Box* solidWafer = new G4Box("solidWaferShape", 0.5*WaferSize, 0.5*WaferSize, 0.5*WaferThickness);
G4LogicalVolume* logicWafer = new G4LogicalVolume(solidWafer, m_MaterialSilicon, "logicWafer", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicWafer, Name + "_Silicon", logicSilicon, false, 0);
// Active Wafer
G4Box* solidActiveWafer = new G4Box("solidActiveWaferShape", 0.5*ActiveWaferSize, 0.5*ActiveWaferSize, 0.5*WaferThickness);
G4LogicalVolume* logicActiveWafer = new G4LogicalVolume(solidActiveWafer, m_MaterialSilicon, "logicActiveWafer", 0, 0, 0);
new G4PVPlacement(0, G4ThreeVector(0,0,0), logicActiveWafer, Name + "_Silicon", logicSilicon, false, 0);
G4ThreeVector positionAluStripFront = G4ThreeVector(0, 0, 0.5*WaferThickness+0.5*AluStripThickness);
G4ThreeVector positionAluStripBack = G4ThreeVector(0, 0, -0.5*WaferThickness-0.5*AluStripThickness);
G4Box* solidAluStrip = new G4Box("AluBox", 0.5*ActiveWaferSize, 0.5*ActiveWaferSize, 0.5*AluStripThickness);
G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, m_MaterialAluminium, "logicAluStrip", 0, 0, 0); G4LogicalVolume* logicAluStrip = new G4LogicalVolume(solidAluStrip, m_MaterialAluminium, "logicAluStrip", 0, 0, 0);
new G4PVPlacement(0, positionAluStripFront, logicAluStrip, Name + "_AluStripFront", logicMM, false, 0); new G4PVPlacement(0, positionAluStripFront, logicAluStrip, "AluStripFront", logicSilicon, false, 0);
new G4PVPlacement(0, positionAluStripBack, logicAluStrip, Name + "_AluStripBack", logicMM, false, 0); new G4PVPlacement(0, positionAluStripBack, logicAluStrip, "AluStripBack", logicSilicon, false, 0);
logicAluStrip->SetVisAttributes(G4VisAttributes::Invisible); logicAluStrip->SetVisAttributes(G4VisAttributes::Invisible);
G4ThreeVector positionSilicon = G4ThreeVector(0, 0, Silicon_PosZ); G4ThreeVector positionSilicon = G4ThreeVector(0, 0, Silicon_PosZ);
G4Box* solidSilicon = new G4Box("solidSilicon", 0.5*SiliconFace, 0.5*SiliconFace, 0.5*SiliconThickness); new G4PVPlacement(0, G4ThreeVector(0, 0, Silicon_PosZ), logicSilicon, "Silicon", logicMM, false, 0);
G4LogicalVolume* logicSilicon = new G4LogicalVolume(solidSilicon, m_MaterialSilicon, "logicSilicon", 0, 0, 0);
new G4PVPlacement(0, positionSilicon, logicSilicon, Name + "_Silicon", logicMM, false, 0); // Set Silicon strip sensible
logicActiveWafer->SetSensitiveDetector(m_StripScorer);
// Visualisation of Silicon Strip
///Set Silicon strip sensible logicWafer->SetVisAttributes(m_SiliconVisAtt);
logicSilicon->SetSensitiveDetector(m_StripScorer); logicActiveWafer->SetVisAttributes(m_SiliconVisAtt);
///Visualisation of Silicon Strip
logicSilicon->SetVisAttributes(SiliconVisAtt) ;
} }
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
...@@ -217,7 +835,7 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -217,7 +835,7 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
if (wSiLi) { if (wSiLi) {
G4double SiLiSpace = 8 * mm; G4double SiLiSpace = 8 * mm;
G4RotationMatrix* rotSiLi = new G4RotationMatrix(0,0,0); G4RotationMatrix* rotSiLi = new G4RotationMatrix(0,0,0);
G4Box* solidSiLi = new G4Box("SiLi", 0.5*SiliconFace+0.5*SiLiSpace, 0.5*SiliconFace, 0.5*SiLiThickness); G4Box* solidSiLi = new G4Box("SiLi", 0.5*ActiveWaferSize+0.5*SiLiSpace, 0.5*ActiveWaferSize, 0.5*SiLiThickness);
G4LogicalVolume* logicSiLi = new G4LogicalVolume(solidSiLi, m_MaterialAluminium, Name + "_SiLi" , 0, 0, 0); G4LogicalVolume* logicSiLi = new G4LogicalVolume(solidSiLi, m_MaterialAluminium, Name + "_SiLi" , 0, 0, 0);
logicSiLi->SetVisAttributes(G4VisAttributes::Invisible); logicSiLi->SetVisAttributes(G4VisAttributes::Invisible);
...@@ -238,8 +856,8 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -238,8 +856,8 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
G4double SiLi_ShiftX = 0.775 * mm; G4double SiLi_ShiftX = 0.775 * mm;
// SiLi are organized by two group of 8 Up(9 to 15) and Down(1 to 8). // SiLi are organized by two group of 8 Up(9 to 15) and Down(1 to 8).
G4ThreeVector ShiftSiLiUp = G4ThreeVector(-0.25 * SiliconFace - 0.5 * SiLiSpace, 0, 0) ; G4ThreeVector ShiftSiLiUp = G4ThreeVector(-0.25 * ActiveWaferSize - 0.5 * SiLiSpace, 0, 0) ;
G4ThreeVector ShiftSiLiDown = G4ThreeVector(0.25 * SiliconFace + 0.5 * SiLiSpace, 0, 0) ; G4ThreeVector ShiftSiLiDown = G4ThreeVector(0.25 * ActiveWaferSize + 0.5 * SiLiSpace, 0, 0) ;
// SiLi : left side of SiLi detector // SiLi : left side of SiLi detector
G4Box* solidSiLi_LT = new G4Box("SiLi_LT" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness); G4Box* solidSiLi_LT = new G4Box("SiLi_LT" , 0.5*SiLi_WidthX_Left , 0.5*SiLi_HighY_Upper , 0.5*SiLiThickness);
...@@ -397,17 +1015,16 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -397,17 +1015,16 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
logicSiLi_RC2->SetSensitiveDetector(m_SiLiScorer); logicSiLi_RC2->SetSensitiveDetector(m_SiLiScorer);
// Mark blue a SiLi to see telescope orientation // Mark blue a SiLi to see telescope orientation
G4VisAttributes* SiLiVisAtt = new G4VisAttributes(G4Colour(0.3, 1, 0.3));
logicSiLi_LT->SetVisAttributes(SiLiVisAtt); logicSiLi_LT->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RT->SetVisAttributes(SiLiVisAtt); logicSiLi_RT->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LC1->SetVisAttributes(SiLiVisAtt); logicSiLi_LC1->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RC1->SetVisAttributes(SiLiVisAtt); logicSiLi_RC1->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LB->SetVisAttributes(SiLiVisAtt); logicSiLi_LB->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RB->SetVisAttributes(SiLiVisAtt); logicSiLi_RB->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_LC2->SetVisAttributes(SiLiVisAtt); logicSiLi_LC2->SetVisAttributes(m_SiLiVisAtt);
logicSiLi_RC2->SetVisAttributes(SiLiVisAtt); logicSiLi_RC2->SetVisAttributes(m_SiLiVisAtt);
delete rotSiLi; delete rotSiLi;
...@@ -532,15 +1149,14 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber, ...@@ -532,15 +1149,14 @@ void MUST2Array::VolumeMaker( G4int TelescopeNumber,
logicCristal4s->SetSensitiveDetector(m_CsIScorer); logicCristal4s->SetSensitiveDetector(m_CsIScorer);
//Mark blue a CsI corner crystal to see telescope orientation //Mark blue a CsI corner crystal to see telescope orientation
G4VisAttributes* CsIVisAtt = new G4VisAttributes(G4Colour(1, 0.5, 0)); logicCristal1 ->SetVisAttributes(m_CsIVisAtt);
logicCristal1 ->SetVisAttributes(CsIVisAtt); logicCristal2 ->SetVisAttributes(m_CsIVisAtt);
logicCristal2 ->SetVisAttributes(CsIVisAtt); logicCristal3 ->SetVisAttributes(m_CsIVisAtt);
logicCristal3 ->SetVisAttributes(CsIVisAtt); logicCristal4 ->SetVisAttributes(m_CsIVisAtt);
logicCristal4 ->SetVisAttributes(CsIVisAtt); logicCristal1s ->SetVisAttributes(m_CsIVisAtt);
logicCristal1s ->SetVisAttributes(CsIVisAtt); logicCristal2s ->SetVisAttributes(m_CsIVisAtt);
logicCristal2s ->SetVisAttributes(CsIVisAtt); logicCristal3s ->SetVisAttributes(m_CsIVisAtt);
logicCristal3s ->SetVisAttributes(CsIVisAtt); logicCristal4s ->SetVisAttributes(m_CsIVisAtt);
logicCristal4s ->SetVisAttributes(CsIVisAtt);
} }
} }
...@@ -1274,8 +1890,8 @@ void MUST2Array::InitializeScorers() { ...@@ -1274,8 +1890,8 @@ void MUST2Array::InitializeScorers() {
G4VPrimitiveScorer* Energy = new OBSOLETEGENERALSCORERS::PSEnergy("StripEnergy","MUST2Telescope", 0); G4VPrimitiveScorer* Energy = new OBSOLETEGENERALSCORERS::PSEnergy("StripEnergy","MUST2Telescope", 0);
G4VPrimitiveScorer* TOF = new OBSOLETEGENERALSCORERS::PSTOF("StripTime","MUST2Telescope", 0); G4VPrimitiveScorer* TOF = new OBSOLETEGENERALSCORERS::PSTOF("StripTime","MUST2Telescope", 0);
G4VPrimitiveScorer* StripPositionX = new PSStripNumberX("StripNumberX", 0, SiliconFace, 128); G4VPrimitiveScorer* StripPositionX = new PSStripNumberX("StripNumberX", 0, ActiveWaferSize, 128);
G4VPrimitiveScorer* StripPositionY = new PSStripNumberY("StripNumberY", 0, SiliconFace, 128); G4VPrimitiveScorer* StripPositionY = new PSStripNumberY("StripNumberY", 0, ActiveWaferSize, 128);
G4VPrimitiveScorer* InteractionCoordinatesX = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","MUST2Telescope", 0); G4VPrimitiveScorer* InteractionCoordinatesX = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesX("InterCoordX","MUST2Telescope", 0);
G4VPrimitiveScorer* InteractionCoordinatesY = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","MUST2Telescope", 0); G4VPrimitiveScorer* InteractionCoordinatesY = new OBSOLETEGENERALSCORERS::PSInteractionCoordinatesY("InterCoordY","MUST2Telescope", 0);
...@@ -1332,12 +1948,7 @@ void MUST2Array::InitializeMaterial(){ ...@@ -1332,12 +1948,7 @@ void MUST2Array::InitializeMaterial(){
G4Element* O = new G4Element("Oxigen" , symbol = "O" , z = 8 , a = 16.00 * g / mole); G4Element* O = new G4Element("Oxigen" , symbol = "O" , z = 8 , a = 16.00 * g / mole);
G4Element* I = new G4Element("Iode" , symbol = "I" , z = 53 , a = 126.9 * g / mole); G4Element* I = new G4Element("Iode" , symbol = "I" , z = 53 , a = 126.9 * g / mole);
G4Element* Cs = new G4Element("Cesium" , symbol = "Cs" , z = 55 , a = 132.9 * g / mole); G4Element* Cs = new G4Element("Cesium" , symbol = "Cs" , z = 55 , a = 132.9 * g / mole);
G4Element* Co = new G4Element("Cobalt" , symbol = "Co" , z = 27 , a = 58.933 * g / mole);
G4Element* Cr = new G4Element("Cromium" , symbol = "Cr" , z = 24 , a = 51.996 * g / mole);
G4Element* Ni = new G4Element("Nickel" , symbol = "Ni" , z = 28 , a = 58.69 * g / mole);
G4Element* Fe = new G4Element("Iron" , symbol = "Fe" , z = 26 , a = 55.847 * g / mole); G4Element* Fe = new G4Element("Iron" , symbol = "Fe" , z = 26 , a = 55.847 * g / mole);
G4Element* W = new G4Element("Tungsten" , symbol = "W" , z = 74 , a = 183.5 * g / mole);
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
/////////////////Material Definition /////////////////////////// /////////////////Material Definition ///////////////////////////
...@@ -1377,13 +1988,6 @@ void MUST2Array::InitializeMaterial(){ ...@@ -1377,13 +1988,6 @@ void MUST2Array::InitializeMaterial(){
m_MaterialMyl->AddElement(H, natoms = 8); m_MaterialMyl->AddElement(H, natoms = 8);
m_MaterialMyl->AddElement(O, natoms = 4); m_MaterialMyl->AddElement(O, natoms = 4);
// Havar
m_MaterialHarvar = new G4Material("Havar", 8.3*g / cm3, 5);
m_MaterialHarvar->AddElement(Co , 42);
m_MaterialHarvar->AddElement(Cr , 20);
m_MaterialHarvar->AddElement(Ni , 13);
m_MaterialHarvar->AddElement(Fe , 19);
m_MaterialHarvar->AddElement(W , 1);
} }
......
...@@ -31,183 +31,224 @@ ...@@ -31,183 +31,224 @@
#include <vector> #include <vector>
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace MUST2 namespace MUST2{
{ // Resolution //
// Resolution const G4double ResoTimeMust = 0.212765957 ;// = 500ps // Unit is ns/2.35
const G4double ResoTimeMust = 0.212765957 ;// = 500ps // Unit is ns/2.35 const G4double ResoSiLi = 0.055 ;// = 130 keV of resolution // Unit is MeV/2.35
const G4double ResoSiLi = 0.055 ;// = 130 keV of resolution // Unit is MeV/2.35 const G4double ResoCsI = 0.08 ;// = 188 kev of resolution // Unit is MeV/2.35
const G4double ResoCsI = 0.08 ;// = 188 kev of resolution // Unit is MeV/2.35 const G4double ResoStrip = 0.022 ;// = 52keV of Resolution // Unit is MeV/2.35
const G4double ResoStrip = 0.022 ;// = 52keV of Resolution // Unit is MeV/2.35
// Geometry //
// Geometry
const G4double FaceFront = 11.*cm ; // Si
const G4double FaceBack = 16.5*cm ; const G4double PCBPointsX[4]={52.25*mm,-61.75*mm,-61.75*mm,52.25*mm};
const G4double Length = 7.2*cm ; const G4double PCBPointsY[4]={61.75*mm,61.75*mm,-52.25*mm,-52.25*mm};
const G4double PCBThickness = 3.2*mm;
const G4double AluStripThickness = 0.4*micrometer ; const G4double WaferSize = 100.6*mm ;
const G4double SiliconThickness = 300*micrometer ; const G4double WaferThickness = 300*micrometer;
const G4double SiliconFace = 98*mm ; const G4double ActiveWaferSize = 100.5*mm ;
const G4double VacBoxThickness = 3*cm ; const G4double AluStripThickness = 0.4*micrometer ;
const G4double SiLiThickness = 5.1*mm; // Must be checked // Supporting Front Frame
const G4double SiLiFaceX = 48.25*mm; // The Si is screw on this frame
const G4double SiLiFaceY = 92*mm; // The SiLi slide into it
const G4double MylarCsIThickness = 3*micrometer; // The front face of the frame is same size as the PCB
const G4double CsIThickness = 4.*cm + 2*MylarCsIThickness ; const G4double FrontFrameBackSize = 144*mm;
const G4double CsIFaceFront = 12.2*cm; const G4double FrontFrameThickness = 27*mm;
const G4double CsIFaceBack = 16*cm; const G4double FrontFrameFrontSize = 120*mm;
const G4double DistInterCsI = 0.2*mm;
const G4double CavityShape1FrontSize = 103*mm;
// Starting at the front and going to CsI const G4double CavityShape1BackSize = 121*mm;
const G4double AluStripFront_PosZ = Length* -0.5 + 0.5*AluStripThickness;
const G4double Silicon_PosZ = AluStripFront_PosZ + 0.5*AluStripThickness + 0.5*SiliconThickness; const G4double CavityShape2Thickness = 18*mm;
const G4double AluStripBack_PosZ = Silicon_PosZ + 0.5*SiliconThickness + 0.5*AluStripThickness; const G4double CavityShape2Width = 115*mm;
const G4double VacBox_PosZ = AluStripBack_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness; const G4double CavityShape2Center = 4.25*mm;
const G4double CsI_PosZ = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*CsIThickness; // SiLi
// CsI
// Frame
// Electronic and cooling
const G4double MUFEESize = 120*mm;
const G4double MUFEEThickness = 2*mm;
const G4double CoolingThickness = 20*mm;
const G4double CoolingDistanceShort = FrontFrameThickness;
const G4double CoolingDistanceLong = 113.5*mm;
const G4double FaceFront = 11.*cm ;
const G4double FaceBack = 16.5*cm ;
const G4double Length = 7.2*cm ;
const G4double VacBoxThickness = 3*cm ;
const G4double SiLiThickness = 5.1*mm;
const G4double SiLiFaceX = 48.25*mm;
const G4double SiLiFaceY = 92*mm;
const G4double MylarCsIThickness = 3*micrometer;
const G4double CsIThickness = 4.*cm + 2*MylarCsIThickness ;
const G4double CsIFaceFront = 12.2*cm;
const G4double CsIFaceBack = 16*cm;
const G4double DistInterCsI = 0.2*mm;
// Starting at the front and going to CsI
const G4double AluStripFront_PosZ = Length* -0.5 + 0.5*AluStripThickness;
const G4double Silicon_PosZ = AluStripFront_PosZ + 0.5*AluStripThickness + 0.5*WaferThickness;
const G4double AluStripBack_PosZ = Silicon_PosZ + 0.5*WaferThickness + 0.5*AluStripThickness;
const G4double VacBox_PosZ = AluStripBack_PosZ + 0.5*AluStripThickness + 0.5* VacBoxThickness;
const G4double CsI_PosZ = VacBox_PosZ + 0.5*VacBoxThickness + 0.5*CsIThickness;
} }
class MUST2Array : public VDetector class MUST2Array : public VDetector{
{ ////////////////////////////////////////////////////
//////////////////////////////////////////////////// /////// Default Constructor and Destructor /////////
/////// Default Constructor and Destructor ///////// ////////////////////////////////////////////////////
//////////////////////////////////////////////////// public:
public: MUST2Array() ;
MUST2Array() ; virtual ~MUST2Array() ;
virtual ~MUST2Array() ;
////////////////////////////////////////////////////
//////////////////////////////////////////////////// //////// Specific Function of this Class ///////////
//////// Specific Function of this Class /////////// ////////////////////////////////////////////////////
//////////////////////////////////////////////////// public:
public: // By Position Method
// By Position Method void AddTelescope( G4ThreeVector TL ,
void AddTelescope( G4ThreeVector TL , G4ThreeVector BL ,
G4ThreeVector BL , G4ThreeVector BR ,
G4ThreeVector BR , G4ThreeVector CT ,
G4ThreeVector CT , bool wSi ,
bool wSi , bool wSiLi ,
bool wSiLi , bool wCsI );
bool wCsI ); // By Angle Method
// By Angle Method void AddTelescope( G4double R ,
void AddTelescope( G4double R , G4double Theta ,
G4double Theta , G4double Phi ,
G4double Phi , G4double beta_u ,
G4double beta_u , G4double beta_v ,
G4double beta_v , G4double beta_w ,
G4double beta_w , bool wSi ,
bool wSi , bool wSiLi ,
bool wSiLi , bool wCsI );
bool wCsI );
// Effectively construct Volume
// Effectively construct Volume // Avoid to have two time same code for Angle and Point definition
// Avoid to have two time same code for Angle and Point definition void VolumeMaker( G4int TelescopeNumber ,
void VolumeMaker( G4int TelescopeNumber , G4ThreeVector MMpos ,
G4ThreeVector MMpos , G4RotationMatrix* MMrot ,
G4RotationMatrix* MMrot , bool wSi ,
bool wSi , bool wSiLi ,
bool wSiLi , bool wCsI ,
bool wCsI , G4LogicalVolume* world );
G4LogicalVolume* world );
// Return the logic volume associate to different MUST2 Geometry:
//////////////////////////////////////////////////// G4LogicalVolume* GetLogicalVolumeMUST2Short();
///////// Inherite from VDetector class /////////// G4LogicalVolume* GetLogicalVolumeMUST2NoSiLi();
//////////////////////////////////////////////////// G4LogicalVolume* GetLogicalVolumeMUST2Full();
public:
// Read stream at Configfile to pick-up parameters of detector (Position,...) ////////////////////////////////////////////////////
// Called in DetecorConstruction::ReadDetextorConfiguration Method ///////// Inherite from VDetector class ///////////
void ReadConfiguration(string Path); ////////////////////////////////////////////////////
public:
// Construct detector and inialise sensitive part. // Read stream at Configfile to pick-up parameters of detector (Position,...)
// Called After DetecorConstruction::AddDetector Method // Called in DetecorConstruction::ReadDetextorConfiguration Method
void ConstructDetector(G4LogicalVolume* world); void ReadConfiguration(string Path);
// Add Detector branch to the EventTree. // Construct detector and inialise sensitive part.
// Called After DetecorConstruction::AddDetector Method // Called After DetecorConstruction::AddDetector Method
void InitializeRootOutput(); void ConstructDetector(G4LogicalVolume* world);
// Read sensitive part and fill the Root tree. // Add Detector branch to the EventTree.
// Called at in the EventAction::EndOfEventAvtion // Called After DetecorConstruction::AddDetector Method
void ReadSensitive(const G4Event* event); void InitializeRootOutput();
// Read sensitive part and fill the Root tree.
//////////////////////////////////////////////////// // Called at in the EventAction::EndOfEventAvtion
///////////Event class to store Data//////////////// void ReadSensitive(const G4Event* event);
////////////////////////////////////////////////////
private:
TMust2Data* m_Event; ////////////////////////////////////////////////////
///////////Event class to store Data////////////////
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
///////////////Private intern Data////////////////// private:
//////////////////////////////////////////////////// TMust2Data* m_Event;
private:
// True if Define by Position, False is Define by angle ////////////////////////////////////////////////////
vector<bool> m_DefinitionType ; ///////////////Private intern Data//////////////////
////////////////////////////////////////////////////
// Used for "By Point Definition" private:
vector<G4ThreeVector> m_X1_Y1 ; // Top Left Corner Position Vector // True if Define by Position, False is Define by angle
vector<G4ThreeVector> m_X1_Y128 ; // Bottom Left Corner Position Vector vector<bool> m_DefinitionType ;
vector<G4ThreeVector> m_X128_Y1 ; // Bottom Right Corner Position Vector
vector<G4ThreeVector> m_X128_Y128 ; // Center Corner Position Vector // Used for "By Point Definition"
vector<G4ThreeVector> m_X1_Y1 ; // Top Left Corner Position Vector
// Used for "By Angle Definition" vector<G4ThreeVector> m_X1_Y128 ; // Bottom Left Corner Position Vector
vector<G4double> m_R ; // | vector<G4ThreeVector> m_X128_Y1 ; // Bottom Right Corner Position Vector
vector<G4double> m_Theta ; // > Spherical coordinate of Strips Silicium Plate vector<G4ThreeVector> m_X128_Y128 ; // Center Corner Position Vector
vector<G4double> m_Phi ; // |
// Used for "By Angle Definition"
vector<G4double> m_beta_u ; // | vector<G4double> m_R ; // |
vector<G4double> m_beta_v ; // > Tilt angle of the Telescope vector<G4double> m_Theta ; // > Spherical coordinate of Strips Silicium Plate
vector<G4double> m_beta_w ; // | vector<G4double> m_Phi ; // |
// If Set to true if you want this stage on you telescope vector<G4double> m_beta_u ; // |
vector<bool> m_wSi ; // Silicium Strip 300um 128*128 Strip vector<G4double> m_beta_v ; // > Tilt angle of the Telescope
vector<bool> m_wSiLi ; // Si(Li) 2*4 Pad vector<G4double> m_beta_w ; // |
vector<bool> m_wCsI ; // CsI 4*4 crystal
vector<bool> m_wAddSi ; // Additionnal Thin Silicium Strip // If Set to true if you want this stage on you telescope
vector<bool> m_wSi ; // Silicium Strip 300um 128*128 Strip
// Set to true if you want to see Telescope Frame in your visualisation vector<bool> m_wSiLi ; // Si(Li) 2*4 Pad
bool m_non_sensitive_part_visiualisation ; vector<bool> m_wCsI ; // CsI 4*4 crystal
vector<bool> m_wAddSi ; // Additionnal Thin Silicium Strip
//////////////////////////////////////////////////// // Set to true if you want to see Telescope Frame in your visualisation
///////////////////// Scorer /////////////////////// bool m_non_sensitive_part_visiualisation ;
////////////////////////////////////////////////////
private: ////////////////////////////////////////////////////
// Initialize all Scorer used by the MUST2Array ///////////////////// Scorer ///////////////////////
void InitializeScorers() ; ////////////////////////////////////////////////////
private:
// Silicon Associate Scorer // Initialize all Scorer used by the MUST2Array
G4MultiFunctionalDetector* m_StripScorer ; void InitializeScorers() ;
// Silicon Associate Scorer
// SiLi Associate Scorer G4MultiFunctionalDetector* m_StripScorer ;
G4MultiFunctionalDetector* m_SiLiScorer ;
// SiLi Associate Scorer
G4MultiFunctionalDetector* m_SiLiScorer ;
// CsI Associate Scorer // CsI Associate Scorer
G4MultiFunctionalDetector* m_CsIScorer ; G4MultiFunctionalDetector* m_CsIScorer ;
////////////////////////////////////////////////////
//////////////////// Material //////////////////////
////////////////////////////////////////////////////
private:
// Declare all material used by the MUST2Array
void InitializeMaterial() ;
// Si
G4Material* m_MaterialSilicon;
// Al
G4Material* m_MaterialAluminium;
// Iron
G4Material* m_MaterialIron;
// CsI
G4Material* m_MaterialCsI;
// Vacuum
G4Material* m_MaterialVacuum ;
// Mylar
G4Material* m_MaterialMyl;
// Havar
G4Material* m_MaterialHarvar;
////////////////////////////////////////////////////
//////////////////// Material //////////////////////
////////////////////////////////////////////////////
private:
// Declare all material used by the MUST2Array
void InitializeMaterial() ;
// Si
G4Material* m_MaterialSilicon;
// Al
G4Material* m_MaterialAluminium;
// Iron
G4Material* m_MaterialIron;
// CsI
G4Material* m_MaterialCsI;
// Vacuum
G4Material* m_MaterialVacuum ;
// Mylar
G4Material* m_MaterialMyl;
////////////////////////////////////////////////////
//////////////// Visual Attribute //////////////////
////////////////////////////////////////////////////
G4VisAttributes* m_PCBVisAtt;
G4VisAttributes* m_SiliconVisAtt;
G4VisAttributes* m_SiLiVisAtt;
G4VisAttributes* m_CsIVisAtt;
G4VisAttributes* m_CoolingVisAtt;
}; };
......
...@@ -4,7 +4,7 @@ NPSIM = NPSimulation ...@@ -4,7 +4,7 @@ NPSIM = NPSimulation
all: $(DELFILES) $(COPYFILES) $(NPSIM) all: $(DELFILES) $(COPYFILES) $(NPSIM)
DelIncSrcFiles: DelIncSrcFiles: $(NPTOOL)/NPLib/liblist
./scripts/deletefiles.sh ./scripts/deletefiles.sh
CopyIncSrcFiles: DelIncSrcFiles CopyIncSrcFiles: DelIncSrcFiles
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment