00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ANGCLUSTERFITANA_H
00015 #define ANGCLUSTERFITANA_H
00016
00017 #include <deque>
00018 #include <vector>
00019 #include "TObject.h"
00020 #include "TMatrixD.h"
00021 #include "TVector3.h"
00022 #include "TF1.h"
00023 #include "TMinuit.h"
00024 #include "NueAna/NueAnaBase.h"
00025 #include "NueAna/AngClusterFit.h"
00026 #include "Conventions/PlaneView.h"
00027
00028 class NtpSRRecord;
00029 class TH1F;
00030 class TH3F;
00031 class TPolyMarker3D;
00032 class TPad;
00033
00034 class AngClusterFitAna : public NueAnaBase
00035 {
00036
00037 public:
00038
00039
00040 typedef std::deque<Int_t> DeqInt_t;
00041 typedef DeqInt_t::iterator IterDeqInt_t;
00042 typedef DeqInt_t::size_type SizeDeqInt_t;
00043
00044 typedef std::deque<Float_t> DeqFloat_t;
00045 typedef DeqFloat_t::iterator IterDeqFloat_t;
00046
00047 typedef std::vector<Int_t> VecInt_t;
00048 typedef VecInt_t::iterator IterVecInt_t;
00049
00050 typedef std::vector<Float_t> VecFloat_t;
00051 typedef VecFloat_t::iterator IterVecFloat_t;
00052
00053 typedef std::deque< std::deque <Int_t> > DeqDeqInt_t;
00054 typedef DeqDeqInt_t::iterator IterDeqDeqInt_t;
00055 typedef DeqDeqInt_t::size_type SizeDeqDeqInt_t;
00056
00057 typedef std::deque <TMatrixD> DeqTMatrixD;
00058 typedef DeqTMatrixD::iterator IterDeqTMatrixD;
00059
00060 typedef std::deque <TPolyMarker3D *> DeqTPoly;
00061 typedef DeqTPoly::iterator IterDeqTPoly;
00062
00063
00064
00065 AngClusterFitAna(AngClusterFit &acf);
00066 ~AngClusterFitAna();
00067
00068 TH1F *fLongHitHisto;
00069 TH1F *fLongHitHistoRad;
00070 TH1F *fTransHitHisto;
00071 TH1F *fTransHitHistoRad;
00072
00073 TH3F *fScatterAxis;
00074
00075 TF1 *fLongFit;
00076 TF1 *fTransFit;
00077
00078 void Set3DHit(DeqFloat_t &x, DeqFloat_t &y, DeqFloat_t &z, DeqFloat_t &e);
00079
00080 void SetAngCluster(Int_t &primShow
00081 , DeqDeqInt_t &clusterMap
00082 , TVector3 &primDir);
00083
00084 void Analyze(int evtn, RecRecordImp<RecCandHeader> *srobj);
00085
00086 void FitShower(Float_t totalHitEnergy);
00087
00088 void TransVarCalc(TH1F *transHisto);
00089
00090 void Draw(TPad *pad);
00091
00092 void Reset();
00093
00094 private:
00095 Double_t GetMaximum(TF1* efit, Double_t xmin=0, Double_t xmax=0);
00096 AngClusterFit &fAngClusterFit;
00097
00098
00099
00100
00101
00102
00103 DeqFloat_t fX;
00104 DeqFloat_t fY;
00105 DeqFloat_t fZ;
00106 DeqFloat_t fE;
00107
00108
00109 Int_t fPrimShow;
00110 DeqDeqInt_t fClusterMap;
00111 TVector3 fPrimDir;
00112 };
00113
00114 #endif // ANGCLUSTERFITANA_H