FairRoot/PandaRoot
Public Member Functions | List of all members
PndTrkComparisonMCtruth Class Reference

#include <PndTrkComparisonMCtruth.h>

Public Member Functions

 PndTrkComparisonMCtruth ()
 
virtual ~PndTrkComparisonMCtruth ()
 
void AssociateFoundTrackstoMCquater (Double_t BFIELD, Double_t CVEL, Vec< Short_t > *daTrackFoundaTrackMC, TClonesArray *fMCTrackArray, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack, Vec< int > *FromSciTiltoMCTrackList, Vec< bool > *keepit, Vec< Double_t > *info, Vec< Short_t > *ListSttParHitsinTrack, Vec< Short_t > *ListMvdPixelHitsinTrack, Vec< Short_t > *ListSciTilHitsinTrack, Vec< Short_t > *ListSttSkewHitsinTrack, Vec< Short_t > *ListMvdStripHitsinTrack, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITSINTRACK, int MAXSCITILHITSINTRACK, int MAXSTTHITSINTRACK, Vec< int > *nFromSciTiltoMCTrack, Vec< Short_t > *nSttParHitsinTrack, int nMCTracks, Vec< Short_t > *nMvdPixelHitsinTrack, Short_t nSciTilHits, Vec< Short_t > *nSciTilHitsinTrack, Vec< Short_t > *nSttSkewHitsinTrack, Vec< Short_t > *nMvdStripHitsinTrack, Short_t nTracksFoundSoFar, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *R, Vec< Double_t > *X1, Vec< Double_t > *Y1, Vec< Double_t > *X2, Vec< Double_t > *Y2, Vec< Double_t > *X3, Vec< Double_t > *Y3, int IVOLTE)
 
int ComparisonwithMC (PndTrkComparisonMCtruth_io_Data ioData)
 
Double_t FindDistance (Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t tanlow, Double_t tanmid, Double_t tanup, Double_t alfa, Double_t beta, Double_t gamma)
 
void getMCInfo (Double_t BFIELD, Double_t CVEL, Double_t *Cx, Double_t *Cy, TClonesArray *fMCTrackArray, Int_t MCTrack, Double_t *Rr)
 
void MvdMatchedSpurioustoTrackCand (Vec< Short_t > *daTrackFoundaTrackMC, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack, Vec< bool > *keepit, Vec< Short_t > *ListMvdPixelHitsinTrack, Vec< Short_t > *ListMvdStripHitsinTrack, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITSINTRACK, Short_t nMvdPixelHit, Short_t nMvdStripHit, Vec< Short_t > *nMvdPixelHitsinTrack, Vec< Short_t > *nMvdStripHitsinTrack, Short_t nSttTrackCand, Vec< Short_t > *nMvdPixelCommon, Vec< Short_t > *MvdPixelCommonList, Vec< Short_t > *nMvdPixelSpuriinTrack, Vec< Short_t > *MvdPixelSpuriList, Vec< Short_t > *nMCMvdPixelAlone, Vec< Short_t > *MCMvdPixelAloneList, Vec< Short_t > *nMvdStripCommon, Vec< Short_t > *MvdStripCommonList, Vec< Short_t > *nMvdStripSpuriinTrack, Vec< Short_t > *MvdStripSpuriList, Vec< Short_t > *nMCMvdStripAlone, Vec< Short_t > *MCMvdStripAloneList)
 
void MvdMatchtoMC (Double_t ERRORSQPIXEL, Double_t ERRORSQSTRIP, TClonesArray *fMvdMCPointArray, Short_t nMvdMCPoint, int istampa, int IVOLTE, Short_t nMvdPixelHit, Short_t nMvdStripHit, Vec< Double_t > *refindexMvdPixel, Vec< Double_t > *refindexMvdStrip, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip, Vec< Double_t > *ZMvdPixel, Vec< Double_t > *ZMvdStrip, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack)
 
void SciTilMatchtoMC (Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, TClonesArray *fMCTrackArray, Vec< int > *FromSciTiltoMCTrackList, TClonesArray *fSciTHitArray, Short_t fSciTilMaxNumber, TClonesArray *fSciTPointArray, Vec< int > *nFromSciTiltoMCTrack, Short_t *nHitsInSciTile, int nMCTracks, Short_t nSciTilHits, Short_t *OriginalSciTilList, Vec< Double_t > *XSciTilCenter, Vec< Double_t > *YSciTilCenter, Vec< Double_t > *ZSciTilCenter)
 
void SciTilMatchedSpurioustoTrackCand (Vec< Short_t > *daTrackFoundaTrackMC, Vec< int > *FromSciTiltoMCTrackList, Vec< bool > *keepit, Vec< Short_t > *ListSciTilHitsinTrack, int MAXSCITILHITSINTRACK, Short_t *MCSciTilAloneList, Vec< int > *nFromSciTiltoMCTrack, Short_t *nMCSciTilAlone, int nMCTracks, Short_t nSciTilHits, Vec< Short_t > *nSciTilHitsinTrack, Short_t *nSciTilCommon, Short_t *nSciTilSpuriinTrack, Short_t nSttTrackCand, Short_t *SciTilCommonList, Short_t *SciTilSpuriList)
 
void stampaMCTracks (Double_t BFIELD, Double_t CVEL, TClonesArray *fMCTrackArray, int nMCTracks)
 
void SttMatchedSpurious (Vec< Short_t > *daTrackFoundaTrackMC, Vec< bool > *InclusionListStt, Vec< Double_t > *info, Vec< bool > *keepit, int MAXSTTHITS, int MAXSTTHITSINTRACK, int MAXTRACKSPEREVENT, Vec< Short_t > *ListSttParHitsinTrack, Vec< Short_t > *ListSttSkewHitsinTrack, Vec< Short_t > *MCParalAloneList, Vec< Short_t > *MCSkewAloneList, Vec< Short_t > *nHitsInMCTrack, Vec< Short_t > *nSttParHitsinTrack, Vec< Short_t > *nMCParalAlone, Vec< Short_t > *nMCSkewAlone, Vec< Short_t > *nParalCommon, Vec< Short_t > *nSkewCommon, Vec< Short_t > *nSkewHitsInMCTrack, Vec< Short_t > *nSttSkewHitsinTrack, Vec< Short_t > *nSpuriParinTrack, Vec< Short_t > *nSpuriSkewinTrack, Short_t nSttHits, Short_t nTracksFoundSoFar, Vec< Short_t > *ParalCommonList, Vec< Short_t > *ParSpuriList, Vec< Short_t > *SkewCommonList, Vec< Short_t > *SkewSpuriList)
 
 ClassDef (PndTrkComparisonMCtruth, 1)
 

Detailed Description

Definition at line 122 of file PndTrkComparisonMCtruth.h.

Constructor & Destructor Documentation

PndTrkComparisonMCtruth::PndTrkComparisonMCtruth ( )
inline

Default constructor

Definition at line 129 of file PndTrkComparisonMCtruth.h.

129 {};
virtual PndTrkComparisonMCtruth::~PndTrkComparisonMCtruth ( )
inlinevirtual

Destructor

Definition at line 131 of file PndTrkComparisonMCtruth.h.

131 {};

Member Function Documentation

void PndTrkComparisonMCtruth::AssociateFoundTrackstoMCquater ( Double_t  BFIELD,
Double_t  CVEL,
Vec< Short_t > *  daTrackFoundaTrackMC,
TClonesArray *  fMCTrackArray,
Vec< Int_t > *  FromPixeltoMCTrack,
Vec< Int_t > *  FromStriptoMCTrack,
Vec< int > *  FromSciTiltoMCTrackList,
Vec< bool > *  keepit,
Vec< Double_t > *  info,
Vec< Short_t > *  ListSttParHitsinTrack,
Vec< Short_t > *  ListMvdPixelHitsinTrack,
Vec< Short_t > *  ListSciTilHitsinTrack,
Vec< Short_t > *  ListSttSkewHitsinTrack,
Vec< Short_t > *  ListMvdStripHitsinTrack,
int  MAXMVDPIXELHITSINTRACK,
int  MAXMVDSTRIPHITSINTRACK,
int  MAXSCITILHITSINTRACK,
int  MAXSTTHITSINTRACK,
Vec< int > *  nFromSciTiltoMCTrack,
Vec< Short_t > *  nSttParHitsinTrack,
int  nMCTracks,
Vec< Short_t > *  nMvdPixelHitsinTrack,
Short_t  nSciTilHits,
Vec< Short_t > *  nSciTilHitsinTrack,
Vec< Short_t > *  nSttSkewHitsinTrack,
Vec< Short_t > *  nMvdStripHitsinTrack,
Short_t  nTracksFoundSoFar,
Vec< Double_t > *  Ox,
Vec< Double_t > *  Oy,
Vec< Double_t > *  R,
Vec< Double_t > *  X1,
Vec< Double_t > *  Y1,
Vec< Double_t > *  X2,
Vec< Double_t > *  Y2,
Vec< Double_t > *  X3,
Vec< Double_t > *  Y3,
int  IVOLTE 
)

Definition at line 20 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), Double_t, dx, fabs(), i, and MAXSTTHITSINTRACK.

