00001
00002
00003
00004
00005 #include <vector>
00006 #include <iostream>
00007 #include <fstream>
00008 #include <string>
00009 #include "GaudiKernel/Algorithm.h"
00010 #include "GaudiKernel/ISvcLocator.h"
00011 #include "AIDA/IHistogram1D.h"
00012 #include "AIDA/IHistogram2D.h"
00013 #include "GaudiKernel/NTuple.h"
00014 #include "DedxCorrecSvc/DedxCorrecSvc.h"
00015 #include "DedxCurSvc/DedxCurSvc.h"
00016 #include "MdcGeomSvc/MdcGeomSvc.h"
00017
00018 #include "MdcDedxAlg/MdcDedxTrk.h"
00019 #include "MdcDedxAlg/MdcDedxCorrection.h"
00020
00021 #include "TFile.h"
00022 #include "TObjArray.h"
00023 #include "TFolder.h"
00024 #include "TH1F.h"
00025
00026 class DedxCorrection;
00027 class MdcDedxTrk;
00028
00029 class MdcDedxRecon:public Algorithm {
00030
00031 public:
00032 MdcDedxRecon (const std::string& name, ISvcLocator* pSvcLocator );
00033 ~MdcDedxRecon() {};
00034
00035 StatusCode initialize();
00036 StatusCode execute();
00037 StatusCode finalize();
00038 StatusCode beginRun();
00039
00040 const std::vector<MdcDedxTrk>& tracks(void) const;
00041 void clearTables();
00042
00043 void mdctrackrec(RecMdcTrackCol::iterator trk, Identifier mdcid, double tes, int RunNO,int runFlag, MsgStream log);
00044 void kaltrackrec(RecMdcKalTrackCol::iterator trk, Identifier mdcid, double tes, int RunNO,int runFlag, MsgStream log);
00045 void switchtomdctrack(int trkid, Identifier mdcid, double tes, int RunNO,int runFlag, MsgStream log);
00046
00047
00048 private:
00049 int calib_flag;
00050 int landau;
00051 int ntpFlag;
00052 int doNewGlobal;
00053 int recalg;
00054
00055 int ParticleFlag;
00056 int m_alg;
00057 float truncate;
00058 std::string m_rootfile;
00059
00060 IDedxCurSvc* dedxcursvc;
00061 IMdcGeomSvc* geosvc;
00062 IDedxCorrecSvc* exsvc;
00063 MdcDedxCorrection * ex_calib;
00064 std::vector<MdcDedxTrk> ex_trks;
00065 std::vector<int> m_trkalgs;
00066 int m_trkalg;
00067
00068 RecMdcDedxCol* dedxList;
00069 RecMdcDedx* resdedx;
00070 RecMdcDedxHitCol* dedxhitList;
00071 RecMdcDedxHit* dedxhit;
00072 DedxHitRefVec* dedxhitrefvec;
00073
00074
00075 TObjArray* m_hlist;
00076 TFolder* m_hitlevel;
00077 TH1F* m_hitNo_wire;
00078
00079
00080 NTuple::Tuple* m_nt1;
00081 NTuple::Item<float> m_phtm;
00082
00083
00084
00085
00086
00087
00088
00089 NTuple::Item<float> m_dEdx_meas;
00090
00091 NTuple::Item<float> m_ptrk;
00092 NTuple::Item<float> m_costheta;
00093 NTuple::Item<float> m_sintheta;
00094 NTuple::Item<float> m_charge;
00095 NTuple::Item<float> m_runNO;
00096 NTuple::Item<float> m_evtNO;
00097 NTuple::Item<float> m_t0;
00098 NTuple::Item<float> m_trackId;
00099 NTuple::Item<float> m_poca_x;
00100 NTuple::Item<float> m_poca_y;
00101 NTuple::Item<float> m_poca_z;
00102 NTuple::Item<float> m_recalg;
00103
00104 NTuple::Item<float> m_nhit;
00105 NTuple::Item<float> m_usedhit;
00106 NTuple::Item<long> m_nphlisthit;
00107 NTuple::Array<double> m_dEdx_hit;
00108
00109 NTuple::Array<float> m_probpid;
00110 NTuple::Array<float> m_expectid;
00111 NTuple::Array<float> m_sigmaid;
00112 NTuple::Item<float> m_parttype;
00113 NTuple::Item<float> m_prob;
00114 NTuple::Item<float> m_expect;
00115 NTuple::Item<float> m_sigma;
00116 NTuple::Item<float> m_chidedx;
00117 NTuple::Item<float> m_chidedxe;
00118 NTuple::Item<float> m_chidedxmu;
00119 NTuple::Item<float> m_chidedxpi;
00120 NTuple::Item<float> m_chidedxk;
00121 NTuple::Item<float> m_chidedxp;
00122
00123
00124 NTuple::Tuple* m_nt2;
00125 NTuple::Item<double> m_charge1;
00126 NTuple::Item<double> m_phraw;
00127 NTuple::Item<double> m_exraw;
00128 NTuple::Item<float> m_wire;
00129 NTuple::Item<float> m_localwid;
00130 NTuple::Item<double> m_runNO1;
00131 NTuple::Item<float> m_nhit_hit;
00132 NTuple::Item<float> m_doca_in;
00133 NTuple::Item<float> m_doca_ex;
00134 NTuple::Item<float> m_driftdist;
00135 NTuple::Item<float> m_eangle;
00136 NTuple::Item<float> m_costheta1;
00137 NTuple::Item<float> m_pathL;
00138 NTuple::Item<float> m_layer;
00139 NTuple::Item<float> m_ptrk1;
00140 NTuple::Item<float> m_ptrk_hit;
00141 NTuple::Item<float> m_t01;
00142 NTuple::Item<float> m_tdc_raw;
00143 NTuple::Item<float> m_driftT;
00144 NTuple::Item<float> m_trackId1;
00145 };