Commit 9ca362a3 authored by adrien-matta's avatar adrien-matta
Browse files

* Restoring README folder

parent ce43d7d8
......@@ -28,10 +28,3 @@ NanaDetector
Beta= 0 0 0
Vis= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2
NanaDetector
Theta= 300.000000000000000
Phi= 0.000000000000000
R= 70.000000000000000
Beta= 0 0 0
Vis= all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2
......@@ -24,9 +24,7 @@
// C++ header
#include <string>
#include <vector>
// G4 header defining G4 types
#include "globals.hh"
using namespace std;
// G4 headers
#include "G4ThreeVector.hh"
......@@ -38,9 +36,6 @@
#include "NPSVDetector.hh"
#include "TDETECTORNAMEData.h"
using namespace std;
using namespace CLHEP;
class DETECTORNAME : public NPS::VDetector
{
////////////////////////////////////////////////////
......@@ -55,23 +50,17 @@ class DETECTORNAME : public NPS::VDetector
////////////////////////////////////////////////////
public:
// Cylindric plastic
void AddDETECTORNAME( G4double R,
G4double Theta,
G4double Phi,
G4double Thickness,
G4double Radius,
G4String Scintillator);
// Squared DETECTORNAME
void AddDETECTORNAME( G4double R,
G4double Theta,
G4double Phi,
G4double Height,
G4double Width,
G4double Thickness,
G4String Scintillator);
void AddDETECTORNAME(double R,
double Theta,
double Phi,
string Shape);
void VolumeMaker(G4ThreeVector Det_pos, int DetNumber,G4LogicalVolume* world) ;
G4LogicalVolume* BuildSquareDetector();
G4LogicalVolume* BuildCylindricalDetector();
private:
G4LogicalVolume* m_SquareDetector();
G4LogicalVolume* m_CylindricalDetector();
////////////////////////////////////////////////////
////// Inherite from NPS::VDetector class /////////
////////////////////////////////////////////////////
......@@ -108,23 +97,17 @@ class DETECTORNAME : public NPS::VDetector
///////////////Private intern Data//////////////////
////////////////////////////////////////////////////
private: // Geometry
vector<double> m_DETECTORNAME_Thickness ;
vector<double> m_DETECTORNAME_Radius ; // cylindrical shape
vector<double> m_DETECTORNAME_Height ; // squared shape
vector<double> m_DETECTORNAME_Width ; // squared shape
// Used for By Angle Definition
vector<G4double> m_R;
vector<G4double> m_Theta;
vector<G4double> m_Phi;
// Used for By Position Definition
vector<G4double> m_X;
vector<G4double> m_Y;
vector<G4double> m_Z;
// Scintillator type
vector<G4String> m_Scintillator ;
// Detector Coordinate
vector<double> m_R;
vector<double> m_Theta;
vector<double> m_Phi;
// Shape type
vector<string> m_Shape ;
// Visualisation Attribute
G4VisAttributes* m_VisSquare;
G4VisAttributes* m_VisCylinder;
// Needed for dynamic loading of the library
public:
......
......@@ -29,15 +29,13 @@ PS_Calorimeter::PS_Calorimeter(G4String name, vector<G4int> NestingLevel,G4int d
m_NestingLevel = NestingLevel;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
PS_Calorimeter::~PS_Calorimeter(){
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4bool PS_Calorimeter::ProcessHits(G4Step* aStep, G4TouchableHistory*){
// contain Energy, Time + as many copy number as nested volume
// Contain Energy, Time + as many copy number as nested volume
unsigned int mysize = m_NestingLevel.size();
G4double* Infos = new G4double[2+mysize];
Infos[0] = aStep->GetTotalEnergyDeposit();
......
......@@ -113,15 +113,15 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
m_Material[Name]=material;
return material;
}
else if(Name == "Epoxy"){
// Actually taken value fron Epoxy
G4Material* material = new G4Material(Name, 1.2 * g / cm3,3);
material->AddElement(GetElementFromLibrary("H"),8);
material->AddElement(GetElementFromLibrary("C"),5);
material->AddElement(GetElementFromLibrary("O"),2);
m_Material[Name]=material;
return material;
// Actually taken value fron Epoxy
G4Material* material = new G4Material(Name, 1.2 * g / cm3,3);
material->AddElement(GetElementFromLibrary("H"),8);
material->AddElement(GetElementFromLibrary("C"),5);
material->AddElement(GetElementFromLibrary("O"),2);
m_Material[Name]=material;
return material;
}
else if(Name == "Mylar"){
......@@ -132,7 +132,7 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
m_Material[Name]=material;
return material;
}
else if(Name == "Kapton"){
G4Material* material = new G4Material(Name, 1.39*g/cm3,3);
......@@ -165,15 +165,15 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
m_Material[Name]=material;
return material;
}
// Cooling
else if(Name == "N2_liquid"){
else if(Name == "N2_liquid"){
G4Material* material = new G4Material(Name,7,14.01*g/mole,0.808*g/cm3,
kStateLiquid,77*kelvin);
kStateLiquid,77*kelvin);
m_Material[Name]=material;
return material;
}
}
// Usual Target
else if(Name == "CD2"){
G4Material* material = new G4Material(Name, 1.06*g/cm3,2);
......@@ -231,25 +231,25 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
else if(Name == "Si"){
G4Material* material = new G4Material(Name,2.321*g/cm3 ,1);
material->AddElement(GetElementFromLibrary("Si"),1);
// Adding Optical property:
// Adding Optical property:
double* energy_r = new double[2];
double* rindex = new double[2];
double* absorption= new double[2];
energy_r[0] = 1*eV;
energy_r[1] = 1*MeV;
rindex[0] = 1 ; rindex[1]=1;
absorption[0] = 1*um ; absorption[1]=1*um;
G4MaterialPropertiesTable* MPT = new G4MaterialPropertiesTable();
// From St Gobain
MPT -> AddProperty("RINDEX",energy_r,rindex,2) ;
MPT -> AddProperty("ABSLENGTH",energy_r,absorption,2);
material -> SetMaterialPropertiesTable(MPT);
m_Material[Name]=material;
return material;
}
......@@ -315,14 +315,14 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
m_Material[Name]=material;
return material;
}
else if(Name == "NaturalUranium"){
G4Material* material = new G4Material(Name, 19.1*g/cm3,1);
material->AddElement(GetElementFromLibrary("U"),1);
m_Material[Name]=material;
return material;
}
else if(Name == "CsI_Scintillator"){
G4Material* material = new G4Material(Name, 4.51*g/cm3,2);
material->AddElement(GetElementFromLibrary("Cs"),1);
......@@ -335,32 +335,32 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
double* energy_r = new double[NumberOfPoints];
double* rindex = new double[NumberOfPoints];
double* absorption= new double[NumberOfPoints];
double* energy_e = new double[5];
double* fast = new double[5];
double* slow = new double[5];
double* scint = new double[5];
energy_e[0] = h_Planck*c_light / (450*nm);
energy_e[1] = h_Planck*c_light / (500*nm);
energy_e[2] = h_Planck*c_light / (550*nm);
energy_e[3] = h_Planck*c_light / (600*nm);
energy_e[4] = h_Planck*c_light / (650*nm);
for(int i=0; i<5; i++){
//fast[0] = 1 ; fast[1]=1;
//slow[0] = 1 ; slow[1]=1;
fast[i] = 0.6;
slow[i] = 3.5;
}
scint[0] = 0.25;
scint[1] = 0.75;
scint[2] = 1.0;
scint[3] = 0.7;
scint[4] = 0.4;
energy_e[0] = h_Planck*c_light / (450*nm);
energy_e[1] = h_Planck*c_light / (500*nm);
energy_e[2] = h_Planck*c_light / (550*nm);
energy_e[3] = h_Planck*c_light / (600*nm);
energy_e[4] = h_Planck*c_light / (650*nm);
for(int i=0; i<5; i++){
//fast[0] = 1 ; fast[1]=1;
//slow[0] = 1 ; slow[1]=1;
fast[i] = 0.6;
slow[i] = 3.5;
}
scint[0] = 0.25;
scint[1] = 0.75;
scint[2] = 1.0;
scint[3] = 0.7;
scint[4] = 0.4;
double wl;
for(int i = 0 ; i < NumberOfPoints ;i++){
wl= wlmin+i*step;
// Formula from www.refractiveindex.info
......@@ -372,7 +372,7 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
+0.51818/(1-pow(0.206/wl,2))
+0.01918/(1-pow(0.218/wl,2))
+3.38229/(1-pow(161.29/wl,2))) ;
energy_r[i] = h_Planck*c_light / wl;
// To be defined properly
absorption[i] = 344.8*cm;
......@@ -438,38 +438,42 @@ G4Material* MaterialManager::GetMaterialFromLibrary(string Name){
m_Material[Name]=material;
return material;
}
else if(Name == "P10_1atm"){
G4Material* material = new G4Material(Name, 1.74*mg/cm3,3); //@ 0K, 1 atm
material->AddElement(GetElementFromLibrary("Ar"),0.9222);
material->AddElement(GetElementFromLibrary("C"),0.0623);
material->AddElement(GetElementFromLibrary("H"),0.0155);
m_Material[Name]=material;
return material;
}
G4Material* material = new G4Material(Name, 1.74*mg/cm3,3); //@ 0K, 1 atm
material->AddElement(GetElementFromLibrary("Ar"),0.9222);
material->AddElement(GetElementFromLibrary("C"),0.0623);
material->AddElement(GetElementFromLibrary("H"),0.0155);
m_Material[Name]=material;
return material;
}
else if(Name == "P10"){
G4Material* material = new G4Material(Name, 0.57*mg/cm3,3); //@ 0K, 1/3 atm
material->AddElement(GetElementFromLibrary("Ar"),0.9222);
material->AddElement(GetElementFromLibrary("C"),0.0623);
material->AddElement(GetElementFromLibrary("H"),0.0155);
m_Material[Name]=material;
return material;
}
else if(Name == "Air_1atm"){ // 1 atm
G4Material* material = new G4Material("Air", 1.290*mg/cm3, 2);
material->AddElement(GetElementFromLibrary("N"), 0.7);
material->AddElement(GetElementFromLibrary("O"), 0.3);
}
else if(Name == "Air"){ // 1/3 atm
G4Material* material = new G4Material("Air", 1.290/3*mg/cm3, 2);
material->AddElement(GetElementFromLibrary("N"), 0.7);
material->AddElement(GetElementFromLibrary("O"), 0.3);
}
G4Material* material = new G4Material(Name, 0.57*mg/cm3,3); //@ 0K, 1/3 atm
material->AddElement(GetElementFromLibrary("Ar"),0.9222);
material->AddElement(GetElementFromLibrary("C"),0.0623);
material->AddElement(GetElementFromLibrary("H"),0.0155);
m_Material[Name]=material;
return material;
}
else if(Name == "Air"){ // 1 atm
G4Material* material = new G4Material(Name, 1.290*mg/cm3, 2);
material->AddElement(GetElementFromLibrary("N"), 0.7);
material->AddElement(GetElementFromLibrary("O"), 0.3);
m_Material[Name]=material;
return material;
}
else if(Name == "Wood"){
G4Material* material = new G4Material(Name, 0.9*mg/cm3, 3);
material->AddElement(GetElementFromLibrary("H") , 4);
material->AddElement(GetElementFromLibrary("O") , 1);
material->AddElement(GetElementFromLibrary("C") , 2);
m_Material[Name]=material;
return material;
}
else{
G4cout << "ERROR: Material requested \""<< Name <<"\" is not available in the Material Librairy" << G4endl;
exit(1);
......
......@@ -311,12 +311,30 @@ void Nana::ConstructDetector(G4LogicalVolume* world){
G4LogicalVolume* logicLead = new G4LogicalVolume(solidLead, Lead, "logicLead", 0, 0, 0);
G4VisAttributes* lead_vis= new G4VisAttributes(G4Colour(0.3, 0.3, 0.3));
logicLead->SetVisAttributes(lead_vis);
logicLead->SetVisAttributes(lead_vis);
unsigned int mysize = m_Pos.size();
for(unsigned int i = 0 ; i < mysize ; i++){
new G4PVPlacement(G4Transform3D(*m_Rot[i], m_Pos[i]), ConstructDetector(), "NanaDetector", world, false, i+2);
G4RotationMatrix* r = new G4RotationMatrix();
G4Material* Wood = MaterialManager::getInstance()->GetMaterialFromLibrary("Wood");
G4Box* table = new G4Box("Table",1*m,1*m,1*cm);
G4LogicalVolume* logicTable= new G4LogicalVolume(table, Wood, "logicTable", 0, 0, 0);
G4RotationMatrix* r = new G4RotationMatrix();
r->rotateX(90*deg);
new G4PVPlacement(r,G4ThreeVector(0,-5*cm,0),
logicTable,
"Nana_Table",
world,
false,
0);
/* G4RotationMatrix* r = new G4RotationMatrix();
r->rotateX(-90*deg);
r->rotateY(60*deg);
......@@ -355,23 +373,7 @@ logicLead->SetVisAttributes(lead_vis);
world,
false,
i+1);
/* new G4PVPlacement(G4Transform3D(*m_Rot[i], m_Pos[i]+G4ThreeVector(0,0, +PMTFace+3*cm)),
logicLead,
"Nana_Lead_Support",
world,
false,
i+1);
new G4PVPlacement(G4Transform3D(*m_Rot[i], m_Pos[i]+G4ThreeVector(0,0,-PMTFace-3*cm)),
logicLead,
"Nana_Lead_Support",
world,
false,
i+1);
*/
}
}
......
/run/beamOn 38400000
/run/beamOn 4608000
......@@ -4,28 +4,27 @@ void NIM(){
// TFile* fexp = new TFile("Nana_exp.root","READ");
// TH1* hexp = (TH1*) fexp->FindObjectAny("Detector3");
TFile* fexp = new TFile("Eu_4hr.root","READ");
TFile* fexp = new TFile("Eu_152_1Det_1hr.root","READ");
TTree* treex = (TTree*) fexp->FindObjectAny("Tree");
treex->Draw("fNANA_LaBr3_EnergyLong>>Detector3x(4096,0,4096)","fNANA_LaBr3_DetectorNbr@.size()==1 && fNANA_LaBr3_DetectorNbr==3","");
treex->Draw("1000*(0.00193276+fNANA_LaBr3_EnergyLong*0.000175521+fNANA_LaBr3_EnergyLong*fNANA_LaBr3_EnergyLong*-3.88985e-10) >>Detector3x(4096,0,4096)","","");
TH1* hexp = (TH1*) fexp->FindObjectAny("Detector3x");
TH1* hexp_o = (TH1*)hexp->Clone("hexp_o");
TFile* fbgd = new TFile("Bg_4hr_nu.root","READ");
TTree* treeb = (TTree*) fbgd->FindObjectAny("Tree");
treeb->Draw("fNANA_LaBr3_EnergyLong>>Detector3(4096,0,4096)","fNANA_LaBr3_DetectorNbr@.size()==1 && fNANA_LaBr3_DetectorNbr==3","same");
TH1* hbgd = (TH1*) fbgd->FindObjectAny("Detector3");
// TFile* fbgd = new TFile("Bg_4hr_nu.root","READ");
// TTree* treeb = (TTree*) fbgd->FindObjectAny("Tree");
// treeb->Draw("fNANA_LaBr3_EnergyLong>>Detector3(4096,0,4096)","fNANA_LaBr3_DetectorNbr@.size()==1 && fNANA_LaBr3_DetectorNbr==3","same");
// TH1* hbgd = (TH1*) fbgd->FindObjectAny("Detector3");
double min2= 1700;
double max2 = 3500;
double normalisation_bgd = hexp->Integral(hexp->FindBin(min2),hexp->FindBin(max2))/hbgd->Integral(hbgd->FindBin(min2),hbgd->FindBin(max2));
cout << "Normalisation = " << normalisation_bgd << endl;
hbgd->Scale(normalisation_bgd);
hexp->Add(hbgd,-1);
// double normalisation_bgd = hexp->Integral(hexp->FindBin(min2),hexp->FindBin(max2))/hbgd->Integral(hbgd->FindBin(min2),hbgd->FindBin(max2));
// cout << "Normalisation = " << normalisation_bgd << endl;
// hbgd->Scale(normalisation_bgd);
// hexp->Add(hbgd,-1);
TFile* fsim = new TFile("../../Outputs/Analysis/Eu_5min.root","READ");
TFile* fsim = new TFile("../../Outputs/Analysis/Eu_1hr.root","READ");
TTree* tree = (TTree*) fsim->FindObjectAny("PhysicsTree");
tree->Draw("LaBr_E*1000.>>sum2(4096,0,4096)","Nana.DetectorNumber@.size()==1 && Nana.DetectorNumber==3","E1 same");
tree->Draw("LaBr_E*1000.>>sum2(4096,0,4096)","","E1 same");
TH1* hsim = (TH1*) fsim->FindObjectAny("sum2");
double min1= 400;
......@@ -40,11 +39,11 @@ void NIM(){
hexp->GetXaxis()->SetTitle("LaBr3 Energy (keV)");
hexp->GetYaxis()->SetTitle("Counts per 4 keV");
hsim->Draw("same");
hbgd->SetFillColor(kRed);
hbgd->SetLineColor(kRed);
// hbgd->SetFillColor(kRed);
// hbgd->SetLineColor(kRed);
//hbgd->Draw("same");
hexp_o->SetFillColor(kGreen);
hexp_o->SetLineColor(kGreen);
// hexp_o->SetFillColor(kGreen);
// hexp_o->SetLineColor(kGreen);
//hexp_o->Draw("same");
gPad->SetLogy();
......
EmPhysicsList Option4
DefaultCutOff 0.1
DefaultCutOff 0.01
IonBinaryCascadePhysics 0
EmExtraPhysics 0
HadronElasticPhysics 0
......
May 2009
Main Contributors for NPTool structure:
Adrien MATTA
Nicolas de SEREVILLE
Other contributors
Sandra GIRON
Marc LABICHE
Inspired by previous work by Alexis RAMUS and Marc LABICHE.
Geant4 Software License
Version 1.0, 28 June 2006
Copyright (c) Copyright Holders of the Geant4 Collaboration, 1994-2006.
See http://cern.ch/geant4/license for details on the copyright holders. All
rights not expressly granted under this license are reserved.
This software includes voluntary contributions made to Geant4.
See http://cern.ch/geant4 for more information on Geant4.
Installation, use, reproduction, display, modification and redistribution of
this software, with or without modification, in source and binary forms, are
permitted on a non-exclusive basis. Any exercise of rights by you under this
license is subject to the following conditions:
1. Redistributions of this software, in whole or in part, with or without
modification, must reproduce the above copyright notice and these license
conditions in this software, the user documentation and any other
materials provided with the redistributed software.
2. The user documentation,if any,included with a redistribution,must include
the following notice:"This product includes software developed by Members
of the Geant4 Collaboration ( http://cern.ch/geant4 )."
If that is where third-party acknowledgments normally appear, this
acknowledgment must be reproduced in the modified version of this
software itself.
3. The names "Geant4" and "The Geant4 toolkit" may not be used to endorse or
promote software,or products derived therefrom, except with prior written
permission by license@geant4.org. If this software is redistributed in
modified form, the name and reference of the modified version must be
clearly distinguishable from that of this software.
4. You are under no obligation to provide anyone with any modifications of
this software that you may develop,including but not limited to bug fixes,
patches, upgrades or other enhancements or derivatives of the features,
functionality or performance of this software. However, if you publish or
distribute your modifications without contemporaneously requiring users
to enter into a separate written license agreement, then you are deemed
to have granted all Members and all Copyright Holders of the Geant4
Collaboration a license to your modifications, including modifications
protected by any patent owned by you,under the conditions of this license.
5. You may not include this software in whole or in part in any patent or
patent application in respect of any modification of this software
developed by you.
6. DISCLAIMER
THIS SOFTWARE IS PROVIDED BY THE MEMBERS AND COPYRIGHT HOLDERS OF THE GEANT4
COLLABORATION AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, OF
SATISFACTORY QUALITY, AND FITNESS FOR A PARTICULAR PURPOSE OR USE ARE
DISCLAIMED. THE MEMBERS OF THE GEANT4 COLLABORATION AND CONTRIBUTORS MAKE NO
REPRESENTATION THAT THE SOFTWARE AND MODIFICATIONS THEREOF,WILL NOT INFRINGE
ANY PATENT, COPYRIGHT, TRADE SECRET OR OTHER PROPRIETARY RIGHT.
7. LIMITATION OF LIABILITY
THE MEMBERS AND COPYRIGHT HOLDERS OF THE GEANT4 COLLABORATION AND
CONTRIBUTORS SHALL HAVE NO LIABILITY FOR DIRECT,INDIRECT,SPECIAL, INCIDENTAL,
CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES OF ANY CHARACTER INCLUDING,
WITHOUT LIMITATION, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE,
DATA OR PROFITS, OR BUSINESS INTERRUPTION, HOWEVER CAUSED AND ON ANY THEORY
OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCT LIABILITY OR
OTHERWISE, ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
8. This license shall terminate with immediate effect and without notice if
you fail to comply with any of the terms of this license, or if you
institute litigation against any Member or Copyright Holder of the Geant4
Collaboration with regard to this software.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.