60 {
61 // fine cambio_in_perl ;
62 
63  int tmp_dim = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK;
64 
65  int tmp_dim2;
66  // protection in case nTracksFoundSoFar = 0; the dimension of vector must be
67  // >= 1;
68  if(nTracksFoundSoFar>0) { tmp_dim2 = nTracksFoundSoFar;} else {tmp_dim2 = 1;}
69 
70  bool
71  firstime,
72  flaggo;
73  Short_t TMPinclusionMC[tmp_dim2*tmp_dim];
74  Vec <Short_t> inclusionMC(TMPinclusionMC,tmp_dim2*tmp_dim,"inclusionMC");
75 
76  Short_t TMPinclusionExp[tmp_dim2];
77  Vec <Short_t> inclusionExp(TMPinclusionExp,tmp_dim2,"inclusionExp");
78 
79  Short_t TMPntoMCtrack[tmp_dim2];
80  Vec <Short_t> ntoMCtrack(TMPntoMCtrack,tmp_dim2,"ntoMCtrack");
81 
82  Short_t TMPtoMCtrackfrequency[tmp_dim2*MAXSTTHITSINTRACK];
83  Vec <Short_t> toMCtrackfrequency(TMPtoMCtrackfrequency,tmp_dim2*MAXSTTHITSINTRACK,"toMCtrackfrequency");
84 
85 
86 
87  Short_t i, j, jtemp,jexp;// , nmid; //[R.K. 01/2017] unused variable?
88 
89  Short_t itemp, massimo;
90  Short_t TMPtoMCtracklist[tmp_dim2*MAXSTTHITSINTRACK];
91  Vec <Short_t> toMCtracklist(TMPtoMCtracklist,tmp_dim2*MAXSTTHITSINTRACK,"toMCtracklist");
92 
93 
94  int nindex;
95  Int_t enne;
96  Double_t dx,
97  Cx,
98  Cy,
99  Rr,
100  alfa,
101  beta,
102  gamma,
103  minimo;
104  // non cambiare senno' cambiaperl non funziona !
105  Double_t TMPtanlow[tmp_dim2];
106  Vec <Double_t> tanlow(TMPtanlow,tmp_dim2,"tanlow");
107 
108  Double_t TMPtanmid[tmp_dim2];
109  Vec <Double_t> tanmid(TMPtanmid,tmp_dim2,"tanmid");
110 
111  Double_t TMPtanup[tmp_dim2];
112  Vec <Double_t> tanup(TMPtanup,tmp_dim2,"tanup");
113 
114  Double_t TMPtoMCtrackdistance[tmp_dim2*MAXSTTHITSINTRACK];
115  Vec <Double_t> toMCtrackdistance(TMPtoMCtrackdistance,tmp_dim2*MAXSTTHITSINTRACK,"toMCtrackdistance");
116 
117 
118 
119 
120 
121  for(i=0; i<nTracksFoundSoFar;i++){
122  daTrackFoundaTrackMC->at(i)=-1;
123  if(!keepit->at(i)) continue;
124  inclusionExp[i]=true;
125  for(j=0; j<nSttParHitsinTrack->at(i)+nSttSkewHitsinTrack->at(i)+nMvdPixelHitsinTrack->at(i)
126  +nMvdStripHitsinTrack->at(i);j++){
127  inclusionMC[i*tmp_dim+j]=true;
128  }
129 
130 //--- find the minimum, middle, end Tan(angle) of this track, for the comparison later
131 
132  tanlow[i]=0.;
133  tanmid[i]=0.;
134  tanup [i]=0.;
135  int nn = nSttParHitsinTrack->at(i)+nMvdPixelHitsinTrack->at(i)+nMvdStripHitsinTrack->at(i);
136  if( nn > 2 || nn == 1) {
137  dx = X1->at(i) - Ox->at(i);
138  if(fabs(dx)> 1.e-10){
139  tanlow[i] = (Y1->at(i) - Oy->at(i) )/dx;
140  } else {
141  tanlow[i] = 999999.;
142  }
143 
144  dx = X2->at(i) - Ox->at(i);
145  if(fabs(dx)> 1.e-10){
146  tanmid[i] = ( Y2->at(i) - Oy->at(i) )/dx;
147  } else {
148  tanmid[i] = 999999.;
149  }
150 
151  dx = X3->at(i) - Ox->at(i);
152  if(fabs(dx)> 1.e-10){
153  tanup[i] = (Y3->at(i) - Oy->at(i) )/dx;
154  } else {
155  tanup[i] = 999999.;
156  }
157 
158  } else if (nn==2) { // continuation of if( nn > 2 || nn == 1)
159  dx = X1->at(i) - Ox->at(i);
160  if(fabs(dx)> 1.e-10){
161  tanlow[i] = (Y1->at(i) - Oy->at(i) )/dx;
162  } else {
163  tanlow[i] = 999999.;
164  }
165 
166  dx = X2->at(i) - Ox->at(i);
167  if(fabs(dx)> 1.e-10){
168  tanmid[i] = ( Y2->at(i) - Oy->at(i) )/dx;
169  } else {
170  tanmid[i] = 999999.;
171  }
172 
173  tanup[i] = tanmid[i];
174 
175  }
176 
177 //-----------------------------
178 
179  } // end of for(i=0; i<nTracksFoundSoFar;i++)
180 
181 
182 
183 
184  for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
185 
186  if(!keepit->at(jexp)) continue;
187 
188  firstime=true;
189  ntoMCtrack[jexp]=0;
190 
191 // prima gli hits paralleli ---------------------
192 
193 
194  for(i=0; i<nSttParHitsinTrack->at(jexp); i++){
195  nindex = jexp*MAXSTTHITSINTRACK + i;
196  // enne = MC track alla quale lo hit e' associato.
197  enne = (Int_t)( info->at( ListSttParHitsinTrack->at(nindex)*7+ 6)+0.01 );
198 
199 
200  if(enne<0) continue; // hit not associated to any MC track; noise hit.
201 
202  if(firstime) {
203  toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
204  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
205  firstime = false;
206 
207  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
208  if( Rr<0.) {
209  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
210  } else {
211  alfa = -2.*Cx;
212  beta = -2.*Cy;
213  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
214  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]= FindDistance(Ox->at(jexp),Oy->at(jexp),
215  R->at(jexp),tanlow[jexp],tanmid[jexp],tanup[jexp],alfa,beta,gamma);
216  }
217  ntoMCtrack[jexp]=1;
218 
219  } else { // continuation of if(firstime)
220 
221  flaggo=true;
222  for(j=0; j<ntoMCtrack[jexp]; j++){
223  if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
224  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
225  flaggo=false;
226  break;
227  }
228  }
229  if(flaggo){
230  toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
231  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
232  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
233  if( Rr<0.) {
234  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
235  } else {
236  alfa = -2.*Cx;
237  beta = -2.*Cy;
238  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
239  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=
240  FindDistance(Ox->at(jexp),Oy->at(jexp),R->at(jexp),
241  tanlow[jexp],tanmid[jexp],tanup[jexp],
242  alfa,beta,gamma);
243  }
244  ntoMCtrack[jexp]++;
245  } // end of if(flaggo)
246  }
247 
248  } // end of for(i=0; i<nSttParHitsinTrack->at(jexp); i++)
249 
250 
251 
252 // poi i pixel -------------------------------------------
253 
254  for(i=0; i<nMvdPixelHitsinTrack->at(jexp); i++){
255  nindex = jexp*MAXMVDPIXELHITSINTRACK + i;
256 
257 
258  enne = FromPixeltoMCTrack->at( ListMvdPixelHitsinTrack->at(nindex) ) ;
259  if(enne<0) continue; // hit not associated to any MC track; noise hit.
260 
261  if(firstime) {
262  toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
263  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
264  firstime = false;
265 
266  getMCInfo(BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
267  if( Rr<0.) {
268  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
269  } else {
270  alfa = -2.*Cx;
271  beta = -2.*Cy;
272  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
273  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]= FindDistance(Ox->at(jexp),Oy->at(jexp),
274  R->at(jexp),tanlow[jexp],tanmid[jexp],tanup[jexp],alfa,beta,gamma);
275  }
276  ntoMCtrack[jexp]=1;
277 
278  } else { // continuation of if(firstime)
279 
280  flaggo=true;
281  for(j=0; j<ntoMCtrack[jexp]; j++){
282  if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
283  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
284  flaggo=false;
285  break;
286  }
287  }
288  if(flaggo){
289  toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
290  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
291  getMCInfo(BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
292  if( Rr<0.) {
293  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
294  } else {
295  alfa = -2.*Cx;
296  beta = -2.*Cy;
297  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
298  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]= FindDistance(Ox->at(jexp),Oy->at(jexp),
299  R->at(jexp),tanlow[jexp],tanmid[jexp],tanup[jexp],alfa,beta,gamma);
300  }
301  ntoMCtrack[jexp]++;
302  } // end of if(flaggo)
303  }
304 
305  } // end of for(i=0; i<nMvdPixelHitsinTrack->at(jexp); i++)
306 
307 // le strip -------------------------------------------
308 
309  for(i=0; i<nMvdStripHitsinTrack->at(jexp); i++){
310  nindex = jexp*MAXMVDSTRIPHITSINTRACK + i;
311  enne = FromStriptoMCTrack->at( ListMvdStripHitsinTrack->at(nindex) ) ;
312  if(enne<0) continue; // hit not associated to any MC track; noise hit.
313 
314  if(firstime) {
315  toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
316  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
317  firstime = false;
318 
319  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
320  if( Rr<0.) {
321  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
322  } else {
323  alfa = -2.*Cx;
324  beta = -2.*Cy;
325  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
326  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]= FindDistance(Ox->at(jexp),Oy->at(jexp),
327  R->at(jexp),tanlow[jexp],tanmid[jexp],tanup[jexp],alfa,beta,gamma);
328  }
329  ntoMCtrack[jexp]=1;
330 
331  } else { // continuation of if(firstime)
332 
333  flaggo=true;
334  for(j=0; j<ntoMCtrack[jexp]; j++){
335  if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
336  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
337  flaggo=false;
338  break;
339  }
340  }
341  if(flaggo){
342  toMCtracklist[jexp*MAXSTTHITSINTRACK+ ntoMCtrack[jexp] ] = enne;
343  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
344  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
345  if( Rr<0.) {
346  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
347  } else {
348  alfa = -2.*Cx;
349  beta = -2.*Cy;
350  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
351  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=
352  FindDistance(Ox->at(jexp),Oy->at(jexp),R->at(jexp),
353  tanlow[jexp],tanmid[jexp],tanup[jexp],
354  alfa,beta,gamma);
355  }
356  ntoMCtrack[jexp]++;
357  } // end of if(flaggo)
358  }
359 
360  } // end of for(i=0; i<nMvdStripHitsinTrack->at(jexp); i++)
361 
362 
363 
364 
365 // the SciTil hits -------------------------------------------
366 
367  for(i=0; i<nSciTilHitsinTrack->at(jexp); i++){
368  nindex = jexp*MAXSCITILHITSINTRACK+i;
369  int SciTilTilenumber = ListSciTilHitsinTrack->at(nindex);
370  // nFromSciTiltoMCTrack is zero in case this SciTil hit is not associated to any
371  // MC truth track. In that case effectively the SciTil hit is ignored.
372  for(int iMClinks=0; iMClinks< nFromSciTiltoMCTrack->at(SciTilTilenumber);iMClinks++){
373 
374  enne = FromSciTiltoMCTrackList->at(SciTilTilenumber*nMCTracks+iMClinks);
375  if(firstime) {
376  toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
377  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
378  firstime = false;
379 
380  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
381  if( Rr<0.) {
382  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
383  } else {
384  alfa = -2.*Cx;
385  beta = -2.*Cy;
386  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
387  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]= FindDistance(Ox->at(jexp),Oy->at(jexp),
388  R->at(jexp),tanlow[jexp],tanmid[jexp],tanup[jexp],alfa,beta,gamma);
389  }
390  ntoMCtrack[jexp]=1;
391 
392  } else { // continuation of if(firstime)
393 
394  flaggo=true;
395  for(j=0; j<ntoMCtrack[jexp]; j++){
396  if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
397  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
398  flaggo=false;
399  break;
400  }
401  }
402  if(flaggo){
403  toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
404  toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
405  getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
406  if( Rr<0.) {
407  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
408  } else {
409  alfa = -2.*Cx;
410  beta = -2.*Cy;
411  gamma = Cx*Cx+Cy*Cy-Rr*Rr;
412  toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=
413  FindDistance(Ox->at(jexp),Oy->at(jexp),R->at(jexp),
414  tanlow[jexp],tanmid[jexp],tanup[jexp],
415  alfa,beta,gamma);
416  }
417  ntoMCtrack[jexp]++;
418  } // end of if(flaggo)
419  }
420 
421  } // end of for(int iMClinks=0; iMClinks< ...
422  } // end of for(i=0; i<nSciTilHitsinTrack->at(jexp); i++)
423 
424 
425  } // end of for(jexp=0; jexp< nTracksFoundSoFar ;jexp++)
426 
427 //--------------------------------------------------------------------
428 
429 
430 
431  itemp=0;
432  while ( itemp > -1){
433  itemp=-1;
434  massimo = -1;
435  minimo = 999999999999.;
436  for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
437  if(!keepit->at(jexp)) continue;
438  if( !inclusionExp[jexp]) continue;
439  for(i=0; i< ntoMCtrack[jexp]; i++){
440  if( !inclusionMC[jexp*tmp_dim+i]) continue;
441  if( toMCtrackdistance[jexp*MAXSTTHITSINTRACK+i]<-0.5) continue;
442 
443  if( toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+i]>massimo){
444  massimo=toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+i];
445  minimo=toMCtrackdistance[jexp*MAXSTTHITSINTRACK+i];
446  itemp = toMCtracklist[jexp*MAXSTTHITSINTRACK+i];
447  jtemp = jexp;
448  } else if ( toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+i]== massimo){
449  if( toMCtrackdistance[jexp*MAXSTTHITSINTRACK+i]<minimo){
450  minimo=toMCtrackdistance[jexp*MAXSTTHITSINTRACK+i];
451  itemp = toMCtracklist[jexp*MAXSTTHITSINTRACK+i];
452  jtemp = jexp;
453  }
454  }
455  } // end of for(i=0; i< ntoMCtrack[jexp]; i++)
456  } // end of for(jexp=0; jexp< nTracksFoundSoFar ;jexp++)
457 
458 
459  if( itemp>-1 ){
460  daTrackFoundaTrackMC->at(jtemp)=itemp;
461  inclusionExp[jtemp]=false;
462  for(jexp=0; jexp<nTracksFoundSoFar;jexp++){
463  if(!keepit->at(jexp)) continue;
464  for(int jk=0;jk<ntoMCtrack[jexp];jk++){
465  if( itemp==toMCtracklist[jexp*MAXSTTHITSINTRACK+jk]){
466  inclusionMC[jexp*tmp_dim+jk]=false;
467  }
468  }
469  } // end of for(jexp=0; jexp<nTracksFoundSoFar;jexp++)
470  }
471  } // end while ( itemp > -1)
472 
473  return;
474 
475 
476 }
void getMCInfo(Double_t BFIELD, Double_t CVEL, Double_t *Cx, Double_t *Cy, TClonesArray *fMCTrackArray, Int_t MCTrack, Double_t *Rr)
Int_t i
Definition: run_full.C:25
Double_t FindDistance(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t tanlow, Double_t tanmid, Double_t tanup, Double_t alfa, Double_t beta, Double_t gamma)
const Double_t BFIELD
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
double dx
const int MAXSTTHITSINTRACK
const Double_t CVEL
T & at(int index)
Definition: PndTrkVectors.h:54
PndTrkComparisonMCtruth::ClassDef ( PndTrkComparisonMCtruth  ,
 
)
int PndTrkComparisonMCtruth::ComparisonwithMC ( PndTrkComparisonMCtruth_io_Data  ioData)

Definition at line 489 of file PndTrkComparisonMCtruth.cxx.

References angle, atan2(), PndTrkComparisonMCtruth_io_Data::Bfield, BFIELD, PndTrkComparisonMCtruth_io_Data::Charge, cos(), PndTrkComparisonMCtruth_io_Data::Cvel, CVEL, PndTrkComparisonMCtruth_io_Data::daTrackFoundaTrackMC, PndTrkComparisonMCtruth_io_Data::DIMENSIONSciTil, DIMENSIONSCITIL, Double_t, PndTrkComparisonMCtruth_io_Data::Errorsqpixel, ERRORSQPIXEL, PndTrkComparisonMCtruth_io_Data::Errorsqstrip, ERRORSQSTRIP, fabs(), PndTrkComparisonMCtruth_io_Data::FI0, PndTrkComparisonMCtruth_io_Data::fMCTrackArray, PndTrkComparisonMCtruth_io_Data::fMvdMCPointArray, fParticle, PndTrkComparisonMCtruth_io_Data::fSciTHitArray, PndTrkComparisonMCtruth_io_Data::fSciTilMaxNumber, PndTrkComparisonMCtruth_io_Data::fSciTPointArray, PndTrkComparisonMCtruth_io_Data::fSttPointArray, g, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), h, PndTrkComparisonMCtruth_io_Data::HANDLE, PndTrkComparisonMCtruth_io_Data::HANDLE2, i, PndTrkComparisonMCtruth_io_Data::InclusionListStt, PndTrkComparisonMCtruth_io_Data::info, PndTrkComparisonMCtruth_io_Data::istampa, PndTrkComparisonMCtruth_io_Data::IVOLTE, PndTrkComparisonMCtruth_io_Data::KAPPA, PndTrkComparisonMCtruth_io_Data::keepit, PndTrkComparisonMCtruth_io_Data::ListMvdPixelHitsinTrack, PndTrkComparisonMCtruth_io_Data::ListMvdStripHitsinTrack, PndTrkComparisonMCtruth_io_Data::ListSciTilHitsinTrack, PndTrkComparisonMCtruth_io_Data::ListSttParHitsinTrack, PndTrkComparisonMCtruth_io_Data::ListSttSkewHitsinTrack, PndTrkComparisonMCtruth_io_Data::ListTrackCandHit, PndTrkComparisonMCtruth_io_Data::ListTrackCandHitType, PndTrkComparisonMCtruth_io_Data::MAXMCTRACKS, MAXMVDMCPOINTS, PndTrkComparisonMCtruth_io_Data::Maxmvdmcpoints, PndTrkComparisonMCtruth_io_Data::MAXMVDPIXELHITS, PndTrkComparisonMCtruth_io_Data::MAXMVDPIXELHITSINTRACK, PndTrkComparisonMCtruth_io_Data::MAXMVDSTRIPHITS, PndTrkComparisonMCtruth_io_Data::MAXMVDSTRIPHITSINTRACK, PndTrkComparisonMCtruth_io_Data::MAXSCITILHITS, PndTrkComparisonMCtruth_io_Data::MAXSCITILHITSINTRACK, PndTrkComparisonMCtruth_io_Data::MAXSTTHITS, PndTrkComparisonMCtruth_io_Data::maxstthitsintrack, MAXSTTHITSINTRACK, PndTrkComparisonMCtruth_io_Data::MAXTRACKSPEREVENT, PndTrkComparisonMCtruth_io_Data::MCMvdPixelAloneList, PndTrkComparisonMCtruth_io_Data::MCMvdStripAloneList, PndTrkComparisonMCtruth_io_Data::MCParalAloneList, PndTrkComparisonMCtruth_io_Data::MCSciTilAloneList, PndTrkComparisonMCtruth_io_Data::MCSkewAloneList, PndTrkComparisonMCtruth_io_Data::MCSkewAloneX, PndTrkComparisonMCtruth_io_Data::MCSkewAloneY, PndTrkComparisonMCtruth_io_Data::MvdPixelCommonList, PndTrkComparisonMCtruth_io_Data::MvdPixelSpuriList, PndTrkComparisonMCtruth_io_Data::MvdStripCommonList, PndTrkComparisonMCtruth_io_Data::MvdStripSpuriList, PndTrkComparisonMCtruth_io_Data::nHitsInMCTrack, PndTrkComparisonMCtruth_io_Data::nHitsInSciTile, PndTrkComparisonMCtruth_io_Data::nMCMvdPixelAlone, PndTrkComparisonMCtruth_io_Data::nMCMvdStripAlone, PndTrkComparisonMCtruth_io_Data::nMCParalAlone, PndTrkComparisonMCtruth_io_Data::nMCSciTilAlone, PndTrkComparisonMCtruth_io_Data::nMCSkewAlone, PndTrkComparisonMCtruth_io_Data::nMvdPixelCommon, PndTrkComparisonMCtruth_io_Data::nMvdPixelHit, PndTrkComparisonMCtruth_io_Data::nMvdPixelHitsinTrack, PndTrkComparisonMCtruth_io_Data::nMvdPixelSpuriinTrack, PndTrkComparisonMCtruth_io_Data::nMvdStripCommon, PndTrkComparisonMCtruth_io_Data::nMvdStripHit, PndTrkComparisonMCtruth_io_Data::nMvdStripHitsinTrack, PndTrkComparisonMCtruth_io_Data::nMvdStripSpuriinTrack, PndTrkComparisonMCtruth_io_Data::nParalCommon, PndTrkComparisonMCtruth_io_Data::nSciTilCommon, PndTrkComparisonMCtruth_io_Data::nSciTilHits, PndTrkComparisonMCtruth_io_Data::nSciTilHitsinTrack, PndTrkComparisonMCtruth_io_Data::nSciTilSpuriinTrack, PndTrkComparisonMCtruth_io_Data::nSkewCommon, PndTrkComparisonMCtruth_io_Data::nSkewHitsInMCTrack, PndTrkComparisonMCtruth_io_Data::nSpuriParinTrack, PndTrkComparisonMCtruth_io_Data::nSpuriSkewinTrack, PndTrkComparisonMCtruth_io_Data::nSttHit, PndTrkComparisonMCtruth_io_Data::nSttParHitsinTrack, PndTrkComparisonMCtruth_io_Data::nSttSkewHitsinTrack, PndTrkComparisonMCtruth_io_Data::nTotalCandidates, PndTrkComparisonMCtruth_io_Data::OriginalSciTilList, PndTrkComparisonMCtruth_io_Data::Ox, PndTrkComparisonMCtruth_io_Data::Oy, PndTrkComparisonMCtruth_io_Data::ParalCommonList, PndTrkComparisonMCtruth_io_Data::ParSpuriList, PI, R, PndTrkComparisonMCtruth_io_Data::R, PndTrkComparisonMCtruth_io_Data::refindexMvdPixel, PndTrkComparisonMCtruth_io_Data::refindexMvdStrip, PndTrkComparisonMCtruth_io_Data::resultFitSZagain, PndTrkComparisonMCtruth_io_Data::SciTilCommonList, PndTrkComparisonMCtruth_io_Data::SciTilSpuriList, sin(), PndTrkComparisonMCtruth_io_Data::SkewCommonList, PndTrkComparisonMCtruth_io_Data::SkewSpuriList, sqrt(), PndTrkComparisonMCtruth_io_Data::SttSZfit, PndTrkComparisonMCtruth_io_Data::XMvdPixel, PndTrkComparisonMCtruth_io_Data::XMvdStrip, PndTrkComparisonMCtruth_io_Data::XSciTilCenter, PndTrkComparisonMCtruth_io_Data::YMvdPixel, PndTrkComparisonMCtruth_io_Data::YMvdStrip, PndTrkComparisonMCtruth_io_Data::YSciTilCenter, PndTrkComparisonMCtruth_io_Data::ZMvdPixel, PndTrkComparisonMCtruth_io_Data::ZMvdStrip, and PndTrkComparisonMCtruth_io_Data::ZSciTilCenter.

