#include <Ext_track.h>
Public Member Functions | |
Ext_track () | |
Ext_track (const bool msgFlag, const bool myBFieldOn, const bool GeomOptimization, const int m_detVer, const bool UseMucKal, const int MucWindow) | |
~Ext_track () | |
void | Initialization (const bool aMsgFlag, const bool Bfield, const bool GeomOptimization, const bool aUseMucKal, const int aMucWindow) |
bool | Set (const Hep3Vector &xv3, const Hep3Vector &pv3, const HepSymMatrix &err, const std::string &particleName, const double pathInMDC, const double tofInMdc) |
void | TrackExtrapotation () |
void | Dir (const int dir) |
ExtSteppingAction * | GetStepAction () |
Private Member Functions | |
bool | GeometryInitialization () |
bool | PhysicsInitialization () |
void | CheckRegions () |
bool | CheckVertexInsideWorld (const Hep3Vector &pos) |
Private Attributes | |
Ext_xp_err | m_xp_err |
bool | myMsgFlag |
bool | myGeomOptimization |
bool | myBFieldOn |
int | m_detVer |
bool | myUseMucKal |
int | myMucWindow |
float | m_vect [7] |
int | m_dir |
G4VUserDetectorConstruction * | bes3DetectorConstruction |
G4VPhysicalVolume * | bes3WorldVolume |
G4VUserPhysicsList * | extPhysicsList |
G4Track * | extTrack |
ExtSteppingAction * | extSteppingAction |
G4TrackingManager * | extTrackingManager |
G4RunManagerKernel * | extRunManagerKernel |
Definition at line 40 of file Ext_track.h.
Ext_track::Ext_track | ( | ) |
Definition at line 36 of file Ext_track.cxx.
References bes3DetectorConstruction, bes3WorldVolume, extPhysicsList, extRunManagerKernel, extTrack, extTrackingManager, m_detVer, and myBFieldOn.
00036 : myMsgFlag(true),myBFieldOn(true),myGeomOptimization(true),m_dir(0),m_detVer(1),myUseMucKal(true),myMucWindow(6) 00037 { 00038 // BesSensitiveManager *besSensitiveManager = new BesSensitiveManager; 00039 bes3DetectorConstruction = new ExtBesDetectorConstruction(myBFieldOn,m_detVer); 00040 bes3WorldVolume = bes3DetectorConstruction->Construct(); 00041 extPhysicsList = new ExtPhysicsList; 00042 extTrack = new G4Track; 00043 00044 //for geant4.8.1, move this line to Initialization, extSteppingAction = new ExtSteppingAction; 00045 extTrackingManager = new G4TrackingManager; 00046 //RunManagerKernel for geant4.9.0 00047 extRunManagerKernel = new G4RunManagerKernel; 00048 }
Ext_track::Ext_track | ( | const bool | msgFlag, | |
const bool | myBFieldOn, | |||
const bool | GeomOptimization, | |||
const int | m_detVer, | |||
const bool | UseMucKal, | |||
const int | MucWindow | |||
) |
Definition at line 50 of file Ext_track.cxx.
References bes3DetectorConstruction, bes3WorldVolume, extPhysicsList, extRunManagerKernel, extTrack, extTrackingManager, and myBFieldOn.
00050 : myMsgFlag(msgFlag),myBFieldOn(BFieldOn),myGeomOptimization(GeomOptimization),m_dir(0),myUseMucKal(aUseMucKal),myMucWindow(aMucWindow) 00051 { 00052 // BesSensitiveManager *besSensitiveManager = new BesSensitiveManager; 00053 bes3DetectorConstruction = new ExtBesDetectorConstruction(myBFieldOn,m_detVer); 00054 bes3WorldVolume = bes3DetectorConstruction->Construct(); 00055 extPhysicsList = new ExtPhysicsList; 00056 extTrack = new G4Track; 00057 00058 //for geant4.8.1, move this line to Initialization, extSteppingAction = new ExtSteppingAction; 00059 extTrackingManager = new G4TrackingManager; 00060 //RunManagerKernel for geant4.9.0 00061 extRunManagerKernel = new G4RunManagerKernel; 00062 }
Ext_track::~Ext_track | ( | ) |
Definition at line 66 of file Ext_track.cxx.
References bes3DetectorConstruction, extPhysicsList, extRunManagerKernel, extTrack, and extTrackingManager.
00067 { 00068 if(extRunManagerKernel) delete extRunManagerKernel; 00069 if(extTrackingManager) delete extTrackingManager; 00070 // if(extSteppingAction) delete extSteppingAction; 00071 if(extTrack) delete extTrack; 00072 if(bes3DetectorConstruction) delete bes3DetectorConstruction; 00073 if(extPhysicsList) delete extPhysicsList; 00074 00075 // open geometry for deletion 00076 G4GeometryManager::GetInstance()->OpenGeometry(); 00077 00078 // deletion of Geant4 kernel classes 00079 G4SDManager* fSDM = G4SDManager::GetSDMpointerIfExist(); 00080 if(fSDM) 00081 { 00082 delete fSDM; 00083 } 00084 }
void Ext_track::CheckRegions | ( | ) | [private] |
Definition at line 211 of file Ext_track.cxx.
References bes3WorldVolume, and genRecEmupikp::i.
Referenced by PhysicsInitialization().
00212 { 00213 //add for geant4.8.1 00214 G4RegionStore::GetInstance()->SetWorldVolume(); 00215 00216 for(size_t i=0;i<G4RegionStore::GetInstance()->size();i++) 00217 { 00218 G4Region* region = (*(G4RegionStore::GetInstance()))[i]; 00219 //add for geant4.8.1 00220 if(region->GetWorldPhysical()!=bes3WorldVolume) continue; 00221 G4ProductionCuts* cuts = region->GetProductionCuts(); 00222 if(!cuts) 00223 { 00224 region->SetProductionCuts(G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); 00225 } 00226 } 00227 }
bool Ext_track::CheckVertexInsideWorld | ( | const Hep3Vector & | pos | ) | [private] |
Definition at line 325 of file Ext_track.cxx.
Referenced by Set().
00326 { 00327 G4Navigator* navigator= G4TransportationManager::GetTransportationManager()-> GetNavigatorForTracking(); 00328 00329 G4VPhysicalVolume* world= navigator-> GetWorldVolume(); 00330 G4VSolid* solid= world-> GetLogicalVolume()-> GetSolid(); 00331 EInside qinside= solid-> Inside(pos); 00332 00333 if( qinside != kInside) return false; 00334 else return true; 00335 }
void Ext_track::Dir | ( | const int | dir | ) | [inline] |
Modifiers for the track direction. (0/1)=(outgoing/incoming).
Definition at line 154 of file Ext_track.h.
References m_dir.
00154 { m_dir = dir; }
bool Ext_track::GeometryInitialization | ( | ) | [private] |
Definition at line 119 of file Ext_track.cxx.
References bes3WorldVolume, and myMsgFlag.
Referenced by Initialization().
00120 { 00121 if(myMsgFlag) cout << "Ext_track::GeometryInitialization()." << endl; 00122 00123 //for geant4.9.0, DefaultRegionForTheWorld has been defined in G4RunManagerKernel. 00124 /*G4RegionStore* rStore = G4RegionStore::GetInstance(); 00125 G4Region* defaultRegion=rStore->GetRegion("DefaultRegionForTheWorld",false); 00126 if(!defaultRegion) 00127 { 00128 defaultRegion=new G4Region("DefaultRegionForTheWorld"); 00129 defaultRegion->SetProductionCuts(G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); 00130 }*/ 00131 G4Region *defaultRegion=new G4Region("DefaultRegionForBesWorld"); 00132 defaultRegion->SetProductionCuts(G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); 00133 00134 // The world volume MUST NOT have a region defined by the user 00135 if(bes3WorldVolume->GetLogicalVolume()->GetRegion()) 00136 { 00137 if(bes3WorldVolume->GetLogicalVolume()->GetRegion()!=defaultRegion) 00138 { 00139 cout << "The world volume has a user-defined region <" 00140 << bes3WorldVolume->GetLogicalVolume()->GetRegion()->GetName() 00141 << ">." << G4endl; 00142 return 0; 00143 } 00144 } 00145 00146 // Remove old world logical volume from the default region, if exist 00147 if(defaultRegion->GetNumberOfRootVolumes()) 00148 { 00149 if(defaultRegion->GetNumberOfRootVolumes()>size_t(1)) 00150 { 00151 cout <<"DefaultRegionHasMoreThanOneVolume,Default world region should have a unique logical volume."<<endl; 00152 return 0; 00153 } 00154 std::vector<G4LogicalVolume*>::iterator lvItr = defaultRegion->GetRootLogicalVolumeIterator(); 00155 defaultRegion->RemoveRootLogicalVolume(*lvItr); 00156 cout << (*lvItr)->GetName() 00157 << " is removed from the default region." << endl; 00158 } 00159 00160 // Set the default region to the world 00161 G4LogicalVolume* bes3WorldLog = bes3WorldVolume->GetLogicalVolume(); 00162 bes3WorldLog->SetRegion(defaultRegion); 00163 defaultRegion->AddRootLogicalVolume(bes3WorldLog); 00164 00165 // Set the world volume, notify the Navigator and reset its state 00166 G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()->SetWorldVolume(bes3WorldVolume); 00167 00168 return 1; 00169 }
ExtSteppingAction* Ext_track::GetStepAction | ( | ) | [inline] |
Definition at line 90 of file Ext_track.h.
References extSteppingAction.
Referenced by TrkExtAlg::execute().
00090 {return extSteppingAction;};
void Ext_track::Initialization | ( | const bool | aMsgFlag, | |
const bool | Bfield, | |||
const bool | GeomOptimization, | |||
const bool | aUseMucKal, | |||
const int | aMucWindow | |||
) |
Definition at line 90 of file Ext_track.cxx.
References extPhysicsList, extSteppingAction, extTrackingManager, GeometryInitialization(), myBFieldOn, myGeomOptimization, myMsgFlag, myMucWindow, myUseMucKal, PhysicsInitialization(), ExtSteppingAction::SetMsgFlag(), ExtSteppingAction::SetMucKalFlag(), and ExtSteppingAction::SetMucWindow().
Referenced by TrkExtAlg::initialize().
00091 { 00092 myMsgFlag=aMsgFlag; 00093 myGeomOptimization = GeomOptimization; 00094 myBFieldOn=Bfield, 00095 myUseMucKal=aUseMucKal; 00096 myMucWindow = aMucWindow; 00097 //add for geant4.8.1 00098 G4ParticleTable::GetParticleTable()->SetReadiness(); 00099 extPhysicsList->ConstructParticle(); 00100 00101 if(myMsgFlag) cout << "Ext_track::Init will execute geant initialization." << endl; 00102 if(!GeometryInitialization()) cout << "Error in Ext_track::GeometryInitialization()" << endl; 00103 PhysicsInitialization(); 00104 00105 extSteppingAction = new ExtSteppingAction; 00106 extSteppingAction->SetMsgFlag(aMsgFlag); 00107 extSteppingAction->SetMucKalFlag(aUseMucKal); 00108 extSteppingAction->SetMucWindow(aMucWindow); 00109 //Set extSteppingAction 00110 extTrackingManager->SetUserAction(extSteppingAction); 00111 00112 00113 00114 }
bool Ext_track::PhysicsInitialization | ( | ) | [private] |
Definition at line 173 of file Ext_track.cxx.
References bes3WorldVolume, CheckRegions(), extPhysicsList, myGeomOptimization, and myMsgFlag.
Referenced by Initialization().
00174 { 00175 if(myMsgFlag) cout<<"Ext_track::PhysicsInitialization()."<<endl; 00176 // Following line is tentatively moved from SetPhysics method 00177 // G4ParticleTable::GetParticleTable()->SetReadiness(); 00178 00179 // extPhysicsList->ConstructParticle(); 00180 extPhysicsList->Construct(); 00181 extPhysicsList->SetCuts(); 00182 00183 CheckRegions(); 00184 00185 //update region 00186 G4RegionStore::GetInstance()->UpdateMaterialList(bes3WorldVolume); 00187 G4ProductionCutsTable::GetProductionCutsTable()->UpdateCoupleTable(bes3WorldVolume); 00188 00189 //Build PhysicsTables 00190 if(myMsgFlag) cout<<"Build PhysicsTables"<<endl; 00191 extPhysicsList->BuildPhysicsTable(); 00192 if(myMsgFlag) cout<<"Build PhysicsTables end."<<endl; 00193 G4ProductionCutsTable::GetProductionCutsTable()->PhysicsTableUpdated(); 00194 extPhysicsList->DumpCutValuesTableIfRequested(); 00195 00196 //Geometry Optimization 00197 if(myGeomOptimization) 00198 { 00199 cout<<"Geometry Optimization,please wait for a few minutes."<<endl; 00200 G4GeometryManager* geomManager = G4GeometryManager::GetInstance(); 00201 geomManager->OpenGeometry(); 00202 geomManager->CloseGeometry(true, false); 00203 } 00204 00205 return 1; 00206 }
bool Ext_track::Set | ( | const Hep3Vector & | xv3, | |
const Hep3Vector & | pv3, | |||
const HepSymMatrix & | err, | |||
const std::string & | particleName, | |||
const double | pathInMDC, | |||
const double | tofInMdc | |||
) |
Print out the contents of the error skip list.
Definition at line 235 of file Ext_track.cxx.
References CheckVertexInsideWorld(), extSteppingAction, extTrack, m_vect, m_xp_err, mass, ExtSteppingAction::MucReset(), Ext_xp_err::set_err(), ExtSteppingAction::SetBetaInMDC(), ExtSteppingAction::SetInitialPath(), ExtSteppingAction::SetInitialTof(), and ExtSteppingAction::SetXpErrPointer().
Referenced by TrkExtAlg::execute().
00236 { 00237 if( err.num_row() != 6 ){ // ?static const int Ndim_err=6, see Ext_errmx.h line58 00238 std::cerr << "%ERROR at Ext_track::Set. Dimension of error matrix: " 00239 << err.num_row() << " should be 6" << std::endl; 00240 exit( 0 ); 00241 } 00242 00243 m_vect[0] = xv3.x();// ?set starting position,private data 00244 m_vect[1] = xv3.y(); 00245 m_vect[2] = xv3.z(); 00246 00247 // m_errskip_flag = 0; 00248 // m_errskip_level = 0; 00249 00250 00251 // Check the starting point is inside the setup. 00252 if(!CheckVertexInsideWorld(xv3)) return 0; 00253 00254 float p( pv3.mag() ); 00255 m_vect[3] = pv3.x()/p; //?set direction of momentum 00256 m_vect[4] = pv3.y()/p; 00257 m_vect[5] = pv3.z()/p; 00258 m_vect[6] = p; 00259 00260 // check Particlename 00261 if(particleName!="e+"&&particleName!="e-"&& 00262 particleName!="mu+"&&particleName!="mu-"&& 00263 particleName!="pi+"&&particleName!="pi-"&& 00264 particleName!="kaon+"&&particleName!="kaon-"&& 00265 particleName!="proton"&&particleName!="anti_proton"&& 00266 particleName!="gamma") 00267 { 00268 std::cerr <<"Unknown or unconstructed Particle."<< std::endl; 00269 return 0; 00270 } 00271 00272 00273 double mass; 00274 double Q; 00275 00276 G4ParticleDefinition* particleDefinition=G4ParticleTable::GetParticleTable()->FindParticle(particleName); 00277 Q = particleDefinition->GetPDGCharge(); 00278 mass = particleDefinition->GetPDGMass(); 00279 00280 00281 Hep3Vector xv( m_vect[0], m_vect[1], m_vect[2] ); 00282 Hep3Vector pv(m_vect[3]*m_vect[6], m_vect[4]*m_vect[6], m_vect[5]*m_vect[6]); 00283 00284 m_xp_err.set_err( err, xv, pv, Q, mass ); // Set error matrix. 00285 00286 extSteppingAction->SetXpErrPointer(&m_xp_err); 00287 extSteppingAction->SetInitialPath(pathInMDC); 00288 extSteppingAction->SetInitialTof(tofInMdc); 00289 00290 double betaInMDC = p/sqrt(mass*mass+p*p);//velocity 00291 extSteppingAction->SetBetaInMDC(betaInMDC); 00292 // double tofInMDC = pathInMDC/(betaInMDC*299.792458); 00293 // if(myMsgFlag) cout<<"TOF in MDC: "<<tofInMDC<<endl; 00294 00295 // extSteppingAction->Reset(); 00296 extSteppingAction->MucReset(); 00297 // extTrack Initialization. 00298 00299 /* // comment 2008.04.07 due to memory loss 00300 // Initialize a G4PrimaryParticle. 00301 G4PrimaryParticle* primaryParticle = new G4PrimaryParticle(particleDefinition,pv3.x(),pv3.y(),pv3.z()); 00302 primaryParticle->SetMass(mass); 00303 primaryParticle->SetCharge(Q); 00304 00305 // Initialize a G4DynamicParticle. 00306 // G4DynamicParticle* DP = new G4DynamicParticle(particleDefinition,primaryParticle->GetMomentum()); 00307 // DP->SetPrimaryParticle(primaryParticle); 00308 */ 00309 G4DynamicParticle* DP = new G4DynamicParticle(particleDefinition,pv); 00310 00311 delete extTrack; // add on 2008.04.07 to avoid memory loss 00312 extTrack = new G4Track(DP,0.0,xv3); 00313 // extTrack->CopyTrackInfo(G4Track::G4Track(DP,0.0,xv3)); 00314 00315 // Reset navigator 00316 Hep3Vector center(0,0,0); 00317 G4Navigator* navigator= G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); 00318 navigator->LocateGlobalPointAndSetup(center,0,false); 00319 00320 return 1; 00321 }
void Ext_track::TrackExtrapotation | ( | ) |
Definition at line 343 of file Ext_track.cxx.
References extTrack, and extTrackingManager.
Referenced by TrkExtAlg::execute().
00344 { 00345 extTrackingManager->ProcessOneTrack(extTrack); 00346 }
G4VUserDetectorConstruction* Ext_track::bes3DetectorConstruction [private] |
G4VPhysicalVolume* Ext_track::bes3WorldVolume [private] |
Definition at line 128 of file Ext_track.h.
Referenced by CheckRegions(), Ext_track(), GeometryInitialization(), and PhysicsInitialization().
G4VUserPhysicsList* Ext_track::extPhysicsList [private] |
Definition at line 131 of file Ext_track.h.
Referenced by Ext_track(), Initialization(), PhysicsInitialization(), and ~Ext_track().
G4RunManagerKernel* Ext_track::extRunManagerKernel [private] |
ExtSteppingAction* Ext_track::extSteppingAction [private] |
Definition at line 137 of file Ext_track.h.
Referenced by GetStepAction(), Initialization(), and Set().
G4Track* Ext_track::extTrack [private] |
Definition at line 134 of file Ext_track.h.
Referenced by Ext_track(), Set(), TrackExtrapotation(), and ~Ext_track().
G4TrackingManager* Ext_track::extTrackingManager [private] |
Definition at line 140 of file Ext_track.h.
Referenced by Ext_track(), Initialization(), TrackExtrapotation(), and ~Ext_track().
int Ext_track::m_detVer [private] |
int Ext_track::m_dir [private] |
float Ext_track::m_vect[7] [private] |
Ext_xp_err Ext_track::m_xp_err [private] |
bool Ext_track::myBFieldOn [private] |
bool Ext_track::myGeomOptimization [private] |
Definition at line 111 of file Ext_track.h.
Referenced by Initialization(), and PhysicsInitialization().
bool Ext_track::myMsgFlag [private] |
Definition at line 110 of file Ext_track.h.
Referenced by GeometryInitialization(), Initialization(), and PhysicsInitialization().
int Ext_track::myMucWindow [private] |
bool Ext_track::myUseMucKal [private] |