BGO done and working
This commit is contained in:
parent
a1c098e50d
commit
bfa90c7459
Binary file not shown.
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
*.d
|
*.d
|
||||||
*.so
|
*.so
|
||||||
*.swp
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
34
BGOSD.cc
34
BGOSD.cc
|
@ -1,5 +1,6 @@
|
||||||
|
|
||||||
#include "CloverCrystalSD.hh"
|
//#include "CloverCrystalSD.hh"
|
||||||
|
#include "BGOSD.hh"
|
||||||
|
|
||||||
#include "G4HCofThisEvent.hh"
|
#include "G4HCofThisEvent.hh"
|
||||||
#include "G4Step.hh"
|
#include "G4Step.hh"
|
||||||
|
@ -10,7 +11,8 @@
|
||||||
|
|
||||||
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
|
||||||
CloverCrystalSD::CloverCrystalSD(const G4String& name, const G4String& hitsCollectionName, const G4int nCrystal)
|
//CloverCrystalSD::CloverCrystalSD(const G4String& name, const G4String& hitsCollectionName, const G4int nCrystal)
|
||||||
|
BGOSD::BGOSD(const G4String& name, const G4String& hitsCollectionName, const G4int nCrystal)
|
||||||
: G4VSensitiveDetector(name),
|
: G4VSensitiveDetector(name),
|
||||||
fHitsCollection(nullptr),
|
fHitsCollection(nullptr),
|
||||||
fNDet(nCrystal)
|
fNDet(nCrystal)
|
||||||
|
@ -20,23 +22,26 @@ CloverCrystalSD::CloverCrystalSD(const G4String& name, const G4String& hitsColle
|
||||||
|
|
||||||
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
|
||||||
CloverCrystalSD::~CloverCrystalSD()
|
//CloverCrystalSD::~CloverCrystalSD()
|
||||||
|
BGOSD::~BGOSD()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
|
||||||
void CloverCrystalSD::Initialize(G4HCofThisEvent* hce)
|
//void CloverCrystalSD::Initialize(G4HCofThisEvent* hce)
|
||||||
|
void BGOSD::Initialize(G4HCofThisEvent* hce)
|
||||||
{
|
{
|
||||||
// Create hits collection
|
// Create hits collection
|
||||||
fHitsCollection = new CloverCrystalHitsCollection(SensitiveDetectorName, collectionName[0]);
|
//fHitsCollection = new CloverCrystalHitsCollection(SensitiveDetectorName, collectionName[0]);
|
||||||
|
fHitsCollection = new BGOHitsCollection(SensitiveDetectorName, collectionName[0]);
|
||||||
|
|
||||||
// Add this collection in hce
|
// Add this collection in hce
|
||||||
G4int hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
|
G4int hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
|
||||||
hce->AddHitsCollection( hcID, fHitsCollection );
|
hce->AddHitsCollection( hcID, fHitsCollection );
|
||||||
|
|
||||||
for (G4int i=0; i<fNDet; i++ ) {
|
for (G4int i=0; i<fNDet; i++ ) {
|
||||||
fHitsCollection->insert(new CloverCrystalHit());
|
fHitsCollection->insert(new BGOHit());
|
||||||
}
|
}
|
||||||
|
|
||||||
//G4cout << "######### size of fHitCollection : " << fHitsCollection->GetSize() << G4endl;
|
//G4cout << "######### size of fHitCollection : " << fHitsCollection->GetSize() << G4endl;
|
||||||
|
@ -45,7 +50,8 @@ void CloverCrystalSD::Initialize(G4HCofThisEvent* hce)
|
||||||
|
|
||||||
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
|
||||||
G4bool CloverCrystalSD::ProcessHits(G4Step* step, G4TouchableHistory* /*history*/)
|
//G4bool CloverCrystalSD::ProcessHits(G4Step* step, G4TouchableHistory* /*history*/)
|
||||||
|
G4bool BGOSD::ProcessHits(G4Step* step, G4TouchableHistory* /*history*/)
|
||||||
{
|
{
|
||||||
|
|
||||||
// energy deposit
|
// energy deposit
|
||||||
|
@ -59,22 +65,23 @@ G4bool CloverCrystalSD::ProcessHits(G4Step* step, G4TouchableHistory* /*history*
|
||||||
|
|
||||||
if ( edep==0. && stepLength == 0. ) return false;
|
if ( edep==0. && stepLength == 0. ) return false;
|
||||||
|
|
||||||
G4int crystalID = step->GetPreStepPoint()->GetTouchableHandle() ->GetCopyNumber();
|
G4int BGOID = step->GetPreStepPoint()->GetTouchableHandle() ->GetCopyNumber();
|
||||||
//----------- save hit in each crystal
|
//----------- save hit in each crystal
|
||||||
CloverCrystalHit * hit = (*fHitsCollection)[crystalID];
|
BGOHit * hit = (*fHitsCollection)[BGOID];
|
||||||
|
|
||||||
hit->SetTrackID (step->GetTrack()->GetTrackID());
|
hit->SetTrackID (step->GetTrack()->GetTrackID());
|
||||||
hit->SetEdep(edep);
|
hit->SetEdep(edep);
|
||||||
hit->SetPos (step->GetPostStepPoint()->GetPosition());
|
hit->SetPos (step->GetPostStepPoint()->GetPosition());
|
||||||
hit->SetStepLength( stepLength);
|
hit->SetStepLength( stepLength);
|
||||||
hit->SetCrystalID(crystalID);
|
hit->SetBGOID(BGOID);
|
||||||
|
|
||||||
|
|
||||||
//---------- Save indivual hit
|
//---------- Save indivual hit
|
||||||
CloverCrystalHit* newHit = new CloverCrystalHit();
|
// CloverCrystalHit* newHit = new CloverCrystalHit();
|
||||||
|
BGOHit* newHit = new BGOHit();
|
||||||
|
|
||||||
newHit->SetTrackID (step->GetTrack()->GetTrackID());
|
newHit->SetTrackID (step->GetTrack()->GetTrackID());
|
||||||
newHit->SetCrystalID(crystalID);
|
newHit->SetBGOID(BGOID);
|
||||||
newHit->SetEdep(edep);
|
newHit->SetEdep(edep);
|
||||||
newHit->SetPos (step->GetPostStepPoint()->GetPosition());
|
newHit->SetPos (step->GetPostStepPoint()->GetPosition());
|
||||||
newHit->SetStepLength( stepLength);
|
newHit->SetStepLength( stepLength);
|
||||||
|
@ -87,7 +94,8 @@ G4bool CloverCrystalSD::ProcessHits(G4Step* step, G4TouchableHistory* /*history*
|
||||||
|
|
||||||
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
///....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
|
||||||
void CloverCrystalSD::EndOfEvent(G4HCofThisEvent*)
|
//void CloverCrystalSD::EndOfEvent(G4HCofThisEvent*)
|
||||||
|
void BGOSD::EndOfEvent(G4HCofThisEvent*)
|
||||||
{
|
{
|
||||||
if ( verboseLevel > 1 ) {
|
if ( verboseLevel > 1 ) {
|
||||||
G4int nofHits = fHitsCollection->GetSize();
|
G4int nofHits = fHitsCollection->GetSize();
|
||||||
|
|
|
@ -44,7 +44,7 @@ G4GlobalMagFieldMessenger* CloverDetectorConstruction::fMagFieldMessenger = 0;
|
||||||
CloverDetectorConstruction::CloverDetectorConstruction()
|
CloverDetectorConstruction::CloverDetectorConstruction()
|
||||||
: G4VUserDetectorConstruction(),
|
: G4VUserDetectorConstruction(),
|
||||||
fNumOfCrystal(0),
|
fNumOfCrystal(0),
|
||||||
fLogicBGO(NULL), fLogicCrystal(NULL), fCrystalMaterial(NULL),
|
fLogicCrystal(NULL), fLogicBGO(NULL), fCrystalMaterial(NULL),
|
||||||
fCheckOverlaps(true)
|
fCheckOverlaps(true)
|
||||||
{
|
{
|
||||||
fNumOfCrystal = Crystal_Num; //also need to change the fNDet in CloverEventAction.cc
|
fNumOfCrystal = Crystal_Num; //also need to change the fNDet in CloverEventAction.cc
|
||||||
|
@ -56,7 +56,7 @@ CloverDetectorConstruction::CloverDetectorConstruction()
|
||||||
CloverDetectorConstruction::~CloverDetectorConstruction()
|
CloverDetectorConstruction::~CloverDetectorConstruction()
|
||||||
{
|
{
|
||||||
delete [] fLogicCrystal;
|
delete [] fLogicCrystal;
|
||||||
delete [] fLogicCrystal;
|
delete [] fLogicBGO;
|
||||||
}
|
}
|
||||||
|
|
||||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||||
|
@ -327,7 +327,7 @@ G4VPhysicalVolume* CloverDetectorConstruction::DefineVolumes()
|
||||||
|
|
||||||
if( jCrystal == 0 ) {
|
if( jCrystal == 0 ) {
|
||||||
caseLV[iClover] = new G4LogicalVolume(casing, G4Material::GetMaterial("G4_Al"), "Case");
|
caseLV[iClover] = new G4LogicalVolume(casing, G4Material::GetMaterial("G4_Al"), "Case");
|
||||||
fLogicBGO[iClover] = new G4LogicalVolume(bgo , G4Material::GetMaterial("G4_Al"), "BGO ");
|
fLogicBGO[iClover] = new G4LogicalVolume(bgo , G4Material::GetMaterial("G4_Al"), "BGOLV");
|
||||||
bgowindowLV[iClover] = new G4LogicalVolume(bgowindow, G4Material::GetMaterial("G4_Al"), "BGO WINDOW ");
|
bgowindowLV[iClover] = new G4LogicalVolume(bgowindow, G4Material::GetMaterial("G4_Al"), "BGO WINDOW ");
|
||||||
|
|
||||||
new G4PVPlacement( rotmat , // case orientation
|
new G4PVPlacement( rotmat , // case orientation
|
||||||
|
@ -342,7 +342,7 @@ G4VPhysicalVolume* CloverDetectorConstruction::DefineVolumes()
|
||||||
new G4PVPlacement( bgomat , // bgo orientation
|
new G4PVPlacement( bgomat , // bgo orientation
|
||||||
bgo_pos, // bgo location
|
bgo_pos, // bgo location
|
||||||
fLogicBGO[i/4], // its logical volume
|
fLogicBGO[i/4], // its logical volume
|
||||||
"Bgo", // its name
|
"BGO", // its name
|
||||||
worldLV, // its mother volume
|
worldLV, // its mother volume
|
||||||
false, // no boolean operation
|
false, // no boolean operation
|
||||||
iClover, // copy number
|
iClover, // copy number
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
CloverEventAction::CloverEventAction()
|
CloverEventAction::CloverEventAction()
|
||||||
: G4UserEventAction(),
|
: G4UserEventAction(),
|
||||||
fCrystalHCID(-1),
|
fCrystalHCID(-1),
|
||||||
fNDet(Crystal_Num), // number of crystal
|
|
||||||
fBGOHCID(-1),
|
fBGOHCID(-1),
|
||||||
fNBGODet(Crystal_Num/4) // number of bgo
|
fNBGODet(Crystal_Num/4), // number of bgo
|
||||||
|
fNDet(Crystal_Num) // number of crystal
|
||||||
{
|
{
|
||||||
fdEList.clear();
|
fdEList.clear();
|
||||||
fdLList.clear();
|
fdLList.clear();
|
||||||
|
@ -173,12 +173,12 @@ void CloverEventAction::EndOfEventAction(const G4Event* event)
|
||||||
*/
|
*/
|
||||||
fdEList[i] = edep * resol * 1000; // to keV
|
fdEList[i] = edep * resol * 1000; // to keV
|
||||||
fdLList[i] = crystalHit->GetStepLength();
|
fdLList[i] = crystalHit->GetStepLength();
|
||||||
|
// std::cout<< "crystalhere "<< i << ", " << fdEList[i] << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto BGOHC = GetHitsBGOCollection(fBGOHCID, event); //this is G4VHitsCollection
|
auto BGOHC = GetHitsBGOCollection(fBGOHCID, event); //this is G4VHitsCollection
|
||||||
|
|
||||||
for( int i = 0 ; i < fNDet ; i++){
|
for( int i = 0 ; i < fNBGODet ; i++){
|
||||||
BGOHit * bgoHit = (*BGOHC)[i]; //this is CloverCrystalHit :: G4VHit
|
BGOHit * bgoHit = (*BGOHC)[i]; //this is CloverCrystalHit :: G4VHit
|
||||||
|
|
||||||
//add detector resolution of 1%
|
//add detector resolution of 1%
|
||||||
|
@ -206,6 +206,7 @@ void CloverEventAction::EndOfEventAction(const G4Event* event)
|
||||||
fBEList[i] = edep * resol * 1000; // to keV
|
fBEList[i] = edep * resol * 1000; // to keV
|
||||||
fBLList[i] = bgoHit->GetStepLength();
|
fBLList[i] = bgoHit->GetStepLength();
|
||||||
|
|
||||||
|
// std::cout<< "bgohere "<< i << ", " << fBEList[i] << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get analysis manager
|
// get analysis manager
|
||||||
|
@ -214,9 +215,9 @@ void CloverEventAction::EndOfEventAction(const G4Event* event)
|
||||||
// fill ntuple
|
// fill ntuple
|
||||||
analysisManager->FillNtupleIColumn(0, n_trajectories);
|
analysisManager->FillNtupleIColumn(0, n_trajectories);
|
||||||
|
|
||||||
analysisManager->FillNtupleDColumn(3, beamEnergy);
|
analysisManager->FillNtupleDColumn(5, beamEnergy);
|
||||||
analysisManager->FillNtupleDColumn(4, beamTheta);
|
analysisManager->FillNtupleDColumn(6, beamTheta);
|
||||||
analysisManager->FillNtupleDColumn(5, beamPhi);
|
analysisManager->FillNtupleDColumn(7, beamPhi);
|
||||||
|
|
||||||
analysisManager->AddNtupleRow();
|
analysisManager->AddNtupleRow();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user