BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Pi0Cut.h
Go to the documentation of this file.
1#ifndef __PI0SELECTOR__H
2#define __PI0SELECTOR__H
3
4#include "BesDChain/CDPi0.h"
5#include "DecayChain/Function/DCSelectionFunction.h"
6#include "EvtRecEvent/EvtRecEvent.h"
7#include "EvtRecEvent/EvtRecPi0.h"
8#include "EvtRecEvent/EvtRecTrack.h"
9
10struct UserPi0Cut : public DCSelectionFunction<CDPi0> {
11 UserPi0Cut( double MEBP = 0.025, double MEEP = 0.045, double MA = 20., double TL = 25.,
12 double MinM = 0.12, double MaxM = 0.15, double c = 1e+10 )
15 , MinAngle( MA )
16 , TimeLimit( TL )
17 , Chisq( c )
18 , MinMass( MinM )
19 , MaxMass( MaxM ) {}
20
23 double MinAngle;
24 double TimeLimit;
25 double MinMass;
26 double MaxMass;
27 double Chisq;
28
29 bool operator()( CDPi0& _this ) {
30 EvtRecTrack* g1 = const_cast<EvtRecTrack*>( _this.navPi0()->hiEnGamma() );
31 EvtRecTrack* g2 = const_cast<EvtRecTrack*>( _this.navPi0()->loEnGamma() );
32 if ( !isGoodPhoton( g1 ) ) return false;
33 if ( !isGoodPhoton( g2 ) ) return false;
34 if ( _this.navPi0()->chisq() > Chisq ) return false;
35 if ( _this.navPi0()->unconMass() < MinMass || _this.navPi0()->unconMass() > MaxMass )
36 return false;
37 return true;
38 }
39
40 bool isGoodPhoton( EvtRecTrack* gTrk ) {
41 if ( !gTrk->isEmcShowerValid() ) return false;
42
43 RecEmcShower* emcTrk = gTrk->emcShower();
44 // check time
45 if ( emcTrk->time() > TimeLimit ) return false;
46 // check energy
47 int flag = ( emcTrk->cellId() & 0x000F0000 ) >> 16;
48 if ( ( flag == 1 ) && emcTrk->energy() < MinEnergyOfBarrelPhoton ) return false;
49 if ( ( flag == 0 || flag == 2 ) && emcTrk->energy() < MinEnergyOfEndcapPhoton )
50 return false;
51 // check angle
52 Hep3Vector emcpos( emcTrk->x(), emcTrk->y(), emcTrk->z() );
53 if ( recEvt->totalCharged() > 0 )
54 {
55 double dthe = 200.;
56 double dphi = 200.;
57 double dang1 = 200.;
58 for ( int j = 0; j < recEvt->totalCharged(); j++ )
59 {
60 EvtRecTrackIterator jtTrk = recTrkCol->begin() + j;
61 if ( !( *jtTrk )->isExtTrackValid() ) continue;
62 RecExtTrack* extTrk = ( *jtTrk )->extTrack();
63 if ( extTrk->emcVolumeNumber() == -1 ) continue;
64 Hep3Vector extpos = extTrk->emcPosition();
65 double angd1 = extpos.angle( emcpos );
66 double thed = extpos.theta() - emcpos.theta();
67 double phid = extpos.deltaPhi( emcpos );
68 thed =
69 fmod( thed + CLHEP::twopi + CLHEP::twopi + CLHEP::pi, CLHEP::twopi ) - CLHEP::pi;
70 phid =
71 fmod( phid + CLHEP::twopi + CLHEP::twopi + CLHEP::pi, CLHEP::twopi ) - CLHEP::pi;
72
73 if ( fabs( thed ) < fabs( dthe ) ) dthe = thed;
74 if ( fabs( phid ) < fabs( dphi ) ) dphi = phid;
75 if ( angd1 < dang1 ) dang1 = angd1;
76 }
77 if ( dang1 < 200 )
78 {
79 dthe = dthe * 180 / ( CLHEP::pi );
80 dphi = dphi * 180 / ( CLHEP::pi );
81 dang1 = dang1 * 180 / ( CLHEP::pi );
82 if ( dang1 < MinAngle ) return false;
83
84 } // End of "dang1 < 200" IF
85
86 } // End of "recEv
87 return true;
88 }
89
90public:
91 static void SetForTrack( EvtRecEvent* _recEvt, EvtRecTrackCol* _recTrkCol ) {
92 recEvt = _recEvt;
93 recTrkCol = _recTrkCol;
94 }
97};
98namespace Pi0 {
101} // namespace Pi0
102#endif
TF1 * g1
EvtRecTrackCol::iterator EvtRecTrackIterator
ObjectVector< EvtRecTrack > EvtRecTrackCol
virtual const EvtRecPi0 * navPi0() const
Definition CDPi0.cxx:92
UserPi0Cut VeryLoosePi0Cut
UserPi0Cut DefaultPi0Cut
Definition Pi0Cut.cxx:8
double MinAngle
Definition Pi0Cut.h:23
double MinEnergyOfEndcapPhoton
Definition Pi0Cut.h:22
bool operator()(CDPi0 &_this)
Definition Pi0Cut.h:29
static EvtRecEvent * recEvt
Definition Pi0Cut.h:95
bool isGoodPhoton(EvtRecTrack *gTrk)
Definition Pi0Cut.h:40
double MinMass
Definition Pi0Cut.h:25
double MaxMass
Definition Pi0Cut.h:26
UserPi0Cut(double MEBP=0.025, double MEEP=0.045, double MA=20., double TL=25., double MinM=0.12, double MaxM=0.15, double c=1e+10)
Definition Pi0Cut.h:11
double TimeLimit
Definition Pi0Cut.h:24
double MinEnergyOfBarrelPhoton
Definition Pi0Cut.h:21
static void SetForTrack(EvtRecEvent *_recEvt, EvtRecTrackCol *_recTrkCol)
Definition Pi0Cut.h:91
double Chisq
Definition Pi0Cut.h:27
static EvtRecTrackCol * recTrkCol
Definition Pi0Cut.h:96