ROOT logo
#ifndef  HPARTICLET0RECO_H
#define  HPARTICLET0RECO_H

#include "hreconstructor.h"
#include "hparticlepathlengthcorr.h"
#include "henergylosscorrpar.h"
#include "heventheader.h"




#include "TH1D.h"
#include "TF1.h"
#include "TString.h"

#include <vector>
#include <map>
#include <list>

using namespace std;



class HParticleCand;
class HCategory;


#define STMOD 2
#define STSTRIP 16
#define STBIN 500

class HParticleT0Reco : public HReconstructor {



    //-------------------------------------------------------
    // helper structs
    typedef struct  {
        Int_t   id;
	Bool_t  is;
	Float_t deltaTime;
	Float_t sigmaTime;
	Float_t normTime;
	Float_t deltadEdx;
	Float_t sigmadEdx;
	Float_t normdEdx;
	Float_t norm;

	void clear()
	{
            is        = kFALSE;
	    deltaTime = 999.;
	    sigmaTime = 0.1;
	    normTime  = 9999.;
	    deltadEdx = 999.;
	    sigmadEdx = 0.1;
	    normdEdx  = 9999.;
	    norm      = 9999.;
	}
    } pidvalues;



    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 <Float_t> t0   [2];       // systems
	list <Float_t> t0err[2];       // systems
	vector <vector < list<Float_t> > > t0forrpcstrip;
	vector <vector < list<Float_t> > > t0forrpcstriperr;
	vector <vector < list<Float_t> > > meanqstrip;

    } buffers;

    class momCut {
    public:
	Float_t min;
	Float_t max;
        Int_t   id;

	momCut(Int_t Id=2, Float_t Min=0,Float_t Max=3000){
	    id=Id;
	    min=Min;
            max=Max;
	}

	Bool_t eval(Float_t mom){
	    return   (mom>min && mom<max) ? kTRUE: kFALSE;
	}

    };

    //-------------------------------------------------------



private:

    //-------------------------------------------------------
    // input objects
    HCategory* candCat;
    HCategory* catStart;
    HCategory* catStartcal;
    HEventHeader* fEvHeader;
    //-------------------------------------------------------

    //-------------------------------------------------------
    vector<tofvalues>* eventMETA[2];   // helper array to switch systems
    vector<tofvalues> eventTOF;        // per event values of all candidates TOF
    vector<tofvalues> eventRPC;        // per event values of all candidates RPC
    startvalues start[STMOD][STSTRIP]; // values per start module:strip
    buffers buff;                      // all circular buffers
    vector <Int_t>         vparticle;  // all known ids
    map<Int_t,Int_t>      mIdToIndex;  // all known ids
    map<Int_t,momCut> mMomCut1Sys[2];  // mom cuts iteration 1 per sys
    map<Int_t,momCut> mMomCut2Sys[2];  // mom cuts iteration 2 per sys
    //-------------------------------------------------------

    //-------------------------------------------------------
    //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;}

    ClassDef(HParticleT0Reco,0)

};