Referenced by PndTrkTracking2::Exec().

492 {
493 
494  int
495  i,
496  j,
497  //dim1, //[R.K. 01/2017] unused variable?
498  //dim2, //[R.K. 01/2017] unused variable?
499  //dim3, //[R.K. 01/2017] unused variable?
500  nele,
501  ncand,
502  nMCTracks,
503  nMvdMCPoint;
504 
505  Double_t dista;
506 
507  const double PI=3.141592654;
508 
509 
510  Double_t BFIELD = ioData.Bfield;
511  Vec<Short_t> Charge(ioData.Charge,ioData.MAXTRACKSPEREVENT,"Charge") ;
512  Double_t CVEL = ioData.Cvel;
513  Vec<Short_t> daTrackFoundaTrackMC(ioData.daTrackFoundaTrackMC,ioData.MAXTRACKSPEREVENT,"daTrackFoundaTrackMC") ;
517  Vec<Double_t> FI0(ioData.FI0,ioData.MAXTRACKSPEREVENT,"FI0") ;
518  TClonesArray *fMCTrackArray = ioData.fMCTrackArray;
519  TClonesArray *fMvdMCPointArray = ioData.fMvdMCPointArray;
520  FILE * HANDLE = ioData.HANDLE;
521  FILE * HANDLE2 = ioData.HANDLE2;
522  Vec<Double_t> info (ioData.info,ioData.MAXSTTHITS*7,"info") ;
523  int istampa = ioData.istampa;
524  int IVOLTE = ioData.IVOLTE;
525  Vec<Double_t> KAPPA(ioData.KAPPA,ioData.MAXTRACKSPEREVENT,"KAPPA") ;
526  Vec<bool> keepit(ioData.keepit,ioData.MAXTRACKSPEREVENT,"keepit") ;
527  Vec<bool> InclusionListStt(ioData.InclusionListStt,ioData.MAXSTTHITS,"InclusionListStt") ;
528  Vec<Short_t> ListMvdPixelHitsinTrack(ioData.ListMvdPixelHitsinTrack,
529  ioData.MAXTRACKSPEREVENT*ioData.MAXMVDPIXELHITSINTRACK,"ListMvdPixelHitsinTrack") ;
530  Vec<Short_t> ListMvdStripHitsinTrack(ioData.ListMvdStripHitsinTrack,
531  ioData.MAXTRACKSPEREVENT*ioData.MAXMVDSTRIPHITSINTRACK,"ListMvdStripHitsinTrack") ;
532  Vec<Short_t> ListSciTilHitsinTrack(ioData.ListSciTilHitsinTrack,
533  ioData.MAXTRACKSPEREVENT*ioData.MAXSCITILHITSINTRACK,"ListSciTilHitsinTrack") ;
534  Vec<Short_t> ListSttParHitsinTrack(ioData.ListSttParHitsinTrack,
535  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"ListSttParHitsinTrack") ;
536  Vec<Short_t> ListSttSkewHitsinTrack(ioData.ListSttSkewHitsinTrack,
537  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"ListSttSkewHitsinTrack") ;
538  Vec<Short_t> ListTrackCandHit (ioData.ListTrackCandHit,ioData.MAXTRACKSPEREVENT*(ioData.maxstthitsintrack+
539  ioData.MAXMVDPIXELHITSINTRACK+
540  ioData.MAXMVDSTRIPHITSINTRACK+
541  ioData.MAXSCITILHITSINTRACK),"ListTrackCandHit") ;
542  Vec<Short_t> ListTrackCandHitType (ioData.ListTrackCandHitType,
543  ioData.MAXTRACKSPEREVENT*(ioData.maxstthitsintrack+
544  ioData.MAXMVDPIXELHITSINTRACK+
545  ioData.MAXMVDSTRIPHITSINTRACK+
546  ioData.MAXSCITILHITSINTRACK),"ListTrackCandHitType") ;
547  int MAXMCTRACKS = ioData.MAXMCTRACKS;
548  int MAXMVDPIXELHITSINTRACK = ioData.MAXMVDPIXELHITSINTRACK;
549  int MAXMVDMCPOINTS = ioData.Maxmvdmcpoints;
550  int MAXMVDSTRIPHITSINTRACK = ioData.MAXMVDSTRIPHITSINTRACK;
551  int MAXSCITILHITSINTRACK = ioData.MAXSCITILHITSINTRACK;
552  int MAXSTTHITS = ioData.MAXSTTHITS;
554  int MAXTRACKSPEREVENT = ioData.MAXTRACKSPEREVENT;
555 
556  // protection against dimension 0 cases;
557 /*
558  ioData.nTotalCandidates >0 ? dim1 = ioData.nTotalCandidates : dim1 = 1;
559  ioData.nMvdPixelHit >0 ? dim2 = ioData.nMvdPixelHit : dim2 = 1;
560  ioData.nMvdStripHit >0 ? dim3 = ioData.nMvdStripHit : dim3 = 1;
561  ioData.nSttHit >0 ? dim4 = ioData.nSttHit : dim4 = 1;
562 */
563 
564  Vec<Short_t> MCMvdPixelAloneList(ioData.MCMvdPixelAloneList,
565  ioData.nTotalCandidates*ioData.nMvdPixelHit,"MCMvdPixelAloneList") ;
566  Vec<Short_t> MCMvdStripAloneList(ioData.MCMvdStripAloneList,
567  ioData.nTotalCandidates*ioData.nMvdStripHit,"MCMvdStripAloneList") ;
568  Vec<Short_t> MCParalAloneList(ioData.MCParalAloneList,
569  ioData.MAXTRACKSPEREVENT*ioData.nSttHit,"MCParalAloneList") ;
570  Vec<Short_t> MCSkewAloneList(ioData.MCSkewAloneList,
571  ioData.MAXTRACKSPEREVENT*ioData.nSttHit,"MCSkewAloneList") ;
572  Vec<Double_t> MCSkewAloneX(ioData.MCSkewAloneX,ioData.MAXSTTHITS,"MCSkewAloneX") ;
573 
574  Vec<Double_t> MCSkewAloneY(ioData.MCSkewAloneY,ioData.MAXSTTHITS,"MCSkewAloneY") ;
575 
576  Vec<Short_t> MvdPixelCommonList(ioData.MvdPixelCommonList,
577  ioData.nTotalCandidates*ioData.MAXMVDPIXELHITSINTRACK,"MvdPixelCommonList") ;
578  Vec<Short_t> MvdPixelSpuriList(ioData.MvdPixelSpuriList,
579  ioData.nTotalCandidates*ioData.MAXMVDPIXELHITSINTRACK,"MvdPixelSpuriList") ;
580  Vec<Short_t> MvdStripCommonList(ioData.MvdStripCommonList,
581  ioData.nTotalCandidates*ioData.MAXMVDSTRIPHITSINTRACK,"MvdStripCommonList") ;
582  Vec<Short_t> MvdStripSpuriList(ioData.MvdStripSpuriList,
583  ioData.nTotalCandidates*ioData.MAXMVDSTRIPHITSINTRACK,"MvdStripSpuriList") ;
584  Vec<Short_t> nHitsInMCTrack(ioData.nHitsInMCTrack,ioData.MAXTRACKSPEREVENT,"nHitsInMCTrack") ;
585  Vec<Short_t> nMCMvdPixelAlone(ioData.nMCMvdPixelAlone,ioData.nTotalCandidates,"nMCMvdPixelAlone") ;
586  Vec<Short_t> nMCMvdStripAlone(ioData.nMCMvdStripAlone,ioData.nTotalCandidates,"nMCMvdStripAlone") ;
587  Vec<Short_t> nMCParalAlone(ioData.nMCParalAlone,ioData.MAXTRACKSPEREVENT,"nMCParalAlone") ;
588  Vec<Short_t> nMCSkewAlone(ioData.nMCSkewAlone,ioData.MAXTRACKSPEREVENT,"nMCSkewAlone") ;
589  Vec<Short_t> nMvdPixelCommon(ioData.nMvdPixelCommon,ioData.nTotalCandidates,"nMvdPixelCommon") ;
590  Vec<Short_t> nMvdPixelHitsinTrack(ioData.nMvdPixelHitsinTrack,ioData.MAXTRACKSPEREVENT,"nMvdPixelHitsinTrack") ;
591  Vec<Short_t> nMvdStripHitsinTrack(ioData.nMvdStripHitsinTrack,ioData.MAXTRACKSPEREVENT,"nMvdStripHitsinTrack") ;
592  Short_t nMvdPixelHit = ioData.nMvdPixelHit;
593  Vec<Short_t> nMvdPixelSpuriinTrack(ioData.nMvdPixelSpuriinTrack,ioData.nTotalCandidates,"nMvdPixelSpuriinTrack") ;
594  Vec<Short_t> nMvdStripCommon(ioData.nMvdStripCommon,ioData.nTotalCandidates,"nMvdStripCommon") ;
595  Short_t nMvdStripHit = ioData.nMvdStripHit;
596  Vec<Short_t> nMvdStripSpuriinTrack(ioData.nMvdStripSpuriinTrack,ioData.nTotalCandidates,"nMvdStripSpuriinTrack") ;
597  Vec<Short_t> nParalCommon(ioData.nParalCommon,ioData.MAXTRACKSPEREVENT,"nParalCommon") ;
598  Short_t nSciTilHits = ioData.nSciTilHits;
599  Vec<Short_t> nSciTilHitsinTrack(ioData.nSciTilHitsinTrack,ioData.MAXTRACKSPEREVENT,"nSciTilHitsinTrack") ;
600  Vec<Short_t> nSkewCommon(ioData.nSkewCommon,ioData.MAXTRACKSPEREVENT,"nSkewCommon") ;
601  Vec<Short_t> nSkewHitsInMCTrack(ioData.nSkewHitsInMCTrack,ioData.MAXTRACKSPEREVENT,"nSkewHitsInMCTrack") ;
602  Vec<Short_t> nSpuriParinTrack(ioData.nSpuriParinTrack,ioData.MAXTRACKSPEREVENT,"nSpuriParinTrack") ;
603  Vec<Short_t> nSpuriSkewinTrack(ioData.nSpuriSkewinTrack,ioData.MAXTRACKSPEREVENT,"nSpuriSkewinTrack") ;
604  Int_t nSttHit = ioData.nSttHit;
605  Vec<Short_t> nSttParHitsinTrack(ioData.nSttParHitsinTrack,ioData.MAXTRACKSPEREVENT,"nSttParHitsinTrack") ;
606  Vec<Short_t> nSttSkewHitsinTrack(ioData.nSttSkewHitsinTrack,ioData.MAXTRACKSPEREVENT,"nSttSkewHitsinTrack") ;
607  Short_t nTotalCandidates = ioData.nTotalCandidates;
608  Vec<Double_t> Ox(ioData.Ox,ioData.MAXTRACKSPEREVENT,"Ox") ;
609  Vec<Double_t> Oy(ioData.Oy,ioData.MAXTRACKSPEREVENT,"Oy") ;
610  Vec<Short_t> ParalCommonList(ioData.ParalCommonList,
611  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"ParalCommonList") ;
612  Vec<Short_t> ParSpuriList(ioData.ParSpuriList,
613  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"ParSpuriList") ;
614  Vec<Double_t> R(ioData.R,ioData.MAXTRACKSPEREVENT,"R") ;
615  Vec<Double_t> refindexMvdPixel(ioData.refindexMvdPixel,ioData.MAXMVDPIXELHITS,"refindexMvdPixel") ;
616  Vec<Double_t> refindexMvdStrip(ioData.refindexMvdStrip,ioData.MAXMVDSTRIPHITS,"refindexMvdStrip") ;
617  Vec<Short_t> resultFitSZagain(ioData.resultFitSZagain,ioData.MAXTRACKSPEREVENT,"resultFitSZagain") ;
618  Vec<Short_t> SkewCommonList(ioData.SkewCommonList,
619  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"SkewCommonList") ;
620  Vec<Short_t> SkewSpuriList(ioData.SkewSpuriList,
621  ioData.MAXTRACKSPEREVENT*ioData.maxstthitsintrack,"SkewSpuriList") ;
622  Vec<bool> SttSZfit(ioData.SttSZfit,ioData.MAXTRACKSPEREVENT,"SttSZfit") ;
623  Vec<Double_t> XMvdPixel(ioData.XMvdPixel,ioData.MAXMVDPIXELHITS,"XMvdPixel") ;
624  Vec<Double_t> XMvdStrip(ioData.XMvdStrip,ioData.MAXMVDSTRIPHITS,"XMvdStrip") ;
625  Vec<Double_t> XSciTilCenter(ioData.XSciTilCenter,ioData.MAXSCITILHITS,"XSciTilCenter") ;
626  Vec<Double_t> YMvdPixel(ioData.YMvdPixel,ioData.MAXMVDPIXELHITS,"YMvdPixel") ;
627  Vec<Double_t> YMvdStrip(ioData.YMvdStrip,ioData.MAXMVDSTRIPHITS,"YMvdStrip") ;
628  Vec<Double_t> YSciTilCenter(ioData.YSciTilCenter,ioData.MAXSCITILHITS,"YSciTilCenter") ;
629  Vec<Double_t> ZMvdPixel(ioData.ZMvdPixel,ioData.MAXMVDPIXELHITS,"ZMvdPixel") ;
630  Vec<Double_t> ZMvdStrip(ioData.ZMvdStrip,ioData.MAXMVDSTRIPHITS,"ZMvdStrip") ;
631  Vec<Double_t> ZSciTilCenter(ioData.ZSciTilCenter,ioData.MAXSCITILHITS,"ZSciTilCenter") ;
632 
633 
634  nele = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK+
635  MAXSCITILHITSINTRACK;
636 
637 
638 
639 // marker2 per cambioperl;
640 
641 //---------- fetching the MC truth tracks
642  nMCTracks = fMCTrackArray->GetEntriesFast(); // num. tracce/evento
643 
644  if (nMCTracks ==0){
645  // cout<<"from PndTrkComparisonMCTruth : N. MC truth tracks = 0, return!\n"<<endl;
646  return 0;
647  } else if(nMCTracks> MAXMCTRACKS){
648  // cout<<"from PndTrkComparisonMCTruth : N. MC truth tracks = "<<nMCTracks
649  // <<" and it is > MAXMCTRACKS = "<<MAXMCTRACKS
650  // <<", setting it equal to MAXMCTRACKS.\n";
651  nMCTracks = MAXMCTRACKS;
652  }
653 
654  // inizio cambio_in_perl
655  if(istampa>=2) stampaMCTracks(
656  BFIELD,
657  CVEL,
658  fMCTrackArray,
659  nMCTracks
660  );
661  // fine cambio_in_perl
662 
663 // --------------------------------------------- get MC Points of MVD
664 
665  if( fMvdMCPointArray){
666  nMvdMCPoint = fMvdMCPointArray->GetEntriesFast();
667  } else {
668  nMvdMCPoint = 0;
669  }
670 
671  if(nMvdMCPoint>MAXMVDMCPOINTS) {
672  cout<<"from PndTracking, nMvdMCPoint = "<<nMvdMCPoint
673  <<" and it is > the maximum number allowed ("<<MAXMVDMCPOINTS<<
674  ")"<<
675  ", setting nMvdMCPoint to "<<MAXMVDMCPOINTS<<endl;
676  nMvdMCPoint=MAXMVDMCPOINTS;
677  }
678  if(istampa>=2) cout<<"N. MC Points delle Mvd = "<<nMvdMCPoint<<endl;
679 
680 //-------------------- comparison of the PndTrackCand from PR of the STT to the MC truth
681 // associate the tracks found with Pattern Recognition to the MC tracks
682 
683 
684 // the following method associates the Mvd hits to corresponding MC tracks
685 
686 
687  // non cambiare le seguenti righe
688  // perche' vengono processate da modificaPndTrkComparisonMCtruth.pl
689  int dimensioneP, dimensioneS;
690  if( nMvdPixelHit==0 ){
691  dimensioneP =1;
692  } else {
693  dimensioneP =nMvdPixelHit;
694  }
695 
696  if( nMvdStripHit ==0 ){
697  dimensioneS =1;
698  } else {
699  dimensioneS =nMvdStripHit;
700  }
701 
702  Int_t FromPixeltoMCTra[dimensioneP],
703  FromStriptoMCTra[dimensioneS];
704  Vec <Int_t> FromPixeltoMCTrack(FromPixeltoMCTra,dimensioneP,"FromPixeltoMCTrack");
705  Vec <Int_t> FromStriptoMCTrack(FromStriptoMCTra,dimensioneS,"FromStriptoMCTrack");
706  // fine processamento;
707 
708  // inizio cambio_in_perl
709  MvdMatchtoMC(
710  ERRORSQPIXEL,
711  ERRORSQSTRIP,
712  fMvdMCPointArray,
713  nMvdMCPoint,
714  istampa,
715  IVOLTE,
716  nMvdPixelHit,
717  nMvdStripHit,
718  &refindexMvdPixel,
719  &refindexMvdStrip,
720  &XMvdPixel,
721  &XMvdStrip,
722  &YMvdPixel,
723  &YMvdStrip,
724  &ZMvdPixel,
725  &ZMvdStrip,
726  &FromPixeltoMCTrack, // output
727  &FromStriptoMCTrack // output
728  );
729  // fine cambio_in_perl
730 
731  if(istampa>=3){
732  cout<<"\n---------- da PndTrkComparisonMCTruth\n";
733  for(int h=0;h<nMvdPixelHit;h++){
734  cout<<"\til Pixel n. "<<h
735  <<" associato a MC track n. "<<FromPixeltoMCTrack[h]<<endl;
736  }
737  for(int h=0;h<nMvdStripHit;h++){
738  cout<<"\til Strip n. "<<h
739  <<" associato a MC track n. "<<FromStriptoMCTrack[h]<<endl;
740  }
741  }
742 
743 // the following method associates the SciTil hits to corresponding MC tracks
744 
745  // there is the possibility that one SciTil tile contained (before the purge
746  // done at the beginning of the Pattern Recognition) more hits from more MC
747  // truth track. Therefore one SciTil tile has nMCTracks [in principle]
748  // maximum number of connections to MC truth. So FromSciTiltoMCTrack
749  // is meant to be equivalent to a matrix of dimensions
750  // [nSciTilHits][nMCTracks].
751  // Correspondingly, nFromSciTiltoMCTrack[n] is the number of
752  // connections (to the MC truth tracks) of the Sci Tile number n.
753 
754  // non cambiare le seguenti righe
755  // perche' vengono processate da modificaPndTrkComparisonMCtruth.pl
756  int
757  nFromSciTiltoMCTra[nSciTilHits],
758  FromSciTiltoMCTrackL[nSciTilHits*nMCTracks];
759  Vec <int> nFromSciTiltoMCTrack(nFromSciTiltoMCTra,nSciTilHits,"nFromSciTiltoMCTrack");
760  Vec <int> FromSciTiltoMCTrackList(FromSciTiltoMCTrackL,nSciTilHits*nMCTracks,"FromSciTiltoMCTrackList");
761  // fine processamento;
762 
763  // inizio cambio_in_perl
765  BFIELD,
766  CVEL,
767  DIMENSIONSCITIL,
768  fMCTrackArray,
769  &FromSciTiltoMCTrackList,// output
770  ioData.fSciTHitArray,
771  ioData.fSciTilMaxNumber,
772  ioData.fSciTPointArray,
773  &nFromSciTiltoMCTrack,// output
774  ioData.nHitsInSciTile,
775  nMCTracks,
776  nSciTilHits,
777  ioData.OriginalSciTilList,
778  &XSciTilCenter,
779  &YSciTilCenter,
780  &ZSciTilCenter
781  );
782 
783  // fine cambio_in_perl
784 
785 // this section associates the found tracks to the
786 // MC tracks, creating a bilinear correspondence between MC tracks and PR Found tracks
787 
788  if( nMCTracks >0 && nTotalCandidates > 0){
789 
790  int nn;//nmid, //[R.K. 01/2017] unused variable?
791 
792  // non cambiare le seguenti righe
793  // perche' vengono processate da modificaPndTrkComparisonMCtruth.pl
794  Double_t xx1[MAXTRACKSPEREVENT],
795  yy1[MAXTRACKSPEREVENT],
796  xx2[MAXTRACKSPEREVENT],
797  yy2[MAXTRACKSPEREVENT],
798  xx3[MAXTRACKSPEREVENT],
799  yy3[MAXTRACKSPEREVENT];
800  Vec <Double_t> X1(xx1,MAXTRACKSPEREVENT,"X1");
801  Vec <Double_t> Y1(yy1,MAXTRACKSPEREVENT,"Y1");
802  Vec <Double_t> X2(xx2,MAXTRACKSPEREVENT,"X2");
803  Vec <Double_t> Y2(yy2,MAXTRACKSPEREVENT,"Y2");
804  Vec <Double_t> X3(xx3,MAXTRACKSPEREVENT,"X3");
805  Vec <Double_t> Y3(yy3,MAXTRACKSPEREVENT,"Y3");
806  // fine processamento;
807 
808  for(i=0; i<nTotalCandidates;i++){
809  if(!keepit[i]) continue;
810  nn = nSttParHitsinTrack[i]+nSttSkewHitsinTrack[i]+
811  nMvdPixelHitsinTrack[i]+nMvdStripHitsinTrack[i];
812  // assume that the point on trajectory at Z=0 is
813  // the point of closest approach to (0,0,0)
814  X1[i] = Ox[i] + R[i]*cos( FI0[i]);
815  Y1[i] = Oy[i] + R[i]*sin( FI0[i]);
816 
817  // the third point on trajectory is given by the last hit
818 
819 
820  switch ( ListTrackCandHitType[i*nele+nn-1]){
821  case 0 : // Pixel
822  X3[i] = XMvdPixel[ ListTrackCandHit[i*nele+nn-1] ] ;
823  Y3[i] = YMvdPixel[ ListTrackCandHit[i*nele+nn-1] ] ;
824  break;
825  case 1 : // Strip
826  X3[i] = XMvdStrip[ ListTrackCandHit[i*nele+nn-1] ] ;
827  Y3[i] = YMvdStrip[ ListTrackCandHit[i*nele+nn-1] ] ;
828  break;
829  case 2 : // Straw parallel
830  X3[i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 0] ;
831  Y3[i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 1] ;
832  break;
833  case 3 : // Straw skew
834  X3[i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 0] ;
835  Y3[i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 1] ;
836  break;
837  };
838 
839 
840  // the 2nd point on the trajectory is given by the middle between
841  // first and third point.
842 
843  Double_t angle, middle;
844  angle = atan2(Y3[i]-Oy[i], X3[i]-Ox[i]);
845  if(angle <0.) angle+= 2.*PI;
846  if(angle <0.) angle = 0.;
847 
848  if( Charge[i]>0 ){ // clockwise.
849  if( FI0[i] < angle ) angle -= 2.*PI;
850  if( FI0[i] < angle ) angle =0.;
851  } else{ // counterclockwise.
852  if( FI0[i] > angle ) angle += 2.*PI;
853  if( FI0[i] > angle ) angle = FI0[i];
854  }
855  middle = (FI0[i]+angle)/2.;
856 
857  X2[i] = Ox[i] + R[i]*cos( middle );
858  Y2[i] = Oy[i] + R[i]*sin( middle );
859 
860 
861  } // end of for(i=0; i<nTotalCandidates;i++)
862 
863 
864  if(nTotalCandidates>0) AssociateFoundTrackstoMCquater(
865  BFIELD,
866  CVEL,
867  &daTrackFoundaTrackMC,
868  fMCTrackArray,
869  &FromPixeltoMCTrack,
870  &FromStriptoMCTrack,
871  &FromSciTiltoMCTrackList,
872  &keepit,
873  &info,
874  &ListSttParHitsinTrack,
875  &ListMvdPixelHitsinTrack,
876  &ListSciTilHitsinTrack,
877  &ListSttSkewHitsinTrack,
878  &ListMvdStripHitsinTrack,
879  MAXMVDPIXELHITSINTRACK,
880  MAXMVDSTRIPHITSINTRACK,
881  MAXSCITILHITSINTRACK,
882  MAXSTTHITSINTRACK,
883  &nFromSciTiltoMCTrack,
884  &nSttParHitsinTrack,
885  nMCTracks,
886  &nMvdPixelHitsinTrack,
887  nSciTilHits,
888  &nSciTilHitsinTrack,
889  &nSttSkewHitsinTrack,
890  &nMvdStripHitsinTrack,
891  nTotalCandidates,
892  &Ox,
893  &Oy,
894  &R,
895  &X1,
896  &Y1,
897  &X2,
898  &Y2,
899  &X3,
900  &Y3,
901  IVOLTE
902  );
903 
904 
905  } // end if( nMCTracks >0 && nTotalCandidates > 0)
906 
907 
908 //---------- stampe.
909  if(istampa>=3){
910  for(i=0;i<nTotalCandidates;i++){
911  // cout<<"from PndTrkComparisonMCtruth : Track candidate n. "<<i;
912  if(keepit[i]){
913  // cout<<" associated to MC Track n. "<<daTrackFoundaTrackMC[i]<<endl;
914  } else {
915  // cout<<" has keepit false!\n";
916  }
917 
918 
919  }
920 
921 
922  }
923 //--------- fine stampe.
924 
925 
926 // the following method counts the matched to MC and spurious hits for all STT Found tracks and
927 // also the ghost tracks
928 
929 
930 // inizio cambio_in_perl
931 
933  &daTrackFoundaTrackMC,
934  &InclusionListStt,
935  &info,
936  &keepit,
937  MAXSTTHITS,
938  MAXSTTHITSINTRACK,
939  MAXTRACKSPEREVENT,
940  &ListSttParHitsinTrack, // from P&R
941  &ListSttSkewHitsinTrack, // from P&R
942  &MCParalAloneList,
943  &MCSkewAloneList,
944  &nHitsInMCTrack,
945  &nSttParHitsinTrack, // n. hits PA&RALLEL from PR
946  &nMCParalAlone,
947  &nMCSkewAlone,
948  &nParalCommon,
949  &nSkewCommon,
950  &nSkewHitsInMCTrack,
951  &nSttSkewHitsinTrack, // n. hits skew, from P&R
952  &nSpuriParinTrack,
953  &nSpuriSkewinTrack,
954  nSttHit,
955  nTotalCandidates, // those found by P&R
956  &ParalCommonList,
957  &ParSpuriList,
958  &SkewCommonList,
959  &SkewSpuriList
960  );
961 // fine cambio_in_perl
962 
963 // now, knowing nMCSkewAlone and MCSkewAloneList I can calculate the X and Y
964 // position of the corresponding Stt MC POINTS;
965 
966 // The original dimension of MCSkewAloneX is MAXSTTHITS, and since MCSkewAloneList is a list
967 // of Stt hits, then MCSkewAloneList is a number always <= MAXSTTHITS;
968 
969  for(ncand=0;ncand<nTotalCandidates;ncand++){
970  if(!keepit[ncand]) continue;
971  for( j=0;j<nMCSkewAlone[ncand];j++){
972  FairMCPoint* puntator=(FairMCPoint*)ioData.fSttPointArray->At(MCSkewAloneList[ncand*nSttHit+j]);
973  MCSkewAloneX [ MCSkewAloneList[ncand*nSttHit+j] ] = puntator->GetX();
974  MCSkewAloneY [ MCSkewAloneList[ncand*nSttHit+j] ] =puntator->GetY();
975  } // end of for( j=0;j<nMCSkewAlone[ncand];j++)
976  } // end of for(ncand=0;ncand<nTotalCandidates;ncand++)
977 
978 //------------------------
979 // assumo che la traccia MC associata alla traccia trovata dal Pattern Recognition
980 // sia quella giusta e di
981 // conseguenza calcolo gli hits Mvd spuri e comuni
982 
983 // inizio cambio_in_perl
984 
986  &daTrackFoundaTrackMC, // input
987 
988  &FromPixeltoMCTrack, // input
989  &FromStriptoMCTrack, // input
990  &keepit, // input
991 
992  &ListMvdPixelHitsinTrack, // input
993  &ListMvdStripHitsinTrack, // input
994  MAXMVDPIXELHITSINTRACK,
995  MAXMVDSTRIPHITSINTRACK,
996  nMvdPixelHit,
997  nMvdStripHit,
998  &nMvdPixelHitsinTrack, // input
999  &nMvdStripHitsinTrack, // input
1000  nTotalCandidates, // input
1001 
1002  &nMvdPixelCommon, // output
1003  &MvdPixelCommonList, // output
1004  &nMvdPixelSpuriinTrack, // output
1005  &MvdPixelSpuriList, // output
1006  &nMCMvdPixelAlone, // output
1007  &MCMvdPixelAloneList, // output
1008 
1009  &nMvdStripCommon, // output
1010  &MvdStripCommonList, // output
1011  &nMvdStripSpuriinTrack, // output
1012  &MvdStripSpuriList, // output
1013  &nMCMvdStripAlone, // output
1014  &MCMvdStripAloneList // output
1015  );
1016 //----------------------------------------------------------
1017 
1018 // calcolo gli hit comuni, spuri ed alone degli SciTil.
1019 
1021  &daTrackFoundaTrackMC, // input
1022  &FromSciTiltoMCTrackList, // input; equivalent to a matrix
1023  // of dimension [nSciTilHits][nMCTracks]
1024  &keepit, // input
1025  &ListSciTilHitsinTrack, // input; equivalent to a matrix of dimension
1026  // [MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK]
1027  MAXSCITILHITSINTRACK, // input
1028  ioData.MCSciTilAloneList, // output; equivalent to a matrix of dimension
1029  // [MAXTRACKSPEREVENT][nSciTilHits]
1030  &nFromSciTiltoMCTrack, // input
1031  ioData.nMCSciTilAlone, // output
1032  nMCTracks, // input
1033  nSciTilHits, // input
1034  &nSciTilHitsinTrack, // input
1035  ioData.nSciTilCommon, // output
1036  ioData.nSciTilSpuriinTrack, // output
1037  nTotalCandidates, // input
1038  ioData.SciTilCommonList, // output; equivalent to a matrix of dimension
1039  // [MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK]
1040  ioData.SciTilSpuriList // output; equivalent to a matrix of dimension
1041  // [MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK].
1042  );
1043 
1044 // fine cambio_in_perl
1045 
1046 //----------------------------------------------------------
1047 
1048 
1049 // ora il confronto per il meeting di Groningen
1050 
1051 //---------- conteggio delle tracce MC accettabili!!
1052 
1053 int cita;
1054 int citata;
1055 int nMCTracksaccettabili=0;
1056 int ListaMCTracksaccettabili[nMCTracks];
1057 int nHasMvdHit=0;
1058 int nHasSciTilHit=0;
1059 PndMCTrack* pMCtr;
1060 
1061 
1062 
1063 for (i=0;i<nMCTracks;i++){
1064  pMCtr = (PndMCTrack*) fMCTrackArray->At(i);
1065  if ( ! pMCtr ) continue;
1066  Double_t aaa, carica, Rr, Oxx, Oyy, Cx, Cy, Pxx, Pyy ; // Dd, Fifi, //[R.K. 01/2017] unused variable?
1067  Int_t icode;
1068  icode = pMCtr->GetPdgCode() ; // PDG code of track
1069  Oxx = pMCtr->GetStartVertex().X(); // X of starting point track
1070  Oyy = pMCtr->GetStartVertex().Y(); // Y of starting point track
1071  Pxx = pMCtr->GetMomentum().X();
1072  Pyy = pMCtr->GetMomentum().Y();
1073  aaa = sqrt( Pxx*Pxx + Pyy*Pyy);
1074  Rr = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
1075 
1076 
1077 
1078  if(istampa>2){
1079  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1080  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
1081  if (icode>1000000000) carica = 1.;
1082  else carica = fParticle->Charge()/3. ; // charge of track
1083  if(fabs(carica)<1.e-5) continue;
1084  Cx = Oxx + Pyy*1000./(BFIELD*CVEL*carica);
1085  Cy = Oyy - Pxx*1000./(BFIELD*CVEL*carica);
1086  cout<<"from PndTrkComparisonMCTruth, event (starting from 0) n. "<<IVOLTE<<
1087  ", track MC n. "<<i<<", R MC = "<<Rr<<", X Center = "<<Cx
1088  <<", Y Center = "<<Cy<<endl;
1089  }
1090 
1091  citata=0;
1092  for(int ic=0;ic<nSttHit;ic++){
1093  // info[*][5] = tipe of inclination of the straw; the following is the requirement that
1094  // the inclination is not 99 (=skew straw) but instead 1 (= parallel straw);
1095  if( ( (int) (info[ic*7 + 6]+0.1) ) == i && info[ic*7 + 5]<2.){
1096  citata++;
1097  }
1098  } // end for(int ic=0;ic<nSttHit;ic++)
1099 
1100  if( citata>2 && fabs(Oxx)<1. && fabs(Oyy) < 1. ) {
1101 
1102 /*
1103  ListaMCTracksaccettabili[nMCTracksaccettabili]=i;
1104  nMCTracksaccettabili++;
1105 */
1106 
1107 
1108  // check if there is at least 1 MvdHit in this MC track;
1109  // the Pixel first;
1110  cita=0;
1111  for(int ic=0;ic<nMvdPixelHit;ic++){
1112  if( FromPixeltoMCTrack[ic] == i ){
1113  cita++;
1114  break;
1115  }
1116  }
1117  // if the Pixel are 0, check the Strips;
1118  if(cita==0){
1119  for(int ic=0;ic<nMvdStripHit;ic++){
1120  if( FromStriptoMCTrack[ic] == i ){
1121  cita++;
1122  break;
1123  }
1124  }
1125  } // end of if;
1126  if(cita>0){
1127  nHasMvdHit++;
1128  // define an acceptable MC track one that has at leat 3 STT parallel hits and
1129  // at least 1 Mvd hit;
1130  ListaMCTracksaccettabili[nMCTracksaccettabili]=i;
1131  nMCTracksaccettabili++;
1132  }
1133 
1134 
1135 
1136 
1137  //-------------------------------
1138 
1139  // check if there is at least 1 SciTil hit in this MC track;
1140  cita=0;
1141  for(int ic=0;ic<nSciTilHits;ic++){
1142  for(int jc=0; jc< nFromSciTiltoMCTrack[ic]; jc++){
1143  if( FromSciTiltoMCTrackList[ic*nMCTracks + jc] == i ){
1144  cita++;
1145  break;
1146  }
1147  } // end for(int jc=0;
1148  if(cita>0) break;
1149  } // end for(int ic=0;ic<nSciTilHits;ic++)
1150  if(cita>0){ nHasSciTilHit++; }
1151 
1152  } // end of if( citata>2 && fabs(Oxx)<1. && fabs(Oyy) < 1. )
1153 
1154 } // end of for (i=0;i<nMCTracks;i++)
1155 
1156 
1157 //----------- fine conteggio delle tracce MC accettabili
1158 
1159 
1160 
1161  fprintf(HANDLE, "\n Evento %d NTotaleTracceMC %d ,",IVOLTE,
1162  nMCTracksaccettabili);
1163  fprintf(HANDLE, "\tdi cui %d con almeno 1 hit Mvd e %d con almeno 1 hit SciTil.\n",
1164  nHasMvdHit,nHasSciTilHit);
1165  int ibene=0;
1166  if(nMCTracksaccettabili>0){
1167  for(int ii=0; ii<nTotalCandidates;ii++){
1168  for(i=0;i<nMCTracksaccettabili;i++){
1169  if( daTrackFoundaTrackMC[ii]==ListaMCTracksaccettabili[i]){
1170  ibene++;
1171  }
1172  }
1173  }
1174  }
1175  if(ibene>0) fprintf(HANDLE,"\tn. volte almeno 1 traccia MC accettabile e' ricostruita %d\n"
1176  ,ibene);
1177 bool flaggo;
1178 int ii, ibuone=-1;
1179 Double_t HoughFiii;
1180 
1181  Double_t perc_trueSttPar = 0. ,
1182  perc_trueSttSkew = 0. ,
1183  perc_missSttSkew = 0. ,
1184  //spurSttSkew = 0. , //[R.K. 01/2017] unused variable?
1185  perc_trueStt = 0. ,
1186  perc_trueMvdPixel = 0. ,
1187  perc_trueMvdStrip = 0. ,
1188  perc_trueMvd = 0. ,
1189  perc_missSttPar = 0. ,
1190  perc_missStt = 0. ,
1191  perc_missMvdPixel = 0. ,
1192  perc_missMvdStrip = 0. ,
1193  perc_missMvd = 0. ;
1194 
1195 
1196 for (ii=0; ii<nTotalCandidates ;ii++){
1197  if(!keepit[ii]) { if(istampa>1) {cout<<"\tevt. n "<<IVOLTE<<", cand. "<<ii<<" ha keepit false."<<
1198  endl;}; continue;}
1199  ibuone++;
1200  fprintf(HANDLE,"----------------------------------------------------------\n");
1201  i=daTrackFoundaTrackMC[ii];
1202 
1203 
1204 
1205  if( i <0 ) {
1206  fprintf(HANDLE,
1207 " No TracciaMC associated to found track n. %d in pattern recognition, with %d Hits ||, %d skew hits, %f Radius \n "
1208  ,ibuone,nSttParHitsinTrack[ii], nSttSkewHitsinTrack[ii], R[ii] );
1209  continue;
1210  }
1211  if( ( !SttSZfit[ii] )&&(resultFitSZagain[ii] !=1 )) {
1212  fprintf(HANDLE,
1213 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' in Z-S e' fallito il fit \n"
1214  ,i,ibuone);
1215  continue;
1216  }
1217  if(fabs(KAPPA[ii])<1.e-20 ){
1218  fprintf(HANDLE,
1219 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' KAPPA troppo piccolo; KAPPA = %g\n",
1220  i,ibuone,KAPPA[ii]);
1221  continue;
1222  }
1223  dista=sqrt( Ox[ii]*Ox[ii]+Oy[ii]*Oy[ii] );
1224  if(fabs(dista)<1.e-20 ){
1225  fprintf(HANDLE,
1226 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' centro Helix Cilinder trovato dista solo %g da (0,0)\n",
1227  i,ibuone,dista);
1228  continue;
1229  }
1230  pMCtr = (PndMCTrack*) fMCTrackArray->At(i);
1231  if ( ! pMCtr ){
1232  fprintf(HANDLE,
1233  " MC track n. %d doesn't have pointer to MC Track TClones Array\n",
1234  i);
1235  continue;
1236  }
1237 
1238 // controllo che la traccia associata MC sia una delle tracce MC 'ragionevoli'.
1239 
1240  flaggo = true;
1241  for(int g=0; g<nMCTracksaccettabili;g++){
1242  if( i==ListaMCTracksaccettabili[g])
1243  {
1244  flaggo=false;
1245  break;
1246  }
1247  }
1248  if(flaggo) continue;
1249 
1250 
1251 // calcolo delle % di hit di vario tipo associati a questa traccia;
1252 
1253 
1254  if(nHitsInMCTrack[ii]>0){
1255  perc_trueSttPar = nParalCommon[ii]/((double) nHitsInMCTrack[ii]);
1256  perc_missSttPar =(nHitsInMCTrack[ii]-nParalCommon[ii])/((double) nHitsInMCTrack[ii]);
1257  }else{ perc_trueSttPar = -0.01 ; perc_missSttPar = -0.01; }
1258 
1259  if(nSkewHitsInMCTrack[ii]>0){
1260  perc_trueSttSkew = nSkewCommon[ii]/((double) nSkewHitsInMCTrack[ii]);
1261  perc_missSttSkew = (nSkewHitsInMCTrack[ii]-nSkewCommon[ii])/((double) nSkewHitsInMCTrack[ii]);
1262  }else{ perc_trueSttSkew = -0.01 ; perc_missSttSkew = -0.01; }
1263 
1264  if( (nHitsInMCTrack[ii]+nSkewHitsInMCTrack[ii]) > 0) {
1265  perc_trueStt = (nParalCommon[ii]+nSkewCommon[ii])/((double) nHitsInMCTrack[ii]+nSkewHitsInMCTrack[ii]);
1266  perc_missStt = ((double)(nHitsInMCTrack[ii]-nParalCommon[ii])+(nSkewHitsInMCTrack[ii]- nSkewCommon[ii]))
1267  /( nHitsInMCTrack[ii]+nSkewHitsInMCTrack[ii] );
1268  }else{ perc_trueStt = -0.01 ; perc_missStt = -0.01; }
1269 
1270  if(nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]>0){
1271  perc_trueMvdPixel = nMvdPixelCommon[ii]/((double) nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]);
1272  perc_missMvdPixel = nMCMvdPixelAlone[ii]/((double) nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]);
1273  }else{ perc_trueMvdPixel = -0.01 ; perc_missMvdPixel = -0.01; }
1274 
1275  if(nMvdStripCommon[ii]+nMCMvdStripAlone[ii]>0){
1276  perc_trueMvdStrip = nMvdStripCommon[ii]/((double) nMvdStripCommon[ii]+nMCMvdStripAlone[ii]);
1277  perc_missMvdStrip = nMCMvdStripAlone[ii]/((double) nMvdStripCommon[ii]+nMCMvdStripAlone[ii]);
1278  }else{ perc_trueMvdStrip = -0.01 ; perc_missMvdStrip = -0.01; }
1279 
1280  if( nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]+nMvdStripCommon[ii]+nMCMvdStripAlone[ii]>0){
1281  perc_trueMvd = (nMvdStripCommon[ii]+nMvdPixelCommon[ii])/
1282  ((double) nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]+nMvdStripCommon[ii]+nMCMvdStripAlone[ii]);
1283  perc_missMvd = (nMCMvdPixelAlone[ii]+nMCMvdStripAlone[ii])/
1284  ((double) nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii]+nMvdStripCommon[ii]+nMCMvdStripAlone[ii]);
1285  }else{ perc_trueMvd = -0.01 ; perc_missMvd = -0.01; }
1286 
1287 
1288  fprintf(HANDLE,
1289 " TracciaMC %d ParHitsMC %d ParMecc %d ParMeccSpuri %d SkewHitsMC %d SkewMecc %d SkewMeccSpuri %d\n",
1290  i,
1291  nHitsInMCTrack[ii],
1292  nParalCommon[ii],
1293  nSpuriParinTrack[ii],
1294  nSkewHitsInMCTrack[ii],
1295  nSkewCommon[ii],
1296  nSpuriSkewinTrack[ii]
1297 
1298  ) ;
1299  fprintf(HANDLE,"\t\t%d PixelHitsMC %d PixelHitsMecc %d PixelMeccSpuri ",
1300 nMvdPixelCommon[ii]+nMCMvdPixelAlone[ii],nMvdPixelCommon[ii],nMvdPixelSpuriinTrack[ii]);
1301  fprintf(HANDLE,"%d StripHitsMC %d StripHitsMecc %d StripMeccSpuri\n",
1302 nMvdStripCommon[ii]+nMCMvdStripAlone[ii],nMvdStripCommon[ii],nMvdStripSpuriinTrack[ii]);
1303  fprintf(HANDLE,"\t\t%d SciTilHitsMC %d SciTilHitsMecc %d SciTilMeccSpuri\n",
1304 ioData.nSciTilCommon[ii]+ioData.nMCSciTilAlone[ii],ioData.nSciTilCommon[ii],ioData.nSciTilSpuriinTrack[ii]);
1305 
1306  fprintf(HANDLE,
1307 " e corrisponde a track found n. %d\n", ibuone );
1308  fprintf(HANDLE,
1309 " AVENDO %d hits paralleli e %d hits skew non mecciati dalla corrisponde track found\n"
1310  , nMCParalAlone[ii],nMCSkewAlone[ii] );
1311 
1312  HoughFiii = atan2(Oy[ii],Ox[ii]);
1313  if(HoughFiii<0.) HoughFiii += 2.*PI;
1314 
1315  Double_t aaa, carica, Rr, Fifi, Oxx, Oyy, Cx, Cy, Pxx, Pyy ;// Dd, //[R.K. 01/2017] unused variable?
1316  Int_t icode;
1317  icode = pMCtr->GetPdgCode() ; // PDG code of track
1318  Oxx = pMCtr->GetStartVertex().X(); // X of starting point track
1319  Oyy = pMCtr->GetStartVertex().Y(); // Y of starting point track
1320  Pxx = pMCtr->GetMomentum().X();
1321  Pyy = pMCtr->GetMomentum().Y();
1322  aaa = sqrt( Pxx*Pxx + Pyy*Pyy);
1323  Rr = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
1324  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1325  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
1326  if (icode>1000000000) carica = 1.;
1327  else carica = fParticle->Charge()/3. ; // charge of track
1328  if(fabs(carica)<1.e-5) fprintf(HANDLE," MC track n. %d e' neutra, assurdo!\n",i);
1329  Cx = Oxx + Pyy*1000./(BFIELD*CVEL*carica);
1330  Cy = Oyy - Pxx*1000./(BFIELD*CVEL*carica);
1331  Fifi = atan2(Cy, Cx); // MC truth Fifi angle of circle of Helix trajectory
1332  if(Fifi<0.) Fifi += 2.*PI;
1333  Double_t Kakka ;
1334  if( fabs( pMCtr->GetMomentum().Z() )< 1.e-20) Kakka = 99999999.;
1335  else Kakka = -carica*0.001*BFIELD*CVEL/pMCtr->GetMomentum().Z();
1336 
1337  fprintf(HANDLE,
1338 " R_MC %g R %g Fi_MC %g Fi %g KAPPA_MC %g KAPPA %g FI0_MC %g FI0 %g\n",
1339  Rr,
1340  R[ ii ],
1341  Fifi,
1342  HoughFiii,
1343  Kakka,
1344  KAPPA[ ii ],
1345  fmod(Fifi+ PI, 2.*PI), // FI0 da MC truth
1346  FI0[ ii ]
1347  );
1348 
1349  fprintf(HANDLE,
1350 " %%truePar %5.1f ;%%missPar %5.1f ;%%trueSkew %5.1f ;%%missSkew %5.1f ;%%trueStt %5.1f ;%%missStt %5.1f ;\n",
1351  perc_trueSttPar*100.,perc_missSttPar*100.,perc_trueSttSkew*100.,
1352  perc_missSttSkew*100.,perc_trueStt*100.,perc_missStt*100.
1353  );
1354 
1355 
1356  fprintf(HANDLE,
1357 " %%truePix %5.1f ;%%missPix %5.1f ;%%trueStrip %5.1f ;%%missStrip %5.1f ;%%trueMvd %5.1f ;%%missMvd %5.1f ;\n",
1358  perc_trueMvdPixel*100.,perc_missMvdPixel*100.,perc_trueMvdStrip*100.,
1359  perc_missMvdStrip*100.,perc_trueMvd*100.,perc_missMvd*100.
1360  );
1361 
1362 
1363 //------------------------
1364 
1365 
1366  fprintf(HANDLE2,"Evento n. %d Found track %d messa in PndTrackCand",IVOLTE, ii);
1367  fprintf(HANDLE2,
1368 " R_MC %g R %g Fi_MC %g Fi %g KAPPA_MC %g KAPPA %g FI0_MC %g FI0 %g\n",
1369  Rr,
1370  R[ ii ],
1371  Fifi,
1372  HoughFiii,
1373  Kakka,
1374  KAPPA[ ii ],
1375  fmod(Fifi+ PI, 2.*PI),
1376  FI0[ ii ]
1377  );
1378 
1379 //----------------------------------
1380 
1381 
1382  } // end of for (ii=0; ii<nTotalCandidates ;ii++)
1383 
1384 
1385 //--------------ghosts
1386 
1387 // fa il conto delle ghost solo sugli eventi che hanno almeno 1 traccia MC accettabile.
1388  int NParghost=0, NParhitsghost=0,icc;
1389  ibuone=-1;
1390  if( nMCTracksaccettabili>0){
1391  for(icc=0; icc<nTotalCandidates;icc++){
1392  if(!keepit[icc]) continue;
1393  ibuone++;
1394  if( daTrackFoundaTrackMC[icc] == -1){
1395  NParghost++;
1396  NParhitsghost += nSttParHitsinTrack[icc]+nSttSkewHitsinTrack[icc];
1397 
1398  if(NParghost==1) fprintf(HANDLE,"----------------------------------------------------------\n");
1399  fprintf(HANDLE," tracce Trovata n. %d e' Ghost\n",ibuone);
1400  }
1401  }
1402  fprintf(HANDLE,
1403 " tracceGhostTrovate %d TotaleHitsGhost %d ----\n",
1404  NParghost,
1405  NParhitsghost
1406  );
1407 
1408 
1409 
1410  fprintf(HANDLE,"----------------------------------------------------------\n");
1411 
1412 
1413 } // end of if( nMCTracksaccettabili>0)
1414 
1415 
1416  return nMCTracks;
1417 }
void MvdMatchtoMC(Double_t ERRORSQPIXEL, Double_t ERRORSQSTRIP, TClonesArray *fMvdMCPointArray, Short_t nMvdMCPoint, int istampa, int IVOLTE, Short_t nMvdPixelHit, Short_t nMvdStripHit, Vec< Double_t > *refindexMvdPixel, Vec< Double_t > *refindexMvdStrip, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip, Vec< Double_t > *ZMvdPixel, Vec< Double_t > *ZMvdStrip, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack)
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
TFile * g
const int MAXMVDMCPOINTS
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void AssociateFoundTrackstoMCquater(Double_t BFIELD, Double_t CVEL, Vec< Short_t > *daTrackFoundaTrackMC, TClonesArray *fMCTrackArray, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack, Vec< int > *FromSciTiltoMCTrackList, Vec< bool > *keepit, Vec< Double_t > *info, Vec< Short_t > *ListSttParHitsinTrack, Vec< Short_t > *ListMvdPixelHitsinTrack, Vec< Short_t > *ListSciTilHitsinTrack, Vec< Short_t > *ListSttSkewHitsinTrack, Vec< Short_t > *ListMvdStripHitsinTrack, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITSINTRACK, int MAXSCITILHITSINTRACK, int MAXSTTHITSINTRACK, Vec< int > *nFromSciTiltoMCTrack, Vec< Short_t > *nSttParHitsinTrack, int nMCTracks, Vec< Short_t > *nMvdPixelHitsinTrack, Short_t nSciTilHits, Vec< Short_t > *nSciTilHitsinTrack, Vec< Short_t > *nSttSkewHitsinTrack, Vec< Short_t > *nMvdStripHitsinTrack, Short_t nTracksFoundSoFar, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *R, Vec< Double_t > *X1, Vec< Double_t > *Y1, Vec< Double_t > *X2, Vec< Double_t > *Y2, Vec< Double_t > *X3, Vec< Double_t > *Y3, int IVOLTE)
const Double_t ERRORSQSTRIP
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
void SciTilMatchedSpurioustoTrackCand(Vec< Short_t > *daTrackFoundaTrackMC, Vec< int > *FromSciTiltoMCTrackList, Vec< bool > *keepit, Vec< Short_t > *ListSciTilHitsinTrack, int MAXSCITILHITSINTRACK, Short_t *MCSciTilAloneList, Vec< int > *nFromSciTiltoMCTrack, Short_t *nMCSciTilAlone, int nMCTracks, Short_t nSciTilHits, Vec< Short_t > *nSciTilHitsinTrack, Short_t *nSciTilCommon, Short_t *nSciTilSpuriinTrack, Short_t nSttTrackCand, Short_t *SciTilCommonList, Short_t *SciTilSpuriList)
const int MAXSTTHITSINTRACK
const Double_t CVEL
const Double_t ERRORSQPIXEL
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
Double_t angle
void MvdMatchedSpurioustoTrackCand(Vec< Short_t > *daTrackFoundaTrackMC, Vec< Int_t > *FromPixeltoMCTrack, Vec< Int_t > *FromStriptoMCTrack, Vec< bool > *keepit, Vec< Short_t > *ListMvdPixelHitsinTrack, Vec< Short_t > *ListMvdStripHitsinTrack, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITSINTRACK, Short_t nMvdPixelHit, Short_t nMvdStripHit, Vec< Short_t > *nMvdPixelHitsinTrack, Vec< Short_t > *nMvdStripHitsinTrack, Short_t nSttTrackCand, Vec< Short_t > *nMvdPixelCommon, Vec< Short_t > *MvdPixelCommonList, Vec< Short_t > *nMvdPixelSpuriinTrack, Vec< Short_t > *MvdPixelSpuriList, Vec< Short_t > *nMCMvdPixelAlone, Vec< Short_t > *MCMvdPixelAloneList, Vec< Short_t > *nMvdStripCommon, Vec< Short_t > *MvdStripCommonList, Vec< Short_t > *nMvdStripSpuriinTrack, Vec< Short_t > *MvdStripSpuriList, Vec< Short_t > *nMCMvdStripAlone, Vec< Short_t > *MCMvdStripAloneList)
void stampaMCTracks(Double_t BFIELD, Double_t CVEL, TClonesArray *fMCTrackArray, int nMCTracks)
void SttMatchedSpurious(Vec< Short_t > *daTrackFoundaTrackMC, Vec< bool > *InclusionListStt, Vec< Double_t > *info, Vec< bool > *keepit, int MAXSTTHITS, int MAXSTTHITSINTRACK, int MAXTRACKSPEREVENT, Vec< Short_t > *ListSttParHitsinTrack, Vec< Short_t > *ListSttSkewHitsinTrack, Vec< Short_t > *MCParalAloneList, Vec< Short_t > *MCSkewAloneList, Vec< Short_t > *nHitsInMCTrack, Vec< Short_t > *nSttParHitsinTrack, Vec< Short_t > *nMCParalAlone, Vec< Short_t > *nMCSkewAlone, Vec< Short_t > *nParalCommon, Vec< Short_t > *nSkewCommon, Vec< Short_t > *nSkewHitsInMCTrack, Vec< Short_t > *nSttSkewHitsinTrack, Vec< Short_t > *nSpuriParinTrack, Vec< Short_t > *nSpuriSkewinTrack, Short_t nSttHits, Short_t nTracksFoundSoFar, Vec< Short_t > *ParalCommonList, Vec< Short_t > *ParSpuriList, Vec< Short_t > *SkewCommonList, Vec< Short_t > *SkewSpuriList)
Double_t R
Definition: checkhelixhit.C:61
void SciTilMatchtoMC(Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, TClonesArray *fMCTrackArray, Vec< int > *FromSciTiltoMCTrackList, TClonesArray *fSciTHitArray, Short_t fSciTilMaxNumber, TClonesArray *fSciTPointArray, Vec< int > *nFromSciTiltoMCTrack, Short_t *nHitsInSciTile, int nMCTracks, Short_t nSciTilHits, Short_t *OriginalSciTilList, Vec< Double_t > *XSciTilCenter, Vec< Double_t > *YSciTilCenter, Vec< Double_t > *ZSciTilCenter)
const Double_t DIMENSIONSCITIL
Double_t PndTrkComparisonMCtruth::FindDistance ( Double_t  Oxx,
Double_t  Oyy,
Double_t  Rr,
Double_t  tanlow,
Double_t  tanmid,
Double_t  tanup,
Double_t  alfa,
Double_t  beta,
Double_t  gamma 
)

