Symulacje dla detektora ND280

Transkrypt

Symulacje dla detektora ND280
Symulacje dla detektora ND280
Oprogranowanie do symulacji
• NEUT - generator verteksów oddziaływań neutrin
• nd280MC – symulacja monte carlo propagacji cząstek w
detektorze (korzysta z biblioteki GEANT)
• ElecSim – symulacja odczytów z elektroniki na podstawie
danych z nd280MC
• Oprogranowanie do analizy wyników – oaEvent,
EventDisplay
• Oprogranowanie do rekonstrukcji trajektori z hitów
• Biblioteka ROOT – pełni role warstwy pośredniczącej
między wszystkimi pozostałymi programami
• oaCalibrationDatabase – ustawienia detektora np. pole
magnetyczne itp.
Neut
• To generator wierzchołków oddziaływań neutrin z materią
w których produkowane są cząstki takie jak miony czy
piony
• Jest uważany za przestarzały
• Produkuje wierzchołki oddziaływań tylko w płaszczyźnie
2D
• Możliwe jest zastąpieni go przez inny generator , najlepiej
NuWro !!!
nd280MC
• Symuluje propagacje cząstek w detektorze przez
uwzględnienie efektów materiałowych i geometrycznych.
Wykorzystuje w tym celu bibliotekę GEANT
• Uwzględnia strukturę czasowa wiązki padających neutrin
(czyli zależność liczby wierzchołków od czasu)
ElecSim
• Symuluje odczyt sygnałów z elektroniki na podstawie
danych z nd280mc
• Umożliwia testowanie różnych modeli pomiaru oraz
budowy scyntylatorów
• Umożliwia oszacowanie błędów pomiarowych
Oprogranowanie do rekonstrukcji trajektorii
• tpcRecon, fgdRecon, p0dRecon, ecalRecon,
sbcat(biblioteka)
• Rekonstrukcja jest dokonywana na
podstawie hitów z elektroniki zgodnie z
zadanym algorytmem. Zrekonstruowane
trajektorie są dopisywane do pliku.
ROOT
• Całe oprogramowanie napisane jest z wykorzystaniem
ROOT’a poza Neut’em
• Wymian danych między poszczególnymi programami
następuje poprzez pliki wygenerowane za pomocą tej
biblioteki
• ROOT dostarcza narzędzi do analizy danych i zarządzania
pamięcią
Kolejność wymiany danych
1.
2.
3.
4.
NEUT
nd280MC
ElecSim/analiza
Rekonstrukcja/analiza
Sposób uporządkowania danych
•
•
•
•
•
Trajektorie
Trajektorie zrekonstruowane
Hity
Hity rejestrowane przez elektronikę
Wierzchołki
Każdy hit, trajektoria i wierzchołek należy do zdarzenia (event)
Przetwarzanie danych
#include <nd280EventLoop.hxx>
class TMyEventLoop: public ND::TND280EventLoopFunction {
public:
TMyEventLoop() {}
virtual ~TMyEventLoop() {}
bool operator () (ND::TND280Event& event) {
event.ls();
return true;
}
};
int main(int argc, char **argv) {
TMyEventLoop userCode;
nd280EventLoop(argc,argv,userCode);
}
Dzięki przedstawionemu powyżej framworkowi nie musimy
przejmować się implementacją interface’u użytkownika
Dzięki przedstawionemu powyżej framworkowi nie musimy
przejmować się implementacją interface’u użytkownika
usage: myprogram.exe [options] [input-file] ...
Options:
-o <file>
Set the name of an output file.
-a
Read all events
-n <cnt>
Only read <cnt> events [Default: 1]
-s <cnt>
Skip <cnt> events
-O <opt>[=<val>] Set an option for the user code
-O quiet Very little output
-O <option> Set the option for TObject::ls()
Run Id: 0 Event Id: 0 Reaction Code: 0
TDataVector(0x8690848):: hits
TDataVector(0x86936f0):: fits
TDataVector(0x8693760):: truth
TG4TrajectoryContainer(0x86937e0):: G4Trajectories
TG4Trajectory(0x876a3b4):: Id: 1 13(mu-) Points: 7 E: 741.3 P: (-528.1, -65.2, 505.2) from: 0
TG4Trajectory(0x875ea64):: Id: 2 2212(proton) Points: 2 E: 1092.0 P: (419.4, -98.6, 355.7) from: 0
TG4Trajectory(0x876a804):: Id: 3 22(gamma) Points: 2 E: 6.2 P: (-5.1, -3.3, 1.0) from: 0
TG4Trajectory(0x876a95c):: Id: 50 11(e-) Points: 2 E: 8.4 P: (-7.6, 0.7, 3.5) from: 1
TG4Trajectory(0x876aab4):: Id: 52 11(e-) Points: 2 E: 7.7 P: (-6.3, 1.1, 4.3) from: 1
TG4Trajectory(0x876ac0c):: Id: 124 11(e-) Points: 2 E: 5.3 P: (-4.7, 0.5, 2.3) from: 1
TG4Trajectory(0x876ad64):: Id: 137 2112(neutron) Points: 3 E: 941.9 P: (60.8, -26.9, -3.6) from: 1
TG4Trajectory(0x876af24):: Id: 138 1000070150(N15[0.0]) Points: 2 E: 13969.6 P: (-81.5, 85.2, 67.0) from: 1
TG4Trajectory(0x876b07c):: Id: 140 14(nu_mu) Points: 2 E: 87.5 P: (20.2, -56.9, -63.4) from: 1
TG4Trajectory(0x876b1d4):: Id: 172 1000080160(O16[0.0]) Points: 2 E: 14895.5 P: (111.5, 2.8, -17.1) from: 137
TG4Trajectory(0x876b32c):: Id: 173 1000080160(O16[0.0]) Points: 2 E: 14895.2 P: (-46.3, 50.9, 3.7) from: 137
TG4Trajectory(0x876b484):: Id: 174 1000140280(Si28[0.0]) Points: 2 E: 26053.4 P: (-10.5, -62.2, 62.5) from: 137
TG4Trajectory(0x876b5dc):: Id: 175 1000140280(Si28[0.0]) Points: 2 E: 26053.3 P: (-54.5, -8.5, -47.7) from: 137
TG4Trajectory(0x876b734):: Id: 176 1000080160(O16[0.0]) Points: 2 E: 14895.3 P: (15.7, 60.8, 31.5) from: 137
TG4Trajectory(0x876b88c):: Id: 177 1000080160(O16[0.0]) Points: 2 E: 14895.3 P: (-46.5, -25.7, -46.6) from: 137
TG4Trajectory(0x876b9e4):: Id: 193 11(e-) Points: 2 E: 6.8 P: (-4.7, 4.8, 0.4) from: 137
TG4PrimaryVertexContainer(0x8769a80):: G4PrimVertex00
TG4PrimaryVertex(0x877b8d8):: at: (1409.96,-534.052,2380.64,3547.41)
TG4PrimaryParticle(0x87868b8):: Id: 1 Particle: 13 (mu-) E: 741.308
TG4PrimaryParticle(0x878691c):: Id: 2 Particle: 2212 (proton) E: 1092.04
TG4PrimaryParticle(0x8786980):: Id: 3 Particle: 22 (gamma) E: 6.18
Informational Vertex:
TG4PrimaryVertexContainer(0x877b930):: Informational
TG4PrimaryVertex(0x878de40):: at: (-731.457,-1428.96,0,0)
TG4PrimaryParticle(0x878def8):: Id: -1 Particle: 14 (nu_mu) E: 903.499
TG4PrimaryParticle(0x878df5c):: Id: -1 Particle: 2112 (neutron) E: 956.85
TG4PrimaryParticle(0x878dfc0):: Id: -1 Particle: 13 (mu-) E: 741.308
TG4PrimaryParticle(0x878e024):: Id: -1 Particle: 2212 (proton) E: 1092.04
TDataVector(0x878e150):: g4Hits
TG4HitContainer(0x878e240):: tec
Przetwarzanie danych
class TDumpEvent: public TND280EventLoopFunction {
public:
virtual void Initialize(void)
{
muonTdist = new TH1F("muonTdist","Number of muons ",400,0,8000);
}
virtual void Finalize(TND280Output* output) {
muonTdist->Draw("same");
gPad->Print("muonTime2.gif");
}
bool operator () (TND280Event& evt) {
TG4PrimaryVertex vertex;
TG4PrimaryParticleContainer particles;
TG4PrimaryParticle pt;
unsigned int NV;
unsigned int j;
unsigned int N;
unsigned int i;
double t;
try {
TG4PrimaryVertexContainer& vertexCont =
evt.Use<TG4PrimaryVertexContainer>("truth/G4PrimVertex00");
NV = vertexCont.size();
for(j=0; j< NV; j++)
{
vertex = vertexCont[j];
t = vertex.GetPosition().T();
particles = vertex.GetPrimaryParticles();
N = particles.size();
for(i=0; i< N; i++)
{
pt = particles[i];
if(abs(pt.GetPDGCode())==13)muonxTdist->Fill(t/unit::ns );
}//konie pętli po cząstkach
}//koniec petli po vertexach
}
catch (...) {... }
return true;
}
private:
TH1F* muonTdist;
};
Struktura czasowa wiązki
Hity
Hity odczytane przez elektronikę
Rozkład długości trajektorii
Rozkład długości w SMRD

Podobne dokumenty