Fork me on GitHub

Changeset 310 in svn for trunk/Delphes.cpp


Ignore:
Timestamp:
Mar 10, 2009, 11:52:16 AM (16 years ago)
Author:
severine ovyn
Message:

add Ehad/Eem

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Delphes.cpp

    r307 r310  
    2323**         Center for Particle Physics and Phenomenology (CP3)        **
    2424**                Universite catholique de Louvain (UCL)              **       
    25 **                     Louvain-la-Neuve, Belgium                      **            
     25**                     Louvain-la-Neuve, Belgium                      **       
    2626**                                                                    **
    2727**                      Copyright (C) 2008-2009,                      **
     
    326326  vector<int> NTrackJet;
    327327
    328   bool FLAG_lhco = true;
    329  
    330328  TSimpleArray<TRootGenParticle> NFCentralQ;
    331329 
     
    380378      input_particles.clear();
    381379      NTrackJet.clear();     
    382  
    383       {
    384         D_CaloTowerList list_of_active_towers;
    385         D_CaloTowerList list_of_towers_with_photon; // to speed up the code: will only look in interesting towers for gamma candidates
    386        
    387         // 2.1a Loop over all particles in event, to fill the towers
    388         itGen.Reset();
    389         GenParticle *particleG;
    390         while( (particleG = (GenParticle*) itGen.Next()) ) {
    391          
     380     
     381     
     382      D_CaloTowerList list_of_active_towers;
     383      D_CaloTowerList list_of_towers_with_photon; // to speed up the code: will only look in interesting towers for gamma candidates
     384       
     385     
     386      // 2.1a Loop over all particles in event, to fill the towers
     387      itGen.Reset();
     388      GenParticle *particleG;
     389      while( (particleG = (GenParticle*) itGen.Next()) )
     390        {
    392391          TRootGenParticle *particle = new TRootGenParticle(particleG);
    393392          int pid = abs(particle->PID);
     
    402401              fabs(particle->Eta) < DET->CEN_max_tracker &&
    403402              particle->Status != 1 &&
    404               particle->PT > DET->PT_QUARKS_MIN ) {
    405             NFCentralQ.Add(particle);
    406           }
     403              particle->PT > DET->PT_QUARKS_MIN )
     404            {
     405              NFCentralQ.Add(particle);
     406            }
    407407         
    408408          // 2.1a.2********************* visible particles only
    409           if( (particle->Status == 1) && (pid != pNU1) && (pid != pNU2) && (pid != pNU3) ){
     409          if( (particle->Status == 1) && (pid != pNU1) && (pid != pNU2) && (pid != pNU3) )
     410            {
     411              // 2.1a.2.1 Central solenoidal magnetic field
     412              TRACP->bfield(particle); // fills in particle->EtaCalo et particle->PhiCalo
     413              // 2.1a.2.2 Filling the calorimetric towers -- includes also forward detectors ?
     414              // first checks if the charged particles reach the calo!
     415              if( DET->FLAG_bfield ||
     416                  particle->Charge==0 ||
     417                  (!DET->FLAG_bfield && particle->Charge!=0 && particle->PT > DET->TRACK_ptmin))
     418                if(
     419                   (particle->EtaCalo > list_of_calorimeters.getEtamin() ) &&
     420                   (particle->EtaCalo < list_of_calorimeters.getEtamax() )
     421                   )
     422                  {
     423                    float iEta=UNDEFINED, iPhi=UNDEFINED;
     424                    DET->BinEtaPhi(particle->PhiCalo,particle->EtaCalo,iPhi,iEta); // fills in iPhi and iEta
     425                    if (iEta != UNDEFINED && iPhi != UNDEFINED)
     426                      {
     427                        D_CaloTower tower(iEta,iPhi);                                  // new tower
     428                        tower.Set_Eem_Ehad_E_ET(particle->E*particle->getFem() , particle->E*particle->getFhad() );
     429                        list_of_active_towers.addTower(tower);
     430                        // this list may contain several times the same calotower, as several particles
     431                        // may leave some energy in the same calotower
     432                        // After the loop on particles, identical cells in the list should be merged
     433                      } // iEta and iPhi must be defined
     434                  }
    410435           
    411             // 2.1a.2.1 Central solenoidal magnetic field
    412             TRACP->bfield(particle); // fills in particle->EtaCalo et particle->PhiCalo
    413             // 2.1a.2.2 Filling the calorimetric towers -- includes also forward detectors ?
    414             // first checks if the charged particles reach the calo!
    415             if( DET->FLAG_bfield ||
    416                 particle->Charge==0 ||
    417                 (!DET->FLAG_bfield && particle->Charge!=0 && particle->PT > DET->TRACK_ptmin))
    418               if(
    419                  (particle->EtaCalo > list_of_calorimeters.getEtamin() ) &&
    420                  (particle->EtaCalo < list_of_calorimeters.getEtamax() )
    421                  ) {
    422                 float iEta=UNDEFINED, iPhi=UNDEFINED;
    423                 DET->BinEtaPhi(particle->PhiCalo,particle->EtaCalo,iPhi,iEta); // fills in iPhi and iEta
    424                 if (iEta != UNDEFINED && iPhi != UNDEFINED)
    425                   {
    426                     D_CaloTower tower(iEta,iPhi);                                      // new tower
    427                     tower.Set_Eem_Ehad_E_ET(particle->E*particle->getFem() , particle->E*particle->getFhad() );
    428                    
    429                     list_of_active_towers.addTower(tower);
    430                     // this list may contain several times the same calotower, as several particles
    431                     // may leave some energy in the same calotower
    432                     // After the loop on particles, identical cells in the list should be merged
    433                   } // iEta and iPhi must be defined
    434               }
     436              // 2.1a.2.3 charged particles in tracker: energy flow
     437              // if bfield not simulated, pt should be high enough to be taken into account
     438              // it is supposed here that DET->MAX_calo > DET->CEN_max_tracker > DET->CEN_max_mu > 0
     439              if( particle->Charge !=0 &&
     440                  fabs(particle->EtaCalo)< DET->CEN_max_tracker && // stays in the tracker -> track available
     441                  ( DET->FLAG_bfield ||
     442                    (!DET->FLAG_bfield && particle->PT > DET->TRACK_ptmin)
     443                    )
     444                  )
     445                {       
     446                  // 2.1a.2.3.1 Filling the particle properties + smearing
     447                  // Hypothesis: the final eta/phi are the ones from the generator, thanks to the track reconstruction
     448                  // This is the EnergyFlow hypothesis
     449                  particle->SetEtaPhi(particle->Eta,particle->Phi);
     450                  float sET=UNDEFINED; // smeared ET, computed from the smeared E -> needed for the tracks
     451                 
     452                  // 2.1a.2.3.2 Muons
     453                  if (pid == pMU && fabs(particle->EtaCalo)< DET->CEN_max_mu)
     454                    {
     455                      TLorentzVector p;
     456                      float sPT = gRandom->Gaus(particle->PT, DET->MU_SmearPt*particle->PT );
     457                      if (sPT > 0 && sPT > DET->PTCUT_muon)
     458                        {
     459                          p.SetPtEtaPhiE(sPT,particle->Eta,particle->Phi,sPT*cosh(particle->Eta));
     460                          muon.push_back(D_Particle(p,pMU,particle->EtaCalo,particle->PhiCalo));
     461                        }
     462                      sET = (sPT >0)? sPT : 0;
     463                    } 
     464                  // 2.1a.2.3.3 Electrons
     465                  else if (pid == pE)
     466                    {
     467                      // Finds in which calorimeter the particle has gone, to know its resolution
     468                     
     469                      D_CaloElement currentCalo = list_of_calorimeters.getElement(particle->EtaCalo);
     470                      if(currentCalo.getName() == dummyCalo.getName())
     471                        {
     472                          cout << "** Warning: the calo coverage behind the tracker is not complete! **" << endl;
     473                        }
     474                     
     475                      // final smeared EM energy   // electromagnetic fraction F_em =1 for electrons;
     476                      float sE  = currentCalo.getElectromagneticResolution().Smear(particle->E);
     477                      if (sE>0)
     478                        {
     479                          sET = sE/cosh(particle->Eta);
     480                          // NB: ET is found via the calorimetry and not via the track curvature
     481                         
     482                          TLorentzVector p;
     483                          p.SetPtEtaPhiE(sET,particle->Eta,particle->Phi,sE);
     484                          if (sET > DET->PTCUT_elec)
     485                            electron.push_back(D_Particle(p,particle->PID,particle->EtaCalo,particle->PhiCalo));
     486                        }
     487                      else { sET=0;} // if negative smeared energy -- needed for the tracks
     488                    } 
     489                  // 2.1a.2.3.4 Other charged particles : smear them for the tracks!
     490                  else
     491                    {  //other particles
     492                      D_CaloElement currentCalo = list_of_calorimeters.getElement(particle->EtaCalo);
     493                      float sEem  = currentCalo.getElectromagneticResolution().Smear(particle->E * particle->getFem());
     494                      float sEhad = currentCalo.getHadronicResolution().Smear(particle->E * particle->getFhad());
     495                      float sE = ( (sEem>0)? sEem : 0 ) + ( (sEhad>0)? sEhad : 0 );
     496                      sET = sE/cosh(particle->EtaCalo);
     497                    }
     498             
     499                  // 2.1a.2.3.5 Tracks
     500                  if( (rand()%100) < DET->TRACK_eff && sET!=0)
     501                    {
     502                      elementTrack = (TRootTracks*) branchTrack->NewEntry();
     503                      elementTrack->Set(particle->Eta, particle->Phi, particle->EtaCalo, particle->PhiCalo, sET, particle->Charge);
     504                      TrackCentral.push_back(*elementTrack); // tracks at vertex!
     505                      // TODO!!! apply a smearing on the position of the origin of the track
     506                      // TODO!!! elementTracks->SetPositionOut(Xout,Yout,Zout);
     507                    }
     508                } // 2.1a.2.3 : if tracker/energy-flow
     509              // 2.1a.2.4 Photons
     510              // stays in the tracker -> track available -> gamma ID
     511              else if( (pid == pGAMMA) && fabs(particle->EtaCalo)< DET->CEN_max_tracker )
     512                {
     513                  float iEta=UNDEFINED, iPhi=UNDEFINED;
     514                  DET->BinEtaPhi(particle->PhiCalo,particle->EtaCalo,iPhi,iEta); // fills in iPhi and iEta
     515                  D_CaloTower tower(iEta,iPhi);
     516                  // stores the list of towers where to apply the photon ID algorithm. Just a trick for a faster search
     517                  list_of_towers_with_photon.addTower(tower);
     518                }
     519              // 2.1a.2.5 : very forward detectors
     520              else
     521                {
     522                  if (DET->FLAG_RP==1)
     523                    {
     524                      // for the moment, only protons are transported
     525                      // BUT !!! could be a beam of other particles! (heavy ions?)
     526                      // BUT ALSO !!! if very forward muons, or others!
     527                      VFD->RomanPots(treeWriter,branchRP220,branchFP420,particle);
     528                    }
     529                  // 2.1a.2.6: Zero degree calorimeter
     530                  if(DET->FLAG_vfd==1)
     531                    {
     532                      VFD->ZDC(treeWriter,branchZDC,particle);
     533                    }
     534                }
    435535           
    436             // 2.1a.2.3 charged particles in tracker: energy flow
    437             // if bfield not simulated, pt should be high enough to be taken into account
    438             // it is supposed here that DET->MAX_calo > DET->CEN_max_tracker > DET->CEN_max_mu > 0
    439             if( particle->Charge !=0 &&
    440                 fabs(particle->EtaCalo)< DET->CEN_max_tracker && // stays in the tracker -> track available
    441                 ( DET->FLAG_bfield ||
    442                   (!DET->FLAG_bfield && particle->PT > DET->TRACK_ptmin)
    443                   )
    444                 ) {     
    445               // 2.1a.2.3.1 Filling the particle properties + smearing
    446               // Hypothesis: the final eta/phi are the ones from the generator, thanks to the track reconstruction
    447               // This is the EnergyFlow hypothesis
    448               particle->SetEtaPhi(particle->Eta,particle->Phi);
    449               float sET=UNDEFINED; // smeared ET, computed from the smeared E -> needed for the tracks
    450              
    451               // 2.1a.2.3.2 Muons
    452               if (pid == pMU && fabs(particle->EtaCalo)< DET->CEN_max_mu) {
    453                 TLorentzVector p;
    454                 float sPT = gRandom->Gaus(particle->PT, DET->MU_SmearPt*particle->PT );
    455                 if (sPT > 0 && sPT > DET->PTCUT_muon) {
    456                   p.SetPtEtaPhiE(sPT,particle->Eta,particle->Phi,sPT*cosh(particle->Eta));
    457                   muon.push_back(D_Particle(p,pMU,particle->EtaCalo,particle->PhiCalo));
    458                 }
    459                 sET = (sPT >0)? sPT : 0;
    460               } 
    461               // 2.1a.2.3.3 Electrons
    462               else if (pid == pE) {
    463                 // Finds in which calorimeter the particle has gone, to know its resolution
    464                
    465                 D_CaloElement currentCalo = list_of_calorimeters.getElement(particle->EtaCalo);
    466                 if(currentCalo.getName() == dummyCalo.getName()) {
    467                   cout << "** Warning: the calo coverage behind the tracker is not complete! **" << endl; }
    468                
    469                 // final smeared EM energy   // electromagnetic fraction F_em =1 for electrons;
    470                 float sE  = currentCalo.getElectromagneticResolution().Smear(particle->E);
    471                 if (sE>0) {
    472                   sET = sE/cosh(particle->Eta);
    473                   // NB: ET is found via the calorimetry and not via the track curvature
    474                  
    475                   TLorentzVector p;
    476                   p.SetPtEtaPhiE(sET,particle->Eta,particle->Phi,sE);
    477                   if (sET > DET->PTCUT_elec)
    478                     electron.push_back(D_Particle(p,particle->PID,particle->EtaCalo,particle->PhiCalo));
    479                 } else { sET=0;} // if negative smeared energy -- needed for the tracks
    480               } 
    481               // 2.1a.2.3.4 Other charged particles : smear them for the tracks!
    482               else {  //other particles
    483                 D_CaloElement currentCalo = list_of_calorimeters.getElement(particle->EtaCalo);
    484                 float sEem  = currentCalo.getElectromagneticResolution().Smear(particle->E * particle->getFem());
    485                 float sEhad = currentCalo.getHadronicResolution().Smear(particle->E * particle->getFhad());
    486                 float sE = ( (sEem>0)? sEem : 0 ) + ( (sEhad>0)? sEhad : 0 );
    487                 sET = sE/cosh(particle->EtaCalo);
    488               }
    489              
    490               // 2.1a.2.3.5 Tracks
    491               if( (rand()%100) < DET->TRACK_eff && sET!=0) {
    492                 elementTrack = (TRootTracks*) branchTrack->NewEntry();
    493                 elementTrack->Set(particle->Eta, particle->Phi, particle->EtaCalo, particle->PhiCalo, sET, particle->Charge);
    494                 //TrackCentral.push_back(elementTrack->GetFourVector()); // tracks at vertex!
    495                 TrackCentral.push_back(*elementTrack); // tracks at vertex!
    496                 // TODO!!! apply a smearing on the position of the origin of the track
    497                 // TODO!!! elementTracks->SetPositionOut(Xout,Yout,Zout);
    498               }
    499             } // 2.1a.2.3 : if tracker/energy-flow
    500             // 2.1a.2.4 Photons
    501             // stays in the tracker -> track available -> gamma ID
    502             else if( (pid == pGAMMA) && fabs(particle->EtaCalo)< DET->CEN_max_tracker ) {
    503               float iEta=UNDEFINED, iPhi=UNDEFINED;
    504               DET->BinEtaPhi(particle->PhiCalo,particle->EtaCalo,iPhi,iEta); // fills in iPhi and iEta
    505               D_CaloTower tower(iEta,iPhi);
    506               // stores the list of towers where to apply the photon ID algorithm. Just a trick for a faster search
    507               list_of_towers_with_photon.addTower(tower);
    508             }
    509             // 2.1a.2.5 : very forward detectors
    510             else
    511               {
    512                 if (DET->FLAG_RP==1) {
    513                   // for the moment, only protons are transported
    514                   // BUT !!! could be a beam of other particles! (heavy ions?)
    515                   // BUT ALSO !!! if very forward muons, or others!
    516                   VFD->RomanPots(treeWriter,branchRP220,branchFP420,particle);
    517                 }
    518                 // 2.1a.2.6: Zero degree calorimeter
    519                 if(DET->FLAG_vfd==1) {
    520                   VFD->ZDC(treeWriter,branchZDC,particle);
    521                 }
    522               }
    523            
    524           } // 2.1a.2 : if visible particle
     536            } // 2.1a.2 : if visible particle
    525537          delete particle;
    526         } // loop on all particles 2.1a
    527        
    528        
    529         // 2.1b loop on all (activated) towers
    530         // at this stage, list_of_active_towers may contain several times the same tower
    531         // first step is to merge identical towers, by matching their (iEta,iPhi) 
    532         list_of_active_towers.mergeDuplicates();
    533         // Calotower smearing
    534         list_of_active_towers.smearTowers(list_of_calorimeters);
    535        
    536         for(unsigned int i=0; i<list_of_active_towers.size(); i++) {
     538        }// loop on all particles 2.1a
     539     
     540     
     541      // 2.1b loop on all (activated) towers
     542      // at this stage, list_of_active_towers may contain several times the same tower
     543      // first step is to merge identical towers, by matching their (iEta,iPhi) 
     544     
     545      list_of_active_towers.sortElements();
     546      list_of_active_towers.mergeDuplicates();
     547     
     548      // Calotower smearing
     549      list_of_active_towers.smearTowers(list_of_calorimeters);
     550     
     551      for(unsigned int i=0; i<list_of_active_towers.size(); i++)
     552        {
    537553          float iEta = list_of_active_towers[i].getEta();
    538554          float iPhi = list_of_active_towers[i].getPhi();
    539555          float e = list_of_active_towers[i].getE();
    540           if(iEta != UNDEFINED && iPhi != UNDEFINED && e!=0) {
    541             elementCalo = (TRootCalo*) branchCalo->NewEntry();
    542             elementCalo->set(list_of_active_towers[i]);
    543             // not beautiful : should be improved!
    544             TLorentzVector p;
    545             p.SetPtEtaPhiE(list_of_active_towers[i].getET(), iEta, iPhi, e );
    546             PhysicsTower Tower(LorentzVector(p.Px(),p.Py(),p.Pz(),p.E()));
    547             towers.push_back(Tower);
    548           }
     556          if(iEta != UNDEFINED && iPhi != UNDEFINED && e!=0)
     557            {
     558              elementCalo = (TRootCalo*) branchCalo->NewEntry();
     559              elementCalo->set(list_of_active_towers[i]);
     560              // not beautiful : should be improved!
     561              TLorentzVector p;
     562              p.SetPtEtaPhiE(list_of_active_towers[i].getET(), iEta, iPhi, e );
     563              PhysicsTower Tower(LorentzVector(p.Px(),p.Py(),p.Pz(),p.E()));
     564              towers.push_back(Tower);
     565            }
    549566        } // loop on towers
    550        
    551         // 2.1c photon ID
    552         // list_of_towers_with_photon is the list of towers with photon candidates
    553         // already smeared !
    554         // sorts the vector and smears duplicates
    555         list_of_towers_with_photon.mergeDuplicates();
    556        
    557         for(unsigned int i=0; i<list_of_towers_with_photon.size(); i++) {
     567     
     568          // 2.1c photon ID
     569          // list_of_towers_with_photon is the list of towers with photon candidates
     570          // already smeared !
     571          // sorts the vector and smears duplicates
     572      list_of_towers_with_photon.mergeDuplicates();
     573     
     574      for(unsigned int i=0; i<list_of_towers_with_photon.size(); i++)
     575        {
    558576          float eta = list_of_towers_with_photon[i].getEta();
    559577          float phi = list_of_towers_with_photon[i].getPhi();
    560578          D_CaloTower cal(list_of_active_towers.getElement(eta,phi));
    561           if(cal.getEta() != UNDEFINED && cal.getPhi() != UNDEFINED &&  cal.getE() > 0) {
    562             TLorentzVector p;
    563             p.SetPtEtaPhiE(cal.getET(), eta,phi,cal.getE() );
    564             if (cal.getET() > DET->PTCUT_gamma) { gamma.push_back(D_Particle(p,pGAMMA,p.Eta(),p.Phi())); }
    565           }
     579          if(cal.getEta() != UNDEFINED && cal.getPhi() != UNDEFINED &&  cal.getE() > 0)
     580            {
     581              TLorentzVector p;
     582              p.SetPtEtaPhiE(cal.getET(), eta,phi,cal.getE() );
     583              if (cal.getET() > DET->PTCUT_gamma) { gamma.push_back(D_Particle(p,pGAMMA,p.Eta(),p.Phi())); }
     584            }
    566585        } // for -- list of photons
    567        
    568       }  // IF NEW ALGORITHM with energy flow
    569      
    570      
    571      
    572586     
    573587      // 2.2 ********** Output preparation & complex objects  ***********
    574588      // 2.2.1 ********************* sorting collections by decreasing pt
    575589      DET->SortedVector(electron);
    576       for(unsigned int i=0; i < electron.size(); i++) {
    577         elementElec = (TRootElectron*) branchElectron->NewEntry();
    578         elementElec->Set(electron[i].Px(),electron[i].Py(),electron[i].Pz(),electron[i].E());
    579         elementElec->EtaCalo = electron[i].EtaCalo();
    580         elementElec->PhiCalo = electron[i].PhiCalo();
    581         elementElec->Charge = sign(electron[i].PID());
    582         elementElec->IsolFlag = DET->Isolation(electron[i].Phi(),electron[i].Eta(),TrackCentral,DET->ISOL_PT,DET->ISOL_Cone);//isolation based on tracks
    583       }                                                                                 /////////////// HARDCODING
     590      for(unsigned int i=0; i < electron.size(); i++)
     591        {
     592          elementElec = (TRootElectron*) branchElectron->NewEntry();
     593          elementElec->Set(electron[i].Px(),electron[i].Py(),electron[i].Pz(),electron[i].E());
     594          elementElec->EtaCalo = electron[i].EtaCalo();
     595          elementElec->PhiCalo = electron[i].PhiCalo();
     596          elementElec->Charge = sign(electron[i].PID());
     597          elementElec->IsolFlag = DET->Isolation(electron[i].Phi(),electron[i].Eta(),TrackCentral,DET->ISOL_PT,DET->ISOL_Cone);//isolation based on tracks
     598         
     599          D_CaloTower calElec(list_of_active_towers.getElement(electron[i].EtaCalo(),electron[i].PhiCalo()));
     600          elementElec->EHoverEE = calElec.getEhad()/calElec.getEem();
     601        }                                                                                       /////////////// HARDCODING
     602     
    584603      DET->SortedVector(muon);
    585       for(unsigned int i=0; i < muon.size(); i++) {
    586         elementMu = (TRootMuon*) branchMuon->NewEntry();
    587         elementMu->Charge = sign(muon[i].PID());
    588         elementMu->Set(muon[i].Px(),muon[i].Py(),muon[i].Pz(),muon[i].E());
    589         elementMu->EtaCalo = muon[i].EtaCalo();
    590         elementMu->PhiCalo = muon[i].PhiCalo();
    591         elementMu->IsolFlag = DET->Isolation(muon[i].Phi(),muon[i].Eta(),TrackCentral,DET->ISOL_PT,DET->ISOL_Cone); /////////////// HARDCODING
    592       }
     604      for(unsigned int i=0; i < muon.size(); i++)
     605        {
     606          elementMu = (TRootMuon*) branchMuon->NewEntry();
     607          elementMu->Charge = sign(muon[i].PID());
     608          elementMu->Set(muon[i].Px(),muon[i].Py(),muon[i].Pz(),muon[i].E());
     609          elementMu->EtaCalo = muon[i].EtaCalo();
     610          elementMu->PhiCalo = muon[i].PhiCalo();
     611          elementMu->IsolFlag = DET->Isolation(muon[i].Phi(),muon[i].Eta(),TrackCentral,DET->ISOL_PT,DET->ISOL_Cone); /////////////// HARDCODING
     612          D_CaloTower calMuon(list_of_active_towers.getElement(muon[i].EtaCalo(),muon[i].PhiCalo()));
     613          elementMu->EHoverEE = calMuon.getEhad()/calMuon.getEem();
     614        }
     615
    593616      DET->SortedVector(gamma);
    594       for(unsigned int i=0; i < gamma.size(); i++) {
    595         elementPhoton = (TRootPhoton*) branchPhoton->NewEntry();
    596         elementPhoton->Set(gamma[i].Px(),gamma[i].Py(),gamma[i].Pz(),gamma[i].E());
    597       }
     617      for(unsigned int i=0; i < gamma.size(); i++)
     618        {
     619          elementPhoton = (TRootPhoton*) branchPhoton->NewEntry();
     620          elementPhoton->Set(gamma[i].Px(),gamma[i].Py(),gamma[i].Pz(),gamma[i].E());
     621          D_CaloTower calGamma(list_of_active_towers.getElement(gamma[i].EtaCalo(),gamma[i].PhiCalo()));
     622          elementPhoton->EHoverEE = calGamma.getEhad()/calGamma.getEem();
     623        }
    598624     
    599625      // 2.2.2 ************* computes the Missing Transverse Momentum
     
    617643     
    618644      // 2.2.3 ************* jets, B-tag, tau jets
    619       vector<int> NTrackJet;
    620       sorted_jets=JETRUN->RunJets(input_particles, TrackCentral,NTrackJet);
    621       JETRUN->RunJetBtagging(treeWriter, branchJet,sorted_jets,NFCentralQ,NTrackJet);
    622       JETRUN->RunTauJets(treeWriter,branchTauJet,sorted_jets,towers, TrackCentral,NTrackJet);
     645      vector<int> NTrackJet; //for number of tracks
     646      vector<float> EHADEEM; //for energyHad over energyEm
     647      sorted_jets=JETRUN->RunJets(input_particles, TrackCentral,NTrackJet,EHADEEM,list_of_active_towers);
     648      JETRUN->RunJetBtagging(treeWriter, branchJet,sorted_jets,NFCentralQ,NTrackJet,EHADEEM);
     649      JETRUN->RunTauJets(treeWriter,branchTauJet,sorted_jets,towers, TrackCentral,NTrackJet,EHADEEM);
    623650     
    624651      treeWriter->Fill();
    625652    } // 2. Loop over all events ('for' loop)
    626653 
    627  
    628   cout <<"**                                                                 **"<< endl;
    629654  cout <<"**                 Exiting detector simulation...                  **"<< endl;
    630655 
Note: See TracChangeset for help on using the changeset viewer.