Definition at line 1426 of file PndTrkComparisonMCtruth.cxx.

References Double_t, fabs(), i, m, n, and sqrt().

1437 {
1438 // fine cambio_in_perl.
1439  Short_t i,
1440  n;
1441 
1442  Double_t Delta,
1443  m[3],
1444  q,
1445  dist,
1446  dist1,
1447  dist2,
1448  //distlow, //[R.K. 01/2017] unused variable?
1449  //distmid, //[R.K. 01/2017] unused variable?
1450  //distup, //[R.K. 01/2017] unused variable?
1451  totaldist,
1452  x1,
1453  x2,
1454  y1,
1455  y2;
1456 
1457 //int nevento=1; //[R.K. 01/2017] unused variable?
1458 
1459 
1460 
1461 
1462 
1463  m[0] = tanlow;
1464  m[1] = tanmid;
1465  m[2] = tanup;
1466 
1467  n=0;
1468  totaldist=0.;
1469 
1470 
1471  for(i=0;i<3;i++){
1472 
1473  if( tanlow<999998.) {
1474  q = Oyy-m[i]*Oxx;
1475  Delta = alfa*alfa + beta*beta*m[i]*m[i] - 4.*gamma*m[i]*m[i] - 4.*q*q + 4.*m[i]*q*alfa +
1476  + 2.*alfa*beta*m[i] - 4.*beta*q - 4.*gamma;
1477  if( Delta < 0.){
1478  dist = -1.;
1479  } else if (Delta==0.){
1480  x1 = 0.5*(-alfa - 2.*m[i]*q - beta*m[i] )/(1.+m[i]*m[i]);
1481  y1 = m[i]*x1+q;
1482  dist = fabs( sqrt( (Oxx-x1)*(Oxx-x1) + (Oyy-y1)*(Oyy-y1) ) - Rr);
1483  } else {
1484  Delta = sqrt(Delta);
1485  x1 = 0.5*(-alfa - 2.*m[i]*q - beta*m[i] - Delta)/(1.+m[i]*m[i]);
1486  x2 = 0.5*(-alfa - 2.*m[i]*q - beta*m[i] + Delta)/(1.+m[i]*m[i]);
1487  y1 = m[i]*x1+q;
1488  y2 = m[i]*x2+q;
1489  dist1 = fabs( sqrt( (Oxx-x1)*(Oxx-x1) + (Oyy-y1)*(Oyy-y1) ) - Rr);
1490  dist2 = fabs( sqrt( (Oxx-x2)*(Oxx-x2) + (Oyy-y2)*(Oyy-y2) ) - Rr);
1491  if(dist1<dist2){
1492  dist = dist1;
1493  } else{
1494  dist = dist2;
1495  }
1496  }
1497  } else {
1498  Delta = beta*beta - 4.*Oxx*Oxx - 4.*Oxx*alfa - 4.*gamma;
1499 
1500  if( Delta < 0.){
1501  dist = -1.;
1502  } else if (Delta==0.){
1503  dist = fabs( fabs(Oyy+0.5*beta) - Rr);
1504  } else {
1505  Delta = sqrt(Delta);
1506  y1 = -0.5*beta + Delta/2.;
1507  y2 = -0.5*beta - Delta/2.;
1508  dist1 = fabs( fabs(Oyy+0.5*beta + Delta/2.) - Rr);
1509  dist2 = fabs( fabs(Oyy+0.5*beta - Delta/2.) - Rr);
1510  if(dist1<dist2) dist = dist1;
1511  else dist = dist2;
1512  }
1513  }
1514 
1515  if( dist>-0.5) {
1516  totaldist+=dist;
1517  n++;
1518  }
1519 
1520 
1521  } // end of for(i=0;i<3;i++)
1522 
1523 
1524  if(n!=3) totaldist = -1.;
1525  else totaldist = totaldist / n;
1526 
1527  return totaldist;
1528 
1529 }
Int_t i
Definition: run_full.C:25
__m128 m
Definition: P4_F32vec4.h:28
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
int n
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void PndTrkComparisonMCtruth::getMCInfo ( Double_t  BFIELD,
Double_t  CVEL,
Double_t Cx,
Double_t Cy,
TClonesArray *  fMCTrackArray,
Int_t  MCTrack,
Double_t Rr 
)

