8 #include "TMatrixDEigen.h"
13 fnChrg(0), fnNeut(0), fN(0), fpmaxlab(0.), fpmaxcms(0.),fpminlab(0.), fpmincms(0.), fptmax(0.), fptmin(0.),
14 fprapmax(0.), femaxneutlab(0.), femaxneutcms(0.), fpmaxchlab(0.), fpmaxchcms(0.), fdetemcsum(0.), fdetemcmax(0.),
15 fptsumlab(0.),fneutetsumlab(0.),fneutesumlab(0.),fchrgptsumlab(0.),fchrgpsumlab(0.),
16 fptsumcms(0.),fneutetsumcms(0.),fneutesumcms(0.),fchrgptsumcms(0.),fchrgpsumcms(0.),
17 fsph(-1.), fapl(-1.), fpla(-1.), fcir(-1.), fFWready(false), fthr(-1.)
27 double pmax=0., ptmax=0., pmaxcms=0.;
28 double pmin=1000., ptmin=1000., pmincms=1000.;
30 double pmaxch=0., pmaxchcms=0., emaxneut=0., emaxneutcms=0.;
31 double emcmax=0., emcsum=0.;
46 TLorentzVector lv(l[i]->P4());
47 int chrg(l[i]->Charge());
50 if ( (chrg==0 && lv.E()<neutMinE) || (chrg!=0 && lv.P()<chrgMinP) )
continue;
65 fElProb.push_back(l[i]->GetPidInfo(0));
66 fMuProb.push_back(l[i]->GetPidInfo(1));
67 fPiProb.push_back(l[i]->GetPidInfo(2));
68 fKaProb.push_back(l[i]->GetPidInfo(3));
69 fPrProb.push_back(l[i]->GetPidInfo(4));
77 if (lv.E()>emaxneut) emaxneut = lv.E();
83 if (lv.P()>pmaxch) pmaxch = lv.P();
87 if (lv.P()>pmax) pmax=lv.P();
88 if (lv.Pt()>ptmax) ptmax=lv.Pt();
91 if (lv.P()<pmin) pmin=lv.P();
92 if (lv.Pt()<ptmin) ptmin=lv.Pt();
95 if (lv.PseudoRapidity()>prapmax) prapmax = lv.PseudoRapidity();
107 if (lv.E()>emaxneutcms) emaxneutcms = lv.E();
113 if (lv.P()>pmaxchcms) pmaxchcms = lv.P();
117 if (lv.P()>pmaxcms) pmaxcms=lv.P();
119 if (lv.P()<pmincms) pmincms=lv.P();
150 double stot=0, sxx=0, sxy=0, sxz=0, syy=0, syz=0, szz=0;
157 sxx += v.X()*v.X(); sxy += v.X()*v.Y(); sxz += v.X()*v.Z();
158 syy += v.Y()*v.Y(); syz += v.Y()*v.Z();
165 sm(0,0) = sxx/stot; sm(0,1) = sxy/stot; sm(0,2) = sxz/stot;
166 sm(1,0) = sxy/stot; sm(1,1) = syy/stot; sm(1,2) = syz/stot;
167 sm(2,0) = sxz/stot; sm(2,1) = syz/stot; sm(2,2) = szz/stot;
169 TMatrixDEigen ei(sm);
172 fsph = 1.5 * (eiv(1,1) + eiv(2,2));
173 fapl = 1.5 * eiv(2,2);
174 fpla = eiv(1,1) - eiv(2,2);
175 fcir = 2.*
std::min(eiv(1,1),eiv(0,0))/(eiv(1,1)+eiv(0,0));
236 if(
fN==0 )
return -1.;
241 std::vector<TVector3> MomList;
245 std::sort(MomList.begin(), MomList.end(),
CmpTVect3Mag);
248 TVector3 n0 = MomList[0];
254 std::vector<TVector3> startn0;
259 for (i=0; i<nst; ++
i)
268 for (j=0;j<n-1;++j) newst += (( (i>>j) & 1)*2-1 ) * MomList[j+1];
270 startn0.push_back(newst.Unit());
274 for (k=0; k<startn0.size(); ++k)
277 TVector3 nnew(0,0,0);
283 for (j=0;(int)j<
fN;++j) nnew +=
Eps(n0, MomList[j]) * MomList[j];
290 double thisthr=0, sum=0;
292 for (i=0;(int)i<
fN;++
i)
294 thisthr +=
fabs(n0.Dot(MomList[i]));
295 sum += MomList[
i].Mag();
363 if (
fabs(x)>1.)
return -999.;
372 for(
int ll=2; ll<=l; ll++)
374 double pll = (x * (2 * ll - 1) * pmmp1 - (ll - 1) * pmm) / (ll);
386 if (order>
FWMAX)
return -1.;
391 if(
fN==0 )
return -1.;
396 for (i=0; i<
fN-1; ++
i)
400 double pmag1 = p1.Mag();
404 for (j=i+1; j<
fN; ++j)
408 double pmag2 = p2.Mag();
411 double cosPhi =
cos ( p1.Angle(p2) );
415 for( l=0; l<=
FWMAX; l++ )
420 for( l=0; l<=
FWMAX; l++ )
428 if( s<=0. )
return -1.;
454 for (
int i=0;
i<
fN;++
i)
465 for (
int i=0;
i<
fN;++
i)
476 for (
int i=0;
i<
fN;++
i)
487 for (
int i=0;
i<
fN;++
i)
499 for (
int i=0;
i<
fN;++
i)
510 for (
int i=0;
i<
fN;++
i)
521 for (
int i=0;
i<
fN;++
i)
532 for (
int i=0;
i<
fN;++
i)
544 for (
int i=0;
i<
fN;++
i)
555 for (
int i=0;
i<
fN;++
i)
566 for (
int i=0;
i<
fN;++
i)
577 for (
int i=0;
i<
fN;++
i)
588 for (
int i=0;
i<
fN;++
i)
600 for (
int i=0;
i<
fN;++
i)
611 for (
int i=0;
i<
fN;++
i)
622 for (
int i=0;
i<
fN;++
i)
633 for (
int i=0;
i<
fN;++
i)
644 for (
int i=0;
i<
fN;++
i)
657 for (
int i=0;
i<
fN;++
i)
668 for (
int i=0;
i<
fN;++
i)
679 for (
int i=0;
i<
fN;++
i)
690 for (
int i=0;
i<
fN;++
i)
703 for (
int i=0;
i<
fN;++
i)
714 for (
int i=0;
i<
fN;++
i)
725 for (
int i=0;
i<
fN;++
i)
736 for (
int i=0;
i<
fN;++
i)
749 for (
int i=0;
i<
fN;++
i)
760 for (
int i=0;
i<
fN;++
i)
771 for (
int i=0;
i<
fN;++
i)
782 for (
int i=0;
i<
fN;++
i)
795 for (
int i=0;
i<
fN;++
i)
806 for (
int i=0;
i<
fN;++
i)
817 for (
int i=0;
i<
fN;++
i)
828 for (
int i=0;
i<
fN;++
i)
841 for (
int i=0;
i<
fN;++
i)
852 for (
int i=0;
i<
fN;++
i)
863 for (
int i=0;
i<
fN;++
i)
874 for (
int i=0;
i<
fN;++
i)
887 for (
int i=0;
i<
fN;++
i)
898 for (
int i=0;
i<
fN;++
i)
909 for (
int i=0;
i<
fN;++
i)
920 for (
int i=0;
i<
fN;++
i)
double SumNeutEmaxCms(double emax)
int MultChrgPminCms(double pmin)
double SumNeutEminLab(double emin)
double FoxWolfMomH(int order)
friend F32vec4 cos(const F32vec4 &a)
int MultPmaxLab(double pmax)
int MultKaonPminCms(double prob, double pmin=0)
int MultProtonPminCms(double prob, double pmin=0)
std::vector< double > fKaProb
int MultPtmaxLab(double ptmax)
Float_t GetEmcCalEnergy() const
std::vector< int > fCharge
double SumChrgPminCms(double pmin)
double SumPminCms(double pmin)
int MultPtminCms(double ptmin)
std::vector< TLorentzVector > fLabList
double SumNeutEmaxLab(double emax)
PndEventShape(RhoCandList &l, TLorentzVector cms, double neutMinE=0.0, double chrgMinP=0.0)
double SumNeutEminCms(double emin)
static bool CmpTVect3Mag(TVector3 v1, TVector3 v2)
int MultKaonPminLab(double prob, double pmin=0)
double SumPtmaxCms(double ptmax)
int MultPtminLab(double ptmin)
double SumChrgPminLab(double pmin)
std::vector< double > fElProb
int MultNeutEminCms(double emin)
int MultChrgPmaxCms(double pmax)
std::vector< double > fMuProb
int MultPtmaxCms(double ptmax)
int MultNeutEmaxCms(double emax)
double Legendre(int l, double x)
int MultMuonPminLab(double prob, double pmin=0)
int MultPminLab(double pmin)
int MultChrgPmaxLab(double pmax)
int MultNeutEmaxLab(double emax)
std::vector< double > fPiProb
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
int MultPionPminCms(double prob, double pmin=0)
friend F32vec4 fabs(const F32vec4 &a)
double SumPtmaxLab(double ptmax)
double Eps(const TVector3 v1, const TVector3 v2)
double SumPtminCms(double ptmin)
int MultPminCms(double pmin)
double SumChrgPmaxLab(double pmax)
double Thrust(int Nmax=4)
int MultPionPminLab(double prob, double pmin=0)
int MultMuonPminCms(double prob, double pmin=0)
int MultPmaxCms(double pmax)
double SumChrgPmaxCms(double pmax)
double SumPtminLab(double ptmin)
int MultNeutEminLab(double emin)
double SumPmaxCms(double pmax)
double SumPminLab(double pmin)
std::vector< double > fPrProb
int MultChrgPminLab(double pmin)
std::vector< TLorentzVector > fCmsList
double FoxWolfMomR(int order)
int MultElectronPminCms(double prob, double pmin=0)
int MultElectronPminLab(double prob, double pmin=0)
int MultProtonPminLab(double prob, double pmin=0)
TMatrixT< double > TMatrixD
double SumPmaxLab(double pmax)