1 #include <Interaction.hxx> 2 #include <BasicUtils.hxx> 5 Interaction::Interaction(){
18 for(
int i = 0; i < 4; ++i){
22 AddTrajectory(traj, parent2);
27 trajectories.push_back(traj);
28 if (parent != parent2) std::cout <<
"Interaction::AddTrajectory().WARNING: add trajectory with a different parent !!!" << std::endl;
33 return traj->
Position[3] == position[3];
37 Int_t Interaction::NumberOfParticleType(Int_t pdg){
41 for (
unsigned int i = 0; i < trajectories.size(); i++){
43 if (trajectories[i]->PDG == pdg){
54 std::vector<UInt_t> Interaction::IndicesOfParticleType(Int_t pdg){
56 std::vector<UInt_t> result;
58 for (UInt_t i = 0; i < trajectories.size(); i++){
60 if (trajectories[i]->PDG == pdg){
69 Int_t Interaction::NPiZeroFromDecayProducts(){
74 std::vector<UInt_t> gammaIndices = IndicesOfParticleType(22);
75 std::vector<UInt_t> ePlusIndices = IndicesOfParticleType(-11);
76 std::vector<UInt_t> eMinusIndices = IndicesOfParticleType(11);
80 std::vector<TLorentzVector> momEPlusEMinusPairs;
81 for (UInt_t em = 0; em < eMinusIndices.size(); em++){
82 for(UInt_t ep = 0; ep < ePlusIndices.size(); ep++){
84 TVector3 eMinusDir(trajectories[eMinusIndices[em]]->Direction[0],trajectories[eMinusIndices[em]]->Direction[1], trajectories[eMinusIndices[em]]->Direction[2]);
85 TVector3 ePlusDir(trajectories[ePlusIndices[ep]]->Direction[0], trajectories[ePlusIndices[ep]]->Direction[1], trajectories[ePlusIndices[ep]]->Direction[2]);
87 double eMinusMom = trajectories[eMinusIndices[em]]->Momentum;
88 double ePlusMom = trajectories[ePlusIndices[em]]->Momentum;
90 TLorentzVector eMinusFourMom = GetFourMomentum(eMinusDir,eMinusMom,0.5109989);
91 TLorentzVector ePlusFourMom = GetFourMomentum(ePlusDir,ePlusMom,0.5109989);
93 momEPlusEMinusPairs.push_back(eMinusFourMom + ePlusFourMom);
98 for(UInt_t gi = 0; gi < gammaIndices.size(); gi++){
99 for(UInt_t pi = 0; pi < momEPlusEMinusPairs.size(); pi++){
101 TVector3 gammaDir(trajectories[gammaIndices[gi]]->Direction[0], trajectories[gammaIndices[gi]]->Direction[1], trajectories[gammaIndices[gi]]->Direction[2]);
102 double gammaMom = trajectories[gammaIndices[gi]]->Momentum;
104 TLorentzVector gammaFourMom = GetFourMomentum(gammaDir,gammaMom,0.0);
106 TLorentzVector sumOfMoms = gammaFourMom + momEPlusEMinusPairs[pi];
108 Double_t invariantMassofPair = sumOfMoms.M();
109 if (invariantMassofPair > 134.96 && invariantMassofPair < 135.00){
117 if(gammaIndices.size() > 1){
118 for (UInt_t gi = 0; gi < gammaIndices.size() - 1; gi++){
120 TVector3 gamma1Dir(trajectories[gammaIndices[gi]]->Direction[0], trajectories[gammaIndices[gi]]->Direction[1], trajectories[gammaIndices[gi]]->Direction[2]);
121 double gamma1Mom = trajectories[gammaIndices[gi]]->Momentum;
122 TLorentzVector gamma1FourMom = GetFourMomentum(gamma1Dir,gamma1Mom,0.0);
124 for (UInt_t gj = gi + 1; gj < gammaIndices.size(); gj++){
126 TVector3 gamma2Dir(trajectories[gammaIndices[gj]]->Direction[0], trajectories[gammaIndices[gj]]->Direction[1], trajectories[gammaIndices[gj]]->Direction[2]);
127 double gamma2Mom = trajectories[gammaIndices[gj]]->Momentum;
128 TLorentzVector gamma2FourMom = GetFourMomentum(gamma2Dir,gamma2Mom,0.0);
131 TLorentzVector sumOfPhotonMoms = gamma1FourMom + gamma2FourMom;
134 Double_t invariantMassofPair = sumOfPhotonMoms.M();
135 if (invariantMassofPair > 134.96 && invariantMassofPair < 135.00){
154 return a.position[3] < b.position[3];
160 TLorentzVector GetFourMomentum(TVector3 direction,
double momentum, Double_t mass){
162 TVector3 momVec = momentum*direction;
164 Double_t E = sqrt(momVec.Mag2() + pow(mass,2));
166 TLorentzVector fourMom(momVec.Px(),momVec.Py(),momVec.Pz(),E);
174 Int_t Interaction::CountExoticParticles(){
178 for (
unsigned int i = 0; i < trajectories.size(); i++){
184 if (trajectories[i]->PDG != 11
185 && trajectories[i]->PDG != -11
186 && trajectories[i]->PDG != 13
187 && trajectories[i]->PDG != -13
188 && trajectories[i]->PDG != 111
189 && trajectories[i]->PDG != 211
190 && trajectories[i]->PDG != -211
191 && trajectories[i]->PDG != 22
192 && trajectories[i]->PDG != 2212
193 && trajectories[i]->PDG != 2112){
Representation of a true Monte Carlo trajectory/particle.
Int_t ParentPDG
The PDG code of this particle's immediate parent, or 0 if there is no parent.
Int_t ParentID
The ID of this particle's immediate parent, or 0 if there is no parent.
Float_t Position[4]
The initial position of the true particle.