Hall A ROOT/C++ Analyzer (podd)
Loading...
Searching...
No Matches
THaCrateMap.h
Go to the documentation of this file.
1#ifndef Podd_THaCrateMap_h_
2#define Podd_THaCrateMap_h_
3
5//
6// THaCrateMap
7// Layout, or "map", of DAQ Crates.
8//
9// THaCrateMap contains info on how the DAQ crates
10// are arranged in Hall A, i.e whether slots are
11// fastbus or vme, what the module types are, and
12// what header info to expect. Probably nobody needs
13// to know about this except the author, and at present
14// an object of this class is a private member of the decoder.
15//
16// author Robert Michaels (rom@jlab.org)
17//
19
20
21#include "Decoder.h"
22#include "TDatime.h"
23#include <fstream>
24#include <cstdio> // for FILE
25#include <cassert>
26#include <iostream>
27#include <string>
28#include <vector>
29#include <array>
30
31namespace Decoder {
32
34 public:
35 static const UInt_t MAXCHAN;
36 static const UInt_t MAXDATA;
37
38 explicit THaCrateMap( const char* db = "cratemap" ); // Construct uninitialized
39 virtual ~THaCrateMap() = default;
40 bool isFastBus( UInt_t crate ) const; // True if fastbus crate;
41 bool isVme( UInt_t crate ) const; // True if VME crate;
42 bool isCamac( UInt_t crate ) const; // True if CAMAC crate;
43 bool isScalerCrate( UInt_t crate ) const; // True if a Scaler crate
44 bool isBankStructure( UInt_t crate ) const; // True if modules in banks
45 bool isAllBanks( UInt_t crate ) const; // True if all modules in banks
46 UInt_t getNslot( UInt_t crate ) const; // Returns num occupied slots
47 UInt_t getMinSlot( UInt_t crate ) const; // Returns min slot number
48 UInt_t getMaxSlot( UInt_t crate ) const; // Returns max slot number
49 UInt_t getTSROC() const; // Returns the crate number of the Trig. Super.
50
51 // This class must inform the crateslot where the modules are.
52
53 Int_t getModel( UInt_t crate, UInt_t slot ) const; // Return module type
54 UInt_t getHeader( UInt_t crate, UInt_t slot ) const;// Return header
55 UInt_t getMask( UInt_t crate, UInt_t slot ) const; // Return header mask
56 Int_t getBank( UInt_t crate, UInt_t slot ) const; // Return bank number
57 UInt_t getScalerCrate( UInt_t word) const; // Return scaler crate if word=header
58 const char* getScalerLoc( UInt_t crate ) const; // Return scaler crate location
59 const char* getConfigStr( UInt_t crate, UInt_t slot ) const; // Configuration string
60 UInt_t getNchan( UInt_t crate, UInt_t slot ) const; // Max number of channels
61 UInt_t getNdata( UInt_t crate, UInt_t slot ) const; // Max number of data words
62 bool crateUsed( UInt_t crate ) const; // True if crate is used
63 bool slotUsed( UInt_t crate, UInt_t slot ) const; // True if slot in crate is used
64 bool slotClear( UInt_t crate, UInt_t slot ) const; // Decide if not clear ea event
65 void setUnused( UInt_t crate, UInt_t slot ); // Disables this slot in crate
66 void setUnused( UInt_t crate ); // Disables this crate
67 int init(const std::string& the_map); // Initialize from text-block
68 int init(ULong64_t time = 0); // Initialize by Unix time.
69 int init( FILE* fi, const char* fname ); // Initialize from given file
70 void print(std::ostream& os = std::cout) const;
71
72 const std::vector<UInt_t>& GetUsedCrates() const;
73 const std::vector<UInt_t>& GetUsedSlots( UInt_t crate ) const;
74
75 static const Int_t CM_OK;
76 static const Int_t CM_ERR;
77
78 static const UInt_t DEFAULT_TSROC;
79
80 const char* GetName() const { return fDBfileName.c_str(); }
81
82 private:
83
85
86 std::string fDBfileName; // Database file name
87 TDatime fInitTime; // Database time stamp
88 UInt_t fTSROC; // Crate (aka ROC) of the trigger supervisor
89
90 class SlotInfo_t {
91 public:
93 model(0), header(0), headmask(0xffffffff), bank(-1),
94 nchan(0), ndata(0), used(false), clear(true) {}
101 std::string cfgstr;
102 bool used;
103 bool clear;
104 };
105
106 class CrateInfo_t { // Crate Information data descriptor
107 public:
108 CrateInfo_t();
109 Int_t ParseSlotInfo( THaCrateMap* crmap, UInt_t crate, std::string& line );
111 std::string crate_type_name;
112 std::string scalerloc;
116 std::vector<UInt_t> used_slots;
117 std::array<SlotInfo_t, MAXSLOT> sltdat;
118 };
119 std::vector<CrateInfo_t> crdat;
120
121 std::vector<UInt_t> used_crates;
122
123 Int_t loadConfig( std::string& line, std::string& cfgstr );
124 Int_t resetCrate( UInt_t crate );
125 Int_t setCrateType( UInt_t crate, const char* stype ); // set the crate type
126 Int_t setModel( UInt_t crate, UInt_t slot, Int_t mod,
127 UInt_t nchan= MAXCHAN,
128 UInt_t ndata= MAXDATA ); // set the module type
129 void setUsed( UInt_t crate, UInt_t slot );
130 Int_t SetModelSize( UInt_t crate, UInt_t slot, UInt_t model );
131 Int_t ParseCrateInfo( const std::string& line, UInt_t& crate );
133
134 static Int_t readFile( FILE* fi, std::string& text );
135
136 ClassDef(THaCrateMap,0) // Map of modules in DAQ crates
137};
138
139//=============== inline functions ================================
140inline
142{
143 assert( crate < crdat.size() );
144 return (crdat[crate].crate_code == kFastbus);
145}
146
147inline
148bool THaCrateMap::isVme( UInt_t crate ) const
149{
150 assert( crate < crdat.size() );
151 return (crdat[crate].crate_code == kVME ||
152 crdat[crate].crate_code == kScaler );
153}
154
155inline
156bool THaCrateMap::isCamac( UInt_t crate ) const
157{
158 assert( crate < crdat.size() );
159 return (crdat[crate].crate_code == kCamac);
160}
161
162inline
164{
165 assert( crate < crdat.size() );
166 return (crdat[crate].crate_code == kScaler);
167}
168
169inline
171{
172 assert( crate < crdat.size() );
173 return (crdat[crate].bank_structure);
174}
175
176inline
178{
179 assert( crate < crdat.size() );
180 return (crdat[crate].all_banks);
181}
182
183inline
185{
186 assert( crate < crdat.size() );
187 return crdat[crate].crate_used;
188}
189
190inline
191bool THaCrateMap::slotUsed( UInt_t crate, UInt_t slot ) const
192{
193 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
194 if( crate >= crdat.size() || slot >= crdat[crate].sltdat.size() )
195 return false;
196 return crdat[crate].sltdat[slot].used;
197}
198
199inline
200bool THaCrateMap::slotClear( UInt_t crate, UInt_t slot ) const
201{
202 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
203 return crdat[crate].sltdat[slot].clear;
204}
205
206inline
208{
209 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
210 return crdat[crate].sltdat[slot].model;
211}
212
213inline
215{
216 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
217 return crdat[crate].sltdat[slot].headmask;
218}
219
220inline
222{
223 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
224 return crdat[crate].sltdat[slot].bank;
225}
226
227inline
229{
230 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
231 return crdat[crate].sltdat[slot].nchan;
232}
233
234inline
236{
237 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
238 return crdat[crate].sltdat[slot].ndata;
239}
240
241inline
243{
244 assert( crate < crdat.size() );
245 return crdat[crate].used_slots.size();
246}
247
248inline
249const char* THaCrateMap::getScalerLoc( UInt_t crate ) const
250{
251 assert( crate < crdat.size() );
252 return crdat[crate].scalerloc.c_str();
253}
254
255inline
256const char* THaCrateMap::getConfigStr( UInt_t crate, UInt_t slot ) const
257{
258 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
259 return crdat[crate].sltdat[slot].cfgstr.c_str();
260}
261
262inline
264{
265 assert( crate < crdat.size() );
266 if( crdat[crate].used_slots.empty() )
267 return kMaxUInt;
268 return crdat[crate].used_slots.front();
269}
270
271inline
273{
274 assert( crate < crdat.size() );
275 if( crdat[crate].used_slots.empty() )
276 return 0;
277 return crdat[crate].used_slots.back();
278}
279
280inline
282{
283 return fTSROC;
284}
285
286inline
288{
289 assert( crate < crdat.size() && slot < crdat[crate].sltdat.size() );
290 return crdat[crate].sltdat[slot].header;
291}
292
293inline
294const std::vector<UInt_t>& THaCrateMap::GetUsedCrates() const
295{
296 return used_crates;
297}
298
299inline
300const std::vector<UInt_t>& THaCrateMap::GetUsedSlots( UInt_t crate ) const
301{
302 assert( crate < crdat.size() );
303 return crdat[crate].used_slots;
304}
305
306}
307
308#endif
int Int_t
unsigned int UInt_t
uint32_t time
const UInt_t kMaxUInt
#define ClassDef(name, id)
std::array< SlotInfo_t, MAXSLOT > sltdat
std::vector< UInt_t > used_slots
Int_t ParseSlotInfo(THaCrateMap *crmap, UInt_t crate, std::string &line)
const std::vector< UInt_t > & GetUsedSlots(UInt_t crate) const
UInt_t getNchan(UInt_t crate, UInt_t slot) const
UInt_t getNslot(UInt_t crate) const
bool slotUsed(UInt_t crate, UInt_t slot) const
void setUsed(UInt_t crate, UInt_t slot)
static const UInt_t MAXDATA
Definition THaCrateMap.h:36
static const UInt_t MAXCHAN
Definition THaCrateMap.h:35
const std::vector< UInt_t > & GetUsedCrates() const
std::string fDBfileName
Definition THaCrateMap.h:86
void print(std::ostream &os=std::cout) const
UInt_t getHeader(UInt_t crate, UInt_t slot) const
Int_t loadConfig(std::string &line, std::string &cfgstr)
std::vector< UInt_t > used_crates
UInt_t getScalerCrate(UInt_t word) const
bool isFastBus(UInt_t crate) const
UInt_t getTSROC() const
Int_t ParseCrateInfo(const std::string &line, UInt_t &crate)
bool isBankStructure(UInt_t crate) const
const char * GetName() const
Definition THaCrateMap.h:80
UInt_t getNdata(UInt_t crate, UInt_t slot) const
bool isAllBanks(UInt_t crate) const
bool slotClear(UInt_t crate, UInt_t slot) const
bool isVme(UInt_t crate) const
Int_t resetCrate(UInt_t crate)
bool crateUsed(UInt_t crate) const
Int_t setModel(UInt_t crate, UInt_t slot, Int_t mod, UInt_t nchan=MAXCHAN, UInt_t ndata=MAXDATA)
bool isCamac(UInt_t crate) const
int init(const std::string &the_map)
UInt_t getMinSlot(UInt_t crate) const
static const Int_t CM_ERR
Definition THaCrateMap.h:76
static Int_t readFile(FILE *fi, std::string &text)
static const UInt_t DEFAULT_TSROC
Definition THaCrateMap.h:78
UInt_t getMaxSlot(UInt_t crate) const
virtual ~THaCrateMap()=default
Int_t SetModelSize(UInt_t crate, UInt_t slot, UInt_t model)
static const Int_t CM_OK
Definition THaCrateMap.h:75
void setUnused(UInt_t crate, UInt_t slot)
const char * getConfigStr(UInt_t crate, UInt_t slot) const
Int_t getModel(UInt_t crate, UInt_t slot) const
const char * getScalerLoc(UInt_t crate) const
std::vector< CrateInfo_t > crdat
bool isScalerCrate(UInt_t crate) const
Int_t setCrateType(UInt_t crate, const char *stype)
UInt_t getMask(UInt_t crate, UInt_t slot) const
Int_t getBank(UInt_t crate, UInt_t slot) const
unsigned long long ULong64_t
TLine * line