/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/Pi0RecAlg/Pi0RecAlg-00-00-06/Pi0RecAlg/MakeGroupList.h

Go to the documentation of this file.
00001 #ifndef MAKEGROUPLIST__H
00002 #define MAKEGROUPLIST__H
00003 
00004 #include <list>
00005 #include <algorithm>
00006 #include "Criteria.h"
00007 #include "VertexFit/KinematicFit.h"
00008 #include "CLHEP/Vector/LorentzVector.h"
00009 #include "EvtRecEvent/EvtRecEvent.h"
00010 #include "EvtRecEvent/EvtRecTrack.h"
00011 #include "Pi0Cut.h"
00012 namespace Pi0{
00013 
00014 
00015         typedef std::list<Criteria> CriteriaList;
00016         typedef std::list<Criteria>::iterator CriteriaIterator;
00017         typedef std::list<Criteria>::const_iterator Const_CriteriaIteator;
00018 
00019         typedef std::list<GammaPair> Pi0List;
00020         typedef std::list<GammaPair>::iterator Pi0Iterator;
00021         typedef std::list<GammaPair>::const_iterator Const_Pi0Iterator;
00022 
00023         typedef std::list<EvtRecTrack*> GammaList;
00024         typedef std::list<EvtRecTrack*>::iterator GammaIterator;
00025         typedef std::list<EvtRecTrack*>::const_iterator Const_GammaIterator;
00026 
00027         CriteriaList default_criteria_list;
00028         Pi0List candidate_pi0_list;
00029         Pi0List filter_pi0_list;
00030         GammaList default_gamma_list;//one copy of all photons
00031 //      GammaList update_gamma_list;//a subset of default_gamma_list 
00032 
00033         GammaList& GetDefaultGammaList() { return default_gamma_list;}
00034 //        GammaList& GetUpdateGammaList() { return update_gamma_list;}
00035         Pi0List& GetCandidatePi0List() { return candidate_pi0_list;}
00036         Pi0List& GetFilterPi0List() { return filter_pi0_list;}
00037 
00038 //      GammaList& make_gamma_list(EvtRecEvent* recEvt, EvtRecTrackCol* recTrkCol)
00039         GammaList& make_gamma_list(UserPi0Cut& cut)
00040         {
00041                 EvtRecEvent* recEvt = UserPi0Cut::recEvt;
00042                 EvtRecTrackCol* recTrkCol = UserPi0Cut::recTrkCol;
00043 
00044                 default_gamma_list.clear();
00045 //              update_gamma_list.clear();
00046                 for(int i1 = recEvt->totalCharged(); i1 < (recEvt->totalTracks()); ++i1) 
00047                 {
00048 
00049                         EvtRecTrack* gTrk = *(recTrkCol->begin() + i1);
00050                         if(cut.isGoodPhoton(gTrk))
00051                         {
00052                                 default_gamma_list.push_back(gTrk);
00053 //                              update_gamma_list.push_back(gTrk);
00054                         }
00055                 }
00056                 return default_gamma_list;
00057         }
00058 /*      GammaList& remake_gamma_list_by_remove(const GammaPair& gp)//remove two gamma ref by gp from list
00059         {
00060                 update_gamma_list.remove(gp.First);
00061                 update_gamma_list.remove(gp.Second);
00062                 return update_gamma_list;
00063         }*/
00064         void print_gamma_list(const GammaList& list)
00065         {
00066                 if(list.size() == 0) {std::cout<<"GammaList->()"<<std::endl; return;}
00067                 std::cout<<"GammaList->(";
00068                 for(Const_GammaIterator it = list.begin(); it!= list.end(); it++)
00069                 {
00070                         std::cout<<(*it)->trackId()<<", "; 
00071                 }
00072                 std::cout<<')'<<std::endl;
00073         }
00074         //=============
00075         Pi0List& make_pi0_list(const GammaList& gamma_list)
00076         {
00077                 candidate_pi0_list.clear();
00078                 Const_GammaIterator i_it = gamma_list.begin();
00079                 Const_GammaIterator i_it_end = gamma_list.end();
00080                 Const_GammaIterator j_it_end = gamma_list.end();
00081 
00082                 --i_it_end;
00083 
00084                 //              KinematicFit * kmfit = KinematicFit::instance();
00085                 Const_GammaIterator j_it ;
00086                 for(; i_it != i_it_end; ++i_it)
00087                 {
00088                         for( j_it = i_it, ++j_it ; j_it != j_it_end; ++j_it)
00089                         {
00090 
00091                                 EvtRecTrack* g1Trk = *i_it;
00092                                 EvtRecTrack* g2Trk = *j_it;
00093 
00094                                 RecEmcShower* g1Shower = g1Trk->emcShower();
00095                                 RecEmcShower* g2Shower = g2Trk->emcShower();
00096                                 double inv_m = (getP4(g1Shower) + getP4(g2Shower)).m();
00097 
00098                                 /*                              kmfit->init();
00099                                                                 kmfit->AddTrack(0, 0.0, g1Shower);
00100                                                                 kmfit->AddTrack(1, 0.0, g2Shower);
00101                                                                 kmfit->AddResonance(0, 0.1349766, 0, 1);
00102                                                                 kmfit->Fit(0);*/
00103 
00104                                 candidate_pi0_list.push_back(GammaPair(*i_it, *j_it, inv_m)); 
00105                         }
00106                 }
00107                 return candidate_pi0_list;
00108         }
00109         void print_pi0_list(const Pi0List& list)
00110         {
00111                 std::cout<<"OK Pi0List->{";
00112                 for(Const_Pi0Iterator it = list.begin(); it!= list.end(); it++)
00113                 {
00114                         std::cout<<"("<<(*it).inv_m<<","<<(*it).First->trackId()<<","<<(*it).Second->trackId()<<"), ";       
00115                 }
00116                 std::cout<<'}'<<std::endl;
00117         }
00118         Pi0List& apply_criteria(const Criteria& cri)
00119         {
00120                 Pi0Iterator it = candidate_pi0_list.begin();
00121                 for(; it!=candidate_pi0_list.end();)
00122                 {
00123                         if( cri.check(*it))
00124                                 ++it;
00125                         else{
00126                                 filter_pi0_list.push_back(*it);
00127                                 it = candidate_pi0_list.erase(it);
00128                         }
00129 
00130                 }
00131                 return candidate_pi0_list;
00132         }
00133         void Pi0ListToTDS(const Pi0List& pi0list, EvtRecPi0Col* recPi0Col)
00134         {
00135                 assert(recPi0Col);
00136                 static double xmpi0= 0.1349766;
00137                 KinematicFit * kmfit = KinematicFit::instance();
00138 
00139                 for(Const_Pi0Iterator it = pi0list.begin(); it != pi0list.end(); ++it)
00140                 {
00141                         EvtRecTrack* g1Trk = (*it).First;
00142                         EvtRecTrack* g2Trk = (*it).Second;
00143                         RecEmcShower* g1Shower = g1Trk->emcShower();
00144                         RecEmcShower* g2Shower = g2Trk->emcShower();
00145 
00146                         kmfit->init();
00147                         kmfit->AddTrack(0, 0.0, g1Shower);
00148                         kmfit->AddTrack(1, 0.0, g2Shower);
00149                         kmfit->AddResonance(0, xmpi0, 0, 1);
00150                         kmfit->Fit(0);
00151 
00152                         HepLorentzVector g1P4 = getP4(g1Shower);
00153                         HepLorentzVector g2P4 = getP4(g2Shower);
00154                         HepLorentzVector p2g = g1P4 + g2P4;
00155                         EvtRecPi0* recPi0 = new EvtRecPi0();
00156 
00157                         recPi0->setUnconMass(p2g.restMass());
00158                         recPi0->setChisq(kmfit->chisq(0));
00159                         if ( g1P4.e() >= g2P4.e() ) {
00160                                 recPi0->setHiPfit(kmfit->pfit(0));
00161                                 recPi0->setLoPfit(kmfit->pfit(1));
00162                                 recPi0->setHiEnGamma(g1Trk);
00163                                 recPi0->setLoEnGamma(g2Trk);
00164                         }
00165                         else {
00166                                 recPi0->setHiPfit(kmfit->pfit(1));
00167                                 recPi0->setLoPfit(kmfit->pfit(0));
00168                                 recPi0->setHiEnGamma(g2Trk);
00169                                 recPi0->setLoEnGamma(g1Trk);
00170                         }
00171 
00172                         recPi0Col->push_back(recPi0);
00173                 }
00174         }
00175         //pi0 reconstruction strategy
00176         /*  void priority_method(int nPi0, EvtRecPi0Col* pi0_col) //reconstruct pi0 one by one
00177             {
00178             assert(pi0_col);
00179             int i = 0;
00180             Pi0List& _this = make_pi0_list(update_gamma_list);
00181             print_pi0_list(_this);
00182             Pi0List ret = the_most_optimized(_this);
00183             Pi0List2TDS(ret, pi0_col);
00184             ++i;
00185             while(i<nPi0){
00186             remake_gamma_list_by_remove(*(ret.begin()));
00187             Pi0List& _this = make_pi0_list(update_gamma_list);
00188             print_pi0_list(_this);
00189             Pi0List ret = the_most_optimized(_this);
00190             Pi0List2TDS(ret, pi0_col);
00191             };
00192             }*/
00193         /*      void general_method(EvtRecPi0Col* pi0_col)
00194                 {
00195                 make_pi0_list(default_gamma_list);
00196                 Criteria cri_inv;
00197                 apply_criteria(cri_inv);
00198                 BasicCriteria cri_kfit;
00199                 apply_criteria(cri_kfit);
00200                 Pi0ListToTDS(candidate_pi0_list, pi0_col);
00201                 }*/
00202         void apply_criterias()
00203         {
00204                 for(CriteriaIterator it = default_criteria_list.begin(); it != default_criteria_list.end(); ++it)
00205                 {
00206                         apply_criteria(*it);
00207                 }
00208         }
00209         void add_cut(const Criteria& cri)
00210         {
00211                 default_criteria_list.push_back(cri);
00212         }
00213         /*      void rec_pi0(EvtRecEvent* recEvt, EvtRecTrackCol* recTrkCol, EvtRecPi0Col* pi0_col, int nPi0=0)//nPi0, you want to reconstruct n Pi0 
00214                 {
00215         //              assert(recEvt);assert(recTrkCol);
00216         GammaList& gamma_list = make_gamma_list(recEvt, recTrkCol);
00217         //              std::cout<<"gamma in total = "<<gamma_list.size()<<std::endl;
00218         //              std::cout<<"maximum pi0 N = "<<gamma_list.size()/2<<std::endl;
00219         //              if(gamma_list.size()/2 <nPi0) nPi0 = gamma_list.size()/2;
00220         //              print_gamma_list(gamma_list);
00221         //                priority_method(nPi0, pi0_col);
00222         make_pi0_list(gamma_list);
00223         apply_criterias();
00224         //              Criteria cri_inv;
00225         //              apply_criteria(cri_inv);
00226         //              KFitCriteria cri_kfit;
00227         //              apply_criteria(cri_kfit);
00228         candidate_pi0_list.sort(high_momentum());
00229         print_pi0_list(candidate_pi0_list);
00230         Pi0ListToTDS(candidate_pi0_list, pi0_col);
00231         }*/
00232 }
00233 #endif

Generated on Tue Nov 29 23:13:46 2016 for BOSS_7.0.2 by  doxygen 1.4.7