BmnRoot
Loading...
Searching...
No Matches
BmnTofHitProducer.h
Go to the documentation of this file.
1//--------------------------------------------------------------------------------------------------------------------------------------
2#ifndef __BmnTofHitProducer_H
3#define __BmnTofHitProducer_H 1
4
5#include <TClonesArray.h>
6#include <FairTask.h>
7
8#include <map>
9#include <math.h>
10
11#include "BmnTofHitProducerIdeal.h"
12#include "BmnTofGeoUtils.h"
13#include "BmnTof2Digit.h"
14#include "BmnTrigDigit.h"
15#include "BmnTof2Raw2DigitNew.h"
16
17#define TOF2_MAX_CHAMBERS 59
18#define TOF2_MAX_STRIPS_IN_CHAMBER 32
19
20#define STRIP_CORRECTIONS 1
21#define LIST_CHAMBER_CORRECTIONS 0
22#define LIST_STRIP_CORRECTIONS 0
23// CVERS=0 - use last calibration tables, 1 - use *;1 version
24#define CVERS 1
25
26class TRandom2;
27class TEfficiency;
28class TH1D;
29class TH2D;
30class BmnTofGeoUtils;
31
32class BmnTofHitProducer : public BmnTofHitProducerIdeal
33{
34 Double_t fMCTime[TOF2_MAX_CHAMBERS];
35 Double_t fMCTimeSigma[TOF2_MAX_CHAMBERS];
36
37 Double_t tofcalc[TOF2_MAX_CHAMBERS] = {0.f};
38 Double_t tofcals[TOF2_MAX_CHAMBERS][32] = {{0.f}};
39
40 Double_t fTimeSigma; // Uncertainties of time, gaus sigma [ns], default: 100 ps
41 Double_t fErrX, fErrY; // Uncertainties of coordinates, gaus sigma [cm], dX= 10./sqrt(12.) mm, default: dY= 5 mm.
42 TRandom2 *pRandom;
43
44 Bool_t fDoINL;
45 Bool_t fDoSlewing;
46
47 // QA test histos
48 TEfficiency *effTestEfficiencySingleHit, *effTestEfficiencyDoubleHit;
49 TH1D *htR, *h1TestDistance, *h1TestMass, *h1TestMassLong, *h1TestOccupancyTimeShift, *h1TestOccupancyPositionShift;
50 TH2D *h2TestNeighborPair, *h2TestXYSmeared, *h2TestXYSmeared2,*h2TestXYSmearedDouble, *h2TestXYSmearedDouble2, *h2TestEtaPhi, *h2TestStrips, *h2TestRZ, *h2TdetIdStripId;
51
52 Bool_t HitExist(Double_t val);
53 Bool_t DoubleHitExist(Double_t val);
54
55 BmnTofGeoUtils *pGeoUtils;
56
57 const char *fgeomFile;
58
59 const char *fMCTimeFile;
60
61 const char *fProtonTimeCorrectionFile;
62
63 const double fSignalVelosity; // [ns/cm]
64
65 // input- strip edge position & signal times; output- strip crosspoint; return false, if crosspoint outside strip
66 Int_t MergeHitsOnStripNew(void);
67 bool GetCrossPoint(const TVector3& p1, double time1, const TVector3& p2, double time2, TVector3& crossPoint);
68 bool GetCrossPoint(const LStrip *pStrip, double dtime, TVector3& crossPoint);
69 Double_t CalculateToF (BmnTof2Digit *d1, BmnTof2Digit *d2, BmnTrigDigit *t0);
70 BmnTof2Raw2DigitNew *fTOF2;
71 Int_t fMainStripSelection;
72 Int_t fSelectXYCalibration;
73 Double_t fTimeMin;
74 Double_t fTimeMax;
75 Double_t fDiffTimeMaxSmall;
76 Double_t fDiffTimeMaxBig;
77
78 public:
79 BmnTofHitProducer(const char *name = "TOF HitProducer", const char *geomFile = "", Bool_t useMCdata = true, Int_t verbose = 1, Bool_t DoTest = false);
80 virtual ~BmnTofHitProducer();
81
82 virtual InitStatus Init();
83 virtual void Exec(Option_t* opt);
84 virtual void Finish();
85
86 virtual void OnlineWrite(const std::unique_ptr<TTree> &resultTree);
87
88 void SetTimeResolution(Double_t sigma){ fTimeSigma = sigma; };
89 void SetAlongStripResolution(Double_t Xerr){ fErrX = Xerr;};
90 void SetSeed(UInt_t seed = 0);
91
92 void SetDoINL(bool val){ fDoINL = val;}
93 void SetDoSlewing(bool val){ fDoSlewing = val;}
94 void SetMainStripSelection(Int_t s = 0) { fMainStripSelection = s; };
95 void SetSelectXYCalibration(Int_t s = 0) { fSelectXYCalibration = s; };
96 void SetTimeMin(Double_t mi = -2.) { fTimeMin = mi; };
97 void SetTimeMax(Double_t ma = +15.) { fTimeMax = ma; };
98 void SetDiffTimeMaxSmall(Double_t ds = 0.) { fDiffTimeMaxSmall = ds; };
99 void SetDiffTimeMaxBig(Double_t db = 0.) { fDiffTimeMaxBig = db; };
100
102 {
103 char s[32];
104 TString buf = "\n Run parameters: fTimeSigma="; sprintf(s, "%.5g", fTimeSigma); buf+=(s);
105 buf+=" ns, fErrX="; sprintf(s, "%.4g", fErrX); buf+=(s);
106 buf+=" cm, fErrY="; sprintf(s, "%.4g", fErrY); buf+=(s);
107 buf+=" cm, fDoTest="; buf+=fDoTest; buf+=", fDoMergeHits="; buf+=fDoMergeHits;
108 buf+=", fDoINL="; buf+=fDoINL; buf+=", fDoSlewing="; buf+=fDoSlewing;
109 return buf;
110 }
111
112 int readMCTimeFile(const char *);
113 void SetMCTimeFile(const char * file) {fMCTimeFile = file;}
114 void SetProtonTimeCorrectionFile(const char * file) {fProtonTimeCorrectionFile = file;}
115
117};
118
119#endif
#define TOF2_MAX_CHAMBERS
void SetTimeResolution(Double_t sigma)
void SetDiffTimeMaxSmall(Double_t ds=0.)
void SetDoSlewing(bool val)
void SetTimeMax(Double_t ma=+15.)
void SetAlongStripResolution(Double_t Xerr)
void SetDoINL(bool val)
void SetSelectXYCalibration(Int_t s=0)
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
void SetMCTimeFile(const char *file)
int readMCTimeFile(const char *)
void SetDiffTimeMaxBig(Double_t db=0.)
void SetMainStripSelection(Int_t s=0)
ClassDef(BmnTofHitProducer, 2)
void SetSeed(UInt_t seed=0)
void SetProtonTimeCorrectionFile(const char *file)
virtual void Exec(Option_t *opt)
void SetTimeMin(Double_t mi=-2.)
virtual InitStatus Init()