#endif
 hparticlet0reco.h:1
 hparticlet0reco.h:2
 hparticlet0reco.h:3
 hparticlet0reco.h:4
 hparticlet0reco.h:5
 hparticlet0reco.h:6
 hparticlet0reco.h:7
 hparticlet0reco.h:8
 hparticlet0reco.h:9
 hparticlet0reco.h:10
 hparticlet0reco.h:11
 hparticlet0reco.h:12
 hparticlet0reco.h:13
 hparticlet0reco.h:14
 hparticlet0reco.h:15
 hparticlet0reco.h:16
 hparticlet0reco.h:17
 hparticlet0reco.h:18
 hparticlet0reco.h:19
 hparticlet0reco.h:20
 hparticlet0reco.h:21
 hparticlet0reco.h:22
 hparticlet0reco.h:23
 hparticlet0reco.h:24
 hparticlet0reco.h:25
 hparticlet0reco.h:26
 hparticlet0reco.h:27
 hparticlet0reco.h:28
 hparticlet0reco.h:29
 hparticlet0reco.h:30
 hparticlet0reco.h:31
 hparticlet0reco.h:32
 hparticlet0reco.h:33
 hparticlet0reco.h:34
 hparticlet0reco.h:35
 hparticlet0reco.h:36
 hparticlet0reco.h:37
 hparticlet0reco.h:38
 hparticlet0reco.h:39
 hparticlet0reco.h:40
 hparticlet0reco.h:41
 hparticlet0reco.h:42
 hparticlet0reco.h:43
 hparticlet0reco.h:44
 hparticlet0reco.h:45
 hparticlet0reco.h:46
 hparticlet0reco.h:47
 hparticlet0reco.h:48
 hparticlet0reco.h:49
 hparticlet0reco.h:50
 hparticlet0reco.h:51
 hparticlet0reco.h:52
 hparticlet0reco.h:53
 hparticlet0reco.h:54
 hparticlet0reco.h:55
 hparticlet0reco.h:56
 hparticlet0reco.h:57
 hparticlet0reco.h:58
 hparticlet0reco.h:59
 hparticlet0reco.h:60
 hparticlet0reco.h:61
 hparticlet0reco.h:62
 hparticlet0reco.h:63
 hparticlet0reco.h:64
 hparticlet0reco.h:65
 hparticlet0reco.h:66
 hparticlet0reco.h:67
 hparticlet0reco.h:68
 hparticlet0reco.h:69
 hparticlet0reco.h:70
 hparticlet0reco.h:71
 hparticlet0reco.h:72
 hparticlet0reco.h:73
 hparticlet0reco.h:74
 hparticlet0reco.h:75
 hparticlet0reco.h:76
 hparticlet0reco.h:77
 hparticlet0reco.h:78
 hparticlet0reco.h:79
 hparticlet0reco.h:80
 hparticlet0reco.h:81
 hparticlet0reco.h:82
 hparticlet0reco.h:83
 hparticlet0reco.h:84
 hparticlet0reco.h:85
 hparticlet0reco.h:86
 hparticlet0reco.h:87
 hparticlet0reco.h:88
 hparticlet0reco.h:89
 hparticlet0reco.h:90
 hparticlet0reco.h:91
 hparticlet0reco.h:92
 hparticlet0reco.h:93
 hparticlet0reco.h:94
 hparticlet0reco.h:95
 hparticlet0reco.h:96
 hparticlet0reco.h:97
 hparticlet0reco.h:98
 hparticlet0reco.h:99
 hparticlet0reco.h:100
 hparticlet0reco.h:101
 hparticlet0reco.h:102
 hparticlet0reco.h:103
 hparticlet0reco.h:104
 hparticlet0reco.h:105
 hparticlet0reco.h:106
 hparticlet0reco.h:107
 hparticlet0reco.h:108
 hparticlet0reco.h:109
 hparticlet0reco.h:110
 hparticlet0reco.h:111
 hparticlet0reco.h:112
 hparticlet0reco.h:113
 hparticlet0reco.h:114
 hparticlet0reco.h:115
 hparticlet0reco.h:116
 hparticlet0reco.h:117
 hparticlet0reco.h:118
 hparticlet0reco.h:119
 hparticlet0reco.h:120
 hparticlet0reco.h:121
 hparticlet0reco.h:122
 hparticlet0reco.h:123
 hparticlet0reco.h:124
 hparticlet0reco.h:125
 hparticlet0reco.h:126
 hparticlet0reco.h:127
 hparticlet0reco.h:128
 hparticlet0reco.h:129
 hparticlet0reco.h:130
 hparticlet0reco.h:131
 hparticlet0reco.h:132
 hparticlet0reco.h:133
 hparticlet0reco.h:134
 hparticlet0reco.h:135
 hparticlet0reco.h:136
 hparticlet0reco.h:137
 hparticlet0reco.h:138
 hparticlet0reco.h:139
 hparticlet0reco.h:140
 hparticlet0reco.h:141
 hparticlet0reco.h:142
 hparticlet0reco.h:143
 hparticlet0reco.h:144
 hparticlet0reco.h:145
 hparticlet0reco.h:146
 hparticlet0reco.h:147
 hparticlet0reco.h:148
 hparticlet0reco.h:149
 hparticlet0reco.h:150
 hparticlet0reco.h:151
 hparticlet0reco.h:152
 hparticlet0reco.h:153
 hparticlet0reco.h:154
 hparticlet0reco.h:155
 hparticlet0reco.h:156
 hparticlet0reco.h:157
 hparticlet0reco.h:158
 hparticlet0reco.h:159
 hparticlet0reco.h:160
 hparticlet0reco.h:161
 hparticlet0reco.h:162
 hparticlet0reco.h:163
 hparticlet0reco.h:164
 hparticlet0reco.h:165
 hparticlet0reco.h:166
 hparticlet0reco.h:167
 hparticlet0reco.h:168
 hparticlet0reco.h:169
 hparticlet0reco.h:170
 hparticlet0reco.h:171
 hparticlet0reco.h:172
 hparticlet0reco.h:173
 hparticlet0reco.h:174
 hparticlet0reco.h:175
 hparticlet0reco.h:176
 hparticlet0reco.h:177
 hparticlet0reco.h:178
 hparticlet0reco.h:179
 hparticlet0reco.h:180
 hparticlet0reco.h:181
 hparticlet0reco.h:182
 hparticlet0reco.h:183
 hparticlet0reco.h:184
 hparticlet0reco.h:185
 hparticlet0reco.h:186
 hparticlet0reco.h:187
 hparticlet0reco.h:188
 hparticlet0reco.h:189
 hparticlet0reco.h:190