#ifndef RICH_MIRRORS_CBMRICHRONCHIANA_H_ #define RICH_MIRRORS_CBMRICHRONCHIANA_H_ #include "TObject.h" #include "TVector3.h" #include #include #include using namespace std; class TH2; class CbmRichRonchiIntersectionData { public: CbmRichRonchiIntersectionData(): fPixelX(0), fPixelY(0), fLineX(0), fLineY(0), fNormalRadX(0.), fNormalRadY(0.), fOrderedLineX(0), fOrderedLineY(0), fCcdV(), fRulingV(), fMirrorV(), fTL(), fTR(), fBL(), fBR(), fTLRot(), fTRRot(), fBLRot(), fBRRot(), fTLSph(), fTRSph(), fBLSph(), fBRSph(), fDeviation(0.), fRLoc(0.) {} int fPixelX; int fPixelY; int fLineX; int fLineY; double fNormalRadX; // Normal X in radians double fNormalRadY; int fOrderedLineX; int fOrderedLineY; TVector3 fCcdV; // XYZ positions CCD in microns TVector3 fRulingV; // XYZ positions ronchi ruling in microns TVector3 fMirrorV; // XYZ positions of mirror in microns TVector3 fTL; // corners of segment BEFORE rotation TVector3 fTR; TVector3 fBL; TVector3 fBR; TVector3 fTLRot; // corners of segment AFTER rotation TVector3 fTRRot; TVector3 fBLRot; TVector3 fBRRot; TVector3 fTLSph; // corners of segment after 'DoSphere' TVector3 fTRSph; TVector3 fBLSph; TVector3 fBRSph; std::vector fVecTL; // vectors that point from center of a segment to the corners (for calculation of rotations) --CAN BE DELETED!? std::vector fVecTR; std::vector fVecBL; std::vector fVecBR; double fDeviation; double fRLoc; }; class CbmRichRonchiLineData { public: CbmRichRonchiLineData(): fNofPoints(0), fMeanPrimary(0), fMeanSecondary(0), fLineInd(0) {} int fNofPoints; double fMeanPrimary; double fMeanSecondary; int fLineInd; }; class CbmRichRonchiAna : public TObject { public: CbmRichRonchiAna(); virtual ~CbmRichRonchiAna(); void Run(); void SetTiffFileNameV(const string& fileName) {fTiffFileNameV = fileName;} void SetTiffFileNameH(const string& fileName) {fTiffFileNameH = fileName;} private: string fTiffFileNameV; string fTiffFileNameH; // constant values double fPi; double fRadiusMirror; // in microns double fEdgeLengthCCD; // in microns double fCcdPixelSize; // in microns double fPitchGrid; // in microns; distance of lines double fImageWidth; // in pixels // values to be measured first double fDistRulingCCD; // in microns double fDistMirrorCCD; // in microns double fDistMirrorRuling; double fOffsetCCDOptAxisX; // in microns; horizontal distance of center of CCD to optical axis of mirror double fOffsetCCDOptAxisY; // in microns; vertical distance of center of CCD to optical axis of mirror double fOffsetLEDOpticalAxisX; // in microns; horizontal distance of light source to optical axis of mirror double fOffsetLEDOpticalAxisY; double fCorrection; // correction value; defines center of mirror at exactly 3,000,000 mum in z dircetion // values that will be determined by function double fCenterCcdX; // in pixels; approximate center of image on CCD, will be defined in 'DoLocalNormal' function double fCenterCcdY; // in pixels double fImageCenterMirrorX; // in pixels; approximate center of image on mirror (NEEDED??) double fImageCenterMirrorY; // in pixels vector > ReadTiffFile(const string& fileName); void DoRotation(vector >& data); void FillH2WithVector(TH2* hist, const vector >& data); void DoMeanIntensityY(vector >& data); void DoPeakFinderY(vector >& data); void DoSmoothLines(vector >& data); void DoLineSearch(vector >& data); vector > DoSuperpose(const vector >& dataH, const vector >& dataV); vector DoIntersection(vector >& dataH, const vector >& dataV); void DoOrderLines(vector &intersections, const string &option); bool AreTwoSegmentsSameLine(const CbmRichRonchiLineData *line1, const CbmRichRonchiLineData *line2); void UpdateIntersectionLineInd(vector &intersections, CbmRichRonchiLineData *line1, CbmRichRonchiLineData *line2, const string &option); void DoLocalNormal(vector &data); void DrawXYMum(vector &data); void DrawXZProjection(vector &data, int orderedLineY, double scale); void DrawMirrorSegments(vector &data, int orderedLineX, int orderedLineY); void DrawMirrorSegmentsSphereAll(vector &data); void DrawMirrorSegmentsSphere(vector &data, int orderedLineX, int orderedLineY); void DrawOneMirrorSegment(const TVector3& tl, const TVector3& tr, const TVector3& bl, const TVector3& br, int color); void DrawSphere(vector &data); void DrawRLocMum(vector &data); void DoHeight(vector &intersections); void DoSphere(vector &intersections); int GetIndexForLineXLineY(int lineX, int lineY, vector &data); int GetMinIndexForLineX(int lineX, vector &data); int GetMinIndexForLineY(int lineY, vector &data); void DoHeightCorners(vector &intersections); void DoScanLineHeight(vector &intersections); void DoCalculateRemaining(vector &intersections); void DoIntegrate(vector &intersections); void DoAverageSurroundings(vector &intersections); void RotatePointImpl(TVector3 *inPos, TVector3 *outPos, Double_t rotX, Double_t rotY, TVector3* cV); void DoDeviation(vector &data); void DoRLoc(vector &data); /** * \brief Copy constructor. */ CbmRichRonchiAna(const CbmRichRonchiAna &); /** * \brief Assignment operator. */ CbmRichRonchiAna &operator=(const CbmRichRonchiAna &); ClassDef(CbmRichRonchiAna, 1) }; #endif /* RICH_MIRRORS_CBMRICHRONCHIANA_H_ */