Message: Segmentation fault with 12 towers, but works with 11 towers  Not Logged In (login) 
Hi,
I want to create a box of 12 by 12 towers for em calorimeter. I have created the gaps and absorbers and made them sensitive detectors and put them in layers and then copied the layer along z axis. When I have 11 by 11 towers, everything is working, but as soon as I have more than 11 it gives me segmentation fault. Any ideas? Here is my code:
G4double emcell=5.0*cm; G4double absoThickness = 1.5*mm; G4double gapThickness = 4.*mm; G4double worldSizeXY = 5.0*(5.0* calorSizeXY); G4double worldSizeZ = 5.0 *( 4*calorThickness2+calorThickness); G4double layerThickness = absoThickness + gapThickness; G4int num_of_towers=12;
G4LogicalVolume* calorEM[13][13]; G4int copynono=0; for(int i=0;i<num_of_towers;i++){ for(int j=0;j<num_of_towers;j++){ sprintf(bu,"CalorimeterEM%d%d",i,j); // sprintf(bu2,"calorem%d%d",i,j);
G4VSolid* calorimeterEM = new G4Box("CalorimeterEM", // its name emcell/2, emcell/2, calorThickness/2); calorEM[i][j] = new G4LogicalVolume(calorimeterEM,defaultMaterial,bu); copynono++; new G4PVPlacement(0,G4ThreeVector(27.5*cm+i*5.*cm,27.5*cmj*5.*cm,0.),calorEM[i][j],bu,worldLV,false,copynono,fCheckOverlaps);
} }
G4LogicalVolume* layerEMLV[13][13]; for(int i=0;i<num_of_towers;i++){ for(int j=0;j<num_of_towers;j++){ sprintf(bu,"LayerEM%d%d",i,j);
G4VSolid* layerEM = new G4Box("LayerEM", // its name emcell/2, emcell/2, layerThickness/2); //its size layerEMLV[i][j]=new G4LogicalVolume(layerEM,defaultMaterial,bu); new G4PVReplica("LayerEM_",layerEMLV[i][j],calorEM[i][j],kZAxis,nofLayers,layerThickness);
} } G4LogicalVolume* absorberEMLV[13][13];
for(int i=0;i<num_of_towers;i++){ for(int j=0;j<num_of_towers;j++){ sprintf(bu,"AbsoEM%d%d",i,j); G4VSolid* absorberEM = new G4Box("AbsoEM", // its name emcell/2, emcell/2, absoThickness/2); // its size absorberEMLV[i][j] = new G4LogicalVolume(absorberEM,absorberMaterial,bu); new G4PVPlacement(0,G4ThreeVector(0.,0.,gapThickness/2),absorberEMLV[i][j],bu,layerEMLV[i][j],false,i+j,fCheckOverlaps);
} } G4LogicalVolume* gapEMLV[13][13];
for(int i=0;i<num_of_towers;i++){ for(int j=0;j<num_of_towers;j++){ sprintf(bu3,"gapEM%d%d",i,j);
G4VSolid* gapEM = new G4Box("GapEM", // its name emcell/2, emcell/2, gapThickness/2); // its size gapEMLV[i][j] = new G4LogicalVolume(gapEM,gapMaterial2,bu3); new G4PVPlacement(0,G4ThreeVector(0.,0., absoThickness/2),gapEMLV[i][j],bu3,layerEMLV[i][j],false,i+j,fCheckOverlaps);
} } B4cCalorimeterSD* absoEMSD[13][13]; B4cCalorimeterSD* gapEMSD[13][13];
for(int i=0;i<num_of_towers;i++){ for(int j=0;j<num_of_towers;j++){ sprintf(buffer2,"AbsorberEMHitsCollection%d%d",i,j); sprintf(buffer3,"AbsorberEMSD%d%d",i,j); absoEMSD[i][j] = new B4cCalorimeterSD(buffer3, buffer2, nofLayers); G4SDManager::GetSDMpointer()>AddNewDetector(absoEMSD[i][j] ); absorberEMLV[i][j]>SetSensitiveDetector(absoEMSD[i][j]); sprintf(buffer4,"GapEMHitsCollection%d%d",i,j); sprintf(buffer5,"GapEMSD%d%d",i,j); gapEMSD[i][j] = new B4cCalorimeterSD(buffer5, buffer4, nofLayers); G4SDManager::GetSDMpointer()>AddNewDetector(gapEMSD[i][j] ); gapEMLV[i][j]>SetSensitiveDetector(gapEMSD[i][j]);
} }

Inline Depth:  Outline Depth:  Add message: 
to: 