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 #include <iostream>
3 
8 
9 EcalTBReadout::EcalTBReadout(const std::string theEcalTBInfoLabel) :
10  ecalTBInfoLabel_(theEcalTBInfoLabel)
11 {
12  theTargetCrystal_ = -1 ;
13  theTTlist_.reserve(1) ;
14 }
15 
16 void
17 EcalTBReadout::findTTlist( const int& crysId,
18  const EcalTrigTowerConstituentsMap& etmap )
19 {
20 
21  // search for the TT involved in the NCRYMATRIX x NCRYMATRIX
22  // around the target crystal if a new target, otherwise use
23  // the list already filled
24 
25  if ( crysId == theTargetCrystal_ ) { return; }
26 
27  theTTlist_.clear();
28 
32 
33  EBDetId theTargetId;
34  std::vector<DetId>::const_iterator idItr = theDetIds->begin();
35  unsigned int ncount = 0;
36  bool found = false;
37 
38  while ( (ncount < theDetIds->size()) && !found )
39  {
40  EBDetId thisEBdetid(idItr->rawId());
41  if (thisEBdetid.ic() == crysId) {
42  theTargetId = thisEBdetid;
43  found = true;
44  }
45  ++idItr;
46  ++ncount;
47  }
48  if ( !found ) {
49  throw cms::Exception("ObjectNotFound", "Ecal TB target crystal not found in geometry");
50  return;
51  }
52  theTargetCrystal_ = theTargetId.ic();
53 
56 
57  int myEta = theTargetId.ieta();
58  int myPhi = theTargetId.iphi();
59 
60 
61  for ( int icrysEta = (myEta-(NCRYMATRIX-1)/2) ; icrysEta <= (myEta+(NCRYMATRIX-1)/2) ; ++icrysEta ) {
62  for ( int icrysPhi = (myPhi-(NCRYMATRIX-1)/2) ; icrysPhi <= (myPhi+(NCRYMATRIX-1)/2) ; ++icrysPhi ) {
63 
65 
66  EBDetId thisEBdetid;
67 
68  idItr = theDetIds->begin();
69  ncount = 0;
70  found = false;
71 
72  while ( (ncount < theDetIds->size()) && !found )
73  {
74  EBDetId myEBdetid(idItr->rawId());
75  if ( (myEBdetid.ieta() == icrysEta) && (myEBdetid.iphi() == icrysPhi) ) {
76  thisEBdetid = myEBdetid;
77  found = true;
78  }
79  ++idItr;
80  ++ncount;
81  }
82 
83  if ( found ) {
84 
85  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(thisEBdetid);
86 
87  LogDebug("EcalDigi") << "Crystal to be readout: sequential id = " << thisEBdetid.ic() << " eta = " << icrysEta << " phi = " << icrysPhi << " from TT = " << thisTTdetId;
88 
89  if ( theTTlist_.size() == 0 || ( theTTlist_.size() == 1 && theTTlist_[0] != thisTTdetId )) {
90  theTTlist_.push_back(thisTTdetId);
91  }
92  else {
93  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
94  if ( theTTlist_.size() > 1 && ttFound == theTTlist_.end() && *(theTTlist_.end()) != thisTTdetId ) {
95  theTTlist_.push_back(thisTTdetId);
96  }
97  }
98  }
99  }
100  }
101 
102  edm::LogInfo("EcalDigi") << " TT to be read: ";
103  for ( unsigned int i = 0 ; i < theTTlist_.size() ; ++i ) {
104  edm::LogInfo("EcalDigi") << " TT " << i << " " << theTTlist_[i];
105  }
106 }
107 
108 void
111  const EcalTrigTowerConstituentsMap& etmap )
112 {
113  /*
114  for(EBDigiCollection::const_iterator digiItr = input.begin();
115  digiItr != input.end(); ++digiItr)
116  {
117  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(digiItr->id());
118  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
119  if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) {
120  output.push_back(*digiItr);
121  }
122  }
123  edm::LogInfo("EcalDigi") << "Read EB Digis: " << output.size();
124  */
125 
126  std::cout<<"%%%%%%% In readOut(), size="<< input.size() <<std::endl ;
127 
128  for( unsigned int digis=0; digis<input.size(); ++digis )
129  {
130  EBDataFrame ebdf = input[digis];
131 
132  EcalTrigTowerDetId thisTTdetId=etmap.towerOf(ebdf.id());
133  std::vector<EcalTrigTowerDetId>::iterator ttFound = find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId);
134 
135  if ((ttFound != theTTlist_.end()) || *(theTTlist_.end()) == thisTTdetId) {
136  output.push_back( ebdf.id() ) ;
137  EBDataFrame ebdf2( output.back() );
138  std::copy( ebdf.frame().begin(),
139  ebdf.frame().end(),
140  ebdf2.frame().begin() );
141  }
142  }
143 }
144 
145 void
148  const EcalTrigTowerConstituentsMap& etmap )
149 {
150  for (unsigned int digis=0; digis<input.size(); ++digis)
151  {
152  EEDataFrame eedf ( input[digis] ) ;
153 
154  EcalTrigTowerDetId thisTTdetId ( etmap.towerOf( eedf.id() ) ) ;
155 
156  std::vector<EcalTrigTowerDetId>::iterator ttFound
157  ( find(theTTlist_.begin(), theTTlist_.end(), thisTTdetId ) ) ;
158 
159  if( ( ttFound != theTTlist_.end() ) ||
160  *(theTTlist_.end()) == thisTTdetId )
161  {
162  output.push_back( eedf.id() ) ;
163  EEDataFrame eedf2( output.back() ) ;
164  std::copy( eedf.frame().begin(),
165  eedf.frame().end(),
166  eedf2.frame().begin() );
167  }
168  }
169 }
170 
171 void
173  const EcalTrigTowerConstituentsMap& theTTmap ,
174  const EBDigiCollection& input ,
176 {
177  // TB readout
178  // step 1: get the target crystal index
179 
180  edm::Handle<PEcalTBInfo> theEcalTBInfo;
181  event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);
182 
183  int crysId = theEcalTBInfo->nCrystal();
184 
185  // step 2: update (if needed) the TT list to be read
186 
187  findTTlist(crysId, theTTmap);
188 
189  // step 3: perform the readout
190 
191  readOut( input, output, theTTmap ) ;
192 }
193 
194 void
196  const EcalTrigTowerConstituentsMap& theTTmap ,
197  const EEDigiCollection& input ,
199 {
200 
201  // TB readout
202  // step 1: get the target crystal index
203 
204  edm::Handle<PEcalTBInfo> theEcalTBInfo;
205  event.getByLabel(ecalTBInfoLabel_,theEcalTBInfo);
206 
207  int crysId = theEcalTBInfo->nCrystal();
208 
209  // step 2: update (if needed) the TT list to be read
210 
211  findTTlist(crysId, theTTmap);
212 
213  // step 3: perform the readout
214 
215  readOut( input, output, theTTmap) ;
216 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
key_type id() const
Definition: EBDataFrame.h:31
std::vector< EcalTrigTowerDetId > theTTlist_
Definition: EcalTBReadout.h:59
static const int NCRYMATRIX
Definition: EcalTBReadout.h:61
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:48
static std::string const input
Definition: EdmProvDump.cc:43
int iphi() const
get the crystal iphi
Definition: EBDetId.h:53
EcalTBReadout(const std::string theEcalTBInfoLabel)
Definition: EcalTBReadout.cc:9
void readOut(const EBDigiCollection &input, EBDigiCollection &output, const EcalTrigTowerConstituentsMap &etmap)
read only the digis from the selected TT
int ieta() const
get the crystal ieta
Definition: EBDetId.h:51
void performReadout(edm::Event &event, const EcalTrigTowerConstituentsMap &theTTmap, const EBDigiCollection &input, EBDigiCollection &output)
master function to be called once per event
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:46
key_type id() const
Definition: EEDataFrame.h:28
iterator end()
Definition: DataFrame.h:51
edm::DataFrame const & frame() const
Definition: EcalDataFrame.h:50
void push_back(id_type iid, data_type const *idata)
const std::vector< DetId > * theDetIds
Definition: EcalTBReadout.h:63
tuple cout
Definition: gather_cfg.py:121
void findTTlist(const int &crysId, const EcalTrigTowerConstituentsMap &etmap)
search for the TT to be read
std::string ecalTBInfoLabel_
Definition: EcalTBReadout.h:65
tuple size
Write out results.