diff --git a/NPSimulation/Detectors/PISTA/PISTA.cc b/NPSimulation/Detectors/PISTA/PISTA.cc index 53a7faef644620ec696fd50e29f88cb5c92520de..f7ebec47fb36d9d4b1be5a229764f7222313a1d4 100644 --- a/NPSimulation/Detectors/PISTA/PISTA.cc +++ b/NPSimulation/Detectors/PISTA/PISTA.cc @@ -64,26 +64,26 @@ namespace PISTA_NS{ const double E_ResoEnergy = 0.018*MeV ; // Trapezoid dimension PISTA1 - const double TrapezoidBaseLarge = 72.3*mm; - const double TrapezoidBaseSmall = 41.0*mm; - const double TrapezoidHeight = 57.7*mm; - const double TrapezoidLength = 1*cm; - const double FirstStageThickness = 300*um; - const double SecondStageThickness = 1.5*mm; - const double DistanceBetweenSi = 4*mm; - const double FirstStageNbrOfStrips = 91; - const double SecondStageNbrOfStrips = 57; + double TrapezoidBaseLarge = 72.3*mm; + double TrapezoidBaseSmall = 41.0*mm; + double TrapezoidHeight = 57.7*mm; + double TrapezoidLength = 1*cm; + double FirstStageThickness = 300*um; + double SecondStageThickness = 1.5*mm; + double DistanceBetweenSi = 4*mm; + double FirstStageNbrOfStrips = 91; + double SecondStageNbrOfStrips = 57; // Trapezoid dimension PISTA2 - //const double TrapezoidBaseLarge = 53*mm; - //const double TrapezoidBaseSmall = 34.0*mm; - //const double TrapezoidHeight = 27*mm; - //const double TrapezoidLength = 1*cm; - //const double FirstStageThickness = 0.3*mm; - //const double SecondStageThickness = 1.5*mm; - //const double DistanceBetweenSi = 3*mm; - //const double FirstStageNbrOfStrips = 49; - //const double SecondStageNbrOfStrips = 45; + //double TrapezoidBaseLarge = 53*mm; + //double TrapezoidBaseSmall = 34.0*mm; + //double TrapezoidHeight = 27*mm; + //double TrapezoidLength = 1*cm; + //double FirstStageThickness = 0.3*mm; + //double SecondStageThickness = 1.5*mm; + //double DistanceBetweenSi = 3*mm; + //double FirstStageNbrOfStrips = 49; + //double SecondStageNbrOfStrips = 45; } using namespace PISTA_NS; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -95,6 +95,7 @@ PISTA::PISTA(){ m_FirstStageScorer = 0; m_SecondStageScorer = 0; m_TrapezoidDetector = 0; + m_version = 1; } PISTA::~PISTA(){ @@ -111,6 +112,29 @@ void PISTA::AddDetector(G4ThreeVector A, G4ThreeVector B, G4ThreeVector C, G4Thr m_R.push_back(0); m_Theta.push_back(0); m_Phi.push_back(0); + + if(m_version==1){ + TrapezoidBaseLarge = 72.3*mm; + TrapezoidBaseSmall = 41.0*mm; + TrapezoidHeight = 57.7*mm; + TrapezoidLength = 1*cm; + FirstStageThickness = 300*um; + SecondStageThickness = 1.5*mm; + DistanceBetweenSi = 4*mm; + FirstStageNbrOfStrips = 91; + SecondStageNbrOfStrips = 57; + } + else if(m_version==2){ + TrapezoidBaseLarge = 53*mm; + TrapezoidBaseSmall = 34.0*mm; + TrapezoidHeight = 27*mm; + TrapezoidLength = 1*cm; + FirstStageThickness = 0.3*mm; + SecondStageThickness = 1.5*mm; + DistanceBetweenSi = 3*mm; + FirstStageNbrOfStrips = 49; + SecondStageNbrOfStrips = 45; + } } @@ -225,6 +249,7 @@ void PISTA::ReadConfiguration(NPL::InputParser parser){ if(NPOptionManager::getInstance()->GetVerboseLevel()) cout << endl << "//// PISTA " << i+1 << endl; + m_version = blocks[i]->GetInt("VERSION"); G4ThreeVector A = NPS::ConvertVector(blocks[i]->GetTVector3("POS_A","mm")); G4ThreeVector B = NPS::ConvertVector(blocks[i]->GetTVector3("POS_B","mm")); G4ThreeVector C = NPS::ConvertVector(blocks[i]->GetTVector3("POS_C","mm")); @@ -277,7 +302,7 @@ void PISTA::ConstructDetector(G4LogicalVolume* world){ w = w.unit(); center = (m_A[i] + m_B[i] + m_C[i] + m_D[i])/4; - + Rot = new G4RotationMatrix(u,v,w); Det_pos = w * TrapezoidLength * 0.5 + center; } @@ -343,9 +368,9 @@ void PISTA::ReadSensitive(const G4Event* ){ m_Event->SetPISTA_DE_StripTime(Time); } } - + unsigned int sizeDEBack = FirstStageScorer->GetLengthMult(); - for(unsigned int i = 0 ; i < sizeDEBack ; i++){ + for(unsigned int i = 0 ; i < sizeDEBack ; i++){ double EnergyBack = RandGauss::shoot(FirstStageScorer->GetEnergyLength(i), DE_ResoEnergy); if(EnergyBack>EnergyThreshold){ double Time = RandGauss::shoot(FirstStageScorer->GetTimeLength(i), ResoTime); @@ -356,18 +381,18 @@ void PISTA::ReadSensitive(const G4Event* ){ } } - + /*for(unsigned int i = 0 ; i < sizeDEFront ; i++){ double EnergyFront = RandGauss::shoot(FirstStageScorer->GetEnergyWidth(i), DE_ResoEnergy); double EnergyBack = RandGauss::shoot(FirstStageScorer->GetEnergyLength(i), DE_ResoEnergy); if(EnergyFront>EnergyThreshold){ - double Time = RandGauss::shoot(FirstStageScorer->GetTimeLength(i), ResoTime); - int DetNbr = FirstStageScorer->GetDetectorWidth(i); - int StripFront = 92-FirstStageScorer->GetStripWidth(i); - m_Event->SetPISTA_DE(DetNbr, StripFront, EnergyFront, EnergyBack, Time, Time); - m_Event->SetPISTA_DE_BackDetector(DetNbr); + double Time = RandGauss::shoot(FirstStageScorer->GetTimeLength(i), ResoTime); + int DetNbr = FirstStageScorer->GetDetectorWidth(i); + int StripFront = 92-FirstStageScorer->GetStripWidth(i); + m_Event->SetPISTA_DE(DetNbr, StripFront, EnergyFront, EnergyBack, Time, Time); + m_Event->SetPISTA_DE_BackDetector(DetNbr); } - }*/ + }*/ FirstStageScorer->clear(); /////////// @@ -387,7 +412,7 @@ void PISTA::ReadSensitive(const G4Event* ){ m_Event->SetPISTA_E_StripTime(Time); } } - + unsigned int sizeEBack = SecondStageScorer->GetWidthMult(); for(unsigned int i = 0 ; i < sizeEBack ; i++){ double EnergyBack = RandGauss::shoot(SecondStageScorer->GetEnergyWidth(i), E_ResoEnergy); @@ -399,20 +424,20 @@ void PISTA::ReadSensitive(const G4Event* ){ m_Event->SetPISTA_E_BackTime(Time); } } - + /*for(unsigned int i = 0 ; i < sizeEFront ; i++){ double EnergyFront = RandGauss::shoot(SecondStageScorer->GetEnergyLength(i), E_ResoEnergy); double EnergyBack = RandGauss::shoot(SecondStageScorer->GetEnergyWidth(i), E_ResoEnergy); if(EnergyFront>EnergyThreshold){ - double Time = RandGauss::shoot(SecondStageScorer->GetTimeLength(i), ResoTime); - int DetNbr = SecondStageScorer->GetDetectorLength(i); - int StripFront = SecondStageScorer->GetStripLength(i); - m_Event->SetPISTA_E(DetNbr, StripFront, EnergyFront, EnergyBack, Time, Time); - m_Event->SetPISTA_E_BackDetector(DetNbr); + double Time = RandGauss::shoot(SecondStageScorer->GetTimeLength(i), ResoTime); + int DetNbr = SecondStageScorer->GetDetectorLength(i); + int StripFront = SecondStageScorer->GetStripLength(i); + m_Event->SetPISTA_E(DetNbr, StripFront, EnergyFront, EnergyBack, Time, Time); + m_Event->SetPISTA_E_BackDetector(DetNbr); } - }*/ + }*/ SecondStageScorer->clear(); diff --git a/NPSimulation/Detectors/PISTA/PISTA.hh b/NPSimulation/Detectors/PISTA/PISTA.hh index 90548dec841c28b11394d4fafd6fbadcf2ac61a9..4ac6371879228364ade3a01f41da02a296fb327c 100644 --- a/NPSimulation/Detectors/PISTA/PISTA.hh +++ b/NPSimulation/Detectors/PISTA/PISTA.hh @@ -98,6 +98,7 @@ class PISTA : public NPS::VDetector{ //////////////////////////////////////////////////// private: // Geometry // Detector Coordinate + int m_version; vector<bool> m_DefinitionType; vector<G4ThreeVector> m_A; vector<G4ThreeVector> m_B;