ATLAS Offline Software
Loading...
Searching...
No Matches
LArHitFloatContainerCnv_p2.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
3*/
4
7#include "Identifier/Identifier.h"
8
11
13
14// LArHitFloatContainerCnv_p2, used for T/P separation
15// author Ilija Vukotic
16
19#include "GaudiKernel/ServiceHandle.h"
20#include <map>
21#include <stdexcept>
22
23
25 : m_cellIdHelper(nullptr)
26{
27 ServiceHandle<StoreGateSvc> detStore ("DetectorStore", "LArHitFloatContainerCnv_p2");
28 if (detStore->retrieve (m_cellIdHelper, "CaloCell_ID").isFailure()) {
29 throw std::runtime_error ("LArHitFloatContainerCnv_p2: Can't get CaloCell_ID");
30 }
31}
32
33
35{ //static int ev=0;
36
37 size_t size = transCont->size();
38 log << MSG::DEBUG << " *** Writing LArHitContainer_p2 of size:"<<size<<endmsg;
39
40 persCont->m_channelHash.reserve(size);
41 std::vector<float> tempE; tempE.reserve(size);
42 std::vector<float> tempT; tempT.reserve(size);
43
44 LArHitFloatContainer::const_iterator it = transCont->begin();
45
46 std::multimap <unsigned int, unsigned int> map_hashPositions;// first hash ; second its position in container
47
48 for (unsigned int w=0;w<size;++w){
49 IdentifierHash hashId = m_cellIdHelper->calo_cell_hash((*it).cellID());
50 map_hashPositions.insert(std::pair<unsigned int, int>((unsigned int)hashId, w));
51// if (!ev) std::cout<<hashId<<"\t"<<((*it)->cellID())<<std::endl;
52 ++it;
53 }
54
55 std::multimap<unsigned int, unsigned int>::const_iterator iter;
56 unsigned int old=0;
57// int count=0;
58 for (iter=map_hashPositions.begin(); iter != map_hashPositions.end(); ++iter) {
59 //cout <<"container position:"<< iter->second << " \t hash:" << iter->first << endl;
60 unsigned int pHash=(iter->first)-old; // to store as a difference
61 old=iter->first;
62 unsigned int pos=iter->second;
63 persCont->m_channelHash.push_back(pHash);
64 tempE.push_back( (transCont->at(pos)).energy() );
65 tempT.push_back( (transCont->at(pos)).time() );
66// if (!ev) std::cout<<"Writing Hash: "<<iter->first<<"\t E: "<< (float) (transCont->At(pos))->energy()<<"\t T: "<< (float) (transCont->At(pos))->time()<<std::endl;
67// count++;
68 }
69// std::cout<<"ILIJA : "<<count<<std::endl;
70
71 Compressor A; A.setNrBits(18);
72 A.reduce(tempE,persCont->m_energy); // packs energy
73 Compressor B;
74 B.reduceToUS(tempT, persCont->m_time);
75 persCont->m_name = "" ; //stores name
76
77// ev++;
78}
79
80
81
83{
84// static int dog=0;
85 size_t cells=persCont->m_channelHash.size();
86 log << MSG::DEBUG << " *** Reading LArHitContainer of size: "<<cells<<endmsg;
87 transCont->clear();
88 transCont->reserve(cells);
89
91 std::vector<float> tempE; tempE.reserve(cells);
92 std::vector<float> tempT; tempT.reserve(cells);
93
94 A.expandFromUStoFloat(persCont->m_time,tempT);
95 A.expandToFloat(persCont->m_energy,tempE);
96 unsigned int sum=0;
97 for (unsigned int i=0;i<cells;++i){
98 sum+= persCont->m_channelHash[i];
99 LArHitFloat hit(m_cellIdHelper->cell_id(sum),tempE[i],tempT[i]);
100// if(!dog) std::cout<<"Reading hash: "<< sum <<"\t E: "<< (double)tempE[i]<<"\t T: "<<(tempT[i]) <<std::endl;
101 transCont->push_back(hit);
102 }
103// dog++;
104}
105
#define endmsg
This is a "hash" representation of an Identifier.
Persistent represenation of a LArHitContainer,.
std::vector< unsigned int > m_channelHash
std::vector< unsigned int > m_energy
std::vector< unsigned short > m_time
virtual void persToTrans(const LArHitContainer_p2 *persColl, LArHitFloatContainer *transColl, MsgStream &log) override
virtual void transToPers(const LArHitFloatContainer *transColl, LArHitContainer_p2 *persColl, MsgStream &log) override
Container for LArHitFloat.
Class to store hit energy and time in LAr cell from G4 simulation.
Definition LArHitFloat.h:18
hold the test vectors and ease the comparison