// ESAF : Euso Simulation and Analysis Framework // $Id: TrackDirectionModule.hh,v 1.10 2005/01/18 09:51:09 pesce Exp $ // R. Pesce created May, 11 2004 // Reconstruction of direction of showers; based also on S. Bottai and E. Taddei algorithms. #ifndef __TRACKDIRECTIONMODULE_HH_ #define __TRACKDIRECTIONMODULE_HH_ #include "euso.hh" #include "RecoModule.hh" class TDirectory; class TF1; class RecoRootEvent; class TTree; class TMultiGraph; // container for beta fitting data struct TrackData: public TObject { void Clear(); vector fAlpha; // Angles vector fTime; // Arrival Times vector fErrors; // Uncertantlies vector fHits; // hits per pixel Int_t fIdMin; // id of the first hit Int_t fIdMax; // id of the last hit Int_t fIdMostPop; // id of the most populated pixel Int_t fNumPoints; // number of points Int_t fNumHits; // number of hits TVector3 fNorm; // TDP normal vector TVector3 fWAxis; // TDP W axis TVector3 fUAxis; // TDP U axis Double_t fCsi; // angle between Z axis and Max direction TF1* fTimeAtEuso; ClassDef(TrackData,0) }; class TrackDirectionModule : public RecoModule { public: // ctor TrackDirectionModule(); // dtor virtual ~TrackDirectionModule(); Bool_t Init(); Bool_t PreProcess(); Bool_t Process(RecoEvent*); Bool_t PostProcess(); Bool_t Done(); // save root output virtual Bool_t SaveRootData( RecoRootEvent* ); void UserMemoryClean(); EsafConfigClass(Reco, TrackDirectionModule) private: RecoEvent *fEv; // Euso Event Int_t fMinuitOutputLevel; // minuit output display level Int_t fNum; // event number vector fPointsId; // vector fSpPos; // Incident dirs on the unitary sphere TVector3 fNormTDP; // TDP normal vector TVector3 fWAxisTDP; // TDP W axis TVector3 fUAxisTDP; // TDP U Axis TVector3 fXAxisTDP; // TDP X Axis TVector3 fYAxisTDP; // TDP Y Axis TrackData fBetaData; // container of data necessary to the fit function Double_t fHISS; // ISS height Double_t fEarthRadius; TF1 *fTimeAtEuso; // Truth values Double_t fTrueEnergy; TVector3 fTrueDir; Double_t fTrueHMax; Double_t fTrueBeta; Double_t fBeta; Double_t fBetaInit; Double_t fHMax; Double_t fErrorBeta; Double_t fErrorBetaInit; Double_t fErrorHMax; Double_t fRMax; Double_t fTrueRMax; Double_t fR0; Double_t fTrueR0; Double_t fAlpha0; Double_t fTrueAlpha0; Double_t fAlphaMax; Double_t fTrueAlphaMax; Double_t fTau0; Double_t fTrueTau0; Double_t fTMax; TVector3 fCenterPos; // position in the field of view Double_t fCenterX; Double_t fCenterY; Double_t fVisualAngle; // angle beteween max position and shower direction Double_t fDist; // distance from center of FOV //angular velocities Double_t fOmega; // angular velocity of shower (approx costant) with median fit Double_t fOmegaLeast; // angular velocity with least squares fit Double_t fOmegaMean; // mean angular velocity of shower Double_t fOmegaFirst; // angular velocity between maximum and first point Double_t fOmegaLast; // angular velocity between maximum and last point // results of fit TVector3 fDir; Double_t fTrueTheta; Double_t fTrueThetaInc; Double_t fTruePhi; Double_t fTheta; Double_t fThetaInc; Double_t fThetaInit; Double_t fPhi; Double_t fPhiInit; Double_t fErrorDirection; Double_t fErrorDirectionInit; Double_t fErrorTheta; Double_t fErrorThetaInit; Double_t fErrorPhi; Double_t fErrorPhiInit; Double_t fErrorPlane; Int_t fNumPoints; Int_t fNumHits; // Helpers void FillBetaData(); void UseApprox(); void UseExact(); void PrintBeta(); Double_t CalculateRMax(Double_t hmax); // vectors for graph and graph2d vector fEASCenterX; vector fEASCenterY; vector fDirectionErrors; vector fHMaxErrors; vector fThetaErrors; vector fPhiErrors; vector fBetaErrors; vector fNumFastOr; vector fNumPhEl; vector fPlaneErrors; // Check info TMultiGraph *fAll; ClassDef(TrackDirectionModule,0) }; #endif /* __TRACKDIRECTIONMODULE_HH_ */