51 if(
m_done)
return StatusCode::SUCCESS;
55 const EventContext& ctx = Gaudi::Hive::currentContext();
64 outfit->Add(s.c_str());
73 Int_t FT=0, slot=0, channel=0;
76 Float_t ShapeDer[2000];
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);
90 outfit->SetBranchAddress(
"nSamples", &nsamples);
91 outfit->SetBranchAddress(
"Gain", &gain);
92 outfit->SetBranchAddress(
"Shape", Shape);
93 outfit->SetBranchAddress(
"ShapeDer", ShapeDer);
95 Float_t timeBinWidth=-1, prevTime=-1, timeOff=-1;
99 std::unique_ptr<LArShapeComplete> larShapeComplete;
100 std::unique_ptr<LArShape32MC> larShapeMC;
103 larShapeComplete = std::make_unique<LArShapeComplete>();
105 ATH_CHECK( larShapeComplete->initialize() );
107 larShapeMC = std::make_unique<LArShape32MC>();
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;
119 Long64_t nentries = outfit->GetEntries();
120 for ( Long64_t iev = 0; iev < nentries; ++iev )
122 outfit->GetEvent(iev);
123 ATH_MSG_INFO (
" Chan " << std::hex << channelId <<
" det. "<< det << std::dec );
136 if(FT != onlineHelper->
feedthrough(
id) || slot != onlineHelper->
slot(
id) || channel != onlineHelper->
channel(
id)) {
154 if ( nsamples >= 2000 ) {
155 ATH_MSG_ERROR (
" Too many points specified vs the expected content of the ntuple ! " );
161 if(timeBinWidth < 0) {
166 if(abs(phase-prevPhase) == 1) {
167 timeBinWidth=std::fabs(phaseTime - prevTime);
172 if(timeOff < 0) timeOff=timeOffset;
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.;}
182 shapemc.resize(nsamples);
183 shape_dermc.resize(nsamples);
184 for(
int i=0;i<nsamples; ++i) {shapemc[i]=0.; shape_dermc[i]=0.;}
186 unsigned int skipped = 0;
187 unsigned int limit = nsamples;
189 for (
unsigned int i = 0; i < limit; i++ ) {
203 if (
id != mcsym->ZPhiSymOnl(
id) ) {
207 ATH_MSG_INFO(
"Storing shape with length: " << shapemc.size() );
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] );
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);
235 return StatusCode::SUCCESS;