#ifndef TStnConversion_hh #define TStnConversion_hh #include "TObject.h" #include "TLorentzVector.h" class ConversionPartner; class CdfTrack; class TStnConversion : public TObject { //----------------------------------------------------------------------------- // everybody needs friends //----------------------------------------------------------------------------- friend Int_t StntupleInitConversion(TStnConversion*, const ConversionPartner*); public: // requirements for the 2nd track enum { kPtBit = 0x1 << 0, kCesDrBit = 0x1 << 1, kCesEpBit = 0x1 << 2, kRConvBit = 0x1 << 3, kTridentBit = 0x1 << 4 }; //----------------------------------------------------------------------------- // data members //----------------------------------------------------------------------------- protected: TLorentzVector fMomentum; TVector3 fVertex; // vertex position before fit TVector3 fFittedVertex; TLorentzVector fFittedTrackMomentum[2]; // --------------- integers Int_t fAlgorithm; // Int_t fTrackNumber[2]; // tracks, 0: positive, 1: negative Int_t fFitStatus; // added in V2 Int_t fIDWord; // added in V3: conversion ID word // --------------- floats Float_t fSeparation; // dist in XY before the fit Float_t fZSeparation; // dist in Z before the fit Float_t fDeltaLam; // delta(cotangent) Float_t fFittedDeltaLam; Float_t fChi2; Float_t fProb; Float_t fRadius; Float_t fSign; Float_t fMassGamma; Float_t fCosGamma; void* fEOR; // ! end of record //----------------------------------------------------------------------------- // transient-only things //----------------------------------------------------------------------------- const CdfTrack* fCdfTrack[2]; // ! Float_t fTmp[10]; // ! temporary variables public: // ****** constructors and destructor TStnConversion(); TStnConversion(Int_t IT1, Int_t It2, const TLorentzVector& Momentum, Float_t XYSep, Float_t ZSep, Float_t DeltaLam, Float_t XConv, Float_t YConv, Float_t RConv); int Init(TStnConversion* Conv); virtual ~TStnConversion(); //----------------------------------------------------------------------------- // accessors //----------------------------------------------------------------------------- Int_t TrackNumber (Int_t i) const { return fTrackNumber[i]; } TVector3* Vertex () { return &fVertex; } TVector3* FittedVertex() { return &fFittedVertex; } Float_t Radius () const { return fRadius; } Float_t XYSeparation() const { return fSeparation; } Float_t ZSeparation () const { return fZSeparation; } Float_t DeltaLam () const { return fDeltaLam; } Float_t FitDeltaLam () const { return fFittedDeltaLam; } Float_t Chi2 () const { return fChi2; } Float_t Sign () const { return fSign; } Int_t FitStatus () const { return fFitStatus; } Int_t IDWord () const { return fIDWord; } TLorentzVector* Momentum () { return &fMomentum; } Float_t MassGamma() { return fMassGamma; } Float_t CosGamma () { return fCosGamma; } // added accessors 10-21-04 V.Rekovic Float_t Algorithm () const { return fAlgorithm; } Float_t Separation () const { return fSeparation; } Float_t Prob () const { return fProb; } TLorentzVector* FittedTrackMomentum(Int_t i) { return &fFittedTrackMomentum[i]; } //----------------------------------------------------------------------------- // modifiers, note that SetIDBit does OR: "Bit" is a "bit", not a "bit number" //----------------------------------------------------------------------------- void SetChi2 (Float_t Chi2 ) { fChi2 = Chi2; } void SetSign (Float_t Sign ) { fSign = Sign; } void SetFitStatus(Int_t Status) { fFitStatus = Status; } void SetIDWord (Int_t IDWord) { fIDWord = IDWord; } void SetIDBit (Int_t Bit ) { fIDWord = (fIDWord | Bit) ; } void ResetTracks () { fTrackNumber[0] = -1; fTrackNumber[1] = -1; } void SetTrackNumber(Int_t I, Int_t ITrk) { fTrackNumber[I] = ITrk; } //----------------------------------------------------------------------------- // overloaded methods of TObject //----------------------------------------------------------------------------- const CdfTrack* GetCdfTrack(Int_t I) { return fCdfTrack[I]; } //----------------------------------------------------------------------------- // transiant-only variables //----------------------------------------------------------------------------- Float_t& Tmp(Int_t I) { return fTmp[I]; } //----------------------------------------------------------------------------- // overloaded methods of TObject //----------------------------------------------------------------------------- void Clear(Option_t* opt = ""); void Print(Option_t* opt = "") const; //----------------------------------------------------------------------------- // schema evolution //----------------------------------------------------------------------------- void ReadV1(TBuffer& R__b); void ReadV2(TBuffer& R__b); ClassDef (TStnConversion,3) }; #endif