98 if (gMC->IsTrackEntering()) {
102 fTime = gMC->TrackTime() * 1.0e09;
103 fLength = gMC->TrackLength();
108 TLorentzVector PosIn;
109 gMC->TrackPosition(PosIn);
110 fPosIn.SetXYZ(PosIn.X(), PosIn.Y(), PosIn.Z());
111 gMC->TrackMomentum(fMom);
113 TParticle* part = gMC->GetStack()->GetCurrentTrack();
115 fIsPrimary = (Int_t)part->IsPrimary();
116 fCharge = (Int_t)part->GetPDG()->Charge();
117 fPdgId = (Int_t)part->GetPdgCode();
120 fVolumeID = vol->getMCid();
121 fPlaneNumber = gGeoManager->GetCurrentNode()->GetNumber();
122 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
126 fELoss += gMC->Edep();
129 if ((gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()) && fELoss >= 0) {
130 TLorentzVector PosOut;
131 gMC->TrackPosition(PosOut);
132 fPosOut.SetXYZ(PosOut.X(), PosOut.Y(), PosOut.Z());
135 TVector3 p1(0, 0, 0);
136 TVector3 p2(10, 0, 0);
139 p1 = LocalToGlobal(p1);
140 p2 = LocalToGlobal(p2);
141 Double_t phi = TMath::ATan2(p2.Y() - p1.Y(), p2.X() - p1.X());
144 TVector3 trackPosition(0, 0, 0);
148 DistAndPoints(fPosIn, fPosOut, fPos, trackPosition);
151 AddHit(fTrackID, fVolumeID, fPos, fPos.Perp(), TVector3(fMom.Px(), fMom.Py(), fMom.Pz()), fTime,
152 (fLength + gMC->TrackLength()) / 2, fELoss, fIsPrimary, fCharge, fPdgId, trackPosition);
206 Int_t nEntries = cl1->GetEntriesFast();
207 cout <<
"-I- BmnDch: " << nEntries <<
" entries to add." << endl;
208 TClonesArray& clref = *cl2;
211 for (Int_t
i = 0;
i < nEntries;
i++) {
213 Int_t index = oldpoint->GetTrackID() + offset;
214 oldpoint->SetTrackID(index);
219 cout <<
"-I- BmnDch: " << cl2->GetEntriesFast() <<
" merged entries." << endl;
244 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
245 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
247 DCHGeo->setGeomFile(GetGeometryFileName());
248 geoFace->addGeoModule(DCHGeo);
250 Bool_t rc = geoFace->readSet(DCHGeo);
252 DCHGeo->create(geoLoad->getGeoBuilder());
253 TList* volList = DCHGeo->getListOfVolumes();
255 FairRun* fRun = FairRun::Instance();
256 FairRuntimeDb* rtdb = FairRun::Instance()->GetRuntimeDb();
261 TListIter iter(volList);
262 FairGeoNode* node = NULL;
263 FairGeoVolume* aVol = NULL;
265 while ((node = (FairGeoNode*)iter.Next())) {
266 aVol =
dynamic_cast<FairGeoVolume*
>(node);
267 if (node->isSensitive()) {
268 fSensNodes->AddLast(aVol);
270 fPassNodes->AddLast(aVol);
274 par->setInputVersion(fRun->GetRunId(), 1);
275 ProcessNodes(volList);
387 Int_t maxInd = gGeoManager->GetListOfMedia()->GetEntries() - 1;
389 gdmlTop = parser.GDMLReadFile(GetGeometryFileName());
395 Int_t j = gGeoManager->GetListOfMedia()->GetEntries() - 1;
399 m = (TGeoMedium*)gGeoManager->GetListOfMedia()->At(j);
401 m->SetId(curId + maxInd);
405 Int_t newMaxInd = gGeoManager->GetListOfMedia()->GetEntries() - 1;
407 gGeoManager->GetTopVolume()->AddNode(gdmlTop, 1, 0);
408 ExpandNodeForGdml(gGeoManager->GetTopVolume()->GetNode(gGeoManager->GetTopVolume()->GetNdaughters() - 1));
410 for (Int_t k = maxInd + 1; k < newMaxInd + 1; k++) {
411 TGeoMedium* medToDel = (TGeoMedium*)(gGeoManager->GetListOfMedia()->At(maxInd + 1));
412 LOG(debug) <<
" removing media " << medToDel->GetName() <<
" with id " << medToDel->GetId() <<
" (k=" << k
414 gGeoManager->GetListOfMedia()->Remove(medToDel);
416 gGeoManager->SetAllIndex();
423 LOG(debug) <<
"----------------------------------------- ExpandNodeForGdml for node " << node->GetName();
425 TGeoVolume* curVol = node->GetVolume();
426 LOG(debug) <<
" volume: " << curVol->GetName();
428 if (curVol->IsAssembly())
429 LOG(debug) <<
" skipping volume-assembly";
431 TGeoMedium* curMed = curVol->GetMedium();
432 TGeoMaterial* curMat = curVol->GetMaterial();
433 TGeoMedium* curMedInGeoManager = gGeoManager->GetMedium(curMed->GetName());
434 TGeoMaterial* curMatOfMedInGeoManager = curMedInGeoManager->GetMaterial();
435 TGeoMaterial* curMatInGeoManager = gGeoManager->GetMaterial(curMat->GetName());
438 LOG(debug2) <<
" curMed\t\t\t\t" << curMed <<
"\t" << curMed->GetName() <<
"\t" << curMed->GetId();
439 LOG(debug2) <<
" curMat\t\t\t\t" << curMat <<
"\t" << curMat->GetName() <<
"\t" << curMat->GetIndex();
442 LOG(debug2) <<
" curMedInGeoManager\t\t" << curMedInGeoManager <<
"\t" << curMedInGeoManager->GetName()
443 <<
"\t" << curMedInGeoManager->GetId();
444 LOG(debug2) <<
" curMatOfMedInGeoManager\t\t" << curMatOfMedInGeoManager <<
"\t"
445 << curMatOfMedInGeoManager->GetName() <<
"\t" << curMatOfMedInGeoManager->GetIndex();
446 LOG(debug2) <<
" curMatInGeoManager\t\t" << curMatInGeoManager <<
"\t" << curMatInGeoManager->GetName()
447 <<
"\t" << curMatInGeoManager->GetIndex();
449 TString matName = curMat->GetName();
450 TString medName = curMed->GetName();
452 if (curMed->GetId() != curMedInGeoManager->GetId()) {
454 LOG(debug) <<
" Medium needs to be fixed";
456 Int_t ind = curMat->GetIndex();
457 gGeoManager->RemoveMaterial(ind);
458 LOG(debug) <<
" removing material " << curMat->GetName() <<
" with index " << ind;
459 for (Int_t
i = ind;
i < gGeoManager->GetListOfMaterials()->GetEntries();
i++) {
460 TGeoMaterial*
m = (TGeoMaterial*)gGeoManager->GetListOfMaterials()->At(
i);
461 m->SetIndex(
m->GetIndex() - 1);
464 LOG(debug) <<
" Medium fixed";
466 LOG(debug) <<
" Already fixed medium found in the list ";
470 LOG(debug) <<
" There is no correct medium in the memory yet";
472 FairGeoLoader* geoLoad = FairGeoLoader::Instance();
473 FairGeoInterface* geoFace = geoLoad->getGeoInterface();
474 FairGeoMedia* geoMediaBase = geoFace->getMedia();
475 FairGeoBuilder* geobuild = geoLoad->getGeoBuilder();
477 FairGeoMedium* curMedInGeo = geoMediaBase->getMedium(medName);
478 if (curMedInGeo == 0) {
479 LOG(fatal) <<
" Media not found in Geo file: " << medName;
484 LOG(debug) <<
" Found media in Geo file" << medName;
485 geobuild->createMedium(curMedInGeo);
486 fFixedMedia[medName] = (TGeoMedium*)gGeoManager->GetListOfMedia()->Last();
487 gGeoManager->RemoveMaterial(curMatOfMedInGeoManager->GetIndex());
488 LOG(debug) <<
" removing material " << curMatOfMedInGeoManager->GetName() <<
" with index "
489 << curMatOfMedInGeoManager->GetIndex();
490 for (Int_t
i = curMatOfMedInGeoManager->GetIndex();
491 i < gGeoManager->GetListOfMaterials()->GetEntries();
i++)
493 TGeoMaterial*
m = (TGeoMaterial*)gGeoManager->GetListOfMaterials()->At(
i);
494 m->SetIndex(
m->GetIndex() - 1);
498 if (curMedInGeo->getSensitivityFlag()) {
499 LOG(debug) <<
" Adding sensitive " << curVol->GetName();
500 AddSensitiveVolume(curVol);
503 LOG(debug) <<
" Already fixed medium found in the list";
504 LOG(debug) <<
"!!! Sensitivity: " <<
fFixedMedia[medName]->GetParam(0);
506 LOG(debug) <<
" Adding sensitive " << curVol->GetName();
507 AddSensitiveVolume(curVol);
513 gGeoManager->SetAllIndex();
520 if (curVol->GetNdaughters() != 0) {
521 TObjArray* NodeChildList = curVol->GetNodes();
522 TGeoNode* curNodeChild;
523 for (Int_t j = 0; j < NodeChildList->GetEntriesFast(); j++) {
524 curNodeChild = (TGeoNode*)NodeChildList->At(j);
563 BmnDchPoint(trackID, detID, pos, radius, mom, time, length, eLoss, isPrimary, charge, pdgId, trackPos);