00001
00002 #ifndef ROOT_StEventHelper
00003 #define ROOT_StEventHelper
00004
00005
00007
00008
00009
00010
00012
00013 #include "TNamed.h"
00014 #include "TString.h"
00015 #include "Gtypes.h"
00016 #include "TPoints3DABC.h"
00017 #include "StThreeVectorF.hh"
00018 #include "StMCTruth.h"
00019 #include "StHelixD.hh"
00020 #include "StPhysicalHelixD.hh"
00021 #include "StPhysicalHelixD.hh"
00022 #include "StHelixD.hh"
00023 #include "StHelixHelper.h"
00024 #include "StEnumerations.h"
00025 #include <cassert>
00026
00027 class StEvent;
00028 class StTrack;
00029 class StHit;
00030 class StVertex;
00031 class StarClassLibrary;
00032 class TExMap;
00033 class TObjArray;
00034 class StRefArray;
00035 class StPtrVecHit;
00036 class BetheBloch;
00037 class THelixTrack;
00038
00039
00040
00041 class StVertexHelper: public TObject
00042 {
00043 public:
00044 StVertexHelper(const StVertex *vtx=0);
00045 StVertexHelper(const StEvent *evt);
00046 ~StVertexHelper(){};
00047 void SetVertex(const StVertex *vtx);
00048 int IsValid(){ return fVtx!=0;}
00049 int GetType();
00050 int GetFlag();
00051 const float *GetErrMtx();
00052 const StThreeVectorF &GetPoint();
00053
00054 int GetNTracks();
00055 const StTrack *GetTrack(int idx);
00056 const StTrack *GetParent() {return GetTrack(-1);}
00057 private:
00058 const StVertex *fVtx;
00059 float fErrMtx[6];
00060 ClassDef(StVertexHelper,0)
00061 };
00062
00063
00064 class StTrackHelper: public StHelixHelper
00065 {
00066 public:
00067 StTrackHelper(const StTrack *trk=0);
00068 ~StTrackHelper();
00069 void SetTrack(const StTrack *trk);
00070 int GetType() const;
00071 int GetFlag() const;
00072 int GetCharge() const;
00073 const StVertex *GetParent() const;
00074 float GetImpact() const;
00075 float GetCurv() const;
00076 int numberOfFitPoints(int detid=0) const;
00077 const StThreeVectorF &GetFirstPoint() const;
00078 const StThreeVectorF &GetLastPoint() const;
00079 const StThreeVectorF &GetMom() const;
00080 float GetPsi() const {return GetMom().phi();}
00081 float GetDip() const {return atan2(GetMom().z(),GetMom().perp());}
00082
00083 int GetNHits() const;
00084 const StHit *GetHit(int idx) const;
00085 const StPtrVecHit *GetHits() const;
00086 StMCTruth GetTruth(int byCount=0,double rXYMin=0.,double rXYMax=1000.) const;
00087
00088
00089 private:
00090 const StTrack *fTrk;
00091 mutable const StPtrVecHit *fHits;
00092 ClassDef(StTrackHelper,0)
00093 };
00094
00095
00096 class StHitHelper: public TObject
00097 {
00098 public:
00099 StHitHelper(const StHit *hit=0);
00100 void SetHit(const StHit *hit);
00101 int GetDetId();
00102 int GetFlag();
00103 float GetCharge();
00104 int IsUsed();
00105 int IsFit();
00106 const StThreeVectorF &GetPoint();
00107
00108 private:
00109 const StHit *fHit;
00110 ClassDef(StHitHelper,0)
00111 };
00112
00113
00114
00115 class TExMap;
00116 class TArrayI;
00117 class StErrorHelper: public TObject
00118 {
00119 public:
00120 StErrorHelper();
00121 ~StErrorHelper();
00122 void Add(int errn);
00123 void Print(const char* option="") const;
00124 int GetNTot() {return fNTot;}
00125 int GetNErr() {return fNErr ;}
00126 static TString Say(int errn,const char *klas="StTrack");
00127
00128 private:
00129 void MakeArray();
00130 private:
00131
00132 int fNTot;
00133 int fNErr;
00134 int fKErr;
00135 TExMap *fMap;
00136 TArrayI *fArr;
00137 ClassDef(StErrorHelper,0)
00138 };
00139
00140
00141
00142
00143
00144
00145 enum EHKind {kUDF = 0
00146 ,kVTX = BIT( 1),kTRK = BIT( 2),kHIT = BIT( 3),kHRR = BIT( 4)
00147 ,kPRM = BIT( 5),kKNK = BIT( 6),kV0 = BIT( 7),kXI = BIT( 8)
00148 ,kTGB = BIT(10),kTPR = BIT(11),kTPT = BIT(12),kTSY = BIT(13)
00149 ,kEGB = BIT(14),kEPR = BIT(15)
00150 ,kUSE = BIT(20),kUNU = BIT(21),kFIT = BIT(22),kTHT = BIT(23)
00151 ,kTRR = BIT(30)};
00152
00153
00154 extern const char *EHKindN[];
00155 extern const int EHKindS[];
00156
00157 #ifdef __EVENTHELPER_ONLY__
00158 const char *EHKindN[] = {"undefined"
00159 ,"Vertex" ,"Tracks" ,"Hits" ,"HitArr"
00160 ,"Primary" ,"Kink" ,"V0" ,"Xi"
00161 ,"Global" ,"PRIMARY" ,"Tpt" ,"SECONDARY"
00162 ,"estGlobal","estPrimary"
00163 ,"Used" ,"Unused" ,"Fitted","Track Hits"
00164 ,"TObjArray",0};
00165 const int EHKindS[]= {kUDF
00166 ,kVTX,kTRK,kHIT,kHRR
00167 ,kPRM,kKNK,kV0 ,kXI
00168 ,kTGB,kTPR,kTPT,kTSY
00169 ,kEGB,kEPR
00170 ,kUSE,kUNU,kFIT,kTHT
00171 ,kTRR,-1};
00172 #endif
00173
00174
00175
00176 class StEventHelper : public TNamed{
00177
00178 protected:
00179 TObject *fObject;
00180 TExMap *fMap;
00181
00182 public:
00183 StEventHelper(const TObject *evt=0,const char *opt="");
00184 virtual ~StEventHelper();
00185 TObjArray *SelConts (const char *sel=".*");
00186 TObjArray *SelTracks(const char *sel=0, Int_t th=0);
00187 TObjArray *SelHits (const char *RegEx, Int_t un=0,Int_t flag=0);
00188 TObjArray *SelVertex(const char *sel, Int_t th=0);
00189 TObjArray *ExpandAndFilter(const TObject *evobjs,int flag,TObjArray *out=0);
00190 TObjArray *MakePoints ( TObjArray *evobjs,int flag);
00191 virtual void ls(Option_t* option="") const;
00192 virtual void Clear(Option_t *opt="");
00193 void Reset(const TObject *evt=0,const char *opt="");
00194 static int Kind(const TObject *to);
00195 static void Remove(StEvent *ev,const char *className);
00196 static void Break(int kase);
00197 private:
00198
00199 ClassDef(StEventHelper,0)
00200 };
00201
00202 class StPoints3DABC : public TPoints3DABC
00203 {
00204 public:
00205 StPoints3DABC(const char *name="",const char *title="",const TObject *obj=0)
00206 { fSize=0; fXYZ=0;
00207 char buf[200];
00208 if (obj && (!name || !name[0])) {
00209 sprintf(buf,"%s(%p)",obj->GetName(),(void*)obj);name = buf;}
00210 fName=name;fTitle=title;fObj = obj;}
00211
00212 ~StPoints3DABC(){delete [] fXYZ;};
00213
00214 virtual const char *GetName () const {return fName.Data();}
00215 virtual const char *GetTitle() const {return fTitle.Data();}
00216 virtual Float_t GetX(Int_t idx) const {return fXYZ[idx*3+0];}
00217 virtual Float_t GetY(Int_t idx) const {return fXYZ[idx*3+1];}
00218 virtual Float_t GetZ(Int_t idx) const {return fXYZ[idx*3+2];}
00219 virtual Int_t Size() const {return fSize;}
00220 virtual Int_t Kind() const {return 0;}
00221 virtual const TObject *GetObject() const {return fObj;}
00222 void Add(StPoints3DABC *add);
00223 Int_t Add(float x, float y, float z){return TPoints3DABC::Add(x,y,z);}
00224
00225 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py){return -1;}
00226 virtual Int_t GetLastPosition() const {return 0;}
00227 virtual Option_t* GetOption() const{return 0;}
00228 virtual const Float_t* GetXYZ(Int_t idx) {return fXYZ+3*idx;}
00229 virtual Float_t *GetXYZ(Float_t *xyz,Int_t idx,Int_t num=1) const
00230 {return TPoints3DABC::GetXYZ(xyz,idx,num);}
00231 virtual void PaintPoints(Int_t n, Float_t* p, Option_t* option){}
00232 virtual Int_t SetLastPosition(Int_t idx){return 0;}
00233 virtual Int_t SetNextPoint(Float_t x, Float_t y, Float_t z){return 0;}
00234 virtual void SetOption(Option_t* option){}
00235 virtual Int_t SetPoints(Int_t, Float_t * = 0, const Option_t * = ""){return 0;}
00236 virtual Int_t SetPoint(Int_t POINT, Float_t x, Float_t y, Float_t z){return 0;}
00237 private:
00238 void Init() const;
00239
00240
00241 protected:
00242 TString fName;
00243 TString fTitle;
00244 Int_t fSize;
00245 Int_t fN;
00246 Float_t *fXYZ;
00247 const TObject *fObj;
00248 ClassDef(StPoints3DABC,0)
00249 };
00250
00251
00252
00253 class StTrackPoints : public StPoints3DABC
00254 {
00255 public:
00256 StTrackPoints(const StTrack *st,const char *name="",const char *title="");
00257 ~StTrackPoints(){};
00258 virtual Int_t Kind() const {return 2;}
00259 virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
00260
00261 private:
00262 void Init() ;
00263 StTrackPoints (const StTrackPoints &);
00264 void operator=(const StTrackPoints &);
00265
00266
00267 private:
00268 ClassDef(StTrackPoints,0)
00269 };
00270
00271
00272 class StVertexPoints : public StPoints3DABC
00273 {
00274 public:
00275 StVertexPoints(const StVertex *sv,const char *name="",const char *title="");
00276 ~StVertexPoints(){};
00277 virtual Int_t Kind() const {return 1;}
00278 private:
00279 StVertexPoints(const StVertexPoints&);
00280 void operator=(const StVertexPoints&);
00281
00282 private:
00283 ClassDef(StVertexPoints,0)
00284 };
00285
00286 class StInnOutPoints : public StPoints3DABC
00287 {
00288 public:
00289 StInnOutPoints(const StTrack *sv,int inout,const char *name="",const char *title="");
00290 ~StInnOutPoints(){};
00291 virtual Int_t Kind() const {return 4+fInnOut;}
00292 private:
00293 StInnOutPoints(const StInnOutPoints&);
00294 void operator=(const StInnOutPoints&);
00295
00296 private:
00297 int fInnOut;
00298 ClassDef(StInnOutPoints,0)
00299 };
00300
00301
00302
00303 class StHitPoints : public StPoints3DABC
00304 {
00305 public:
00306 StHitPoints(const StHit *sh,const char *name="",const char *title="");
00307 StHitPoints(const StRefArray *arr,const char *name="",const char *title="");
00308 ~StHitPoints(){};
00309 virtual Int_t Kind() const {return 3;}
00310 private:
00311 void Init() ;
00312
00313
00314 private:
00315 ClassDef(StHitPoints,0)
00316 };
00317
00318
00319 class StFilterABC : public TNamed {
00320 public:
00321 StFilterABC(const char *name,bool active=true);
00322 ~StFilterABC(){};
00323
00324 virtual float *GetPars() const = 0;
00325 virtual const float *GetDefs() const = 0;
00326 virtual const char **GetNams() const = 0;
00327 bool *GetActive() { return &fActive;}
00328 void SetDefs();
00329 bool Active() const {return fActive;}
00330 void SetActive(bool active){fActive = active;}
00331 virtual Int_t Accept(StPoints3DABC *pnt, Color_t&, Size_t&, Style_t&)=0;
00332 protected:
00333 bool fActive;
00334
00335 private:
00336 static int fgDial;
00337 ClassDef(StFilterABC,0)
00338 };
00339
00340
00341 class StFilterDef : public StFilterABC {
00342 public:
00343 StFilterDef(const char *name,bool active=true);
00344 ~StFilterDef(){};
00345 virtual float *GetPars() const {return (float*)(&fFirst+1);}
00346 virtual const float *GetDefs() const;
00347 virtual const char **GetNams() const;
00348 Int_t Accept(StPoints3DABC *pnt, Color_t&, Size_t&, Style_t&);
00349
00350 protected:
00351
00352 private:
00353 float fFirst;
00354 float fRandomSelect;
00355 float fRxyMin ;
00356 float fRxyMax ;
00357 float fZMin ;
00358 float fZMax ;
00359 float fPhiMin ;
00360 float fPhiMax ;
00361 float fLenMin ;
00362 float fLenMax ;
00363 float fPtMin ;
00364 float fPtMax ;
00365 float fPsMin ;
00366 float fPsMax ;
00367 float fQMin ;
00368 float fQMax ;
00369 float fEncodedMethod;
00370 float fLast;
00371
00372 ClassDef(StFilterDef,0)
00373 };
00374
00375
00376 class StMuDstFilterHelper : public StFilterABC {
00377 public:
00378 StMuDstFilterHelper(const char *name,bool active=true);
00379 ~StMuDstFilterHelper();
00380 virtual float *GetPars() const {return (float*)(&fFirst+1);}
00381 virtual const float *GetDefs() const;
00382 virtual const char **GetNams() const;
00383 Int_t Accept(StPoints3DABC *pnt, Color_t&, Size_t&, Style_t&)
00384 { return Accept(pnt); }
00385
00386 protected:
00387 Int_t Accept(const StTrack *track);
00388 Int_t Accept(StPoints3DABC *pnt);
00389
00390 protected:
00391 BetheBloch* mBB;
00392
00393 private:
00394 float fFirst;
00395
00396
00397
00398
00399 float fpCutHigh;
00400 float fnHitsCutHighP;
00401
00402
00403 float fpCutLow;
00404 float fnHitsCutLowP;
00405 float fchargeForLowP;
00406 float fdEdxMassCutHigh;
00407 float fdEdxFractionCutHigh;
00408 float fdEdxMassCutLow;
00409 float fdEdxFractionCutLow;
00410
00411
00412 float fLast;
00413
00414 ClassDef(StMuDstFilterHelper,0)
00415 };
00416
00417
00418 class StTpcDedxPidAlgorithm;
00419 class StElectron;
00420 class StPionPlus;
00421 class StKaonPlus;
00422 class StProton;
00423
00424
00425 class StColorFilterHelper : public StFilterABC {
00426 public:
00427 StColorFilterHelper(const char *name,bool active=true);
00428 ~StColorFilterHelper();
00429 virtual float *GetPars() const {return (float*)(&fFirst+1);}
00430 virtual const float *GetDefs() const;
00431 virtual const char **GetNams() const;
00432
00433 protected:
00434 virtual Int_t Accept(StPoints3DABC *pnt, Color_t&, Size_t&, Style_t&);
00435 Int_t Accept(const StTrack *track, Color_t&, Size_t&, Style_t&);
00436 Int_t Accept(StPoints3DABC *pnt){return 1;}
00437
00438 protected:
00439 StTpcDedxPidAlgorithm *fPidAlgorithm;
00440 StElectron *fElectron;
00441 StPionPlus *fPion;
00442 StKaonPlus *fKaon;
00443 StProton *fProton;
00444
00445 private:
00446 float fFirst;
00447
00448
00449
00450
00451 float fNSigmaElectron ;
00452 float fNColorElectron ;
00453 float fNSigmaPion ;
00454 float fNColorPion ;
00455 float fNSigmaKaon ;
00456 float fNColorKaon ;
00457 float fNSigmaProton ;
00458 float fNColorProton ;
00459
00460 float fNSigmaOther ;
00461 float fNColorOther ;
00462
00463
00464
00465 float fLast;
00466
00467 ClassDef(StColorFilterHelper,0)
00468 };
00469
00470
00471
00472
00473
00474 #endif //ROOT_StEventHelper