50{
51 if(
m_done)
return StatusCode::SUCCESS;
52
54
55 const EventContext& ctx = Gaudi::Hive::currentContext();
56 SG::ReadCondHandle<LArMCSym> mcsym (
m_mcSymKey, ctx);
57
58
59 const LArOnlineID* onlineHelper = nullptr;
61
64 outfit->Add(
s.c_str());
65 }
66
67
70 Float_t phaseTime=0;
71 Float_t timeOffset=0;
74
75 Float_t Shape[2000];
76 Float_t ShapeDer[2000];
79
80 outfit->SetBranchAddress("channelId", &channelId);
81 outfit->SetBranchAddress("FT", &FT);
82 outfit->SetBranchAddress("slot", &slot);
83 outfit->SetBranchAddress("channel", &channel);
84 outfit->SetBranchAddress("detector", &det);
86 outfit->SetBranchAddress("PhaseTime", &phaseTime);
87 outfit->SetBranchAddress("Phase", &phase);
88 outfit->SetBranchAddress("timeOffset", &timeOffset);
89 }
90 outfit->SetBranchAddress("nSamples", &nsamples);
91 outfit->SetBranchAddress("Gain", &gain);
92 outfit->SetBranchAddress("Shape", Shape);
93 outfit->SetBranchAddress("ShapeDer", ShapeDer);
94
95 Float_t timeBinWidth=-1, prevTime=-1, timeOff=-1;
96 Int_t prevPhase=-1;
97
98
99 std::unique_ptr<LArShapeComplete> larShapeComplete;
100 std::unique_ptr<LArShape32MC> larShapeMC;
101
103 larShapeComplete = std::make_unique<LArShapeComplete>();
105 ATH_CHECK( larShapeComplete->initialize() );
106 } else {
107 larShapeMC = std::make_unique<LArShape32MC>();
110 }
111
112 std::vector<float> shapemc;
113 std::vector<float> shape_dermc;
114 typedef std::vector<std::vector<float> > wave2d;
115 std::map<std::pair<unsigned int,int>, wave2d> shape;
116 std::map<std::pair<unsigned int,int>, wave2d> shape_der;
117 unsigned int hwid;
118
119 Long64_t
nentries = outfit->GetEntries();
120 for ( Long64_t iev = 0; iev <
nentries; ++iev )
121 {
122 outfit->GetEvent(iev);
123 ATH_MSG_INFO (
" Chan " << std::hex << channelId <<
" det. "<< det << std::dec );
124
126
127 HWIdentifier
id(hwid);
128
129
130
131
132
133
134
135
136 if(FT != onlineHelper->
feedthrough(
id) || slot != onlineHelper->
slot(
id) || channel != onlineHelper->
channel(
id)) {
141
142
143
144
145
146
147 continue;
148
149
150
151 }
152
153
154 if ( nsamples >= 2000 ) {
155 ATH_MSG_ERROR (
" Too many points specified vs the expected content of the ntuple ! " );
157 continue;
158 } else {
160 }
161 if(timeBinWidth < 0) {
162 if(prevTime < 0) {
163 prevTime=phaseTime;
165 } else {
166 if(abs(phase-prevPhase) == 1) {
167 timeBinWidth=std::fabs(phaseTime - prevTime);
168 }
169 }
170 }
171
172 if(timeOff < 0) timeOff=timeOffset;
173
175 if(shape[std::make_pair(hwid,gain)].
empty()) shape[std::make_pair(hwid,gain)].reserve(50);
176 if(shape_der[std::make_pair(hwid,gain)].
empty()) shape_der[std::make_pair(hwid,gain)].reserve(50);
177 shape[std::make_pair(hwid,gain)][
phase].reserve(nsamples);
178 shape_der[std::make_pair(hwid,gain)][
phase].reserve(nsamples);
179 for(
int i=0;
i<
nsamples; ++
i) {shape[std::make_pair(hwid,gain)][
phase][
i]=0.;
180 shape_der[std::make_pair(hwid,gain)][
phase][
i]=0.;}
181 } else {
182 shapemc.resize(nsamples);
183 shape_dermc.resize(nsamples);
184 for(
int i=0;
i<
nsamples; ++
i) {shapemc[
i]=0.; shape_dermc[
i]=0.;}
185 }
186 unsigned int skipped = 0;
189 for (
unsigned int i = 0;
i <
limit;
i++ ) {
194
195 } else {
198 }
199 } else skipped++;
200 }
201
203 if (id != mcsym->ZPhiSymOnl(id) ) {
205 } else {
206
207 ATH_MSG_INFO(
"Storing shape with length: " << shapemc.size() );
208
209
210
211
212 larShapeMC->set(id, gain, shapemc, shape_dermc);
213 ATH_MSG_INFO( larShapeMC->Shape(
id,gain).size() <<
" " << larShapeMC->ShapeDer(
id,gain).size() );
214 ATH_MSG_INFO(
"Shape[2] =" << larShapeMC->Shape(
id,gain)[2] <<
"shapemc[2] =" << shapemc[2] );
215 }
216 }
217
218 }
219
221 std::map<std::pair<unsigned int,int>, wave2d>::iterator ibeg = shape.begin();
222 std::map<std::pair<unsigned int,int>, wave2d>::iterator iend = shape.end();
223 for(;ibeg != iend; ++ibeg) {
224 larShapeComplete->set(HWIdentifier((ibeg->first).first),(ibeg->first).second,
225 ibeg->second, shape_der[std::make_pair((ibeg->first).first, (ibeg->first).second)],
226 timeOff,timeBinWidth);
227 }
228 }
229
232 } else {
234 }
235 return StatusCode::SUCCESS;
236}
static const Attributes_t empty
const ServiceHandle< StoreGateSvc > & detStore() const
int feedthrough(const HWIdentifier id) const
Return the feedthrough of a hardware cell identifier : feedthrough = [0,31] Barrel - A/C side or H/...
int slot(const HWIdentifier id) const
Return the slot number of a hardware cell identifier: slot = [1,15] Slot-ID in top part of the crat...
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
retrieve(aClass, aKey=None)