Definition at line 1539 of file PndTrkComparisonMCtruth.cxx.

References CVEL, Double_t, fabs(), fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), and sqrt().

1548 {
1549 // fine cambio_in_perl.
1550  Int_t icode;
1551  Double_t aaa, Oxx, Oyy, Pxx, Pyy, carica ;// Dd,Fifi, //[R.K. 01/2017] unused variable?
1552  PndMCTrack* pMC;
1553 
1554 
1555  if( MCTrack <0) {
1556  *Rr=-2.;
1557  return;
1558  }
1559 
1560 
1561  pMC = (PndMCTrack*) fMCTrackArray->At(MCTrack);
1562  if ( pMC ) {
1563  icode = pMC->GetPdgCode() ; // PDG code of track
1564  Oxx = pMC->GetStartVertex().X(); // X of starting point track
1565  Oyy = pMC->GetStartVertex().Y(); // Y of starting point track
1566  Pxx = pMC->GetMomentum().X();
1567  Pyy = pMC->GetMomentum().Y();
1568  aaa = sqrt( Pxx*Pxx + Pyy*Pyy);
1569  *Rr = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track
1570  // projected in XY plane; B = 2 Tesla
1571  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1572  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
1573  if (icode>1000000000) carica = 1.;
1574  else carica = fParticle->Charge()/3. ; // charge of track
1575  if(fabs(carica)<1.e-5) { *Rr = -3.; return;}
1576  *Cx = Oxx + Pyy*1000./(BFIELD*CVEL*carica);
1577  *Cy = Oyy - Pxx*1000./(BFIELD*CVEL*carica);
1578  } else {
1579  *Rr = -1.;
1580  }
1581 
1582 
1583 
1584  return;
1585 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
const Double_t CVEL
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
void PndTrkComparisonMCtruth::MvdMatchedSpurioustoTrackCand ( Vec< Short_t > *  daTrackFoundaTrackMC,
Vec< Int_t > *  FromPixeltoMCTrack,
Vec< Int_t > *  FromStriptoMCTrack,
Vec< bool > *  keepit,
Vec< Short_t > *  ListMvdPixelHitsinTrack,
Vec< Short_t > *  ListMvdStripHitsinTrack,
int  MAXMVDPIXELHITSINTRACK,
int  MAXMVDSTRIPHITSINTRACK,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Vec< Short_t > *  nMvdPixelHitsinTrack,
Vec< Short_t > *  nMvdStripHitsinTrack,
Short_t  nSttTrackCand,
Vec< Short_t > *  nMvdPixelCommon,
Vec< Short_t > *  MvdPixelCommonList,
Vec< Short_t > *  nMvdPixelSpuriinTrack,
Vec< Short_t > *  MvdPixelSpuriList,
Vec< Short_t > *  nMCMvdPixelAlone,
Vec< Short_t > *  MCMvdPixelAloneList,
Vec< Short_t > *  nMvdStripCommon,
Vec< Short_t > *  MvdStripCommonList,
Vec< Short_t > *  nMvdStripSpuriinTrack,
Vec< Short_t > *  MvdStripSpuriList,
Vec< Short_t > *  nMCMvdStripAlone,
Vec< Short_t > *  MCMvdStripAloneList 
)

Definition at line 1594 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), and i.

