@@ -8,6 +8,8 @@ DetectorK fat;
88void diagonalise (lutEntry_t &lutEntry);
99static float etaMaxBarrel = 1.75 ;
1010
11+ bool usePara = true ; // use fwd parameterisation
12+
1113bool
1214fatSolve (lutEntry_t &lutEntry, float pt = 0.1 , float eta = 0.0 , float mass = 0.13957000 , int itof = 0 , int otof = 0 , int q = 1 )
1315{
@@ -37,15 +39,19 @@ fwdSolve(float *covm, float pt = 0.1, float eta = 0.0, float mass = 0.13957000)
3739}
3840
3941bool
40- fwdPara (float *covm , float pt = 0.1 , float eta = 0.0 , float mass = 0.13957000 , float Bfield = 0.5 , int layer = 0 , int what = 0 )
42+ fwdPara (lutEntry_t &lutEntry , float pt = 0.1 , float eta = 0.0 , float mass = 0.13957000 , float Bfield = 0.5 )
4143{
44+ lutEntry.valid = false ;
45+
4246 // parametrised forward response; interpolates between FAT at eta = 1.75 and a fixed parametrisation at eta = 4; only diagonal elements
43- float eff = 0 ;
44- float covmbarrel[15 ] = {0 };
4547 if (fabs (eta) < etaMaxBarrel || fabs (eta) > 4 )
4648 return false ;
4749
48- if (!fatSolve (&eff, covmbarrel, pt, etaMaxBarrel, mass, layer, what)) return false ;
50+ if (!fatSolve (lutEntry, pt, etaMaxBarrel, mass)) return false ;
51+ float covmbarrel[15 ] = {0 };
52+ for (int i = 0 ; i < 15 ; ++i) {
53+ covmbarrel[i] = lutEntry.covm [i];
54+ }
4955
5056 // parametrisation at eta = 4
5157 double beta = 1 ./sqrt (1 +mass*mass/pt/pt/cosh (eta)/cosh (eta));
@@ -76,15 +82,15 @@ fwdPara(float *covm, float pt = 0.1, float eta = 0.0, float mass = 0.13957000, f
7682
7783 // Fill cov matrix diag
7884 for (int i = 0 ; i < 15 ; ++i)
79- covm[i] = 0 ;
80-
81- covm[0 ] = covmbarrel[0 ];
82- if (dcaxy2 > covm[0 ]) covm[0 ] = dcaxy2;
83- covm[2 ] = covmbarrel[2 ];
84- if (dcaz2 > covm[2 ]) covm[2 ] = dcaz2;
85- covm[5 ] = covmbarrel[5 ]; // sigma^2 sin(phi)
86- covm[9 ] = covmbarrel[9 ]; // sigma^2 tanl
87- covm[14 ] = momres_tot*momres_tot/pt/pt/pt/pt; // sigma^2 1/pt
85+ lutEntry. covm [i] = 0 ;
86+
87+ lutEntry. covm [0 ] = covmbarrel[0 ];
88+ if (dcaxy2 > lutEntry. covm [0 ]) lutEntry. covm [0 ] = dcaxy2;
89+ lutEntry. covm [2 ] = covmbarrel[2 ];
90+ if (dcaz2 > lutEntry. covm [2 ]) lutEntry. covm [2 ] = dcaz2;
91+ lutEntry. covm [5 ] = covmbarrel[5 ]; // sigma^2 sin(phi)
92+ lutEntry. covm [9 ] = covmbarrel[9 ]; // sigma^2 tanl
93+ lutEntry. covm [14 ] = momres_tot*momres_tot/pt/pt/pt/pt; // sigma^2 1/pt
8894 return true ;
8995}
9096
@@ -167,7 +173,7 @@ lutWrite(const char *filename = "lutCovm.dat", int pdg = 211, float field = 0.2,
167173 lutEntry.eff = 1 .;
168174 bool retval = true ;
169175 if (usePara) {
170- retval = fwdPara (lutEntry. covm , lutEntry.pt , lutEntry.eta , lutHeader.mass , field, layer, what );
176+ retval = fwdPara (lutEntry, lutEntry.pt , lutEntry.eta , lutHeader.mass , field);
171177 }
172178 else {
173179 retval = fwdSolve (lutEntry.covm , lutEntry.pt , lutEntry.eta , lutHeader.mass );
0 commit comments