// -*- mode: c++ -*- // // $Id: BrRichPidModule.h,v 1.6 2002/04/03 11:29:52 ekman Exp $ // $Author: ekman $ // $Date: 2002/04/03 11:29:52 $ // $Copyright: (C) 2001 BRAHMS Collaboration // #ifndef BRAT_BrRichPidModule #define BRAT_BrRichPidModule #ifndef BRAT_BrModule #include "BrModule.h" #endif #ifndef BRAT_BrEventNode #include "BrEventNode.h" #endif #ifndef BRAT_BrDetectorVolume #include "BrDetectorVolume.h" #endif #ifndef BRAT_BrDetectorTrack #include "BrDetectorTrack.h" #endif #ifndef BRAT_BrChkvParameters #include "BrChkvParameters.h" #endif #ifndef BRAT_BrVector3D #include "BrVector3D.h" #endif #ifndef BRAT_BrChkvRdo #include "BrChkvRdo.h" #endif #ifndef ROOT_TH2 #include "TH2.h" #endif #ifndef ROOT_TDirectory #include "TDirectory.h" #endif class BrRichPidModule : public BrModule { private: BrDetectorVolume* fRichVolume; // RICH volume BrDetectorVolume* fT5Volume; // T5 volume BrChkvParameters* fRichParams; // RICH parameters BrPlane3D fImagePlane; // image plane BrVector3D fImagePlaneCenter; // center of image plane BrVector3D fImagePlaneOffset; BrVector3D fMirrorSphereCenter; // center of mirror Float_t fMirrorSphereRadius; // radius of mirror sphere Float_t fMirrorFocalLength; // focal length of mirror Float_t fMirrorFocalAngle; // focal angle Float_t fRefractiveIndex; // refractive index of gas Float_t fDRWindow; // Int_t fMinHitsInRing; // Minimum n hits in ring Float_t fMaxRadius; // Maximum ring radius Int_t fNumberOfHits; // Number of tubes with signal Int_t fNumberOfTracks; // Number of tracks Bool_t fUseD3Momentum; Bool_t fUseD4Momentum; Bool_t fCheckGeometry; // if on, geo check hist is created TF1* fGausFit; TDirectory* fHistDir; Int_t fMaxNSnapshots; // max number of snapshots Int_t fNSnapshots; // snapshots taken TList* fSnapshots; // list of snapshot hist Int_t fNDEDR; TList* fDEDR; // ring fitting hists TH2F* fRadVsP; // radius vs momentum TH2F* fRadVsP1; // radius vs momentum, ntracks=1 TH2F* fRadVsP2; // radius vs momentum, ntracks>1 TH2F* fMassVsP; // mass vs momnetum TH2F* fMassVsRad; // mass vs radius TH1F* fMass; TH2F* fRingCenters; // x,y on image plane TH2F* fDRVsPhi; // TH2F* fDRVsPhiAcc; // TH2F* fRing; TH2F* fRingAcc; TH1F* fHitsInRing; // number of tubes hit in ring TH2F* fHitsVsRadius; TH2F* fHitsVsPhotons; TH2F* fHitsVsEstPhotons; TF1* fElectronRvsP; TF1* fMuonRvsP; TF1* fPionRvsP; TF1* fKaonRvsP; TF1* fProtonRvsP; public: typedef struct { public: Float_t x; // x pos of tube Float_t y; // y pos of tube Float_t e; // energy Bool_t used; // is this hit already used? Float_t* r; // distances to the track hits Int_t tracknr; // tracknumber of correcsponding track } RICHHIT; typedef struct { public: Float_t x; // x pos of hit Float_t y; // y pos of hit Float_t p; // momentum of track Int_t nr; // track number Int_t id; // track id Int_t nhits;// number of hits in ring Float_t e; // energy } TRACKHIT; protected: virtual Float_t GuessRadius(RICHHIT* richHits, Int_t trackNumber); virtual Float_t FindRing(RICHHIT* richHits, TRACKHIT track); virtual Float_t CalculateMass(Float_t p, Float_t radius); virtual Float_t EstimateNumberOfPhotons(Float_t radius); virtual BrLine3D ReflectTrackLineOnMirror(const BrLine3D& trackLine); virtual BrVector3D IntersectionWithMirror(const BrLine3D& trackLine); virtual BrVector3D InImagePlaneCoordinates(const BrVector3D& hit); virtual void Snapshot(RICHHIT* richHits, TRACKHIT track); public: BrRichPidModule(); BrRichPidModule(const Char_t* name, const Char_t* title); virtual ~BrRichPidModule () {} void SetDRWindow(Float_t dr = 2.0) {fDRWindow = dr;} void SetMaxNSnapshots(Int_t n = 0) {fMaxNSnapshots = n;} void SetMinHitsInRing(Int_t n = 4) {fMinHitsInRing = n;} void SetMaxRadius(Float_t r = 11) {fMaxRadius = r;} void SetRefractiveIndex(Float_t n = 1.00202) {fRefractiveIndex = n;} void SetUseD3Momentum(Bool_t d3 = kFALSE) {fUseD3Momentum = d3;} void SetUseD4Momentum(Bool_t d4 = kFALSE) {fUseD4Momentum = d4;} void SetCheckGeometry(Bool_t b = kFALSE) {fCheckGeometry=b;} void SetImagePlaneOffset(Float_t x=0.185, Float_t y=-0.083) {fImagePlaneOffset = BrVector3D(x,y,0);} virtual void DefineHistograms(); virtual void Init(); virtual void Begin(); virtual void Event(BrEventNode* inNode, BrEventNode* outNode); virtual void End(); virtual void Finish(); virtual void Print(Option_t* option="B") const; // *MENU* ClassDef(BrRichPidModule,0) // Particle Identification with RICH }; #endif //____________________________________________________________________ // // $Log: BrRichPidModule.h,v $ // Revision 1.6 2002/04/03 11:29:52 ekman // Changed default imageplane offsets. // // Revision 1.5 2002/02/13 11:52:21 ekman // Added new geo histograms. Introduced sorting of tracks by momentum & other minor changes. // // Revision 1.4 2002/02/06 12:10:58 ekman // Added new geo (ring) hist // // Revision 1.3 2001/10/27 04:14:38 ekman // Major changes. Arrays of tubehits and trackhits introduced. New geocheck histograms added. // // Revision 1.1 2001/09/24 13:15:45 ekman // Added BrRichPidModule. // //