BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
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 "BmnTof2Digit.h"
7#include "BmnTofGeoUtils.h"
8#include "BmnTofHitProducerIdeal.h"
9#include "BmnTrigDigit.h"
10
11#include <FairTask.h>
12#include <TClonesArray.h>
13#include <map>
14#include <math.h>
15
16#define TOF2_MAX_CHAMBERS 59
17#define TOF2_MAX_STRIPS_IN_CHAMBER 32
18
19#define STRIP_CORRECTIONS 1
20#define LIST_CHAMBER_CORRECTIONS 0
21#define LIST_STRIP_CORRECTIONS 0
22// CVERS=0 - use last calibration tables, 1 - use *;1 version
23#define CVERS 1
24
25class TRandom2;
26class TEfficiency;
27class TH1D;
28class TH2D;
29class BmnTofGeoUtils;
30
32{
35
38
39 Double_t fTimeSigma; // Uncertainties of time, gaus sigma [ns], default: 100 ps
40 Double_t fErrX, fErrY; // Uncertainties of coordinates, gaus sigma [cm], dX= 10./sqrt(12.) mm, default: dY= 5 mm.
42
45
46 // QA test histos
52
55
56 BmnTofGeoUtils* pGeoUtils; //!
57
58 const char* fgeomFile; //!
59
60 const char* fMCTimeFile; //!
61
63
64 const double fSignalVelosity; // [ns/cm]
65
66 // input- strip edge position & signal times; output- strip crosspoint; return false, if crosspoint outside strip
68 bool GetCrossPoint(const TVector3& p1, double time1, const TVector3& p2, double time2, TVector3& crossPoint);
69 bool GetCrossPoint(const LStrip* pStrip, double dtime, TVector3& crossPoint);
78
79 public:
80 BmnTofHitProducer(const char* name = "TOF HitProducer",
81 const char* geomFile = "",
82 Bool_t useMCdata = true,
83 Int_t verbose = 1,
84 Bool_t DoTest = false);
85 virtual ~BmnTofHitProducer();
86
87 virtual InitStatus Init();
88 virtual void Exec(Option_t* opt);
89 virtual void Finish();
90
91 virtual void OnlineWrite(const std::unique_ptr<TTree>& resultTree);
92
93 void SetTimeResolution(Double_t sigma) { fTimeSigma = sigma; };
94 void SetAlongStripResolution(Double_t Xerr) { fErrX = Xerr; };
95 void SetSeed(UInt_t seed = 0);
96
97 void SetDoINL(bool val) { fDoINL = val; }
98 void SetDoSlewing(bool val) { fDoSlewing = val; }
101 void SetTimeMin(Double_t mi = -2.) { fTimeMin = mi; };
102 void SetTimeMax(Double_t ma = +15.) { fTimeMax = ma; };
105
107 {
108 char s[32];
109 TString buf = "\n Run parameters: fTimeSigma=";
110 sprintf(s, "%.5g", fTimeSigma);
111 buf += (s);
112 buf += " ns, fErrX=";
113 sprintf(s, "%.4g", fErrX);
114 buf += (s);
115 buf += " cm, fErrY=";
116 sprintf(s, "%.4g", fErrY);
117 buf += (s);
118 buf += " cm, fDoTest=";
119 buf += fDoTest;
120 buf += ", fDoMergeHits=";
121 buf += fDoMergeHits;
122 buf += ", fDoINL=";
123 buf += fDoINL;
124 buf += ", fDoSlewing=";
125 buf += fDoSlewing;
126 return buf;
127 }
128
129 int readMCTimeFile(const char*);
130 void SetMCTimeFile(const char* file) { fMCTimeFile = file; }
132
134};
135
136#endif
#define TOF2_MAX_CHAMBERS
bool Bool_t
int Int_t
unsigned int UInt_t
double Double_t
const char Option_t
#define ClassDef(name, id)
Double_t CalculateToF(BmnTof2Digit *d1, BmnTof2Digit *d2, BmnTrigDigit *t0)
Double_t tofcalc[TOF2_MAX_CHAMBERS]
void SetTimeResolution(Double_t sigma)
TH1D * h1TestOccupancyPositionShift
void SetDiffTimeMaxSmall(Double_t ds=0.)
Double_t fMCTime[TOF2_MAX_CHAMBERS]
BmnTofGeoUtils * pGeoUtils
void SetDoSlewing(bool val)
const char * fMCTimeFile
Double_t tofcals[TOF2_MAX_CHAMBERS][32]
void SetTimeMax(Double_t ma=+15.)
void SetAlongStripResolution(Double_t Xerr)
BmnTof2Raw2DigitNew * fTOF2
void SetDoINL(bool val)
void SetSelectXYCalibration(Int_t s=0)
BmnTofHitProducer(const char *name="TOF HitProducer", const char *geomFile="", Bool_t useMCdata=true, Int_t verbose=1, Bool_t DoTest=false)
virtual void OnlineWrite(const std::unique_ptr< TTree > &resultTree)
void SetMCTimeFile(const char *file)
int readMCTimeFile(const char *)
void SetDiffTimeMaxBig(Double_t db=0.)
const char * fProtonTimeCorrectionFile
const double fSignalVelosity
void SetMainStripSelection(Int_t s=0)
void SetSeed(UInt_t seed=0)
Bool_t HitExist(Double_t val)
void SetProtonTimeCorrectionFile(const char *file)
virtual void Exec(Option_t *opt)
bool GetCrossPoint(const TVector3 &p1, double time1, const TVector3 &p2, double time2, TVector3 &crossPoint)
Int_t MergeHitsOnStripNew(void)
Double_t fMCTimeSigma[TOF2_MAX_CHAMBERS]
void SetTimeMin(Double_t mi=-2.)
Bool_t DoubleHitExist(Double_t val)
virtual InitStatus Init()
TEfficiency * effTestEfficiencySingleHit
TEfficiency * effTestEfficiencyDoubleHit