本文整理汇总了C++中TGeoVolume::GetMedium方法的典型用法代码示例。如果您正苦于以下问题:C++ TGeoVolume::GetMedium方法的具体用法?C++ TGeoVolume::GetMedium怎么用?C++ TGeoVolume::GetMedium使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TGeoVolume
的用法示例。
在下文中一共展示了TGeoVolume::GetMedium方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MakeDetectorDescriptors
//_____________________________________________________________________________
void StarMCHits::MakeDetectorDescriptors() {
if (! gGeoManager) {
cout << "No gGeoManager" << endl;
return;
}
TDataSet *Detectors = StMaker::GetChain()->GetDataBase("VmcGeometry/Index");
if (! Detectors) {
cout << "No Detectors found in VmcGeometry/Index" << endl;
}
// Make List of sensitive volumes
TObjArray *vols = gGeoManager->GetListOfVolumes();
Int_t nvol = vols->GetEntriesFast();
Int_t nSensVol = 0;
Int_t nsize = 100;
TArrayI Indx(nsize); Int_t *indx = Indx.GetArray();
for (Int_t i = 0; i < nvol; i++) {
TGeoVolume *vol = (TGeoVolume *) vols->At(i);
if (! vol) continue;
TGeoMedium *med = vol->GetMedium();
if (! med) continue;
Int_t isvol = (Int_t) med->GetParam(0);
if (! isvol) continue;
indx[nSensVol] = i;
nSensVol++;
if (nSensVol >= nsize) {
nsize *= 2;
Indx.Set(nsize);
indx = Indx.GetArray();
}
TString Path(MakeDetectorDescriptor(vol->GetName()));
if (Detectors) {
// Check consistency
StarVMCDetector *det = (StarVMCDetector *) Detectors->Find(vol->GetName());
if (! det) {
cout << "Detector description for " << vol->GetName() << "\t" << vol->GetTitle() << " is missing" << endl;
} else {
TString FMT = det->GetFMT();
cout << "Found path:\t" << Path.Data() << endl;
cout << "Set path:\t" << FMT.Data();
if (Path == FMT) cout << " are the same" << endl;
else cout << " are the different" << endl;
}
}
}
}
示例2: m
GeoHandler& GeoHandler::collect(DetElement element, GeometryInfo& info) {
m_data->clear();
i_collect(element.placement().ptr(), 0, Region(), LimitSet());
for (Data::const_reverse_iterator i = m_data->rbegin(); i != m_data->rend(); ++i) {
const Data::mapped_type& mapped = (*i).second;
for (Data::mapped_type::const_iterator j = mapped.begin(); j != mapped.end(); ++j) {
const TGeoNode* n = *j;
TGeoVolume* v = n->GetVolume();
if (v) {
Material m(v->GetMedium());
Volume vol = Ref_t(v);
// Note : assemblies and the world do not have a real volume nor a material
if (info.volumeSet.find(vol) == info.volumeSet.end()) {
info.volumeSet.insert(vol);
info.volumes.push_back(vol);
}
if (m.isValid())
info.materials.insert(m);
if (dynamic_cast<Volume::Object*>(v)) {
VisAttr vis = vol.visAttributes();
//Region reg = vol.region();
//LimitSet lim = vol.limitSet();
//SensitiveDetector det = vol.sensitiveDetector();
if (vis.isValid())
info.vis.insert(vis);
//if ( lim.isValid() ) info.limits[lim.ptr()].insert(v);
//if ( reg.isValid() ) info.regions[reg.ptr()].insert(v);
//if ( det.isValid() ) info.sensitives[det.ptr()].insert(v);
}
collectSolid(info, v->GetName(), n->GetName(), v->GetShape(), n->GetMatrix());
}
}
}
return *this;
}
示例3: Step
//________________________________________________________________________________
void StarMCHits::Step() {
// static Int_t Idevt0 = -1;
static Double_t Gold = 0;
#if 0
if (Debug() && gMC->IsA()->InheritsFrom("TGeant3TGeo")) {
TGeant3TGeo *geant3 = (TGeant3TGeo *)gMC;
geant3->Gdebug();
}
#endif
// cout << "Call StarMCHits::Step" << endl;
TGeoNode *nodeT = gGeoManager->GetCurrentNode();
assert(nodeT);
TGeoVolume *volT = nodeT->GetVolume();
assert(volT);
const TGeoMedium *med = volT->GetMedium();
/* fParams[0] = isvol;
fParams[1] = ifield;
fParams[2] = fieldm;
fParams[3] = tmaxfd;
fParams[4] = stemax;
fParams[5] = deemax;
fParams[6] = epsil;
fParams[7] = stmin; */
Int_t Isvol = (Int_t) med->GetParam(0);
fCurrentDetector = 0;
if (Isvol <= 0) return;
fCurrentDetector = (StarVMCDetector *) fVolUserInfo->At(volT->GetNumber());
if (! fCurrentDetector) {
volT = nodeT->GetMotherVolume();
fCurrentDetector = (StarVMCDetector *) fVolUserInfo->At(volT->GetNumber());
if (! fCurrentDetector) {
TString path(gGeoManager->GetPath());
TObjArray *obj = path.Tokenize("_/");
Int_t N = obj->GetEntries();
for (Int_t i = N-2; i >= 0; i -= 2) {
TObjString *o = (TObjString *) obj->At(i);
const Char_t *name = o->GetName();
volT = gGeoManager->GetVolume(name);
assert (volT);
fCurrentDetector = (StarVMCDetector *) fVolUserInfo->At(volT->GetNumber());
if (fCurrentDetector) break;
}
delete obj;
}
}
if (Isvol && ! fCurrentDetector && Debug()) {
cout << "Active medium:" << med->GetName() << "\t for volume " << volT->GetName()
<< " has no detector description" << endl;
}
// Int_t Idevt = gMC->CurrentEvent();
gMC->TrackPosition(fHit.Current.Global.xyzT);
gMC->TrackMomentum(fHit.Current.Global.pxyzE);
TGeoHMatrix *matrixC = gGeoManager->GetCurrentMatrix();
fHit.Current.Global2Local(matrixC);
if (gMC->IsTrackEntering()) {
fHit.Detector= fCurrentDetector;
fHit.Entry = fHit.Current;
fHit.Sleng = gMC->TrackLength();
fHit.Charge = (Int_t) gMC->TrackCharge();
fHit.Mass = gMC->TrackMass();
fHit.AdEstep = fHit.AStep = 0;
return;
}
Double_t GeKin = fHit.Current.Global.pxyzE.E() - fHit.Mass;
fHit.Sleng = gMC->TrackLength();
if (fHit.Sleng == 0.) Gold = GeKin;
Double_t dEstep = gMC->Edep();
Double_t Step = gMC->TrackStep();
fHit.iPart = gMC->TrackPid();
fHit.iTrack = StarVMCApplication::Instance()->GetStack()->GetCurrentTrackId(); // GetCurrentTrackNumber() + 1 to be consistent with g2t
// - - - - - - - - - - - - - energy correction - - - - - - - - - -
if (gMC->IsTrackStop() && TMath::Abs(fHit.iPart) == kElectron) {
TArrayI proc;
Int_t Nproc = gMC->StepProcesses(proc);
Int_t Mec = 0;
for (Int_t i = 0; i < Nproc; i++) if (proc[i] == kPAnnihilation || proc[i] == kPStop) Mec = proc[i];
Int_t Ngkine = gMC->NSecondaries();
if (fHit.iPart == kElectron && Ngkine == 0 && Mec == kPStop) dEstep = Gold;
else {
if (fHit.iPart == kPositron && Ngkine < 2 && Mec == kPAnnihilation) {
dEstep = Gold + 2*fHit.Mass;
if (Ngkine == 1) {
TLorentzVector x;
TLorentzVector p;
Int_t IpartSec;
gMC->GetSecondary(0,IpartSec,x,p);
dEstep -= p.E();
}
}
}
}
// - - - - - - - - - - - - - - - - user - - - - - - - - - - - - - - -
// user step
// - - - - - - - - - - - - - - - sensitive - - - - - - - - - - - - -
fHit.AdEstep += dEstep;
fHit.AStep += Step;
if (fHit.AdEstep == 0) return;
if (! gMC->IsTrackExiting() && ! gMC->IsTrackStop()) return;
fHit.Exit = fHit.Current;
//.........这里部分代码省略.........