1623 {
1624 // fine cambio_in_perl.
1625 
1626 
1627  int tmp_dim1, tmp_dim2, tmp_dim3;
1628 
1629  if(nSttTrackCand>0) {tmp_dim1=nSttTrackCand;} else {tmp_dim1=1;}
1630  if(nMvdPixelHit>0) {tmp_dim2=nMvdPixelHit;} else {tmp_dim2=1;}
1631  if(nMvdStripHit>0) {tmp_dim3=nMvdStripHit;} else {tmp_dim3=1;}
1632 
1633  // non modificare; modificaperl processa i seguenti statements;
1634  bool TMPincludePixel[tmp_dim1*tmp_dim2];
1635  Vec <bool> includePixel(TMPincludePixel,tmp_dim1*tmp_dim2,"includePixel");
1636 
1637  bool TMPincludeStrip[tmp_dim1*tmp_dim3];
1638  Vec <bool> includeStrip(TMPincludeStrip,tmp_dim1*tmp_dim3,"includeStrip");
1639 
1640  // fine di non modificare; modificaperl processa i seguenti statements;
1641 
1642  Short_t i,j;
1643 
1644  int index, index2;
1645 
1646  for(i=0; i<nSttTrackCand;i++){
1647  if(!keepit->at(i)) continue;
1648  nMvdPixelCommon->at(i)=0;
1649  nMvdPixelSpuriinTrack->at(i)=0;
1650  nMCMvdPixelAlone->at(i)=0;
1651  nMvdStripCommon->at(i)=0;
1652  nMvdStripSpuriinTrack->at(i)=0;
1653  nMCMvdStripAlone->at(i)=0;
1654  }
1655 
1656  for(i=0; i<nSttTrackCand;i++){
1657  if(!keepit->at(i)) continue;
1658  for(j=0;j<nMvdPixelHit;j++){
1659  includePixel[i*tmp_dim2+j]=true;
1660  }
1661  for(j=0;j<nMvdStripHit;j++){
1662  includeStrip[i*tmp_dim3+ j]=true;
1663  }
1664 
1665 
1666  for(j=0;j<nMvdPixelHitsinTrack->at(i);j++){
1667  index = i*MAXMVDPIXELHITSINTRACK+j;
1668  includePixel[i*tmp_dim2+ListMvdPixelHitsinTrack->at(index)]=false;
1669 
1670  if( daTrackFoundaTrackMC->at(i)>= 0 && daTrackFoundaTrackMC->at(i) ==
1671  FromPixeltoMCTrack->at(ListMvdPixelHitsinTrack->at(index))
1672  ){
1673  index2 = i*MAXMVDPIXELHITSINTRACK+nMvdPixelCommon->at(i);
1674  MvdPixelCommonList->at(index2) =
1675  ListMvdPixelHitsinTrack->at(index);
1676  nMvdPixelCommon->at(i)++;
1677  } else {
1678  index2 = i*MAXMVDPIXELHITSINTRACK+nMvdPixelSpuriinTrack->at(i);
1679  MvdPixelSpuriList->at(index2) =
1680  ListMvdPixelHitsinTrack->at(index);
1681  nMvdPixelSpuriinTrack->at(i)++;
1682  }
1683  }
1684 
1685  for(j=0;j<nMvdStripHitsinTrack->at(i);j++){
1686  index = i*MAXMVDSTRIPHITSINTRACK+j;
1687  includeStrip[i *tmp_dim3+ ListMvdStripHitsinTrack->at(index)]=false;
1688  if(daTrackFoundaTrackMC->at(i)>= 0 && daTrackFoundaTrackMC->at(i) ==
1689  FromStriptoMCTrack->at(ListMvdStripHitsinTrack->at(index))
1690  ){
1691  index2 = i*MAXMVDSTRIPHITSINTRACK+nMvdStripCommon->at(i);
1692  MvdStripCommonList->at(index2) =
1693  ListMvdStripHitsinTrack->at(index);
1694  nMvdStripCommon->at(i)++;
1695  } else {
1696  index2 = i*MAXMVDSTRIPHITSINTRACK+nMvdStripSpuriinTrack->at(i);
1697  MvdStripSpuriList->at(index2) =
1698  ListMvdStripHitsinTrack->at(index);
1699  nMvdStripSpuriinTrack->at(i)++;
1700  }
1701  }
1702  } // end of for(i=0; i<nSttTrackCand;i++)
1703 
1704 
1705 
1706  for(j=0; j<nSttTrackCand;j++){
1707  if(!keepit->at(j)) continue;
1708  if( daTrackFoundaTrackMC->at(j)> -1){
1709  for(i=0;i<nMvdPixelHit;i++){
1710  if(!includePixel[j *tmp_dim2+ i]) continue;
1711 
1712  if( daTrackFoundaTrackMC->at(j)==FromPixeltoMCTrack->at(i) ){
1713  index = j*nMvdPixelHit+nMCMvdPixelAlone->at(j);
1714  MCMvdPixelAloneList->at(index)=i;
1715  nMCMvdPixelAlone->at(j)++;
1716  }
1717  }
1718  }
1719  }
1720 
1721  for(j=0; j<nSttTrackCand;j++){
1722  if(!keepit->at(j)) continue;
1723  if( daTrackFoundaTrackMC->at(j)> -1){
1724  for(i=0;i<nMvdStripHit;i++){
1725  if(!includeStrip[j *tmp_dim3+ i]) continue;
1726  if( daTrackFoundaTrackMC->at(j)==FromStriptoMCTrack->at(i) ){
1727  index = j*nMvdStripHit+nMCMvdStripAlone->at(j);
1728  MCMvdStripAloneList->at(index)=i;
1729  nMCMvdStripAlone->at(j)++;
1730  }
1731  }
1732  }
1733  }
1734 
1735  return;
1736 }
Int_t i
Definition: run_full.C:25
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkComparisonMCtruth::MvdMatchtoMC ( Double_t  ERRORSQPIXEL,
Double_t  ERRORSQSTRIP,
TClonesArray *  fMvdMCPointArray,
Short_t  nMvdMCPoint,
int  istampa,
int  IVOLTE,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Vec< Double_t > *  refindexMvdPixel,
Vec< Double_t > *  refindexMvdStrip,
Vec< Double_t > *  XMvdPixel,
Vec< Double_t > *  XMvdStrip,
Vec< Double_t > *  YMvdPixel,
Vec< Double_t > *  YMvdStrip,
Vec< Double_t > *  ZMvdPixel,
Vec< Double_t > *  ZMvdStrip,
Vec< Int_t > *  FromPixeltoMCTrack,
Vec< Int_t > *  FromStriptoMCTrack 
)

