Upload
penelope-hines
View
214
Download
0
Embed Size (px)
Citation preview
14.9.99 Maria Hoerndl, ALPHA++ 1
My work project
Add simple kinematics functions and then morecomplex routines like Thrust and Jet algorithms to the ALPHA++ Analysis Package, and implement the new classes required by these routines Write an analysis program to test the new algorithms
Compare the results of ALPHA and ALPHA++
14.9.99 Maria Hoerndl, ALPHA++ 2
ALPHA++ Class Diagram
14.9.99 Maria Hoerndl, ALPHA++ 3
What has changed?
AlphaBanks: new container ObjectV() for all AlObjects new objects created during run time (AlJet, AlThrust) are appended to the ObjectV() vector
STL and CLHEP modules are used
AlObject and QvecBase: the HepLorentzVector _A4V and float _qch contain all important data now new functions: HepLorentzVector A4V() void setA4V(float x, float y, float z, float e); void setA4V(HepLorentzVector vec); void setQCH(float qch);
old functions QP(), QX(), QY(), QZ(), QE(), QM() and QCH()still available
Lock is implemented: int isLocked(); void Lock();
14.9.99 Maria Hoerndl, ALPHA++ 4
What has changed?
QvecBase: kinematics utility routines are added float QCT(); // cos (polar angle) float QPH(); // phi float QPT(); // transverse momentum float QBETA(); // beta float QGAMMA(); // gamma float QDMSQ(QvecBase j); // mass^2 of 4-mom difference float QDOT3(QvecBase j); //3 dim scalar product float QDECA2(QvecBase j); // cos (decay angle) HepDouble DECAY_ANG(QvecBase j); // cos (decay angle) QvecBase add(QvecBase j); // add four-momenta ….. …..
14.9.99 Maria Hoerndl, ALPHA++ 5
Class AlThrust
class AlThrust: public QvecBase { public: AlThrust(); // default constructor ALEPHTYPE TYPE() {return ALTHRUST;} Hep3Vector getThrustDirection(); float getThrustValue(); };
14.9.99 Maria Hoerndl, ALPHA++ 6
Class AlJetclass AlJet: public QvecBase {
public: AlJet(); // default constructor AlJet(const AlJet& oldAj); // copy constructor
ALEPHTYPE TYPE() {return ALJET;} vector<AlObject*>& getObjects(); void addObject(AlObject* a); void setScheme(int s); int getScheme();
private: vector<AlObject*> _objects; // objects of which jet was built int _scheme; // recombination scheme };
14.9.99 Maria Hoerndl, ALPHA++ 7
Class AlephAlgoclass AlephAlgo { public: AlephAlgo(); AlephAlgo(AlphaBanks* alpha); void setAlphaBanks(AlphaBanks* alpha); AlphaBanks* getAlphaBanks();
//jet algorithms vector<AlJet> DurhamJn(int Scheme, float Ycut, ALEPHTYPE type); vector<AlJet> DurhamJn(int Scheme, float Ycut, vector<AlObject*> Pext); vector<float> DurhamYn(int Scheme, ALEPHTYPE type); vector<float> DurhamYn(int Scheme, vector<AlObject*> Pext);
//thrust algorithms AlThrust AThrust(ALEPHTYPE type); AlThrust AThrust(vector<AlObject*> Pext);
private: AlphaBanks* _alpha;};
14.9.99 Maria Hoerndl, ALPHA++ 8
Example Analysis Program
which data? class 16 events are used only Eflw objects (type <= 5) conventional criteria for the selection of charged tracks and event selection purpose of program? Calculate the jet-rates for 10 different values of Ycut further analysis of the three-jet events for Ycut = 0.01: store multiplicities, inter-jet-angles, energies and momenta for the three jet events, which are sorted in order of decreasing energies, in an Ntuple using an Hbook wrapper
14.9.99 Maria Hoerndl, ALPHA++ 9
Example Analysis program
#include "AlephAlgo.h”
void AlephExManager::UserInit(){ // book an ntuple Hbookn(500,"myNtuple",ntags,mytags); }
void AlephExManager::UserEvent(AlphaBanks& bb){ typedef AlphaBanks::AlObjectVec::iterator ObjItr; AlephAlgo a(&bb);
// only EFLOW objects are used, therefore lock all the other objects for(ObjItr it = bb.ObjectV().begin(); it < bb.ObjectV().end(); it++) { if ((*it)->TYPE() != EFLOW)
{ (*it)->Lock(); } }
14.9.99 Maria Hoerndl, ALPHA++ 10
Example Analysis program
for(ObjItr it = bb.ObjectV().begin(); it < bb.ObjectV().end(); it++) { if ((*it)->isLocked() == 0) { int type = ((AlEflw*)(*it))->getEfType(); QvecBase* tmp = (QvecBase*)(*it); // selection of good charged tracks if (type <=3) { // calculate Ntpc, ptch, costheta, d0, z0 // lock if bad if ((d0 > 2.) || (z0 > 5.) || (fabs(costheta) > 0.94) || (ptch < 0.2) || (Ntpc < 4)) { (*it)->Lock(); } } // all Eflow objects with eflow type > 5 are locked if (type > 5) { (*it)->Lock(); } } }
14.9.99 Maria Hoerndl, ALPHA++ 11
Example Analysis program
// calculate Nchgood and Echgood int Nchgood = 0; int Echgood = 0.; for(ObjItr it = bb.ObjectV().begin(); it < bb.ObjectV().end(); it++) { if ((*it)->isLocked() == 0)
{ int type = ((AlEflw*)(*it))->getEfType(); if (type <=3) { Nchgood ++; Echgood += (*it)->QE(); } } }
//compute thrust axis with all good Eflows AlThrust theThrust = a.AThrust(EFLOW); Hep3Vector theThrAxis = theThrust.getThrustDirection(); float costhr = theThrAxis.cosTheta();
14.9.99 Maria Hoerndl, ALPHA++ 12
Example Analysis program
if ((Nchgood >=5) && (Echgood >=15.) && (fabs(costhr) < 0.82)) { // store all not locked objects in the vector<AlObject*> selobj; vector<AlObject*> selobj; for(ObjItr it = bb.ObjectV().begin(); it < bb.ObjectV().end(); it++) { if (((*it)->isLocked() == 0) && ((*it)->TYPE() == EFLOW)) { selobj.push_back(*it); } }
// compute the different jet-rates as a function of Ycut; for(int i=0; i<10; i++) { vector<AlJet> Jn = a.DurhamJn(1, Ycut[i], selobj); jetr = Jn.size(); // fill jetr into Ntuple // take three jet events for Ycut = 0.01 if (( i == 5) && ( jetr == 3 )) { for(int j=0; j<3; j++)
{ jetmomentum[j] = Jn[j].A4V(); // calculate the multiplicity
14.9.99 Maria Hoerndl, ALPHA++ 13
Example Analysis program
for(ObjItr it1 = Jn[j].getObjects().begin(); it1 <Jn[j].getObjects().end(); it1 ++)
{ int type = ((AlEflw*)(*it1))->getEfType(); if (type <=3) { multiplicity[j]++; } } } // sort multiplicity and jetmomentum in order of decreasing energy // calculate the interjetangles interjetangle[0]=jetmomentum[0].angle( Hep3Vector(jetmomentum[1])); interjetangle[1] = ……. interjetangle[2] = …... // fill the rest of the ntuple array } // of if 3jet } // of for over ycuts // fill the ntuple array into the ntuple } // of if good event fout << endl << " =====> in UserEvent " << Nev << endl;}
data output agrees with that from ALPHA !
14.9.99 Maria Hoerndl, ALPHA++ 14
Jet energies
14.9.99 Maria Hoerndl, ALPHA++ 15
Jet multiplicities
14.9.99 Maria Hoerndl, ALPHA++ 16
Jet Rates
14.9.99 Maria Hoerndl, ALPHA++ 17
Gluon jets
14.9.99 Maria Hoerndl, ALPHA++ 18
Quark jets
14.9.99 Maria Hoerndl, ALPHA++ 19
Analysis of the Quark jets
14.9.99 Maria Hoerndl, ALPHA++ 20
Analysis of the Quark jets
14.9.99 Maria Hoerndl, ALPHA++ 21
Summary
most important algorithms have been implemented
“usability” has been shown via realistic QCD analysis
agreement with Fortran
to be done: detailed performance study