void fw_simGeo_set_material_titles(Double_t fraction=0, Bool_t long_names=false) { TGeoMaterial *m; TIter it(FWGeometryTableViewManager_GetGeoManager()->GetListOfMaterials()); while ((m = (TGeoMaterial*) it()) != 0) { TString tit(":"); TGeoMixture *mix = dynamic_cast<TGeoMixture*>(m); if (mix == 0) { TGeoElement *e = m->GetBaseElement(); tit += long_names ? e->GetTitle() : e->GetName(); tit += ":"; } else { Double_t *ww = mix->GetWmixt(); for (Int_t i = 0; i < mix->GetNelements(); ++i) { if (ww[i] >= fraction) { TGeoElement *e = mix->GetElement(i); tit += long_names ? e->GetTitle() : e->GetName(); tit += ":"; } } } if (tit == ":") tit += ":"; m->SetTitle(tit); } }
void KVFAZIA::Build(Int_t) { // Build the combined INDRA & FAZIA arrays GetGeometryParameters(); GenerateCorrespondanceFile(); if (!gGeoManager) { new TGeoManager("FAZIA", Form("FAZIA geometry for dataset %s", gDataSet->GetName())); TGeoMaterial* matVacuum = gGeoManager->GetMaterial("Vacuum"); if (!matVacuum) { matVacuum = new TGeoMaterial("Vacuum", 0, 0, 0); matVacuum->SetTitle("Vacuum"); } TGeoMedium* Vacuum = gGeoManager->GetMedium("Vacuum"); if (!Vacuum) Vacuum = new TGeoMedium("Vacuum", 1, matVacuum); TGeoVolume* top = gGeoManager->MakeBox("WORLD", Vacuum, 500, 500, 500); gGeoManager->SetTopVolume(top); } BuildFAZIA(); if (fBuildTarget) BuildTarget(); KVGeoImport imp(gGeoManager, KVMaterial::GetRangeTable(), this, kTRUE); imp.SetDetectorPlugin(ClassName()); imp.SetNameCorrespondanceList(fCorrespondanceFile.Data()); // any additional structure name formatting definitions DefineStructureFormats(imp); // the following parameters are optimized for a 12-block compact // geometry placed at 80cm with rings 1-5 of INDRA removed. // make sure that the expected number of detectors get imported! imp.ImportGeometry(fImport_dTheta, fImport_dPhi, fImport_ThetaMin, fImport_PhiMin, fImport_ThetaMax, fImport_PhiMax); /* KVFAZIADetector* det=0; TIter next_d(GetDetectors()); while ( det = (KVFAZIADetector* )next_d() ){ printf("%s %s %d %d %d\n",det->GetName(),det->GetFAZIAType(),det->GetBlockNumber(),det->GetQuartetNumber(),det->GetTelescopeNumber()); } */ SetIdentifications(); SortIDTelescopes(); KVDetector* det = GetDetector("SI2-T1-Q1-B001"); det->GetIDTelescopes()->ls(); SetDetectorThicknesses(); SetBit(kIsBuilt); }
TGeoMedium* KVSpectroDetector::GetGeoMedium(const Char_t* mat_name){ // By default, return pointer to TGeoMedium corresponding to this KVMaterial. // If argument "mat_name" is given, a pointer to a medium is return for this material. // mat_name = "Vacuum" is a special case: if the "Vacuum" does not exist, we create it. // // Instance of geometry manager class TGeoManager must be created before calling this // method, otherwise 0x0 will be returned. // If the required TGeoMedium is not already available in the TGeoManager, we create // a new TGeoMedium corresponding to the material given in argument. if( !gGeoManager ) return NULL; TString medName, matName; if( !strcmp(mat_name,"") ){ // for gaseous materials, the TGeoMedium/Material name is of the form // gasname_pressure // e.g. C3F8_37.5 for C3F8 gas at 37.5 torr // each gas with different pressure has to have a separate TGeoMaterial/Medium matName = GetName(); KVIonRangeTableMaterial* irmat = KVMaterial::GetRangeTable()->GetMaterial(matName.Data()); if(irmat->IsGas()) medName.Form("%s_%f", matName.Data(), GetPressure()); else medName = GetName(); } else{ matName = mat_name; medName = mat_name; } TGeoMedium* gmed = gGeoManager->GetMedium( medName); if( gmed ) return gmed; TGeoMaterial *gmat = gGeoManager->GetMaterial( medName); if( !gmat ){ if( !strcmp(matName.Data(), "Vacuum") ){ // create material gmat = new TGeoMaterial("Vacuum",0,0,0 ); } else{ // create material gmat = GetRangeTable()->GetTGeoMaterial(matName.Data()); if(!gmat){ Error("GetGeoMedium","Material %s is nowhere to be found in %s" ,matName.Data(),GetRangeTable()->GetName()); return NULL; } gmat->SetPressure( GetPressure() ); gmat->SetTemperature( GetTemperature() ); gmat->SetTransparency(0); } } // For the moment the names of material and medium do not // depend on the temperature of the material. gmat->SetName(medName); gmat->SetTitle(matName); // create medium TGeoMedium* lastmed = (TGeoMedium*)gGeoManager->GetListOfMedia()->Last(); Int_t numed = (lastmed ? lastmed->GetId()+1 : 0); // static counter variable used to number media gmed = new TGeoMedium( medName, numed, gmat ); numed+=1; return gmed; }
TGeoMedium* KVMaterial::GetGeoMedium(const Char_t* med_name) { // By default, return pointer to TGeoMedium corresponding to this KVMaterial. // If argument "med_name" is given and corresponds to the name of an already existing // medium, we return a pointer to this medium, or 0x0 if it does not exist. // med_name = "Vacuum" is a special case: if the "Vacuum" does not exist, we create it. // // Instance of geometry manager class TGeoManager must be created before calling this // method, otherwise 0x0 will be returned. // If the required TGeoMedium is not already available in the TGeoManager, we create // a new TGeoMedium corresponding to the properties of this KVMaterial. // The name of the TGeoMedium (and associated TGeoMaterial) is the name of the KVMaterial. if (!gGeoManager) return NULL; if (strcmp(med_name, "")) { TGeoMedium* gmed = gGeoManager->GetMedium(med_name); if (gmed) return gmed; else if (!strcmp(med_name, "Vacuum")) { // create material TGeoMaterial* gmat = new TGeoMaterial("Vacuum", 0, 0, 0); gmat->SetTitle("Vacuum"); gmed = new TGeoMedium("Vacuum", 0, gmat); gmed->SetTitle("Vacuum"); return gmed; } return NULL; } // if object is a KVDetector, we return medium corresponding to the active layer if (GetActiveLayer()) return GetActiveLayer()->GetGeoMedium(); // for gaseous materials, the TGeoMedium/Material name is of the form // gasname_pressure // e.g. C3F8_37.5 for C3F8 gas at 37.5 torr // each gas with different pressure has to have a separate TGeoMaterial/Medium TString medName; if (IsGas()) medName.Form("%s_%f", GetName(), GetPressure()); else medName = GetName(); TGeoMedium* gmed = gGeoManager->GetMedium(medName); if (gmed) return gmed; TGeoMaterial* gmat = gGeoManager->GetMaterial(medName); if (!gmat) { // create material gmat = GetRangeTable()->GetTGeoMaterial(GetName()); gmat->SetPressure(GetPressure()); gmat->SetTemperature(GetTemperature()); gmat->SetTransparency(0); gmat->SetName(medName); gmat->SetTitle(GetName()); } // create medium static Int_t numed = 1; // static counter variable used to number media gmed = new TGeoMedium(medName, numed, gmat); numed += 1; return gmed; }