Ext_track Class Reference

#include <Ext_track.h>

List of all members.

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)
ExtSteppingActionGetStepAction ()

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
ExtSteppingActionextSteppingAction
G4TrackingManager * extTrackingManager
G4RunManagerKernel * extRunManagerKernel


Detailed Description

Definition at line 40 of file Ext_track.h.


Constructor & Destructor Documentation

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 }


Member Function Documentation

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 }


Member Data Documentation

G4VUserDetectorConstruction* Ext_track::bes3DetectorConstruction [private]

Definition at line 127 of file Ext_track.h.

Referenced by Ext_track(), and ~Ext_track().

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]

Definition at line 143 of file Ext_track.h.

Referenced by Ext_track(), and ~Ext_track().

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]

Definition at line 113 of file Ext_track.h.

Referenced by Ext_track().

int Ext_track::m_dir [private]

Definition at line 117 of file Ext_track.h.

Referenced by Dir().

float Ext_track::m_vect[7] [private]

Definition at line 116 of file Ext_track.h.

Referenced by Set().

Ext_xp_err Ext_track::m_xp_err [private]

Definition at line 108 of file Ext_track.h.

Referenced by Set().

bool Ext_track::myBFieldOn [private]

Definition at line 112 of file Ext_track.h.

Referenced by Ext_track(), and Initialization().

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]

Definition at line 115 of file Ext_track.h.

Referenced by Initialization().

bool Ext_track::myUseMucKal [private]

Definition at line 114 of file Ext_track.h.

Referenced by Initialization().


Generated on Tue Nov 29 23:19:33 2016 for BOSS_7.0.2 by  doxygen 1.4.7