Está en la página 1de 57

Geant4 - Aplicación

Ticse Torres Royer


Dávila Aguilar Houston
Tópicos Especiales IV: Física de Partículas.

Geant4 Low Energy Electromagnetic Physics Working Group


Contenido

 Descripción.
 Geometría.
 http://conferences.fnal.gov/g4tutorial/g4cd/Documentation/WorkshopExercises/Exercise1.html

 Partículas.
http://conferences.fnal.gov/g4tutorial/g4cd/Documentation/WorkshopExercises/Exercise2.html

 Sensibilidad.
http://conferences.fnal.gov/g4tutorial/g4cd/Documentation/WorkshopExercises/Exercise3.html

Geant4 Low Energy Electromagnetic Physics Working Group


Descripción
 Espectómetro de doble brazo con
cámaras de deriva, hodoscope y
calorímetros .
 Un brazo
proporciona información de
posición y el momento de la
partícula incidente, mientras que
el otro recoge información de la
posición, el tiempo y energía de
la partícula después de haber
sido desviada por un campo
magnético en el centro del
espectrómetro.

Geant4 Low Energy Electromagnetic Physics Working Group


Visualizacion.
 Este ejemplo utiliza la física de
los procesos siguientes:
 Electromagnética: efecto foto-
eléctrico, Dispersión de Compton,
producción de pares,
bremsstrahlung, ionización,
dispersión múltiple, aniquilación.
 Decaimiento.
 Transporte en un campo.
 Se definen las partículas:
geantino, gamma, leptones,
piones, muones.

Geant4 Low Energy Electromagnetic Physics Working Group


Materiales.
 Hodoscope –
centelladores(C,H)
 Camara de deriva – gas de
argon.
 Calorimetro EM – CsI
 Calorimetro hadronico –
Plomo y centelladores.

Geant4 Low Energy Electromagnetic Physics Working Group


Geometría
 Primer Brazo: caja con aire
 Hodoscope (15 centelladores
verticales).
 Cámara de deriva (5 capas de
gas Argón con una placa en
el centro de cada capa).

Geant4 Low Energy Electromagnetic Physics Working Group


Agregamos campo magnético
 Dado en la clase A01MagneticField.hh - .cc
y la clase A01MagneticFieldMessenger.hh-
.cc permite cambiar el valor del campo
desde terminal mediante G4UImessenger
 A01MagneticField deriva de
G4MagneticField . El método GetFieldvalue
da el valor del campo.
 Luego agregamos G4FieldManager y
G4TransportationManager en
A01Detectorconstruction.

Geant4 Low Energy Electromagnetic Physics Working Group


Parte de A01MagneticField.cc
void A01MagneticField::GetFieldValue(const double Point[3],double *Bfield)
const
{
Bfield[0] = 0.;
Bfield[2] = 0.;
if(std::abs(Point[1])<ymax && (sqr(Point[0])+sqr(Point[2]))<rmax_sq)
{ Bfield[1] = By; }
else
{ Bfield[1] = 0.; }
}

Geant4 Low Energy Electromagnetic Physics Working Group


Parte A01Detectorconstruction.cc
#include "G4FieldManager.hh"
#include "G4TransportationManager.hh"
#include "A01MagneticField.hh“

A01DetectorConstruction::A01DetectorConstruction()
: air(0), argonGas(0), scintillator(0),

