BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MakeGroupList.h
Go to the documentation of this file.
1#ifndef MAKEGROUPLIST__H
2#define MAKEGROUPLIST__H
3
4#include "CLHEP/Vector/LorentzVector.h"
5#include "Criteria.h"
6#include "EvtRecEvent/EvtRecEvent.h"
7#include "EvtRecEvent/EvtRecTrack.h"
8#include "Pi0Cut.h"
9#include "VertexFit/KinematicFit.h"
10#include <algorithm>
11#include <list>
12namespace Pi0 {
13
14 typedef std::list<Criteria> CriteriaList;
15 typedef std::list<Criteria>::iterator CriteriaIterator;
16 typedef std::list<Criteria>::const_iterator Const_CriteriaIteator;
17
18 typedef std::list<GammaPair> Pi0List;
19 typedef std::list<GammaPair>::iterator Pi0Iterator;
20 typedef std::list<GammaPair>::const_iterator Const_Pi0Iterator;
21
22 typedef std::list<EvtRecTrack*> GammaList;
23 typedef std::list<EvtRecTrack*>::iterator GammaIterator;
24 typedef std::list<EvtRecTrack*>::const_iterator Const_GammaIterator;
25
29 GammaList default_gamma_list; // one copy of all photons
30 // GammaList update_gamma_list;//a subset of default_gamma_list
31
33 // GammaList& GetUpdateGammaList() { return update_gamma_list;}
36
37 // GammaList& make_gamma_list(EvtRecEvent* recEvt, EvtRecTrackCol* recTrkCol)
41
42 default_gamma_list.clear();
43 // update_gamma_list.clear();
44 for ( int i1 = recEvt->totalCharged(); i1 < ( recEvt->totalTracks() ); ++i1 )
45 {
46
47 EvtRecTrack* gTrk = *( recTrkCol->begin() + i1 );
48 if ( cut.isGoodPhoton( gTrk ) )
49 {
50 default_gamma_list.push_back( gTrk );
51 // update_gamma_list.push_back(gTrk);
52 }
53 }
54 return default_gamma_list;
55 }
56 /* GammaList& remake_gamma_list_by_remove(const GammaPair& gp)//remove two gamma ref by gp
57 from list
58 {
59 update_gamma_list.remove(gp.First);
60 update_gamma_list.remove(gp.Second);
61 return update_gamma_list;
62 }*/
63 void print_gamma_list( const GammaList& list ) {
64 if ( list.size() == 0 )
65 {
66 std::cout << "GammaList->()" << std::endl;
67 return;
68 }
69 std::cout << "GammaList->(";
70 for ( Const_GammaIterator it = list.begin(); it != list.end(); it++ )
71 { std::cout << ( *it )->trackId() << ", "; }
72 std::cout << ')' << std::endl;
73 }
74 //=============
75 Pi0List& make_pi0_list( const GammaList& gamma_list ) {
76 candidate_pi0_list.clear();
77 Const_GammaIterator i_it = gamma_list.begin();
78 Const_GammaIterator i_it_end = gamma_list.end();
79 Const_GammaIterator j_it_end = gamma_list.end();
80
81 --i_it_end;
82
83 // KinematicFit * kmfit = KinematicFit::instance();
85 for ( ; i_it != i_it_end; ++i_it )
86 {
87 for ( j_it = i_it, ++j_it; j_it != j_it_end; ++j_it )
88 {
89
90 EvtRecTrack* g1Trk = *i_it;
91 EvtRecTrack* g2Trk = *j_it;
92
93 RecEmcShower* g1Shower = g1Trk->emcShower();
94 RecEmcShower* g2Shower = g2Trk->emcShower();
95 double inv_m = ( getP4( g1Shower ) + getP4( g2Shower ) ).m();
96
97 /* kmfit->init();
98 kmfit->AddTrack(0, 0.0, g1Shower);
99 kmfit->AddTrack(1, 0.0, g2Shower);
100 kmfit->AddResonance(0, 0.1349766, 0, 1);
101 kmfit->Fit(0);*/
102
103 candidate_pi0_list.push_back( GammaPair( *i_it, *j_it, inv_m ) );
104 }
105 }
106 return candidate_pi0_list;
107 }
108 void print_pi0_list( const Pi0List& list ) {
109 std::cout << "OK Pi0List->{";
110 for ( Const_Pi0Iterator it = list.begin(); it != list.end(); it++ )
111 {
112 std::cout << "(" << ( *it ).inv_m << "," << ( *it ).First->trackId() << ","
113 << ( *it ).Second->trackId() << "), ";
114 }
115 std::cout << '}' << std::endl;
116 }
118 Pi0Iterator it = candidate_pi0_list.begin();
119 for ( ; it != candidate_pi0_list.end(); )
120 {
121 if ( cri.check( *it ) ) ++it;
122 else
123 {
124 filter_pi0_list.push_back( *it );
125 it = candidate_pi0_list.erase( it );
126 }
127 }
128 return candidate_pi0_list;
129 }
130 void Pi0ListToTDS( const Pi0List& pi0list, EvtRecPi0Col* recPi0Col ) {
131 assert( recPi0Col );
132 static double xmpi0 = 0.1349766;
134
135 for ( Const_Pi0Iterator it = pi0list.begin(); it != pi0list.end(); ++it )
136 {
137 EvtRecTrack* g1Trk = ( *it ).First;
138 EvtRecTrack* g2Trk = ( *it ).Second;
139 RecEmcShower* g1Shower = g1Trk->emcShower();
140 RecEmcShower* g2Shower = g2Trk->emcShower();
141
142 kmfit->init();
143 kmfit->AddTrack( 0, 0.0, g1Shower );
144 kmfit->AddTrack( 1, 0.0, g2Shower );
145 kmfit->AddResonance( 0, xmpi0, 0, 1 );
146 kmfit->Fit( 0 );
147
148 HepLorentzVector g1P4 = getP4( g1Shower );
149 HepLorentzVector g2P4 = getP4( g2Shower );
150 HepLorentzVector p2g = g1P4 + g2P4;
151 EvtRecPi0* recPi0 = new EvtRecPi0();
152
153 recPi0->setUnconMass( p2g.restMass() );
154 recPi0->setChisq( kmfit->chisq( 0 ) );
155 if ( g1P4.e() >= g2P4.e() )
156 {
157 recPi0->setHiPfit( kmfit->pfit( 0 ) );
158 recPi0->setLoPfit( kmfit->pfit( 1 ) );
159 recPi0->setHiEnGamma( g1Trk );
160 recPi0->setLoEnGamma( g2Trk );
161 }
162 else
163 {
164 recPi0->setHiPfit( kmfit->pfit( 1 ) );
165 recPi0->setLoPfit( kmfit->pfit( 0 ) );
166 recPi0->setHiEnGamma( g2Trk );
167 recPi0->setLoEnGamma( g1Trk );
168 }
169
170 recPi0Col->push_back( recPi0 );
171 }
172 }
173 // pi0 reconstruction strategy
174 /* void priority_method(int nPi0, EvtRecPi0Col* pi0_col) //reconstruct pi0 one by one
175 {
176 assert(pi0_col);
177 int i = 0;
178 Pi0List& _this = make_pi0_list(update_gamma_list);
179 print_pi0_list(_this);
180 Pi0List ret = the_most_optimized(_this);
181 Pi0List2TDS(ret, pi0_col);
182 ++i;
183 while(i<nPi0){
184 remake_gamma_list_by_remove(*(ret.begin()));
185 Pi0List& _this = make_pi0_list(update_gamma_list);
186 print_pi0_list(_this);
187 Pi0List ret = the_most_optimized(_this);
188 Pi0List2TDS(ret, pi0_col);
189 };
190 }*/
191 /* void general_method(EvtRecPi0Col* pi0_col)
192 {
193 make_pi0_list(default_gamma_list);
194 Criteria cri_inv;
195 apply_criteria(cri_inv);
196 BasicCriteria cri_kfit;
197 apply_criteria(cri_kfit);
198 Pi0ListToTDS(candidate_pi0_list, pi0_col);
199 }*/
201 for ( CriteriaIterator it = default_criteria_list.begin();
202 it != default_criteria_list.end(); ++it )
203 { apply_criteria( *it ); }
204 }
205 void add_cut( const Criteria& cri ) { default_criteria_list.push_back( cri ); }
206 /* void rec_pi0(EvtRecEvent* recEvt, EvtRecTrackCol* recTrkCol, EvtRecPi0Col* pi0_col, int
207 nPi0=0)//nPi0, you want to reconstruct n Pi0
208 {
209 // assert(recEvt);assert(recTrkCol);
210 GammaList& gamma_list = make_gamma_list(recEvt, recTrkCol);
211 // std::cout<<"gamma in total = "<<gamma_list.size()<<std::endl;
212 // std::cout<<"maximum pi0 N = "<<gamma_list.size()/2<<std::endl;
213 // if(gamma_list.size()/2 <nPi0) nPi0 = gamma_list.size()/2;
214 // print_gamma_list(gamma_list);
215 // priority_method(nPi0, pi0_col);
216 make_pi0_list(gamma_list);
217 apply_criterias();
218 // Criteria cri_inv;
219 // apply_criteria(cri_inv);
220 // KFitCriteria cri_kfit;
221 // apply_criteria(cri_kfit);
222 candidate_pi0_list.sort(high_momentum());
223 print_pi0_list(candidate_pi0_list);
224 Pi0ListToTDS(candidate_pi0_list, pi0_col);
225 }*/
226} // namespace Pi0
227#endif
ObjectVector< EvtRecPi0 > EvtRecPi0Col
ObjectVector< EvtRecTrack > EvtRecTrackCol
*********Class see also m_nmax DOUBLE PRECISION m_MasPhot DOUBLE PRECISION m_phsu DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_r2 DOUBLE PRECISION m_WtMass INTEGER m_nmax INTEGER m_Nevgen INTEGER m_IsFSR INTEGER m_MarTot *COMMON c_KarFin $ !Output file $ !Event serial number $ !alpha QED at Thomson limit $ !minimum energy at CMS for remooval $ !infrared cut
Definition KarFin.h:27
HepLorentzVector getP4(RecEmcShower *gtrk)
Definition MyUtil.cxx:16
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations xmb DOUBLE PRECISION xcb DOUBLE PRECISION xmpi0
Definition RRes.h:32
void setLoPfit(const HepLorentzVector &loPfit)
void setLoEnGamma(const EvtRecTrack *trk)
void setHiPfit(const HepLorentzVector &hiPfit)
void setUnconMass(const double unconMass)
void setHiEnGamma(const EvtRecTrack *trk)
static KinematicFit * instance()
void AddResonance(int number, double mres, std::vector< int > tlis)
void AddTrack(const int number, const double mass, const RecMdcTrack *trk)
Definition TrackPool.cxx:21
std::list< GammaPair >::iterator Pi0Iterator
Pi0List & make_pi0_list(const GammaList &gamma_list)
std::list< EvtRecTrack * > GammaList
void print_gamma_list(const GammaList &list)
std::list< Criteria >::iterator CriteriaIterator
void print_pi0_list(const Pi0List &list)
GammaList default_gamma_list
GammaList & make_gamma_list(UserPi0Cut &cut)
CriteriaList default_criteria_list
void add_cut(const Criteria &cri)
void apply_criterias()
Pi0List candidate_pi0_list
Pi0List filter_pi0_list
std::list< Criteria >::const_iterator Const_CriteriaIteator
void Pi0ListToTDS(const Pi0List &pi0list, EvtRecPi0Col *recPi0Col)
GammaList & GetDefaultGammaList()
Pi0List & GetCandidatePi0List()
std::list< EvtRecTrack * >::iterator GammaIterator
std::list< EvtRecTrack * >::const_iterator Const_GammaIterator
std::list< GammaPair >::const_iterator Const_Pi0Iterator
Pi0List & GetFilterPi0List()
std::list< GammaPair > Pi0List
std::list< Criteria > CriteriaList
Pi0List & apply_criteria(const Criteria &cri)
virtual bool check(const GammaPair &gp) const
Definition Criteria.h:52
static EvtRecEvent * recEvt
Definition Pi0Cut.h:95
static EvtRecTrackCol * recTrkCol
Definition Pi0Cut.h:96