StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StMuEmcTowerData.cxx
1 //###########################################################
2 // EMC Tower Data
3 // Author: Marco van Leeuwen
4 // initial version 09/2004
5 //
6 //###########################################################
7 #include <stdlib.h>
8 #include <string.h>
9 
10 #include "StMuEmcTowerData.h"
11 #include "Stiostream.h"
12 #include "StMuEmcUtil.h"
13 static StMuEmcUtil util; // to ease decoding of EEMC hits
14 ClassImp(StMuEmcTowerData)
15 
17  : TObject()
18 {
19  clearBemc();
20  clearEemc();
21 }
22 
23 StMuEmcTowerData::StMuEmcTowerData(const StMuEmcTowerData& o)
24  : TObject(o)
25 {
26  memcpy(mTowerADC,o.mTowerADC,sizeof(mTowerADC));
27  memcpy(mEndcapTowerADC,o.mEndcapTowerADC,sizeof(mEndcapTowerADC));
28  memcpy(mBTowCrateFlags,o.mBTowCrateFlags,sizeof(mBTowCrateFlags));
29  memcpy(mBSmdCrateFlags,o.mBSmdCrateFlags,sizeof(mBSmdCrateFlags));
30  memcpy(mBPrsCrateFlags,o.mBPrsCrateFlags,sizeof(mBPrsCrateFlags));
31  memcpy(mETowCrateFlags,o.mETowCrateFlags,sizeof(mETowCrateFlags));
32  memcpy(mESmdCrateFlags,o.mESmdCrateFlags,sizeof(mESmdCrateFlags));
33  memcpy(mEPrsCrateFlags,o.mEPrsCrateFlags,sizeof(mEPrsCrateFlags));
34 }
35 
36 StMuEmcTowerData::~StMuEmcTowerData()
37 {
38 }
39 
40 void StMuEmcTowerData::clearBemc() {
41  memset(mTowerADC,0,sizeof(mTowerADC));
42  memset(mBTowCrateFlags,0,sizeof(mBTowCrateFlags));
43  memset(mBSmdCrateFlags,0,sizeof(mBSmdCrateFlags));
44  memset(mBPrsCrateFlags,0,sizeof(mBPrsCrateFlags));
45 }
46 
47 void StMuEmcTowerData::clearEemc() {
48  memset(mEndcapTowerADC,0,sizeof(mEndcapTowerADC));
49  memset(mETowCrateFlags,0,sizeof(mETowCrateFlags));
50  memset(mESmdCrateFlags,0,sizeof(mESmdCrateFlags));
51  memset(mEPrsCrateFlags,0,sizeof(mEPrsCrateFlags));
52 }
53 
54 int StMuEmcTowerData::towerADC(int id, int detector) const
55 {
56  if(detector == bemc)
57  {
58  if(id<1 || id>nEmcTowers) return 0;
59  return (int)mTowerADC[id-1];
60  }
61  if(detector == eemc)
62  {
63  if(id<1 || id>nEndcapTowers) return 0;
64  return (int)mEndcapTowerADC[id-1];
65  }
66  return 0;
67 }
68 
69 StEmcCrateStatus StMuEmcTowerData::crateStatus(int crate, int detector) const {
70  switch (detector) {
71  case bemc:
72  if (crate>0 && crate<=nBTowCrates)
73  return (StEmcCrateStatus) mBTowCrateFlags[crate-1];
74  break;
75 
76  case bsmde:
77  case bsmdp:
78  if (crate>0 && crate<=nBSmdCrates)
79  return (StEmcCrateStatus) mBSmdCrateFlags[crate-1];
80  break;
81 
82  case bprs:
83  if (crate>0 && crate<=nBPrsCrates)
84  return (StEmcCrateStatus) mBPrsCrateFlags[crate-1];
85  break;
86 
87  case eemc:
88  if (crate>0 && crate<=nETowCrates)
89  return (StEmcCrateStatus) mETowCrateFlags[crate-1];
90  break;
91 
92  case esmdu:
93  case esmdv:
94  if (crate>0 && crate<=nESmdCrates)
95  return (StEmcCrateStatus) mESmdCrateFlags[crate-1];
96  break;
97 
98  case eprs:
99  if (crate>0 && crate<=nEPrsCrates)
100  return (StEmcCrateStatus) mEPrsCrateFlags[crate-1];
101  break;
102  }
103  return crateUnknown;
104 }
105 
106 void StMuEmcTowerData::setTowerADC(int id,int adc, int detector)
107 {
108  if(detector == bemc)
109  {
110  if(id<1 || id>nEmcTowers) return;
111  mTowerADC[id-1]=adc;
112  }
113  if(detector == eemc)
114  {
115  if(id<1 || id>nEndcapTowers) return;
116  mEndcapTowerADC[id-1]=adc;
117  }
118  return;
119 }
120 
121 void StMuEmcTowerData::setCrateStatus(StEmcCrateStatus status, int crate, int detector) {
122  switch (detector) {
123  case bemc:
124  if (crate>0 && crate<=nBTowCrates)
125  mBTowCrateFlags[crate-1] = (unsigned char) status;
126  break;
127 
128  case bsmde:
129  case bsmdp:
130  if (crate>0 && crate<=nBSmdCrates)
131  mBSmdCrateFlags[crate-1] = (unsigned char) status;
132  break;
133 
134  case bprs:
135  if (crate>0 && crate<=nBPrsCrates)
136  mBPrsCrateFlags[crate-1] = (unsigned char) status;
137  break;
138 
139  case eemc:
140  if (crate>0 && crate<=nETowCrates)
141  mETowCrateFlags[crate-1] = (unsigned char) status;
142  break;
143 
144  case esmdu:
145  case esmdv:
146  if (crate>0 && crate<=nESmdCrates)
147  mESmdCrateFlags[crate-1] = (unsigned char) status;
148  break;
149 
150  case eprs:
151  if (crate>0 && crate<=nEPrsCrates)
152  mEPrsCrateFlags[crate-1] = (unsigned char) status;
153  break;
154  }
155 }
156 
157 
158 void StMuEmcTowerData::getEndcapTowerADC(int ihit1, int &adc, int &sec, int &sub, int & eta) const
159 {
160  int ihit=ihit1+1; // it was not my idea to abort on index=0, JB
161  adc=towerADC(ihit,eemc);
162  if(! util.getEndcapBin(eemc,ihit,sec,eta,sub)) return ;
163  adc=sec=sub=eta=-1;
164  return;
165 }
166 
167