{ messenger = new A01DetectorConstMessenger(this);
magneticField = new A01MagneticField();

A01DetectorConstruction::~A01DetectorConstruction()
{ delete magneticField;
delete armRotation;
...
// campo magnetico
static G4bool fieldIsInitialized = false;
if(!fieldIsInitialized)
{ G4FieldManager* fieldMgr = G4TransportationManager::GetTransportationManager()->GetFieldManager();
fieldMgr->SetDetectorField(magneticField);
fieldMgr->CreateChordFinder(magneticField);
fieldIsInitialized = true;
}
Geant4 Low Energy Electromagnetic Physics Working Group
Hodoscopes (centelladores)
 Primero definimos los
materiales (Plomo, Iodo,
Cesio)
 En
A01Detectorconstruction.hh
definimos los punteros a
G4Material plomo y CsI.
 Inicializamos en cero ( Cs(0),
plomo(0) ) en
A01Detectorconstruction.cc

Geant4 Low Energy Electromagnetic Physics Working Group


Parte A01Detectorconstruction.cc
// Definimos los materiales -plomo
a= 2007.19*g/mole;
density = 11.35*g/cm3;
plomo = new G4Material(name="Plomo" , z=82. , a, density);
//CsI
a= 126.9*g/mole;
G4Element* elI = new G4Element(name="Iodo" , symbol="I", z=53. , a);
a= 132.9*g/mole;
G4Element* elCs = new G4Element(name="Cesio" ,symbol="Cs", z=55. ,a);
density= 4.51*g/cm3;
CsI = new G4Material(name ="CsI" , density, nElem=2);
CsI-> AddElement (elI, weightRatio=.5);
CsI-> AddElement(elCs, weightRatio=.5);
G4cout << G4endl << “Los materiales definidos son : " << G4endl << G4endl;
G4cout << *(G4Material::GetMaterialTable()) << G4endl;

Geant4 Low Energy Electromagnetic Physics Working Group


Salida.

...
Material: Plomo density: 11.350 g/cm3 RadL: 5.437 cm Nucl.Int.Length: 38.899
cm Imean: 820.000 eV
---> Element: Plomo ( ) Z = 82.0 N = 2007.2 A = 2007.19 g/mole ElmMassFraction:
100.00 % ElmAbundance 100.00 %

Material: CsI density: 4.510 g/cm3 RadL: 1.861 cm Nucl.Int.Length: 39.299 cm


Imean: 491.205 eV
---> Element: Iodo (I) Z = 53.0 N = 126.9 A = 126.90 g/mole ElmMassFraction:
50.00 % ElmAbundance 51.15 %
---> Element: Cesio (Cs) Z = 55.0 N = 132.9 A = 132.90 g/mole ElmMassFraction:

Geant4 Low Energy Electromagnetic Physics Working Group


Parte A01Detectorconstruction.cc
//hodoscopes en el segundo brazo
G4VSolid* hodoscope2Solid = new
G4Box("hodoscope2Caja",5.*cm,20.*cm,0.5*cm);
G4LogicalVolume* hodoscope2Logical
= new
G4LogicalVolume(hodoscope2Solid,scintillator,"hodoscope2Logical",0,0,0);
for(int i2=0;i2<25;i2++)
{
G4double x2 = (i2-12)*10.*cm;
new G4PVPlacement(0,G4ThreeVector(x2,0.,0.),hodoscope2Logical,
"hodoscope2Physical",secondArmLogical,0,i2);
}

Geant4 Low Energy Electromagnetic Physics Working Group


Cámara de Deriva (gas de Argon)
 Cámaras de 3m de
ancho, 60cm de
altura y 2cm de
espesor, con placas
en el centro de
2mm de espesor.

Geant4 Low Energy Electromagnetic Physics Working Group


Cámara de deriva del segundo brazo.
G4VSolid* camara2Solid = new G4Box("camara2Box", 1.5*m, 30.*cm, 1.*cm);
G4LogicalVolume* camara2Logical = new G4LogicalVolume(camara2Solid, argonGas,
"camara2Logical",0,0,0);
for(int j2=0;j2<9;j2++)
{
G4double z2= (j2-4)*0.25*m - 1.5*m ;
new
G4PVPlacement(0,G4ThreeVector(0.,0.,z2),camara2Logical,"camara2Phisico",secondAr
mLogical,0,j2);
}
G4VSolid* placa2Solid = new G4Box("placa2caja",1.5*m,30.*cm,0.1*mm);
G4LogicalVolume* placa2Logical = new
G4LogicalVolume(placa2Solid,argonGas,"placa2Logical",0,0,0);
new
G4PVPlacement(0,G4ThreeVector(0.,0.,0.),placa2Logical,"placa2Physical",camara2Logi
cal,0,0);
Geant4 Low Energy Electromagnetic Physics Working Group
Geant4 Low Energy Electromagnetic Physics Working Group
Calorímetro Electromagnetico
 Cristales de 15cm de
ancho, 15cm de altura y
30cm de espesor.
 El calorímetro es un
arreglo de 20x4 de
estos cristales.

Geant4 Low Energy Electromagnetic Physics Working Group


Parte A01Detectorconstruction.cc

G4VSolid* EMcalorimetroSolid = new


G4Box("EMCajaCalorimetro",1.5*m,30.*cm,15.*cm);
G4LogicalVolume* EMcalorimetroLogical = new
G4LogicalVolume(EMcalorimetroSolid,CsI,"EMcalorimetroLogical",0,0,0);
new G4PVPlacement(0,G4ThreeVector(0.,0.,2.*m),EMcalorimetroLogical,
"EMcalorimetroPhysical", secondArmLogical,0,0);
//celdas calorimetro EM
G4VSolid* celdaSolid = new G4Box("celdaCaja", 7.5*cm, 7.5*cm,15.*cm);
G4LogicalVolume* celdaLogical
= new G4LogicalVolume(celdaSolid, CsI,"celdaLogical",0,0,0);
G4VPVParameterisation* celdaParam = new A01CellParameterisation();
new G4PVParameterised("celdaPhysical",
celdaLogical,EMcalorimetroLogical,kXAxis,80,celdaParam);

Geant4 Low Energy Electromagnetic Physics Working Group


parte de
A01CellParameterisation.cc
A01CellParameterisation::A01CellParameterisation()
{
for(int copyNo=0;copyNo<80;copyNo++)
{ G4int column = copyNo / 4;
G4int row = copyNo % 4;
xCell[copyNo] = (column-9)*15.*cm - 7.5*cm;
yCell[copyNo] = (row-1)*15*cm - 7.5*cm;
}
}
A01CellParameterisation::~A01CellParameterisation()
{;}
void A01CellParameterisation::ComputeTransformation
(const G4int copyNo,G4VPhysicalVolume *physVol) const
{
physVol->SetTranslation(G4ThreeVector(xCell[copyNo],yCell[copyNo],0.));
}
Geant4 Low Energy Electromagnetic Physics Working Group
Calorímetro hadrónico.
 Sándwiches de plomo y
centellador de 30cm de
ancho, 30cm de altura y
5cm de espesor.
Colocados en un arreglo
de 3m de ancho, 60cm
de altura y 1m de
espesor.

Geant4 Low Energy Electromagnetic Physics Working Group


Parte A01Detectorconstruction.cc
G4VSolid* CalorimetroHadSolid = new G4Box("HadCalorimetroCaja",1.5*m,30.*cm,50.*cm);
G4LogicalVolume* CalorimetroHadLogical = new
G4LogicalVolume(CalorimetroHadSolid,lead,"CalorimetroHadLogical",0,0,0);
new
G4PVPlacement(0,G4ThreeVector(0.,0.,3.*m),CalorimetroHadLogical,"CalorimetroHadphysical",secon
dArmLogical,0,0);
//columnas calorimetro hadronico
G4VSolid* ColumCalHadSolid = new G4Box("ColumCalHadCaja",15.*cm,30.*cm,50.*cm);
G4LogicalVolume* ColumCalHadLogical = new
G4LogicalVolume(ColumCalHadSolid,lead,"CalorimetroHadLogical",0,0,0);
new
G4PVReplica("ColumCalHadPhysical",ColumCalHadLogical,CalorimetroHadLogical,kXAxis,10,30.*cm);
//celda calorimetro hadronico
G4VSolid* CelCalHadSolid = new G4Box("CelCalHadCaja",15.*cm,30.*cm,50.*cm);
G4LogicalVolume* CelCalHadLogical
= new G4LogicalVolume(CelCalHadSolid,lead,"CelCalHadLogical",0,0,0);
new G4PVReplica("CelCalHadPhysical",CelCalHadLogical,
ColumCalHadLogical,kYAxis,2,30.*cm);
Geant4 Low Energy Electromagnetic Physics Working Group
Sigue
//nivel colorimetro hadronico
G4VSolid* CapaCalHadSolid
= new G4Box("CapaCalHadCaja",15.*cm,15.*cm,2.5*cm);
G4LogicalVolume* CapaCalHadLogical
= new G4LogicalVolume(CapaCalHadSolid,lead,"CapaCalHadLogical",0,0,0);
new G4PVReplica("CapaCalHadPhysical",CapaCalHadLogical,
CelCalHadLogical,kZAxis,20,5.*cm);
//plano centillador
G4VSolid* CentiCalHadSolid
= new G4Box("CentiCalHadCaja",15.*cm,15.*cm,0.5*cm);
G4LogicalVolume* CentiCalHadLogical
= new
G4LogicalVolume(CentiCalHadSolid,scintillator,"CentiCalHadLogical",0,0,0);
new G4PVPlacement(0,G4ThreeVector(0.,0.,2.*cm),CentiCalHadLogical,
"CentiCalHadPhysical",CapaCalHadLogical,0,0);

Geant4 Low Energy Electromagnetic Physics Working Group


Geant4 Low Energy Electromagnetic Physics Working Group
Partículas.
 Geant4 posee varios tipos de partículas para simulación, cada
partícula representado por su propia clase que deriva de
G4ParticleDefinition. Las partículas son organizados en 6
categorías: leptones, mesones, bariones, bosones, de vida-corta
e iones.

 Los procesos físicos describen como interactúan las partículas


con el material tenemos 7 categorías principales de procesos:
electromagnetico, hadrónico, decaimiento, fotolepton-hadron,
ópticos, parametrización y de transporte.

Geant4 Low Energy Electromagnetic Physics Working Group


sigue
Cada proceso tiene dos grupos de métodos que desempeñan un papel
importante en el seguimiento, GetPhysicalInteractionLength (GPIL) y DoIt. El
método de GPIL da la longitud del paso desde el punto espacio – tiempo
actual a el punto espacio-tiempo siguiente .Esto se hace mediante el cálculo
de la probabilidad de interacción basado en la información de la sección
transversal del proceso. Al final de este paso, el método DoIt debe invocarse
El método de DoIt implementa los detalles de la interacción, el cambio de
energía de la partícula, el impulso, dirección y posición, y la producción
secundaria si es necesario. Estos cambios se registran como objetos
G4VParticleChange

Geant4 Low Energy Electromagnetic Physics Working Group


Geantino
 Esta partícula fue
inventado para la
simulación en Geant4 ,
no interactúa con la
materia , solo es
necesario el proceso de
transporte.

Geant4 Low Energy Electromagnetic Physics Working Group


Geant4 Low Energy Electromagnetic Physics Working Group
Positron
 Para incluir la física
electromagnética , incluimos
A01EMPhysics.hh en
A01EMPhysicsList.
 Se desvía en el campo y
produce una lluvia de cargas
en el calorímetro EM.
 Procesos: dispersión
múltiple, bremsstrahlung e,
ionización ,aniquilación e+.

Geant4 Low Energy Electromagnetic Physics Working Group


Geant4 Low Energy Electromagnetic Physics Working Group
Muon
 Incluir en
A01EMPhysicsList.cc ,
A01MuonPhysics.hh
 Ioniza el aire produciendo
cargas negativas(rojo)
 Procesos: dispersión múltiple
, bremsstrahlung mu,
ionización de mu, producción
de pares e + e- por muones

Geant4 Low Energy Electromagnetic Physics Working Group


Geant4 Low Energy Electromagnetic Physics Working Group
Pion
 Agregamos física hidrómica
(A01HadronPhysics.hh y
A01HadronPhysics.cc)
 El pion se desintegra en muon y
neutrino en la primera cámara
de deriva.
 Procesos: Hadron elástica
,Hadron inelástica ,captura y
fisión de neutrones ,aniquilación
en reposo para anti-protones y
anti-neutrones , scattering
múltiple para hadrones
cargados, ionización de
hadrones cargados .

Geant4 Low Energy Electromagnetic Physics Working Group


Geant4 Low Energy Electromagnetic Physics Working Group
Sensibilidad.
 Hit es la interacción física instantánea en la trayectoria de la
partícula o acumulación de interacciones en la región sensible del
detector.
 La región sensible del detector crea hits usando la información dado
en el objeto G4Step y almacenados en G4Event al final de un
evento.
 El usuario define su clase hit derivado de G4VHit, pudiendo
almacenar varios tipos de información en esta clase como: posición
y tiempo de paso, momento y energía de la trayectoria, energía de
deposición, información geométrica y combinaciones de estos.

Geant4 Low Energy Electromagnetic Physics Working Group


 Los objetos de una clase hit deben ser almacenados en una
colección, el cual es una instancia de G4THitsCollection template
class.
 La colección hits son accesibles a través de G4Event al final de
un evento, para ser usado en el análisis del evento, y a través
de G4SDManager durante el proceso del evento, que se utiliza
para el filtrado del evento.

Geant4 Low Energy Electromagnetic Physics Working Group


Hodoscope y camara de deriva
 No hay salida para los
detectores del segundo
brazo.

Geant4 Low Energy Electromagnetic Physics Working Group


Parte de A01DetectorConstruction.cc

G4VPhysicalVolume*
A01DetectorConstruction::Construct()
{
//
G4VSensitiveDetector* hodoscope1;
G4VSensitiveDetector* chamber1;

G4VSensitiveDetector* hodoscope2;
G4VSensitiveDetector* camara2;

Geant4 Low Energy Electromagnetic Physics Working Group


sigue
G4SDManager* SDman = G4SDManager::GetSDMpointer();
G4String SDname;
hodoscope1 = new A01Hodoscope(SDname="/hodoscope1");
SDman->AddNewDetector(hodoscope1);
hodoscope1Logical->SetSensitiveDetector(hodoscope1);

hodoscope2 = new A01Hodoscope(SDname="/hodoscope2");


SDman->AddNewDetector(hodoscope2);
hodoscope2Logical->SetSensitiveDetector(hodoscope2);

chamber1 = new A01DriftChamber(SDname="/chamber1");


SDman->AddNewDetector(chamber1);
wirePlane1Logical->SetSensitiveDetector(chamber1);

camara2 = new A01DriftChamber(SDname="/camara2");


SDman->AddNewDetector(camara2);
wirePlane2Logical->SetSensitiveDetector(camara2);
Geant4 Low Energy Electromagnetic Physics Working Group
Parte de A01EvenAction.cc

A01EventAction::A01EventAction()
{
G4String colName;
G4SDManager* SDman = G4SDManager::GetSDMpointer();
HHC1ID = SDman->GetCollectionID(colName="hodoscope1/hodoscopeColl");
DHC1ID = SDman->GetCollectionID(colName="chamber1/driftChamberColl");
//colocando ID
HHC2ID = SDman->GetCollectionID(colName="hodoscope2/hodoscopeColl");
DHC2ID = SDman->GetCollectionID(colName="camara2/driftChamberColl");

Geant4 Low Energy Electromagnetic Physics Working Group


Sigue
void A01EventAction::EndOfEventAction(const G4Event* evt)
{
G4HCofThisEvent * HCE = evt->GetHCofThisEvent();
A01HodoscopeHitsCollection* HHC1 = 0;
A01DriftChamberHitsCollection* DHC1 = 0;
//...
A01HodoscopeHitsCollection* HHC2 = 0;
A01DriftChamberHitsCollection* DHC2 = 0;
//....
A01EmCalorimeterHitsCollection* ECHC = 0;
A01HadCalorimeterHitsCollection* HCHC = 0;
if(HCE)
{
HHC1 = (A01HodoscopeHitsCollection*)(HCE->GetHC(HHC1ID));
DHC1 = (A01DriftChamberHitsCollection*)(HCE->GetHC(DHC1ID));
//...
HHC2 = (A01HodoscopeHitsCollection*)(HCE->GetHC(HHC2ID));
DHC2 = (A01DriftChamberHitsCollection*)(HCE->GetHC(DHC2ID));
//....
ECHC = (A01EmCalorimeterHitsCollection*)(HCE->GetHC(ECHCID));
HCHC = (A01HadCalorimeterHitsCollection*)(HCE->GetHC(HCHCID));
} Electromagnetic Physics Working Group
Geant4 Low Energy
sigue

...
//
if(HHC2)
{ int n_hit = HHC2->entries();
G4cout << "Hodoscope 2 tiene " << n_hit << " colisiones." << G4endl;
for(int i1=0;i1<n_hit;i1++)
{
A01HodoscopeHit* aHit = (*HHC2)[i1];
aHit->Print();
}
}
}

Geant4 Low Energy Electromagnetic Physics Working Group


sigue
//
if(DHC2)
{
int n_hit = DHC2->entries();
G4cout << "Camara de deriva 2 tiene " << n_hit << " colisiones." <<
G4endl;
for(int i2=0;i2<5;i2++)
{
for(int i1=0;i1<n_hit;i1++)
{
A01DriftChamberHit* aHit = (*DHC2)[i1];
if(aHit->GetLayerID()==i2) aHit->Print();
}
}
}
Geant4 Low Energy Electromagnetic Physics Working Group
Geant4 Low Energy Electromagnetic Physics Working Group
Salida
>>> Event 0 >>> Simulation truth : e+ (-4.615962429507,0,989.29283496844)
Hodoscope 1 has 1 hits.
Hodoscope[7] 4.9868571910584 (nsec)
Hodoscope 2 tiene 1 colisiones.
Hodoscope[8] 43.07777699026 (nsec)
Drift Chamber 1 has 6 hits.
Layer[0] : time 6.6711038083754 (nsec) --- local (x,y) -12.964912979212, -0.039498654249376
Layer[1] : time 8.3390095958199 (nsec) --- local (x,y) -17.974093214733, -0.68236328588736
Layer[2] : time 10.006909835187 (nsec) --- local (x,y) -22.798176055634, -1.4412423578075
Layer[3] : time 11.674807992901 (nsec) --- local (x,y) -27.5507927848, -2.2321515445323
Layer[3] : time 12.332190636356 (nsec) --- local (x,y) -6.0281819661482, -86.553137480673
Layer[4] : time 13.342699048469 (nsec) --- local (x,y) -32.01375154174, -3.297089404578
Camara de deriva 2 tiene 5 colisiones.
Layer[0] : time 34.737886998822 (nsec) --- local (x,y) -224.55971729671, -23.354142901273
Layer[1] : time 36.409114104763 (nsec) --- local (x,y) -256.50456338376, -24.689009720259
Layer[2] : time 38.080321993001 (nsec) --- local (x,y) -288.35526777196, -26.116257650382
Layer[3] : time 39.751583993649 (nsec) --- local (x,y) -320.45799915737, -27.582919723848
Layer[4] : time 41.422867626714 (nsec) --- local (x,y) -352.647703604, -29.33252167976

Geant4 Low Energy Electromagnetic Physics Working Group


Calorímetro EM y Hadrónico.

Parte de A01HadCalorimeter.cc
A01HadCalorimeter::A01HadCalorimeter(G4String name)
:G4VSensitiveDetector(name)
{
//definimos coleccion de hits
G4String HCname;
collectionName.insert(HCname="HadCalorimeterColl");
HCID = -1;

Geant4 Low Energy Electromagnetic Physics Working Group


sigue
void A01HadCalorimeter::Initialize(G4HCofThisEvent*HCE)
{ //inicializacion
hitsCollection = new A01HadCalorimeterHitsCollection
(SensitiveDetectorName,collectionName[0]);
if(HCID<0)
{ HCID = G4SDManager::GetSDMpointer()->GetCollectionID(hitsCollection); }
HCE->AddHitsCollection(HCID,hitsCollection);

// llenado de las colisiones del calorímetro con energía cero.


for(int iColumn=0;iColumn<10;iColumn++)
for(int iRow=0;iRow<2;iRow++)
{
A01HadCalorimeterHit* aHit = new A01HadCalorimeterHit();
hitsCollection->insert( aHit );
}
}
Geant4 Low Energy Electromagnetic Physics Working Group
sigue
G4bool A01HadCalorimeter::ProcessHits(G4Step*aStep,G4TouchableHistory* )
{//....
G4double edep = aStep->GetTotalEnergyDeposit();
if(edep==0.) return true;
G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
G4TouchableHistory* theTouchable
= (G4TouchableHistory*)(preStepPoint->GetTouchable());
G4VPhysicalVolume* theCellPhysical = theTouchable->GetVolume(2);
G4int rowNo = theCellPhysical->GetCopyNo();
G4VPhysicalVolume* theColumnPhysical = theTouchable->GetVolume(3);
G4int columnNo = theColumnPhysical->GetCopyNo();
G4int hitID = 2*columnNo+rowNo;
A01HadCalorimeterHit* aHit = (*hitsCollection)[hitID];
// agregar energia de depsicion
aHit->AddEdep(edep);
// check if it is first touch....
if(aHit->GetColumnID()<0)
{aHit->SetColumnID(columnNo);
aHit->SetRowID(rowNo);
G4int depth = theTouchable->GetHistory()->GetDepth();
G4AffineTransform aTrans = theTouchable->GetHistory()->GetTransform(depth-2);
aTrans.Invert();
aHit->SetRot(aTrans.NetRotation());
aHit->SetPos(aTrans.NetTranslation());
} return true;
} Low Energy Electromagnetic Physics Working Group
Geant4
Parte de A01DetectorConstruction.cc
G4VPhysicalVolume* A01DetectorConstruction::Construct()
{// All managed (deleted) by SDManager
G4VSensitiveDetector* hodoscope1;
G4VSensitiveDetector* chamber1;
G4VSensitiveDetector* hodoscope2;
G4VSensitiveDetector* camara2;
G4VSensitiveDetector* calorimetroEM;
G4VSensitiveDetector* calorimetroHad;
ConstructMaterials();
...
//sensibilidad del calorimetro EM y Had
calorimetroEM = new A01EmCalorimeter(SDname="/calorimetroEM");
SDman->AddNewDetector(calorimetroEM);
cellLogical->SetSensitiveDetector(calorimetroEM);

calorimetroHad = new A01HadCalorimeter(SDname="/calorimetroHad");


SDman->AddNewDetector(calorimetroHad);
HadCalScintiLogical->SetSensitiveDetector(calorimetroHad);

Geant4 Low Energy Electromagnetic Physics Working Group


Parte de A01EvenAction.cc
void A01EventAction::EndOfEventAction(const G4Event* evt)
{G4HCofThisEvent * HCE = evt->GetHCofThisEvent();
A01HodoscopeHitsCollection* HHC1 = 0;
A01DriftChamberHitsCollection* DHC1 = 0;
A01HodoscopeHitsCollection* HHC2 = 0;
A01DriftChamberHitsCollection* DHC2 = 0;
//....
A01EmCalorimeterHitsCollection* ECHC = 0;
A01HadCalorimeterHitsCollection* HCHC = 0;
if(HCE)
{HHC1 = (A01HodoscopeHitsCollection*)(HCE->GetHC(HHC1ID));
DHC1 = (A01DriftChamberHitsCollection*)(HCE->GetHC(DHC1ID));
HHC2 = (A01HodoscopeHitsCollection*)(HCE->GetHC(HHC2ID));
DHC2 = (A01DriftChamberHitsCollection*)(HCE->GetHC(DHC2ID));
//....
ECHC = (A01EmCalorimeterHitsCollection*)(HCE->GetHC(ECHCID));
HCHC = (A01HadCalorimeterHitsCollection*)(HCE->GetHC(HCHCID));
}

Geant4 Low Energy Electromagnetic Physics Working Group


if(ECHC)
{ int iHit = 0;
double totalE = 0.;
for(int i1=0;i1<80;i1++)
{A01EmCalorimeterHit* aHit = (*ECHC)[i1];
double eDep = aHit->GetEdep();
if(eDep>0.)
{iHit++;
totalE += eDep; }
}
G4cout << "Calorimetro EM tiene " << iHit << " colisiones. Total de Edep es " << totalE/MeV << " (MeV)" << G4endl;
}
if(HCHC)
{int iHit = 0;
double totalE = 0.;
for(int i1=0;i1<20;i1++)
{A01HadCalorimeterHit* aHit = (*HCHC)[i1];
double eDep = aHit->GetEdep();
if(eDep>0.)
{ iHit++;
totalE += eDep; }
}
G4cout << "Calorimetro Hadronico tiene " << iHit << " colisiones. Total de Edep es "<< totalE/MeV << " (MeV)" <<
G4endl; }
}
Geant4 Low Energy Electromagnetic Physics Working Group
Geant4 Low Energy Electromagnetic Physics Working Group
Geant4 Low Energy Electromagnetic Physics Working Group
>>> Event 0 >>> Simulation truth : e+ (-46.608796284877,0,9989.1948678744)
Hodoscope 1 has 1 hits.
Hodoscope[7] 4.9868392083869 (nsec)
Hodoscope 2 tiene 1 colisiones.
Hodoscope[9] 43.118621962955 (nsec)
Drift Chamber 1 has 5 hits.
Layer[0] : time 6.6710266335687 (nsec) --- local (x,y) -9.6803244995177, -0.022961927981725
Layer[1] : time 8.3388694462032 (nsec) --- local (x,y) -12.266712177533, -0.10238247445638
Layer[2] : time 10.006712426243 (nsec) --- local (x,y) -14.862827971551, -0.18045061768859
Layer[3] : time 11.674555380763 (nsec) --- local (x,y) -17.457833952939, -0.2422246088771
Layer[4] : time 13.34239750811 (nsec) --- local (x,y) -20.004972727609, -0.29014202087488
Camara de deriva 2 tiene 8 colisiones.
Layer[0] : time 34.782064077075 (nsec) --- local (x,y) -184.26271026763, -1.2616713099189
Layer[1] : time 36.452645892551 (nsec) --- local (x,y) -213.04660965888, -1.2832391910433
Layer[2] : time 38.123231045669 (nsec) --- local (x,y) -241.84791896898, -1.2889280136141
Layer[2] : time 38.374680336176 (nsec) --- local (x,y) -148.7895788798, 13.368171076805
Layer[2] : time 40.25655731369 (nsec) --- local (x,y) 247.34773628013, 149.34457425109
Layer[2] : time 41.766655754835 (nsec) --- local (x,y) 386.00350941469, 254.73904448587
Layer[3] : time 39.79382044807 (nsec) --- local (x,y) -270.6713482343, -1.2522298797379
Layer[4] : time 41.464407407445 (nsec) --- local (x,y) -299.4820409237, -1.2075098221661
Calorimetro EM tiene 17 colisiones. Total de Edep es 9593.7519690313 (MeV)
Calorimetro Hadronico tiene 2 colisiones. Total de Edep es 3.347249882462 (MeV)
Geant4 Low Energy Electromagnetic Physics Working Group
Idle> gun/particle proton
Idle> run/beamOn 1

>>> Event 0 >>> Simulation truth : proton (-24.860054213226,0,10017.118355756)


Hodoscope 1 has 2 hits.
Hodoscope[7] 5.008630250396 (nsec)
Hodoscope[13] 6.4100617879675 (nsec)
Hodoscope 2 tiene 1 colisiones.
Hodoscope[9] 43.340078743539 (nsec)
Drift Chamber 1 has 5 hits.
Layer[0] : time 6.700176378978 (nsec) --- local (x,y) -5.1183167816382, 0.0091149
Layer[1] : time 8.3753064279533 (nsec) --- local (x,y) -6.3389177805586, 0.012143
Layer[2] : time 10.050436548432 (nsec) --- local (x,y) -7.5509602398323, 0.007286
Layer[3] : time 11.725566866727 (nsec) --- local (x,y) -8.7739975034423, 0.002329
Layer[4] : time 13.40069757257 (nsec) --- local (x,y) -10.022792328185, -0.0258425
Camara de deriva 2 tiene 5 colisiones.
Layer[0] : time 34.966983005503 (nsec) --- local (x,y) -164.71958608517, -0.670677
Layer[1] : time 36.644891754846 (nsec) --- local (x,y) -193.54353351681, -0.690819
Layer[2] : time 38.322799773489 (nsec) --- local (x,y) -222.36292543159, -0.719628
Layer[3] : time 40.000708857268 (nsec) --- local (x,y) -251.18732150957, -0.724636
Layer[4] : time 41.678613487695 (nsec) --- local (x,y) -279.98782294257, -0.725265
Calorimetro EM tiene 23 colisiones. Total de Edep es 2660.7790862454 (MeV)
Calorimetro Hadronico tiene 4 colisiones. Total de Edep es 46.360669294988 (MeV)

Geant4 Low Energy Electromagnetic Physics Working Group


Idle> /gun/particle pi+
Idle> run/beamOn 1

>>> Event 0 >>> Simulation truth : pi+ (-100.01578037668,0,10009.321970853)


Hodoscope 1 has 1 hits.
Hodoscope[7] 4.9875191754795 (nsec)
Hodoscope 2 tiene 2 colisiones.
Hodoscope[9] 43.058033207213 (nsec)
Hodoscope[8] 43.085932873146 (nsec)
Drift Chamber 1 has 5 hits.
Layer[0] : time 6.6719312979471 (nsec) --- local (x,y) -20.024890301602, 0.022300
Layer[1] : time 8.3399967066626 (nsec) --- local (x,y) -25.005323481939, 0.016015
Layer[2] : time 10.008061353803 (nsec) --- local (x,y) -29.96253176031, -0.0173186
Layer[3] : time 11.676125557418 (nsec) --- local (x,y) -34.906162693683, -0.060860
Layer[4] : time 13.344190184267 (nsec) --- local (x,y) -39.862597955862, -0.082772
Camara de deriva 2 tiene 5 colisiones.
Layer[0] : time 34.722308209234 (nsec) --- local (x,y) -214.64573319133, -0.658928
Layer[1] : time 36.392725278052 (nsec) --- local (x,y) -241.6687448664, -0.7783426
Layer[2] : time 38.063144636993 (nsec) --- local (x,y) -268.70429106872, -0.929802
Layer[3] : time 39.733563273723 (nsec) --- local (x,y) -295.73566446459, -1.105973
Layer[4] : time 41.403983744721 (nsec) --- local (x,y) -322.77699078216, -1.310482
Calorimetro EM tiene 13 colisiones. Total de Edep es 223.62332294036 (MeV)
Calorimetro Hadronico tiene 10 colisiones. Total de Edep es 180.89798770084 (MeV)

Geant4 Low Energy Electromagnetic Physics Working Group


Idle> gun/particle mu+
Idle> run/beamOn 1

>>> Event 0 >>> Simulation truth : mu+ (19.091996847819,0,9995.58869582)


Hodoscope 1 has 1 hits.
Hodoscope[7] 4.9870690478664 (nsec)
Hodoscope 2 tiene 1 colisiones.
Hodoscope[9] 43.210911299625 (nsec)
Drift Chamber 1 has 6 hits.
Layer[0] : time 6.6713321466766 (nsec) --- local (x,y) 3.5731949397791, 0.242
Layer[1] : time 8.3392497281279 (nsec) --- local (x,y) 4.6120422311356, 0.510
Layer[2] : time 10.007167132624 (nsec) --- local (x,y) 5.6304440755348, 0.753
Layer[3] : time 11.67508459521 (nsec) --- local (x,y) 6.6573901237194, 0.9935
Layer[4] : time 13.343001523032 (nsec) --- local (x,y) 7.431936008789, 1.3680
Layer[4] : time 13.357431738106 (nsec) --- local (x,y) 59.785817940045, -24.2
Camara de deriva 2 tiene 5 colisiones.
Layer[0] : time 34.871246852893 (nsec) --- local (x,y) -144.25614381923, 6.55
Layer[1] : time 36.542450687345 (nsec) --- local (x,y) -175.67010865111, 6.94
Layer[2] : time 38.213660212294 (nsec) --- local (x,y) -207.11095730946, 7.36
Layer[3] : time 39.884862648778 (nsec) --- local (x,y) -238.51785871302, 7.79
Layer[4] : time 41.556077462969 (nsec) --- local (x,y) -269.9832192661, 8.259
Calorimetro EM tiene 4 colisiones. Total de Edep es 414.10963164764 (MeV)
Calorimetro Hadronico tiene 2 colisiones. Total de Edep es 114.56583443596 (Me
Idle> exit

Geant4 Low Energy Electromagnetic Physics Working Group


Referencias.
 http://conferences.fnal.gov/g4tutorial/
 http://geant4.web.cern.ch/geant4/UserDocumentation/
UsersGuides/ForApplicationDeveloper/html/index.html

Geant4 Low Energy Electromagnetic Physics Working Group

También podría gustarte