diff --git a/FullSimLight/include/ATL.hh b/FullSimLight/include/ATL.hh index d169306599bf9eb809e36dd739fb93e1ffc6d65a..f16126507c7f07d6279cbb0fb6e7ee4ceca6e69c 100644 --- a/FullSimLight/include/ATL.hh +++ b/FullSimLight/include/ATL.hh @@ -47,8 +47,9 @@ private: double delta; G4Track* track; + G4double bRmin; G4double bRmax; - G4double mZmax; + G4double bZmax; G4double maxAcceptedEpsilon; G4double lowEepsMin; diff --git a/FullSimLight/src/ATL.cc b/FullSimLight/src/ATL.cc index b8e6dfc5170df2e77f900a44b7e990c6e4277b69..dab08b2c7032e99220bb360448a03c0bbfbae103 100644 --- a/FullSimLight/src/ATL.cc +++ b/FullSimLight/src/ATL.cc @@ -4,7 +4,7 @@ ATL::ATL() { G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager(); - G4cout << " PRINTING from ATL \nDeltaIntersection: " << fieldMgr->GetDeltaIntersection() / mm << " mm" << G4endl; + G4cout << " PRINTING from ATL (Default values) \nDeltaIntersection: " << fieldMgr->GetDeltaIntersection() / mm << " mm" << G4endl; G4cout << "DeltaOneStep " << fieldMgr->GetDeltaOneStep() / mm << " mm" << G4endl; G4cout << "EpsilonMin: " << fieldMgr->GetMinimumEpsilonStep() / mm << " mm" << G4endl; G4cout << "EpsilonMax: " << fieldMgr->GetMaximumEpsilonStep() / mm << " mm" << G4endl; @@ -18,26 +18,45 @@ bool ATL::isInsideBeampipe(const G4Track *track) { const double y = pos.y(); const double z = pos.z(); - const G4double bRmax = 120.0, bZmax = 3545.0; +// Define the boundary pairs for the beampipe region (R, Z) + std::vector<std::pair<G4double, G4double>> beamPipeBoundaries = { + {34.3, 3475.0}, + {120.0, 3475.0}, + {120.0, 4185.0}, + {41.0, 4185.0}, + {41.0, 6783.0}, + {70.0, 6783.0}, + {70.0, 12900.0}, + {279.0, 12900.0}, + {279.0, 18650.0}, + {436.0, 18650.0}, + {436.0, 22030.0}, + {1050.0, 22030.0}, + {1050.0, 26046.0}, + {0.0, 26046.0} + }; + // Iterate through each boundary pair + for (const auto &boundary : beamPipeBoundaries) { + G4double bRmax = boundary.first; // Radial boundary + G4double bZmax = boundary.second; // Z-coordinate boundary - if ((x * x + y * y < bRmax) && (std::abs(pos.z()) < bZmax)) { + if ((x * x + y * y < bRmax * bRmax) && (std::abs(pos.z()) < bZmax)) { G4Region *reg = track->GetVolume()->GetLogicalVolume()->GetRegion(); G4cout << "From isInsideBeampipe: Track is in the Beampipe region. \n"<< reg->GetName()<<" at X: "<<pos.x()<<" Y: "<<pos.y()<< "& Z : " <<pos.z() << G4endl; return true; } - else { - G4cout << "Track is NOT in the Beampipe region. X: " << pos.x() << "Y: " << pos.y() << " Z: " << pos.z() << " \n"; - return false; - } -} + } + G4cout << "Track is NOT in the Beampipe region. X: " << pos.x() << "Y: " << pos.y() << " Z: " << pos.z() << " \n"; + return false; +} bool ATL::isInsideTracker(const G4Track *track) { const G4ThreeVector &pos = track->GetPosition(); const double x = pos.x(); const double y = pos.y(); const double z = pos.z(); - const G4double bRmax = 1148.0, bZmax = 3475.0; + const G4double bRmin = 34.3, bRmax = 1148.0, bZmax = 3475.0; //Rin and Rout - if ((x * x + y * y < bRmax) && (std::abs(pos.z()) < bZmax)) { + if ((x * x + y * y >= bRmin * bRmin) && (x * x + y * y <= bRmax * bRmax) && (std::abs(pos.z()) < bZmax)) { G4Region *reg = track->GetVolume()->GetLogicalVolume()->GetRegion(); G4cout << "From isInsideTracker: Track is in the Tracker region. \n"<< reg->GetName()<<" at X: "<<pos.x()<<" Y: "<<pos.y()<< "& Z : " <<pos.z() << G4endl; return true; @@ -51,7 +70,7 @@ void ATL::ConfigureForTrack(const G4Track *track) { isInsideBeampipe(track); isInsideTracker(track); //BeamPipe - const G4double lowEepsMin= 1.0e-5, lowEepsMax= 1.0e-4; //Below energy threshold values- dummy energy threshold 2.5 MeV//////low-Beampipe, hi-Tracker and default for others + const G4double lowEepsMin= 1.0e-5, lowEepsMax= 1.0e-4; //Below energy threshold values//////low-Beampipe, hi-Tracker and default for others const G4double lowDeltaIntersection= 0.0004, lowDeltaOneStep= 0.001; const G4double lowDeltaChord= 0.001, lowMaxStep=200; //Tracker @@ -64,9 +83,9 @@ void ATL::ConfigureForTrack(const G4Track *track) { const G4double defaultDeltaChord= 0.001, defaultMaxStep=200; //Energy Threshold and position - All 4 parameters (Eps min./max. additional) - //3 energy ranges, 1. E<15MeV, 2. E>15MeV-200 MeV, 3. E>200MeV + //3 energy ranges, 1. E<15MeV, 2. E>15MeV-200 MeV, 3. E>200MeV///////// Threshold Energy 15 MeV & 200 MeV //3 Set of Parameters according to accuracy, 1st Set goood for E>200MeV, 2nd low accuracy for E<15MeV, 3rd for medium accuracy - if( track->GetKineticEnergy() <=200.0 * MeV && isInsideBeampipe(track)) { + if( track->GetKineticEnergy() <=15.0 * MeV || isInsideBeampipe(track)) { SetMinimumEpsilonStep( lowEepsMin ); SetMaximumEpsilonStep( lowEepsMax ); SetDeltaIntersection(lowDeltaIntersection); @@ -98,12 +117,9 @@ void ATL::ConfigureForTrack(const G4Track *track) { G4cout << "EpsilonMax: " << GetMaximumEpsilonStep() / mm << " mm" << G4endl; G4cout << "DeltaChord: " << G4TransportationManager::GetTransportationManager()->GetPropagatorInField()->GetChordFinder()->GetDeltaChord() / mm << " mm" << G4endl; G4cout << "MaxStep / LargestAcceptableStep: " << G4TransportationManager::GetTransportationManager()->GetPropagatorInField()->GetLargestAcceptableStep() / mm << " mm" << G4endl; -} - +} void ATL::print() //void ATL::ConstructSDandField() { //In case if we want to print the additional information in future //G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager(); - //fieldMgr->ConfigureForTrack(track); - //G4cout << " ATL ATL ATL ATL ATL ATL ATL ATL ATL ATL ATL ATL ATL ATL " << fieldMgr->GetDeltaIntersection() / mm << " mm" << G4endl; } \ No newline at end of file