Click here to load reader

14.9.99Maria Hoerndl, ALPHA++1 My work project Add simple kinematics functions and then more complex routines like Thrust and Jet algorithms to the ALPHA++

  • View
    212

  • Download
    0

Embed Size (px)

Text of 14.9.99Maria Hoerndl, ALPHA++1 My work project Add simple kinematics functions and then more complex...

  • 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++

    Maria Hoerndl, ALPHA++

  • ALPHA++ Class Diagram

    Maria Hoerndl, ALPHA++

  • 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();

    Maria Hoerndl, ALPHA++

  • 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 .. ..

    Maria Hoerndl, ALPHA++

  • Class AlThrust

    class AlThrust: public QvecBase { public: AlThrust(); // default constructor ALEPHTYPE TYPE() {return ALTHRUST;} Hep3Vector getThrustDirection(); float getThrustValue(); };

    Maria Hoerndl, ALPHA++

  • Class AlJetclass AlJet: public QvecBase {

    public: AlJet(); // default constructor AlJet(const AlJet& oldAj); // copy constructor

    ALEPHTYPE TYPE() {return ALJET;} vector& getObjects(); void addObject(AlObject* a); void setScheme(int s); int getScheme();

    private: vector _objects; // objects of which jet was built int _scheme; // recombination scheme };

    Maria Hoerndl, ALPHA++

  • Class AlephAlgoclass AlephAlgo { public: AlephAlgo(); AlephAlgo(AlphaBanks* alpha); void setAlphaBanks(AlphaBanks* alpha); AlphaBanks* getAlphaBanks();

    //jet algorithms vector DurhamJn(int Scheme, float Ycut, ALEPHTYPE type); vector DurhamJn(int Scheme, float Ycut, vector Pext); vector DurhamYn(int Scheme, ALEPHTYPE type); vector DurhamYn(int Scheme, vector Pext);

    //thrust algorithms AlThrust AThrust(ALEPHTYPE type); AlThrust AThrust(vector Pext);

    private: AlphaBanks* _alpha;};

    Maria Hoerndl, ALPHA++

  • Example Analysis Program

    which data? class 16 events are used only Eflw objects (type

  • 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(); } }

    Maria Hoerndl, ALPHA++

  • 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 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(); } } }

    Maria Hoerndl, ALPHA++

  • 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 QE(); } } }

    //compute thrust axis with all good Eflows AlThrust theThrust = a.AThrust(EFLOW); Hep3Vector theThrAxis = theThrust.getThrustDirection(); float costhr = theThrAxis.cosTheta();

    Maria Hoerndl, ALPHA++

  • Example Analysis program

    if ((Nchgood >=5) && (Echgood >=15.) && (fabs(costhr) < 0.82)) { // store all not locked objects in the vector selobj; vector 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

  • Example Analysis program

    for(ObjItr it1 = Jn[j].getObjects().begin(); it1 getEfType(); if (type

  • Jet energies

    Maria Hoerndl, ALPHA++

  • Jet multiplicities

    Maria Hoerndl, ALPHA++

  • Jet Rates

    Maria Hoerndl, ALPHA++

  • Gluon jets

    Maria Hoerndl, ALPHA++

  • Quark jets

    Maria Hoerndl, ALPHA++

  • Analysis of the Quark jets

    Maria Hoerndl, ALPHA++

  • Analysis of the Quark jets

    Maria Hoerndl, ALPHA++

  • Summary most important algorithms have been implemented

    usability has been shown via realistic QCD analysis

    agreement with Fortran

    to be done: detailed performance study

    Maria Hoerndl, ALPHA++