Changes in / [4acf2fd:46d3442] in git
- Files:
-
- 4 deleted
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r4acf2fd r46d3442 412 412 modules/ImpactParameterSmearing.h \ 413 413 modules/TimeSmearing.h \ 414 modules/TimeOfFlight.h \415 414 modules/SimpleCalorimeter.h \ 416 415 modules/DenseTrackFilter.h \ … … 449 448 modules/DecayFilter.h \ 450 449 modules/ParticleDensity.h \ 451 modules/TruthVertexFinder.h \452 450 modules/ExampleModule.h 453 451 tmp/modules/ModulesDict$(PcmSuf): \ … … 1014 1012 classes/DelphesFactory.h \ 1015 1013 classes/DelphesFormula.h 1016 tmp/modules/TimeOfFlight.$(ObjSuf): \1017 modules/TimeOfFlight.$(SrcSuf) \1018 modules/TimeOfFlight.h \1019 classes/DelphesClasses.h \1020 classes/DelphesFactory.h \1021 classes/DelphesFormula.h \1022 external/ExRootAnalysis/ExRootClassifier.h \1023 external/ExRootAnalysis/ExRootFilter.h \1024 external/ExRootAnalysis/ExRootResult.h1025 1014 tmp/modules/TimeSmearing.$(ObjSuf): \ 1026 1015 modules/TimeSmearing.$(SrcSuf) \ … … 1082 1071 external/ExRootAnalysis/ExRootResult.h \ 1083 1072 external/ExRootAnalysis/ExRootTreeBranch.h 1084 tmp/modules/TruthVertexFinder.$(ObjSuf): \1085 modules/TruthVertexFinder.$(SrcSuf) \1086 modules/TruthVertexFinder.h \1087 classes/DelphesClasses.h \1088 classes/DelphesFactory.h \1089 classes/DelphesPileUpReader.h \1090 classes/DelphesTF2.h \1091 external/ExRootAnalysis/ExRootClassifier.h \1092 external/ExRootAnalysis/ExRootFilter.h \1093 external/ExRootAnalysis/ExRootResult.h1094 1073 tmp/modules/UniqueObjectFinder.$(ObjSuf): \ 1095 1074 modules/UniqueObjectFinder.$(SrcSuf) \ … … 1236 1215 tmp/modules/TaggingParticlesSkimmer.$(ObjSuf) \ 1237 1216 tmp/modules/TauTagging.$(ObjSuf) \ 1238 tmp/modules/TimeOfFlight.$(ObjSuf) \1239 1217 tmp/modules/TimeSmearing.$(ObjSuf) \ 1240 1218 tmp/modules/TrackCountingBTagging.$(ObjSuf) \ … … 1244 1222 tmp/modules/TrackSmearing.$(ObjSuf) \ 1245 1223 tmp/modules/TreeWriter.$(ObjSuf) \ 1246 tmp/modules/TruthVertexFinder.$(ObjSuf) \1247 1224 tmp/modules/UniqueObjectFinder.$(ObjSuf) \ 1248 1225 tmp/modules/VertexFinder.$(ObjSuf) \ … … 2090 2067 @touch $@ 2091 2068 2092 modules/TimeOfFlight.h: \2093 classes/DelphesModule.h2094 @touch $@2095 2096 2069 external/fastjet/contribs/Nsubjettiness/NjettinessPlugin.hh: \ 2097 2070 external/fastjet/ClusterSequence.hh \ … … 2212 2185 @touch $@ 2213 2186 2214 modules/TruthVertexFinder.h: \2215 classes/DelphesModule.h2216 @touch $@2217 2218 2187 classes/DelphesSTDHEPReader.h: \ 2219 2188 classes/DelphesXDRReader.h … … 2331 2300 @touch $@ 2332 2301 2302 modules/TimeSmearing.h: \ 2303 classes/DelphesModule.h 2304 @touch $@ 2305 2333 2306 modules/TreeWriter.h: \ 2334 classes/DelphesModule.h2335 @touch $@2336 2337 modules/TimeSmearing.h: \2338 2307 classes/DelphesModule.h 2339 2308 @touch $@ -
cards/delphes_card_IDEA.tcl
r4acf2fd r46d3442 11 11 set B 2.0 12 12 13 ## Drift chamber coordinates14 set DCHZMIN -2.12515 set DCHZMAX 2.12516 set DCHRMIN 0.34517 set DCHRMAX 2.0218 19 20 13 ####################################### 21 14 # Order of execution of various modules … … 23 16 24 17 set ExecutionPath { 25 26 TruthVertexFinder27 18 ParticlePropagator 28 19 … … 34 25 TrackSmearing 35 26 ClusterCounting 36 TimeSmearing37 TimeOfFlight38 27 39 28 TrackMerger … … 72 61 ScalarHT 73 62 TreeWriter 74 }75 76 #################################77 # Truth Vertex Finder78 #################################79 80 module TruthVertexFinder TruthVertexFinder {81 82 ## below this distance two vertices are assumed to be the same83 set Resolution 1E-0684 85 set InputArray Delphes/stableParticles86 set VertexOutputArray vertices87 63 } 88 64 … … 125 101 } 126 102 } 103 104 # (pt <= 0.1) * (0.00) + 105 # (abs(eta) <= 3.0) * (pt > 0.1) * (1.00) + 106 # (abs(eta) > 3) * (0.00) 127 107 128 108 … … 232 212 2 VTXDSK 0.141 0.3 0.92 0.00028 0.0937 2 0 1.5708 7e-006 7e-006 1 233 213 234 1 DCHCANI $DCHZMIN $DCHZMAX $DCHRMIN0.0002 0.237223 0 0 0 0 0 0214 1 DCHCANI -2.125 2.125 0.345 0.0002 0.237223 0 0 0 0 0 0 235 215 1 DCH -2 2 0.36 0.0147748 1400 1 0.0203738 0 0.0001 0 1 236 216 1 DCH -2 2 0.374775 0.0147748 1400 1 -0.0212097 0 0.0001 0 1 … … 345 325 1 DCH -2 2 1.98523 0.0147748 1400 1 0.111898 0 0.0001 0 1 346 326 1 DCH -2 2 2 0.0147748 1400 1 -0.112723 0 0.0001 0 1 347 1 DCHCANO $DCHZMIN $DCHZMAX $DCHRMAX $DCHRMAX0.02 1.667 0 0 0 0 0 0327 1 DCHCANO -2.125 2.125 2.02 0.02 1.667 0 0 0 0 0 0 348 328 1 BSILWRP -2.35 2.35 2.04 0.00047 0.0937 2 0 1.5708 7e-006 9e-005 1 349 329 1 BSILWRP -2.35 2.35 2.06 0.00047 0.0937 2 0 1.5708 7e-006 9e-005 1 350 330 1 MAG -2.5 2.5 2.25 0.05 0.0658 0 0 0 0 0 0 351 331 1 BPRESH -2.55 2.55 2.45 0.02 1 2 0 1.5708 7e-005 0.01 1 352 2 DCHWALL $DCHRMIN $DCHRMAX $DCHZMAX0.25 5.55 0 0 0 0 0 0353 2 DCHWALL $DCHRMIN $DCHRMAX $DCHZMIN0.25 5.55 0 0 0 0 0 0332 2 DCHWALL 0.345 2.02 2.125 0.25 5.55 0 0 0 0 0 0 333 2 DCHWALL 0.345 2.02 -2.125 0.25 5.55 0 0 0 0 0 0 354 334 2 FSILWRP 0.354 2.02 -2.32 0.00047 0.0937 2 0 1.5708 7e-006 9e-005 1 355 335 2 FSILWRP 0.35 2.02 -2.3 0.00047 0.0937 2 0 1.5708 7e-006 9e-005 1 … … 375 355 set Bz $B 376 356 377 ## check that these are consistent with DCHCANI/DCHNANO parameters in TrackCovariance module 378 set Rmin $DCHRMIN 379 set Rmax $DCHRMAX 380 set Zmin $DCHZMIN 381 set Zmax $DCHZMAX 382 383 # gas mix option: 357 set Rmin 0.35 358 set Rmax 2.0 359 set Zmin -2.0 360 set Zmax 2.0 361 362 # gas mix option: 0 384 363 # 0: Helium 90% - Isobutane 10% 385 364 # 1: Helium 100% … … 392 371 393 372 394 ########################################395 # Time Smearing MIP396 ########################################397 398 module TimeSmearing TimeSmearing {399 set TrackInputArray ClusterCounting/tracks400 set OutputArray tracks401 402 # assume constant 30 ps resolution for now403 set TimeResolution {404 (abs(eta) > 0.0 && abs(eta) <= 3.0)* 30E-12405 }406 }407 408 ########################################409 # Time Of Flight Measurement410 ########################################411 412 module TimeOfFlight TimeOfFlight {413 set TrackInputArray TimeSmearing/tracks414 set VertexInputArray TruthVertexFinder/vertices415 416 set OutputArray tracks417 418 # 0: assume vertex time tV from MC Truth (ideal case)419 # 1: assume vertex time tV=0420 # 2: calculate vertex time as vertex TOF, assuming tPV=0421 set VertexTimeMode 2422 423 }424 425 373 426 374 ############## … … 430 378 module Merger TrackMerger { 431 379 # add InputArray InputArray 432 add InputArray TimeOfFlight/tracks380 add InputArray ClusterCounting/tracks 433 381 set OutputArray tracks 434 382 } … … 831 779 832 780 module UniqueObjectFinder UniqueObjectFinder { 833 834 set UseUniqueID true835 781 # earlier arrays take precedence over later ones 836 782 # add InputArray InputArray OutputArray … … 842 788 843 789 790 844 791 ################## 845 792 # ROOT tree writer -
classes/DelphesClasses.cc
r4acf2fd r46d3442 231 231 Xd(0), Yd(0), Zd(0), 232 232 Nclusters(0.0), 233 dNdx(0.0),234 233 TrackResolution(0), 235 234 NCharged(0), … … 409 408 object.Zd = Zd; 410 409 object.Nclusters = Nclusters; 411 object.dNdx = dNdx;412 410 object.TrackResolution = TrackResolution; 413 411 object.NCharged = NCharged; … … 543 541 Zd = 0.0; 544 542 Nclusters = 0.0; 545 dNdx = 0.0;546 543 TrackResolution = 0.0; 547 544 NCharged = 0; -
classes/DelphesClasses.h
r4acf2fd r46d3442 462 462 Float_t DZ; // track longitudinal impact parameter 463 463 Float_t Nclusters; // Number of ionization clusters 464 Float_t dNdx; // Number of ionization clusters465 464 466 465 Float_t ErrorP; // track momentum error … … 568 567 Float_t DZ; // track longitudinal impact parameter 569 568 Float_t Nclusters; // Number of ionization clusters 570 Float_t dNdx; // Number of ionization clusters571 569 572 570 Float_t ErrorP; // track momentum error … … 699 697 700 698 Float_t Nclusters; // Number of ionization clusters 701 Float_t dNdx; // Number of ionization clusters per unit length702 699 703 700 Float_t Xd; -
examples/Example5.C
r4acf2fd r46d3442 37 37 // Load selected branches with data from specified event 38 38 treeReader->ReadEntry(entry); 39 39 40 40 if(entry>10) break; 41 41 42 42 cout<<"" <<endl; 43 43 cout<<"--------- New Event ---------" <<endl; 44 44 cout<<"" <<endl; 45 45 46 46 // loop over all input particles in the event 47 47 for(Int_t i=0; i < branchParticle->GetEntriesFast(); i++) 48 { 49 GenParticle *gen = (GenParticle*) branchParticle->At(i); 50 cout<<"N: "<<i<<", St: "<<gen->Status<<", PID: "<<gen->PID<<", E: "<<gen->E<<", Px: "<<gen->Px<<", Py: "<<gen->Py<<", Pz: "<<gen->Pz<<", M: "<<gen->Mass<<", T: "<<gen->T<<", X: "<<gen->X<<", Y: "<<gen->Y<<", Z: "<<gen->Z<<",M1: "<<gen->M1<<", M2: "<<gen->M2<<", D1: "<<gen->D1<<", D2: "<<gen->D2<<endl;48 { 49 GenParticle *gen = (GenParticle*) branchParticle->At(i); 50 cout<<"N: "<<i<<", St: "<<gen->Status<<", PID: "<<gen->PID<<", E: "<<gen->E<<", Px: "<<gen->Px<<", Py: "<<gen->Py<<", Pz: "<<gen->Pz<<", M: "<<gen->Mass<<", M1: "<<gen->M1<<", M2: "<<gen->M2<<", D1: "<<gen->D1<<", D2: "<<gen->D2<<endl; 51 51 } 52 52 } -
examples/Pythia8/ee_zh.cmnd
r4acf2fd r46d3442 1 1 2 ! number of events to generate 3 Main:numberOfEvents = 1000 ! number of events to generate 2 Main:numberOfEvents = 10 ! number of events to generate 4 3 5 4 Beams:idA = 11 ! first beam, e- = -11 … … 8 7 9 8 ! Vertex smearing : 9 Beams:allowVertexSpread = off 10 !Beams:sigmaVertexX = 9.70e-3 ! 13.7 mum / sqrt2 11 !Beams:sigmaVertexY = 25.5E-6 ! 36.1 nm / sqrt2 12 !Beams:sigmaVertexZ = 20.64 ! 0.64 mm 13 !ï¿ŒBeams:sigmaVertexT = 0.64 ! 0.64 mm 14 ï¿Œ 10 15 11 Beams:allowVertexSpread = on12 Beams:sigmaVertexX = 9.70e-3 ! 13.7 mum / sqrt213 Beams:sigmaVertexY = 25.5E-6 ! 36.1 nm / sqrt214 Beams:sigmaVertexZ = 0.64 ! 0.64 mm15 Beams:sigmaTime = 0.64 ! 0.64 mm16 16 17 17 ! Higgsstrahlung process -
modules/ClusterCounting.cc
r4acf2fd r46d3442 1 1 /* 2 2 * Delphes: a framework for fast simulation of a generic collider experiment 3 3 * Copyright (C) 2020 Universite catholique de Louvain (UCLouvain), Belgium … … 28 28 */ 29 29 30 //FIXME add reference to Bedeschi-code 31 //FIXME make sure about units of P, X 32 //FIXME fix pt > 200 GeV issue and angle > 6.41 33 30 34 #include "modules/ClusterCounting.h" 35 31 36 #include "classes/DelphesClasses.h" 32 37 #include "TrackCovariance/TrkUtil.h" … … 103 108 { 104 109 Candidate *candidate, *mother, *particle; 105 Double_t mass, trackLength,Ncl;110 Double_t mass, Ncl; 106 111 107 112 fItInputArray->Reset(); … … 119 124 mass = candidateMomentum.M(); 120 125 121 trackLength = fTrackUtil->TrkLen(Par);122 123 126 mother = candidate; 124 127 candidate = static_cast<Candidate*>(candidate->Clone()); 125 128 126 Ncl = 0.; 127 if (fTrackUtil->IonClusters(Ncl, mass, Par)) 129 Ncl = -999; 130 // computation of Nclusters is not supported for electrons 131 if (TMath::Abs(particle->PID) == 11) 128 132 { 129 133 candidate->Nclusters = Ncl; 130 candidate->dNdx = (trackLength > 0.) ? Ncl/trackLength : -1;131 134 } 135 else if (fTrackUtil->IonClusters(Ncl, mass, Par)) 136 { 137 candidate->Nclusters = Ncl; 138 } 139 //cout<<candidate->PID<<", "<<mass<<", "<<candidate->Nclusters<<endl; 132 140 133 141 candidate->AddCandidate(mother); -
modules/DualReadoutCalorimeter.cc
r4acf2fd r46d3442 613 613 // create new photon tower 614 614 tower = static_cast<Candidate*>(fTower->Clone()); 615 pt = neutralEnergy / TMath::CosH(eta);615 pt = neutralEnergy / TMath::CosH(eta); 616 616 //cout<<"Creating tower with Pt, Eta, Phi, Energy: "<<pt<<","<<eta<<","<<phi<<","<<neutralEnergy<<endl; 617 617 tower->Momentum.SetPtEtaPhiE(pt, eta, phi, neutralEnergy); … … 623 623 tower->Ehad = 0.0; 624 624 tower->PID = 22; 625 fEFlowPhotonOutputArray->Add(tower);626 } 625 } 626 627 627 // if hadronic fraction > 0, use HCAL resolution 628 628 else … … 631 631 tower->Ehad = neutralEnergy; 632 632 tower->PID = 130; 633 fEFlowNeutralHadronOutputArray->Add(tower); 634 } 633 } 634 635 fEFlowPhotonOutputArray->Add(tower); 636 635 637 636 638 //clone tracks -
modules/Efficiency.cc
r4acf2fd r46d3442 100 100 Double_t pt, eta, phi, e; 101 101 102 103 102 fItInputArray->Reset(); 104 103 while((candidate = static_cast<Candidate *>(fItInputArray->Next()))) … … 116 115 pt = candidateMomentum.Pt(); 117 116 e = candidateMomentum.E(); 118 117 119 118 // apply an efficency formula 120 119 if(gRandom->Uniform() > fFormula->Eval(pt, eta, phi, e, candidate)) continue; -
modules/ModulesLinkDef.h
r4acf2fd r46d3442 40 40 #include "modules/ImpactParameterSmearing.h" 41 41 #include "modules/TimeSmearing.h" 42 #include "modules/TimeOfFlight.h"43 42 #include "modules/SimpleCalorimeter.h" 44 43 #include "modules/DenseTrackFilter.h" … … 77 76 #include "modules/DecayFilter.h" 78 77 #include "modules/ParticleDensity.h" 79 #include "modules/TruthVertexFinder.h"80 78 #include "modules/ExampleModule.h" 81 79 … … 100 98 #pragma link C++ class ImpactParameterSmearing+; 101 99 #pragma link C++ class TimeSmearing+; 102 #pragma link C++ class TimeOfFlight+;103 100 #pragma link C++ class SimpleCalorimeter+; 104 101 #pragma link C++ class DenseTrackFilter+; … … 137 134 #pragma link C++ class DecayFilter+; 138 135 #pragma link C++ class ParticleDensity+; 139 #pragma link C++ class TruthVertexFinder+;140 136 #pragma link C++ class ExampleModule+; 141 137 -
modules/ParticlePropagator.cc
r4acf2fd r46d3442 125 125 TLorentzVector particlePosition, particleMomentum, beamSpotPosition; 126 126 Double_t px, py, pz, pt, pt2, e, q; 127 Double_t x, y, z, t, r ;127 Double_t x, y, z, t, r, phi; 128 128 Double_t x_c, y_c, r_c, phi_c, phi_0; 129 129 Double_t x_t, y_t, z_t, r_t; 130 Double_t t_z, t_r; 131 Double_t discr; 132 Double_t gammam, omega; 133 Double_t xd, yd, zd; 134 Double_t l, d0, dz, ctgTheta, alpha; 130 Double_t t1, t2, t3, t4, t5, t6; 131 Double_t t_z, t_r, t_ra, t_rb; 132 Double_t tmp, discr, discr2; 133 Double_t delta, gammam, omega, asinrho; 134 Double_t rcu, rc2, xd, yd, zd; 135 Double_t l, d0, dz, p, ctgTheta, phip, etap, alpha; 135 136 Double_t bsx, bsy, bsz; 136 Double_t rxp, rdp, t_R; 137 Double_t td, pio, phid, sign_pz, vz; 138 137 Double_t s0, s1, sd; 138 139 139 const Double_t c_light = 2.99792458E8; 140 140 … … 161 161 particlePosition = particle->Position; 162 162 particleMomentum = particle->Momentum; 163 164 // Constants165 166 163 x = particlePosition.X() * 1.0E-3; 167 164 y = particlePosition.Y() * 1.0E-3; … … 208 205 else if(TMath::Abs(q) < 1.0E-9 || TMath::Abs(fBz) < 1.0E-9) 209 206 { 210 211 rxp = x*py - y*px; 212 rdp = x*px + y*py; 213 214 discr = fRadius*fRadius*pt*pt - rxp*rxp; 215 216 t_R = e * (sqrt(discr) - rdp) / (c_light * pt * pt); 217 t_z = e * (TMath::Sign(fHalfLengthMax, pz) - z) / ( c_light * pz); 218 219 t = TMath::Min(t_R, t_z); 220 221 x_t = x + px*t*c_light/e; 222 y_t = y + py*t*c_light/e; 223 z_t = z + pz*t*c_light/e; 224 r_t = TMath::Hypot(x_t, y_t); 225 226 l = TMath::Sqrt( (x_t - x)*(x_t - x) + (y_t - y)*(y_t - y) + (z_t - z)*(z_t - z)); 207 // solve pt2*t^2 + 2*(px*x + py*y)*t - (fRadius2 - x*x - y*y) = 0 208 tmp = px * y - py * x; 209 discr2 = pt2 * fRadius2 - tmp * tmp; 210 211 if(discr2 < 0.0) 212 { 213 // no solutions 214 continue; 215 } 216 217 tmp = px * x + py * y; 218 discr = TMath::Sqrt(discr2); 219 t1 = (-tmp + discr) / pt2; 220 t2 = (-tmp - discr) / pt2; 221 t = (t1 < 0.0) ? t2 : t1; 222 223 z_t = z + pz * t; 224 if(TMath::Abs(z_t) > fHalfLength) 225 { 226 t3 = (+fHalfLength - z) / pz; 227 t4 = (-fHalfLength - z) / pz; 228 t = (t3 < 0.0) ? t4 : t3; 229 } 230 231 x_t = x + px * t; 232 y_t = y + py * t; 233 z_t = z + pz * t; 234 235 l = TMath::Sqrt((x_t - x) * (x_t - x) + (y_t - y) * (y_t - y) + (z_t - z) * (z_t - z)); 227 236 228 237 mother = candidate; 229 candidate = static_cast<Candidate *>(candidate->Clone());238 candidate = static_cast<Candidate *>(candidate->Clone()); 230 239 231 240 candidate->InitialPosition = particlePosition; 232 candidate->Position.SetXYZT(x_t *1.0E3, y_t*1.0E3, z_t*1.0E3, particlePosition.T() + t*c_light*1.0E3);233 candidate->L = l *1.0E3;241 candidate->Position.SetXYZT(x_t * 1.0E3, y_t * 1.0E3, z_t * 1.0E3, particlePosition.T() + t * e * 1.0E3); 242 candidate->L = l * 1.0E3; 234 243 235 244 candidate->Momentum = particleMomentum; … … 237 246 238 247 fOutputArray->Add(candidate); 239 240 248 if(TMath::Abs(q) > 1.0E-9) 241 249 { … … 266 274 // helix radius r = p_{T0} / (omega gamma m) 267 275 268 gammam = e *1.0E9 / (c_light*c_light);// gammam in [eV/c^2]269 omega = q * fBz / (gammam); 270 r = pt / (q * fBz) * 1.0E9 /c_light;// in [m]276 gammam = e * 1.0E9 / (c_light * c_light); // gammam in [eV/c^2] 277 omega = q * fBz / (gammam); // omega is here in [89875518/s] 278 r = pt / (q * fBz) * 1.0E9 / c_light; // in [m] 271 279 272 280 phi_0 = TMath::ATan2(py, px); // [rad] in [-pi, pi] 273 281 274 282 // 2. helix axis coordinates 275 x_c = x + r *TMath::Sin(phi_0);276 y_c = y - r *TMath::Cos(phi_0);283 x_c = x + r * TMath::Sin(phi_0); 284 y_c = y - r * TMath::Cos(phi_0); 277 285 r_c = TMath::Hypot(x_c, y_c); 278 phi_c = TMath::ATan(y_c/x_c); 279 if(x_c < 0.0) phi_c -= TMath::Sign(1., phi_c)*TMath::Pi(); 280 281 //Find the time of closest approach 282 td = (phi_0 - TMath::ATan(-x_c/y_c))/omega; 283 284 //Remove all the modulo pi that might have come from the atan 285 pio = fabs(TMath::Pi()/omega); 286 while(fabs(td) > 0.5*pio) 287 { 288 td -= TMath::Sign(1., td)*pio; 289 } 290 291 //Compute the coordinate of closed approach to z axis 292 //if wants wtr beamline need to be changedto re-center with a traslation of the z axis 293 phid = phi_0 - omega*td; 294 xd = x_c - r*TMath::Sin(phid); 295 yd = y_c + r*TMath::Cos(phid); 296 zd = z + c_light*(pz/e)*td; 297 298 //Compute momentum at closest approach (perigee??) 299 px = pt*TMath::Cos(phid); 300 py = pt*TMath::Sin(phid); 301 302 particleMomentum.SetPtEtaPhiE(pt, particleMomentum.Eta(), phid, particleMomentum.E()); 286 phi_c = TMath::ATan2(y_c, x_c); 287 phi = phi_c; 288 if(x_c < 0.0) phi += TMath::Pi(); 289 290 rcu = TMath::Abs(r); 291 rc2 = r_c * r_c; 292 293 // calculate coordinates of closest approach to track circle in transverse plane xd, yd, zd 294 xd = x_c * x_c * x_c - x_c * rcu * r_c + x_c * y_c * y_c; 295 xd = (rc2 > 0.0) ? xd / rc2 : -999; 296 yd = y_c * (-rcu * r_c + rc2); 297 yd = (rc2 > 0.0) ? yd / rc2 : -999; 298 zd = z + (TMath::Sqrt(xd * xd + yd * yd) - TMath::Sqrt(x * x + y * y)) * pz / pt; 299 300 // proper calculation of the DCAz coordinate 301 // s0: track circle parameter at the track origin 302 // s1: track circle parameter at the closest approach to beam pipe 303 // sd: s1-s0 signed angular difference 304 s0 = atan2(y - y_c, x - x_c); 305 s1 = atan2(yd - y_c, xd - x_c); 306 sd = atan2(sin(s1 - s0), cos(s1 - s0)); 307 zd = z - r * pz / pt * sd; 308 309 // use perigee momentum rather than original particle 310 // momentum, since the orignal particle momentum isn't known 311 312 px = TMath::Sign(1.0, r) * pt * (-y_c / r_c); 313 py = TMath::Sign(1.0, r) * pt * (x_c / r_c); 314 etap = particleMomentum.Eta(); 315 phip = TMath::ATan2(py, px); 316 317 particleMomentum.SetPtEtaPhiE(pt, etap, phip, particleMomentum.E()); 303 318 304 319 // calculate additional track parameters (correct for beamspot position) 305 d0 = ((xd - bsx) * py - (yd - bsy) * px) / pt; 306 dz = zd - bsz; 307 ctgTheta = 1.0 / TMath::Tan (particleMomentum.Theta()); 320 321 d0 = ((x - bsx) * py - (y - bsy) * px) / pt; 322 dz = z - ((x - bsx) * px + (y - bsy) * py) / pt * (pz / pt); 323 p = particleMomentum.P(); 324 ctgTheta = 1.0 / TMath::Tan(particleMomentum.Theta()); 308 325 309 326 // 3. time evaluation t = TMath::Min(t_r, t_z) 310 327 // t_r : time to exit from the sides 311 328 // t_z : time to exit from the front or the back 312 t = 0; 313 t_z = 0; 314 sign_pz = (pz > 0.0) ? 1 : -1; 315 if(pz == 0.0) t_z = 1.0E99; 316 else t_z = gammam / (pz*1.0E9/c_light) * (-z + fHalfLength*sign_pz); 317 318 if(r_c + TMath::Abs(r) < fRadius) // helix does not cross the cylinder sides 319 { 329 t_r = 0.0; // in [ns] 330 int sign_pz = (pz > 0.0) ? 1 : -1; 331 if(pz == 0.0) 332 t_z = 1.0E99; 333 else 334 t_z = gammam / (pz * 1.0E9 / c_light) * (-z + fHalfLength * sign_pz); 335 336 if(r_c + TMath::Abs(r) < fRadius) 337 { 338 // helix does not cross the cylinder sides 320 339 t = t_z; 321 340 } 322 341 else 323 342 { 324 alpha = -(fRadius*fRadius - r*r - r_c*r_c)/(2*fabs(r)*r_c); 325 alpha = fabs(TMath::ACos(alpha)); 326 t_r = td + alpha/fabs(omega); 327 343 asinrho = TMath::ASin((fRadius * fRadius - r_c * r_c - r * r) / (2 * TMath::Abs(r) * r_c)); 344 delta = phi_0 - phi; 345 if(delta < -TMath::Pi()) delta += 2 * TMath::Pi(); 346 if(delta > TMath::Pi()) delta -= 2 * TMath::Pi(); 347 t1 = (delta + asinrho) / omega; 348 t2 = (delta + TMath::Pi() - asinrho) / omega; 349 t3 = (delta + TMath::Pi() + asinrho) / omega; 350 t4 = (delta - asinrho) / omega; 351 t5 = (delta - TMath::Pi() - asinrho) / omega; 352 t6 = (delta - TMath::Pi() + asinrho) / omega; 353 354 if(t1 < 0.0) t1 = 1.0E99; 355 if(t2 < 0.0) t2 = 1.0E99; 356 if(t3 < 0.0) t3 = 1.0E99; 357 if(t4 < 0.0) t4 = 1.0E99; 358 if(t5 < 0.0) t5 = 1.0E99; 359 if(t6 < 0.0) t6 = 1.0E99; 360 361 t_ra = TMath::Min(t1, TMath::Min(t2, t3)); 362 t_rb = TMath::Min(t4, TMath::Min(t5, t6)); 363 t_r = TMath::Min(t_ra, t_rb); 328 364 t = TMath::Min(t_r, t_z); 329 365 } 330 366 331 x_t = x_c - r*TMath::Sin(phi_0 - omega*t); 332 y_t = y_c + r*TMath::Cos(phi_0 - omega*t); 333 z_t = z + c_light*t*pz/e; 334 r_t = TMath::Hypot(x_t, y_t); 367 // 4. position in terms of x(t), y(t), z(t) 368 x_t = x_c + r * TMath::Sin(omega * t - phi_0); 369 y_t = y_c + r * TMath::Cos(omega * t - phi_0); 370 z_t = z + pz * 1.0E9 / c_light / gammam * t; 371 r_t = TMath::Hypot(x_t, y_t); 335 372 336 373 // compute path length for an helix 337 vz = pz*1.0E9 / c_light / gammam; 338 //lenght of the path from production to tracker339 l = t * TMath::Sqrt( vz*vz + r*r*omega*omega);374 375 alpha = pz * 1.0E9 / c_light / gammam; 376 l = t * TMath::Sqrt(alpha * alpha + r * r * omega * omega); 340 377 341 378 if(r_t > 0.0) 342 379 { 380 343 381 // store these variables before cloning 344 382 if(particle == candidate) … … 346 384 particle->D0 = d0 * 1.0E3; 347 385 particle->DZ = dz * 1.0E3; 348 particle->P = p articleMomentum.P();386 particle->P = p; 349 387 particle->PT = pt; 350 388 particle->CtgTheta = ctgTheta; 351 particle->Phi = p articleMomentum.Phi();389 particle->Phi = phip; 352 390 } 353 391 -
modules/TimeSmearing.cc
r4acf2fd r46d3442 19 19 /** \class TimeSmearing 20 20 * 21 * Performs t imesmearing.21 * Performs transverse momentum resolution smearing. 22 22 * 23 * \author M. Selvaggi - CERN23 * \author P. Demin - UCL, Louvain-la-Neuve 24 24 * 25 25 */ … … 49 49 50 50 using namespace std; 51 51 52 //------------------------------------------------------------------------------ 52 53 53 54 TimeSmearing::TimeSmearing() : 54 fIt TrackInputArray(0), fResolutionFormula(0)55 fItInputArray(0) 55 56 { 56 fResolutionFormula = new DelphesFormula;57 57 } 58 58 … … 61 61 TimeSmearing::~TimeSmearing() 62 62 { 63 if(fResolutionFormula) delete fResolutionFormula;64 63 } 65 64 … … 70 69 // read resolution formula 71 70 72 // read time resolution formula in seconds73 fResolutionFormula->Compile(GetString("TimeResolution", "30e-12"));71 fTimeResolution = GetDouble("TimeResolution", 1.0E-10); 72 // import input array 74 73 75 // import track input array 76 fTrackInputArray = ImportArray(GetString("TrackInputArray", "MuonMomentumSmearing/muons")); 77 fItTrackInputArray = fTrackInputArray->MakeIterator(); 78 74 fInputArray = ImportArray(GetString("InputArray", "MuonMomentumSmearing/muons")); 75 fItInputArray = fInputArray->MakeIterator(); 79 76 80 77 // create output array 81 fOutputArray = ExportArray(GetString("OutputArray", "tracks")); 78 79 fOutputArray = ExportArray(GetString("OutputArray", "muons")); 82 80 } 83 81 … … 86 84 void TimeSmearing::Finish() 87 85 { 88 if(fIt TrackInputArray) delete fItTrackInputArray;86 if(fItInputArray) delete fItInputArray; 89 87 } 90 88 … … 94 92 { 95 93 Candidate *candidate, *mother; 96 Double_t tf_smeared, tf; 97 Double_t eta, energy; 98 Double_t timeResolution; 99 94 Double_t ti, tf_smeared, tf; 100 95 const Double_t c_light = 2.99792458E8; 101 96 102 fIt TrackInputArray->Reset();103 while((candidate = static_cast<Candidate *>(fIt TrackInputArray->Next())))97 fItInputArray->Reset(); 98 while((candidate = static_cast<Candidate *>(fItInputArray->Next()))) 104 99 { 105 // converting to meters100 const TLorentzVector &candidateInitialPosition = candidate->InitialPosition; 106 101 const TLorentzVector &candidateFinalPosition = candidate->Position; 107 const TLorentzVector &candidateMomentum = candidate->Momentum;108 102 103 ti = candidateInitialPosition.T() * 1.0E-3 / c_light; 109 104 tf = candidateFinalPosition.T() * 1.0E-3 / c_light; 110 105 111 eta = candidateMomentum.Eta();112 energy = candidateMomentum.E();113 114 106 // apply smearing formula 115 timeResolution = fResolutionFormula->Eval(0.0, eta, 0.0, energy); 116 tf_smeared = gRandom->Gaus(tf, timeResolution); 107 tf_smeared = gRandom->Gaus(tf, fTimeResolution); 108 ti = ti + tf_smeared - tf; 109 tf = tf_smeared; 117 110 118 111 mother = candidate; 119 112 candidate = static_cast<Candidate *>(candidate->Clone()); 113 candidate->InitialPosition.SetT(ti * 1.0E3 * c_light); 114 candidate->Position.SetT(tf * 1.0E3 * c_light); 120 115 121 candidate->Position.SetT(tf_smeared * 1.0E3 * c_light); 122 candidate->ErrorT = timeResolution * 1.0E3 * c_light; 116 candidate->ErrorT = fTimeResolution * 1.0E3 * c_light; 123 117 124 118 candidate->AddCandidate(mother); 119 125 120 fOutputArray->Add(candidate); 126 121 } 127 122 } 123 124 //------------------------------------------------------------------------------ -
modules/TimeSmearing.h
r4acf2fd r46d3442 22 22 /** \class TimeSmearing 23 23 * 24 * Performs t ime smearing.24 * Performs transverse time smearing. 25 25 * 26 * \author Michele Selvaggi - CERN26 * \author Michele Selvaggi - UCL, Louvain-la-Neuve 27 27 * 28 28 */ … … 32 32 class TIterator; 33 33 class TObjArray; 34 class DelphesFormula;35 34 36 35 class TimeSmearing: public DelphesModule … … 45 44 46 45 private: 46 Double_t fTimeResolution; 47 47 48 DelphesFormula *fResolutionFormula; 49 Int_t fVertexTimeMode; 48 TIterator *fItInputArray; //! 50 49 51 TIterator *fItTrackInputArray; //! 52 53 const TObjArray *fTrackInputArray; //! 50 const TObjArray *fInputArray; //! 54 51 55 52 TObjArray *fOutputArray; //! -
modules/TrackCovariance.cc
r4acf2fd r46d3442 104 104 Double_t dd0, ddz, dphi, dct, dp, dpt, dC; 105 105 106 106 107 fItInputArray->Reset(); 107 108 while((candidate = static_cast<Candidate *>(fItInputArray->Next()))) -
modules/TreeWriter.cc
r4acf2fd r46d3442 356 356 entry->DZ = candidate->DZ; 357 357 entry->Nclusters = candidate->Nclusters; 358 entry->dNdx = candidate->dNdx;359 358 360 359 entry->ErrorP = candidate->ErrorP; … … 405 404 entry->Mass = m; 406 405 407 //particle = static_cast<Candidate *>(candidate->GetCandidates()->At(0)); 408 //const TLorentzVector &initialPosition = particle->Position; 409 const TLorentzVector &initialPosition = candidate->InitialPosition; 406 particle = static_cast<Candidate *>(candidate->GetCandidates()->At(0)); 407 const TLorentzVector &initialPosition = particle->Position; 410 408 411 409 entry->X = initialPosition.X(); … … 413 411 entry->Z = initialPosition.Z(); 414 412 entry->T = initialPosition.T() * 1.0E-3 / c_light; 415 entry->ErrorT =candidate-> ErrorT * 1.0E-3 / c_light;416 413 417 414 entry->Particle = particle; … … 512 509 entry->DZ = candidate->DZ; 513 510 entry->Nclusters = candidate->Nclusters; 514 entry->dNdx = candidate->dNdx;515 511 516 512 entry->ErrorP = candidate->ErrorP; … … 561 557 entry->Mass = m; 562 558 563 //particle = static_cast<Candidate *>(candidate->GetCandidates()->At(0)); 564 //const TLorentzVector &initialPosition = particle->Position; 565 const TLorentzVector &initialPosition = candidate->InitialPosition; 559 particle = static_cast<Candidate *>(candidate->GetCandidates()->At(0)); 560 const TLorentzVector &initialPosition = particle->Position; 566 561 567 562 entry->X = initialPosition.X(); … … 569 564 entry->Z = initialPosition.Z(); 570 565 entry->T = initialPosition.T() * 1.0E-3 / c_light; 571 entry->ErrorT = candidate-> ErrorT * 1.0E-3 / c_light;572 566 573 567 entry->VertexIndex = candidate->ClusterIndex; … … 580 574 entry->Edges[3] = candidate->Edges[3]; 581 575 582 //entry->T = position.T() * 1.0E-3 / c_light;576 entry->T = position.T() * 1.0E-3 / c_light; 583 577 entry->NTimeHits = candidate->NTimeHits; 584 578
Note:
See TracChangeset
for help on using the changeset viewer.