CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EcalTBReadout.cc
Go to the documentation of this file.
1 #include <algorithm>
2 
7 
8 EcalTBReadout::EcalTBReadout(const std::string theEcalTBInfoLabel)
9 : ecalTBInfoLabel_(theEcalTBInfoLabel) {
10 
11  theTargetCrystal_ = -1;
12  theTTlist_.reserve(1);
13 
14 }
15 
16 void EcalTBReadout::findTTlist(const int & crysId, const EcalTrigTowerConstituentsMap& etmap) {
17 
18  // search for the TT involved in the NCRYMATRIX x NCRYMATRIX
19  // around the target crystal if a new target, otherwise use
20  // the list already filled
21 
22  if ( crysId == theTargetCrystal_ ) { return; }
23 
24  theTTlist_.clear();
25 
29 
30  EBDetId theTargetId;
31  std::vector<DetId>::const_iterator idItr = theDetIds->begin();
32  unsigned int ncount = 0;
33  bool found = false;
34 
35  while ( (ncount < theDetIds->size()) && !found )
36  {
37  EBDetId thisEBdetid(idItr->rawId());
38  if (thisEBdetid.ic() == crysId) {
39  theTargetId = thisEBdetid;
40  found = true;
41  }
42  ++idItr;
43  ++ncount;
44  }
45  if ( !found ) {
46  throw cms::Exception("ObjectNotFound", "Ecal TB target crystal not found in geometry");
47  return;
48  }
49  theTargetCrystal_ = theTargetId.ic();
50 
53 
54  int myEta = theTargetId.ieta();
55  int myPhi = theTargetId.iphi();
56 
57 
58  for ( int icrysEta = (myEta-(NCRYMATRIX-1)/2) ; icrysEta <= (myEta+(NCRYMATRIX-1)/2) ; ++icrysEta ) {
59  for ( int icrysPhi = (myPhi-(NCRYMATRIX-1)/2) ; icrysPhi <= (myPhi+(NCRYMATRIX-1)/2) ; ++icrysPhi ) {
60 
62 
63  EBDetId thisEBdetid;
64 
65  idItr = theDetIds->begin();
66  ncount = 0;
67  found = false;
68 
69  while ( (ncount < theDetIds->size()) && !found )
70  {
71  EBDetId myEBdetid(idItr->rawId());
72  if ( (myEBdetid.ieta() == icrysEta) && (myEBdetid.iphi() == icrysPhi) ) {
73  thisEBdetid = myEBdetid;
74  found = true;
75  }
76  ++idItr;
77  ++ncount;
78  }
79 
80  if ( found ) {
81 
82  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(thisEBdetid);
83 
84  LogDebug("EcalDigi") << "Crystal to be readout: sequential id = " << thisEBdetid.ic() << " eta = " << icrysEta << " phi = " << icrysPhi << " from TT = " << thisTTdetId;
85 
86  if ( theTTlist_.size() == 0 || ( theTTlist_.size() == 1 && theTTlist_[0] != thisTTdetId )) {
87  theTTlist_.push_back(thisTTdetId);
88  }
89  else {
90  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
91  if ( theTTlist_.size() > 1 && ttFound == theTTlist_.end() && *(theTTlist_.end()) != thisTTdetId ) {
92  theTTlist_.push_back(thisTTdetId);
93  }
94  }
95  }
96 
97  }
98  }
99 
100  edm::LogInfo("EcalDigi") << " TT to be read: ";
101  for ( unsigned int i = 0 ; i < theTTlist_.size() ; ++i ) {
102  edm::LogInfo("EcalDigi") << " TT " << i << " " << theTTlist_[i];
103  }
104 
105 }
106 
108 
109  /*
110  for(EBDigiCollection::const_iterator digiItr = input.begin();
111  digiItr != input.end(); ++digiItr)
112  {
113  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(digiItr->id());
114  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
115  if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) {
116  output.push_back(*digiItr);
117  }
118  }
119  edm::LogInfo("EcalDigi") << "Read EB Digis: " << output.size();
120  */
121 
122  for (unsigned int digis=0; digis<input.size(); ++digis){
123 
124  EBDataFrame ebdf = input[digis];
125 
126  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(ebdf.id());
127  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
128 
129  if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) {
130  output.push_back( ebdf.id() ) ;
131  EBDataFrame ebdf2( output.back() );
132  std::copy( ebdf.frame().begin(),
133  ebdf.frame().end(),
134  ebdf2.frame().begin() );
135  }
136  }
137 }
138 
139 void
142  const EcalTrigTowerConstituentsMap& etmap)
143 {
144  for (unsigned int digis=0; digis<input.size(); ++digis)
145  {
146  EEDataFrame eedf ( input[digis] ) ;
147 
148  EcalTrigTowerDetId thisTTdetId ( etmap.towerOf( eedf.id() ) ) ;
149 
150  std::vector<EcalTrigTowerDetId>::iterator ttFound
151  ( find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId ) ) ;
152 
153  if( ( ttFound != theTTlist_.end() ) ||
154  *(theTTlist_.end()) == thisTTdetId )
155  {
156  output.push_back( eedf.id() ) ;
157  EEDataFrame eedf2( output.back() ) ;
158  std::copy( eedf.frame().begin(),
159  eedf.frame().end(),
160  eedf2.frame().begin() );
161  }
162  }
163 }
164 
166 
167  // TB readout
168  // step 1: get the target crystal index
169 
170  edm::Handle<PEcalTBInfo> theEcalTBInfo;
171  event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);
172 
173  int crysId = theEcalTBInfo->nCrystal();
174 
175  // step 2: update (if needed) the TT list to be read
176 
177  findTTlist(crysId, theTTmap);
178 
179  // step 3: perform the readout
180 
181  readOut(input, output, theTTmap);
182 
183 }
184 
185 
187 
188  // TB readout
189  // step 1: get the target crystal index
190 
191  edm::Handle<PEcalTBInfo> theEcalTBInfo;
192  event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);
193 
194  int crysId = theEcalTBInfo->nCrystal();
195 
196  // step 2: update (if needed) the TT list to be read
197 
198  findTTlist(crysId, theTTmap);
199 
200  // step 3: perform the readout
201 
202  readOut(input, output, theTTmap);
203 
204 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
key_type id() const
Definition: EBDataFrame.h:32
std::vector< EcalTrigTowerDetId > theTTlist_
Definition: EcalTBReadout.h:52
static const int NCRYMATRIX
Definition: EcalTBReadout.h:54
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
EcalTrigTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
iterator begin()
Definition: DataFrame.h:47
void performReadout(edm::Event &event, const EcalTrigTowerConstituentsMap &theTTmap, EBDigiCollection &input, EBDigiCollection &output)
master function to be called once per event
int iphi() const
get the crystal iphi
Definition: EBDetId.h:46
EcalTBReadout(const std::string theEcalTBInfoLabel)
Definition: EcalTBReadout.cc:8
int ieta() const
get the crystal ieta
Definition: EBDetId.h:44
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int ic() const
get ECAL/crystal number inside SM
Definition: EBDetId.cc:94
key_type id() const
Definition: EEDataFrame.h:29
tuple input
Definition: collect_tpl.py:10
iterator end()
Definition: DataFrame.h:50
edm::DataFrame const & frame() const
Definition: EcalDataFrame.h:46
void push_back(id_type iid, data_type const *idata)
const std::vector< DetId > * theDetIds
Definition: EcalTBReadout.h:56
void findTTlist(const int &crysId, const EcalTrigTowerConstituentsMap &etmap)
search for the TT to be read
std::string ecalTBInfoLabel_
Definition: EcalTBReadout.h:58
void readOut(EBDigiCollection &input, EBDigiCollection &output, const EcalTrigTowerConstituentsMap &etmap)
read only the digis from the selected TT
tuple size
Write out results.