Import Geant4 5.0.0 source tree
This commit is contained in:
@@ -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....
|
||||
Reference in New Issue
Block a user