|
|
|
@ -153,8 +153,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
// Define rotation matrix, which might be later on used for some volumes
|
|
|
|
|
if (strcmp(tmpString1,"rotation")==0){
|
|
|
|
|
char matrixName[100]="Unset";
|
|
|
|
|
float pp1, pp2, pp3, pp4=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %s %g %g %g %g",matrixName,&pp1,&pp2,&pp3,&pp4);
|
|
|
|
|
double pp1, pp2, pp3, pp4=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %s %lf %lf %lf %lf",matrixName,&pp1,&pp2,&pp3,&pp4);
|
|
|
|
|
if (pp4==0) {
|
|
|
|
|
G4RotationMatrix* pRotMatrix = new G4RotationMatrix(pp1*deg,pp2*deg,pp3*deg); // pp1=phi, pp2=theta, pp3=psi
|
|
|
|
|
pointerToRotationMatrix[matrixName]=pRotMatrix;
|
|
|
|
@ -167,8 +167,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else if (strcmp(tmpString1,"construct")==0){
|
|
|
|
|
float x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0,x9=0,x10=0,x11,x12;
|
|
|
|
|
float posx,posy,posz;
|
|
|
|
|
double x1=0,x2=0,x3=0,x4=0,x5=0,x6=0,x7=0,x8=0,x9=0,x10=0,x11,x12;
|
|
|
|
|
double posx,posy,posz;
|
|
|
|
|
char name[100];
|
|
|
|
|
char mothersName[100];
|
|
|
|
|
char material[100];
|
|
|
|
@ -181,49 +181,51 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
char actualFieldName[100]="nofield";
|
|
|
|
|
|
|
|
|
|
if (strcmp(tmpString2,"tubs")==0){
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
solid = new G4Tubs(solidName,x1*mm,x2*mm,x3*mm,x4*deg,x5*deg);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"cons")==0){
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,&x7,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
solid = new G4Cons(solidName,x1*mm,x2*mm,x3*mm,x4*mm,x5*mm,x6*deg,x7*deg);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"box")==0){
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
// sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
// G4cout<<"DEBUG KAMIL: xxx1="<<xxx1<<", xxx2="<<xxx2<<", xxx3="<<xxx3<<G4endl;
|
|
|
|
|
solid = new G4Box(solidName,x1*mm,x2*mm,x3*mm);
|
|
|
|
|
}
|
|
|
|
|
else if ((strcmp(tmpString2,"trd")==0)||(strcmp(tmpString2,"trd90y")==0)) {
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
solid = new G4Trd(solidName,x1*mm,x2*mm,x3*mm,x4*mm,x5*mm);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"sphere")==0){
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
solid = new G4Sphere(solidName,x1*mm,x2*mm,x3*deg,x4*deg,x5*deg,x6*deg);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"para")==0){ // NOT YET TESTED
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
solid = new G4Para(solidName,x1*mm,x2*mm,x3*mm,x4*deg,x5*deg,x6*deg);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"cylpart")==0){ // Volume introduced by Pavel Bakule on 12 May 2009
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -236,7 +238,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
// Create a U-profile geometry. x1, x2, x3 define the outer dimensions of the U-profile (as a box),
|
|
|
|
|
// x4 is the wall thickness of the U-profile. The centre of the U-profile
|
|
|
|
|
// is in the centre of the box defined by x1,x2,x3.
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -252,7 +254,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
else if (strcmp(tmpString2,"alcSupportPlate")==0){
|
|
|
|
|
// Create an ALC holder geometry: x1 half-width of the holder (as a box),
|
|
|
|
|
// x2 half-height of the spacer
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -289,7 +291,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
// | |
|
|
|
|
|
// ----------
|
|
|
|
|
// First 5 parameters as for the outer tube, the 6th parameter is the depth of the hole.
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -316,7 +318,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
// | |
|
|
|
|
|
// ----------
|
|
|
|
|
// First 5 parameters as for the outer tube, the 6th parameter is the depth of the hole.
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,&x7,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -330,7 +332,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"tubsbox")==0){
|
|
|
|
|
// Create a tube, from which center a box is cut out. x1=box half-width; x2,x3,x4,x5 define the tube.
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -343,9 +345,9 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
// Create a box, from which a box is cut out. x1, x2, x3 = box half-widths;
|
|
|
|
|
// x4,x5,x6,x7 define the tube, x8, x9 and x10 are the distances between the tube and box centres.
|
|
|
|
|
// x11, x12 are the half-withs of the ractangular opening in the collimator
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %g %g %g %g %g %g %g %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,&x6,&x7,&x8,&x9,&x10,&x11,&x12,material);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*s %g %g %g %s %s %s %d %s",&posx,&posy,&posz,mothersName,rotMatrix,sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*g %*s %lf %lf %lf %s %s %s %d %s",&posx,&posy,&posz,mothersName,rotMatrix,sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
|
G4Box* solidDetBox = new G4Box("SolidDetBox",x1*mm,x2*mm,x3*mm);
|
|
|
|
|
G4Box* solidHole = new G4Box("SolidDetBox",x11*mm,x2*mm+0.1,x12*mm);
|
|
|
|
@ -358,7 +360,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
else if (strcmp(tmpString2,"tubsboxsegm")==0){
|
|
|
|
|
// Create a volume that looks like an intersection of tube and box.
|
|
|
|
|
char orientation[100];
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %s %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %s %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,orientation,&x1,&x2,&x3,&x4,&x5,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*s %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d %s",sensitiveDet,&volumeID,actualFieldName);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -381,7 +383,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
else if (strcmp(tmpString2,"GPDsampleHolderA")==0){
|
|
|
|
|
// First part of the GPD sample holder, where posx, posy, posz = centre of the whole (long) tube
|
|
|
|
|
// (=111.25mm below the centre of the holes)
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,&x4,&x5,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d",sensitiveDet,&volumeID);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -405,7 +407,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"GPDmHolder")==0){
|
|
|
|
|
// Light guide that holds m0 in its position
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g %s %g %g %g %s %s",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf %s %lf %lf %lf %s %s",
|
|
|
|
|
name,&x1,&x2,&x3,material,&posx,&posy,&posz,mothersName,rotMatrix);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*g %*g %*g %*s %*g %*g %*g %*s %*s %s %d",sensitiveDet,&volumeID);
|
|
|
|
|
solidName+=name;
|
|
|
|
@ -641,18 +643,21 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
G4OpticalSurfaceFinish OpticalFinish = OpticalFinishMap[finish];
|
|
|
|
|
if ((OpticalType==0)&&(strcmp(type,"dielectric_metal")!=0)) {
|
|
|
|
|
G4cout<<"ERROR! musrDetectorConstruction::Construct(): Optical type \""<<type<<"\" not found!"<<G4endl;
|
|
|
|
|
G4cout<<" (Maybe it exists in Geant4 but was not added to musrSim ==> update musrDetectorConstruction.cc file!)"<< G4endl;
|
|
|
|
|
G4cout << " ==> S T O P F O R C E D"<<G4endl;
|
|
|
|
|
G4cout<<" "<<line;
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
if ((OpticalModel==0)&&(strcmp(model,"glisur")!=0)) {
|
|
|
|
|
G4cout<<"ERROR! musrDetectorConstruction::Construct(): Optical surface model \""<<model<<"\" not found!"<<G4endl;
|
|
|
|
|
G4cout<<" (Maybe it exists in Geant4 but was not added to musrSim ==> update musrDetectorConstruction.cc file!)"<< G4endl;
|
|
|
|
|
G4cout << " ==> S T O P F O R C E D"<<G4endl;
|
|
|
|
|
G4cout<<" "<<line;
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
if ((OpticalFinish==0)&&(strcmp(finish,"polished")!=0)) {
|
|
|
|
|
G4cout<<"ERROR! musrDetectorConstruction::Construct(): Optical surface finish \""<<finish<<"\" not found!"<<G4endl;
|
|
|
|
|
G4cout<<" (Maybe it exists in Geant4 but was not added to musrSim ==> update musrDetectorConstruction.cc file!)"<< G4endl;
|
|
|
|
|
G4cout << " ==> S T O P F O R C E D"<<G4endl;
|
|
|
|
|
G4cout<<" "<<line;
|
|
|
|
|
exit(1);
|
|
|
|
@ -663,7 +668,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
optSurfTMP->SetFinish(OpticalFinish);
|
|
|
|
|
optSurfTMP->SetModel(OpticalModel);
|
|
|
|
|
// Assign the "Material properties table" if required by the user:
|
|
|
|
|
G4cout<<"materialPropertiesTableName="<<materialPropertiesTableName<<G4endl;
|
|
|
|
|
// G4cout<<"materialPropertiesTableName="<<materialPropertiesTableName<<G4endl;
|
|
|
|
|
if (strcmp(materialPropertiesTableName,"Undefined")!=0) {
|
|
|
|
|
G4MaterialPropertiesTable* MPT_tmp=NULL;
|
|
|
|
|
itMPT = materialPropertiesTableMap.find(materialPropertiesTableName);
|
|
|
|
@ -679,8 +684,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
MPT_tmp = itMPT->second;
|
|
|
|
|
}
|
|
|
|
|
optSurfTMP->SetMaterialPropertiesTable(MPT_tmp);
|
|
|
|
|
G4cout<<optSurfTMP<<G4endl;
|
|
|
|
|
optSurfTMP->GetMaterialPropertiesTable()->DumpTable();
|
|
|
|
|
// optSurfTMP->GetMaterialPropertiesTable()->DumpTable();
|
|
|
|
|
}
|
|
|
|
|
G4cout<<"Optical surface \""<<optSurfaceName<<"\" created. OpticalType="<<OpticalType
|
|
|
|
|
<<" OpticalFinish="<<OpticalFinish<<" OpticalModel="<<OpticalModel<<G4endl;
|
|
|
|
@ -695,7 +699,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
musrErrorMessage::GetInstance()->musrError(FATAL,eMessage,false);
|
|
|
|
|
}
|
|
|
|
|
char varName[100];
|
|
|
|
|
float fVarValue;
|
|
|
|
|
double fVarValue;
|
|
|
|
|
int iVarValue;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %s",varName);
|
|
|
|
|
if (strcmp(varName,"minNrOfDetectedPhotons")==0) {
|
|
|
|
@ -703,12 +707,12 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
myMusrScintSD -> Set_OPSA_minNrOfDetectedPhotons(iVarValue);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(varName,"signalSeparationTime")==0) {
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %g",&fVarValue);
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %lf",&fVarValue);
|
|
|
|
|
myMusrScintSD -> Set_OPSA_SignalSeparationTime(fVarValue*nanosecond);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(varName,"photonFractions")==0) {
|
|
|
|
|
float a, b, c, d, e;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %g %g %g %g %g",&a, &b, &c, &d, &e);
|
|
|
|
|
double a, b, c, d, e;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %lf %lf %lf %lf %lf",&a, &b, &c, &d, &e);
|
|
|
|
|
myMusrScintSD -> Set_OPSA_frac(a,b,c,d,e);
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(varName,"eventsForOPSAhistos")==0) {
|
|
|
|
@ -718,8 +722,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(varName,"OPSAhist")==0) {
|
|
|
|
|
int nBins;
|
|
|
|
|
float min, max;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %d %g %g",&nBins,&min,&max);
|
|
|
|
|
double min, max;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %d %lf %lf",&nBins,&min,&max);
|
|
|
|
|
myMusrScintSD -> SetOPSAhistoBinning(nBins,min*nanosecond,max*nanosecond);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -734,18 +738,18 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
(void)F04GlobalField::getObject();
|
|
|
|
|
|
|
|
|
|
char typeOfField[100]="Unset";
|
|
|
|
|
float pp1=0; float pp2=0; float pp3=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %g %g %g %s",&pp1,&pp2,&pp3,typeOfField);
|
|
|
|
|
double pp1=0, pp2=0, pp3=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %lf %lf %lf %s",&pp1,&pp2,&pp3,typeOfField);
|
|
|
|
|
G4ThreeVector position = G4ThreeVector(pp1,pp2,pp3);
|
|
|
|
|
float fieldValue=0.000000001;
|
|
|
|
|
float fieldValueFinal=0;
|
|
|
|
|
double fieldValue=0.000000001;
|
|
|
|
|
double fieldValueFinal=0;
|
|
|
|
|
int fieldNrOfSteps=0;
|
|
|
|
|
// if (strcmp(tmpString2,"magnetic")==0){
|
|
|
|
|
if (strcmp(typeOfField,"fromfile")==0) {
|
|
|
|
|
char fieldInputFileName[100];
|
|
|
|
|
char fieldTableType[100];
|
|
|
|
|
char logicalVolumeName[100];
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %s %s %s %g %g %d",fieldTableType,fieldInputFileName,logicalVolumeName,
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %s %s %s %lf %lf %d",fieldTableType,fieldInputFileName,logicalVolumeName,
|
|
|
|
|
&fieldValue,&fieldValueFinal,&fieldNrOfSteps);
|
|
|
|
|
// Find out the logical volume, to which the field will be placed:
|
|
|
|
|
G4LogicalVolume* logVol = FindLogicalVolume(logicalVolumeName);
|
|
|
|
@ -770,19 +774,17 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (strcmp(typeOfField,"uniform")==0) {
|
|
|
|
|
float fieldValue[6];
|
|
|
|
|
double fieldValue[6];
|
|
|
|
|
char logicalVolumeName[100];
|
|
|
|
|
float positionX, positionY, positionZ;
|
|
|
|
|
double positionX, positionY, positionZ;
|
|
|
|
|
G4double half_x = pp1; // halfwith of the box with the field
|
|
|
|
|
G4double half_y = pp2; // halfhight of the box with the field
|
|
|
|
|
G4double half_z = pp3; // halflenght of the box with the field
|
|
|
|
|
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %g %g %g %s %g %g %g %g %g %g",
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %lf %lf %lf %s %lf %lf %lf %lf %lf %lf",
|
|
|
|
|
&positionX, &positionY, &positionZ, logicalVolumeName,
|
|
|
|
|
&fieldValue[0],&fieldValue[1],&fieldValue[2],&fieldValue[3],&fieldValue[4],&fieldValue[5]);
|
|
|
|
|
G4ThreeVector position = G4ThreeVector(positionX,positionY,positionZ);
|
|
|
|
|
//old sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %s %g %g %g %g %g %g", ////// %g %d",
|
|
|
|
|
//old logicalVolumeName, &fieldValue[0],&fieldValue[1],&fieldValue[2],&fieldValue[3],&fieldValue[4],&fieldValue[5]);
|
|
|
|
|
G4LogicalVolume* logVol = FindLogicalVolume(logicalVolumeName);
|
|
|
|
|
if (logVol==NULL) {
|
|
|
|
|
sprintf(eMessage,"musrDetectorConstruction.cc::Construct(): GLOBAL FIELD (uniform): Logical volume \"%s\" not found.", logicalVolumeName);
|
|
|
|
@ -797,10 +799,10 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (strcmp(typeOfField,"quadrupole")==0) {
|
|
|
|
|
float halfLength, fieldRadius, gradientValue, gradientValueFinal, fringeFactor;
|
|
|
|
|
double halfLength, fieldRadius, gradientValue, gradientValueFinal, fringeFactor;
|
|
|
|
|
int gradientNrOfSteps = 0;
|
|
|
|
|
char logicalVolumeName[100];
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %g %g %g %s %g %g %d",&halfLength,&fieldRadius,&fringeFactor,logicalVolumeName,
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*g %*g %*g %*s %lf %lf %lf %s %lf %lf %d",&halfLength,&fieldRadius,&fringeFactor,logicalVolumeName,
|
|
|
|
|
&gradientValue,&gradientValueFinal,&gradientNrOfSteps);
|
|
|
|
|
G4LogicalVolume* logVol = FindLogicalVolume(logicalVolumeName);
|
|
|
|
|
if (logVol==NULL) {
|
|
|
|
@ -831,8 +833,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
char parameterName[100];
|
|
|
|
|
float parameterValue;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g",parameterName,¶meterValue);
|
|
|
|
|
double parameterValue;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf",parameterName,¶meterValue);
|
|
|
|
|
if (strcmp(parameterName,"SetDeltaIntersection")==0){ fieldMgr->SetDeltaIntersection(parameterValue*mm); }
|
|
|
|
|
else if (strcmp(parameterName,"SetDeltaOneStep")==0){ fieldMgr->SetDeltaOneStep(parameterValue*mm); }
|
|
|
|
|
else if (strcmp(parameterName,"SetMinimumEpsilonStep")==0){ fieldMgr->SetMinimumEpsilonStep(parameterValue); }
|
|
|
|
@ -872,8 +874,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if ((strcmp(tmpString2,"printFieldValueAtPoint")==0)||(strcmp(tmpString2,"printFieldDerivativeAtPoint")==0)) { // Print the fieldvalue at the given point
|
|
|
|
|
float p0, p1, p2;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %g %g %g",&p0,&p1,&p2);
|
|
|
|
|
double p0, p1, p2;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %lf %lf %lf",&p0,&p1,&p2);
|
|
|
|
|
if (F04GlobalField::Exists()) {
|
|
|
|
|
F04GlobalField* myGlobalField = F04GlobalField::getObject();
|
|
|
|
|
if (myGlobalField) {
|
|
|
|
@ -901,13 +903,13 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
<< tmpString2 <<"\" not found!"<<G4endl<<"S T O P F O R C E D"<<G4endl;
|
|
|
|
|
ReportGeometryProblem(line);
|
|
|
|
|
}
|
|
|
|
|
// float maxStep, ;
|
|
|
|
|
float ustepMax = -1;
|
|
|
|
|
float utrakMax = -1;
|
|
|
|
|
float utimeMax = -1;
|
|
|
|
|
float uekinMin = -1;
|
|
|
|
|
float urangMin = -1;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %g %g %g %g %g", &ustepMax, &utrakMax, &utimeMax, &uekinMin, &urangMin);
|
|
|
|
|
|
|
|
|
|
double ustepMax = -1;
|
|
|
|
|
double utrakMax = -1;
|
|
|
|
|
double utimeMax = -1;
|
|
|
|
|
double uekinMin = -1;
|
|
|
|
|
double urangMin = -1;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %lf %lf %lf %lf %lf", &ustepMax, &utrakMax, &utimeMax, &uekinMin, &urangMin);
|
|
|
|
|
G4UserLimits* myUserLimits = new G4UserLimits();
|
|
|
|
|
G4cout<<"musrDetectorConstruction.cc: G4UserLimits in "<<tmpString2<<": ";
|
|
|
|
|
if (ustepMax>0) {myUserLimits->SetMaxAllowedStep(ustepMax*mm); G4cout<<"ustepMax = "<<ustepMax<<" mm, ";}
|
|
|
|
@ -969,14 +971,14 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
else if (strcmp(tmpString1,"signalSeparationTime")==0){
|
|
|
|
|
float timeSeparation;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %g",&timeSeparation);
|
|
|
|
|
double timeSeparation;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %lf",&timeSeparation);
|
|
|
|
|
musrParameters::signalSeparationTime = timeSeparation*nanosecond;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else if (strcmp(tmpString1,"maximumRunTimeAllowed")==0){ // in seconds
|
|
|
|
|
float timeMax;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %g",&timeMax);
|
|
|
|
|
double timeMax;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %lf",&timeMax);
|
|
|
|
|
musrEventAction::maximumRunTimeAllowed = timeMax;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1031,8 +1033,8 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
}
|
|
|
|
|
else if (strcmp(tmpString2,"setProductionCut")==0) {
|
|
|
|
|
char charRegionName[100];
|
|
|
|
|
float fGammaCut=0, fElectronCut=0, fPositronCut=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %g %g %g",charRegionName,&fGammaCut,&fElectronCut,&fPositronCut);
|
|
|
|
|
double fGammaCut=0, fElectronCut=0, fPositronCut=0;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %lf %lf %lf",charRegionName,&fGammaCut,&fElectronCut,&fPositronCut);
|
|
|
|
|
G4String regionName = charRegionName;
|
|
|
|
|
G4Region* myRegion = G4RegionStore::GetInstance()->GetRegion(regionName,false);
|
|
|
|
|
if( myRegion == NULL ) { // G4Region does not exist
|
|
|
|
@ -1110,6 +1112,7 @@ G4VPhysicalVolume* musrDetectorConstruction::Construct() {
|
|
|
|
|
if (strcmp(tmpString2,"posIniMomX")==0) {musrRootOutput::store_posIniMomX = false;}
|
|
|
|
|
if (strcmp(tmpString2,"posIniMomY")==0) {musrRootOutput::store_posIniMomY = false;}
|
|
|
|
|
if (strcmp(tmpString2,"posIniMomZ")==0) {musrRootOutput::store_posIniMomZ = false;}
|
|
|
|
|
if (strcmp(tmpString2,"nOptPhot")==0) {musrRootOutput::store_nOptPhot = false;}
|
|
|
|
|
if (strcmp(tmpString2,"fieldNomVal")==0) {musrRootOutput::store_fieldNomVal = false;}
|
|
|
|
|
if (strcmp(tmpString2,"det_ID")==0) {musrRootOutput::store_det_ID = false;}
|
|
|
|
|
if (strcmp(tmpString2,"det_edep")==0) {musrRootOutput::store_det_edep = false;}
|
|
|
|
@ -1336,30 +1339,28 @@ void musrDetectorConstruction::DefineMaterials()
|
|
|
|
|
char propertyName[100];
|
|
|
|
|
int nEntries;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %s %d",propertyName,&nEntries);
|
|
|
|
|
std::cout<<" Optical Material Def: MPT_tmp="<<MPT_tmp<<", materialPropertiesTableName="<<materialPropertiesTableName
|
|
|
|
|
<<", propertyName="<<propertyName<<", nEntries="<<nEntries<<std::endl;
|
|
|
|
|
// G4cout<<" Optical Material Def: MPT_tmp="<<MPT_tmp<<", materialPropertiesTableName="<<materialPropertiesTableName
|
|
|
|
|
// <<", propertyName="<<propertyName<<", nEntries="<<nEntries<<G4endl;
|
|
|
|
|
|
|
|
|
|
if (nEntries==0) { // AddConstProperty
|
|
|
|
|
float value;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*d %g",&value);
|
|
|
|
|
double value;
|
|
|
|
|
sscanf(&line[0],"%*s %*s %*s %*s %*d %lf",&value);
|
|
|
|
|
MPT_tmp->AddConstProperty(propertyName,value);
|
|
|
|
|
}
|
|
|
|
|
else { // AddProperty
|
|
|
|
|
char* pch = strstr(line,propertyName)+strlen(propertyName);
|
|
|
|
|
float value;
|
|
|
|
|
double value;
|
|
|
|
|
G4double photonEnergyArray[100];
|
|
|
|
|
G4double valueArray[100];
|
|
|
|
|
char dummy[100];
|
|
|
|
|
sscanf(pch,"%s",dummy); char* pch2=strstr(pch,dummy)+strlen(dummy); pch = pch2;
|
|
|
|
|
for (int i=0; i<nEntries; i++) {
|
|
|
|
|
sscanf(pch,"%g",&value);
|
|
|
|
|
// G4cout<<" DDDDD var1="<<value<<" &pch="<<&pch<<G4endl;
|
|
|
|
|
sscanf(pch,"%lf",&value);
|
|
|
|
|
photonEnergyArray[i]=value;
|
|
|
|
|
sscanf(pch,"%s",dummy); char* pch2=strstr(pch,dummy)+strlen(dummy); pch = pch2;
|
|
|
|
|
}
|
|
|
|
|
for (int i=0; i<nEntries; i++) {
|
|
|
|
|
sscanf(pch,"%g",&value);
|
|
|
|
|
// G4cout<<" DDDDD var2="<<value<<" &pch="<<&pch<<G4endl;
|
|
|
|
|
sscanf(pch,"%lf",&value);
|
|
|
|
|
valueArray[i]=value;
|
|
|
|
|
sscanf(pch,"%s",dummy); char* pch2=strstr(pch,dummy)+strlen(dummy); pch = pch2;
|
|
|
|
|
}
|
|
|
|
@ -1388,8 +1389,8 @@ void musrDetectorConstruction::DefineMaterials()
|
|
|
|
|
MPT_tmp = itMPT->second;
|
|
|
|
|
}
|
|
|
|
|
myMaterial->SetMaterialPropertiesTable(MPT_tmp);
|
|
|
|
|
G4cout<<myMaterial<<G4endl;
|
|
|
|
|
myMaterial->GetMaterialPropertiesTable()->DumpTable();
|
|
|
|
|
// G4cout<<myMaterial<<G4endl;
|
|
|
|
|
// myMaterial->GetMaterialPropertiesTable()->DumpTable();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|