210 likes | 342 Views
My work project. Add simple kinematics functions and then more complex 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
E N D
My work project Add simple kinematics functions and then more complex 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 AlJet class 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 }; Maria Hoerndl, ALPHA++
Class AlephAlgo class 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; }; Maria Hoerndl, ALPHA++
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 Maria Hoerndl, ALPHA++
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 <=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(); } } } 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 <=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(); Maria Hoerndl, ALPHA++
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 Maria Hoerndl, ALPHA++
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 ! Maria Hoerndl, ALPHA++
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++