#ifndef HPARTICLET0RECO_H #define HPARTICLET0RECO_H #include "hreconstructor.h" #include "hparticlepathlengthcorr.h" #include "henergylosscorrpar.h" #include "heventheader.h" #include "hparticlepid.h" #include "TH1D.h" #include "TF1.h" #include "TString.h" #include #include #include using namespace std; class HParticleCand; class HCategory; #define STMOD 2 #define STSTRIP 16 #define STBIN 500 class HParticleT0Reco : public HReconstructor { //------------------------------------------------------- // helper structs typedef struct { Float_t meanq ; Float_t meanqall; Float_t scor; TH1D* h ; TH1D* he; } startvalues; typedef struct { HParticleCand* c; Int_t index; Float_t times; Float_t error; } tofvalues; typedef struct { list t0 [2]; // systems list t0err[2]; // systems vector > > t0forrpcstrip; vector > > t0forrpcstriperr; vector > > meanqstrip; } buffers; //------------------------------------------------------- private: //------------------------------------------------------- // input objects HCategory* candCat; HCategory* catStart; HCategory* catStartcal; HEventHeader* fEvHeader; //------------------------------------------------------- //------------------------------------------------------- vector* eventMETA[2]; // helper array to switch systems vector eventTOF; // per event values of all candidates TOF vector eventRPC; // per event values of all candidates RPC startvalues start[STMOD][STSTRIP]; // values per start module:strip buffers buff; // all circular buffers HParticlePID fParticlePID; //------------------------------------------------------- //------------------------------------------------------- //Systematic offsets (running per event)! Float_t t0rpc; Float_t t0tof; Float_t t0startcont; Float_t t0startconterr; Double_t c; // speed of light //------------------------------------------------------- //------------------------------------------------------- // flags TString run; // beamtime Bool_t fUseFlagged; // use flagged kIsUsed candidates for t0 reco (default=kTRUE) Bool_t fisSimulation; // for simulation START has to be treated different Bool_t fisEmbedding; // embedding mode //------------------------------------------------------- //------------------------------------------------------- // correction containers HEnergyLossCorrPar* eLoss; //------------------------------------------------------- void initWalkHists(); Bool_t isEmbedded(HParticleCand* pCand); void fill(); void fillMETA(Float_t t0, Float_t err,Int_t sys); Float_t getT0 (Int_t sys); Float_t getT0Err(Int_t sys); Float_t getBeta(HParticleCand* pCand); void fillBuffer(); void fillCorrections(); void correctBeta(); Float_t getOnlineStripCorrection(Int_t mod, Int_t strip); Float_t getOnlineMeanQ (Int_t mod, Int_t strip); void calculateStartT0Cont(); void setPIDs(); public: HParticleT0Reco(const Text_t* name="ParticleT0Reco",const Text_t* title="ParticleT0Reco", const Text_t* beamtime="apr12"); ~HParticleT0Reco(); Int_t execute(void); Bool_t init(void); Bool_t finalize(){ return kTRUE;} void setUseFlaggedCandidates(Bool_t use=kTRUE) { fUseFlagged = use;} void setBeamTime(TString beam) { run = beam; } HParticlePID& getParticlePID() { return fParticlePID; } ClassDef(HParticleT0Reco,0) }; #endif