File indexing completed on 2024-04-06 12:30:11
0001 #include "SimG4CMS/PPS/interface/PPSStripOrganization.h"
0002 #include "DataFormats/CTPPSDetId/interface/TotemRPDetId.h"
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004
0005 #include "G4VPhysicalVolume.hh"
0006 #include "G4VTouchable.hh"
0007 #include "G4Step.hh"
0008
0009 #include <iostream>
0010
0011 uint32_t PPSStripOrganization::unitID(const G4Step* aStep) {
0012 unsigned int arm = 0;
0013 unsigned int station = 0;
0014 unsigned int roman_pot = 0;
0015
0016 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
0017 G4VPhysicalVolume* physVol = touch->GetVolume(0);
0018 unsigned int detector = physVol->GetCopyNo();
0019 edm::LogVerbatim("PPSStripSim") << "PPSStripSim: PhysVol= " << physVol->GetName() << " coNum=" << detector;
0020
0021 G4VPhysicalVolume* physVolVac = touch->GetVolume(2);
0022 if (nullptr == physVolVac) {
0023 edm::LogError("PPSStripSim") << "Physical volume RP_box_primary_vacuum not found for " << physVol->GetName()
0024 << "; cannot determine TotemRPDetId.";
0025 } else {
0026 int cpy_no = physVolVac->GetCopyNo();
0027 arm = (cpy_no / 100) % 10;
0028 station = (cpy_no / 10) % 10;
0029 roman_pot = cpy_no % 10;
0030 }
0031 edm::LogVerbatim("PPSStripSim") << " arm=" << arm << " station=" << station << " roman_pot=" << roman_pot
0032 << " detector=" << detector;
0033 return TotemRPDetId(arm, station, roman_pot, detector).rawId();
0034 }