#include "PndEventShape.h" #include "RhoCandidate.h" #include "RhoCandList.h" #include "TMatrixD.h" #include "TMatrixDEigen.h" PndEventShape::PndEventShape(RhoCandList &l, TLorentzVector cms, double neutMinE, double chrgMinP) : fnChrg(0), fnNeut(0), fN(0), fpmaxlab(0.), fpmaxcms(0.),fpminlab(0.), fpmincms(0.), fptmax(0.), fptmin(0.), fprapmax(0.), fptsumlab(0.),fneutetsumlab(0.),fneutesumlab(0.),fchrgptsumlab(0.),fchrgpsumlab(0.), fptsumcms(0.),fneutetsumcms(0.),fneutesumcms(0.),fchrgptsumcms(0.),fchrgpsumcms(0.), fsph(-1.), fapl(-1.), fpla(-1.), fcir(-1.), fFWready(false), fthr(-1.) { int i; // initialize more complex things fThrVect.SetXYZ(0.,0.,0.); fBoost=cms.BoostVector(); for (i=0;i<=FWMAX;++i) fFWmom[i]=0.; double pmax=0., ptmax=0., pmaxcms=0.; double pmin=1000., ptmin=1000., pmincms=1000.; double prapmax=0.; fLabList.clear(); fCmsList.clear(); fCharge.clear(); fElProb.clear(); fMuProb.clear(); fPiProb.clear(); fKaProb.clear(); fPrProb.clear(); for (i=0;iP4()); int chrg(l[i]->Charge()); // check thresholds for neutral and charged particles if ( (chrg==0 && lv.E()GetPidInfo(0)); fMuProb.push_back(l[i]->GetPidInfo(1)); fPiProb.push_back(l[i]->GetPidInfo(2)); fKaProb.push_back(l[i]->GetPidInfo(3)); fPrProb.push_back(l[i]->GetPidInfo(4)); // sum momentum variables (lab) fptsumlab += lv.Pt(); if (chrg==0) { fneutetsumlab += lv.Pt(); fneutesumlab += lv.E(); } else { fchrgptsumlab += lv.Pt(); fchrgpsumlab += lv.P(); } // cache maximum momenta in lab if (lv.P()>pmax) pmax=lv.P(); if (lv.Pt()>ptmax) ptmax=lv.Pt(); // cache minimum momenta in lab if (lv.P()prapmax) prapmax = lv.PseudoRapidity(); // cache boosted vectors lv.Boost(-fBoost); fCmsList.push_back(lv); // sum momentum variables (cms) fptsumcms += lv.Pt(); if (chrg==0) { fneutetsumcms += lv.Pt(); fneutesumcms += lv.E(); } else { fchrgptsumcms += lv.Pt(); fchrgpsumcms += lv.P(); } // cache maximum momenta in cms if (lv.P()>pmaxcms) pmaxcms=lv.P(); // cache minimum momenta in cms if (lv.P()0 double PndEventShape::Thrust() { // did we already compute? if (fthr>-1.) return fthr; TVector3 n0(0,0,0); if( fN==0 ) return -1.; int i,j; double pmax=0; //find starting vector as maximum momentum vector for (i=0;ipmax) { n0=fCmsList[i].Vect(); pmax=fCmsList[i].Vect().Mag(); } } TVector3 nnew(0,0,0); // find thrust axis (10 iterations) for (i=0;i<10;++i) { for (j=0;j1.) return -999.; if (l==0) return 1.; double pmm = 1.; double pmmp1 = x; if (l>1) { for(int ll=2; ll<=l; ll++) { double pll = (x * (2 * ll - 1) * pmmp1 - (ll - 1) * pmm) / (ll); pmm = pmmp1; pmmp1 = pll; } } return pmmp1; } // --------------------------------------- double PndEventShape::FoxWolfMomH(int order) { if (order>FWMAX) return -1.; // already computed FW moments if (fFWready) return fFWmom[order]; if( fN==0 ) return -1.; double s = 0.; int i,j,l; for (i=0; ipmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPmaxLab(double pmax) { int cnt=0; for (int i=0;ipmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPmaxCms(double pmax) { int cnt=0; for (int i=0;iptmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPtmaxLab(double ptmax) { int cnt=0; for (int i=0;iptmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPtmaxCms(double ptmax) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fElProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultMuonPminLab(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fMuProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPionPminLab(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fPiProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultKaonPminLab(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fKaProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultProtonPminLab(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fPrProb[i]>prob) cnt++; return cnt; } // --------------------------------------- // --------------------------------------- int PndEventShape::MultElectronPminCms(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fElProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultMuonPminCms(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fMuProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultPionPminCms(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fPiProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultKaonPminCms(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fKaProb[i]>prob) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultProtonPminCms(double prob, double pmin) { int cnt=0; for (int i=0;ipmin && fCharge[i]!=0 && fPrProb[i]>prob) cnt++; return cnt; } // --------------------------------------- // --------------------------------------- // --------------------------------------- int PndEventShape::MultNeutEminLab(double emin) { int cnt=0; for (int i=0;iemin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultNeutEmaxLab(double emax) { int cnt=0; for (int i=0;iemin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultNeutEmaxCms(double emax) { int cnt=0; for (int i=0;ipmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultChrgPmaxLab(double pmax) { int cnt=0; for (int i=0;ipmin) cnt++; return cnt; } // --------------------------------------- int PndEventShape::MultChrgPmaxCms(double pmax) { int cnt=0; for (int i=0;ipmin) sum+=fLabList[i].P(); return sum; } // --------------------------------------- double PndEventShape::SumPmaxLab(double pmax) { double sum=0; for (int i=0;ipmin) sum+=fLabList[i].P(); return sum; } // --------------------------------------- double PndEventShape::SumPmaxCms(double pmax) { double sum=0; for (int i=0;iptmin) sum+=fLabList[i].Pt(); return sum; } // --------------------------------------- double PndEventShape::SumPtmaxLab(double ptmax) { double sum=0; for (int i=0;iptmin) sum+=fLabList[i].Pt(); return sum; } // --------------------------------------- double PndEventShape::SumPtmaxCms(double ptmax) { double sum=0; for (int i=0;iemin) sum+=fLabList[i].E(); return sum; } // --------------------------------------- double PndEventShape::SumNeutEmaxLab(double emax) { double sum=0; for (int i=0;iemin) sum+=fLabList[i].E(); return sum; } // --------------------------------------- double PndEventShape::SumNeutEmaxCms(double emax) { double sum=0; for (int i=0;ipmin) sum+=fLabList[i].P(); return sum; } // --------------------------------------- double PndEventShape::SumChrgPmaxLab(double pmax) { double sum=0; for (int i=0;ipmin) sum+=fLabList[i].P(); return sum; } // --------------------------------------- double PndEventShape::SumChrgPmaxCms(double pmax) { double sum=0; for (int i=0;i