Import Geant4 5.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-08 16:57:27 +02:00
parent 330b82b769
commit 37fff30d2e
5733 changed files with 263867 additions and 74574 deletions
@@ -0,0 +1,255 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// $Id: FCALAnalysisManager.cc
// GEANT4 tag $Name:
//
// Author: Alex Howard (a.s.howard@ic.ac.uk)
//
// History:
// -----------
// 3 Oct 2002 Alex Howard Created
// 5 Nov 2002 Alex Howard Successfully Modified to AIDA 3.x
//
// -------------------------------------------------------------------
#ifdef G4ANALYSIS_USE
#include "FCALAnalysisManager.hh"
//#include "g4std/iomanip"
FCALAnalysisManager* FCALAnalysisManager::instance = 0;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALAnalysisManager::FCALAnalysisManager() :
af(0), tree(0), hf(0), tpf(0), pf(0)
{
// tree is created and booked inside book()
;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALAnalysisManager::~FCALAnalysisManager()
{
delete pf;
pf=0;
delete tpf;
tpf=0;
delete hf;
hf=0;
delete tree;
tree=0;
delete af;
af = 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALAnalysisManager* FCALAnalysisManager::getInstance()
{
if (instance == 0) instance = new FCALAnalysisManager;
return instance;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALAnalysisManager::book()
{
// histoManager->selectStore("FCAL.his");
G4String histogramfile = "FCAL.his";
G4cout << " Histogramfile: " << histogramfile << G4endl;
//build up the factories
af = AIDA_createAnalysisFactory();
//parameters for the TreeFactory
G4bool fileExists = false;
G4bool readOnly = false;
AIDA::ITreeFactory * tf = af->createTreeFactory();
tree = tf->create(histogramfile, "hbook", readOnly, fileExists);
G4cout << "Tree store : " << tree->storeName() << G4endl;
G4cout << " Booked Hbook File " << G4endl;
//HistoFactory and TupleFactory depend on theTree
hf = af->createHistogramFactory( *tree );
tpf = af->createTupleFactory(*tree );
// ---- primary ntuple ------
AIDA::ITuple* ntuple1 = tpf->create( "1", "Number out of World",
"float OutOfWorld,i,j" );
assert(ntuple1);
// ---- secondary ntuple ------
AIDA::ITuple* ntuple2 = tpf->create( "2", "Secondary Info",
"float Secondary,i,j");
assert(ntuple2);
// ---- tertiary ntuple ------
AIDA::ITuple* ntuple3 = tpf->create( "3", "Energy Deposits",
"float EmEdep,HadEdep" );
assert(ntuple3);
// Creating an 1-dimensional histogram in the root directory of the tree
AIDA::IHistogram1D* hOutOfWorld;
hOutOfWorld = hf->createHistogram1D("10","Number Of OutOfWorld", 100,0.,100.);
AIDA::IHistogram1D* hSecondary;
hSecondary = hf->createHistogram1D("20","Number Of Secondaries", 100,0.,100.);
AIDA::IHistogram1D* hEmEdep;
hEmEdep = hf->createHistogram1D("30","Electromagnetic Energy /MeV", 100,0.,100.);
AIDA::IHistogram1D* hHadEdep;
hHadEdep = hf->createHistogram1D("30","Hadronic Energy /MeV", 100,0.,100.);
delete tf;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALAnalysisManager::finish()
{
// Committing the transaction with the tree
G4std::cout << "Committing..." << G4std::endl;
// write all histograms to file
tree->commit();
G4std::cout << "Closing the tree..." << G4std::endl;
// close (will again commit)
tree->close();
// extra delete as objects are created in book() method rather than during
// initialisation of class
delete pf;
delete tpf;
delete hf;
delete tree;
delete af;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALAnalysisManager::NumOutOfWorld(G4double OutOfWorld, G4int i, G4int j)
{
AIDA::IHistogram1D* h1 = dynamic_cast<AIDA::IHistogram1D *> ( tree->find("10") );
h1->fill(OutOfWorld); // fill(x,y,weight)
AIDA::ITuple * ntuple = dynamic_cast<AIDA::ITuple *> ( tree->find("1") );
// Fill the ntuple
ntuple->fill( ntuple->findColumn( "OutOfWorld" ), (G4float) OutOfWorld );
ntuple->fill( ntuple->findColumn( "i" ), (G4float) i );
ntuple->fill( ntuple->findColumn( "j" ), (G4float) j );
//ntuple->fill( ntuple->findColumn( "Event" ), static_cast<float>(event_id) );
//Values of attributes are prepared; store them to the nTuple:
ntuple->addRow();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALAnalysisManager::Secondaries(G4double Secondary, G4int i, G4int j)
{
AIDA::IHistogram1D* h2 = dynamic_cast<AIDA::IHistogram1D *> ( tree->find("20") );
h2->fill(Secondary); // fill(x,y,weight)
AIDA::ITuple * ntuple = dynamic_cast<AIDA::ITuple *> ( tree->find("2") );
// Fill the ntuple
ntuple->fill( ntuple->findColumn( "Secondary" ), (G4float) Secondary );
ntuple->fill( ntuple->findColumn( "i" ), (G4float) i );
ntuple->fill( ntuple->findColumn( "j" ), (G4float) j );
//ntuple->fill( ntuple->findColumn( "Event" ), static_cast<float>(event_id) );
//Values of attributes are prepared; store them to the nTuple:
ntuple->addRow();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALAnalysisManager::Edep(G4double EmEdep, G4double HadEdep)
{
//EM:
AIDA::IHistogram1D* h3 = dynamic_cast<AIDA::IHistogram1D *> ( tree->find("30") );
h3->fill(EmEdep); // fill(x,y,weight)
//Had:
AIDA::IHistogram1D* h4 = dynamic_cast<AIDA::IHistogram1D *> ( tree->find("40") );
h4->fill(HadEdep); // fill(x,y,weight)
AIDA::ITuple * ntuple = dynamic_cast<AIDA::ITuple *> ( tree->find("3") );
// Fill the ntuple
ntuple->fill( ntuple->findColumn( "EmEdep" ), (G4float) EmEdep );
ntuple->fill( ntuple->findColumn( "HadEdep" ), (G4float) HadEdep );
//ntuple->fill( ntuple->findColumn( "Event" ), static_cast<float>(event_id) );
//Values of attributes are prepared; store them to the nTuple:
ntuple->addRow();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -0,0 +1,86 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALCalorHit.cc,v 1.2 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALCalorHit.hh"
G4Allocator<FCALCalorHit> FCALCalorHitAllocator;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALCalorHit::FCALCalorHit()
{
EdepAbs = 0.; TrackLengthAbs = 0.;
EdepGap = 0.; TrackLengthGap = 0.;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALCalorHit::~FCALCalorHit()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALCalorHit::FCALCalorHit(const FCALCalorHit& right)
{
EdepAbs = right.EdepAbs; TrackLengthAbs = right.TrackLengthAbs;
EdepGap = right.EdepGap; TrackLengthGap = right.TrackLengthGap;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
const FCALCalorHit& FCALCalorHit::operator=(const FCALCalorHit& right)
{
EdepAbs = right.EdepAbs; TrackLengthAbs = right.TrackLengthAbs;
EdepGap = right.EdepGap; TrackLengthGap = right.TrackLengthGap;
return *this;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
int FCALCalorHit::operator==(const FCALCalorHit& right) const
{
return 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALCalorHit::Draw()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALCalorHit::Print()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,246 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// Author: Mathieu Fontaine Rachid Mazini
// fontaine@lps.umontreal.ca Rachid.Mazini@cern.ch
// Language: C++
// Tested on : g++
// Prerequisites: None
// Purpose: Source file defining the differents volumes
// in the cryostat
// Developped: 10-March-2000 M.F.
//
//-----------------------------------------------------------------------------
#include "FCALCryostatVolumes.hh"
#include "FCALMaterialConsultant.hh"
#include "FCALEMModule.hh"
#include "FCALHadModule.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4Trd.hh"
#include "G4LogicalVolume.hh"
#include "G4VPhysicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4SubtractionSolid.hh"
#include "G4ThreeVector.hh"
#include "G4RotationMatrix.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
FCALCryostatVolumes::FCALCryostatVolumes() {
#include "FCALCryostatVolumesParameters.icc"
};
FCALCryostatVolumes::~FCALCryostatVolumes() {;};
G4LogicalVolume * FCALCryostatVolumes::Construct()
{
//-----------------------------
// construction of materials
//-----------------------------
FCALMaterialConsultant * FCALMaterials = new FCALMaterialConsultant();
FCALMaterials->construct();
//-----------------------------------------
G4VisAttributes * ColorOfIron = new G4VisAttributes(G4Colour(0.3,0.3,0.3));
G4VisAttributes * ColorOfLead = new G4VisAttributes(G4Colour(0.5,0.5,0.5));
G4VisAttributes * ColorOfAir = new G4VisAttributes(G4Colour(1.,1.,1.));
G4VisAttributes * ColorOfLarg = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0));
//-----------------------------
// Cryostat
//-----------------------------
G4Tubs * SolidCryostat =
new G4Tubs("CryostatSolid", CryostatRMin, CryostatRMax, CryostatLength,
StartingPhi, DPhi);
G4LogicalVolume * LogicalCryostat =
new G4LogicalVolume(SolidCryostat,FCALMaterials->Material("Iron"),
"CryostatLogical");
// LogicalCryostat->SetVisAttributes(ColorOfIron);
LogicalCryostat->SetVisAttributes(G4VisAttributes::Invisible);
//------------------------------
// Insulation
//------------------------------
G4Tubs * SolidInsulation =
new G4Tubs("InsulationSolid", InsulationRMin, InsulationRMax,
InsulationLength, StartingPhi, DPhi);
G4LogicalVolume * LogicalInsulation =
new G4LogicalVolume(SolidInsulation, FCALMaterials->Material("Air"),
"InsulationLogical");
G4VPhysicalVolume * PhysicalInsulation =
new G4PVPlacement(0, 0, LogicalInsulation, "InsulationPhysical",
LogicalCryostat, 0, 0);
LogicalInsulation->SetVisAttributes(ColorOfAir);
// LogicalInsulation->SetVisAttributes(G4VisAttributes::Invisible);
//-------------------------------------
// Air to replace Iron inside Cryostat
//-------------------------------------
/*
G4Tubs * SolidAirCryostat =
new G4Tubs("AirCryostatSolid", CryostatRMin, LArgRMax, CryostatLength,
StartingPhi, DPhi);
G4LogicalVolume * LogicalAirCryostat =
new G4LogicalVolume(SolidAirCryostat, FCALMaterials->Material("Air"),
"AirCryostatLogical");
G4VPhysicalVolume * PhysicalAirCryostat =
new G4PVPlacement(0, 0, LogicalAirCryostat, "AirCryostatPhysical",
LogicalCryostat, 0, 0);
LogicalAirCryostat->SetVisAttributes(ColorOfAir);
// LogicalAirCryostat->SetVisAttributes(G4VisAttributes::Invisible);
*/
//--------------------
// Liquid Argon
//--------------------
G4Tubs * SolidLArg =
new G4Tubs("LArgSolid", LArgRMin, LArgRMax, LArgLength,StartingPhi,DPhi);
G4LogicalVolume * LogicalLArg =
new G4LogicalVolume(SolidLArg, FCALMaterials->Material("LiquidArgon"),
"LArgLogical");
G4VPhysicalVolume * PhysicalLArg =
new G4PVPlacement(0,G4ThreeVector(LArgPosX, LArgPosY, LArgPosZ),
LogicalLArg, "LArgPhysical", LogicalCryostat, 0,0);
// LogicalLArg->SetVisAttributes(ColorOfLarg);
LogicalLArg->SetVisAttributes(G4VisAttributes::Invisible);
//-------------------
// Front Excluder
//-------------------
G4Box * SolidFrontExcluder =
new G4Box("FrontExcluderSolid", FrontExcluderSizeX, FrontExcluderSizeY,
FrontExcluderSizeZ);
G4LogicalVolume * LogicalFrontExcluder =
new G4LogicalVolume(SolidFrontExcluder, FCALMaterials->Material("Air")
, "FrontExcluderLogical");
G4VPhysicalVolume * PhysicalFrontExcluder =
new G4PVPlacement(0,G4ThreeVector(FrontExcluderPosX, FrontExcluderPosY,
FrontExcluderPosZ), "FrontExcluderPhysical",
LogicalFrontExcluder, PhysicalLArg, 0,0);
LogicalFrontExcluder->SetVisAttributes(ColorOfLead);
// LogicalFrontExcluder->SetVisAttributes(G4VisAttributes::Invisible);
//--------------------
// Back Excluder
//--------------------
G4Trd * SolidBackExcluder =
new G4Trd("BackExcluderSolid", BackExcluderSize1X, BackExcluderSize2X,
BackExcluderSize1Y, BackExcluderSize2Y, BackExcluderSizeZ);
G4LogicalVolume * LogicalBackExcluder =
new G4LogicalVolume(SolidBackExcluder, FCALMaterials->Material("Air"),
"BackExcluderLogical");
G4RotationMatrix * BackExcluderRotationMatrix = new G4RotationMatrix();
BackExcluderRotationMatrix->rotateX(BackExcluderRotX);
G4VPhysicalVolume * PhysicalBackExcluder =
new G4PVPlacement(BackExcluderRotationMatrix,
G4ThreeVector(BackExcluderPosX, BackExcluderPosY,
BackExcluderPosZ), "BackExcluder", LogicalBackExcluder,
PhysicalLArg, 0,0);
LogicalBackExcluder->SetVisAttributes(ColorOfLead);
// LogicalBackExcluder->SetVisAttributes(G4VisAttributes::Invisible);
//------------------------
// fcal envelope
//------------------------
G4Tubs * SolidFCALEnvelope =
new G4Tubs("FCALEnvelopeSolid", FCALEnvelopeRMin, FCALEnvelopeRMax,
FCALEnvelopeLength, FCALEnvelopeStartPhi, FCALEnvelopeDPhi);
G4LogicalVolume * LogicalFCALEnvelope =
new G4LogicalVolume(SolidFCALEnvelope, FCALMaterials->Material("LiquidArgon"),
"FCALEnvelopeLogical");
G4RotationMatrix * FCALRotationMatrix = new G4RotationMatrix();
FCALRotationMatrix->rotateX(FCALEnvelopeRotX);
// FCALRotationMatrix->rotateY(FCALEnvelopeRotY);
G4VPhysicalVolume * PhysicalFCALEnvelopp =
new G4PVPlacement(FCALRotationMatrix,
G4ThreeVector(FCALEnvelopePosX,FCALEnvelopePosY,FCALEnvelopePosZ)
, LogicalFCALEnvelope, "FCALEnvelopePhysical", LogicalLArg, 0,0);
//LogicalFCALEnvelope->SetVisAttributes(ColorOfIron);
LogicalFCALEnvelope->SetVisAttributes(G4VisAttributes::Invisible);
//-----------------------------
// FCAL electromagnetic Module
//-----------------------------
EmModule = new FCALEMModule();
G4LogicalVolume * LogicalFCALEmModule = EmModule->Construct();
G4RotationMatrix * EmModuleRot = new G4RotationMatrix();
EmModuleRot->rotateZ(ModuleRotZ);
G4VPhysicalVolume * PhysicalFCALEmModule =
new G4PVPlacement(EmModuleRot,
G4ThreeVector(FCALEmModulePosX,FCALEmModulePosY,FCALEmModulePosZ),
LogicalFCALEmModule,"FCALEmModulePhysical",LogicalFCALEnvelope,0,0);
//-----------------------------
// hadronic fcal
//----------------------------
HadModule = new FCALHadModule();
G4LogicalVolume * LogicalFCALHadModule = HadModule->Construct();
G4RotationMatrix * HadModuleRot = new G4RotationMatrix();
HadModuleRot->rotateZ(ModuleRotZ);
G4VPhysicalVolume * PhysicalFCALHadModule =
new G4PVPlacement(HadModuleRot,
G4ThreeVector(FCALHadModulePosX,FCALHadModulePosY,FCALHadModulePosZ),
LogicalFCALHadModule, "FCALHadModulePhysical",LogicalFCALEnvelope,0,0);
//-------------------------
// Returning the mother
//-------------------------
return LogicalCryostat;
};
@@ -0,0 +1,106 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
CryostatRMin = 0.0*cm;
CryostatRMax = 135.0*cm;
CryostatLength = 147.5*cm;
StartingPhi = 0.;
DPhi = 2*pi;
//---------------------
// Insulation
//---------------------
InsulationRMin = 127.75*cm;
InsulationRMax = 134.75*cm;
InsulationLength = 147.5*cm;
//---------------------
// Inactive LArg
//---------------------
LArgRMin = 0.0;
LArgRMax = 127.45*cm;
LArgLength = 97.5*cm;
LArgPosX = 0.0;
LArgPosY = 0.0;
LArgPosZ = -50.*cm;
//----------------------
// Front Excluder
//----------------------
FrontExcluderSizeX = 31.926*cm;
FrontExcluderSizeY = 17.218*cm;
FrontExcluderSizeZ = 31.926*cm;
FrontExcluderPosX = 0.;
FrontExcluderPosY = -106.168*cm;
FrontExcluderPosZ = 0.;
//----------------------
// Back Excluder
//----------------------
BackExcluderSize1X = 39.53*cm;
BackExcluderSize2X = 52.29*cm;
BackExcluderSize1Y = 25.56*cm;
BackExcluderSize2Y = 51.84*cm;
BackExcluderSizeZ = 52.325*cm;
BackExcluderPosX = 0.;
BackExcluderPosY = 63.904*cm;
BackExcluderPosZ = 0.;
BackExcluderRotX = 90.0*deg;
//------------------------
// FCAL Enveloppe
//------------------------
FCALEnvelopeRMin = 0.0*cm;
FCALEnvelopeRMax = 45.15*cm;
FCALEnvelopeLength = 45.975*cm;
FCALEnvelopeStartPhi = pi/4;
FCALEnvelopeDPhi = pi/2 + pi/180. ;
FCALEnvelopePosX = 0.0*cm;
FCALEnvelopePosY = -38.156*cm;
FCALEnvelopePosZ = -25.341*cm;
FCALEnvelopeRotX = 2.8291*deg-pi/2;
FCALEnvelopeRotY = 0.*deg;
//-----------------------------
// FCAL electromagnetic Module
//-----------------------------
FCALEmModulePosX = 0.0*cm;
FCALEmModulePosY = 0.0*cm;
FCALEmModulePosZ = 23.675*cm;
ModuleRotZ = -45*deg;
//-----------------------------
// FCAL Hadronic Module
//-----------------------------
FCALHadModulePosX = 0.;
FCALHadModulePosY = 0.;
FCALHadModulePosZ = -23.675*cm;
@@ -0,0 +1,88 @@
//---------------------
// Cryostat
//---------------------
CryostatRMin = 0.0*cm;
CryostatRMax = 135.0*cm;
CryostatLenght = 147.5*cm;
StartingPhi = 0.;
DPhi = 2*pi;
//---------------------
// Insulation
//---------------------
InsulationRMin = 127.75*cm;
InsulationRMax = 134.75*cm;
InsulationLenght = 147.5*cm;
//---------------------
// Inactive LArg
//---------------------
LArgRMin = 0.0;
LArgRMax = 127.45*cm;
LArgLenght = 97.5*cm;
LArgPosX = 0.0;
LArgPosY = 0.0;
LArgPosZ = -50.*cm;
//----------------------
// Front Excluder
//----------------------
FrontExcluderSizeX = 31.926*cm;
FrontExcluderSizeY = 17.218*cm;
FrontExcluderSizeZ = 31.926*cm;
FrontExcluderPosX = 0.;
FrontExcluderPosY = -106.168*cm;
FrontExcluderPosZ = 0.;
//----------------------
// Back Excluder
//----------------------
BackExcluderSize1X = 39.53*cm;
BackExcluderSize2X = 52.29*cm;
BackExcluderSize1Y = 25.56*cm;
BackExcluderSize2Y = 51.84*cm;
BackExcluderSizeZ = 52.325*cm;
BackExcluderPosX = 0.;
BackExcluderPosY = 63.904*cm;
BackExcluderPosZ = 0.;
BackExcluderRotX = 90.0*deg;
//------------------------
// FCAL Enveloppe
//------------------------
FCALEnvelopeRMin = 0.0*cm;
FCALEnvelopeRMax = 45.15*cm;
FCALEnvelopeLenght = 45.975*cm;
FCALEnvelopeStartPhi = pi/4;
FCALEnvelopeDPhi = pi/2 + pi/180. ;
FCALEnvelopePosX = 0.0*cm;
FCALEnvelopePosY = -38.156*cm;
FCALEnvelopePosZ = -25.341*cm;
FCALEnvelopeRotX = 2.8291*deg-pi/2;
FCALEnvelopeRotY = 0.*deg;
//-----------------------------
// FCAL electromagnetic Module
//-----------------------------
FCALEmModulePosX = 0.0*cm;
FCALEmModulePosY = 0.0*cm;
FCALEmModulePosZ = 23.675*cm;
ModuleRotZ = -45*deg;
//-----------------------------
// FCAL Hadronic Module
//-----------------------------
FCALHadModulePosX = 0.;
FCALHadModulePosY = 0.;
FCALHadModulePosZ = -23.675*cm;
@@ -0,0 +1,198 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// Author: Rachid Mazini
// Rachid.Mazini@cern.ch
// Language: C++
// Tested on : g++ (egcs.2.1.1, RH6.1)
// Prerequisites: None
// Purpose: Source file defining the geometry of EMModule 0 of the
// FCAL.
// Developped: 10-March-2000 R.M.
//
//
//-----------------------------------------------------------------------------
#include "FCALEMModule.hh"
#include "FCALMaterialConsultant.hh"
#include "G4SDManager.hh"
#include "FCALEMModuleSD.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4LogicalVolume.hh"
#include "G4VPhysicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4SubtractionSolid.hh"
#include "G4ThreeVector.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "fstream.h"
#include "stdlib.h"
FCALEMModule::FCALEMModule() {
F1LArGapID = new G4int[2400];
F1LArIX = new G4int[2400];
F1LArJY = new G4int[2400];
F1LArITile = new G4int[2400];
F1LArGapPosX = new G4double[2400];
F1LArGapPosY = new G4double[2400];
};
FCALEMModule::~FCALEMModule(){
delete [] F1LArGapID;
delete [] F1LArGapPosX;
delete [] F1LArGapPosY;
delete [] F1LArIX;
delete [] F1LArJY;
delete [] F1LArITile;
};
void FCALEMModule::InitializeGeometry() {
#include "FCALEMModuleParameters.icc"
ifstream File
("geom_data/FCal1Electrodes.dat");
if(!File) G4cerr << "Failed to open file FCal1Electrodes data file " << endl;
File.seekg(0);
NF1LarGap = 0;
while(!(File.eof())) {
NF1LarGap++;
File >> F1LArGapID[NF1LarGap] >> F1LArGapPosX[NF1LarGap] >> F1LArGapPosY[NF1LarGap]
>> F1LArIX[NF1LarGap] >> F1LArJY[NF1LarGap] >> F1LArITile[NF1LarGap];
};
G4cout << "********" << " Number of Rods in FCAL1 : " << NF1LarGap-1 << endl;;
};
G4LogicalVolume * FCALEMModule::Construct()
{
//-----------------------------
// construction of materials
//-----------------------------
FCALMaterialConsultant * FCALMaterials = new FCALMaterialConsultant();
FCALMaterials->construct();
G4VisAttributes * ColorOfEMModule = new G4VisAttributes(G4Colour(1.,0.,0.5));
G4VisAttributes * ColorOfLArg = new G4VisAttributes(G4Colour(0.,0.,1.));
//----------------------------
// Read Parameters
//----------------------------
InitializeGeometry();
//-----------------------------------------
// Logical to be returned (FCAL EM module)
//-----------------------------------------
G4Tubs * SolidEmModule =
new G4Tubs("EmModuleSold", EmModuleRMin, EmModuleRMax, EmModuleLength,
EmModuleStartPhi,EmModuleDPhi);
G4LogicalVolume * LogicalEmModule =
new G4LogicalVolume(SolidEmModule, FCALMaterials->Material("Copper"),
"EmModuleLogical");
LogicalEmModule->SetSmartless(FCALEmSmart);
LogicalEmModule->SetVisAttributes(ColorOfEMModule);
// LogicalEmModule->SetVisAttributes(G4VisAttributes::Invisible);
//---------------------
// FCAL Cable Troff
//---------------------
G4Tubs * SolidF1CableTroff =
new G4Tubs("F1CableTroffSolid", F1CableTroffRMin, F1CableTroffRMax,
F1CableTroffLength, F1CableTroffStartPhi, F1CableTroffDPhi);
G4LogicalVolume * LogicalF1CableTroff =
new G4LogicalVolume(SolidF1CableTroff, FCALMaterials->Material("FCAL1CuArKap"),
"F1CableTroffLogical");
G4ThreeVector F1CableTroffTrans(0.,0.,0.);
G4RotationMatrix F1CableTroffRot;
for(G4int i=0 ; i < NCableTroff ; i++)
{
G4VPhysicalVolume * PhysicalF1CableTroff =
new G4PVPlacement(G4Transform3D(F1CableTroffRot,F1CableTroffTrans),
LogicalF1CableTroff,"F1CableTroffPhysical",
LogicalEmModule,0,i+1);
F1CableTroffRot.rotateZ(F1CableTroffRotZ);
}
LogicalF1CableTroff->SetVisAttributes(ColorOfEMModule);
// LogicalF1CableTroff->SetVisAttributes(G4VisAttributes::Invisible);
//----------------------
// LArg gaps
//----------------------
G4Tubs * SolidF1LArGap =
new G4Tubs("F1LArGapSolid",F1LArGapRmin, F1LArGapRmax, F1LArGapLength,
F1LArGapStartPhi,F1LArGapDPhi);
G4LogicalVolume * LogicalF1LArGap =
new G4LogicalVolume(SolidF1LArGap, FCALMaterials->Material("LiquidArgon"),
"LArg Gap");
for(i=1; i < NF1LarGap; i++){
G4VPhysicalVolume * PhysicalF1LArGap =
new G4PVPlacement(0,G4ThreeVector(F1LArGapPosX[i]*cm,F1LArGapPosY[i]*cm,0.*cm),
LogicalF1LArGap,"F1LArGapPhysical", LogicalEmModule, 0, i);
};
// LogicalF1LArGap->SetVisAttributes(ColorOfLArg);
LogicalF1LArGap->SetVisAttributes(G4VisAttributes::Invisible);
// Sensitive Volumes
G4SDManager* SDman = G4SDManager::GetSDMpointer();
if(!FcalEmModuleSD)
{
FcalEmModuleSD = new FCALEMModuleSD("FCALTB/EmModuleSD");
SDman->AddNewDetector(FcalEmModuleSD);
}
LogicalF1LArGap->SetSensitiveDetector(FcalEmModuleSD);
return LogicalEmModule;
};
G4int FCALEMModule::GetF1TileID(G4int GapID)
{ return F1LArITile[GapID]; }
G4double FCALEMModule::GetF1LArGapPosX(G4int GapID)
{ return F1LArGapPosX[GapID]; }
@@ -0,0 +1,53 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
EmModuleRMin = 0.0*cm;
EmModuleRMax = 45.15*cm;
EmModuleLength = 22.3*cm;
EmModuleStartPhi = 0.0*deg;
EmModuleDPhi = 90.0*deg;
FCALEmSmart = 0.2;
//---------------------
// FCAL Cable Troff
//---------------------
NCableTroff = 4;
F1CableTroffRMin = 44.16*cm;
F1CableTroffRMax = 45.15*cm;
F1CableTroffLength = 22.3*cm;
F1CableTroffStartPhi = 8.438*deg;
F1CableTroffDPhi = 5.624*deg;
F1CableTroffRotZ = 22.5*deg;
//-----------------------
// Active LArg Gap
//-----------------------
F1LArGapRmin = 0.236*cm;
F1LArGapRmax = 0.263*cm;
F1LArGapLength = 22.3*cm;
F1LArGapStartPhi = 0.0*deg;
F1LArGapDPhi = 2*pi;
@@ -0,0 +1,32 @@
//---------------------
// FCAL EM Module
//---------------------
EmModuleRMin = 0.0*cm;
EmModuleRMax = 45.15*cm;
EmModuleLenght = 22.3*cm;
EmModuleStartPhi = 0.0*deg;
EmModuleDPhi = 90.0*deg;
FCALEmSmart = 0.2;
//---------------------
// FCAL Cable Troff
//---------------------
NCableTroff = 4;
F1CableTroffRMin = 44.16*cm;
F1CableTroffRMax = 45.15*cm;
F1CableTroffLenght = 22.3*cm;
F1CableTroffStartPhi = 8.438*deg;
F1CableTroffDPhi = 5.624*deg;
F1CableTroffRotZ = 22.5*deg;
//-----------------------
// Active LArg Gap
//-----------------------
F1LArGapRmin = 0.236*cm;
F1LArGapRmax = 0.263*cm;
F1LArGapLenght = 22.3*cm;
F1LArGapStartPhi = 0.0*deg;
F1LArGapDPhi = 2*pi;
@@ -0,0 +1,158 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALEMModuleSD.cc,v 1.4 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALEMModuleSD.hh"
#include "FCALCalorHit.hh"
#include "FCALTestbeamSetup.hh"
#include "FCALEMModule.hh"
#include "FCALSteppingAction.hh"
#include "G4VPhysicalVolume.hh"
#include "G4Step.hh"
#include "G4Track.hh"
#include "G4VTouchable.hh"
#include "G4TouchableHistory.hh"
#include "G4SDManager.hh"
#include "G4ios.hh"
#include "iostream.h"
#include "fstream.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALEMModuleSD::FCALEMModuleSD(G4String name) : G4VSensitiveDetector(name)
{
EmModule = new FCALEMModule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALEMModuleSD::~FCALEMModuleSD()
{
delete EmModule;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALEMModuleSD::Initialize(G4HCofThisEvent*HCE)
{
if (Init_state==0)
{
EmModule->InitializeGeometry();
Init_state++;
};
for (G4int j=0 ; j<1131 ; j++) {EvisF1Tile[j] = 0.;}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4bool FCALEMModuleSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
{
G4double edep = aStep->GetTotalEnergyDeposit();
if (edep==0.) return false;
G4TouchableHistory* theTouchable
= (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
G4VPhysicalVolume* physVol = theTouchable->GetVolume();
if(strcmp(physVol->GetName(),"F1LArGapPhysical")==0){
G4int F1LArGapId = physVol->GetCopyNo();
G4int F1TileId = EmModule->GetF1TileID(F1LArGapId);
EvisF1Tile[F1TileId] = EvisF1Tile[F1TileId] + edep;
};
return true;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALEMModuleSD::EndOfEvent(G4HCofThisEvent* HCE)
{
G4int NF1Tile = 0;
G4int AddTileP[300];
G4double EvisTileP[300];
for (G4int i=1; i <= 1130; i++){
if(EvisF1Tile[i] > 0.) {
NF1Tile++;
AddTileP[NF1Tile] = i;
EvisTileP[NF1Tile] = EvisF1Tile[i];
};};
G4cout << "Number of F1 Tiles with Positive energy : " << NF1Tile << endl;
// Write in File
//--------------
G4String FileName = "EmModule_802_1mm.dat";
G4int iostemp;
if(Init_state == 1) {
iostemp = ios::out;
Init_state++;
} else {
iostemp = ios::out|ios::app; // ios::app;
};
ofstream EmDatafile(FileName, iostemp);
// EmDatafile.precision(5);
EmDatafile << NF1Tile << endl;
for (i=1; i <= NF1Tile; i++) {
EmDatafile << AddTileP[i] << " " << EvisTileP[i]/MeV << endl;
}
EmDatafile.close();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALEMModuleSD::clear()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALEMModuleSD::DrawAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALEMModuleSD::PrintAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,266 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// Name of file: FCALHadModule.cc
// Author: Mathieu Fontaine Rachid Mazini
// fontainerlps.umontreal.ca Rachid.Mazinircern.ch
// Language: C++
// Tested on : g++
// Prerequisites: None
// Purpose: Source file defining the geometry of HadModule 0 of the
// FCAL.
// Developped: 10-March-2000 M.F.
//
//-----------------------------------------------------------------------------
#include "FCALHadModule.hh"
#include "FCALMaterialConsultant.hh"
#include "FCALHadModuleSD.hh"
#include "G4SDManager.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4LogicalVolume.hh"
#include "G4VPhysicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4SubtractionSolid.hh"
#include "G4ThreeVector.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "fstream.h"
#include "G4ios.hh"
FCALHadModule::FCALHadModule() {
F2LArGapID = new G4int[2600];
F2LArIX = new G4int[2600];
F2LArJY = new G4int[2600];
F2LArITile = new G4int[2600];
F2LArGapPosX = new G4double[2600];
F2LArGapPosY = new G4double[2600];
};
FCALHadModule::~FCALHadModule() {
delete [] F2LArGapID;
delete [] F2LArGapPosX;
delete [] F2LArGapPosY;
delete [] F2LArIX;
delete [] F2LArJY;
delete [] F2LArITile;
};
void FCALHadModule::InitializeGeometry() {
#include "FCALHadModuleParameters.icc"
ifstream File
("geom_data/FCal2Electrodes.dat");
if(!File) G4cerr << "Failed to open file FCal2Electrode data file" << endl;
File.seekg(0);
NF2LarGap = 0;
while(!(File.eof())) {
NF2LarGap++;
File >> F2LArGapID[NF2LarGap] >> F2LArGapPosX[NF2LarGap] >> F2LArGapPosY[NF2LarGap]
>> F2LArIX[NF2LarGap] >> F2LArJY[NF2LarGap] >> F2LArITile[NF2LarGap];
};
G4cout << "*********" << " Number of Rods in FCAL2 : " << NF2LarGap-1 << endl;
};
G4LogicalVolume * FCALHadModule::Construct()
{
//-----------------------------
// construction of materials
//-----------------------------
FCALMaterialConsultant * FCALMaterials = new FCALMaterialConsultant();
FCALMaterials->construct();
G4VisAttributes * ColorOfTungsten = new G4VisAttributes(G4Colour(.5,.5,.5));
G4VisAttributes * ColorOfCopper =new G4VisAttributes(G4Colour(0.58,0.15,0.05));
G4VisAttributes * ColorOfLarg = new G4VisAttributes(G4Colour(0.,0.,1.));
//----------------------------
// Read Parameters
//----------------------------
InitializeGeometry();
//-----------------------------------------
// the logical to be returned (mother)
//-----------------------------------------
G4Tubs * SolidHadModule =
new G4Tubs("HadModuleSolid", HadModuleRMin, HadModuleRMax, HadModuleLength,
HadModuleStartPhi,HadModuleDPhi);
G4LogicalVolume * LogicalHadModule =
new G4LogicalVolume(SolidHadModule, FCALMaterials->Material("Copper"),
"HadModuleLogical");
LogicalHadModule->SetSmartless(FCAL2HadSmart);
LogicalHadModule->SetVisAttributes(ColorOfCopper);
// LogicalHadModule->SetVisAttributes(G4VisAttributes::Invisible);
//-----------------------------------------
// Tungsten Absorber
//-----------------------------------------
G4Tubs * SolidWAbsorber =
new G4Tubs("WAbsorberSolid", WAbsorberRMin, WAbsorberRMax, WAbsorberLength,
WAbsorberStartPhi, WAbsorberDPhi);
G4LogicalVolume * LogicalWAbsorber =
new G4LogicalVolume(SolidWAbsorber, FCALMaterials->Material("FCAL2WFeNi"),
"SolidWLogical");
G4VPhysicalVolume * PhysicalWAbsorber =
new G4PVPlacement(0, G4ThreeVector(), LogicalWAbsorber, "WAbsorberPhysical",
LogicalHadModule, 0, 0);
LogicalWAbsorber->SetVisAttributes(ColorOfTungsten);
// LogicalWAbsorber->SetVisAttributes(G4VisAttributes::Invisible);
// -----------------
// Copper Plates
//------------------
G4Tubs * SolidCuPlate =
new G4Tubs("CuPlateSolid",HadModuleRMin, HadModuleRMax, CuPlateLength,
HadModuleStartPhi, HadModuleDPhi);
G4LogicalVolume * LogicalCuPlate =
new G4LogicalVolume(SolidCuPlate, FCALMaterials->Material("Copper"), "CuPlateLogical");
G4VPhysicalVolume * PhysicalCuPlateA =
new G4PVPlacement(0, G4ThreeVector(0.,0.,CuPlateAPosZ), LogicalCuPlate,
"CuPlateAPhysical", LogicalHadModule, 0, 0);
G4VPhysicalVolume * PhysicalCuPlateB =
new G4PVPlacement(0, G4ThreeVector(0.,0.,CuPlateBPosZ), LogicalCuPlate,
"CuPlateBPhysical", LogicalHadModule, 0, 0);
LogicalCuPlate->SetVisAttributes(ColorOfCopper);
// LogicalCuPlate->SetVisAttributes(G4VisAttributes::Invisible);
//------------------------------------------
// Had Module (F2) Main and A/B Cable Troff
//------------------------------------------
G4Tubs * SolidF2TroffMain =
new G4Tubs("F2TroffMainSolid", F2TroffRmin, F2TroffRmax, F2TroffMainLength,
F2TroffStartPhi, F2TroffDphi);
G4LogicalVolume * LogicalF2TroffMain =
new G4LogicalVolume(SolidF2TroffMain, FCALMaterials->Material("FCAL2CuArKap"),
"F2TroffMainLogical");
G4Tubs * SolidF2TroffAB =
new G4Tubs("F2TroffABSolid", F2TroffRmin, F2TroffRmax, F2TroffABLength,
F2TroffStartPhi, F2TroffDphi);
G4LogicalVolume * LogicalF2TroffAB =
new G4LogicalVolume(SolidF2TroffAB, FCALMaterials->Material("FCAL2CuArKap"),
"F2TroffABLogical");
G4ThreeVector F2TroffMainTrans(0.,0.,0.);
G4ThreeVector F2TroffABTrans(0.,0.,0.);
G4RotationMatrix F2TroffRot;
for(G4int i=0 ; i < NCableTroff ; i++)
{
G4VPhysicalVolume * PhysicalF2TroffMain =
new G4PVPlacement(G4Transform3D(F2TroffRot,F2TroffMainTrans), LogicalF2TroffMain,
"F2TroffMainPhysical", LogicalWAbsorber,0,i+1);
G4VPhysicalVolume * PhysicalF2TroffAB =
new G4PVPlacement(G4Transform3D(F2TroffRot,F2TroffABTrans), LogicalF2TroffAB,
"F2TroffAPhysical", LogicalCuPlate, 0, i+1);
F2TroffRot.rotateZ(F2TroffRotZ);
}
LogicalF2TroffMain->SetVisAttributes(ColorOfCopper);
// LogicalF2TroffMain->SetVisAttributes(G4VisAttributes::Invisible);
LogicalF2TroffAB->SetVisAttributes(ColorOfCopper);
// LogicalF2TroffAB->SetVisAttributes(G4VisAttributes::Invisible);
//----------------------
// LArg Gaps + F2 Rod
//----------------------
G4Tubs * SolidF2LArGap =
new G4Tubs("F2LArGapSolid", F2LArGapRmin, F2LArGapRmax, F2LArGapLength,
F2LArGapStartPhi, F2LArGapDphi);
G4LogicalVolume * LogicalF2LArGap =
new G4LogicalVolume(SolidF2LArGap, FCALMaterials->Material("LiquidArgon"),
"F2LArGapLogical");
LogicalF2LArGap->SetVisAttributes(ColorOfLarg);
// LogicalF2LArGap->SetVisAttributes(G4VisAttributes::Invisible);
G4Tubs * SolidF2Rod =
new G4Tubs("F2RodSolid", F2RodRmin, F2RodRmax, F2RodLength, F2RodStartPhi, F2RodDphi);
G4LogicalVolume * LogicalF2Rod =
new G4LogicalVolume(SolidF2Rod, FCALMaterials->Material("Tungsten"),"F2RodLogical");
G4VPhysicalVolume * PhysicalF2Rod =
new G4PVPlacement(0,G4ThreeVector(),LogicalF2Rod,"F2RodPhysical",LogicalF2LArGap,0, 0);
LogicalF2Rod->SetVisAttributes(ColorOfTungsten);
// LogicalF2Rod->SetVisAttributes(G4VisAttributes::Invisible);
//---------------------------------
// Electrod (Rod + LArg) placement
//---------------------------------
for(i=1; i < NF2LarGap; i++){
G4VPhysicalVolume * PhysicalF2LArGap =
new G4PVPlacement(0,G4ThreeVector(F2LArGapPosX[i]*cm,F2LArGapPosY[i]*cm,0.*cm),
LogicalF2LArGap,"F2LArGapPhysical",
LogicalHadModule, 0, i);
};
LogicalF2LArGap->SetVisAttributes(ColorOfLarg);
// LogicalF2LArGap->SetVisAttributes(G4VisAttributes::Invisible);
// Sensitive Volumes
G4SDManager* SDman = G4SDManager::GetSDMpointer();
if(!FcalHadModuleSD)
{
FcalHadModuleSD = new FCALHadModuleSD("FCALTB/HadModuleSD");
SDman->AddNewDetector(FcalHadModuleSD);
}
LogicalF2LArGap->SetSensitiveDetector(FcalHadModuleSD);
return LogicalHadModule;
};
G4int FCALHadModule::GetF2TileID(G4int TileID)
{ return F2LArITile[TileID];
};
@@ -0,0 +1,95 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
HadModuleRMin = 7.923*cm;
HadModuleRMax = 45.15*cm;
HadModuleLength = 22.3*cm;
HadModuleStartPhi = 0.;
HadModuleDPhi = 90.*deg;
FCAL2HadSmart = 0.2;
//---------------------
// Tungsten Absorber
//---------------------
WAbsorberRMin = 7.923*cm;
WAbsorberRMax = 45.15*cm;
WAbsorberLength = 19.8*cm;
WAbsorberStartPhi = 0.;
WAbsorberDPhi = 90.*deg;
//---------------------
// Copper Plates
//---------------------
CuPlateLength = 1.25*cm;
CuPlateAPosZ = 21.05*cm;
CuPlateBPosZ = -21.05*cm;
//-------------------------------
// Had Module (F2) Cable Troff
//-------------------------------
NCableTroff = 4;
F2TroffRmin = 44.16*cm;
F2TroffRmax = 45.15*cm;
F2TroffMainLength = 19.8*cm; // 22.3*cm;
F2TroffABLength = 1.25*cm;
F2TroffStartPhi = 8.438*deg;
F2TroffDphi = 5.624*deg;
F2TroffRotZ = 22.5*deg;
F2TroffABPosZ = 21.05*cm;
//----------------------
// LArg Gaps + F2 Rod
//----------------------
F2LArGapRmin = 0.0*cm;
F2LArGapRmax = 0.284*cm;
F2LArGapLength = 22.3*cm;
F2LArGapStartPhi = 0.0*deg;
F2LArGapDphi = 2*pi;
F2RodRmin = 0.0*cm;
F2RodRmax = 0.247*cm;
F2RodLength = 22.3*cm;
F2RodStartPhi = 0.0*deg;
F2RodDphi = 2*pi;
/*
LArgGapRMin = 2.375*mm;
LArgGapRMax = 2.625*mm;
LArgGapDZ = 223.*mm;
LArgGapSPhi = 0.;
LArgGapDPhi = 2*pi;
CopperRodRMin = 0.;
CopperRodRMax = 2.375*mm;
CopperRodDZ = 223.*mm;
CopperRodSPhi = 0.;
CopperRodDPhi = 2*pi;
*/
@@ -0,0 +1,79 @@
//---------------------
// FCAL Had Module
//---------------------
HadModuleRMin = 7.923*cm;
HadModuleRMax = 45.15*cm;
HadModuleLenght = 22.3*cm;
HadModuleStartPhi = 0.;
HadModuleDPhi = 90.*deg;
FCAL2HadSmart = 0.2;
//---------------------
// Tungsten Absorber
//---------------------
WAbsorberRMin = 7.923*cm;
WAbsorberRMax = 45.15*cm;
WAbsorberLenght = 19.8*cm;
WAbsorberStartPhi = 0.;
WAbsorberDPhi = 90.*deg;
//---------------------
// Copper Plates
//---------------------
CuPlateLenght = 1.25*cm;
CuPlateAPosZ = 21.05*cm;
CuPlateBPosZ = -21.05*cm;
//-------------------------------
// Had Module (F2) Cable Troff
//-------------------------------
NCableTroff = 4;
F2TroffRmin = 44.16*cm;
F2TroffRmax = 45.15*cm;
F2TroffMainLenght = 19.8*cm; // 22.3*cm;
F2TroffABLenght = 1.25*cm;
F2TroffStartPhi = 8.438*deg;
F2TroffDphi = 5.624*deg;
F2TroffRotZ = 22.5*deg;
F2TroffABPosZ = 21.05*cm;
//----------------------
// LArg Gaps + F2 Rod
//----------------------
F2LArGapRmin = 0.0*cm;
F2LArGapRmax = 0.284*cm;
F2LArGapLenght = 22.3*cm;
F2LArGapStartPhi = 0.0*deg;
F2LArGapDphi = 2*pi;
F2RodRmin = 0.0*cm;
F2RodRmax = 0.247*cm;
F2RodLenght = 22.3*cm;
F2RodStartPhi = 0.0*deg;
F2RodDphi = 2*pi;
/*
LArgGapRMin = 2.375*mm;
LArgGapRMax = 2.625*mm;
LArgGapDZ = 223.*mm;
LArgGapSPhi = 0.;
LArgGapDPhi = 2*pi;
CopperRodRMin = 0.;
CopperRodRMax = 2.375*mm;
CopperRodDZ = 223.*mm;
CopperRodSPhi = 0.;
CopperRodDPhi = 2*pi;
*/
@@ -0,0 +1,156 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALHadModuleSD.cc,v 1.3 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALHadModuleSD.hh"
#include "FCALCalorHit.hh"
#include "FCALTestbeamSetup.hh"
#include "FCALHadModule.hh"
#include "G4VPhysicalVolume.hh"
#include "G4Step.hh"
#include "G4Track.hh"
#include "G4VTouchable.hh"
#include "G4TouchableHistory.hh"
#include "G4SDManager.hh"
#include "G4ios.hh"
#include "iostream.h"
#include "fstream.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALHadModuleSD::FCALHadModuleSD(G4String name) : G4VSensitiveDetector(name)
{
HadModule = new FCALHadModule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALHadModuleSD::~FCALHadModuleSD()
{
delete HadModule;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALHadModuleSD::Initialize(G4HCofThisEvent*HCE)
{
if(InitF2 == 0) {
HadModule->InitializeGeometry();
InitF2++;
}
for (G4int j=0; j<2330; j++) { EvisF2Tile[j]=0.;}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4bool FCALHadModuleSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
{
G4double edep = aStep->GetTotalEnergyDeposit();
if (edep==0.) return false;
G4TouchableHistory* theTouchable
= (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
G4VPhysicalVolume* physVol = theTouchable->GetVolume();
if(strcmp(physVol->GetName(),"F2LArGapPhysical")==0){
G4int F2LArGapId = physVol->GetCopyNo();
G4int F2TileId = HadModule->GetF2TileID(F2LArGapId);
EvisF2Tile[F2TileId] = EvisF2Tile[F2TileId] + edep;
};
return true;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALHadModuleSD::EndOfEvent(G4HCofThisEvent* HCE)
{
G4int NF2Tile = 0;
G4int AddTileP[300];
G4double EvisTileP[300];
for (G4int i=0; i<2330; i++){
if(EvisF2Tile[i] > 0.) {
NF2Tile++;
AddTileP[NF2Tile] = i;
EvisTileP[NF2Tile] = EvisF2Tile[i];
};};
G4cout << "Number of F2 tiles with Positive energy : " << NF2Tile << endl;
// Write data in File
//-------------------
G4String FileName = "HadModule_802_1mm.dat";
G4int iostemp;
if(InitF2 == 1) {
iostemp = ios::out;
InitF2++;
} else {
iostemp = ios::out|ios::app; // ios::app;
};
ofstream HadDatafile(FileName, iostemp);
// EmDatafile.precision(5);
HadDatafile << NF2Tile << endl;
for (i=1; i <= NF2Tile; i++) {
HadDatafile << AddTileP[i] << " " << EvisTileP[i]/MeV << endl;
}
HadDatafile.close();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALHadModuleSD::clear()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALHadModuleSD::DrawAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALHadModuleSD::PrintAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,283 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// Author: Mathieu Fontaine, Rachid Mazini
// fontaine@lps.umontreal.ca Rachid.Mazini@cern.ch
//
// Language: C++
// Tested on: g++
// Prerequisites: None
// Purpose: This is the place, where all the materials get defined.
// Instead of coding those materials locally, where they
// are needed, it is much easier to maintain, if we keep
// all materials for a detector component in one place.
// Everybody who needs some of these parameters, can
// query the FCALMaterialConsultant.
// --> This class is made a singleton by making the
// constructor private and hiding it behind the
// construct() method, which creates a first instance
// if it does not exist. This is to prevent multiple
// copies of this consultant with potentially different
// contents (once the data is loaded from files and/or
// can be changed by user interaction).
// --> The method Material is provided to access to the data
// stored, a routine ShowMeAllYouKnow can be queried to
// dump the entire knowledge of this consultant.
//
// * Ideas on how the theFCALMaterialConsultant pointer
// is made static are borrowed from G4VisManager.
//
//----------------------------------------------------------------------------------
#include "FCALMaterialConsultant.hh"
#include "PhysicalConstants.h"
#include "globals.hh"
FCALMaterialConsultant *FCALMaterialConsultant::theFCALMaterialConsultant = NULL;
FCALMaterialConsultant::FCALMaterialConsultant()
{
G4double a,z,density,fractionmass;
G4String name,symbol;
G4int nel,natoms;
//------------
// elements
//------------
a=1.01*g/mole;
elH=new G4Element(name="Hydrogen",symbol="H2",z=1.,a);
a=2.01*g/mole;
elD=new G4Element(name="Deuterium",symbol="D",z=1.,a);
a=4.*g/mole;
elHe=new G4Element(name="Helium",symbol="He",z=2.,a);
a=6.94*g/mole;
elLi=new G4Element(name="Lithium",symbol="Li",z=3.,a);
a=9.01*g/mole;
elBe=new G4Element(name="Berillium",symbol="Be",z=4.,a);
a=12.01*g/mole;
elC=new G4Element(name="Carbon",symbol="C",z=6.,a);
a=14.01*g/mole;
elN=new G4Element(name="Nitrogen",symbol="N2",z=7.,a);
a=16.*g/mole;
elO=new G4Element(name="Oxygen",symbol="O2",z=8.,a);
a=20.18*g/mole;
elNe=new G4Element(name="Neon",symbol="Ne",z=10.,a);
a=22.99*g/mole;
elNa=new G4Element(name="Sodium",symbol="Na",z=11.,a);
a=26.98*g/mole;
elAl=new G4Element(name="Aluminium",symbol="Al",z=13.,a);
a=28.085*g/mole;
elSi=new G4Element(name="Silicon",symbol="Si",z=14.,a);
a=40.08*g/mole;
elCa=new G4Element(name="Calcium",symbol="Ca",z=20.,a);
a=55.850*g/mole;
elFe=new G4Element(name="Iron",symbol="Fe",z=26.,a);
a=63.54*g/mole;
elCu=new G4Element(name="Copper",symbol="Cu",z=29.,a);
a=183.85*g/mole;
elW=new G4Element(name="Tungstenm",symbol="W",z=74.,a);
a=207.19*g/mole;
elPb=new G4Element(name="Lead",symbol="Pb",z=82.,a);
a=238.03*g/mole;
elU=new G4Element(name="Uranium",symbol="U",z=92.,a);
//-------------------
// simple materials
//-------------------
density = 2.7*g/cm3;
a = 26.98*g/mole;
Aluminium = new G4Material(name="Aluminium",z=13.,a,density);
density = 7.87*g/cm3;
a = 55.85*g/mole;
Iron = new G4Material(name="Iron",z=26.,a,density);
density = 8.96*g/cm3;
a = 63.54*g/mole;
Copper = new G4Material(name="Copper",z=29.,a,density);
density = 19.3*g/cm3;
a = 183.85*g/mole;
Tungsten = new G4Material(name="Tungsten",z=74.,a,density);
density = 11.35*g/cm3;
a = 207.19*g/mole;
Lead = new G4Material(name="Lead",z=82.,a,density);
density = 1.4*g/cm3;
a = 39.95*g/mole;
LiquidArgon = new G4Material(name="LiquidArgon",z=18.,a,density);
density = 0.002*g/cm3;
a = 39.95*g/mole;
ArgonGas = new G4Material(name="ArgonGas",z=18.,a,density);
density = 8.96*g/cm3;
a = 58.69*g/mole;
Nickel = new G4Material(name="Nickel",z=28.,a,density);
//------------------
// mixtures
//------------------
density = 1.290*mg/cm3;
Air = new G4Material(name="Air",density, nel=2);
Air->AddElement(elN, 0.7);
Air->AddElement(elO, 0.3);
RhoaCell = Air;
density = 1.e-5*g/cm3;
G4double pressure = 2.e-2*bar;
G4double temperature = STP_Temperature; //from PhysicalConstants.h
G4Material* Vacuum = new G4Material(name="Vacuum", density, nel=1,
kStateGas,temperature,pressure);
Vacuum->AddMaterial(Air, fractionmass=1.);
density = 0.002*g/cm3;
CO2 = new G4Material(name="CO2",density,nel=2);
CO2->AddElement(elC, natoms=1);
CO2->AddElement(elO, natoms=2);
density = 1.42*g/cm3;
Kapton = new G4Material(name="Kapton",density, nel=4);
Kapton->AddElement(elH, fractionmass = 0.0273);
Kapton->AddElement(elC, fractionmass = 0.7213);
Kapton->AddElement(elN, fractionmass = 0.0765);
Kapton->AddElement(elO, fractionmass = 0.1749);
density = 1.032*g/cm3;
Polystyrene = new G4Material(name="Polystyrene",density,nel=2);
Polystyrene->AddElement(elC, natoms=8);
Polystyrene->AddElement(elH, natoms=8);
density = 5.185*g/cm3;
FCAL1CuArKap = new G4Material(name="FCAL1CuArKap",density,nel=3);
FCAL1CuArKap->AddMaterial(Copper, fractionmass = 0.864);
FCAL1CuArKap->AddMaterial(Kapton, fractionmass = 0.068);
FCAL1CuArKap->AddMaterial(LiquidArgon, fractionmass = 0.068);
density = 8.701*g/cm3;
FCAL1CuAr = new G4Material(name="FCAL1CuAr",density,nel=2);
FCAL1CuAr->AddMaterial(Copper, fractionmass = 0.994);
FCAL1CuAr->AddMaterial(LiquidArgon, fractionmass = 0.006);
density = 5.185*g/cm3;
FCAL2CuArKap = new G4Material(name="FCAL2CuArKap",density,nel=3);
FCAL2CuArKap->AddMaterial(Copper, fractionmass = 0.864);
FCAL2CuArKap->AddMaterial(Kapton, fractionmass = 0.068);
FCAL2CuArKap->AddMaterial(LiquidArgon, fractionmass = 0.068);
density = 18.6*g/cm3;
FCAL2WFeNi = new G4Material(name="FCAL2WFeNi",density,nel=3);
FCAL2WFeNi->AddMaterial(Tungsten, fractionmass = 0.97);
FCAL2WFeNi->AddMaterial(Iron, fractionmass = 0.01);
FCAL2WFeNi->AddMaterial(Nickel, fractionmass = 0.02);
density = 15.366*g/cm3;
FCAL2WFeNiCuAr = new G4Material(name="FCAL2WFeNiCuAr",density,nel=3);
FCAL2WFeNiCuAr->AddMaterial(FCAL2WFeNi, fractionmass = 0.913);
FCAL2WFeNiCuAr->AddMaterial(Copper, fractionmass = 0.077);
FCAL2WFeNiCuAr->AddMaterial(LiquidArgon, fractionmass = 0.01);
density = 0.002*g/cm3;
MWPCArCO2 = new G4Material(name="MWPCArCO2",density,nel=2);
MWPCArCO2->AddMaterial(CO2, fractionmass = 0.2);
MWPCArCO2->AddMaterial(ArgonGas, fractionmass = 0.8);
// must check recipe for concrete
density = 2.5*g/cm3;
ShieldingConcrete = new G4Material(name="ShieldingConcrete",density,nel=6);
ShieldingConcrete->AddElement(elO, fractionmass = 0.52);
ShieldingConcrete->AddElement(elSi, fractionmass = 0.325);
ShieldingConcrete->AddElement(elCa, fractionmass = 0.06);
ShieldingConcrete->AddElement(elNa, fractionmass = 0.015);
ShieldingConcrete->AddElement(elFe, fractionmass = 0.04);
ShieldingConcrete->AddElement(elAl, fractionmass = 0.04);
// must have the right composition for stainless steel
density = 8.96*g/cm3;
StainlessSteel = new G4Material(name="StainlessSteel",density,nel=1);
StainlessSteel->AddElement(elO, fractionmass = 1.);
};
FCALMaterialConsultant * FCALMaterialConsultant::construct()
{
if (theFCALMaterialConsultant == NULL) {
theFCALMaterialConsultant = new FCALMaterialConsultant();
}
return theFCALMaterialConsultant;
};
G4Material * FCALMaterialConsultant::Material(G4String what)
{
if(what == "Air") return Air;
if(what == "Vacuum") return Vacuum;
if(what == "LiquidArgon") return LiquidArgon;
if(what == "Aluminium") return Aluminium;
if(what == "Iron") return Iron;
if(what == "Copper") return Copper;
if(what == "Tungsten") return Tungsten;
if(what == "Lead") return Lead;
if(what == "CO2") return CO2;
if(what == "ArgonGas") return ArgonGas;
if(what == "ShieldingConcrete") return ShieldingConcrete;
if(what == "Polystyrene") return Polystyrene;
if(what == "StainlessSteel") return StainlessSteel;
if(what == "Nickel") return Nickel;
if(what == "FCAL1CuArKap") return FCAL1CuArKap;
if(what == "FCAL1CuAr") return FCAL1CuAr;
if(what == "FCAL2CuArKap") return FCAL2CuArKap;
if(what == "FCAL2WFeNi") return FCAL2WFeNi;
if(what == "FCAL2WFeNiCuAr") return FCAL2WFeNiCuAr;
if(what == "MWPCArCO2") return MWPCArCO2;
if(what == "RhoaCell") return RhoaCell;
};
@@ -0,0 +1,374 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALPhysicsList.cc,v 1.3 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALPhysicsList.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleWithCuts.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4ios.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALPhysicsList::FCALPhysicsList(): G4VUserPhysicsList()
{
currentDefaultCut = defaultCutValue = 1.*mm;
cutForGamma = defaultCutValue;
cutForElectron = defaultCutValue;
cutForProton = defaultCutValue;
SetVerboseLevel(1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALPhysicsList::~FCALPhysicsList()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructParticle()
{
// In this method, static member functions should be called
// for all particles which you want to use.
// This ensures that objects of these particle types will be
// created in the program.
ConstructBosons();
ConstructLeptons();
ConstructMesons();
ConstructBaryons();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructBosons()
{
// pseudo-particles
G4Geantino::GeantinoDefinition();
G4ChargedGeantino::ChargedGeantinoDefinition();
// gamma
G4Gamma::GammaDefinition();
// optical photon
G4OpticalPhoton::OpticalPhotonDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructLeptons()
{
// leptons
G4Electron::ElectronDefinition();
G4Positron::PositronDefinition();
G4MuonPlus::MuonPlusDefinition();
G4MuonMinus::MuonMinusDefinition();
G4NeutrinoE::NeutrinoEDefinition();
G4AntiNeutrinoE::AntiNeutrinoEDefinition();
G4NeutrinoMu::NeutrinoMuDefinition();
G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructMesons()
{
// mesons
G4PionPlus::PionPlusDefinition();
G4PionMinus::PionMinusDefinition();
G4PionZero::PionZeroDefinition();
G4Eta::EtaDefinition();
G4EtaPrime::EtaPrimeDefinition();
G4KaonPlus::KaonPlusDefinition();
G4KaonMinus::KaonMinusDefinition();
G4KaonZero::KaonZeroDefinition();
G4AntiKaonZero::AntiKaonZeroDefinition();
G4KaonZeroLong::KaonZeroLongDefinition();
G4KaonZeroShort::KaonZeroShortDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructBaryons()
{
// barions
G4Proton::ProtonDefinition();
G4AntiProton::AntiProtonDefinition();
G4Neutron::NeutronDefinition();
G4AntiNeutron::AntiNeutronDefinition();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructProcess()
{
AddTransportation();
ConstructEM();
ConstructGeneral();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4MultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4hIonisation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::ConstructEM()
{
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String particleName = particle->GetParticleName();
if (particleName == "gamma") {
// gamma
pmanager->AddDiscreteProcess(new G4GammaConversion());
pmanager->AddDiscreteProcess(new G4ComptonScattering());
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect());
} else if (particleName == "e-") {
//electron
G4VProcess* theeminusMultipleScattering = new G4MultipleScattering();
G4VProcess* theeminusIonisation = new G4eIonisation();
G4VProcess* theeminusBremsstrahlung = new G4eBremsstrahlung();
//
// add processes
pmanager->AddProcess(theeminusMultipleScattering);
pmanager->AddProcess(theeminusIonisation);
pmanager->AddProcess(theeminusBremsstrahlung);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(theeminusMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(theeminusIonisation, idxAlongStep,2);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(theeminusMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(theeminusIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(theeminusBremsstrahlung, idxPostStep,3);
} else if (particleName == "e+") {
//positron
G4VProcess* theeplusMultipleScattering = new G4MultipleScattering();
G4VProcess* theeplusIonisation = new G4eIonisation();
G4VProcess* theeplusBremsstrahlung = new G4eBremsstrahlung();
G4VProcess* theeplusAnnihilation = new G4eplusAnnihilation();
//
// add processes
pmanager->AddProcess(theeplusMultipleScattering);
pmanager->AddProcess(theeplusIonisation);
pmanager->AddProcess(theeplusBremsstrahlung);
pmanager->AddProcess(theeplusAnnihilation);
//
// set ordering for AtRestDoIt
pmanager->SetProcessOrderingToFirst(theeplusAnnihilation, idxAtRest);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(theeplusMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(theeplusIonisation, idxAlongStep,2);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(theeplusMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(theeplusIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(theeplusBremsstrahlung, idxPostStep,3);
pmanager->SetProcessOrdering(theeplusAnnihilation, idxPostStep,4);
} else if( particleName == "mu+" ||
particleName == "mu-" ) {
//muon
G4VProcess* aMultipleScattering = new G4MultipleScattering();
G4VProcess* aBremsstrahlung = new G4MuBremsstrahlung();
G4VProcess* aPairProduction = new G4MuPairProduction();
G4VProcess* anIonisation = new G4MuIonisation();
//
// add processes
pmanager->AddProcess(anIonisation);
pmanager->AddProcess(aMultipleScattering);
pmanager->AddProcess(aBremsstrahlung);
pmanager->AddProcess(aPairProduction);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(anIonisation, idxAlongStep,2);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(anIonisation, idxPostStep,2);
pmanager->SetProcessOrdering(aBremsstrahlung, idxPostStep,3);
pmanager->SetProcessOrdering(aPairProduction, idxPostStep,4);
} else if ((!particle->IsShortLived()) &&
(particle->GetPDGCharge() != 0.0) &&
(particle->GetParticleName() != "chargedgeantino")) {
// all others charged particles except geantino
G4VProcess* aMultipleScattering = new G4MultipleScattering();
G4VProcess* anIonisation = new G4hIonisation();
//
// add processes
pmanager->AddProcess(anIonisation);
pmanager->AddProcess(aMultipleScattering);
//
// set ordering for AlongStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,1);
pmanager->SetProcessOrdering(anIonisation, idxAlongStep,2);
//
// set ordering for PostStepDoIt
pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep,1);
pmanager->SetProcessOrdering(anIonisation, idxPostStep,2);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "G4Decay.hh"
void FCALPhysicsList::ConstructGeneral()
{
// Add Decay Process
G4Decay* theDecayProcess = new G4Decay();
theParticleIterator->reset();
while( (*theParticleIterator)() ){
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
if (theDecayProcess->IsApplicable(*particle)) {
pmanager ->AddProcess(theDecayProcess);
// set ordering for PostStepDoIt and AtRestDoIt
pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
}
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::SetCuts()
{
// reactualise cutValues
if (currentDefaultCut != defaultCutValue)
{
if(cutForGamma == currentDefaultCut) cutForGamma = defaultCutValue;
if(cutForElectron == currentDefaultCut) cutForElectron = defaultCutValue;
if(cutForProton == currentDefaultCut) cutForProton = defaultCutValue;
currentDefaultCut = defaultCutValue;
}
if (verboseLevel >0){
G4cout << "FCALPhysicsList::SetCuts:";
G4cout << "CutLength : " << G4BestUnit(defaultCutValue,"Length") << G4endl;
}
// set cut values for gamma at first and for e- second and next for e+,
// because some processes for e+/e- need cut values for gamma
SetCutValue(cutForGamma, "gamma");
SetCutValue(cutForElectron, "e-");
SetCutValue(cutForElectron, "e+");
// set cut values for proton and anti_proton before all other hadrons
// because some processes for hadrons need cut values for proton/anti_proton
SetCutValue(cutForProton, "proton");
SetCutValue(cutForProton, "anti_proton");
SetCutValueForOthers(defaultCutValue);
if (verboseLevel>0) DumpCutValuesTable();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPhysicsList::SetCutForGamma(G4double cut)
{
ResetCuts();
cutForGamma = cut;
}
void FCALPhysicsList::SetCutForElectron(G4double cut)
{
ResetCuts();
cutForElectron = cut;
}
void FCALPhysicsList::SetCutForProton(G4double cut)
{
ResetCuts();
cutForProton = cut;
}
G4double FCALPhysicsList::GetCutForGamma() const
{
return cutForGamma;
}
G4double FCALPhysicsList::GetCutForElectron() const
{
return cutForElectron;
}
G4double FCALPhysicsList::GetCutForProton() const
{
return cutForGamma;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,124 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALPrimaryGeneratorAction.cc,v 1.2 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALPrimaryGeneratorAction.hh"
#include "G4Event.hh"
#include "G4ParticleGun.hh"
#include "G4ParticleTable.hh"
#include "G4ParticleDefinition.hh"
#include "Randomize.hh"
#include "fstream.h"
#include "stdlib.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALPrimaryGeneratorAction::FCALPrimaryGeneratorAction()
{
X = new G4double[5001];
Y = new G4double[5001];
Z = new G4double[5001];
Cos_X = new G4double[5001];
Cos_Y = new G4double[5001];
Cos_Z = new G4double[5001];
G4int Nparticles = 1;
particleGun = new G4ParticleGun(Nparticles);
// default Particle
G4String particleName;
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4ParticleDefinition* particle = particleTable->FindParticle(particleName="e+");
particleGun->SetParticleDefinition(particle);
// default Energy
particleGun->SetParticleEnergy(80*GeV);
// Read Kinematics from file
G4int InEvent = 0;
G4String file_name = "data-tracks/tracks-80GeV.dat";
ifstream Traks_file(file_name);
if(!Traks_file) G4cerr << "WARNING: Failed to open file " << file_name << endl;
Traks_file.seekg(0);
while(!(Traks_file.eof())) {
InEvent++;
Traks_file >> Ievent >> X[InEvent] >> Y[InEvent] >> Z[InEvent]
>> Cos_X[InEvent] >> Cos_Y[InEvent] >> Cos_Z[InEvent];
};
Nevent = 2500;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALPrimaryGeneratorAction::~FCALPrimaryGeneratorAction()
{
delete particleGun;
delete [] X;
delete [] Y;
delete [] Z;
delete [] Cos_X;
delete [] Cos_Y;
delete [] Cos_Z;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
//this function is called at the begining of event
Nevent++;
particleGun->SetParticlePosition(G4ThreeVector(X[Nevent]*cm,Y[Nevent]*cm,Z[Nevent]*cm));
particleGun->SetParticleMomentumDirection(G4ThreeVector(-Cos_X[Nevent],Cos_Y[Nevent],-Cos_Z[Nevent]));
particleGun->GeneratePrimaryVertex(anEvent);
G4cout << "--------------------------------------------" << endl;
G4cout << " Event, X,Y,Z Generated Vertex : " << endl;
G4cout << Nevent << " " << X[Nevent] << " " << Y[Nevent] << " " << Z[Nevent]<< endl;
G4cout << "--------------------------------------------" << endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,75 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALRunAction.cc,v 1.2 2002/12/12 19:16:33 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALRunAction.hh"
#include "G4Run.hh"
#include "G4UImanager.hh"
#include "G4VVisManager.hh"
#include "G4ios.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALRunAction::FCALRunAction()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALRunAction::~FCALRunAction()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALRunAction::BeginOfRunAction(const G4Run* aRun)
{
G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl;
if (G4VVisManager::GetConcreteInstance())
{
G4UImanager* UI = G4UImanager::GetUIpointer();
UI->ApplyCommand("/vis/scene/notifyHandlers");
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALRunAction::EndOfRunAction(const G4Run* )
{
if (G4VVisManager::GetConcreteInstance()) {
G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/update");
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,250 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALSteppingAction.cc,v 1.2 2002/12/12 19:16:34 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALSteppingAction.hh"
#include "G4SteppingManager.hh"
#include "G4Track.hh"
#include "G4DynamicParticle.hh"
#include "G4Material.hh"
#include "G4LogicalVolume.hh"
#include "G4VPhysicalVolume.hh"
#include "G4VTouchable.hh"
#include "G4TouchableHistory.hh"
#include "G4Event.hh"
#include "G4ThreeVector.hh"
#include "G4ios.hh"
#include "iostream.h"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALSteppingAction::FCALSteppingAction() : IDold(-1), IDout(-1)
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALSteppingAction::~FCALSteppingAction()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALSteppingAction::UserSteppingAction(const G4Step* astep)
{
// Get Edep
G4double Edep = astep->GetTotalEnergyDeposit();
// Get Track
G4Track* aTrack = astep->GetTrack();
// Get Touchable History
G4TouchableHistory* theTouchable = (G4TouchableHistory*)(aTrack->GetTouchable());
// Energy deposit in FCAL1 and FCAL2
if(Edep != 0.)
{
G4VPhysicalVolume* physVol = theTouchable->GetVolume();
if(strcmp(physVol->GetName(),"FCALEmModulePhysical")== 0 ||
strcmp(physVol->GetName(),"F1LArGapPhysical") == 0)
{
EdepFCALEm = EdepFCALEm + Edep;
};
if( (strcmp(physVol->GetName(), "FCALHadModulePhysical") == 0) ||
(strcmp(physVol->GetName(), "CuPlateAPhysical") == 0) ||
(strcmp(physVol->GetName(), "CuPlateBPhysical") == 0) ||
(strcmp(physVol->GetName(), "WAbsorberPhysical") == 0) ||
(strcmp(physVol->GetName(), "F2RodPhysical") == 0) ||
(strcmp(physVol->GetName(), "F2LArGapPhysical") == 0) )
{
EdepFCALHad = EdepFCALHad + Edep;
};
};
// Get Tracks properties
G4int TrackID = aTrack->GetTrackID();
G4int ParentID = aTrack->GetParentID();
// Get Associated particle
const G4DynamicParticle * aDynamicParticle = aTrack->GetDynamicParticle();
G4ParticleDefinition * aParticle = aTrack->GetDefinition();
G4String ParticleName = aParticle->GetParticleName();
IDnow = EventNo + 10000*TrackID+ 100000000*ParentID;
if(IDnow != IDold)
{
IDold = IDnow;
// Get the primary particle
if(TrackID==1 && ParentID==0 && (aTrack->GetCurrentStepNumber()) == 1)
{
PrimaryVertex = aTrack->GetVertexPosition();
PrimaryDirection = aTrack->GetVertexMomentumDirection();
NSecondaries = 1;
Secondaries[NSecondaries][1] = aParticle->GetPDGEncoding();
Secondaries[NSecondaries][2] = PrimaryVertex.x();
Secondaries[NSecondaries][3] = PrimaryVertex.y();
Secondaries[NSecondaries][4] = PrimaryVertex.z();
Secondaries[NSecondaries][5] = (aDynamicParticle->GetMomentum()).x();
Secondaries[NSecondaries][6] = (aDynamicParticle->GetMomentum()).y();
Secondaries[NSecondaries][7] = (aDynamicParticle->GetMomentum()).z();
Secondaries[NSecondaries][8] = aDynamicParticle->GetTotalMomentum();
Secondaries[NSecondaries][9] = aDynamicParticle->GetTotalEnergy();
Secondaries[NSecondaries][10] = aDynamicParticle->GetKineticEnergy();
G4cout << " **** Primary : " << EventNo << endl;
G4cout << " Vertex : " << PrimaryVertex << endl;
}
// Get secondaries in air close to the primary tracks (DCA < 2.mm)
G4double DCACut = 2.*mm;
G4String Material = aTrack->GetMaterial()->GetName();
G4ThreeVector TrackPos = aTrack->GetVertexPosition();
if(TrackID != 1 && ParentID == 1 && (strcmp(Material,"Air")==0) && (TrackPos.z() > 135.*cm))
{
SecondaryVertex = aTrack->GetVertexPosition();
SecondaryDirection = aTrack->GetVertexMomentumDirection();
// calculate DCA of secondries to primary particle
Distance = PrimaryVertex - SecondaryVertex ;
VectorProduct = PrimaryDirection.cross(SecondaryDirection);
if(VectorProduct == 0. &&
PrimaryDirection != 0. && SecondaryDirection != 0.)
{
G4ThreeVector Temp = Distance.cross(PrimaryDirection);
VectorProduct = Temp.cross(PrimaryDirection);
};
VectorProductMagnitude = VectorProduct.mag();
if(VectorProductMagnitude == 0.)
{
VectorProductNorm = 0.;
} else {
VectorProductNorm = (1./VectorProduct.mag()) * VectorProduct ;
};
DistOfClosestApproach = Distance * VectorProductNorm ;
if(abs(DistOfClosestApproach) < DCACut)
{
NSecondaries++;
Secondaries[0][0] = NSecondaries;
Secondaries[NSecondaries][1] = aParticle->GetPDGEncoding();
Secondaries[NSecondaries][2] = (aTrack->GetVertexPosition()).x();
Secondaries[NSecondaries][3] = (aTrack->GetVertexPosition()).y();
Secondaries[NSecondaries][4] = (aTrack->GetVertexPosition()).z();
Secondaries[NSecondaries][5] =(aDynamicParticle->GetMomentum()).x();
Secondaries[NSecondaries][6] = (aDynamicParticle->GetMomentum()).y();
Secondaries[NSecondaries][7] = (aDynamicParticle->GetMomentum()).z();
Secondaries[NSecondaries][8] = aDynamicParticle->GetTotalMomentum();
Secondaries[NSecondaries][9] = aDynamicParticle->GetTotalEnergy();
Secondaries[NSecondaries][10] =aDynamicParticle->GetKineticEnergy();
};
};
};
// Get the World leaving particle
if(aTrack->GetNextVolume() == 0) {
if(IDnow != IDout) {
IDout = IDnow;
NTracks++;
OutOfWorldTracksData[0][0] = NTracks;
OutOfWorldTracksData[NTracks][1] = aParticle->GetPDGEncoding();
OutOfWorldTracksData[NTracks][2] = (aTrack->GetVertexPosition()).x();
OutOfWorldTracksData[NTracks][3] = (aTrack->GetVertexPosition()).y();
OutOfWorldTracksData[NTracks][4] = (aTrack->GetVertexPosition()).z();
OutOfWorldTracksData[NTracks][5] = (aDynamicParticle->GetMomentum()).x();
OutOfWorldTracksData[NTracks][6] = (aDynamicParticle->GetMomentum()).y();
OutOfWorldTracksData[NTracks][7] = (aDynamicParticle->GetMomentum()).z();
OutOfWorldTracksData[NTracks][8] = aDynamicParticle->GetTotalMomentum();
OutOfWorldTracksData[NTracks][9] = aDynamicParticle->GetTotalEnergy();
OutOfWorldTracksData[NTracks][10] = aDynamicParticle->GetKineticEnergy();
};
};
}
void FCALSteppingAction::initialize(G4int Nev) {
EventNo = Nev;
NTracks = 0;
NSecondaries = 0;
EdepFCALEm = EdepFCALHad = 0.;
for(G4int i=0; i<6000; i++)
{
for(G4int j=0; j<11; j++)
{
OutOfWorldTracksData[i][j] = 0.;
Secondaries[i][j] = 0.;
}
};
}
G4double FCALSteppingAction::GetOutOfWorldTracks(G4int i, G4int j){
return OutOfWorldTracksData[i][j];
}
G4double FCALSteppingAction::GetSecondaries(G4int i, G4int j){
return Secondaries[i][j];
}
G4double FCALSteppingAction::GetEdepFCAL(G4String FCAL) {
if(strcmp(FCAL,"FCALEm") == 0) {
return EdepFCALEm;
} else {
if(strcmp(FCAL,"FCALHad") == 0) {
return EdepFCALHad;}
};
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,185 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALSteppingVerbose.cc,v 1.2 2002/12/12 19:16:34 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//---------------------------------------------------------------
//
// FCALSteppingVerbose.cc
//
// Description:
// Implementation of the FCALSteppingVerbose class
//
//---------------------------------------------------------------
#include "FCALSteppingVerbose.hh"
#include "G4SteppingManager.hh"
#include "G4VProcess.hh"
#include "G4ParticleTypes.hh"
#include "G4UnitsTable.hh"
////////////////////////////////////////////////
FCALSteppingVerbose::FCALSteppingVerbose()
////////////////////////////////////////////////
{
}
//////////////////////////////////////////////////
FCALSteppingVerbose::~FCALSteppingVerbose()
//////////////////////////////////////////////////
{
}
/////////////////////////////////////////
void FCALSteppingVerbose::StepInfo()
/////////////////////////////////////////
{
CopyState();
G4int prec = G4cout.precision(3);
if( verboseLevel >= 1 ){
if( verboseLevel >= 4 ) VerboseTrack();
if( verboseLevel >= 3 ){
G4cout << G4endl;
G4cout << G4std::setw( 5) << "#Step#" << " "
<< G4std::setw( 6) << "X" << " "
<< G4std::setw( 6) << "Y" << " "
<< G4std::setw( 6) << "Z" << " "
<< G4std::setw( 9) << "KineE" << " "
<< G4std::setw( 9) << "dEStep" << " "
<< G4std::setw(10) << "StepLeng"
<< G4std::setw(10) << "TrakLeng"
<< G4std::setw(10) << "NextVolu"
<< G4std::setw(10) << "Process" << G4endl;
}
G4cout << G4std::setw( 5) << fTrack->GetCurrentStepNumber() << " "
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< G4std::setw( 6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< G4std::setw( 6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetTrackLength(),"Length");
// if( fStepStatus != fWorldBoundary){
if( fTrack->GetNextVolume() != 0 ) {
G4cout << G4std::setw(10) << fTrack->GetNextVolume()->GetName();
} else {
G4cout << G4std::setw(10) << "OutOfWorld";
}
if(fStep->GetPostStepPoint()->GetProcessDefinedStep() != NULL){
G4cout << G4std::setw(10) << fStep->GetPostStepPoint()->GetProcessDefinedStep()
->GetProcessName();
} else {
G4cout << "User Limit";
}
G4cout << G4endl;
if( verboseLevel == 2 ){
G4int tN2ndariesTot = fN2ndariesAtRestDoIt +
fN2ndariesAlongStepDoIt +
fN2ndariesPostStepDoIt;
if(tN2ndariesTot>0){
G4cout << " :----- List of 2ndaries - "
<< "#SpawnInStep=" << G4std::setw(3) << tN2ndariesTot
<< "(Rest=" << G4std::setw(2) << fN2ndariesAtRestDoIt
<< ",Along=" << G4std::setw(2) << fN2ndariesAlongStepDoIt
<< ",Post=" << G4std::setw(2) << fN2ndariesPostStepDoIt
<< "), "
<< "#SpawnTotal=" << G4std::setw(3) << (*fSecondary).size()
<< " ---------------"
<< G4endl;
for(G4int lp1=(*fSecondary).size()-tN2ndariesTot;
lp1<(*fSecondary).size(); lp1++){
G4cout << " : "
<< G4std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length")
<< G4std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length")
<< G4std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length")
<< G4std::setw(6)
<< G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy")
<< G4std::setw(10)
<< (*fSecondary)[lp1]->GetDefinition()->GetParticleName();
G4cout << G4endl;
}
G4cout << " :-----------------------------"
<< "----------------------------------"
<< "-- EndOf2ndaries Info ---------------"
<< G4endl;
}
}
}
G4cout.precision(prec);
}
////////////////////////////////////////////////
void FCALSteppingVerbose::TrackingStarted()
////////////////////////////////////////////////
{
CopyState();
G4int prec = G4cout.precision(3);
if( verboseLevel > 0 ){
G4cout << G4std::setw( 5) << "Step#" << " "
<< G4std::setw( 6) << "X" << " "
<< G4std::setw( 6) << "Y" << " "
<< G4std::setw( 6) << "Z" << " "
<< G4std::setw( 9) << "KineE" << " "
<< G4std::setw( 9) << "dEStep" << " "
<< G4std::setw(10) << "StepLeng"
<< G4std::setw(10) << "TrakLeng"
<< G4std::setw(10) << "NextVolu"
<< G4std::setw(10) << "Process" << G4endl;
G4cout << G4std::setw( 5) << fTrack->GetCurrentStepNumber() << " "
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().x(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().y(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetPosition().z(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy")
<< G4std::setw( 6) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy")
<< G4std::setw( 6) << G4BestUnit(fStep->GetStepLength(),"Length")
<< G4std::setw( 6) << G4BestUnit(fTrack->GetTrackLength(),"Length");
if(fTrack->GetNextVolume()){
G4cout << G4std::setw(10) << fTrack->GetNextVolume()->GetName() << " ";
} else {
G4cout << G4std::setw(10) << "OutOfWorld" << " ";
}
G4cout << G4std::setw(10) << "initStep" << G4endl;
}
G4cout.precision(prec);
}
@@ -0,0 +1,194 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALTBEventAction.cc,v 1.3 2002/12/12 19:16:34 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALTBEventAction.hh"
#include "FCALCalorHit.hh"
#ifdef G4ANALYSIS_USE
#include "FCALAnalysisManager.hh"
#endif
//#include "g4rw/tvordvec.h"
#include "g4std/vector"
#include "G4Event.hh"
#include "G4EventManager.hh"
#include "G4HCofThisEvent.hh"
#include "G4VHitsCollection.hh"
#include "G4TrajectoryContainer.hh"
#include "G4Trajectory.hh"
#include "G4VVisManager.hh"
#include "G4SDManager.hh"
#include "G4UImanager.hh"
#include "G4ios.hh"
#include "G4UnitsTable.hh"
#include "Randomize.hh"
#include "FCALSteppingAction.hh"
#include "G4ios.hh"
#include "iostream.h"
#include "fstream.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALTBEventAction::FCALTBEventAction(FCALSteppingAction* SA)
:calorimeterCollID(-1),drawFlag("all"),printModulo(10), StepAction(SA)
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALTBEventAction::~FCALTBEventAction()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTBEventAction::BeginOfEventAction(const G4Event* evt)
{
G4int evtNb = evt->GetEventID();
if (evtNb%printModulo == 0)
{
G4cout << "\n---> Begin of event: " << evtNb+1 << G4endl;
// HepRandom::showEngineStatus();
}
NTracksOutOfWorld = 0;
NSecondaries = 0;
StepAction->initialize(evtNb+1);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTBEventAction::EndOfEventAction(const G4Event* evt)
{
NTracksOutOfWorld = StepAction->GetOutOfWorldTracks(0, 0);
G4cout << "N Tracks out of world " << NTracksOutOfWorld << endl;
// Write Leaving Particles in File
//--------------------------------
G4String FileName1 = "OutTracks_802_1mm.dat";
G4int iostemp1;
if(Init1 == 0) {
iostemp1 = ios::out;
Init1++;
} else {
iostemp1 = ios::out|ios::app; // ios::app;
};
ofstream OutTracks(FileName1, iostemp1);
OutTracks << NTracksOutOfWorld << endl;
for(G4int i=1; i<= NTracksOutOfWorld ; i++){
for(G4int j=1; j<11 ; j++) {
G4double OutOfWorld = StepAction->GetOutOfWorldTracks(i,j);
OutTracks << OutOfWorld << " " ; }
OutTracks << endl;
#ifdef G4ANALYSIS_USE
// pass first event for histogram record:
G4double OutOfWorld2 = StepAction->GetOutOfWorldTracks(i,j);
FCALAnalysisManager* analysis = FCALAnalysisManager::getInstance();
analysis->NumOutOfWorld(OutOfWorld2,i,j);
#endif
}
OutTracks.close();
NSecondaries = StepAction->GetSecondaries(0,0);
G4cout << "N Scondaries " << NSecondaries << endl;
// Write Secondary Particles in File
//--------------------------------
G4String FileName2 = "SecndTracks_802_1mm.dat";
G4int iostemp2;
if(Init2 == 0) {
iostemp2 = ios::out;
Init2++;
} else {
iostemp2 = ios::out|ios::app; // ios::app;
};
ofstream SecndTracks(FileName2, iostemp2);
SecndTracks << NSecondaries << endl;
for(i=1; i<= NSecondaries ; i++){
for(G4int j=1; j<11 ; j++) {
G4double Secondary = StepAction->GetSecondaries(i,j);
SecndTracks << Secondary << " " ; }
SecndTracks << endl;
#ifdef G4ANALYSIS_USE
// pass first event for histogram record:
G4double Secondary2 = StepAction->GetSecondaries(i,j);
FCALAnalysisManager* analysis = FCALAnalysisManager::getInstance();
analysis->Secondaries(Secondary2,i,j);
#endif
}
SecndTracks.close();
// Write Edep in FCAL1 and FCAL2
G4String FileName3 = "EdepFCAL_802_1mm.dat";
G4int iostemp3;
if(Init3 == 0) {
iostemp3 = ios::out;
Init3++;
} else {
iostemp3 = ios::out|ios::app; // ios::app;
};
ofstream EdepFCAL(FileName3, iostemp3);
G4double EmEdep = StepAction->GetEdepFCAL("FCALEm");
G4double HadEdep = StepAction->GetEdepFCAL("FCALHad");
EdepFCAL << EmEdep << " ";
EdepFCAL << HadEdep;
EdepFCAL << endl;
EdepFCAL.close();
#ifdef G4ANALYSIS_USE
// pass first event for histogram record:
FCALAnalysisManager* analysis = FCALAnalysisManager::getInstance();
analysis->Edep(EmEdep,HadEdep);
#endif
G4cout << "Edep in FCAL1 FCAl2 : " << StepAction->GetEdepFCAL("FCALEm") << " ";
G4cout << StepAction->GetEdepFCAL("FCALHad") << endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,73 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#include "FCALTBEventActionMessenger.hh"
#include "FCALTBEventAction.hh"
#include "G4UIcmdWithAString.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
FCALTBEventActionMessenger::FCALTBEventActionMessenger(FCALTBEventAction* EvAct)
:fcaltbeventAction(EvAct)
{
DrawCmd = new G4UIcmdWithAString("/event/drawTracks",this);
DrawCmd->SetGuidance("Draw the tracks in the event");
DrawCmd->SetGuidance(" Choice : none,charged, all");
DrawCmd->SetParameterName("choice",true);
DrawCmd->SetDefaultValue("all");
DrawCmd->SetCandidates("none charged all");
DrawCmd->AvailableForStates(G4State_Idle);
PrintCmd = new G4UIcmdWithAnInteger("/event/printModulo",this);
PrintCmd->SetGuidance("Print events modulo n");
PrintCmd->SetParameterName("EventNb",false);
PrintCmd->SetRange("EventNb>0");
PrintCmd->AvailableForStates(G4State_Idle);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
FCALTBEventActionMessenger::~FCALTBEventActionMessenger()
{
delete DrawCmd;
delete PrintCmd;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void FCALTBEventActionMessenger::SetNewValue(G4UIcommand* command,
G4String newValue)
{
if(command == DrawCmd)
{fcaltbeventAction->SetDrawFlag(newValue);}
if(command == PrintCmd)
{fcaltbeventAction->SetPrintModulo(PrintCmd->GetNewIntValue(newValue));}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,431 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// Author: Mathieu Fontaine Rachid Mazini
// fontaine@lps.umontreal.ca Rachid.Mazini@cern.ch
// Language: C++
// Tested on: g++
// Prerequisites: None
// Purpose: Header file for FCALFrontVolume.cc, which defines
// the volumes in the testbeam front.
// Developped: 10-March-2000 M.F.
//
//----------------------------------------------------------------------------
#include "FCALTestbeamSetup.hh"
#include "FCALMaterialConsultant.hh"
#include "FCALCryostatVolumes.hh"
//#include "FCALEMModule.hh"
//#include "FCALHadModule.hh"
#include "FCALTestbeamSetupSD.hh"
#include "G4Box.hh"
#include "G4Tubs.hh"
#include "G4SubtractionSolid.hh"
#include "G4Material.hh"
#include "G4LogicalVolume.hh"
#include "G4VPhysicalVolume.hh"
#include "G4PVPlacement.hh"
#include "G4ThreeVector.hh"
#include "G4RotationMatrix.hh"
#include "G4SDManager.hh"
#include "G4RunManager.hh"
#include "G4VisAttributes.hh"
#include "G4Colour.hh"
#include "G4ios.hh"
FCALTestbeamSetup::FCALTestbeamSetup() {
#include "FCALTestbeamSetupParameters.icc"
};
FCALTestbeamSetup::~FCALTestbeamSetup() {};
G4VPhysicalVolume * FCALTestbeamSetup::Construct()
{
//-----------------------------
// construction of materials
//-----------------------------
FCALMaterialConsultant * FCALMaterials = new FCALMaterialConsultant();
FCALMaterials->construct();
//-------------------
// Experimental Hall
//-------------------
G4Box * SolidMother = new G4Box("Mother",MotherSizeX,MotherSizeY,MotherSizeZ);
G4LogicalVolume * LogicalMother =
new G4LogicalVolume(SolidMother,FCALMaterials->Material("Air"),"Mother");
G4VPhysicalVolume * PhysicalMother =
new G4PVPlacement(0, G4ThreeVector(),"Mother", LogicalMother, NULL, 0,0);
LogicalMother->SetVisAttributes(G4VisAttributes::Invisible);
//-------------------------------
// Scintillators S1, S2 and S3
//-------------------------------
G4Box * SolidScintS1andS3 =
new G4Box("ScintS1andS3Solid",ScintS1andS3SizeX, ScintS1andS3SizeY, ScintS1andS3SizeZ);
G4Box * SolidScintS2 =
new G4Box("ScintS2Solid", ScintS2SizeX, ScintS2SizeY, ScintS2SizeZ);
G4LogicalVolume * LogicalScintS1andS3 =
new G4LogicalVolume(SolidScintS1andS3,FCALMaterials->Material("Polystyrene"),
"ScintS1andS3Logical");
G4LogicalVolume * LogicalScintS2 =
new G4LogicalVolume(SolidScintS2, FCALMaterials->Material("Polystyrene"),
"ScintS2Logical");
G4VPhysicalVolume * PhysicalScintS1 =
new G4PVPlacement(0, G4ThreeVector(ScintS1_S3PosX, ScintS1_S3PosY, ScintS1PosZ),
"ScintS1Physical",LogicalScintS1andS3,PhysicalMother,0,0);
G4VPhysicalVolume * PhysicalScintS3 =
new G4PVPlacement(0, G4ThreeVector(ScintS1_S3PosX, ScintS1_S3PosY, ScintS3PosZ),
"ScintS3Physical",LogicalScintS1andS3,PhysicalMother,0,0);
G4VPhysicalVolume * PhysicalScintS2 =
new G4PVPlacement(0, G4ThreeVector(ScintS1_S3PosX, ScintS1_S3PosY, ScintS2PosZ),
"ScintS2Physical", LogicalScintS2, PhysicalMother,0,0);
G4VisAttributes * ColorOfScintillator = new G4VisAttributes(G4Colour(0.,0.8,0.));
LogicalScintS1andS3->SetVisAttributes(ColorOfScintillator);
LogicalScintS2->SetVisAttributes(ColorOfScintillator);
//-------------------
// MWPC's
//-------------------
G4Box* SolidMWPC = new G4Box("MWPCSolid",MWPCSizeX,MWPCSizeY,MWPCSizeZ);
G4LogicalVolume * LogicalMWPC =
new G4LogicalVolume(SolidMWPC,FCALMaterials->Material("MWPCArCO2"),"MWPCLogical");
for(G4int i=0; i<5; i++)
{
G4VPhysicalVolume * PhysicalMWPC =
new G4PVPlacement(0,G4ThreeVector(MWPCPosX,MWPCPosY,MWPCPosZ[i]),
"MWPCPhysical", LogicalMWPC, PhysicalMother,0,i+1);
}
G4VisAttributes * ColorOfMWPC = new G4VisAttributes(G4Colour(0.,0.,0.5));
LogicalMWPC->SetVisAttributes(ColorOfMWPC);
//---------------------------------------
// Hole Counter (scintillator + Pb + Al
//---------------------------------------
// Scintillator Counter
G4Box * SolidHoleCntrScint =
new G4Box("ScintSolid", HoleCntrSizeX, HoleCntrSizeY, HoleCntrScintSizeZ);
G4LogicalVolume * LogicalHoleCntrScint =
new G4LogicalVolume(SolidHoleCntrScint, FCALMaterials->Material("Polystyrene"),
"HoleCntrScintLogical");
// Hole in scintillator Counter
G4Tubs * SolidHole =
new G4Tubs("HoleSolid", ScintHoleRmin, ScintHoleRmax, ScintHoleLength,
HoleStartPhi, HoleDPhi);
G4LogicalVolume * LogicalHole =
new G4LogicalVolume(SolidHole, FCALMaterials->Material("Air"), "HoleLogical");
G4VPhysicalVolume * PhysicalHoleScint =
new G4PVPlacement(0, G4ThreeVector(HolePosX, HolePosY, HolePosZ), LogicalHole,
"HolePhysicalScint", LogicalHoleCntrScint, 0, 0);
// Scintillator Hole counter placement
G4VPhysicalVolume * PhysicalHoleCntrScint = new G4PVPlacement(0,
G4ThreeVector(HoleCntrScintPosX, HoleCntrScintPosY, HoleCntrScintPosZ),
"HoleCntrScintPhysical", LogicalHoleCntrScint, PhysicalMother, 0, 0);
// Absorber Lead
G4Box * SolidHoleCntrAbsrb =
new G4Box("AbsrbSolid", HoleCntrSizeX, HoleCntrSizeY, HoleCntrAbsrbSizeZ);
G4LogicalVolume * LogicalHoleCntrPb =
new G4LogicalVolume(SolidHoleCntrAbsrb, FCALMaterials->Material("Lead"),
"HoleCntrPbLoghical");
//hole in ABsorber, both Lead and Al.
G4Tubs * SolidHoleAbs =
new G4Tubs("HoleSolidAbs", AbsrbHoleRmin, AbsrbHoleRmax, AbsrbHoleLength,
HoleStartPhi, HoleDPhi);
G4LogicalVolume * LogicalHoleAbs =
new G4LogicalVolume(SolidHoleAbs, FCALMaterials->Material("Air"),"HoleAbsLogical");
G4VPhysicalVolume * PhysicalHolePb =
new G4PVPlacement(0, G4ThreeVector(HolePosX, HolePosY, HolePosZ), LogicalHoleAbs,
"HolePbPhysical", LogicalHoleCntrPb, 0, 0);
// Lead Placement
G4VPhysicalVolume * PhysicalHoleCntrPb =
new G4PVPlacement(0, G4ThreeVector(HoleCntrPbPosX, HoleCntrPbPosY, HoleCntrPbPosZ),
"HoleCntrPbPhysical", LogicalHoleCntrPb, PhysicalMother, 0, 0);
// Absorber Al.
G4LogicalVolume * LogicalHoleCntrAl =
new G4LogicalVolume(SolidHoleCntrAbsrb, FCALMaterials->Material("Aluminium"),
"HoleCntrAlLoghical");
G4VPhysicalVolume * PhysicalHoleAl =
new G4PVPlacement(0, G4ThreeVector(HolePosX, HolePosY, HolePosZ), LogicalHoleAbs,
"HoleAlPhysical", LogicalHoleCntrAl, 0, 0);
G4VPhysicalVolume * PhysicalHoleCntrAl =
new G4PVPlacement(0, G4ThreeVector(HoleCntrAlPosX, HoleCntrAlPosY, HoleCntrAlPosZ),
"HoleCntrAlPhysical", LogicalHoleCntrAl, PhysicalMother, 0, 0);
LogicalHoleCntrScint->SetVisAttributes(ColorOfScintillator);
G4VisAttributes * ColorOfLead = new G4VisAttributes(G4Colour(0.5,0.5,0.8));
G4VisAttributes * ColorOfAlu = new G4VisAttributes(G4Colour(0.5,0.5,0.3));
LogicalHoleCntrPb->SetVisAttributes(ColorOfLead);
LogicalHoleCntrAl->SetVisAttributes(ColorOfAlu);
G4VisAttributes * ColorOfAir = new G4VisAttributes(G4Colour(1.,1.,1.));
LogicalHole->SetVisAttributes(ColorOfAir);
LogicalHoleAbs->SetVisAttributes(ColorOfAir);
//-------------------
// Lead Wall
//-------------------
G4Box * SolidLeadWall =
new G4Box("LeadWallSolid", LeadWallSizeX, LeadWallSizeY, LeadWallSizeZ);
G4LogicalVolume * LogicalLeadWall =
new G4LogicalVolume(SolidLeadWall, FCALMaterials->Material("Lead"),
"LeadWallLogical");
G4Box * SolidSlitPb = new G4Box("SlitPb", LeadWallSlitSizeX, LeadWallSlitSizeY,
LeadWallSlitSizeZ);
G4LogicalVolume * LogicalSlitPb =
new G4LogicalVolume(SolidSlitPb, FCALMaterials->Material("Air"), "SlitPbLogical");
G4VPhysicalVolume * PhysicalSlitPb =
new G4PVPlacement(0, 0, LogicalSlitPb, "SlitPbPhysical", LogicalLeadWall, 0, 0);
G4VPhysicalVolume * PhysicalLeadWall =
new G4PVPlacement(0, G4ThreeVector(LeadWallPosX,LeadWallPosY,LeadWallPosZ),
"LeadWallPhysical", LogicalLeadWall, PhysicalMother, 0, 0);
LogicalLeadWall->SetVisAttributes(ColorOfLead);
LogicalSlitPb->SetVisAttributes(ColorOfAir);
//-------------------
// Iron Wall
//-------------------
G4Box * SolidIronWall =
new G4Box("IronWallSolid", IronWallSizeX, IronWallSizeY, IronWallSizeZ);
G4LogicalVolume * LogicalIronWall =
new G4LogicalVolume(SolidIronWall, FCALMaterials->Material("Iron"),
"IronWallLogical");
G4Box * SolidSlitFe = new G4Box("SlitFe", IronWallSlitSizeX, IronWallSlitSizeY,
IronWallSlitSizeZ);
G4LogicalVolume * LogicalSlitFe =
new G4LogicalVolume(SolidSlitFe, FCALMaterials->Material("Air"), "SlitFeLogical");
G4VPhysicalVolume * PhysicalSlitFe =
new G4PVPlacement(0, 0, LogicalSlitFe, "SlitFePhysical", LogicalIronWall, 0, 0);
G4VPhysicalVolume * PhysicalIronWall =
new G4PVPlacement(0, G4ThreeVector(IronWallPosX,IronWallPosY,IronWallPosZ),
"IronWallPhysical", LogicalIronWall, PhysicalMother, 0, 0);
G4VisAttributes * ColorOfIron = new G4VisAttributes(G4Colour(0.2,0.2,0.2));
LogicalIronWall->SetVisAttributes(ColorOfIron);
LogicalSlitFe->SetVisAttributes(ColorOfAir);
//----------------
// Tail Catcher
//----------------
G4Box * SolidBigScint =
new G4Box("BigSolidScint",BigScintSizeX, BigScintSizeY, ScintSizeZ);
G4LogicalVolume * LogicalBigScint =
new G4LogicalVolume(SolidBigScint, FCALMaterials->Material("Polystyrene"),
"BigScintLogical");
G4Box * SolidSmallScint =
new G4Box("SmallSolidScint",SmallScintSizeX, SmallScintSizeY, ScintSizeZ);
G4LogicalVolume * LogicalSmallScint =
new G4LogicalVolume(SolidSmallScint, FCALMaterials->Material("Polystyrene"),
"SmallScintLogical");
for( i=0; i<(NBigScint+NSmallScint); i++)
{
if(i<NBigScint)
{ G4VPhysicalVolume * PhysicalBigScint =
new G4PVPlacement(0, G4ThreeVector(ScintPosX, ScintPosY, ScintPosZ[i]),
"BigScintPhysical", LogicalBigScint, PhysicalMother,
0, i+1);
}
else
{ G4VPhysicalVolume * PhysicalSmallScint =
new G4PVPlacement(0, G4ThreeVector(ScintPosX, ScintPosY, ScintPosZ[i]),
"SmallScintPhysical", LogicalSmallScint, PhysicalMother,
0, i+1);
}
}
LogicalBigScint->SetVisAttributes(ColorOfScintillator);
LogicalSmallScint->SetVisAttributes(ColorOfScintillator);
G4Box * SolidBigIron =
new G4Box("BigSolidIron",BigIronSizeX, BigIronSizeY, IronSizeZ);
G4LogicalVolume * LogicalBigIron =
new G4LogicalVolume(SolidBigIron, FCALMaterials->Material("Polystyrene"),
"BigIronLogical");
G4Box * SolidSmallIron =
new G4Box("SmallSolidIron",SmallIronSizeX, SmallIronSizeY, IronSizeZ);
G4LogicalVolume * LogicalSmallIron =
new G4LogicalVolume(SolidSmallIron, FCALMaterials->Material("Iron"),
"SmallIronLogical");
for( i=0; i<(NBigIron+NSmallIron); i++)
{
if(i<NBigIron)
{ G4VPhysicalVolume * PhysicalBigIron =
new G4PVPlacement(0, G4ThreeVector(IronPosX, IronPosY, IronPosZ[i]),
"BigIronPhysical", LogicalBigIron, PhysicalMother,
0, i+1);
}
else
{ G4VPhysicalVolume * PhysicalSmallIron =
new G4PVPlacement(0, G4ThreeVector(IronPosX, IronPosY, IronPosZ[i]),
"SmallIronPhysical", LogicalSmallIron, PhysicalMother,
0, i+1);
}
}
LogicalBigIron->SetVisAttributes(ColorOfIron);
LogicalSmallIron->SetVisAttributes(ColorOfIron);
//-------------------------
// Concrete Walls A and B
//-------------------------
G4Box * SolidConcWall =
new G4Box("ConcWallSolid", ConcWallSizeX, ConcWallSizeY, ConcWallSizeZ);
G4LogicalVolume * LogicalConcWallA =
new G4LogicalVolume(SolidConcWall, FCALMaterials->Material("ShieldingConcrete"),
"ConcWallALogical");
G4VPhysicalVolume * PhysicalConcWallA =
new G4PVPlacement(0, G4ThreeVector(ConcWallPosX, ConcWallPosY, ConcWallAPosZ),
"ConcWallAPhysical", LogicalConcWallA, PhysicalMother, 0, 0);
G4LogicalVolume * LogicalConcWallB =
new G4LogicalVolume(SolidConcWall, FCALMaterials->Material("ShieldingConcrete"),
"ConcWallBLogical");
G4VPhysicalVolume * PhysicalConcWallB =
new G4PVPlacement(0, G4ThreeVector(ConcWallPosX, ConcWallPosY, ConcWallBPosZ),
"ConcWallBPhysical", LogicalConcWallB, PhysicalMother, 0, 0);
G4Box * SolidConcWallIns =
new G4Box("ConcWallInsSolid", ConcWallInsSizeX,ConcWallInsSizeY,ConcWallInsSizeZ);
G4LogicalVolume * LogicalConcWallIns =
new G4LogicalVolume(SolidConcWallIns, FCALMaterials->Material("Iron"),
"LogicalConcWallIns");
G4VPhysicalVolume * PhysicalConcWallIns =
new G4PVPlacement(0, 0, "ConcWallInsPhysical", LogicalConcWallIns, PhysicalConcWallA, 0, 0);
G4VisAttributes * ColorOfConcrete = new G4VisAttributes(G4Colour(0.,0.,0.));
LogicalConcWallA->SetVisAttributes(ColorOfConcrete);
LogicalConcWallB->SetVisAttributes(ColorOfConcrete);
LogicalConcWallIns->SetVisAttributes(ColorOfIron);
//------------------
// Muon Counter
//-------------------
G4Box * SolidMuContr =
new G4Box("MuContrSolid", MuCntrSIzeX, MuCntrSIzeY, MuCntrSIzeZ);
G4LogicalVolume * LogicalMuContr =
new G4LogicalVolume(SolidMuContr, FCALMaterials->Material("Polystyrene"),
"MuContrLogical");
G4VPhysicalVolume * PhysicalMuContr =
new G4PVPlacement(0, G4ThreeVector(MuCntrPosX, MuCntrPosY, MuCntrPosZ),
"MuContrPhyiscal", LogicalMuContr, PhysicalMother, 0, 0);
LogicalMuContr->SetVisAttributes(ColorOfScintillator);
//-----------------
// cryostat
//-----------------
G4RotationMatrix* CryostatRotationMatrix =
new G4RotationMatrix();
// new G4RotationMatrix(1.,0.,0.,0.,0.,-1.,0.,1.,0.);
// Theta(...) 90.0000 180.0000 90.0000
// Phi(...) 0.0000 0.0000 90.0000
//
// Matrix(...) | 1.0000 0.0000 0.0000 |
// | 0.0000 0.0000 -1.0000 |
// | 0.0000 1.0000 0.0000 |
//
// How to input?
CryostatRotationMatrix->rotateX(90*deg);
FCALCryostatVolumes * CryostatVolumes = new FCALCryostatVolumes();
G4LogicalVolume * theCryostatVolumes = CryostatVolumes->Construct();
G4VPhysicalVolume * PhysiCryostatVolumes =
new G4PVPlacement(CryostatRotationMatrix,
G4ThreeVector(CryostatPosX,CryostatPosY,CryostatPosZ),"CryostatVolumes"
, theCryostatVolumes, PhysicalMother, 0,0);
//-----------------------
// Senstive detectors
//-----------------------
G4SDManager* SDman = G4SDManager::GetSDMpointer();
if(!FCALTBSetupSD)
{
FCALTBSetupSD = new FCALTestbeamSetupSD("FCALTB/TBSetupSD");
SDman->AddNewDetector(FCALTBSetupSD);
}
LogicalScintS1andS3->SetSensitiveDetector(FCALTBSetupSD);
LogicalScintS2->SetSensitiveDetector(FCALTBSetupSD);
LogicalMWPC->SetSensitiveDetector(FCALTBSetupSD);
LogicalHoleCntrScint->SetSensitiveDetector(FCALTBSetupSD);
LogicalHoleCntrPb->SetSensitiveDetector(FCALTBSetupSD);
LogicalHoleCntrAl->SetSensitiveDetector(FCALTBSetupSD);
// theCryostatVolumes->SetSensitiveDetector(FCALTBSetupSD);
LogicalLeadWall->SetSensitiveDetector(FCALTBSetupSD);
LogicalIronWall->SetSensitiveDetector(FCALTBSetupSD);
LogicalBigScint->SetSensitiveDetector(FCALTBSetupSD);
LogicalSmallScint->SetSensitiveDetector(FCALTBSetupSD);
LogicalBigIron->SetSensitiveDetector(FCALTBSetupSD);
LogicalSmallIron->SetSensitiveDetector(FCALTBSetupSD);
LogicalConcWallA->SetSensitiveDetector(FCALTBSetupSD);
LogicalConcWallB->SetSensitiveDetector(FCALTBSetupSD);
LogicalConcWallIns->SetSensitiveDetector(FCALTBSetupSD);
LogicalMuContr->SetSensitiveDetector(FCALTBSetupSD);
return PhysicalMother;
};
@@ -0,0 +1,205 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
MotherSizeX = 500.*cm;
MotherSizeY = 500.*cm ;
MotherSizeZ = 3300.*cm;
//---------------------------
// Sciantillators S1, S2, S3
//---------------------------
ScintS1andS3SizeX = 3.5*cm;
ScintS1andS3SizeY = 3.5*cm;
ScintS1andS3SizeZ = 0.5*cm;
ScintS2SizeX = 7.5*cm;
ScintS2SizeY = 15.*cm;
ScintS2SizeZ = 0.5*cm;
ScintS1_S3PosX = 0.*cm;
ScintS1_S3PosY = 0.*cm;
ScintS1PosZ = 3221.5*cm;
ScintS2PosZ = 3107.5*cm;
ScintS3PosZ = 3104.5*cm;
//----------
// MWPC's
//----------
MWPCSizeX = 6.4*cm;
MWPCSizeY = 6.4*cm;
MWPCSizeZ = 2.*cm;
MWPCPosX = 0.;
MWPCPosY = 0.;
MWPCPosZ[0] = 2591.*cm;
MWPCPosZ[1] = 895.*cm;
MWPCPosZ[2] = 440.*cm;
MWPCPosZ[3] = 352.*cm;
MWPCPosZ[4] = 349.*cm;
//-------------------
// Hole Counter
//-------------------
HoleCntrSizeX = 10.0*cm;
HoleCntrSizeY = 40.0*cm;
HoleCntrScintSizeZ = 1.0*cm;
HoleCntrAbsrbSizeZ = 0.5*cm; // Absrb = Pb or Al
HoleCntrScintPosX = 0.0*cm;
HoleCntrScintPosY = 18.75*cm;
HoleCntrScintPosZ = 289.0*cm;
HoleCntrPbPosX = 0.0*cm;
HoleCntrPbPosY = 18.75*cm;
HoleCntrPbPosZ = 290.5*cm;
HoleCntrAlPosX = 0.0*cm;
HoleCntrAlPosY = 18.75*cm;
HoleCntrAlPosZ = 291.5*cm;
ScintHoleRmin = 0.0*cm;
ScintHoleRmax = 2.5*cm;
ScintHoleLength = 1.0*cm;
AbsrbHoleRmin = 0.0*cm; // Absrb = Pb or Al
AbsrbHoleRmax = 2.75*cm;
AbsrbHoleLength = 0.5*cm;
HoleStartPhi = 0.;
HoleDPhi = 2.*pi;
HolePosX = 0.0*cm;
HolePosY = -18.75*cm;
HolePosZ = 0.0*cm;
//------------------
// Lead Wall
//------------------
LeadWallSizeX = 100.0*cm;
LeadWallSizeY = 67.5*cm;
LeadWallSizeZ = 0.55*cm;
LeadWallSlitSizeX = 2.5*cm;
LeadWallSlitSizeY = 10.0*cm;
LeadWallSlitSizeZ = 0.55*cm;
LeadWallPosX = 0.0*cm;
LeadWallPosY = 0.0*cm;
LeadWallPosZ = 249.55*cm;
//------------------
// Iron Wall
//------------------
IronWallSizeX = 130.0*cm;
IronWallSizeY = 75.0*cm;
IronWallSizeZ = 20.0*cm;
IronWallSlitSizeX = 5.0*cm;
IronWallSlitSizeY = 30.0*cm;
IronWallSlitSizeZ = 20.0*cm;
IronWallPosX = 0.0*cm;
IronWallPosY = 0.0*cm;
IronWallPosZ = 162.0*cm;
//----------------
// Tail Catcher
//----------------
NBigScint = 3;
BigScintSizeX = 60.0*cm;
BigScintSizeY = 60.0*cm;
NSmallScint = 4;
SmallScintSizeX = 20.0*cm;
SmallScintSizeY = 20.0*cm;
ScintSizeZ = 1.0*cm;
ScintPosX = 0.0*cm;
ScintPosY = 0.0*cm;
ScintPosZ[0] = -188.0*cm; // Big Scintillators
ScintPosZ[1] = -208.0*cm;
ScintPosZ[2] = -229.0*cm;
ScintPosZ[3] = -247.0*cm; // Small Scintillators
ScintPosZ[4] = -261.0*cm;
ScintPosZ[5] = -275.0*cm;
ScintPosZ[6] = -289.0*cm;
NBigIron = 2;
BigIronSizeX = 60.0*cm;
BigIronSizeY = 60.0*cm;
NSmallIron = 4;
SmallIronSizeX = 20.0*cm;
SmallIronSizeY = 20.0*cm;
IronSizeZ = 5.0*cm;
IronPosX = 0.0*cm;
IronPosY = 0.0*cm;
IronPosZ[0] = -200.0*cm; // Big Iron Plates
IronPosZ[1] = -219.0*cm;
IronPosZ[2] = -240.0*cm; // Small Iron Plates
IronPosZ[3] = -254.0*cm;
IronPosZ[4] = -268.0*cm;
IronPosZ[5] = -282.0*cm;
//-------------------------
// Concrete Walls A and B
//-------------------------
ConcWallSizeX = 130.0*cm;
ConcWallSizeY = 120.*cm;
ConcWallSizeZ = 80.*cm;
ConcWallPosX = 0.0*cm;
ConcWallPosY = 0.0*cm;
ConcWallAPosZ = -375.0*cm;
ConcWallBPosZ = -535.0*cm;
ConcWallInsSizeX = 40.0*cm;
ConcWallInsSizeY = 40.0*cm;
ConcWallInsSizeZ = 80.0*cm;
ConcWallInsPosZ = 0.0*cm;
//------------------
// Muon Counter
//------------------
MuCntrSIzeX = 20.0*cm;
MuCntrSIzeY = 20.0*cm;
MuCntrSIzeZ = 1.0*cm;
MuCntrPosX = 0.0*cm;
MuCntrPosY = 0.0*cm;
MuCntrPosZ = -681.0*cm;
//------------------
// Cryostat
//------------------
CryostatPosX = 0.;
CryostatPosY = 50.*cm;
CryostatPosZ = 0.;
/*
EMModulePosX = 0.;
EMModulePosY = 0.;
EMModulePosZ = -1.691*cm;
HadModulePosX = 0.;
HadModulePosY = 0.;
HadModulePosZ = -48.991*cm;
*/
@@ -0,0 +1,183 @@
MotherSizeX = 500.*cm;
MotherSizeY = 500.*cm ;
MotherSizeZ = 3300.*cm;
//---------------------------
// Sciantillators S1, S2, S3
//---------------------------
ScintS1andS3SizeX = 3.5*cm;
ScintS1andS3SizeY = 3.5*cm;
ScintS1andS3SizeZ = 0.5*cm;
ScintS2SizeX = 7.5*cm;
ScintS2SizeY = 15.*cm;
ScintS2SizeZ = 0.5*cm;
ScintS1_S3PosX = 0.*cm;
ScintS1_S3PosY = 0.*cm;
ScintS1PosZ = 3221.5*cm;
ScintS2PosZ = 3107.5*cm;
ScintS3PosZ = 3104.5*cm;
//----------
// MWPC's
//----------
MWPCSizeX = 6.4*cm;
MWPCSizeY = 6.4*cm;
MWPCSizeZ = 2.*cm;
MWPCPosX = 0.;
MWPCPosY = 0.;
MWPCPosZ[0] = 2591.*cm;
MWPCPosZ[1] = 895.*cm;
MWPCPosZ[2] = 440.*cm;
MWPCPosZ[3] = 352.*cm;
MWPCPosZ[4] = 349.*cm;
//-------------------
// Hole Counter
//-------------------
HoleCntrSizeX = 10.0*cm;
HoleCntrSizeY = 40.0*cm;
HoleCntrScintSizeZ = 1.0*cm;
HoleCntrAbsrbSizeZ = 0.5*cm; // Absrb = Pb or Al
HoleCntrScintPosX = 0.0*cm;
HoleCntrScintPosY = 18.75*cm;
HoleCntrScintPosZ = 289.0*cm;
HoleCntrPbPosX = 0.0*cm;
HoleCntrPbPosY = 18.75*cm;
HoleCntrPbPosZ = 290.5*cm;
HoleCntrAlPosX = 0.0*cm;
HoleCntrAlPosY = 18.75*cm;
HoleCntrAlPosZ = 291.5*cm;
ScintHoleRmin = 0.0*cm;
ScintHoleRmax = 2.5*cm;
ScintHoleLenght = 1.0*cm;
AbsrbHoleRmin = 0.0*cm; // Absrb = Pb or Al
AbsrbHoleRmax = 2.75*cm;
AbsrbHoleLenght = 0.5*cm;
HoleStartPhi = 0.;
HoleDPhi = 2.*pi;
HolePosX = 0.0*cm;
HolePosY = -18.75*cm;
HolePosZ = 0.0*cm;
//------------------
// Lead Wall
//------------------
LeadWallSizeX = 100.0*cm;
LeadWallSizeY = 67.5*cm;
LeadWallSizeZ = 0.55*cm;
LeadWallSlitSizeX = 2.5*cm;
LeadWallSlitSizeY = 10.0*cm;
LeadWallSlitSizeZ = 0.55*cm;
LeadWallPosX = 0.0*cm;
LeadWallPosY = 0.0*cm;
LeadWallPosZ = 249.55*cm;
//------------------
// Iron Wall
//------------------
IronWallSizeX = 130.0*cm;
IronWallSizeY = 75.0*cm;
IronWallSizeZ = 20.0*cm;
IronWallSlitSizeX = 5.0*cm;
IronWallSlitSizeY = 30.0*cm;
IronWallSlitSizeZ = 20.0*cm;
IronWallPosX = 0.0*cm;
IronWallPosY = 0.0*cm;
IronWallPosZ = 162.0*cm;
//----------------
// Tail Catcher
//----------------
NBigScint = 3;
BigScintSizeX = 60.0*cm;
BigScintSizeY = 60.0*cm;
NSmallScint = 4;
SmallScintSizeX = 20.0*cm;
SmallScintSizeY = 20.0*cm;
ScintSizeZ = 1.0*cm;
ScintPosX = 0.0*cm;
ScintPosY = 0.0*cm;
ScintPosZ[0] = -188.0*cm; // Big Scintillators
ScintPosZ[1] = -208.0*cm;
ScintPosZ[2] = -229.0*cm;
ScintPosZ[3] = -247.0*cm; // Small Scintillators
ScintPosZ[4] = -261.0*cm;
ScintPosZ[5] = -275.0*cm;
ScintPosZ[6] = -289.0*cm;
NBigIron = 2;
BigIronSizeX = 60.0*cm;
BigIronSizeY = 60.0*cm;
NSmallIron = 4;
SmallIronSizeX = 20.0*cm;
SmallIronSizeY = 20.0*cm;
IronSizeZ = 5.0*cm;
IronPosX = 0.0*cm;
IronPosY = 0.0*cm;
IronPosZ[0] = -200.0*cm; // Big Iron Plates
IronPosZ[1] = -219.0*cm;
IronPosZ[2] = -240.0*cm; // Small Iron Plates
IronPosZ[3] = -254.0*cm;
IronPosZ[4] = -268.0*cm;
IronPosZ[5] = -282.0*cm;
//-------------------------
// Concrete Walls A and B
//-------------------------
ConcWallSizeX = 130.0*cm;
ConcWallSizeY = 120.*cm;
ConcWallSizeZ = 80.*cm;
ConcWallPosX = 0.0*cm;
ConcWallPosY = 0.0*cm;
ConcWallAPosZ = -375.0*cm;
ConcWallBPosZ = -535.0*cm;
ConcWallInsSizeX = 40.0*cm;
ConcWallInsSizeY = 40.0*cm;
ConcWallInsSizeZ = 80.0*cm;
ConcWallInsPosZ = 0.0*cm;
//------------------
// Muon Counter
//------------------
MuCntrSIzeX = 20.0*cm;
MuCntrSIzeY = 20.0*cm;
MuCntrSIzeZ = 1.0*cm;
MuCntrPosX = 0.0*cm;
MuCntrPosY = 0.0*cm;
MuCntrPosZ = -681.0*cm;
//------------------
// Cryostat
//------------------
CryostatPosX = 0.;
CryostatPosY = 50.*cm;
CryostatPosZ = 0.;
/*
EMModulePosX = 0.;
EMModulePosY = 0.;
EMModulePosZ = -1.691*cm;
HadModulePosX = 0.;
HadModulePosY = 0.;
HadModulePosZ = -48.991*cm;
*/
@@ -0,0 +1,186 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALTestbeamSetupSD.cc,v 1.4 2002/12/12 19:16:34 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#include "FCALTestbeamSetupSD.hh"
#include "FCALCalorHit.hh"
#include "FCALTestbeamSetup.hh"
#include "G4VPhysicalVolume.hh"
#include "G4Step.hh"
#include "G4Track.hh"
#include "G4VTouchable.hh"
#include "G4TouchableHistory.hh"
#include "G4SDManager.hh"
#include "G4ios.hh"
#include "iostream.h"
#include "fstream.h"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALTestbeamSetupSD::FCALTestbeamSetupSD(G4String name) : G4VSensitiveDetector(name)
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALTestbeamSetupSD::~FCALTestbeamSetupSD()
{;}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTestbeamSetupSD::Initialize(G4HCofThisEvent*HCE)
{
EBeamS1 = EBeamS2 = EBeamS3 = 0.;
EHoleScint = EBeamHole = 0.;
EBeamDead = 0;
for (G4int j =0 ; j<8 ; j++) { ETailVis[j] = 0.;};
for ( j =0 ; j<7 ; j++) { ETailDep[j] = 0.;};
TailCatcherID = 0;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
G4bool FCALTestbeamSetupSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
{
G4double edep = aStep->GetTotalEnergyDeposit();
if (edep==0.) return false;
G4TouchableHistory* theTouchable
= (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
G4VPhysicalVolume* physVol = theTouchable->GetVolume();
if(strcmp(physVol->GetName(),"ScintS1Physical")==0) {
EBeamS1 = EBeamS1 + edep;}
if(strcmp(physVol->GetName(),"ScintS2Physical")==0) {
EBeamS2 = EBeamS2 + edep;}
if(strcmp(physVol->GetName(),"ScintS3Physical")==0) {
EBeamS3 = EBeamS3 + edep;}
if(strcmp(physVol->GetName(),"HoleScintPhysical")==0){ EHoleScint =+ edep;}
if(strcmp(physVol->GetName(),"HoleCntrScintPhysical")==0){
EBeamHole = EBeamHole + edep;}
if(strcmp(physVol->GetName(),"MWPCPhysical")==0) { EBeamDead =+ edep;};
if(strcmp(physVol->GetName(),"HoleCntrPbPhysical")==0) { EBeamDead =+ edep;};
if(strcmp(physVol->GetName(),"HoleCntrAlPhysical")==0) { EBeamDead =+ edep;};
if(strcmp(physVol->GetName(),"LeadWallPhysical")==0) { EBeamDead =+ edep;};
if(strcmp(physVol->GetName(),"IronWallPhysical")==0) { EBeamDead =+ edep;};
if(strcmp(physVol->GetName(),"BigScintPhysical")==0) {
TailCatcherID = physVol->GetCopyNo();
if(TailCatcherID > 0) ETailVis[TailCatcherID] =+ edep;
}
if(strcmp(physVol->GetName(),"SmallScintPhysical")==0) {
TailCatcherID = physVol->GetCopyNo();
if(TailCatcherID > 0) ETailVis[TailCatcherID + 3] =+ edep;
}
if(strcmp(physVol->GetName(),"BigIronPhysical")==0) {
TailCatcherID = physVol->GetCopyNo();
if(TailCatcherID > 0) ETailDep[TailCatcherID] =+ edep;
}
if(strcmp(physVol->GetName(),"SmallIronPhysical")==0) {
TailCatcherID = physVol->GetCopyNo();
if(TailCatcherID > 0) ETailDep[TailCatcherID+2] =+ edep;
}
return true;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTestbeamSetupSD::EndOfEvent(G4HCofThisEvent* HCE)
{
G4cout << " Visisble Energy in S1 , S2 , S3 in (MeV)" << endl;
G4cout << EBeamS1/MeV << " " << EBeamS2/MeV << " " << EBeamS3/MeV << " " << endl;
G4cout << " Visible Energy in Hole Counter (MeV) " << endl;
G4cout << EHoleScint/MeV << " " << EBeamHole/MeV << endl;
G4cout << " Visible Energy in Upstream Dead Materials " << endl;
G4cout << EBeamDead/MeV << endl;
G4cout << " Visible Energy in Tail Catcher Scintillator" << endl;
for (G4int j=1; j<8 ; j++) {G4cout << ETailVis[j]/MeV << " " ;}; G4cout << endl;
G4cout << " Visible Energy in Tail Catcher Absorber" << endl;
for (j=1; j<7 ; j++) {G4cout << ETailDep[j]/MeV << " " ;}; G4cout << endl;
// Write data in File
//-------------------
G4String FileName = "Beam_802_1mm.dat";
G4int iostemp;
if(InitBeam == 0) {
iostemp = ios::out;
InitBeam++;
} else {
iostemp = ios::out|ios::app;
};
ofstream BeamDatafile(FileName, iostemp);
// BeamDatafile.precision(5);
BeamDatafile << EBeamS1/MeV << " " << EBeamS2/MeV << " " << EBeamS3/MeV << endl;
BeamDatafile << EBeamHole/MeV << endl;
BeamDatafile << EBeamDead/MeV << endl;
for (j=1; j<8 ; j++) { BeamDatafile << ETailVis[j]/MeV << " " ;} ; BeamDatafile << endl;
for (j=1; j<7 ; j++) { BeamDatafile << ETailDep[j]/MeV << " " ;} ; BeamDatafile << endl;
BeamDatafile.close();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTestbeamSetupSD::clear()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTestbeamSetupSD::DrawAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALTestbeamSetupSD::PrintAll()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -0,0 +1,187 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: FCALVisManager.cc,v 1.4 2002/12/12 19:16:34 gunter Exp $
// GEANT4 tag $Name: geant4-05-00 $
//
//
// John Allison 24th January 1998.
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#ifdef G4VIS_USE
#include "FCALVisManager.hh"
#include "G4ASCIITree.hh"
#include "G4DAWNFILE.hh"
#include "G4GAGTree.hh"
#include "G4HepRepFile.hh"
#include "G4HepRep.hh"
#include "G4RayTracer.hh"
#include "G4VRML1File.hh"
#include "G4VRML2File.hh"
// Supported drivers...
#ifdef G4VIS_USE_DAWN
#include "G4FukuiRenderer.hh"
#endif
#ifdef G4VIS_USE_OPACS
#include "G4Wo.hh"
#include "G4Xo.hh"
#endif
#ifdef G4VIS_USE_DAWNFILE
#include "G4DAWNFILE.hh"
#endif
#ifdef G4VIS_USE_OPACS
#include "G4Wo.hh"
#include "G4Xo.hh"
#endif
#ifdef G4VIS_USE_OPENGLX
#include "G4OpenGLImmediateX.hh"
#include "G4OpenGLStoredX.hh"
#endif
#ifdef G4VIS_USE_OPENGLWIN32
#include "G4OpenGLImmediateWin32.hh"
#include "G4OpenGLStoredWin32.hh"
#endif
#ifdef G4VIS_USE_OPENGLXM
#include "G4OpenGLImmediateXm.hh"
#include "G4OpenGLStoredXm.hh"
#endif
#ifdef G4VIS_USE_OIX
#include "G4OpenInventorX.hh"
#endif
#ifdef G4VIS_USE_OIWIN32
#include "G4OpenInventorWin32.hh"
#endif
#ifdef G4VIS_USE_VRML
#include "G4VRML1.hh"
#include "G4VRML2.hh"
#endif
#ifdef G4VIS_USE_VRMLFILE
#include "G4VRML1File.hh"
#include "G4VRML2File.hh"
#endif
#ifdef G4VIS_USE_RAYTRACER
#include "G4RayTracer.hh"
#endif
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
FCALVisManager::FCALVisManager () {}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
void FCALVisManager::RegisterGraphicsSystems () {
RegisterGraphicsSystem (new G4ASCIITree);
RegisterGraphicsSystem (new G4DAWNFILE);
RegisterGraphicsSystem (new G4GAGTree);
RegisterGraphicsSystem (new G4HepRepFile);
RegisterGraphicsSystem (new G4HepRep);
RegisterGraphicsSystem (new G4RayTracer);
RegisterGraphicsSystem (new G4VRML1File);
RegisterGraphicsSystem (new G4VRML2File);
#ifdef G4VIS_USE_DAWN
RegisterGraphicsSystem (new G4FukuiRenderer);
#endif
#ifdef G4VIS_USE_DAWNFILE
RegisterGraphicsSystem (new G4DAWNFILE);
#endif
#ifdef G4VIS_USE_OPACS
RegisterGraphicsSystem (new G4Wo);
RegisterGraphicsSystem (new G4Xo);
#endif
#ifdef G4VIS_USE_OPENGLX
RegisterGraphicsSystem (new G4OpenGLImmediateX);
RegisterGraphicsSystem (new G4OpenGLStoredX);
#endif
#ifdef G4VIS_USE_OPENGLWIN32
RegisterGraphicsSystem (new G4OpenGLImmediateWin32);
RegisterGraphicsSystem (new G4OpenGLStoredWin32);
#endif
#ifdef G4VIS_USE_OPENGLXM
RegisterGraphicsSystem (new G4OpenGLImmediateXm);
RegisterGraphicsSystem (new G4OpenGLStoredXm);
#endif
#ifdef G4VIS_USE_OIX
RegisterGraphicsSystem (new G4OpenInventorX);
#endif
#ifdef G4VIS_USE_OIWIN32
RegisterGraphicsSystem (new G4OpenInventorWin32);
#endif
#ifdef G4VIS_USE_VRML
RegisterGraphicsSystem (new G4VRML1);
RegisterGraphicsSystem (new G4VRML2);
#endif
#ifdef G4VIS_USE_VRMLFILE
RegisterGraphicsSystem (new G4VRML1File);
RegisterGraphicsSystem (new G4VRML2File);
#endif
#ifdef G4VIS_USE_RAYTRACER
RegisterGraphicsSystem (new G4RayTracer);
#endif
if (fVerbose > 0) {
G4cout <<
"\nYou have successfully chosen to use the following graphics systems."
<< G4endl;
PrintAvailableGraphicsSystems ();
}
}
#endif
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....