Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • modules/Calorimeter.cc

    r839deb7 r38bf1ae  
    142142  }
    143143
    144   // read min E value for timing measurement in ECAL
    145   fTimingEnergyMin = GetDouble("TimingEnergyMin",4.);
    146   // For timing
    147   // So far this flag needs to be false
    148   // Curved extrapolation not supported
    149   fElectronsFromTrack = false;
     144/*
     145  TFractionMap::iterator itFractionMap;
     146  for(itFractionMap = fFractionMap.begin(); itFractionMap != fFractionMap.end(); ++itFractionMap)
     147  {
     148    cout << itFractionMap->first << "   " << itFractionMap->second.first  << "   " << itFractionMap->second.second << endl;
     149  }
     150*/
    150151
    151152  // read min E value for towers to be saved
     
    157158
    158159  // switch on or off the dithering of the center of calorimeter towers
    159   fSmearTowerCenter = GetBool("SmearTowerCenter", true);
     160  fDitherTowerCenter = GetBool("DitherTowerCenter", true);
    160161
    161162  // read resolution formulas
     
    355356      fTrackHCalEnergy = 0.0;
    356357
     358      fTowerECalTime = 0.0;
     359      fTowerHCalTime = 0.0;
     360
     361      fTrackECalTime = 0.0;
     362      fTrackHCalTime = 0.0;
     363
     364      fTowerECalTimeWeight = 0.0;
     365      fTowerHCalTimeWeight = 0.0;
     366
    357367      fTowerTrackHits = 0;
    358368      fTowerPhotonHits = 0;
     
    370380      position = track->Position;
    371381
     382
    372383      ecalEnergy = momentum.E() * fTrackECalFractions[number];
    373384      hcalEnergy = momentum.E() * fTrackHCalFractions[number];
     
    376387      fTrackHCalEnergy += hcalEnergy;
    377388
    378       if(ecalEnergy > fTimingEnergyMin && fTower)
    379       {
    380         if(fElectronsFromTrack)
    381         {
    382           fTower->ECalEnergyTimePairs.push_back(make_pair<Float_t, Float_t>(ecalEnergy, track->Position.T()));
    383         }
    384       }
     389      fTrackECalTime += TMath::Sqrt(ecalEnergy)*position.T();
     390      fTrackHCalTime += TMath::Sqrt(hcalEnergy)*position.T();
     391
     392      fTrackECalTimeWeight += TMath::Sqrt(ecalEnergy);
     393      fTrackHCalTimeWeight += TMath::Sqrt(hcalEnergy);
    385394
    386395      fTowerTrackArray->Add(track);
     
    403412    fTowerHCalEnergy += hcalEnergy;
    404413
    405     if(ecalEnergy > fTimingEnergyMin && fTower)
    406     {
    407       if (abs(particle->PID) != 11 || !fElectronsFromTrack)
    408       {
    409         fTower->ECalEnergyTimePairs.push_back(make_pair<Float_t, Float_t>(ecalEnergy, particle->Position.T()));
    410       }
    411     }
     414    fTowerECalTime += TMath::Sqrt(ecalEnergy)*position.T();
     415    fTowerHCalTime += TMath::Sqrt(hcalEnergy)*position.T();
     416
     417    fTowerECalTimeWeight += TMath::Sqrt(ecalEnergy);
     418    fTowerHCalTimeWeight += TMath::Sqrt(hcalEnergy);
     419
    412420
    413421    fTower->AddCandidate(particle);
     
    426434  Double_t ecalEnergy, hcalEnergy;
    427435  Double_t ecalSigma, hcalSigma;
    428   Float_t weight, sumWeightedTime, sumWeight;
     436  Double_t ecalTime, hcalTime, time;
    429437
    430438  if(!fTower) return;
     
    436444  hcalEnergy = LogNormal(fTowerHCalEnergy, hcalSigma);
    437445
     446  ecalTime = (fTowerECalTimeWeight < 1.0E-09 ) ? 0.0 : fTowerECalTime/fTowerECalTimeWeight;
     447  hcalTime = (fTowerHCalTimeWeight < 1.0E-09 ) ? 0.0 : fTowerHCalTime/fTowerHCalTimeWeight;
     448
    438449  ecalSigma = fECalResolutionFormula->Eval(0.0, fTowerEta, 0.0, ecalEnergy);
    439450  hcalSigma = fHCalResolutionFormula->Eval(0.0, fTowerEta, 0.0, hcalEnergy);
     
    443454
    444455  energy = ecalEnergy + hcalEnergy;
    445 
    446   if(fSmearTowerCenter)
     456  time = (TMath::Sqrt(ecalEnergy)*ecalTime + TMath::Sqrt(hcalEnergy)*hcalTime)/(TMath::Sqrt(ecalEnergy) + TMath::Sqrt(hcalEnergy));
     457
     458  if(fDitherTowerCenter)
    447459  {
    448460    eta = gRandom->Uniform(fTowerEdges[0], fTowerEdges[1]);
     
    457469  pt = energy / TMath::CosH(eta);
    458470
    459   // Time calculation for tower
    460   fTower->NTimeHits = 0;
    461   sumWeightedTime = 0.0;
    462   sumWeight = 0.0;
    463 
    464   for(size_t i = 0; i < fTower->ECalEnergyTimePairs.size(); ++i)
    465   {
    466     weight = TMath::Sqrt(fTower->ECalEnergyTimePairs[i].first);
    467     sumWeightedTime += weight * fTower->ECalEnergyTimePairs[i].second;
    468     sumWeight += weight;
    469     fTower->NTimeHits++;
    470   }
    471 
    472   if(sumWeight > 0.0)
    473   {
    474     fTower->Position.SetPtEtaPhiE(1.0, eta, phi, sumWeightedTime/sumWeight);
    475   }
    476   else
    477   {
    478     fTower->Position.SetPtEtaPhiE(1.0, eta, phi, 999999.9);
    479   }
    480 
    481 
     471  fTower->Position.SetPtEtaPhiE(1.0, eta, phi, time);
    482472  fTower->Momentum.SetPtEtaPhiE(pt, eta, phi, energy);
    483473  fTower->Eem = ecalEnergy;
Note: See TracChangeset for help on using the changeset viewer.