Skip to content
Snippets Groups Projects
Commit f06c3b08 authored by Adrien Matta's avatar Adrien Matta :skull_crossbones:
Browse files

* Catana placement by R Theta Phi

parent f345604d
No related branches found
No related tags found
No related merge requests found
Pipeline #77109 passed
......@@ -92,16 +92,22 @@ void Catana::AddDummyDetector(double Z){
m_Z.push_back(Z);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void Catana::AddDetectorType1(double Z){
m_Z1.push_back(Z);
void Catana::AddDetectorType1(double R, double Theta, double Phi){
m_R1.push_back(R);
m_Theta1.push_back(Theta);
m_Phi1.push_back(Phi);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void Catana::AddDetectorType2(double Z){
m_Z2.push_back(Z);
void Catana::AddDetectorType2(double R, double Theta, double Phi){
m_R2.push_back(R);
m_Theta2.push_back(Theta);
m_Phi2.push_back(Phi);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void Catana::AddDetectorType3(double Z){
m_Z3.push_back(Z);
void Catana::AddDetectorType3(double R, double Theta, double Phi){
m_R3.push_back(R);
m_Theta3.push_back(Theta);
m_Phi3.push_back(Phi);
}
......@@ -534,14 +540,16 @@ void Catana::ReadConfiguration(NPL::InputParser parser){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << "//// " << blocks.size() << " detectors found " << endl;
token = {"Z"};
token = {"R","Theta","Phi"};
for(unsigned int i = 0 ; i < blocks.size() ; i++){
if(blocks[i]->HasTokenList(token)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// Catana " << i+1 << endl;
double Z = blocks[i]->GetDouble("Z","mm");
AddDetectorType1(Z);
double R = blocks[i]->GetDouble("R","mm");
double Theta = blocks[i]->GetDouble("Theta","deg");
double Phi = blocks[i]->GetDouble("Phi","deg");
AddDetectorType1(R,Theta,Phi);
}
else{
cout << "ERROR: check your input file formatting " << endl;
......@@ -553,14 +561,14 @@ void Catana::ReadConfiguration(NPL::InputParser parser){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << "//// " << blocks.size() << " detectors found " << endl;
token = {"Z"};
for(unsigned int i = 0 ; i < blocks.size() ; i++){
if(blocks[i]->HasTokenList(token)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// Catana " << i+1 << endl;
double Z = blocks[i]->GetDouble("Z","mm");
AddDetectorType2(Z);
double R = blocks[i]->GetDouble("R","mm");
double Theta = blocks[i]->GetDouble("Theta","deg");
double Phi = blocks[i]->GetDouble("Phi","deg");
AddDetectorType2(R,Theta,Phi);
}
else{
cout << "ERROR: check your input file formatting " << endl;
......@@ -572,14 +580,15 @@ void Catana::ReadConfiguration(NPL::InputParser parser){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << "//// " << blocks.size() << " detectors found " << endl;
token = {"Z"};
for(unsigned int i = 0 ; i < blocks.size() ; i++){
if(blocks[i]->HasTokenList(token)){
if(NPOptionManager::getInstance()->GetVerboseLevel())
cout << endl << "//// Catana " << i+1 << endl;
double Z = blocks[i]->GetDouble("Z","mm");
AddDetectorType2(Z);
double R = blocks[i]->GetDouble("R","mm");
double Theta = blocks[i]->GetDouble("Theta","deg");
double Phi = blocks[i]->GetDouble("Phi","deg");
AddDetectorType3(R,Theta,Phi);
}
else{
cout << "ERROR: check your input file formatting " << endl;
......@@ -595,33 +604,45 @@ void Catana::ReadConfiguration(NPL::InputParser parser){
// Construct detector and inialise sensitive part.
// Called After DetecorConstruction::AddDetector Method
void Catana::ConstructDetector(G4LogicalVolume* world){
for (unsigned short i = 0 ; i < m_Z1.size() ; i++) {
for (unsigned short i = 0 ; i < m_R1.size() ; i++) {
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_Z1[i]) ;
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_R1[i]) ;
Det_pos.setTheta(m_Theta1[i]);
Det_pos.setPhi(m_Phi1[i]);
G4RotationMatrix* Rot = new G4RotationMatrix();
Rot->rotateY(m_Theta1[i]);
Rot->rotateZ(m_Phi1[i]);
new G4PVPlacement(G4Transform3D(*Rot,Det_pos),
BuildDetectorType1(),
"CatanaType1",world,false,i+1);
}
for (unsigned short i = 0 ; i < m_Z2.size() ; i++) {
for (unsigned short i = 0 ; i < m_R2.size() ; i++) {
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_Z2[i]) ;
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_R2[i]) ;
Det_pos.setTheta(m_Theta2[i]);
Det_pos.setPhi(m_Phi2[i]);
G4RotationMatrix* Rot = new G4RotationMatrix();
Rot->rotateY(m_Theta2[i]);
Rot->rotateZ(m_Phi2[i]);
new G4PVPlacement(G4Transform3D(*Rot,Det_pos),
BuildDetectorType2(),
"CatanaType2",world,false,i+1);
"CatanaType2",world,false,i+2);
}
for (unsigned short i = 0 ; i < m_Z3.size() ; i++) {
for (unsigned short i = 0 ; i < m_R3.size() ; i++) {
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_Z3[i]) ;
G4ThreeVector Det_pos = G4ThreeVector(0,0,m_R3[i]) ;
Det_pos.setTheta(m_Theta3[i]);
Det_pos.setPhi(m_Phi3[i]);
G4RotationMatrix* Rot = new G4RotationMatrix();
Rot->rotateY(m_Theta3[i]);
Rot->rotateZ(m_Phi3[i]);
new G4PVPlacement(G4Transform3D(*Rot,Det_pos),
BuildDetectorType3(),
"CatanaType2",world,false,i+1);
"CatanaType3",world,false,i+3);
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
// Add Detector branch to the EventTree.
......
......@@ -51,10 +51,9 @@ class Catana : public NPS::VDetector{
public:
// Cartesian
void AddDummyDetector(double Z);
void AddDetectorType1(double Z);
void AddDetectorType2(double Z);
void AddDetectorType3(double Z);
void AddDetectorType1(double R, double Theta, double Phi);
void AddDetectorType2(double R, double Theta, double Phi);
void AddDetectorType3(double R, double Theta, double Phi);
G4LogicalVolume* BuildDummyDetector();
G4LogicalVolume* BuildDetectorType1();
......@@ -104,14 +103,16 @@ class Catana : public NPS::VDetector{
private: // Geometry
// Detector Coordinate
vector<double> m_Z;
vector<double> m_Z1;
vector<double> m_Z2;
vector<double> m_Z3;
vector<double> m_R1;
vector<double> m_R2;
vector<double> m_R3;
vector<double> m_Theta1;
vector<double> m_Theta2;
vector<double> m_Theta3;
vector<double> m_Phi1;
vector<double> m_Phi2;
vector<double> m_Phi3;
vector<double> m_Type1R;
vector<double> m_Type1Theta;
vector<double> m_Type1Phi;
// Visualisation Attribute
G4VisAttributes* m_VisCrystal;
......
......@@ -9,15 +9,20 @@ Target
Z= 0 mm
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Catana Type1
Z= 0 mm
R= 200 mm
Theta= 90 deg
Phi= 60 deg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Catana Type2
Z= 300 mm
R= 200 mm
Theta= 70 deg
Phi= 0 deg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Catana Type3
Z= 600 mm
R= 100 mm
Theta= 0 deg
Phi= 0 deg
% R= 100 mm
% Theta=
% Phi=
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment