diff --git a/Inputs/DetectorConfiguration/plastic.detector b/Inputs/DetectorConfiguration/plastic.detector index 71fd2e95bfcb1028cc57920f0983fb8358eea0d4..0111b33aa4157a9f8735552a544654c633c9caca 100644 --- a/Inputs/DetectorConfiguration/plastic.detector +++ b/Inputs/DetectorConfiguration/plastic.detector @@ -1,4 +1,18 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +GeneralTarget +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Thickness in micrometer +% Radius in mm +% Temperature in K, Pressure in bar +Target + THICKNESS= 100 + ANGLE= 0 + RADIUS= 7.5 + MATERIAL= CH2 + X= 0 + Y= 0 + Z= 0 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ScintillatorPlastic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plastic @@ -7,8 +21,9 @@ Plastic R= 150 Thickness= 20 Radius= 50 - Scintillator= BC400 + Scintillator= Kapton LeadThickness= 0 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Plastic THETA= 0 diff --git a/NPLib/Physics/NPReaction.h b/NPLib/Physics/NPReaction.h index f419e9595739f53fa83bcc77aa2905b8b1ace38a..4e08cfe10d84e3282c80145047c00c6472149e2a 100644 --- a/NPLib/Physics/NPReaction.h +++ b/NPLib/Physics/NPReaction.h @@ -114,6 +114,7 @@ namespace NPL{ bool GetShoot3() const {return fshoot3;} bool GetShoot4() const {return fshoot4;} + public: // Modify the CS histo to so cross section shoot is within ]HalfOpenAngleMin,HalfOpenAngleMax[ void SetCSAngle(double CSHalfOpenAngleMin,double CSHalfOpenAngleMax); @@ -162,6 +163,12 @@ namespace NPL{ // Center of Mass Kinematic Double_t BetaCM; + + public: + TLorentzVector GetEnergyImpulsionLab_1() const {return fEnergyImpulsionLab_1;} + TLorentzVector GetEnergyImpulsionLab_2() const {return fEnergyImpulsionLab_2;} + TLorentzVector GetEnergyImpulsionLab_3() const {return fEnergyImpulsionLab_3;} + TLorentzVector GetEnergyImpulsionLab_4() const {return fEnergyImpulsionLab_4;} public: // Kinematics diff --git a/NPLib/Tiara/libTiara.so b/NPLib/Tiara/libTiara.so deleted file mode 100755 index 2c92361e4f8b46ba009bfcf7289e8bfe1b6633fa..0000000000000000000000000000000000000000 Binary files a/NPLib/Tiara/libTiara.so and /dev/null differ diff --git a/NPSimulation/Plastic/Plastic.cc b/NPSimulation/Plastic/Plastic.cc index 1ee8234d1443417e702f4a62765d6b12fac37d9c..d61ce70c04c3335400dfb4653503b21fb00e3097 100644 --- a/NPSimulation/Plastic/Plastic.cc +++ b/NPSimulation/Plastic/Plastic.cc @@ -81,6 +81,8 @@ Plastic::~Plastic() delete m_MaterialPlastic_BC452_5 ; delete m_MaterialPlastic_BC452_10 ; delete m_MaterialLead ; + delete m_MaterialAl ; + delete m_MaterialKapton ; delete m_PlasticScorer ; } @@ -406,6 +408,7 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* else if(m_Scintillator[i] == "BC452_2" ) PlasticMaterial = m_MaterialPlastic_BC452_2 ; else if(m_Scintillator[i] == "BC452_5" ) PlasticMaterial = m_MaterialPlastic_BC452_5 ; else if(m_Scintillator[i] == "BC452_10" ) PlasticMaterial = m_MaterialPlastic_BC452_10 ; + else if(m_Scintillator[i] == "Kapton" ) PlasticMaterial = m_MaterialKapton ; else { G4cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl ; G4cout << "WARNING: Material Not found, default material set : BC400" << endl ; @@ -456,7 +459,7 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* 0*deg , 360*deg ); - G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, m_MaterialLead, Name+"_Lead", 0, 0, 0); + G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, m_MaterialLead, Name+"_Lead", 0, 0, 0);//AC changed lead to Al G4VisAttributes* LeadVisAtt = new G4VisAttributes(G4Colour(0.1, 0.1, 0.1)) ; logicLead->SetVisAttributes(LeadVisAtt) ; @@ -484,13 +487,25 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* G4VisAttributes* PlastVisAtt = new G4VisAttributes(G4Colour(0.0, 0.0, 0.9)) ; logicPlastic->SetVisAttributes(PlastVisAtt) ; - new G4PVPlacement( 0 , + /*new G4PVPlacement( 0 , Det_pos , logicPlastic , Name + "_Scintillator" , world , false , + 0 ); */ + //G4RotationMatrix Rot3D; + //Rot3D.set(0, 0, 0); + //Rot3D.rotateX(70*degree); + //Rot3D.rotateY(theta*degree); + //Rot3D.rotateZ(phi*degree); + new G4PVPlacement( G4Transform3D(Rot3D,Det_pos) , + logicPlastic , + Name + "_Scintillator" , + world , + false , 0 ); + } if(m_LeadThickness[i]>0&& m_PlasticHeight[i]>0 && m_PlasticWidth[i]>0) @@ -502,7 +517,7 @@ void Plastic::VolumeMaker(G4ThreeVector Det_pos, int DetNumber, G4LogicalVolume* logicLead->SetVisAttributes(LeadVisAtt) ; new G4PVPlacement( 0 , - Det_pos+(m_PlasticThickness[i]/2+m_LeadThickness[i]/2)*Det_pos.unit() , + Det_pos+(m_PlasticThickness[i]/2+m_LeadThickness[i]/2)*Det_pos.unit() +G4ThreeVector(0,0,-10*cm) , logicLead , Name+"_Lead" , world , @@ -537,10 +552,12 @@ void Plastic::ReadSensitive(const G4Event* event) std::map<G4int, G4int*>::iterator DetectorNumber_itr ; std::map<G4int, G4double*>::iterator Energy_itr ; std::map<G4int, G4double*>::iterator Time_itr ; + std::map<G4int, G4double*>::iterator Pos_Z_itr ; G4THitsMap<G4int>* DetectorNumberHitMap ; G4THitsMap<G4double>* EnergyHitMap ; G4THitsMap<G4double>* TimeHitMap ; + G4THitsMap<G4double>* PosZHitMap ; ////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// @@ -562,9 +579,15 @@ void Plastic::ReadSensitive(const G4Event* event) TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID)) ; Time_itr = TimeHitMap->GetMap()->begin() ; - G4int sizeN = DetectorNumberHitMap->entries() ; + //Interaction Coordinate Z + G4int InterCoordZCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("PlasticScorer/InterCoordZ"); + PosZHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(InterCoordZCollectionID)); + Pos_Z_itr = PosZHitMap->GetMap()->begin(); + + G4int sizeN = DetectorNumberHitMap->entries() ; G4int sizeE = EnergyHitMap->entries() ; G4int sizeT = TimeHitMap->entries() ; + G4int sizeZ = PosZHitMap->entries(); // Loop on Plastic Number for (G4int l = 0 ; l < sizeN ; l++) { @@ -603,6 +626,17 @@ void Plastic::ReadSensitive(const G4Event* event) Time_itr++; } + // Pos Z + Pos_Z_itr = PosZHitMap->GetMap()->begin(); + for (G4int h = 0 ; h < PosZHitMap->entries() ; h++) { + G4int PosZTrackID = Pos_Z_itr->first - N ; + G4double PosZ = *(Pos_Z_itr->second) ; + if (PosZTrackID == NTrackID) { + ms_InterCoord->SetDetectedPositionZ(PosZ) ; + } + Pos_Z_itr++; + + } } DetectorNumber_itr++; @@ -612,6 +646,7 @@ void Plastic::ReadSensitive(const G4Event* event) TimeHitMap ->clear() ; DetectorNumberHitMap ->clear() ; EnergyHitMap ->clear() ; + PosZHitMap ->clear() ; } @@ -629,6 +664,7 @@ void Plastic::InitializeMaterial() // for Plastic G4Element* H = new G4Element("Hydrogen" , symbol = "H" , z = 1 , a = 1.01 * g / mole); G4Element* C = new G4Element("Carbon" , symbol = "C" , z = 6 , a = 12.011 * g / mole); + G4Element* O = new G4Element("Oxygen" , symbol = "O" , z = 8 , a = 16 * g / mole); G4Element* Pb = new G4Element("Lead" , symbol = "Pb" , z = 82 , a = 207.2 * g / mole); //////////////////////////////////////////////////////////////// /////////////////Material Definition /////////////////////////// @@ -639,6 +675,10 @@ void Plastic::InitializeMaterial() density = 11.34 * g / cm3; m_MaterialLead = new G4Material("Lead", z = 82 , a, density); + // Al + a = 13 * g / mole; + density = 2.7 * g / cm3; + m_MaterialAl = new G4Material("Al", z = 13 , a, density); // Plastic BC-400 density = 1.032 * g / cm3; @@ -666,6 +706,13 @@ void Plastic::InitializeMaterial() m_MaterialPlastic_BC452_10->AddElement(H , natoms = 10); m_MaterialPlastic_BC452_10->AddElement(C , natoms = 9); m_MaterialPlastic_BC452_10->AddElement(Pb , fractionmass=10*perCent); + + // Kapton + density = 1.39*g/cm3; + m_MaterialKapton = new G4Material("Kapton", density, ncomponents=3); + m_MaterialKapton->AddElement(O,2); + m_MaterialKapton->AddElement(C,5); + m_MaterialKapton->AddElement(H,4); } @@ -678,12 +725,13 @@ void Plastic::InitializeScorers() G4VPrimitiveScorer* DetNbr = new PSDetectorNumber("PlasticNumber","Plastic", 0) ; G4VPrimitiveScorer* Energy = new PSEnergy("Energy","Plastic", 0) ; G4VPrimitiveScorer* Time = new PSTOF("Time","Plastic", 0) ; - + G4VPrimitiveScorer* InteractionCoordinatesZ = new GENERALSCORERS::PSInteractionCoordinatesZ("InterCoordZ","Plastic", 0); //and register it to the multifunctionnal detector m_PlasticScorer->RegisterPrimitive(DetNbr) ; m_PlasticScorer->RegisterPrimitive(Energy) ; m_PlasticScorer->RegisterPrimitive(Time) ; - + m_PlasticScorer->RegisterPrimitive(InteractionCoordinatesZ); + G4SDManager::GetSDMpointer()->AddNewDetector(m_PlasticScorer) ; } //////////////////////////////////////////////////////////////// diff --git a/NPSimulation/Plastic/Plastic.hh b/NPSimulation/Plastic/Plastic.hh index 78a6b3436d98614c84cd4d0f6db9132a5082546b..c2c96a6483240054afc9878ce624a8b8a2d93725 100644 --- a/NPSimulation/Plastic/Plastic.hh +++ b/NPSimulation/Plastic/Plastic.hh @@ -34,6 +34,7 @@ #include "G4ThreeVector.hh" #include "G4RotationMatrix.hh" #include "G4LogicalVolume.hh" +#include "G4MultiFunctionalDetector.hh" // NPTool header #include "VDetector.hh" @@ -101,8 +102,10 @@ public: // Material G4Material* m_MaterialPlastic_BC452_2 ; //BC452:BC-400 loaded with 2%Pb type plastic G4Material* m_MaterialPlastic_BC452_5 ; //BC452:BC-400 loaded with 5%Pb type plastic G4Material* m_MaterialPlastic_BC452_10 ; //BC452:BC-400 loaded with 10%Pb type plastic + G4Material* m_MaterialKapton ; //BC452:BC-400 loaded with 10%Pb type plastic // Lead G4Material* m_MaterialLead ; + G4Material* m_MaterialAl ; public: // Scorer // Initialize all Scorer used by the MUST2Array diff --git a/NPSimulation/Simulation.cc b/NPSimulation/Simulation.cc index 4cf8405d87947b9c9620846bf3d5101b2a22b68b..d9d0164f3fd7987cee857ccb1bffcdd7ff33ac32 100644 --- a/NPSimulation/Simulation.cc +++ b/NPSimulation/Simulation.cc @@ -101,7 +101,8 @@ int main(int argc, char** argv){ /////////// Define UI terminal for interactive mode /////////// /////////////////////////////////////////////////////////////// #ifdef G4VIS_USE - G4VisManager* visManager = new G4VisExecutive("Quiet"); + //G4VisManager* visManager = new G4VisExecutive("Quiet"); + G4VisManager* visManager = new G4VisExecutive(); visManager->Initialize(); #endif diff --git a/NPSimulation/vis.mac b/NPSimulation/vis.mac index 9150d12e36fbabcfe951c94dd7357592d0517075..b85652b8a2f9da8f8f3daf162bcb94b136494303 100644 --- a/NPSimulation/vis.mac +++ b/NPSimulation/vis.mac @@ -8,7 +8,7 @@ /run/verbose 2 # # Use this open statement to create an OpenGL view: -/vis/open OGLIQt 600x600-0+0 +#/vis/open OGLIQt 600x600-0+0 # # Use this open statement to create a .prim file suitable for # viewing in DAWN: @@ -20,7 +20,7 @@ # # Use this open statement to create a .wrl file suitable for # viewing in a VRML viewer: -#/vis/open VRML2FILE +/vis/open VRML2FILE # # Disable auto refresh and quieten vis messages whilst scene and # trajectories are established: