er  dev
ERHe10Reconstructor.cxx
1 #include "ERHe10Reconstructor.h"
2 
3 #include<iostream>
4 
5 #include "TVector3.h"
6 
7 #include "FairRootManager.h"
8 #include "FairRun.h"
9 #include "FairRuntimeDb.h"
10 
11 #include "ERParticle.h"
12 
13 using namespace std;
14 
15 // ----------------------------------------------------------------------------
17  : FairTask("ER He10 reconstruction scheme")
18 ,fBeamDetEvent(NULL)
19 ,fRTelescopeEvent(NULL)
20 {
21 }
22 // ----------------------------------------------------------------------------
23 
24 // ----------------------------------------------------------------------------
26  : FairTask("ER He10 reconstruction scheme", verbose)
27 ,fBeamDetEvent(NULL)
28 ,fRTelescopeEvent(NULL)
29 {
30 }
31 // ----------------------------------------------------------------------------
32 
33 // ----------------------------------------------------------------------------
35 {
36 }
37 // ----------------------------------------------------------------------------
38 
39 // ----------------------------------------------------------------------------
40 void ERHe10Reconstructor::SetParContainers()
41 {
42  // Get run and runtime database
43  FairRun* run = FairRun::Instance();
44  if ( ! run ) Fatal("SetParContainers", "No analysis run");
45 
46  FairRuntimeDb* rtdb = run->GetRuntimeDb();
47  if ( ! rtdb ) Fatal("SetParContainers", "No runtime database");
48 }
49 // ----------------------------------------------------------------------------
50 
51 // ----------------------------------------------------------------------------
53 {
54  // Get input array
55  FairRootManager* ioman = FairRootManager::Instance();
56  if ( ! ioman ) Fatal("Init", "No FairRootManager");
57 
58  fRTelescopeEvent = (ERTelescopeRecoEvent*)ioman->GetObject("TelescopeRecoEvent.");
59  if (!fRTelescopeEvent)
60  Fatal("Init", "Can`t find branch in input file!");
61  fBeamDetEvent = (ERBeamDetRecoEvent*)ioman->GetObject("BeamDetRecoEvent.");
62  if (!fBeamDetEvent)
63  Fatal("Init", "Can`t find branch in input file!");
64 
65  fOutEvent = new ERHe10RecoEvent();
66  ioman->Register("He10RecoEvent.","Analyze",fOutEvent, kTRUE);
67 
68  return kSUCCESS;
69 }
70 // -------------------------------------------------------------------------
71 
72 // ----- Public method Exec --------------------------------------------
73 void ERHe10Reconstructor::Exec(Option_t* opt)
74 {
75  ERParticle* projectile = &(fBeamDetEvent->projectile);
76  ERParticle* target = &(fBeamDetEvent->target);
77  ERParticle* CM0 = &(fBeamDetEvent->CM0);
78 
79  ERParticle* ej11 = &(fRTelescopeEvent->ej11);
80  //Собираем четырех вектор mis He10
81  Float_t Mmis = fMisMass; //Масса He10
82  //Импульс миса
83  TVector3 Pmis(projectile->Part.Px()-ej11->Part.Px(),
84  projectile->Part.Py()-ej11->Part.Py(),
85  projectile->Part.Pz()-ej11->Part.Pz());
86  //***************** Подход СИ *****************************/
87  //Полная энергия миса
88  Float_t Emis = TMath::Sqrt(Pmis.Mag2()+pow(Mmis,2));
89  //Кинетическая энергия миса
90  Float_t Tmis = Emis-Mmis;
91  //Энергия возбуждения миса
92  Float_t Exmis = projectile->Part.E()+target->Mass-ej11->Part.E()-Tmis-Mmis;
93 
94  //Пересчет с текущим приближением Exmis
95  Emis = TMath::Sqrt(Pmis.Mag2()+pow(Mmis+Exmis,2));
96  Tmis = Emis-Mmis-Exmis;
97  Exmis = projectile->Part.E()+target->Mass-ej11->Part.E()-Tmis-Mmis;
98  //Формируем выходной объект
99  ERParticle mis;
100  mis.Mass = Mmis;
101  mis.Excitation = Exmis;
102  mis.Part.SetVect(Pmis);
103  mis.Part.SetE(Tmis+Exmis+Mmis);
104  fOutEvent->mis11 = mis;
105  //************************************************************/
106  Emis = projectile->Part.E()+target->Mass-ej11->Part.E();
107  Exmis= sqrt(pow(Emis,2)- Pmis.Mag2()) - Mmis;
108  ERParticle misNew;
109  misNew.Mass = Mmis;
110  misNew.Excitation = Exmis;
111  misNew.Part.SetVect(Pmis);
112  misNew.Part.SetE(Emis);
113  fOutEvent->mis11n = misNew;
114  //************************************************************/
115  //Бустируем все в центр масс первой реакции и заносим в дерево
116  projectile->Part.Boost(-CM0->Part.BoostVector());
117  target->Part.Boost(-CM0->Part.BoostVector());
118  ej11->Part.Boost(-CM0->Part.BoostVector());
119  mis.Part.Boost(-CM0->Part.BoostVector());
120  misNew.Part.Boost(-CM0->Part.BoostVector());
121  fOutEvent->mis11cm0 = mis;
122  fOutEvent->mis11ncm0 = misNew;
123  fOutEvent->ej11cm0 = (*ej11);
124  fOutEvent->projcm0 = (*projectile);
125  fOutEvent->targetcm0 = (*target);
126 }
127 //----------------------------------------------------------------------------
128 
129 //----------------------------------------------------------------------------
131 {
132  fOutEvent->Reset();
133 }
134 // ----------------------------------------------------------------------------
135 
136 // ----------------------------------------------------------------------------
138 {
139 
140 }
141 // ----------------------------------------------------------------------------
142 
143 //-----------------------------------------------------------------------------
144 ClassImp(ERHe10Reconstructor)
ERTelescopeRecoEvent * fRTelescopeEvent
virtual InitStatus Init()
virtual void Exec(Option_t *opt)