Definition at line 1744 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), Double_t, and i.

1764 {
1765 // fine cambio_in_perl.
1766 
1767 
1768 
1769  int tmp_dim ;
1770  if(nMvdMCPoint>0) {tmp_dim = nMvdMCPoint;} else {tmp_dim = 1;}
1771  // non modificare la seguente linea; modificaperl la cambia.
1772  bool TMPinclusionMCPoint[tmp_dim];
1773  Vec <bool> inclusionMCPoint(TMPinclusionMCPoint,tmp_dim,"inclusionMCPoint");
1774 
1775 
1776  Short_t i,
1777  j,
1778  jmcpoint;
1779  Double_t dist,
1780  distance;
1781 
1782  Int_t MCPointtoMCTrackID;
1783 
1784  Double_t XMvdMCPoint,
1785  YMvdMCPoint,
1786  ZMvdMCPoint;
1787 
1788  PndSdsMCPoint * pMvdMCPoint;
1789 
1790 
1791 //---- initializations
1792 
1793  for(i=0; i<nMvdMCPoint;i++){
1794  inclusionMCPoint[i]=true;
1795  }
1796  for(i=0; i<nMvdPixelHit;i++){
1797  FromPixeltoMCTrack->at(i)=-1;
1798  }
1799  for(i=0; i<nMvdStripHit;i++){
1800  FromStriptoMCTrack->at(i)=-1;
1801  }
1802 
1803 //----------
1804 
1805  for(i=0; i<nMvdPixelHit;i++){
1806  if (refindexMvdPixel->at(i)<0.) continue;
1807  // multiply by an arbitrary factor of 2. to take into account the possibility
1808  // that the Mvd hit is rather far (due to cluster analysis by Tobias & Co.)
1809  // than the MC Mvd point;
1810  dist=9999999.;
1811  for(j=0;j<nMvdMCPoint;j++){
1812  // get the MC info.
1813  pMvdMCPoint = (PndSdsMCPoint*) fMvdMCPointArray->At(j);
1814  TVector3 position;
1815  pMvdMCPoint->Position(position);
1816  XMvdMCPoint=position.X();
1817  YMvdMCPoint=position.Y();
1818  ZMvdMCPoint=position.Z();
1819  MCPointtoMCTrackID= pMvdMCPoint->GetTrackID();
1820 
1821  if( !inclusionMCPoint[j]) continue;
1822  distance = (XMvdMCPoint-XMvdPixel->at(i))*(XMvdMCPoint-XMvdPixel->at(i))+
1823  (YMvdMCPoint-YMvdPixel->at(i))*(YMvdMCPoint-YMvdPixel->at(i))+
1824  (ZMvdMCPoint-ZMvdPixel->at(i))*(ZMvdMCPoint-ZMvdPixel->at(i));
1825  if( distance<dist){
1826  FromPixeltoMCTrack->at(i)=MCPointtoMCTrackID;
1827  jmcpoint=j;
1828  dist=distance;
1829  }
1830  } // end of for(j=0;j<nMvdMCPoint;j++)
1831 
1832  if( FromPixeltoMCTrack->at(i)>= 0){
1833  inclusionMCPoint[jmcpoint]=false;
1834  }
1835 
1836  } // end of for(i=0; i<nMvdPixelHit;i++)
1837 
1838  for(i=0; i<nMvdStripHit;i++){
1839  if (refindexMvdStrip->at(i)<0.) continue;
1840  // multiply by an arbitrary factor of 2. to take into account the possibility
1841  // that the Mvd hit is rather far (due to cluster analysis by Tobias & Co.)
1842  // than the MC Mvd point;
1843  dist=9999999.;
1844  for(j=0;j<nMvdMCPoint;j++){
1845  // get the MC info.
1846  pMvdMCPoint = (PndSdsMCPoint*) fMvdMCPointArray->At(j);
1847  TVector3 position;
1848  pMvdMCPoint->Position(position);
1849  XMvdMCPoint=position.X();
1850  YMvdMCPoint=position.Y();
1851  ZMvdMCPoint=position.Z();
1852  MCPointtoMCTrackID= pMvdMCPoint->GetTrackID();
1853 
1854 
1855  if( !inclusionMCPoint[j]) continue;
1856  distance = (XMvdMCPoint-XMvdStrip->at(i))*(XMvdMCPoint-XMvdStrip->at(i))+
1857  (YMvdMCPoint-YMvdStrip->at(i))*(YMvdMCPoint-YMvdStrip->at(i))+
1858  (ZMvdMCPoint-ZMvdStrip->at(i))*(ZMvdMCPoint-ZMvdStrip->at(i));
1859 if(istampa>=2) cout<<"distanza**2 di Strip hit n. "<<i
1860  <<" da MC Mvd Point n. "<<j<<" = "<<distance<<", distanza precedente "<<dist
1861  << ", 2*ERRORSQSTRIP "<<2.*ERRORSQSTRIP<<endl;
1862  if( distance<dist){
1863  FromStriptoMCTrack->at(i)=MCPointtoMCTrackID;
1864  jmcpoint=j;
1865  dist=distance;
1866  }
1867  } // end of for(j=0;j<nMvdMCPoint;j++)
1868  if( FromStriptoMCTrack->at(i)>= 0){
1869  inclusionMCPoint[jmcpoint]=false;
1870  }
1871 if(istampa>=2){
1872  if( FromStriptoMCTrack->at(i)<0 ){
1873 cout<<"Evento n. "<<IVOLTE<<
1874 ", lo strip hit n. "<<i<<" non e' associato ad alcun Mvd Point (FromStriptoMCTrack=-1).\n";
1875  } else {
1876 cout<<"Evento n. "<<IVOLTE<<
1877  "; associato strip hit n. "<<i<<" a MC Mvd Point n. "<<jmcpoint
1878  <<" e di conseguenza alla traccia MC n. "<<FromStriptoMCTrack->at(i)<<endl;
1879  }
1880 }
1881 
1882  } // end of for(i=0; i<nMvdStripHit;i++)
1883 
1884  return;
1885 }
Int_t i
Definition: run_full.C:25
Double_t
const Double_t ERRORSQSTRIP
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkComparisonMCtruth::SciTilMatchedSpurioustoTrackCand ( Vec< Short_t > *  daTrackFoundaTrackMC,
Vec< int > *  FromSciTiltoMCTrackList,
Vec< bool > *  keepit,
Vec< Short_t > *  ListSciTilHitsinTrack,
int  MAXSCITILHITSINTRACK,
Short_t *  MCSciTilAloneList,
Vec< int > *  nFromSciTiltoMCTrack,
Short_t *  nMCSciTilAlone,
int  nMCTracks,
Short_t  nSciTilHits,
Vec< Short_t > *  nSciTilHitsinTrack,
Short_t *  nSciTilCommon,
Short_t *  nSciTilSpuriinTrack,
Short_t  nSttTrackCand,
Short_t *  SciTilCommonList,
Short_t *  SciTilSpuriList 
)

Definition at line 1973 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), h, and i.

