forked from JeffersonLab/SBS-offline
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSBSHCal.cxx
128 lines (113 loc) · 2.92 KB
/
SBSHCal.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
///////////////////////////////////////////////////////////////////////////////
//
// SBSHCal
//
///////////////////////////////////////////////////////////////////////////////
#include "SBSHCal.h"
#include <iostream>
#include "THaEvData.h"
ClassImp(SBSHCal);
/*
* SBSHCal constructor.
*
* Specify SBSCalorimeter to use both TDC and ADC Multi-samples
*/
SBSHCal::SBSHCal( const char* name, const char* description,
THaApparatus* apparatus ) : SBSCalorimeter(name,description,apparatus)
{
SetModeADC(SBSModeADC::kWaveform);
SetModeTDC(SBSModeTDC::kTDCSimple);
SetDisableRefTDC(true);
fWithLED = true;
}
///////////////////////////////////////////////////////////////////////////////
/// Read SBSHCal Database
Int_t SBSHCal::ReadDatabase( const TDatime& date )
{
// We can use this name here for logs
static const char* const here = "ReadDatabase()";
if(fWithLED) {
FILE* file = OpenFile( date );
if( !file ) return kFileError;
Int_t err;
/*
// Read in required geometry variables, which include fOrigin and fSize
Int_t err = ReadGeometry( file, date, true );
if( err ) {
fclose(file);
return err;
}
*/
std::vector<Int_t> ledmap;
DBRequest led_request[] = {
{ "ledmap", &ledmap, kIntV, 2, false }, ///< ledmap of LED
{0}
};
err = LoadDB( file, date, led_request, fPrefix );
fclose(file);
if(err) {
return err;
}
if(ledmap.size()<2) {
Error(Here(here), "Need crate slot for LED");
return kInitError;
}
fLEDCrate = ledmap[0];
fLEDSlot = ledmap[1];
}
return SBSCalorimeter::ReadDatabase(date);
}
//_____________________________________________________________________________
Int_t SBSHCal::Decode( const THaEvData& evdata )
{
Int_t err = SBSCalorimeter::Decode(evdata);
if(fWithLED) {
UInt_t ihit = evdata.GetNumChan(fLEDCrate,fLEDSlot);
if(ihit!=2 ) {
//std::cerr << "ihit=" << ihit << std::endl;
return 0;
}
fLEDBit = evdata.GetData(fLEDCrate,fLEDSlot,1,0);
fLEDCount = evdata.GetData(fLEDCrate,fLEDSlot,2,0);
}
return err;
}
//
Int_t SBSHCal::CoarseProcess(TClonesArray& tracks)
{
Int_t err = SBSCalorimeter::CoarseProcess(tracks);
if(err) {
return err;
}
/*Int_t BlockSize = */ SBSCalorimeter::MakeGoodBlocks();
Int_t ClusSize = SBSCalorimeter::FindClusters();
return ClusSize;
}
//_____________________________________________________________________________
Int_t SBSHCal::DefineVariables( EMode mode )
{
// Initialize global variables
Int_t err = SBSCalorimeter::DefineVariables(mode);
if(err) {
return err;
}
RVarDef vars[] = {
{ "ledbit", "LEDBit", "fLEDBit" },
{ "ledcount", "LEDCount", "fLEDCount" },
{ 0 }
};
err = DefineVarsFromList( vars, mode );
return err;
}
void SBSHCal::Clear( Option_t* opt )
{
fLEDBit = -1;
fLEDCount = 0;
SBSCalorimeter::Clear(opt);
}
/*
* Generic SBSHCal destructor
*/
SBSHCal::~SBSHCal()
{
}