Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
np
nptool
Commits
013ced64
Commit
013ced64
authored
Jun 10, 2021
by
Pierre Morfouace
Browse files
Merge branch 'NPTool.2.dev' of
https://gitlab.in2p3.fr/np/nptool
into NPTool.2.dev
parents
932fa3c9
6b557cd8
Pipeline
#123600
passed with stages
in 3 minutes and 28 seconds
Changes
31
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
6637 additions
and
66 deletions
+6637
-66
NPLib/Detectors/Nebula/TNebulaPhysics.cxx
NPLib/Detectors/Nebula/TNebulaPhysics.cxx
+13
-8
NPSimulation/Detectors/TACTIC/CMakeLists.txt
NPSimulation/Detectors/TACTIC/CMakeLists.txt
+1
-1
NPSimulation/Detectors/TACTIC/GARFDRIFT.h
NPSimulation/Detectors/TACTIC/GARFDRIFT.h
+72
-24
NPSimulation/Detectors/TACTIC/TACTICScorer.cc
NPSimulation/Detectors/TACTIC/TACTICScorer.cc
+24
-19
NPSimulation/Detectors/TACTIC/TACTICScorer.hh
NPSimulation/Detectors/TACTIC/TACTICScorer.hh
+5
-1
Projects/S034/Analysis.cxx
Projects/S034/Analysis.cxx
+17
-13
Projects/S034/db/BigRIPSIC.xml
Projects/S034/db/BigRIPSIC.xml
+509
-0
Projects/S034/db/FocalPlane.xml
Projects/S034/db/FocalPlane.xml
+73
-0
Projects/S034/energy_loss/He3_Al.G4table
Projects/S034/energy_loss/He3_Al.G4table
+481
-0
Projects/S034/energy_loss/He3_BC400.G4table
Projects/S034/energy_loss/He3_BC400.G4table
+492
-0
Projects/S034/energy_loss/He3_CD2.G4table
Projects/S034/energy_loss/He3_CD2.G4table
+497
-0
Projects/S034/energy_loss/He3_CsI.G4table
Projects/S034/energy_loss/He3_CsI.G4table
+468
-0
Projects/S034/energy_loss/He3_Fe.G4table
Projects/S034/energy_loss/He3_Fe.G4table
+456
-0
Projects/S034/energy_loss/He3_Mylar.G4table
Projects/S034/energy_loss/He3_Mylar.G4table
+491
-0
Projects/S034/energy_loss/He3_Si.G4table
Projects/S034/energy_loss/He3_Si.G4table
+500
-0
Projects/S034/energy_loss/He3_Vacuum.G4table
Projects/S034/energy_loss/He3_Vacuum.G4table
+515
-0
Projects/S034/energy_loss/He6_LH2.G4table
Projects/S034/energy_loss/He6_LH2.G4table
+524
-0
Projects/S034/energy_loss/He6_Vacuum.G4table
Projects/S034/energy_loss/He6_Vacuum.G4table
+531
-0
Projects/S034/energy_loss/He8_Al.G4table
Projects/S034/energy_loss/He8_Al.G4table
+493
-0
Projects/S034/energy_loss/He8_BC400.G4table
Projects/S034/energy_loss/He8_BC400.G4table
+475
-0
No files found.
NPLib/Detectors/Nebula/TNebulaPhysics.cxx
View file @
013ced64
...
...
@@ -158,21 +158,24 @@ void TNebulaPhysics::BuildPhysicalEvent() {
}
// Got everything, do the math
if
(
rawTup
>
0
){
// cal Q Up and Down
calQup
=
aQu
[
ID
]
*
(
rawQup
-
bQu
[
ID
]);
calQdown
=
aQd
[
ID
]
*
(
rawQdown
-
bQd
[
ID
]);
// cal T
// average value of Up and Down
calQ
=
sqrt
(
calQup
*
calQdown
);
// cal T Up
calTup
=
aTu
[
ID
]
*
rawTup
+
bTu
[
ID
];
// slew correction
calTup
-=
slwTu
[
ID
]
/
sqrt
(
rawQup
-
bQu
[
ID
]);
// cal T
// cal T
Down
calTdown
=
aTd
[
ID
]
*
rawTdown
+
bTd
[
ID
];
// slew correction
calTdown
-=
slwTd
[
ID
]
/
sqrt
(
rawQdown
-
bQd
[
ID
]);
// average value of Up and Down
calQ
=
sqrt
(
calQup
*
calQdown
);
if
(
calQ
>
threshold
){
calT
=
(
calTdown
+
calTup
)
*
0.5
+
avgT0
[
ID
]
+
Cal
->
GetPedestal
(
"NEBULA_T_ID"
+
NPL
::
itoa
(
ID
));
Y
=
(
calTdown
-
calTup
)
*
DTa
[
ID
]
+
DTb
[
ID
]
+
Cal
->
GetPedestal
(
"NEBULA_Y_ID"
+
NPL
::
itoa
(
ID
));
...
...
@@ -184,7 +187,7 @@ void TNebulaPhysics::BuildPhysicalEvent() {
PosX
.
push_back
(
PositionX
[
ID
]);
PosZ
.
push_back
(
PositionZ
[
ID
]);
if
(
ID
<
12
0
)
if
(
ID
<
12
1
)
IsVeto
.
push_back
(
0
);
else
IsVeto
.
push_back
(
1
);
...
...
@@ -297,9 +300,11 @@ void TNebulaPhysics::WriteSpectra() {
///////////////////////////////////////////////////////////////////////////
void
TNebulaPhysics
::
AddParameterToCalibrationManager
()
{
CalibrationManager
*
Cal
=
CalibrationManager
::
getInstance
();
vector
<
double
>
standardO
=
{
0
};
for
(
int
i
=
0
;
i
<
m_NumberOfBars
;
++
i
)
{
Cal
->
AddParameter
(
"NEBULA_T_ID"
+
NPL
::
itoa
(
i
+
1
));
Cal
->
AddParameter
(
"NEBULA_Y_ID"
+
NPL
::
itoa
(
i
+
1
));
Cal
->
AddParameter
(
"NEBULA_T_ID"
+
NPL
::
itoa
(
i
+
1
)
,
standardO
);
Cal
->
AddParameter
(
"NEBULA_Y_ID"
+
NPL
::
itoa
(
i
+
1
)
,
standardO
);
}
}
...
...
NPSimulation/Detectors/TACTIC/CMakeLists.txt
View file @
013ced64
...
...
@@ -12,7 +12,7 @@ endif()
add_library
(
NPSTACTIC SHARED TACTIC.cc TACTICScorer.cc
)
if
(
WITH_GARFIELD
)
target_link_libraries
(
NPSTACTIC NPSCore
${
ROOT_LIBRARIES
}
${
Geant4_LIBRARIES
}
${
NPLib_LIBRARIES
}
-lNPTACTIC /Users/warren/
G
arfield/install/lib/libGarfield.0.3.0.dylib /Users/warren/
G
arfield/install/lib/libGarfield.dylib
)
target_link_libraries
(
NPSTACTIC NPSCore
${
ROOT_LIBRARIES
}
${
Geant4_LIBRARIES
}
${
NPLib_LIBRARIES
}
-lNPTACTIC /Users/warren/
g
arfield
pp
/install/lib/libGarfield.0.3.0.dylib /Users/warren/
g
arfield
pp
/install/lib/libGarfield.dylib
)
else
()
target_link_libraries
(
NPSTACTIC NPSCore
${
ROOT_LIBRARIES
}
${
Geant4_LIBRARIES
}
${
NPLib_LIBRARIES
}
-lNPTACTIC
)
endif
()
NPSimulation/Detectors/TACTIC/GARFDRIFT.h
View file @
013ced64
...
...
@@ -9,9 +9,14 @@
#include "Garfield/ViewMedium.hh"
double
GARFDRIFT
(
double
energy
,
double
t_start
,
G4ThreeVector
start
,
G4ThreeVector
delta_pos
,
double
R
,
int
Pad_start
,
double
ID
,
double
ScoLength
,
double
SegLength
,
double
event
)
{
double
ScoLength
,
double
SegLength
,
double
event
,
double
raw_energy_check
)
{
ofstream
file
;
/*
file.open("garf_E_check.dat", std::ios::app);
file << raw_energy_check << "\t" << R << endl;
file.close();
*/
const
double
rWire
=
1
.
2
;
const
double
rTube
=
5
.;
const
double
lTube
=
25
.
19
;
...
...
@@ -24,17 +29,22 @@ double GARFDRIFT(double energy, double t_start, G4ThreeVector start, G4ThreeVect
//const double vWire = -681.0312; //For V_total = 1400V
//const double vWire = -730.;
const
double
vWire
=
-
1000
.;
//const double vWire = -584.7139; // ND run 4230 (2008)
const
double
vTube
=
0
.;
double
x_start
,
y_start
,
z_start
;
ofstream
file
;
//double production_bias = 0.01
;
double
production_bias
=
0
.
001
;
double
t_end
,
x_end
,
y_end
,
z_end
;
int
status
;
double
Pad_end
;
//double w_value = 35.; //for HeCO2 --guess
//double w_value = 26.31; //for argon
double
w_value
=
41
.
1
;
// for He
int
electrons
=
(
int
)(
energy
/
w_value
*
production_bias
);
//*production_bias; //Need to carry excess energy over later.
energy
=
energy
*
production_bias
;
//int electrons = (int)(energy/w_value*production_bias);
int
electrons
=
(
int
)(
energy
/
w_value
);
double
energy_excess
=
0
.;
int
sector
;
vector
<
double
>
pad_vec
,
time_vec
;
Garfield
::
MediumMagboltz
*
gas
=
new
Garfield
::
MediumMagboltz
();
...
...
@@ -45,20 +55,28 @@ double GARFDRIFT(double energy, double t_start, G4ThreeVector start, G4ThreeVect
Garfield
::
Sensor
*
sensor
=
new
Garfield
::
Sensor
();
Garfield
::
AvalancheMC
*
drift
=
new
Garfield
::
AvalancheMC
();
cout
<<
"
\n
"
<<
electrons
<<
"
\n
"
<<
endl
;
//cout << "\n" << electrons << "\n" << endl;
energy_excess
=
(
energy
-
electrons
*
w_value
)
/
production_bias
;
// if(R>rWire) {
// energy_excess = (energy/w_value*production_bias - electrons)*w_value/production_bias;
// energy_excess = (energy/w_value - electrons)*w_value;
if
(
R
>
rWire
&&
electrons
>
0
)
{
energy_excess
=
(
energy
/
w_value
*
production_bias
-
electrons
)
*
w_value
/
production_bias
;
//gas->LoadGasFile("he_90_co2_10_200mbar.gas");
//gas->LoadGasFile("ar_90_ch4_10.gas"); //atomic fraction in this case (P10).
//gas->LoadGasFile("he_90_co2_10_500mbar.gas"); //mass fraction in this case
//gas->LoadGasFile("he_90_co2_10_1bar.gas");
//gas->LoadGasFile("he_90_co2_10_200mbar.gas");
//gas->LoadGasFile("ar_90_ch4_10.gas"); //atomic fraction in this case (P10).
//gas->LoadGasFile("he_90_co2_10_500mbar.gas"); //mass fraction in this case
//gas->LoadGasFile("he_90_co2_10_1bar.gas");
gas
->
LoadGasFile
(
"he_90_co2_10_100mbar.gas"
);
//gas->LoadGasFile("he_90_co2_10_600mbar.gas");
gas
->
Initialise
(
true
);
mediumView
->
SetMedium
(
gas
);
geo
->
AddSolid
(
tube
,
gas
);
cmp
->
SetGeometry
(
geo
);
...
...
@@ -66,32 +84,62 @@ double GARFDRIFT(double energy, double t_start, G4ThreeVector start, G4ThreeVect
cmp
->
AddTube
(
rTube
,
vTube
,
0
,
"a"
);
sensor
->
AddComponent
(
cmp
);
drift
->
SetSensor
(
sensor
);
//drift->DisableAttachment();
for
(
int
e
=
0
;
e
<
electrons
;
e
++
)
{
double
randomize
=
(
double
)
std
::
rand
()
/
(
double
)
RAND_MAX
;
x_start
=
start
.
x
()
+
delta_pos
.
x
()
*
randomize
;
y_start
=
start
.
y
()
+
delta_pos
.
y
()
*
randomize
;
z_start
=
start
.
z
()
+
delta_pos
.
z
()
*
randomize
;
/*
file.open("garf_electrons_start_RZ.dat", std::ios::app);
file << pow(pow(x_start,2)+pow(y_start,2),0.5) << "\t" << z_start << endl;
file.close();
*/
drift
->
DriftElectron
(
x_start
,
y_start
,
z_start
,
t_start
);
int
np
=
drift
->
GetNumberOfDriftLinePoints
();
//drift->GetEndPoint(x_end, y_end, z_end, t_end, status);
drift
->
GetDriftLinePoint
(
np
-
1
,
x_end
,
y_end
,
z_end
,
t_end
);
//np-1 is last DriftLineEndPoint
//int np = drift->GetNuberOfElectronEndPoints();
//drift->GetElectronEndPoint(np-1, x_end, y_end, z_end, t_end);
Pad_end
=
(
int
)((
z_end
+
ScoLength
/
2
.)
/
SegLength
)
+
1
;
//new Pad number
if
(
pow
(
pow
(
x_end
,
2
)
+
pow
(
y_end
,
2
),
0
.
5
)
>
4
.
9
)
{
//reached the anode
file
.
open
(
"signal.dat"
,
std
::
ios
::
app
);
file
<<
event
<<
"
\t
"
<<
ID
<<
"
\t
"
<<
Pad_start
<<
"
\t
"
<<
Pad_end
<<
"
\t
"
<<
t_end
<<
endl
;
file
.
close
();
if
(
x_end
>
0
and
y_end
>
0
)
{
if
(
abs
(
x_end
)
>
abs
(
y_end
))
sector
=
0
;
if
(
abs
(
x_end
)
<
abs
(
y_end
))
sector
=
1
;
}
if
(
x_end
<
0
and
y_end
>
0
)
{
if
(
abs
(
x_end
)
<
abs
(
y_end
))
sector
=
2
;
if
(
abs
(
x_end
)
>
abs
(
y_end
))
sector
=
3
;
}
if
(
x_end
<
0
and
y_end
<
0
)
{
if
(
abs
(
x_end
)
>
abs
(
y_end
))
sector
=
4
;
if
(
abs
(
x_end
)
<
abs
(
y_end
))
sector
=
5
;
}
if
(
x_end
>
0
and
y_end
<
0
)
{
if
(
abs
(
x_end
)
<
abs
(
y_end
))
sector
=
6
;
if
(
abs
(
x_end
)
>
abs
(
y_end
))
sector
=
7
;
}
//if(pow(pow(x_end,2)+pow(y_end,2),0.5)>4.9) { //reached the anode
file
.
open
(
"signal.dat"
,
std
::
ios
::
app
);
file
<<
event
<<
"
\t
"
<<
ID
<<
"
\t
"
<<
sector
<<
"
\t
"
<<
Pad_end
<<
"
\t
"
<<
t_end
<<
"
\t
"
<<
pow
(
pow
(
x_start
,
2
)
+
pow
(
y_start
,
2
),
0
.
5
)
<<
"
\t
"
<<
pow
(
pow
(
x_end
,
2
)
+
pow
(
y_end
,
2
),
0
.
5
)
<<
endl
;
//file << event << "\t" << ID << "\t" << sector << "\t" << Pad_end << "\t" << t_end
file
.
close
();
//}
}
}
delete
gas
;
delete
mediumView
;
delete
geo
;
delete
tube
;
delete
cmp
;
delete
sensor
;
delete
drift
;
//otherwise these are held in memory and cause a killed: 9 crash.
//}
delete
gas
;
delete
mediumView
;
delete
geo
;
delete
tube
;
delete
cmp
;
delete
sensor
;
delete
drift
;
//otherwise these are held in memory and cause a killed: 9 crash.
return
energy_excess
;
}
NPSimulation/Detectors/TACTIC/TACTICScorer.cc
View file @
013ced64
...
...
@@ -3,11 +3,14 @@
#include "TACTICScorer.hh"
#include "G4UnitsTable.hh"
#include "G4RunManager.hh"
#include "TACTIC.hh"
#ifdef USE_Garfield
#include "GARFDRIFT.h"
#endif
double
excess
;
using
namespace
TACTICScorer
;
Gas_Scorer
::
Gas_Scorer
(
G4String
name
,
G4int
Level
,
G4double
ScorerLength
,
G4int
NumberOfSegments
,
G4int
depth
,
G4double
p0
,
G4double
p1
,
G4double
p2
,
G4double
p3
)
//what do level and depth do?
...
...
@@ -30,6 +33,7 @@ Gas_Scorer::~Gas_Scorer(){}
G4bool
Gas_Scorer
::
ProcessHits
(
G4Step
*
aStep
,
G4TouchableHistory
*
){
G4double
*
Infos
=
new
G4double
[
15
];
//bool first_step = true;
m_Position
=
aStep
->
GetPreStepPoint
()
->
GetPosition
();
Infos
[
0
]
=
G4RunManager
::
GetRunManager
()
->
GetCurrentEvent
()
->
GetEventID
();
...
...
@@ -44,6 +48,7 @@ G4bool Gas_Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*){
m_SegmentNumber
=
(
int
)((
m_Position
.
z
()
+
m_ScorerLength
/
2.
)
/
m_SegmentLength
)
+
1
;
//Pad number
Infos
[
6
]
=
m_SegmentNumber
;
//prepad = Infos[6];
Infos
[
7
]
=
m_Position
.
z
();
Infos
[
8
]
=
pow
(
pow
(
m_Position
.
x
(),
2
)
+
pow
(
m_Position
.
y
(),
2
),
0.5
);
//R
Infos
[
9
]
=
aStep
->
GetTrack
()
->
GetVertexPosition
()[
2
];
...
...
@@ -53,6 +58,10 @@ G4bool Gas_Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*){
Infos
[
12
]
=
aStep
->
GetTrack
()
->
GetTrackLength
();
Infos
[
13
]
=
m_p0
+
m_p1
*
Infos
[
8
]
+
m_p2
*
Infos
[
8
]
*
Infos
[
8
]
+
m_p3
*
Infos
[
8
]
*
Infos
[
8
]
*
Infos
[
8
];
//Infos[14] = excess;
G4ThreeVector
delta_Position
=
aStep
->
GetDeltaPosition
();
m_DetectorNumber
=
aStep
->
GetPreStepPoint
()
->
GetTouchableHandle
()
->
GetCopyNumber
(
m_Level
);
m_Index
=
m_DetectorNumber
*
1e3
+
m_SegmentNumber
*
1e6
;
...
...
@@ -60,33 +69,29 @@ G4bool Gas_Scorer::ProcessHits(G4Step* aStep, G4TouchableHistory*){
aStep
->
GetTrack
()
->
SetTrackStatus
(
fStopAndKill
);
return
0
;
}
if
(
aStep
->
IsFirstStepInVolume
()
==
true
)
excess
=
0.
;
map
<
G4int
,
G4double
**>::
iterator
it
;
it
=
EvtMap
->
GetMap
()
->
find
(
m_Index
);
if
(
it
!=
EvtMap
->
GetMap
()
->
end
()){
G4double
*
dummy
=
*
(
it
->
second
);
if
(
Infos
[
1
]
==
dummy
[
1
])
Infos
[
5
]
+=
dummy
[
5
];
//accumulate ionisation energy deposit to get total accross pad
delete
dummy
;
}
#ifdef USE_Garfield
G4ThreeVector
delta_Position
=
aStep
->
GetDeltaPosition
();
G4double
excess
;
if
(
aStep
->
IsFirstStepInVolume
()
==
1
)
excess
=
0.
;
if
(
aStep
->
IsFirstStepInVolume
()
==
0
)
excess
=
dummy
[
14
]
/
eV
;
if
(
excess
>
1.e06
)
excess
=
0.
;
//If dummy[12] is not defined returns random value > 1.e06 ?
if
(
Infos
[
8
]
>
12.
)
Infos
[
14
]
=
GARFDRIFT
((
Infos
[
5
]
/
eV
+
excess
),
Infos
[
3
],
m_Position
/
cm
,
delta_Position
/
cm
,
Infos
[
8
]
/
cm
,
Infos
[
6
],
Infos
[
2
],
m_ScorerLength
/
cm
,
m_SegmentLength
/
cm
,
Infos
[
0
])
*
eV
;
Infos
[
14
]
=
GARFDRIFT
(((
aStep
->
GetTotalEnergyDeposit
()
-
aStep
->
GetNonIonizingEnergyDeposit
())
/
eV
+
excess
),
Infos
[
3
],
m_Position
/
cm
,
delta_Position
/
cm
,
Infos
[
8
]
/
cm
,
Infos
[
6
],
Infos
[
2
],
m_ScorerLength
/
cm
,
m_SegmentLength
/
cm
,
Infos
[
0
],
(
aStep
->
GetTotalEnergyDeposit
()
-
aStep
->
GetNonIonizingEnergyDeposit
())
/
eV
)
*
eV
;
/*
file.open("excess_test.dat",std::ios::app);
file << Infos[6] << "\t" << "\t" << aStep->IsFirstStepInVolume() << "\t" << excess << "\t" << Infos[14]/eV << "\t" << (int)((((aStep->GetTotalEnergyDeposit() - aStep->GetNonIonizingEnergyDeposit())/eV+excess) / 41.1)*0.01) << "\t" << Infos[8] << endl;
file.close();
*/
excess
=
Infos
[
14
]
/
eV
;
#endif
if
(
Infos
[
8
]
<
12.
)
Infos
[
14
]
=
0
;
if
(
Infos
[
14
]
>
0.
)
cout
<<
"Infos[14] "
<<
Infos
[
14
]
/
eV
<<
endl
;
delete
dummy
;
}
EvtMap
->
set
(
m_Index
,
Infos
);
return
TRUE
;
...
...
NPSimulation/Detectors/TACTIC/TACTICScorer.hh
View file @
013ced64
...
...
@@ -9,7 +9,7 @@ using namespace std;
using
namespace
CLHEP
;
namespace
TACTICScorer
{
class
Gas_Scorer
:
public
G4VPrimitiveScorer
{
public:
...
...
@@ -36,6 +36,7 @@ namespace TACTICScorer {
void
DrawAll
();
void
PrintAll
();
private:
// Geometry of the detector
G4double
m_ScorerLength
;
G4int
m_NumberOfSegments
;
...
...
@@ -46,6 +47,9 @@ namespace TACTICScorer {
G4double
m_p1
;
G4double
m_p2
;
G4double
m_p3
;
ofstream
file
;
// G4double excess;
private:
// inherited from G4VPrimitiveScorer
G4int
HCID
;
...
...
Projects/S034/Analysis.cxx
View file @
013ced64
...
...
@@ -80,13 +80,13 @@ void Analysis::TreatEvent(){
double
TF13
=-
1
;
double
TF7
=-
1
;
double
TOF_F5F13
=-
1
;
double
TOF_F
5F7
=-
1
;
double
TOF_F
7F13
=-
1
;
unsigned
int
sizeP
=
Plastic
->
FP
.
size
();
for
(
unsigned
int
i
=
0
;
i
<
sizeP
;
i
++
){
if
(
Plastic
->
FP
[
i
]
==
5
){
TF5
=
Plastic
->
TSlew
[
i
];
}
else
if
(
Plastic
->
FP
[
i
]
==
13
){
else
if
(
Plastic
->
FP
[
i
]
==
13
&&
Plastic
->
ID
[
i
]
==
4
){
// two plastic at F13 taking only one
TF13
=
Plastic
->
TSlew
[
i
];
}
else
if
(
Plastic
->
FP
[
i
]
==
7
){
...
...
@@ -94,23 +94,26 @@ void Analysis::TreatEvent(){
}
}
if
(
TF5
>
0
&&
TF13
>
0
){
TOF_F5F13
=
TF13
-
TF5
;
double
l
=
117915
-
54917
;
Beta_b
=
(
l
/
TOF_F5F13
)
/
NPUNITS
::
c_light
;
if
(
TF7
>
0
&&
TF13
>
0
){
// offset is adjusted to give the expected beta
TOF_F7F13
=
TF13
-
TF7
+
6.71626e+02
;
static
double
LengthF7F13
=
117915
-
66409
;
Beta_b
=
(
LengthF7F13
/
TOF_F7F13
)
/
NPUNITS
::
c_light
;
// to find offset:
//Beta_b=TOF_F7F13-LengthF7F13/He8.GetVelocity();
}
// Samurai
if
(
FDC2
->
PosX
>-
1500
&&
FDC2
->
PosX
<
1000
// Samurai-Minos
if
(
Beta_b
>
0.5140
&&
Beta_b
<
0.5165
// Correct Beta
&&
Hodo
->
Charge
.
size
()
==
1
&&
Hodo
->
Charge
[
0
]
>
28
&&
Hodo
->
Charge
[
0
]
<
42
&&
Hodo
->
Time
[
0
]
>
58
&&
Hodo
->
Time
[
0
]
<
68
// 6He in Hodo->cope
&&
FDC2
->
PosX
>-
1500
&&
FDC2
->
PosX
<
1000
&&
FDC2
->
PosY
>-
500
&&
FDC2
->
PosY
<
500
&&
FDC0
->
PosX
>-
80
&&
FDC0
->
PosX
<
80
&&
FDC0
->
PosY
>-
80
&&
FDC0
->
PosY
<
80
// both FDC ok
&&
Minos
->
Tracks_P0
.
size
()
>
0
)
{
// p,pn o
r p,2p
&&
Minos
->
Tracks_P0
.
size
()
==
1
)
{
// p,pn o
nly
// Compute ThetaX and PhiY using Minos vertex and FDC0 X
// Check if both BDC are reconstructed
TVector3
BDC1
=
BDC
->
GetPos
(
1
);
TVector3
BDC2
=
BDC
->
GetPos
(
2
);
if
(
BDC1
.
Z
()
!=-
10000
&&
BDC2
.
Z
()
!=-
10000
){
TVector3
Vertex
,
delta
;
TVector3
P1
=
Minos
->
Tracks_P0
[
0
]
+
Minos
->
Tracks_Dir
[
0
];
...
...
@@ -156,8 +159,8 @@ void Analysis::TreatEvent(){
unsigned
int
first
=
Nebula
->
GetFirstHit
();
TVector3
Pfirst
=
(
Nebula
->
GetPos
(
first
)
-
Vertex
);
double
L
=
Pfirst
.
Mag
();
double
TSBT
=
(
Vertex
.
Z
()
+
7377.56
)
/
He8
.
GetVelocity
(
);
TOF_n
=
Nebula
->
TOF
[
first
]
-
TSBT
;
double
TSBT
=
(
Vertex
.
Z
()
+
7377.56
)
/
(
Beta_b
*
c_light
);
TOF_n
=
Nebula
->
TOF
[
first
]
-
TSBT
-
TF13
;
Beta_n
=
(
L
/
TOF_n
)
/
NPUNITS
::
c_light
;
LVn
.
SetVectM
(
TVector3
(
0
,
0
,
0
),
mn
);
LVn
.
Boost
(
Beta_n
*
Pfirst
.
Unit
());
...
...
@@ -209,6 +212,7 @@ void Analysis::Clear(){
Beta_b
=-
1000
;
X
=
Y
=
Z
=-
1000
;
TOF_n
=-
1000
;
Erel
=-
1000
;
}
////////////////////////////////////////////////////////////////////////////////
...
...
Projects/S034/db/BigRIPSIC.xml
0 → 100755
View file @
013ced64
<?xml version="1.0" encoding="UTF-8"?>
<dataroot>
<BigRIPSIC>
<ID>
1
</ID>
<NAME>
F2IC
</NAME>
<FPL>
2
</FPL>
<ch2mev_0>
0
</ch2mev_0>
<ch2mev_1>
0
</ch2mev_1>
<zcoef_0>
0
</zcoef_0>
<zcoef_1>
0
</zcoef_1>
<zcoef_2>
0
</zcoef_2>
<ionpair>
4866
</ionpair>
<pedestal0>
0
</pedestal0>
<pedestal1>
0
</pedestal1>
<pedestal2>
0
</pedestal2>
<pedestal3>
0
</pedestal3>
<pedestal4>
0
</pedestal4>
<pedestal5>
0
</pedestal5>
<pedestal6>
0
</pedestal6>
<pedestal7>
0
</pedestal7>
<pedestal8>
0
</pedestal8>
<pedestal9>
0
</pedestal9>
<detectorid>
4
</detectorid>
<geo0>
0
</geo0>
<ch0>
0
</ch0>
<geo1>
0
</geo1>
<ch1>
1
</ch1>
<geo2>
0
</geo2>
<ch2>
2
</ch2>
<geo3>
0
</geo3>
<ch3>
3
</ch3>
<geo4>
0
</geo4>
<ch4>
4
</ch4>
<geo5>
0
</geo5>
<ch5>
5
</ch5>
<geo6>
0
</geo6>
<ch6>
6
</ch6>
<geo7>
0
</geo7>
<ch7>
7
</ch7>
<geo8>
0
</geo8>
<ch8>
8
</ch8>
<geo9>
0
</geo9>
<ch9>
9
</ch9>
<geo10>
-1
</geo10>
<ch10>
-1
</ch10>
<geo11>
-1
</geo11>
<ch11>
-1
</ch11>
</BigRIPSIC>
<BigRIPSIC>
<ID>
2
</ID>
<NAME>
F3IC
</NAME>
<FPL>
3
</FPL>
<ch2mev_0>
0
</ch2mev_0>
<ch2mev_1>
0
</ch2mev_1>
<zcoef_0>
0
</zcoef_0>
<zcoef_1>
0
</zcoef_1>
<zcoef_2>
0
</zcoef_2>
<ionpair>
4866
</ionpair>
<pedestal0>
0
</pedestal0>
<pedestal1>
0
</pedestal1>
<pedestal2>
0
</pedestal2>
<pedestal3>
0
</pedestal3>
<pedestal4>
0
</pedestal4>
<pedestal5>
0
</pedestal5>
<pedestal6>
0
</pedestal6>
<pedestal7>
0
</pedestal7>
<pedestal8>
0
</pedestal8>
<pedestal9>
0
</pedestal9>
<detectorid>
4
</detectorid>
<geo0>
0
</geo0>
<ch0>
0
</ch0>
<geo1>
0
</geo1>
<ch1>
1
</ch1>
<geo2>
0
</geo2>
<ch2>
2
</ch2>
<geo3>
0
</geo3>
<ch3>
3
</ch3>
<geo4>
0
</geo4>
<ch4>
4
</ch4>
<geo5>
0
</geo5>
<ch5>
5
</ch5>
<geo6>
0
</geo6>
<ch6>
6
</ch6>
<geo7>
0
</geo7>
<ch7>
7
</ch7>
<geo8>
0
</geo8>
<ch8>
8
</ch8>
<geo9>
0
</geo9>
<ch9>
9
</ch9>
<geo10>
-1
</geo10>
<ch10>
-1
</ch10>
<geo11>
-1
</geo11>
<ch11>
-1
</ch11>
</BigRIPSIC>
<BigRIPSIC>
<ID>
3
</ID>
<NAME>
F7IC
</NAME>
<FPL>
7
</FPL>
<ch2mev_0>
32.143
</ch2mev_0>
<ch2mev_1>
0.0564
</ch2mev_1>
<zcoef_0>
15.7363
</zcoef_0>
<zcoef_1>
-2.59258
</zcoef_1>
<zcoef_2>
0
</zcoef_2>
<ionpair>
4866
</ionpair>
<pedestal0>
0
</pedestal0>
<pedestal1>
0
</pedestal1>
<pedestal2>
0
</pedestal2>
<pedestal3>
0
</pedestal3>
<pedestal4>
0
</pedestal4>
<pedestal5>
0
</pedestal5>
<pedestal6>
0
</pedestal6>
<pedestal7>
0
</pedestal7>
<pedestal8>
0
</pedestal8>
<pedestal9>
0
</pedestal9>
<detectorid>
4
</detectorid>
<geo0>
0
</geo0>
<ch0>
0
</ch0>
<geo1>
0
</geo1>
<ch1>
1
</ch1>
<geo2>
0
</geo2>
<ch2>
2
</ch2>
<geo3>
0
</geo3>
<ch3>
3
</ch3>
<geo4>
0
</geo4>
<ch4>
4
</ch4>
<geo5>
0
</geo5>
<ch5>
5
</ch5>
<geo6>
0
</geo6>
<ch6>
6
</ch6>
<geo7>
0
</geo7>
<ch7>
7
</ch7>
<geo8>
0
</geo8>
<ch8>
8
</ch8>
<geo9>
0
</geo9>
<ch9>
9
</ch9>
<geo10>
-1
</geo10>
<ch10>
-1
</ch10>
<geo11>
-1
</geo11>
<ch11>
-1
</ch11>
</BigRIPSIC>
<BigRIPSIC>
<ID>
4
</ID>
<NAME>
F11IC
</NAME>
<FPL>
11
</FPL>
<ch2mev_0>
31.6
</ch2mev_0>
<ch2mev_1>
0.0849
</ch2mev_1>
<zcoef_0>
7.9065
</zcoef_0>
<zcoef_1>
-0.043
</zcoef_1>
<zcoef_2>
0
</zcoef_2>
<ionpair>
4866
</ionpair>
<pedestal0>
0
</pedestal0>
<pedestal1>
0
</pedestal1>
<pedestal2>
0
</pedestal2>
<pedestal3>
0
</pedestal3>
<pedestal4>
0
</pedestal4>
<pedestal5>
0
</pedestal5>
<pedestal6>
0
</pedestal6>
<pedestal7>
0
</pedestal7>
<pedestal8>
0
</pedestal8>
<pedestal9>
0
</pedestal9>
<detectorid>
4
</detectorid>
<geo0>
0
</geo0>
<ch0>
0
</ch0>
<geo1>
0
</geo1>
<ch1>
1
</ch1>
<geo2>
0
</geo2>
<ch2>
2
</ch2>
<geo3>
0
</geo3>
<ch3>
3
</ch3>
<geo4>
0
</geo4>
<ch4>
4
</ch4>
<geo5>
0
</geo5>
<ch5>
5
</ch5>
<geo6>
0
</geo6>
<ch6>
6
</ch6>
<geo7>
0
</geo7>
<ch7>
7
</ch7>
<geo8>
0
</geo8>
<ch8>
8
</ch8>
<geo9>
0
</geo9>
<ch9>
9
</ch9>
<geo10>
-1
</geo10>
<ch10>
-1
</ch10>
<geo11>
-1
</geo11>
<ch11>
-1
</ch11>
</BigRIPSIC>
<BigRIPSIC>
<ID>
5
</ID>
<NAME>
ICB
</NAME>
<FPL>
13
</FPL>
<ch2mev_0>
-1.51
</ch2mev_0>
<ch2mev_1>
0.03495
</ch2mev_1>
<zcoef_0>
0
</zcoef_0>
<zcoef_1>
0
</zcoef_1>
<zcoef_2>
0
</zcoef_2>