1996 {
1997 // fine cambio_in_perl.
1998 
1999 
2000  // calculate the SciTil hits matched, spurious, alone to all tracks found
2001  // by Pattern Recognition.
2002 
2003  // The SciTil hit number is the 'purged' one already.
2004 
2005  int tmp_dim1, tmp_dim2 ;
2006  if(nSttTrackCand>0) {tmp_dim1 = nSttTrackCand;} else {tmp_dim1 = 1;}
2007  if(nSciTilHits>0) {tmp_dim2 = nSciTilHits;} else {tmp_dim2 = 1;}
2008 
2009  bool flag_Common;
2010 
2011 // non modificare la seguente linea (viene cambiata da modificaperl);
2012  bool TMPincludeSciTil[tmp_dim1*tmp_dim2];
2013  Vec <bool> includeSciTil(TMPincludeSciTil,tmp_dim1*tmp_dim2,"includeSciTil");
2014 
2015 
2016  int
2017  i,
2018  index2,
2019  j,
2020  SciTHn;
2021 
2022 
2023  for(i=0; i<nSttTrackCand;i++){
2024  if(!keepit->at(i)) continue;
2025  nSciTilSpuriinTrack[i]=0;
2026  nMCSciTilAlone[i]=0;
2027  }
2028 
2029 
2030  for(i=0; i<nSttTrackCand;i++){
2031  if(!keepit->at(i)) continue;
2032  nSciTilCommon[i]=0;
2033  for(j=0;j<nSciTilHits;j++){
2034  includeSciTil[i*tmp_dim2+j]=true;
2035  }
2036 
2037  for(j=0;j<nSciTilHitsinTrack->at(i);j++){
2038  SciTHn = ListSciTilHitsinTrack->at(i*MAXSCITILHITSINTRACK+j);
2039  includeSciTil[i*tmp_dim2+SciTHn]=false;
2040  flag_Common = false;
2041 
2042  // loop over all MC tracks associated to SciTilHit n. SciTHn;
2043  for(int h=0;h<nFromSciTiltoMCTrack->at(SciTHn);h++){
2044  if( daTrackFoundaTrackMC->at(i)>= 0 && daTrackFoundaTrackMC->at(i) ==
2045  FromSciTiltoMCTrackList->at(SciTHn*nMCTracks+h) )
2046  {
2047  flag_Common = true;
2048  index2 = i*MAXSCITILHITSINTRACK+nSciTilCommon[i];
2049  SciTilCommonList[index2] = SciTHn;
2050  // increment the n. of common SciTils of Track i
2051  nSciTilCommon[i]++;
2052  } // end of if( daTrackFoundaTrackMC->at(i)>= 0 && ......
2053  } // end of for(int h=0;h<nFromSciTiltoMCTrack;h++)
2054 
2055 
2056  // if flag_Common is still false, this SciTil Hit is spurious;
2057  if(!flag_Common){
2058  index2 = i*MAXSCITILHITSINTRACK+nSciTilSpuriinTrack[i];
2059  SciTilSpuriList[index2] = SciTHn ;
2060  nSciTilSpuriinTrack[i]++;
2061  }
2062 
2063 
2064  } // end of for(j=0;j<nSciTilHitsinTrack->at(i);j++)
2065 
2066  } // end of for(i=0; i<nSttTrackCand;i++)
2067 
2068 
2069  // find the SciTil hits 'alone';
2070  for(j=0; j<nSttTrackCand;j++){
2071  if(!keepit->at(j)) continue;
2072  if(daTrackFoundaTrackMC->at(j)> -1){
2073  for(i=0;i<nSciTilHits;i++){
2074  if(!includeSciTil[j *tmp_dim2+ i]) continue;
2075  for(int h=0;h<nFromSciTiltoMCTrack->at(i);h++){
2076  if(daTrackFoundaTrackMC->at(j)==FromSciTiltoMCTrackList->at(i*nMCTracks+h)){
2077  index2 = j*nSciTilHits+nMCSciTilAlone[j];
2078  MCSciTilAloneList[index2]=i;
2079  nMCSciTilAlone[j]++;
2080  } // end of if( daTrackFoundaTrackMC->at(j) ....)
2081  } // end of for(int h=0;h<nFromSciTiltoMCTrack->at(SciTHn);h++)
2082  } // end of for(i=0;i<nSciTilHit;i++)
2083  } // end of if(daTrackFoundaTrackMC->at(j)> -1)
2084  } // end of for(j=0; j<nSttTrackCand;j++)
2085 
2086  return;
2087 }
Int_t i
Definition: run_full.C:25
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkComparisonMCtruth::SciTilMatchtoMC ( Double_t  BFIELD,
Double_t  CVEL,
Double_t  DIMENSIONSCITIL,
TClonesArray *  fMCTrackArray,
Vec< int > *  FromSciTiltoMCTrackList,
TClonesArray *  fSciTHitArray,
Short_t  fSciTilMaxNumber,
TClonesArray *  fSciTPointArray,
Vec< int > *  nFromSciTiltoMCTrack,
Short_t *  nHitsInSciTile,
int  nMCTracks,
Short_t  nSciTilHits,
Short_t *  OriginalSciTilList,
Vec< Double_t > *  XSciTilCenter,
Vec< Double_t > *  YSciTilCenter,
Vec< Double_t > *  ZSciTilCenter 
)

Definition at line 1893 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), h, hit, m, and point.

1912 {
1913 // fine cambio_in_perl.
1914 
1915  // initialization;
1916 
1917 
1918  for(int nsc=0; nsc<nSciTilHits; nsc++){
1919 
1920 
1921  nFromSciTiltoMCTrack->at(nsc)=0;
1922  // in a SciTil there may be more than 1 MC hit, here
1923  // it is the loop over those.
1924  // nHitsInSciTile[n] is the number of SciTil hits in the
1925  // tile indentified by the number n, which in actuality is
1926  // the number of the first hit [in the SciTil hit list]
1927  // belonging to that tile;
1928  // OriginalSciTilList[n][nnn] is their list; the dimension of
1929  // OriginalSciTilList is fSciTilMaxNumber*fSciTilMaxNumber when nSciTilHits>0
1930  // (otherwise it is 1*1 ).
1931 
1932 
1933  for(int h=0;h<nHitsInSciTile[nsc];h++){
1934  int m=OriginalSciTilList[nsc*fSciTilMaxNumber+h];
1935  PndSciTHit *hit=(PndSciTHit*)fSciTHitArray->At(m);
1937  fSciTPointArray->At(hit->GetRefIndex());
1938  if( point->GetTrackID()>=0){
1939 
1940  // controllo se questa traccia MC non sia gia' stata inserita
1941  // prima da uno hit della stessa SciTil;
1942  bool accetto = true;
1943  for(int kk=0;kk<nFromSciTiltoMCTrack->at(nsc);kk++){ // loop sulle tracce MC finora associate;
1944  if( point->GetTrackID() ==
1945  FromSciTiltoMCTrackList->at(nsc*nMCTracks+kk) ){
1946  accetto=false;
1947  break;
1948  }
1949  } // end of for(int kk=0;kk<nFromSciTiltoMCTrack->at(nsc);kk++)
1950 
1951 
1952  if( accetto){
1953  FromSciTiltoMCTrackList->at(nsc*nMCTracks+nFromSciTiltoMCTrack->at(nsc))
1954  =point->GetTrackID();
1955  nFromSciTiltoMCTrack->at(nsc)++;
1956  }
1957  } // end of if( point->GetTrackID()>=0)
1958  } // end of for(int h=0;h<nHitsInSciTile[nsc];h++)
1959 
1960 
1961 
1962  } // end of for(int nsc=0; nsc<nSciTilHits; nsc++)
1963 
1964 
1965 
1966  return;
1967 }
__m128 m
Definition: P4_F32vec4.h:28
PndSdsMCPoint * hit
Definition: anasim.C:70
T & at(int index)
Definition: PndTrkVectors.h:54
PndSdsMCPoint * point
Definition: anaLmdCluster.C:72
void PndTrkComparisonMCtruth::stampaMCTracks ( Double_t  BFIELD,
Double_t  CVEL,
TClonesArray *  fMCTrackArray,
int  nMCTracks 
)

Definition at line 2093 of file PndTrkComparisonMCtruth.cxx.

References fabs(), and PndMCTrack::GetStartVertex().

2099  {
2100  // cout<<"from PndTrkComparisonMCtruth::StampaMCTracks n. MC Tracks "
2101  // <<nMCTracks<<" e lista solo di quelle che vengono da (0,0,0) :\n";
2102  for(int ic=0;ic<nMCTracks;ic++){
2103  PndMCTrack* pMC = (PndMCTrack*) fMCTrackArray->At(ic);
2104  if ( !( fabs(pMC->GetStartVertex().X())<0.5 &&
2105  fabs(pMC->GetStartVertex().Y())<0.5 &&
2106  fabs(pMC->GetStartVertex().Z())<0.5 )) continue;
2107  //double carica; //[R.K. 9/2018] unused
2108  //int icode = pMC->GetPdgCode() ; // PDG code of track //[R.K. 9/2018] unused
2109  //double Pxx = pMC->GetMomentum().X(); //[R.K. 9/2018] unused
2110  //double Pyy = pMC->GetMomentum().Y(); //[R.K. 9/2018] unused
2111  //double aaa = sqrt( Pxx*Pxx + Pyy*Pyy); //[R.K. 9/2018] unused
2112  //double Rr = aaa*1000./(BFIELD*CVEL);// R (cm) of Helix of track projected //[R.K. 9/2018] unused
2113  // in XY plane; B = 2 Tesla
2114  //TDatabasePDG *fdbPDG= TDatabasePDG::Instance(); //[R.K. 9/2018] unused
2115  //TParticlePDG *fParticle= fdbPDG->GetParticle(icode); //[R.K. 9/2018] unused
2116  //if (icode>1000000000) carica = 1.; //[R.K. 9/2018] unused
2117  //else carica = fParticle->Charge()/3. ; // charge of track //[R.K. 9/2018] unused
2118 
2119  //cout<<"\tTraccia n. "<<ic<<", Px "<<pMC->GetMomentum().X()
2120  //<<", Py "<<pMC->GetMomentum().Y()
2121  //<<", Pz "<<pMC->GetMomentum().Z()
2122  //<<", carica = "<<carica
2123  //<<"\n\t\tRaggio "<<Rr<<", Xvert "<<pMC->GetStartVertex().X()
2124  //<<", Yvert "<<pMC->GetStartVertex().Y()
2125  //<<", Zvert "<<pMC->GetStartVertex().Z()<<endl;
2126  }
2127 
2128 }
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
void PndTrkComparisonMCtruth::SttMatchedSpurious ( Vec< Short_t > *  daTrackFoundaTrackMC,
Vec< bool > *  InclusionListStt,
Vec< Double_t > *  info,
Vec< bool > *  keepit,
int  MAXSTTHITS,
int  MAXSTTHITSINTRACK,
int  MAXTRACKSPEREVENT,
Vec< Short_t > *  ListSttParHitsinTrack,
Vec< Short_t > *  ListSttSkewHitsinTrack,
Vec< Short_t > *  MCParalAloneList,
Vec< Short_t > *  MCSkewAloneList,
Vec< Short_t > *  nHitsInMCTrack,
Vec< Short_t > *  nSttParHitsinTrack,
Vec< Short_t > *  nMCParalAlone,
Vec< Short_t > *  nMCSkewAlone,
Vec< Short_t > *  nParalCommon,
Vec< Short_t > *  nSkewCommon,
Vec< Short_t > *  nSkewHitsInMCTrack,
Vec< Short_t > *  nSttSkewHitsinTrack,
Vec< Short_t > *  nSpuriParinTrack,
Vec< Short_t > *  nSpuriSkewinTrack,
Short_t  nSttHits,
Short_t  nTracksFoundSoFar,
Vec< Short_t > *  ParalCommonList,
Vec< Short_t > *  ParSpuriList,
Vec< Short_t > *  SkewCommonList,
Vec< Short_t > *  SkewSpuriList 
)

Definition at line 2136 of file PndTrkComparisonMCtruth.cxx.

References Vec< T >::at(), and i.

2166 {
2167 // fine cambio_in_perl.
2168  bool flaggo;
2169  Short_t i, jexp, exphit, iHit,
2170  enne;
2171  Short_t emme;
2172 
2173  int index1, index2;
2174 
2175  for(jexp=0; jexp<nTracksFoundSoFar;jexp++){
2176  if(!keepit->at(jexp)) continue;
2177  nParalCommon->at(jexp)=0;
2178  nSkewCommon->at(jexp)=0;
2179  nMCParalAlone->at(jexp)=0;
2180  nMCSkewAlone->at(jexp)=0;
2181  nSpuriParinTrack->at(jexp)=0;
2182  nSpuriSkewinTrack->at(jexp)=0;
2183 
2184 // --- parallel hits
2185  for(exphit=0; exphit<nSttParHitsinTrack->at(jexp); exphit++){
2186  index1 = jexp*MAXSTTHITSINTRACK + exphit;
2187  iHit = ListSttParHitsinTrack->at(index1) ;
2188  enne = (Short_t) ( info->at(iHit*7 + 6) + 0.01);
2189  if( enne == daTrackFoundaTrackMC->at(jexp) ){
2190  index2 = jexp*MAXSTTHITSINTRACK +nParalCommon->at(jexp);
2191  ParalCommonList->at(index2) = iHit;
2192  nParalCommon->at(jexp)++;
2193  } else {
2194  index2 = jexp*MAXSTTHITSINTRACK +nSpuriParinTrack->at(jexp);
2195  ParSpuriList->at(index2) = iHit;
2196  nSpuriParinTrack->at(jexp)++;
2197  }
2198 
2199  }
2200 //--- ricerca degli hits non mecciati, della traccia MC associata a questa traccia trovata.
2201  for(i=0; i<nSttHit; i++){
2202  emme = (Short_t) ( info->at( i*7+6) + 0.01);
2203  // escludo gli hits non paralleli oppure che non appartengono alla giusta
2204  // traccia MC
2205  if( info->at(i*7+5) > 2. || (emme != daTrackFoundaTrackMC->at(jexp)) ) continue;
2206  if( !InclusionListStt->at(i)) continue; // escludo gli hits con multiple hits
2207  flaggo=true;
2208  for(exphit=0; exphit<nSttParHitsinTrack->at(jexp); exphit++){
2209  index1 = jexp*MAXSTTHITSINTRACK + exphit;
2210  if(ListSttParHitsinTrack->at(index1) == i){
2211  flaggo=false;
2212  break;
2213  }
2214  }
2215  if(flaggo){
2216  index2 = jexp*nSttHit+nMCParalAlone->at(jexp);
2217  MCParalAloneList->at(index2) = i;
2218  nMCParalAlone->at(jexp)++;
2219  } // end of if(flaggo)
2220  } // end of for(i=0; i<nSttHit; i++)
2221 
2222  nHitsInMCTrack->at(jexp) = nMCParalAlone->at(jexp)+nParalCommon->at(jexp);
2223 // --- skew hits
2224 
2225  for(exphit=0; exphit<nSttSkewHitsinTrack->at(jexp); exphit++){
2226  index1 = jexp*MAXSTTHITSINTRACK + exphit;
2227  iHit = ListSttSkewHitsinTrack->at(index1);
2228  enne = (Short_t) ( info->at(iHit*7+6) + 0.01);
2229  if( enne == daTrackFoundaTrackMC->at(jexp) ){
2230  index2 = jexp*MAXSTTHITSINTRACK+nSkewCommon->at(jexp);
2231  SkewCommonList->at(index2) = iHit;
2232  nSkewCommon->at(jexp)++;
2233  } else {
2234  index2 = jexp*MAXSTTHITSINTRACK+nSpuriSkewinTrack->at(jexp);
2235  SkewSpuriList->at(index2) = iHit;
2236  nSpuriSkewinTrack->at(jexp)++;
2237  }
2238 
2239  }
2240 //--- ricerca degli hits non mecciati, della traccia MC associata a questa traccia trovata.
2241  for(i=0; i<nSttHit; i++){
2242  emme = (Short_t) ( info->at( i*7+6) + 0.01);
2243 
2244  // considero solo le skew ( info->at(i*7+5)=99.) ed escludo quelle che
2245  // non appartengono alla giusta traccia MC
2246  if( info->at(i*7+5) < 98. || (emme != daTrackFoundaTrackMC->at(jexp)) ) continue;
2247  if( !InclusionListStt->at(i)) continue; // escludo gli hits con multiple hits
2248  flaggo=true;
2249  for(exphit=0; exphit<nSttSkewHitsinTrack->at(jexp); exphit++){
2250  index1 = jexp*MAXSTTHITSINTRACK + exphit;
2251  if(i == ListSttSkewHitsinTrack->at(index1) ){
2252  flaggo=false;
2253  break;
2254  }
2255  }
2256  if(flaggo){
2257  index2 = jexp*nSttHit+nMCSkewAlone->at(jexp) ;
2258  MCSkewAloneList->at(index2) = i;
2259  nMCSkewAlone->at(jexp)++;
2260  }
2261  }
2262 
2263  nSkewHitsInMCTrack->at(jexp) = nMCSkewAlone->at(jexp)+nSkewCommon->at(jexp);
2264 
2265 
2266  } // end of for(jexp=0; jexp<nTracksFoundSoFar;jexp++)
2267 
2268 
2269 
2270  return;
2271 }
Int_t i
Definition: run_full.C:25
const int MAXSTTHITSINTRACK
T & at(int index)
Definition: PndTrkVectors.h:54

The documentation for this class was generated from the following files: