From: morsch Date: Tue, 20 Dec 2005 12:23:41 +0000 (+0000) Subject: - Make sure that all cuts are taken into account independent of process flags. X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=commitdiff_plain;h=f79639f2f2b4a7b547339ffc9fc38f48096c8df0 - Make sure that all cuts are taken into account independent of process flags. - Special settings for sensitive media. --- diff --git a/TFluka/TFlukaConfigOption.cxx b/TFluka/TFlukaConfigOption.cxx index e8d7bb53ebf..64f4869161b 100644 --- a/TFluka/TFlukaConfigOption.cxx +++ b/TFluka/TFlukaConfigOption.cxx @@ -21,9 +21,13 @@ #include "TFlukaCerenkov.h" #include +#include #include #include #include +#include +#include +#include Float_t TFlukaConfigOption::fgMatMin(-1.); Float_t TFlukaConfigOption::fgMatMax(-1.); @@ -97,6 +101,14 @@ void TFlukaConfigOption::WriteFlukaInputCards() // Write the FLUKA input cards for the set of process flags and cuts // // + // + // Check if global option or medium specific + + Bool_t mediumIsSensitive = kFALSE; + TGeoMedium* med = 0x0; + TGeoMedium* medium = 0x0; + TGeoMaterial* mat = 0x0; + if (fMedium != -1) { TFluka* fluka = (TFluka*) gMC; fMedium = fgGeom->GetFlukaMaterial(fMedium); @@ -109,7 +121,8 @@ void TFlukaConfigOption::WriteFlukaInputCards() printf("Material not used !\n"); return; } - + // + // Find material TObjArray *matList = fluka->GetFlukaMaterials(); Int_t nmaterial = matList->GetEntriesFast(); TGeoMaterial* material = 0; @@ -118,11 +131,23 @@ void TFlukaConfigOption::WriteFlukaInputCards() material = dynamic_cast (matList->At(im)); Int_t idmat = material->GetIndex(); if (idmat == fMedium) break; - } - - -// -// Check if global option + } // materials + // + // Find medium + TList *medlist = gGeoManager->GetListOfMedia(); + TIter next(medlist); + while((med = (TGeoMedium*)next())) + { + mat = med->GetMaterial(); + if (mat->GetIndex() == fMedium) { + medium = med; + break; + } + } // media + // + // Check if sensitive + if (medium->GetParam(0) != 0.) mediumIsSensitive = kTRUE; + fprintf(fgFile,"*\n*Material specific process and cut settings for #%8d %s\n", fMedium, material->GetName()); fCMatMin = fMedium; @@ -135,7 +160,17 @@ void TFlukaConfigOption::WriteFlukaInputCards() // // Handle Process Flags +// +// +// First make sure that all cuts are taken into account + if (DefaultProcessFlag(kPAIR) > 0 && fProcessFlag[kPAIR] == -1 && (fCutValue[kCUTELE] >= 0. || fCutValue[kPPCUTM] >= 0.)) + fProcessFlag[kPAIR] = DefaultProcessFlag(kPAIR); + if (DefaultProcessFlag(kBREM) > 0 && fProcessFlag[kBREM] == -1 && (fCutValue[kBCUTE] >= 0. || fCutValue[kBCUTM] >= 0.)) + fProcessFlag[kBREM] = DefaultProcessFlag(kBREM); + if (DefaultProcessFlag(kDRAY) > 0 && fProcessFlag[kDRAY] == -1 && (fCutValue[kDCUTE] >= 0. || fCutValue[kDCUTM] >= 0.)) + fProcessFlag[kDRAY] = DefaultProcessFlag(kDRAY); // +// if (fProcessFlag[kDCAY] != -1) ProcessDCAY(); if (fProcessFlag[kPAIR] != -1) ProcessPAIR(); if (fProcessFlag[kBREM] != -1) ProcessBREM(); @@ -159,8 +194,13 @@ void TFlukaConfigOption::WriteFlukaInputCards() if (fCutValue[kCUTNEU] >= 0.) ProcessCUTNEU(); if (fCutValue[kCUTHAD] >= 0.) ProcessCUTHAD(); if (fCutValue[kCUTMUO] >= 0.) ProcessCUTMUO(); - +// +// Time of flight if (fCutValue[kTOFMAX] >= 0.) ProcessTOFMAX(); + +// +// Tracking precission + if (mediumIsSensitive) ProcessSensitiveMedium(); } void TFlukaConfigOption::ProcessDCAY() @@ -719,3 +759,18 @@ void TFlukaConfigOption::ProcessTOFMAX() fprintf(fgFile,"*\n*Cut on time of flight. TOFMAX = %13.4g\n", fCutValue[kTOFMAX]); fprintf(fgFile,"TIME-CUT %10.4g%10.1f%10.1f%10.1f%10.1f\n",cut*1.e9,0.,0.,-6.0,64.0); } + +void TFlukaConfigOption::ProcessSensitiveMedium() +{ + // + // Special options for sensitive media + // + + fprintf(fgFile,"*\n*Options for sensitive medium \n"); + // + // EMFFIX + fprintf(fgFile,"EMFFIX %10.1f%10.3f%10.1f%10.1f%10.1f%10.1f\n", fCMatMin, 0.05, 0., 0., 0., 0.); + // + // FLUKAFIX + fprintf(fgFile,"FLUKAFIX %10.3f %10.3f\n", 0.05, fCMatMin); +} diff --git a/TFluka/TFlukaConfigOption.h b/TFluka/TFlukaConfigOption.h index e422d068de7..b6ff968c62c 100644 --- a/TFluka/TFlukaConfigOption.h +++ b/TFluka/TFlukaConfigOption.h @@ -67,11 +67,13 @@ public: void ProcessCUTHAD(); void ProcessCUTMUO(); void ProcessTOFMAX(); + void ProcessSensitiveMedium(); // static void SetStaticInfo(FILE* file, Float_t matMin, Float_t matMax, TFlukaMCGeometry* geom) {fgFile = file; fgMatMin = matMin; fgMatMax = matMax; fgGeom = geom;} static Double_t DefaultCut(FlukaCutOption_t i) {return fgDCutValue[i];} + static Int_t DefaultProcessFlag(FlukaProcessOption_t i) {return fgDProcessFlag[i];} protected: Double_t fCutValue[11]; // User cut Int_t fProcessFlag[15]; // User flag assigned to processes