CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
AlCaHOCalibProducer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Feb09 2009
4 // Move the initialisation of SteppingHelixPropagator from ::beginJob() to ::produce()
5 //
6 // Oct3 2008
7 // Difference in tag V00-02-45 with previous code
8 
9 // 1. One new object on data format, which was realised in
10 // CRUZET data analysis.
11 //2. Remove all histogram and cout in the code
12 //3. An upgrade in code, which increases the acceptance of
13 // muon near the edge (this also realised in CRUZET data).
14 // Difference in wrt V00-02-45
15 // 1. initialisation tmpHOCalib.htime = -1000;
16 // 2. By mistake HLT was commented out
17 
18 // Package: AlCaHOCalibProducer
19 // Class: AlCaHOCalibProducer
20 //
53 //
54 // Original Author: Gobinda Majumder
55 // Created: Fri Jul 6 17:17:21 CEST 2007
56 // $Id: AlCaHOCalibProducer.cc,v 1.25 2011/11/12 09:39:12 eulisse Exp $
57 //
58 //
59 
60 
61 // system include files
62 #include <memory>
63 
64 // user include files
67 
74 
79 
86 
92 
93 
96 
101 
102 //08/07/07 #include "CondTools/Hcal/interface/HcalDbPool.h"
103 //#include "CondFormats/HcalObjects/interface/HcalPedestals.h"
104 //#include "CondFormats/HcalObjects/interface/HcalPedestalWidths.h"
105 
106 
107 // #include "TrackingTools/GeomPropagators/interface/HelixArbitraryPlaneCrossing.h"
110 
113 
116 #include "CLHEP/Vector/LorentzVector.h"
117 
120 
125 //#include "TrackPropagation/SteppingHelixPropagator/interface/SteppingHelixStateInfo.h"
126 
129 
133 
134 
135 #include "TFile.h"
136 #include "TH1F.h"
137 #include "TH2F.h"
138 #include "TProfile.h"
139 #include "TTree.h"
140 /* C++ Headers */
141 #include <string>
142 
143 #include <iostream>
144 #include <fstream>
145 //
146 // class decleration
147 //
148 using namespace std;
149 using namespace edm;
150 using namespace reco;
151 
152 const int netabin= 16;
153 const int nphimx = 72;
154 const int netamx = 32;
155 const int nchnmx = 10;
156 const int ncidmx = 5;
157 
158 //GMA #ifdef DEBUG_OFFLINE_GM
159 const int nsigpk = 7;
160 const int nstrbn = 0;
161 const int ntrgp_gm = 11;
162 
163 
164 const int netahbmx = 60;
165 const int netahb3mx = 32;
166 
167 static const unsigned int nL1trg = 200;
168 
169 static const unsigned int nL1mx=140;
170 static const unsigned int nHLTmx=140;
171 //GMA #endif
172 
174  public:
175  explicit AlCaHOCalibProducer(const edm::ParameterSet&);
177 
181 
182 
183  private:
184  void findHOEtaPhi(int iphsect, int& ietaho, int& iphiho);
185  virtual void beginJob() ;
186  virtual void produce(edm::Event&, const edm::EventSetup&);
187  virtual void endJob() ;
188 
189  // ----------member data ---------------------------
190 
191  float xhor0; //x-position in ring 0
192  float yhor0; //y-position in ring 0
193  float xhor1; //x-position in ring 1
194  float yhor1; //y-position in ring 1
195  int iring; //Ring number -2,-1,0,1,2
196 
197  float localxhor0; //local x-distance from edege in ring 0
198  float localyhor0; //local y-distance from edege in ring 0
199  float localxhor1; //local x-distance from edege in ring 1
200  float localyhor1; //local y-distance from edege in ring 1
201 
202  float pedestal[netamx][nphimx][ncidmx];
203 
204  std::string digiLabel;
205 
206  bool debug;
207  std::string theRootFileName;
208 
209  //GMA #ifdef DEBUG_OFFLINE_GM
210 
211  TH1F* libhoped;
212  TH1F* libhoped1;
213 
214  TH1F* allhotime;
215  TH1F* hotime[ntrgp_gm+1];
216  TH1F* hopedtime;
217 
218  TProfile* hopedpr;
219  TH1F* hopedrms;
220  TH1F* hst_hopedrms;
221 
222  TProfile* hopeak[ntrgp_gm+1];
223  TProfile* horatio;
224 
225  TH1F* Nallhotime;
226  TH1F* Nhotime[ntrgp_gm+1];
227  TH1F* Nhopedtime;
228 
229  TH1F* allhb1;
230  TH1F* allhb2;
231  TH1F* allhb3;
232 
233  TH1F* Nallhb1;
234  TH1F* Nallhb2;
235  TH1F* Nallhb3;
236 
237  TProfile* hb1pedpr;
238  TH1F* hb1pedrms;
240 
241  TH1F* ho_occupency[5];
242 
243  bool m_hotime;
244  //GM #endif
245 
246  edm::InputTag muonTags_; // cosmicMuons or standAloneMuons
252 
253  bool m_digiInput; // digi (true) or rechit (false)
254  bool m_hbinfo;
256  int m_endTS;
257  double m_magscale;
258  double m_sigma;
259 
261  //#ifdef DEBUG_OFFLINE_GM
262  // int Nevents;
263  int Noccu;
264  // int Npass;
265  int nRuns;
266  //#endif
267 
268  int irunold;
269  // SteppingHelixPropagator* stepProp;
270  FreeTrajectoryState getFreeTrajectoryState( const reco::Track& tk, const MagneticField* field, int itag, bool dir);
271 
275 
278 
279  unsigned int Ntp; // # of HLT trigger paths (should be the same for all events!)
280  std::map<std::string, bool> fired;
281 
282 };
283 
284 //
285 // constants, enums and typedefs
286 //
287 
288 //
289 // static data member definitions
290 //
291 
292 //
293 // constructors and destructor
294 //
296  : muonTags_(iConfig.getUntrackedParameter<edm::InputTag>("muons"))
297 
298 {
299  //register your products
300 
301  theRootFileName = iConfig.getUntrackedParameter<string>("RootFileName","tmp.root");
302  m_digiInput = iConfig.getUntrackedParameter<bool>("digiInput", true);
303  m_hbinfo = iConfig.getUntrackedParameter<bool>("hbinfo", false);
304  m_startTS = iConfig.getUntrackedParameter<int>("firstTS", 4);
305 
306  m_hotime = iConfig.getUntrackedParameter<bool>("hotime", false);
307 
308  if(m_startTS<0) m_startTS=0;
309  m_endTS = iConfig.getUntrackedParameter<int>("lastTS", 7);
310  if (m_endTS < m_startTS) m_endTS = m_startTS + 3;
311  if (m_endTS >9) m_endTS=9;
312  m_magscale = iConfig.getUntrackedParameter<double>("m_scale", 4.0);
313  m_sigma = iConfig.getUntrackedParameter<double>("sigma", 1.0);
314 
315  hoLabel_ = iConfig.getParameter<edm::InputTag>("hoInput");
316  hbheLabel_ = iConfig.getParameter<edm::InputTag>("hbheInput");
317  hltLabel_ = iConfig.getParameter<edm::InputTag>("hltInput");
318  l1Label_ = iConfig.getParameter<edm::InputTag>("l1Input");
319  towerLabel_ = iConfig.getParameter<edm::InputTag>("towerInput");
320 
321  produces<HOCalibVariableCollection>("HOCalibVariableCollection").setBranchAlias("HOCalibVariableCollection");
322 
323 
324  if (m_hotime) {
326 
327  char title[200];
328  if ( m_digiInput) {
329  libhoped = fs->make<TH1F>("libhoped", "libhoped", ncidmx*netamx*nphimx, -0.5, ncidmx*netamx*nphimx-0.5);
330  libhoped1 = fs->make<TH1F>("libhoped1", "libhoped1", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
331  allhotime = fs->make<TH1F>("allhotime", "allhotime", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
332  for (int ij=0; ij<=ntrgp_gm; ij++) {
333  sprintf(title, "hotime_trgp_%i", ij+1);
334  hotime[ij] = fs->make<TH1F>(title, title, nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
335  sprintf(title, "hopeak_trgp_%i", ij+1);
336  hopeak[ij] = fs->make<TProfile>(title, title,netamx*nphimx, -0.5, netamx*nphimx-0.5);
337  }
338 
339  horatio = fs->make<TProfile>("horatio", "horatio",netamx*nphimx, -0.5, netamx*nphimx-0.5);
340  hopedtime = fs->make<TH1F>("hopedtime", "hopedtime", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
341 
342  Nallhotime = fs->make<TH1F>("Nallhotime", "Nallhotime", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
343  hopedpr = fs->make<TProfile>("hopedpr", "hopedpr", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
344  hopedrms = fs->make<TH1F>("hopedrms", "hopedrms", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
345  hst_hopedrms = fs->make<TH1F>("hst_hopedrms", "hst_hopedrms", 100, 0.0, 0.1);
346  for (int ij=0; ij<=ntrgp_gm; ij++) {
347  sprintf(title, "Nhotime_trgp_%i", ij+1);
348  Nhotime[ij] = fs->make<TH1F>(title, title, nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
349  }
350  Nhopedtime = fs->make<TH1F>("Nhopedtime", "Nhopedtime", nchnmx*netamx*nphimx, -0.5, nchnmx*netamx*nphimx-0.5);
351  allhb1 = fs->make<TH1F>("allhb1", "allhb1", nchnmx*netahbmx*nphimx, -0.5, nchnmx*netahbmx*nphimx-0.5);
352  allhb2 = fs->make<TH1F>("allhb2", "allhb2", nchnmx*netahb3mx*nphimx, -0.5, nchnmx*netahb3mx*nphimx-0.5);
353  allhb3 = fs->make<TH1F>("allhb3", "allhb3", nchnmx*netahb3mx*nphimx, -0.5, nchnmx*netahb3mx*nphimx-0.5);
354  Nallhb1 = fs->make<TH1F>("Nallhb1", "Nallhb1", nchnmx*netahbmx*nphimx, -0.5, nchnmx*netahbmx*nphimx-0.5);
355  Nallhb2 = fs->make<TH1F>("Nallhb2", "Nallhb2", nchnmx*netahb3mx*nphimx, -0.5, nchnmx*netahb3mx*nphimx-0.5);
356  Nallhb3 = fs->make<TH1F>("Nallhb3", "Nallhb3", nchnmx*netahb3mx*nphimx, -0.5, nchnmx*netahb3mx*nphimx-0.5);
357  hb1pedpr = fs->make<TProfile>("hb1pedpr", "hb1pedpr", nchnmx*netahbmx*nphimx, -0.5, nchnmx*netahbmx*nphimx-0.5);
358  hb1pedrms = fs->make<TH1F>("hb1pedrms", "hb1pedrms", nchnmx*netahbmx*nphimx, -0.5, nchnmx*netahbmx*nphimx-0.5);
359  hst_hb1pedrms = fs->make<TH1F>("hst_hb1pedrms", "hst_hb1pedrms", 100, 0., 0.1);
360 
361  }
362  for (int i=0; i<5; i++) {
363  sprintf(title, "ho_occupency (>%i #sigma)", i+2);
364  ho_occupency[i] = fs->make<TH1F>(title, title, netamx*nphimx, -0.5, netamx*nphimx-0.5);
365  }
366  }
367 
368 }
369 
371 {
372 
373  // do anything here that needs to be done at desctruction time
374  // (e.g. close files, deallocate resources etc.)
375 
376  if (m_hotime) {
377  // Write the histos to file
378  if ( m_digiInput) {
379  allhotime->Divide(Nallhotime);
380  for (int ij=0; ij<=ntrgp_gm; ij++) {
381  hotime[ij]->Divide(Nhotime[ij]);
382  }
383  hopedtime->Divide(Nhopedtime);
384  libhoped->Scale(1./max(1,nRuns));
385  libhoped1->Scale(1./max(1,nRuns));
386  for (int i=0; i<nchnmx*netamx*nphimx; i++) {
387  float xx = hopedpr->GetBinError(i+1);
388  if (hopedpr->GetBinEntries(i+1) >0) {
389  hopedrms->Fill(i, xx);
390  hst_hopedrms->Fill(xx);
391  }
392  }
393  allhb1->Divide(Nallhb1);
394  allhb2->Divide(Nallhb2);
395  allhb3->Divide(Nallhb3);
396  for (int i=0; i<nchnmx*netahbmx*nphimx; i++) {
397  float xx = hb1pedpr->GetBinError(i+1);
398  if (hb1pedpr->GetBinEntries(i+1) >0) {
399  hb1pedrms->Fill(i, xx);
400  hst_hb1pedrms->Fill(xx);
401  }
402  }
403  }
404  for (int i=0; i<5; i++) {
405  ho_occupency[i]->Scale(1./max(1,Noccu));
406  }
407  }
408 
409 }
410 
411 
412 //
413 // member functions
414 //
415 
416 // ------------ method called to produce the data ------------
417 void
419 {
420 
421  using namespace edm;
422  int irun = iEvent.id().run();
423  if (m_digiInput) {
424  if (irunold !=irun) {
425  iSetup.get<HcalDbRecord>().get(conditions_);
426  m_shape = (*conditions_).getHcalShape();
427 
428  for (int i=0; i<netamx; i++) {
429  for (int j=0; j<nphimx; j++) {
430  for (int k=0; k<ncidmx; k++) {
431  pedestal[i][j][k]=0.0;
432  }
433  }
434  }
435  }
436  }
437 
438  // if (m_hotime && m_digiInput) {
439  if (m_digiInput) {
440  if (irunold !=irun) {
441  nRuns++;
442  for (int i =-netabin+1; i<=netabin-1; i++) {
443  if (i==0) continue;
444  int tmpeta1 = (i>0) ? i -1 : -i +14;
445  if (tmpeta1 <0 || tmpeta1 >netamx) continue;
446  for (int j=0; j<nphimx; j++) {
447 
448  HcalDetId id(HcalOuter, i, j+1, 4);
449  calibped = conditions_->getHcalCalibrations(id);
450 
451  for (int k =0; k<ncidmx-1; k++) {
452  pedestal[tmpeta1][j][k] = calibped.pedestal(k); // pedm->getValue(k);
453  pedestal[tmpeta1][j][ncidmx-1] += (1./(ncidmx-1))*pedestal[tmpeta1][j][k];
454  }
455 
456  if (m_hotime) {
457  for (int k =0; k<ncidmx; k++) {
458  libhoped->Fill(nphimx*ncidmx*tmpeta1 + ncidmx*j + k, pedestal[tmpeta1][j][k]);
459  }
460  for (int k =0; k<nchnmx; k++) {
461  libhoped1->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*j + k, pedestal[tmpeta1][j][min(k,ncidmx-1)]);
462  }
463  }
464 
465  }
466  }
467  }
468  }
469 
470  // Nevents++;
471  irunold = irun;
472 
473  //GMA if (Nevents%500==1)
474  //GMA cout <<"AlCaHOCalibProducer Processing event # "<<Nevents<<" "<<Npass<<" "<<Noccu<<" "<<irun<<" "<<iEvent.id().event()<<endl;
475 
476  std::auto_ptr<HOCalibVariableCollection> hostore (new HOCalibVariableCollection);
477 
479 
481 
482  if (m_digiInput) {
483  iEvent.getByLabel(hoLabel_,ho);
484  iEvent.getByLabel(hbheLabel_,hbhe);
485  }
486 
487  if (m_hotime && m_digiInput) {
488  if ((*ho).size()>0) {
489  for (HODigiCollection::const_iterator j=(*ho).begin(); j!=(*ho).end(); j++){
490  HcalDetId id =(*j).id();
491  int tmpeta= id.ieta();
492  int tmpphi= id.iphi();
493  m_coder = (*conditions_).getHcalCoder(id);
494  float tmpdata[nchnmx];
495  int tmpeta1 = (tmpeta>0) ? tmpeta -1 : -tmpeta +14;
496  for (int i=0; i<(*j).size() && i<nchnmx; i++) {
497  tmpdata[i] = m_coder->charge(*m_shape,(*j).sample(i).adc(),(*j).sample(i).capid());
498  allhotime->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, tmpdata[i]);
499  Nallhotime->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, 1.);
500  }
501  }
502  }
503  if ((*hbhe).size()>0) {
504  for (HBHEDigiCollection::const_iterator j=(*hbhe).begin(); j!=(*hbhe).end(); j++){
505  HcalDetId id =(*j).id();
506  int tmpeta= id.ieta();
507  int tmpphi= id.iphi();
508  int tmpdepth =id.depth();
509  m_coder = (*conditions_).getHcalCoder(id);
510  int tmpeta1 = (tmpeta>0) ? tmpeta -15 : -tmpeta + 1;
511  if (tmpdepth==1) tmpeta1 = (tmpeta>0) ? tmpeta -1 : -tmpeta +29;
512  for (int i=0; i<(*j).size() && i<nchnmx; i++) {
513  float signal = m_coder->charge(*m_shape,(*j).sample(i).adc(),(*j).sample(i).capid());
514  if (tmpdepth==1) {
515  allhb1->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, signal);
516  Nallhb1->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, 1);
517  hb1pedpr->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, signal);}
518  if (tmpdepth==2) {
519  allhb2->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, signal);
520  Nallhb2->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, 1);}
521  if (tmpdepth==3) {
522  allhb3->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, signal);
523  Nallhb3->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, 1);}
524  }
525  }
526  }
527  }
528 
529  double pival = acos(-1.);
530 
532  iEvent.getByLabel(muonTags_, cosmicmuon);
533 
534  if (cosmicmuon->size()>0) {
535 
536  int l1trg = 0;
537  int hlttr = 0;
538 
539  int ntrgpas_gm[ntrgp_gm]={0,0,0,0,0,0,0,0,0,0};
540 
541  /*
542  //L1 trigger
543  Handle<L1GlobalTriggerReadoutRecord> L1GTRR;
544  iEvent.getByLabel(l1Label_,L1GTRR); //gtDigis
545 
546  if ( L1GTRR.isValid()) {
547  const unsigned int n(L1GTRR->decisionWord().size());
548  const bool accept(L1GTRR->decision());
549  if (accept) {
550  for (unsigned int i=0; i!=n && i<32; ++i) {
551  // for (unsigned int i=0; i!=n ; ++i) {
552  int il1trg = (L1GTRR->decisionWord()[i]) ? 1 : 0;
553  if (il1trg>0 && i<32) l1trg +=int(std::pow(2., double(i%32))*il1trg);
554  }
555  }
556  }// else { return;}
557 
558  //HLT
559 
560  Handle<edm::TriggerResults> trigRes;
561  iEvent.getByLabel(hltLabel_, trigRes);
562 
563 
564  unsigned int size = trigRes->size();
565  edm::TriggerNames triggerNames(*trigRes);
566 
567  // loop over all paths, get trigger decision
568  for(unsigned i = 0; i != size && i<32; ++i) {
569  std::string name = triggerNames.triggerName(i);
570  fired[name] = trigRes->accept(i);
571  int ihlt = trigRes->accept(i);
572  if (m_hotime){
573  if (ihlt >0 && i < (int)ntrgp_gm) { ntrgpas_gm[i] = 1;}
574  }
575  if (i<32 && ihlt>0) hlttr += int(std::pow(2., double(i%32))*ihlt);
576  }
577 
578  */
579 
580  int Noccu_old = Noccu;
581 
582  for(reco::TrackCollection::const_iterator ncosm = cosmicmuon->begin();
583  ncosm != cosmicmuon->end(); ++ncosm) {
584 
585  if ((*ncosm).ndof() < 15) continue;
586  if ((*ncosm).normalizedChi2() >30.0) continue;
587 
588  HOCalibVariables tmpHOCalib;
589 
590  tmpHOCalib.trig1 = l1trg;
591  tmpHOCalib.trig2 = hlttr;
592 
593  int charge = ncosm->charge();
594 
595  double innerr = (*ncosm).innerPosition().Perp2();
596  double outerr = (*ncosm).outerPosition().Perp2();
597  int iiner = (innerr <outerr) ? 1 : 0;
598 
599  //---------------------------------------------------
600  // in_to_out Dir in_to_out Dir
601  // StandAlone ^ ^ Cosmic ^ |
602  // | | | v
603  //---------------------------------------------------Y=0
604  // StandAlone | | Cosmic ^ |
605  // v v | v
606  //----------------------------------------------------
607 
608  double posx, posy, posz;
609  double momx, momy, momz;
610 
611  if (iiner==1) {
612  posx = (*ncosm).innerPosition().X();
613  posy = (*ncosm).innerPosition().Y();
614  posz = (*ncosm).innerPosition().Z();
615 
616  momx = (*ncosm).innerMomentum().X();
617  momy = (*ncosm).innerMomentum().Y();
618  momz = (*ncosm).innerMomentum().Z();
619 
620  } else {
621  posx = (*ncosm).outerPosition().X();
622  posy = (*ncosm).outerPosition().Y();
623  posz = (*ncosm).outerPosition().Z();
624 
625  momx = (*ncosm).outerMomentum().X();
626  momy = (*ncosm).outerMomentum().Y();
627  momz = (*ncosm).outerMomentum().Z();
628  }
629 
630 
631  PositionType trkpos(posx, posy, posz);
632 
633  CLHEP::Hep3Vector tmpmuon3v(posx, posy, posz);
634  CLHEP::Hep3Vector tmpmuondir(momx, momy, momz);
635 
636  bool samedir = (tmpmuon3v.dot(tmpmuondir) >0) ? true : false;
637  for (int i=0; i<3; i++) {tmpHOCalib.caloen[i] = 0.0;}
638  int inearbymuon = 0;
639  for(reco::TrackCollection::const_iterator ncosmcor = cosmicmuon->begin();
640  ncosmcor != cosmicmuon->end(); ++ncosmcor) {
641  if (ncosmcor==ncosm) continue;
642 
643  CLHEP::Hep3Vector tmpmuon3vcor;
644  CLHEP::Hep3Vector tmpmom3v;
645  if (iiner==1) {
646  tmpmuon3vcor = CLHEP::Hep3Vector((*ncosmcor).innerPosition().X(),(*ncosmcor).innerPosition().Y(),(*ncosmcor).innerPosition().Z());
647  tmpmom3v = CLHEP::Hep3Vector((*ncosmcor).innerMomentum().X(),(*ncosmcor).innerMomentum().Y(),(*ncosmcor).innerMomentum().Z());
648  } else {
649  tmpmuon3vcor = CLHEP::Hep3Vector((*ncosmcor).outerPosition().X(),(*ncosmcor).outerPosition().Y(),(*ncosmcor).outerPosition().Z());
650  tmpmom3v = CLHEP::Hep3Vector((*ncosmcor).outerMomentum().X(),(*ncosmcor).outerMomentum().Y(),(*ncosmcor).outerMomentum().Z());
651 
652  }
653  if (tmpmom3v.mag()<0.2 || (*ncosmcor).ndof()<5) continue;
654 
655  double angle = tmpmuon3v.angle(tmpmuon3vcor);
656  if (angle < 7.5*pival/180.) {inearbymuon=1;} // break;}
657 
658  if (muonTags_.label() =="cosmicMuons") {
659  if (angle <7.5*pival/180.) { tmpHOCalib.caloen[0] +=1.;}
660  if (angle <15.0*pival/180.) { tmpHOCalib.caloen[1] +=1.;}
661  if (angle <35.0*pival/180.) { tmpHOCalib.caloen[2] +=1.;}
662  }
663  }
664 
665  localxhor0 = localyhor0 = 20000; //GM for 22OCT07 data
666 
667  if (muonTags_.label() =="standAloneMuons") {
668 
669  Handle<CaloTowerCollection> calotower;
670  iEvent.getByLabel(towerLabel_, calotower);
671 
672  for (CaloTowerCollection::const_iterator calt = calotower->begin();
673  calt !=calotower->end(); calt++) {
674  //CMSSW_2_1_x const math::XYZVector towermom = (*calt).momentum();
675  double ith = (*calt).momentum().theta();
676  double iph = (*calt).momentum().phi();
677 
678  CLHEP::Hep3Vector calo3v(sin(ith)*cos(iph), sin(ith)*sin(iph), cos(ith));
679 
680  double angle = tmpmuon3v.angle(calo3v);
681 
682  if (angle < 7.5*pival/180.) {tmpHOCalib.caloen[0] += calt->emEnergy()+calt->hadEnergy();}
683  if (angle < 15*pival/180.) {tmpHOCalib.caloen[1] += calt->emEnergy()+calt->hadEnergy();}
684  if (angle < 35*pival/180.) {tmpHOCalib.caloen[2] += calt->emEnergy()+calt->hadEnergy();}
685  }
686 
687 
688  }
689  if (tmpHOCalib.caloen[0] >10.0) continue;
690 
691  GlobalPoint glbpt(posx, posy, posz);
692 
693  double mom = sqrt(momx*momx + momy*momy +momz*momz);
694 
695  momx /= mom;
696  momy /= mom;
697  momz /= mom;
698 
699  DirectionType trkdir(momx, momy, momz);
700 
701  tmpHOCalib.trkdr = (*ncosm).d0();
702  tmpHOCalib.trkdz = (*ncosm).dz();
703 
704  tmpHOCalib.nmuon = cosmicmuon->size();
705  tmpHOCalib.trkvx = glbpt.x();
706  tmpHOCalib.trkvy = glbpt.y();
707  tmpHOCalib.trkvz = glbpt.z();
708  tmpHOCalib.trkmm = mom*charge;
709  tmpHOCalib.trkth = trkdir.theta();
710  tmpHOCalib.trkph = trkdir.phi();
711 
712  tmpHOCalib.ndof = (inearbymuon ==0) ? (int)(*ncosm).ndof() : -(int)(*ncosm).ndof();
713  tmpHOCalib.chisq = (*ncosm).normalizedChi2(); // max(1.,tmpHOCalib.ndof);
714  tmpHOCalib.therr = 0.;
715  tmpHOCalib.pherr = 0.;
716 
717  if (iiner==1) {
718  reco::TrackBase::CovarianceMatrix innercov = (*ncosm).innerStateCovariance();
719  tmpHOCalib.therr = innercov(1,1); //thetaError();
720  tmpHOCalib.pherr = innercov(2,2); //phi0Error();
721  } else {
722  reco::TrackBase::CovarianceMatrix outercov = (*ncosm).outerStateCovariance();
723  tmpHOCalib.therr = outercov(1,1); //thetaError();
724  tmpHOCalib.pherr = outercov(2,2); //phi0Error();
725  }
726 
727  ESHandle<MagneticField> theMagField;
728  iSetup.get<IdealMagneticFieldRecord>().get(theMagField );
729 
730  SteppingHelixPropagator myHelix(&*theMagField,anyDirection);
731  myHelix.setMaterialMode(false);
732  myHelix.applyRadX0Correction(true);
733 
734  double phiho = trkpos.phi();
735  if (phiho<0) phiho +=2*pival;
736 
737  int iphisect_dt=int(6*(phiho+pival/18.)/pival); //for u 18/12/06
738  if (iphisect_dt>=12) iphisect_dt=0;
739 
740  int iphisect = -1;
741 
742  bool ipath = false;
743  for (int kl = 0; kl<=2; kl++) {
744 
745  int iphisecttmp = (kl<2) ? iphisect_dt + kl : iphisect_dt - 1;
746  if (iphisecttmp <0) iphisecttmp = 11;
747  if (iphisecttmp >=12) iphisecttmp = 0;
748 
749  double phipos = iphisecttmp*pival/6.;
750  double phirot = phipos;
751 
752  GlobalVector xLocal(-sin(phirot), cos(phirot), 0.);
753 
754  GlobalVector yLocal(0., 0., 1.);
755  GlobalVector zLocal = xLocal.cross(yLocal).unit();
756  // GlobalVector zLocal(cos(phirot), sin(phirot), 0.0);
757 
758 
759  FreeTrajectoryState freetrajectorystate_ = getFreeTrajectoryState(*ncosm,&(*theMagField), iiner, samedir);
760 
761  Surface::RotationType rot(xLocal, yLocal, zLocal);
762 
763  for (int ik=1; ik>=0; ik--) { //propagate track in two HO layers
764 
765  double radial = 407.0;
766  if (ik==0) radial = 382.0;
767 
768  Surface::PositionType pos(radial*cos(phipos), radial*sin(phipos), 0.);
769  PlaneBuilder::ReturnType aPlane = PlaneBuilder().plane(pos,rot);
770 
771  Surface* aPlane2 = new Plane(pos,rot);
772 
773  SteppingHelixStateInfo steppingHelixstateinfo_ = myHelix.propagate(freetrajectorystate_, (*aPlane2));
774 
775  if (steppingHelixstateinfo_.isValid()) {
776 
777  GlobalVector hotrkpos2(steppingHelixstateinfo_.position().x(), steppingHelixstateinfo_.position().y(), steppingHelixstateinfo_.position().z());
778  CLHEP::Hep3Vector hotrkdir2(steppingHelixstateinfo_.momentum().x(), steppingHelixstateinfo_.momentum().y(),steppingHelixstateinfo_.momentum().z());
779 
780  LocalVector lclvt0 = (*aPlane).toLocal(hotrkpos2);
781 
782  double xx = lclvt0.x();
783  double yy = lclvt0.y();
784 
785  if (ik ==1) {
786  if ((std::abs(yy) < 130 && xx >-64.7 && xx <138.2)
787  ||(std::abs(yy) > 130 && std::abs(yy) <700 && xx >-76.3 && xx <140.5)) {
788  ipath = true; //Only look for tracks which as hits in layer 1
789  iphisect = iphisecttmp;
790  }
791  }
792 
793  if (iphisect != iphisecttmp) continue; //Look for ring-0 only when ring1 is accepted for that sector
794 
795  switch (ik)
796  {
797  case 0 :
798  xhor0 = xx; //lclvt0.x();
799  yhor0 = yy; //lclvt0.y();
800  break;
801  case 1 :
802  xhor1 = xx; //lclvt0.x();
803  yhor1 = yy; //lclvt0.y();
804 
805  tmpHOCalib.hoang = CLHEP::Hep3Vector(zLocal.x(),zLocal.y(),zLocal.z()).dot(hotrkdir2.unit());
806  break;
807  default : break;
808  }
809  } else {
810  break;
811  }
812  }
813  if (ipath) break;
814  }
815  if (ipath) { //If muon crossed HO laeyrs
816 
817  int ietaho = 50;
818  int iphiho = -1;
819 
820  for (int i=0; i<9; i++) {tmpHOCalib.hosig[i]=-100.0;}
821  for (int i=0; i<18; i++) {tmpHOCalib.hocorsig[i]=-100.0;}
822  for (int i=0; i<9; i++) {tmpHOCalib.hbhesig[i]=-100.0;}
823  tmpHOCalib.hocro = -100;
824  tmpHOCalib.htime = -1000;
825 
826  int isect = 0;
827 
828  findHOEtaPhi(iphisect, ietaho, iphiho);
829 
830  if (ietaho !=0 && iphiho !=0 && std::abs(iring)<=2) { //Muon passed through a tower
831  isect = 100*std::abs(ietaho+30)+std::abs(iphiho);
832  if (std::abs(ietaho) >=netabin || iphiho<0) isect *=-1; //Not extrapolated to any tower
833  if (std::abs(ietaho) >=netabin) isect -=1000000; //not matched with eta
834  if (iphiho<0) isect -=2000000; //not matched with phi
835  tmpHOCalib.isect = isect;
836 
837  tmpHOCalib.hodx = localxhor1;
838  tmpHOCalib.hody = localyhor1;
839 
840  if (iring==0) {
841  tmpHOCalib.hocorsig[8] = localxhor0;
842  tmpHOCalib.hocorsig[9] = localyhor0;
843  }
844 
845  int etamn=-4;
846  int etamx=4;
847  if (iring==1) {etamn=5; etamx = 10;}
848  if (iring==2) {etamn=11; etamx = 16;}
849  if (iring==-1){etamn=-10; etamx = -5;}
850  if (iring==-2){etamn=-16; etamx = -11;}
851 
852  int phimn = 1;
853  int phimx = 2;
854  if (iring ==0) {
855  phimx =2*int((iphiho+1)/2.);
856  phimn = phimx - 1;
857  } else {
858  phimn = 3*int((iphiho+1)/3.) - 1;
859  phimx = phimn + 2;
860  }
861 
862  if (phimn <1) phimn += nphimx;
863  if (phimx >72) phimx -= nphimx;
864 
865  int sigstr = m_startTS; // 5;
866  int sigend = m_endTS; // 8;
867 
868  // if (iphiho <=nphimx/2) { //GMA310508
869  // sigstr -=1; //GMA300608
870  // sigend -=1;
871  // }
872 
873  if (m_hbinfo) {
874  for (int i=0; i<9; i++) {tmpHOCalib.hbhesig[i]=-100.0;}
875 
876  if (m_digiInput) {
877  if ((*hbhe).size() >0) {
878  for (HBHEDigiCollection::const_iterator j=(*hbhe).begin(); j!=(*hbhe).end(); j++){
879  // const HBHEDataFrame digi = (const HBHEDataFrame)(*j);
880  // HcalDetId id =digi.id();
881  HcalDetId id =(*j).id();
882  int tmpeta= id.ieta();
883  int tmpphi= id.iphi();
884  m_coder = (*conditions_).getHcalCoder(id);
885  calibped = conditions_->getHcalCalibrations(id);
886 
887  int deta = tmpeta-ietaho;
888  if (tmpeta==-1 && ietaho== 1) deta = -1;
889  if (tmpeta== 1 && ietaho==-1) deta = 1;
890  int dphi = tmpphi-iphiho;
891  if (phimn >phimx) {
892  if (dphi==71) dphi=-1;
893  if (dphi==-71) dphi=1;
894  }
895 
896  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0; //NEED correction in full CMS detector
897 
898  if (ipass2 ==0 ) continue;
899 
900  float tmpdata[nchnmx];
901  for (int i=0; i<(*j).size() && i<nchnmx; i++) {
902  tmpdata[i] = m_coder->charge(*m_shape,(*j).sample(i).adc(),(*j).sample(i).capid());
903  }
904 
905  float signal = 0;
906  for (int i=1; i<(*j).size() && i<=8; i++) {
907  signal += tmpdata[i] - calibped.pedestal((*j).sample(i).capid());;
908  }
909 
910  if (ipass2 == 1) {
911  if (3*(deta+1)+dphi+1<9) tmpHOCalib.hbhesig[3*(deta+1)+dphi+1] = signal;
912  }
913  }
914  }
915 
916  } else {
917 
918  edm::Handle<HBHERecHitCollection> hbheht;// iEvent.getByType(hbheht);
919  iEvent.getByLabel(hbheLabel_,hbheht);
920 
921 
922  if ((*hbheht).size()>0) {
923  if(!(*hbheht).size()) throw (int)(*hbheht).size();
924 
925  for (HBHERecHitCollection::const_iterator j=(*hbheht).begin(); j!=(*hbheht).end(); j++){
926  // const HBHERecHit hbhehtrec = (const HBHERecHit)(*j);
927  // HcalDetId id =hbhehtrec.id();
928  HcalDetId id =(*j).id();
929  int tmpeta= id.ieta();
930  int tmpphi= id.iphi();
931 
932  int deta = tmpeta-ietaho;
933  if (tmpeta==-1 && ietaho== 1) deta = -1;
934  if (tmpeta== 1 && ietaho==-1) deta = 1;
935  int dphi = tmpphi-iphiho;
936  if (phimn >phimx) {
937  if (dphi==71) dphi=-1;
938  if (dphi==-71) dphi=1;
939  }
940 
941  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0; //NEED correction in full CMS detector
942  if ( ipass2 ==0 ) continue;
943 
944  float signal = (*j).energy();
945 
946  if (3*(deta+1)+dphi+1<9) tmpHOCalib.hbhesig[3*(deta+1)+dphi+1] = signal;
947  }
948  }
949 
950  } //else m_digilevel
951 
952  } //m_hbinfo #endif
953 
954  if (m_digiInput) {
955  if ((*ho).size()>0) {
956  int isFilled[netamx*nphimx];
957  for (int j=0; j<netamx*nphimx; j++) {isFilled[j]=0;}
958 
959  double sumEt = 0;
960  double sumE = 0;
961 
962  for (HODigiCollection::const_iterator j=(*ho).begin(); j!=(*ho).end(); j++){
963  // const HODataFrame digi = (const HODataFrame)(*j);
964  // HcalDetId id =digi.id();
965 
966  HcalDetId id =(*j).id();
967  int tmpeta= id.ieta();
968  int tmpphi= id.iphi();
969  m_coder = (*conditions_).getHcalCoder(id);
970 
971  int ipass1 =0;
972  if (tmpeta >=etamn && tmpeta <=etamx) {
973  if (phimn < phimx) {
974  ipass1 = (tmpphi >=phimn && tmpphi <=phimx ) ? 1 : 0;
975  } else {
976  ipass1 = (tmpphi==71 || tmpphi ==72 || tmpphi==1) ? 1 : 0;
977  }
978  }
979 
980  int deta = tmpeta-ietaho;
981  if (tmpeta==-1 && ietaho== 1) deta = -1;
982  if (tmpeta== 1 && ietaho==-1) deta = 1;
983 
984  int dphi = tmpphi -iphiho;
985  if (phimn>phimx) {
986  if (dphi==71) dphi=-1;
987  if (dphi==-71) dphi=1;
988  }
989 
990  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0;
991 
992  int tmpeta1 = (tmpeta>0) ? tmpeta -1 : -tmpeta +14;
993 
994  float tmpdata[nchnmx]={0,0,0,0,0,0,0,0,0,0};
995  float sigvall[nsigpk]={0,0,0,0,0,0,0};
996 
997  for (int i=0; i<(*j).size() && i<nchnmx; i++) {
998  tmpdata[i] = m_coder->charge(*m_shape,(*j).sample(i).adc(),(*j).sample(i).capid());
999  if (deta==0 && dphi==0) {
1000  double tmpE = tmpdata[i] - pedestal[tmpeta1][tmpphi-1][(*j).sample(i).capid()];
1001  if (tmpE >0) {
1002  sumEt += i*tmpE;
1003  sumE += tmpE;
1004  }
1005  if (m_hotime) {
1006  //calculate signals in 4 time slices, 0-3,.. 6-9
1007  if (i>=7-nsigpk) {
1008  for (int ncap=0; ncap<nsigpk; ncap++) {
1009  if (i-ncap >= nstrbn && i-ncap <= nstrbn+3) {
1010  sigvall[ncap] +=tmpdata[i];
1011  }
1012  }
1013  }
1014  if (i==(*j).size()-1) {
1015  float mxled=-1;
1016  int imxled = 0;
1017  for (int ij=0; ij<nsigpk; ij++) {
1018  if (sigvall[ij] > mxled) {mxled = sigvall[ij]; imxled=ij;}
1019  }
1020  double pedx = 0.0;
1021  for (int ij=0; ij<4; ij++) {
1022  pedx +=pedestal[tmpeta1][tmpphi-1][ij];
1023  }
1024  if (mxled-pedx >2 && mxled-pedx <20 ) {
1025  hopeak[ntrgp_gm]->Fill(nphimx*tmpeta1 + tmpphi-1, imxled+nstrbn);
1026  for (int jk=0; jk<ntrgp_gm; jk++) {
1027  if (ntrgpas_gm[jk]>0) {
1028  hopeak[jk]->Fill(nphimx*tmpeta1 + tmpphi-1, imxled+nstrbn);
1029  }
1030  }
1031  if (tmpdata[5]+tmpdata[6] >1) {
1032  horatio->Fill(nphimx*tmpeta1 + tmpphi-1, (tmpdata[5]-tmpdata[6])/(tmpdata[5]+tmpdata[6]));
1033  }
1034  for (int ij=0; ij<(*j).size() && ij<nchnmx; ij++) {
1035  hotime[ntrgp_gm]->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + ij, tmpdata[ij]);
1036  Nhotime[ntrgp_gm]->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + ij, 1.);
1037  for (int jk=0; jk<ntrgp_gm; jk++) {
1038  if (ntrgpas_gm[jk]>0) {
1039  hotime[jk]->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + ij, tmpdata[ij]);
1040  Nhotime[jk]->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + ij, 1.);
1041  }
1042  }
1043  }
1044  }
1045  }
1046  }
1047  }
1048  }
1049 
1050  if (std::abs(tmpeta) <=15 && deta==0 && dphi ==0) {
1051  float signal = 0;
1052  size_t icnt = 0;
1053  for (int i =0; i<nchnmx && i< (*j).size(); i++) {
1054  if (i >=sigstr && i<=sigend) continue;
1055  signal += tmpdata[i] - pedestal[tmpeta1][tmpphi-1][(*j).sample(i).capid()];
1056  if (++icnt >=4) break;
1057  }
1058  tmpHOCalib.hocro = signal;
1059  }
1060 
1061  if (m_hotime) {
1062  if (ipass1 ==0 && ipass2 ==0 && cosmicmuon->size()<=2) {
1063  if (std::abs(ietaho) <=netabin && iphiho >0) {
1064  if ((iphiho >=1 && iphiho<=nphimx/2 && tmpphi >=1 && tmpphi <=nphimx/2) ||
1065  (iphiho >nphimx/2 && iphiho<=nphimx && tmpphi >nphimx/2 && tmpphi <=nphimx)) {
1066  if (isFilled[nphimx*tmpeta1+tmpphi-1]==0) {
1067  isFilled[nphimx*tmpeta1+tmpphi-1]=1;
1068  for (int i=0; i<(*j).size() && i<nchnmx; i++) {
1069  hopedtime->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, tmpdata[i]);
1070  Nhopedtime->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, 1.);
1071  hopedpr->Fill(nphimx*nchnmx*tmpeta1 + nchnmx*(tmpphi-1) + i, tmpdata[i]);
1072  }
1073  } //isFilled
1074  }
1075  }
1076  }
1077  }
1078 
1079  if (ipass1 ==0 && ipass2 ==0 ) continue;
1080 
1081  float signal = 0;
1082  for (int i=sigstr; i<(*j).size() && i<=sigend; i++) {
1083  signal += tmpdata[i] - pedestal[tmpeta1][tmpphi-1][(*j).sample(i).capid()];
1084  }
1085  if (signal <-100 || signal >100000) signal = -100;
1086  if (m_hotime) {
1087  if (signal >-100 && Noccu == Noccu_old) {
1088  for (int i=0; i<5; i++) {
1089  if (signal >(i+2)*m_sigma) {
1090  ho_occupency[i]->Fill(nphimx*tmpeta1+tmpphi-1);
1091  }
1092  }
1093  }
1094  }
1095 
1096  if (ipass1 ==0 && ipass2 ==0 ) continue;
1097 
1098  if (ipass1 ==1) {
1099  int tmpdph = tmpphi-phimn;
1100  if (tmpdph<0) tmpdph = 2; //only case of iphi==1, where phimn=71
1101 
1102  int ilog = 2*(tmpeta-etamn)+tmpdph;
1103  if (iring !=0) {
1104  if (iring >0) {
1105  ilog = 3*(tmpeta-etamn)+tmpdph; //Again CMS correction
1106  } else {
1107  ilog = 3*(etamx-tmpeta)+tmpdph; //Again CMS correction
1108  }
1109  }
1110  if (ilog>-1 && ilog<18) {
1111  tmpHOCalib.hocorsig[ilog] = signal;
1112  }
1113  }
1114 
1115  if (ipass2 ==1) {
1116  if (3*(deta+1)+dphi+1<9) tmpHOCalib.hosig[3*(deta+1)+dphi+1] = signal; //Again CMS azimuthal near phi 1&72
1117  }
1118 
1119  /*
1120  // Possibility to store pedestal by shifting phi tower by 6
1121  // But, due to missing tower at +-5, we do not have always proper
1122  // statistics and also in pedestal subtracted data, we do not have
1123  // signal in that tower
1124  //
1125  if (deta==0 && dphi ==0) {
1126  int crphi = tmpphi + 6;
1127  if (crphi >72) crphi -=72;
1128 
1129  for (HODigiCollection::const_iterator jcr=(*ho).begin(); jcr!=(*ho).end(); jcr++){
1130  // const HODataFrame (*jcr) = (const HODataFrame)(*jcr);
1131  // HcalDetId idcr =(*jcr).id();
1132  HcalDetId id =(*jcr).id();
1133  int etacr= idcr.ieta();
1134  int phicr= idcr.iphi();
1135  m_coder = (*conditions_).getHcalCoder(idcr);
1136 
1137  if (tmpeta==etacr && crphi ==phicr) {
1138 
1139  float tmpdatacr[nchnmx];
1140  for (int i=0; i<(*jcr).size() && i<nchnmx; i++) {
1141  tmpdatacr[i] = m_coder->charge(*m_shape,(*jcr).sample(i).adc(),(*jcr).sample(i).capid());
1142  }
1143  }
1144  }
1145  }
1146  */
1147 
1148  }
1149  tmpHOCalib.htime = sumEt/max(sumE,1.e-6);
1150  }
1151  } else {
1153  iEvent.getByLabel(hoLabel_,hoht);
1154 
1155 
1156  if ((*hoht).size()>0) {
1157  for (HORecHitCollection::const_iterator j=(*hoht).begin(); j!=(*hoht).end(); j++){
1158  // const HORecHit hohtrec = (const HORecHit)(*j);
1159  // HcalDetId id =hohtrec.id();
1160  HcalDetId id =(*j).id();
1161  int tmpeta= id.ieta();
1162  int tmpphi= id.iphi();
1163 
1164  int ipass1 =0;
1165  if (tmpeta >=etamn && tmpeta <=etamx) {
1166  if (phimn < phimx) {
1167  ipass1 = (tmpphi >=phimn && tmpphi <=phimx ) ? 1 : 0;
1168  } else {
1169  ipass1 = (tmpphi==71 || tmpphi ==72 || tmpphi==1) ? 1 : 0;
1170  }
1171  }
1172 
1173  int deta = tmpeta-ietaho;
1174  if (tmpeta==-1 && ietaho== 1) deta = -1;
1175  if (tmpeta== 1 && ietaho==-1) deta = 1;
1176 
1177  int dphi = tmpphi -iphiho;
1178  if (phimn>phimx) {
1179  if (dphi==71) dphi=-1;
1180  if (dphi==-71) dphi=1;
1181  }
1182 
1183  float signal = (*j).energy();
1184  if (m_hotime) {
1185  int tmpeta1 = (tmpeta>0) ? tmpeta -1 : -tmpeta +14;
1186  if (signal >-100 && Noccu == Noccu_old) {
1187  for (int i=0; i<5; i++) {
1188  if (signal >(i+2)*m_sigma) {
1189  ho_occupency[i]->Fill(nphimx*tmpeta1+tmpphi-1);
1190  }
1191  }
1192  }
1193  }
1194 
1195  int ipass2 = (std::abs(deta) <=1 && std::abs(dphi)<=1) ? 1 : 0;
1196 
1197  if (ipass1 ==0 && ipass2 ==0 ) continue;
1198 
1199  if (ipass1 ==1) {
1200  int tmpdph = tmpphi-phimn;
1201  if (tmpdph<0) tmpdph = 2; //only case of iphi==1, where phimn=71
1202 
1203  int ilog = 2*(tmpeta-etamn)+tmpdph;
1204  if (iring !=0) {
1205  if (iring >0) {
1206  ilog = 3*(tmpeta-etamn)+tmpdph; //Again CMS correction
1207  } else {
1208  ilog = 3*(etamx-tmpeta)+tmpdph; //Again CMS correction
1209  }
1210  }
1211  if (ilog>-1 && ilog<18) {
1212  tmpHOCalib.hocorsig[ilog] = signal;
1213  }
1214  }
1215 
1216  if (ipass2 ==1) {
1217 
1218  if (3*(deta+1)+dphi+1<9) {
1219  tmpHOCalib.hosig[3*(deta+1)+dphi+1] = signal; //Again CMS azimuthal near phi 1&72
1220  }
1221  }
1222 
1223  if (deta==0 && dphi ==0) {
1224  tmpHOCalib.htime = (*j).time();
1225  int crphi = tmpphi + 6;
1226  if (crphi >72) crphi -=72;
1227 
1228  for (HORecHitCollection::const_iterator jcr=(*hoht).begin(); jcr!=(*hoht).end(); jcr++){
1229  const HORecHit reccr = (const HORecHit)(*jcr);
1230  HcalDetId idcr =reccr.id();
1231  int etacr= idcr.ieta();
1232  int phicr= idcr.iphi();
1233  if (tmpeta==etacr && crphi ==phicr) {
1234 
1235  tmpHOCalib.hocro = reccr.energy();
1236 
1237  }
1238  }
1239  }
1240  }
1241  }
1242  }
1243 
1244  //GMA Npass++;
1245  if (Noccu == Noccu_old) Noccu++;
1246  hostore->push_back(tmpHOCalib);
1247 
1248  }
1249  }
1250 
1251  }
1252  }
1253 
1254  iEvent.put(hostore, "HOCalibVariableCollection");
1255 
1256 }
1257 
1258 // ------------ method called once each job just before starting event loop ------------
1259 void
1261 {
1262  //GMA Nevents = 0;
1263  //GMA Npass = 0;
1264  //GMA Noccu = 0;
1265 
1266  irunold = -1;
1267  nRuns = 0;
1268  // edm::ESHandle<MagneticField> bField;
1269  // iSetup.get<IdealMagneticFieldRecord>().get(bField);
1270  // stepProp = new SteppingHelixPropagator(&*bField,anyDirection);
1271  // stepProp->setMaterialMode(false);
1272  // stepProp->applyRadX0Correction(true);
1273 
1274  for (int i=0; i<netamx; i++) {
1275  for (int j=0; j<nphimx; j++) {
1276  for (int k=0; k<ncidmx; k++) {
1277  pedestal[i][j][k]=0.0;
1278  }
1279  }
1280  }
1281 
1282 
1283 }
1284 
1285 // ------------ method called once each job just after ending the event loop ------------
1286 void
1288 
1289 
1290 }
1291 
1292 void AlCaHOCalibProducer::findHOEtaPhi(int iphisect, int& ietaho, int& iphiho) {
1293 
1294  //18/12/06 : use only position, not angle phi
1295 
1296 double etalow[netabin]={ 0.025, 35.195, 70.625, 106.595, 141.565, 180.765, 220.235, 261.385, 304.525, 349.975, 410.025, 452.085, 506.645, 565.025, 627.725, 660.25};
1297 double etahgh[netabin]={ 35.145, 70.575, 106.545, 125.505, 180.715, 220.185, 261.335, 304.475, 349.925, 392.575, 452.035, 506.595, 564.975, 627.675, 661.075, 700.25};
1298 
1299  double philow[6]={-76.27, -35.11, 0.35, 35.81, 71.77, 108.93}; //Ring+/-1 & 2
1300  double phihgh[6]={-35.81, -0.35, 35.11, 71.07, 108.23, 140.49};
1301 
1302  double philow00[6]={-60.27, -32.91, 0.35, 33.61, 67.37, 102.23}; //Ring0 L0
1303  double phihgh00[6]={-33.61, -0.35, 32.91, 66.67, 101.53, 129.49};
1304 
1305  double philow01[6]={-64.67, -34.91, 0.35, 35.61, 71.37, 108.33}; //Ring0 L1
1306  double phihgh01[6]={-35.61, -0.35, 34.91, 70.67, 107.63, 138.19};
1307 
1308 
1309  iring = -10;
1310 
1311  double tmpdy = std::abs(yhor1);
1312  for (int i=0; i<netabin; i++) {
1313  if (tmpdy >etalow[i] && tmpdy <etahgh[i]) {
1314  ietaho = i+1;
1315  float tmp1 = fabs(tmpdy-etalow[i]);
1316  float tmp2 = fabs(tmpdy-etahgh[i]);
1317 
1318  localyhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
1319 
1320  if (i<4) iring =0;
1321  if (i>=4 && i<10) iring=1;
1322  if (i>=10 && i<netabin) iring=2;
1323  break;
1324  }
1325  }
1326 
1327  int tmpphi = 0;
1328  int tmpphi0 = 0;
1329 
1330  if (ietaho >4) { //Ring 1 and 2
1331  for (int i=0; i<6; i++) {
1332  if (xhor1 >philow[i] && xhor1 <phihgh[i]) {
1333  tmpphi=i+1;
1334  float tmp1 = fabs(xhor1-philow[i]);
1335  float tmp2 = fabs(xhor1-phihgh[i]);
1336  localxhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
1337  break;
1338  }
1339  }
1340  } else { //Ring 0
1341  for (int i=0; i<6; i++) {
1342  if (xhor1 >philow01[i] && xhor1 <phihgh01[i]) {
1343  tmpphi=i+1;
1344  float tmp1 = fabs(xhor1-philow01[i]);
1345  float tmp2 = fabs(xhor1-phihgh01[i]);
1346  localxhor1 = (tmp1 < tmp2) ? -tmp1 : tmp2;
1347  break;
1348  }
1349  }
1350 
1351  for (int i=0; i<6; i++) {
1352  if (xhor0 >philow00[i] && xhor0 <phihgh00[i]) {
1353  tmpphi0=i+1;
1354  float tmp1 = fabs(xhor0-philow00[i]);
1355  float tmp2 = fabs(xhor0-phihgh00[i]);
1356  localxhor0 = (tmp1 < tmp2) ? -tmp1 : tmp2;
1357  if (tmpphi !=tmpphi0) localxhor0 +=10000.;
1358  break;
1359  }
1360  }
1361 
1362  double tmpdy = std::abs(yhor0);
1363  for (int i=0; i<4; i++) {
1364  if (tmpdy >etalow[i] && tmpdy <etahgh[i]) {
1365  float tmp1 = fabs(tmpdy-etalow[i]);
1366  float tmp2 = fabs(tmpdy-etahgh[i]);
1367  localyhor0 = (tmp1 < tmp2) ? -tmp1 : tmp2;
1368  if (i+1 != ietaho) localyhor0 +=10000.;
1369  break;
1370  }
1371  }
1372  }
1373 
1374  if (tmpphi!=0) {
1375  iphiho = 6*iphisect -2 + tmpphi;
1376  if (iphiho <=0) iphiho +=nphimx;
1377  if (iphiho >nphimx) iphiho -=nphimx;
1378  }
1379 
1380  // isect2 = 15*iring+iphisect+1;
1381 
1382  if (yhor1 <0) {
1383  if (std::abs(ietaho) >netabin) { //Initialised with 50
1384  ietaho +=1;
1385  } else {
1386  ietaho *=-1;
1387  }
1388  // isect2 *=-1;
1389  iring *=-1;
1390  }
1391 }
1392 
1394 {
1395 
1396  if (iiner ==0) {
1397  GlobalPoint gpos( tk.outerX(), tk.outerY(), tk.outerZ());
1398  GlobalVector gmom( tk.outerPx(), tk.outerPy(), tk.outerPz());
1399  if (dir) gmom *=-1.;
1400  GlobalTrajectoryParameters par( gpos, gmom, tk.charge(), field);
1401  CurvilinearTrajectoryError err( tk.extra()->outerStateCovariance());
1402  return FreeTrajectoryState( par, err);
1403  } else {
1404  GlobalPoint gpos( tk.innerPosition().X(), tk.innerPosition().Y(), tk.innerPosition().Z());
1405  GlobalVector gmom( tk.innerMomentum().X(), tk.innerMomentum().Y(), tk.innerMomentum().Z());
1406  if (dir) gmom *=-1.;
1407  GlobalTrajectoryParameters par( gpos, -gmom, tk.charge(), field);
1408  CurvilinearTrajectoryError err( tk.extra()->innerStateCovariance());
1409  return FreeTrajectoryState( par, err);
1410  }
1411 
1412 }
1413 
1415 
1416 //define this as a plug-in
1418 
RunNumber_t run() const
Definition: EventID.h:42
T getParameter(std::string const &) const
Basic3DVector< float > DirectionType
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
TProfile * hopeak[ntrgp_gm+1]
FreeTrajectoryState getFreeTrajectoryState(const reco::Track &tk, const MagneticField *field, int itag, bool dir)
const int netabin
double outerPy() const
y coordinate of momentum vector at the outermost hit position
Definition: Track.h:73
const TrackExtraRef & extra() const
reference to &quot;extra&quot; object
Definition: Track.h:97
HcalCalibrations calibped
const int ncidmx
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
ReturnType plane(const PositionType &pos, const RotationType &rot) const
Definition: PlaneBuilder.h:22
std::vector< T >::const_iterator const_iterator
edm::ESHandle< HcalDbService > conditions_
T y() const
Definition: PV3DBase.h:62
#define abs(x)
Definition: mlp_lapack.h:159
std::map< std::string, bool > fired
#define min(a, b)
Definition: mlp_lapack.h:161
ErrorD< N >::type type
Definition: Error.h:30
double pedestal(int fCapId) const
get pedestal for capid=0..3
Geom::Phi< T > phi() const
const HcalQIEShape * m_shape
virtual void produce(edm::Event &, const edm::EventSetup &)
GlobalVector momentum() const
void findHOEtaPhi(int iphsect, int &ietaho, int &iphiho)
double charge(const std::vector< uint8_t > &Ampls)
Definition: Plane.h:17
void beginJob()
Definition: Breakpoints.cc:15
double outerZ() const
z coordinate of the outermost hit position
Definition: Track.h:81
static const unsigned int nL1mx
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:42
const int netahbmx
const HcalQIECoder * m_coder
int iEvent
Definition: GenABIO.cc:243
const T & max(const T &a, const T &b)
void applyRadX0Correction(bool applyRadX0Correction)
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
float energy() const
Definition: CaloRecHit.h:19
GlobalPoint position() const
T sqrt(T t)
Definition: SSEVec.h:46
static const unsigned int nL1trg
Basic3DVector< float > RotationType
Vector3DBase< typename PreciseFloatType< T, U >::Type, FrameTag > cross(const Vector3DBase< U, FrameTag > &v) const
Definition: Vector3DBase.h:119
T z() const
Definition: PV3DBase.h:63
const int nsigpk
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
int ieta() const
get the cell ieta
Definition: HcalDetId.h:38
math::Error< 5 >::type CovarianceMatrix
int j
Definition: DBlmapReader.cc:9
Basic3DVector< float > PositionType
const int nstrbn
double outerX() const
x coordinate of the outermost hit position
Definition: Track.h:77
const int ntrgp_gm
virtual TrajectoryStateOnSurface propagate(const FreeTrajectoryState &ftsStart, const Plane &pDest) const
Propagate to Plane given a starting point.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
float pedestal[netamx][nphimx][ncidmx]
double outerPz() const
z coordinate of momentum vector at the outermost hit position
Definition: Track.h:75
int k[5][pyjets_maxn]
int iphi() const
get the cell iphi
Definition: HcalDetId.h:40
TH1F * Nhotime[ntrgp_gm+1]
const T & get() const
Definition: EventSetup.h:55
std::vector< HOCalibVariables > HOCalibVariableCollection
collection of HOcalibration variabale
std::string const & label() const
Definition: InputTag.h:25
edm::EventID id() const
Definition: EventBase.h:56
AlCaHOCalibProducer(const edm::ParameterSet &)
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
const int nphimx
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:45
const int netamx
double outerY() const
y coordinate of the outermost hit position
Definition: Track.h:79
T * make() const
make new ROOT object
HcalCalibrationWidths calibwidth
int charge() const
track electric charge
Definition: TrackBase.h:113
const int nchnmx
TH1F * hotime[ntrgp_gm+1]
dbl *** dir
Definition: mlp_gen.cc:35
T x() const
Definition: PV3DBase.h:61
const int netahb3mx
static const unsigned int nHLTmx
void setMaterialMode(bool noMaterial)
Switch for material effects mode: no material effects if true.
HcalDetId id() const
get the id
Definition: HORecHit.h:21
double outerPx() const
x coordinate of momentum vector at the outermost hit position
Definition: Track.h:71
math::Error< dimension >::type CovarianceMatrix
5 parameter covariance matrix
Definition: TrackBase.h:72
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
float charge(const HcalQIEShape &fShape, unsigned fAdc, unsigned fCapId) const
ADC [0..127] + capid [0..3] -&gt; fC conversion.
Definition: HcalQIECoder.cc:22