Public Types | Public Member Functions | Private Attributes | List of all members
IcebergOnlineChannel Class Reference

#include <IcebergOnlineChannel.h>

Inheritance diagram for IcebergOnlineChannel:
IndexMapTool

Public Types

using Name = std::string
 
- Public Types inherited from IndexMapTool
using Index = unsigned int
 

Public Member Functions

 IcebergOnlineChannel (const fhicl::ParameterSet &ps)
 
Index get (Index chanOff) const override
 
- Public Member Functions inherited from IndexMapTool
virtual ~IndexMapTool ()=default
 

Private Attributes

Index m_LogLevel
 
Name m_Ordering
 
bool m_orderByWib
 
bool m_orderByConnector
 
bool m_orderByFemb
 

Additional Inherited Members

- Static Public Member Functions inherited from IndexMapTool
static Index badIndex ()
 

Detailed Description

Definition at line 48 of file IcebergOnlineChannel.h.

Member Typedef Documentation

Definition at line 52 of file IcebergOnlineChannel.h.

Constructor & Destructor Documentation

IcebergOnlineChannel::IcebergOnlineChannel ( const fhicl::ParameterSet ps)

Definition at line 15 of file IcebergOnlineChannel_tool.cc.

16 : m_LogLevel(pset.get<Index>("LogLevel")),
17  m_Ordering(pset.get<Name>("Ordering")),
18  m_orderByWib(m_Ordering == "WIB"),
19  m_orderByConnector(m_Ordering == "connector"),
20  m_orderByFemb(m_Ordering == "FEMB") {
21  const string myname = "IcebergOnlineChannel::ctor: ";
22  cout << myname << " LogLevel: " << m_LogLevel << endl;
23  cout << myname << " Ordering: " << m_Ordering << endl;
25  cout << myname << "ERROR: Invalid ordering: " << m_Ordering << endl;
26  }
27 }
ChannelGroupService::Name Name
unsigned int Index
QTextStream & endl(QTextStream &s)

Member Function Documentation

Index IcebergOnlineChannel::get ( Index  chanOff) const
overridevirtual

Implements IndexMapTool.

Definition at line 31 of file IcebergOnlineChannel_tool.cc.

31  {
32  const string myname = "IcebergOnlineChannel::get: ";
33  if ( chanOff >= 1280 ) {
34  if ( m_LogLevel > 1 ) cout << myname << "Invalid offline channel: " << chanOff << endl;
35  return badIndex();
36  }
38  // Fetch APA index.
39  Index iapa = pms->APAFromOfflineChannel(chanOff);
40  if ( iapa > 1 ) {
41  if ( m_LogLevel > 1 ) cout << myname << "Invalid APA index: " << iapa << endl;
42  return badIndex();
43  }
44  Index kapa = iapa;
45  // Fetch WIB index.
46  Index iwib = pms->WIBFromOfflineChannel(chanOff);
47  if ( iwib > 4 ) {
48  if ( m_LogLevel > 1 ) cout << myname << "Invalid WIB index: " << iwib << endl;
49  return badIndex();
50  }
51  Index kwib = iwib;
52  // Fetch connector index.
53  Index icon = pms->FEMBFromOfflineChannel(chanOff);
54  if ( icon < 1 || icon > 4 ) {
55  if ( m_LogLevel > 1 ) cout << myname << "Invalid connector index: " << icon << endl;
56  return badIndex();
57  }
58  Index kcon = icon - 1;
59  // Fetch FEMB channel.
60  Index ichf = pms->FEMBChannelFromOfflineChannel(chanOff);
61  if ( ichf > 127 ) {
62  if ( m_LogLevel > 1 ) cout << myname << "Invalid FEMB channel index: " << ichf << endl;
63  return badIndex();
64  }
65  Index kchf = ichf;
66  // Evauate online index.
67  Index chanOn = 0;
68  Index kfmb = 99;
69  if ( m_orderByWib ) {
70  cout << myname << "WIB ordering is not yest supported." << endl;
71  return badIndex();
72  } else if ( m_orderByConnector ) {
73  cout << myname << "Connector ordering is not yest supported." << endl;
74  } else if ( m_orderByFemb ) {
75  // FEMB index mapping.
76  Index ifmb = 99;
77  if ( chanOff < 200 ) {
78  ifmb = ( 199-chanOff)/40 + 0;
79  } else if ( chanOff < 400 ) {
80  ifmb = ( 399-chanOff)/40 + 5;
81  } else if ( chanOff < 800 ) {
82  ifmb = (chanOff- 400)/40 + 0;
83  } else if ( chanOff < 1040 ) {
84  ifmb = (chanOff- 800)/48 + 0;
85  } else if ( chanOff < 1280 ) {
86  ifmb = (1279-chanOff)/48 + 5;
87  } else {
88  cout << "Invalid offline channel: : " << chanOff << endl;
89  return badIndex();
90  }
91  kfmb = ifmb + 1;
92  chanOn = 1280*kapa + 128*(ifmb) + kchf;
93  }
94  if ( m_LogLevel >= 4 ) {
95  cout << myname << "ChanOff --> (kapa kwib kcon kchf) --> chanON: "
96  << chanOff << " --> (" << kapa << " " << kwib << " " << kcon << " " << kchf
97  << ") --> " << chanOn
98  << " --> " << 100*(kapa+1) + kfmb << "-" << kchf << endl;
99  }
100  return chanOn;
101 }
unsigned int Index
unsigned int APAFromOfflineChannel(unsigned int offlineChannel) const
Returns APA/crate.
static Index badIndex()
Definition: IndexMapTool.h:18
unsigned int FEMBChannelFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB channel.
unsigned int WIBFromOfflineChannel(unsigned int offlineChannel) const
Returns WIB/slot.
unsigned int FEMBFromOfflineChannel(unsigned int offlineChannel) const
Returns FEMB/fiber.
QTextStream & endl(QTextStream &s)

Member Data Documentation

Index IcebergOnlineChannel::m_LogLevel
private

Definition at line 61 of file IcebergOnlineChannel.h.

bool IcebergOnlineChannel::m_orderByConnector
private

Definition at line 66 of file IcebergOnlineChannel.h.

bool IcebergOnlineChannel::m_orderByFemb
private

Definition at line 67 of file IcebergOnlineChannel.h.

bool IcebergOnlineChannel::m_orderByWib
private

Definition at line 65 of file IcebergOnlineChannel.h.

Name IcebergOnlineChannel::m_Ordering
private

Definition at line 62 of file IcebergOnlineChannel.h.


The documentation for this class was generated from the following files: