10 #include "TClonesArray.h"
24 TClonesArray *fMCTrackArray,
35 int MAXMVDPIXELHITSINTRACK,
36 int MAXMVDSTRIPHITSINTRACK,
37 int MAXSCITILHITSINTRACK,
47 Short_t nTracksFoundSoFar,
63 int tmp_dim = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK;
68 if(nTracksFoundSoFar>0) { tmp_dim2 = nTracksFoundSoFar;}
else {tmp_dim2 = 1;}
73 Short_t TMPinclusionMC[tmp_dim2*tmp_dim];
74 Vec <Short_t> inclusionMC(TMPinclusionMC,tmp_dim2*tmp_dim,
"inclusionMC");
76 Short_t TMPinclusionExp[tmp_dim2];
77 Vec <Short_t> inclusionExp(TMPinclusionExp,tmp_dim2,
"inclusionExp");
79 Short_t TMPntoMCtrack[tmp_dim2];
80 Vec <Short_t> ntoMCtrack(TMPntoMCtrack,tmp_dim2,
"ntoMCtrack");
83 Vec <Short_t> toMCtrackfrequency(TMPtoMCtrackfrequency,tmp_dim2*MAXSTTHITSINTRACK,
"toMCtrackfrequency");
87 Short_t
i, j, jtemp,jexp;
89 Short_t itemp, massimo;
91 Vec <Short_t> toMCtracklist(TMPtoMCtracklist,tmp_dim2*MAXSTTHITSINTRACK,
"toMCtracklist");
115 Vec <Double_t> toMCtrackdistance(TMPtoMCtrackdistance,tmp_dim2*MAXSTTHITSINTRACK,
"toMCtrackdistance");
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;
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;
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;
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;
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;
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;
173 tanup[
i] = tanmid[
i];
184 for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
186 if(!keepit->
at(jexp))
continue;
194 for(i=0; i<nSttParHitsinTrack->
at(jexp); i++){
195 nindex = jexp*MAXSTTHITSINTRACK +
i;
197 enne = (Int_t)( info->
at( ListSttParHitsinTrack->
at(nindex)*7+ 6)+0.01 );
203 toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
204 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
207 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
209 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
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);
222 for(j=0; j<ntoMCtrack[jexp]; j++){
223 if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
224 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
230 toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
231 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
232 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
234 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
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],
254 for(i=0; i<nMvdPixelHitsinTrack->
at(jexp); i++){
255 nindex = jexp*MAXMVDPIXELHITSINTRACK +
i;
258 enne = FromPixeltoMCTrack->
at( ListMvdPixelHitsinTrack->
at(nindex) ) ;
262 toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
263 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
266 getMCInfo(BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
268 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
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);
281 for(j=0; j<ntoMCtrack[jexp]; j++){
282 if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
283 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
289 toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
290 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
291 getMCInfo(BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
293 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
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);
309 for(i=0; i<nMvdStripHitsinTrack->
at(jexp); i++){
310 nindex = jexp*MAXMVDSTRIPHITSINTRACK +
i;
311 enne = FromStriptoMCTrack->
at( ListMvdStripHitsinTrack->
at(nindex) ) ;
315 toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
316 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
319 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
321 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
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);
334 for(j=0; j<ntoMCtrack[jexp]; j++){
335 if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
336 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
342 toMCtracklist[jexp*MAXSTTHITSINTRACK+ ntoMCtrack[jexp] ] = enne;
343 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
344 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
346 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
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],
367 for(i=0; i<nSciTilHitsinTrack->
at(jexp); i++){
368 nindex = jexp*MAXSCITILHITSINTRACK+
i;
369 int SciTilTilenumber = ListSciTilHitsinTrack->
at(nindex);
372 for(
int iMClinks=0; iMClinks< nFromSciTiltoMCTrack->
at(SciTilTilenumber);iMClinks++){
374 enne = FromSciTiltoMCTrackList->
at(SciTilTilenumber*nMCTracks+iMClinks);
376 toMCtracklist[jexp*MAXSTTHITSINTRACK+0]= enne;
377 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+0]=1;
380 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
382 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+0]=-1.;
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);
395 for(j=0; j<ntoMCtrack[jexp]; j++){
396 if( enne == toMCtracklist[jexp*MAXSTTHITSINTRACK+j] ) {
397 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+j]++;
403 toMCtracklist[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = enne;
404 toMCtrackfrequency[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp] ] = 1;
405 getMCInfo( BFIELD, CVEL, &Cx, &Cy,fMCTrackArray,enne, &Rr);
407 toMCtrackdistance[jexp*MAXSTTHITSINTRACK+ntoMCtrack[jexp]]=-1.;
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],
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;
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];
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];
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;
507 const double PI=3.141592654;
520 FILE * HANDLE = ioData.
HANDLE;
521 FILE * HANDLE2 = ioData.
HANDLE2;
524 int IVOLTE = ioData.
IVOLTE;
604 Int_t nSttHit = ioData.
nSttHit;
634 nele = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK+
635 MAXSCITILHITSINTRACK;
642 nMCTracks = fMCTrackArray->GetEntriesFast();
647 }
else if(nMCTracks> MAXMCTRACKS){
651 nMCTracks = MAXMCTRACKS;
655 if(istampa>=2) stampaMCTracks(
665 if( fMvdMCPointArray){
666 nMvdMCPoint = fMvdMCPointArray->GetEntriesFast();
671 if(nMvdMCPoint>MAXMVDMCPOINTS) {
672 cout<<
"from PndTracking, nMvdMCPoint = "<<nMvdMCPoint
673 <<
" and it is > the maximum number allowed ("<<MAXMVDMCPOINTS<<
675 ", setting nMvdMCPoint to "<<MAXMVDMCPOINTS<<endl;
678 if(istampa>=2) cout<<
"N. MC Points delle Mvd = "<<nMvdMCPoint<<endl;
689 int dimensioneP, dimensioneS;
690 if( nMvdPixelHit==0 ){
693 dimensioneP =nMvdPixelHit;
696 if( nMvdStripHit ==0 ){
699 dimensioneS =nMvdStripHit;
702 Int_t FromPixeltoMCTra[dimensioneP],
703 FromStriptoMCTra[dimensioneS];
704 Vec <Int_t> FromPixeltoMCTrack(FromPixeltoMCTra,dimensioneP,
"FromPixeltoMCTrack");
705 Vec <Int_t> FromStriptoMCTrack(FromStriptoMCTra,dimensioneS,
"FromStriptoMCTrack");
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;
737 for(
int h=0;
h<nMvdStripHit;
h++){
738 cout<<
"\til Strip n. "<<
h
739 <<
" associato a MC track n. "<<FromStriptoMCTrack[
h]<<endl;
757 nFromSciTiltoMCTra[nSciTilHits],
758 FromSciTiltoMCTrackL[nSciTilHits*nMCTracks];
759 Vec <int> nFromSciTiltoMCTrack(nFromSciTiltoMCTra,nSciTilHits,
"nFromSciTiltoMCTrack");
760 Vec <int> FromSciTiltoMCTrackList(FromSciTiltoMCTrackL,nSciTilHits*nMCTracks,
"FromSciTiltoMCTrackList");
769 &FromSciTiltoMCTrackList,
773 &nFromSciTiltoMCTrack,
788 if( nMCTracks >0 && nTotalCandidates > 0){
795 yy1[MAXTRACKSPEREVENT],
796 xx2[MAXTRACKSPEREVENT],
797 yy2[MAXTRACKSPEREVENT],
798 xx3[MAXTRACKSPEREVENT],
799 yy3[MAXTRACKSPEREVENT];
808 for(i=0; i<nTotalCandidates;i++){
809 if(!keepit[i])
continue;
810 nn = nSttParHitsinTrack[
i]+nSttSkewHitsinTrack[
i]+
811 nMvdPixelHitsinTrack[
i]+nMvdStripHitsinTrack[
i];
814 X1[
i] = Ox[
i] + R[
i]*
cos( FI0[i]);
815 Y1[
i] = Oy[
i] + R[
i]*
sin( FI0[i]);
820 switch ( ListTrackCandHitType[i*nele+nn-1]){
822 X3[
i] = XMvdPixel[ ListTrackCandHit[i*nele+nn-1] ] ;
823 Y3[
i] = YMvdPixel[ ListTrackCandHit[i*nele+nn-1] ] ;
826 X3[
i] = XMvdStrip[ ListTrackCandHit[i*nele+nn-1] ] ;
827 Y3[
i] = YMvdStrip[ ListTrackCandHit[i*nele+nn-1] ] ;
830 X3[
i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 0] ;
831 Y3[
i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 1] ;
834 X3[
i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 0] ;
835 Y3[
i] = info[ ListTrackCandHit[i*nele+nn-1]*7+ 1] ;
844 angle =
atan2(Y3[i]-Oy[i], X3[i]-Ox[i]);
845 if(angle <0.) angle+= 2.*
PI;
846 if(angle <0.) angle = 0.;
849 if( FI0[i] < angle ) angle -= 2.*
PI;
850 if( FI0[i] < angle ) angle =0.;
852 if( FI0[i] > angle ) angle += 2.*
PI;
853 if( FI0[i] > angle ) angle = FI0[
i];
855 middle = (FI0[
i]+
angle)/2.;
857 X2[
i] = Ox[
i] + R[
i]*
cos( middle );
858 Y2[
i] = Oy[
i] + R[
i]*
sin( middle );
864 if(nTotalCandidates>0) AssociateFoundTrackstoMCquater(
867 &daTrackFoundaTrackMC,
871 &FromSciTiltoMCTrackList,
874 &ListSttParHitsinTrack,
875 &ListMvdPixelHitsinTrack,
876 &ListSciTilHitsinTrack,
877 &ListSttSkewHitsinTrack,
878 &ListMvdStripHitsinTrack,
879 MAXMVDPIXELHITSINTRACK,
880 MAXMVDSTRIPHITSINTRACK,
881 MAXSCITILHITSINTRACK,
883 &nFromSciTiltoMCTrack,
886 &nMvdPixelHitsinTrack,
889 &nSttSkewHitsinTrack,
890 &nMvdStripHitsinTrack,
910 for(i=0;i<nTotalCandidates;i++){
933 &daTrackFoundaTrackMC,
940 &ListSttParHitsinTrack,
941 &ListSttSkewHitsinTrack,
951 &nSttSkewHitsinTrack,
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();
985 MvdMatchedSpurioustoTrackCand(
986 &daTrackFoundaTrackMC,
992 &ListMvdPixelHitsinTrack,
993 &ListMvdStripHitsinTrack,
994 MAXMVDPIXELHITSINTRACK,
995 MAXMVDSTRIPHITSINTRACK,
998 &nMvdPixelHitsinTrack,
999 &nMvdStripHitsinTrack,
1003 &MvdPixelCommonList,
1004 &nMvdPixelSpuriinTrack,
1007 &MCMvdPixelAloneList,
1010 &MvdStripCommonList,
1011 &nMvdStripSpuriinTrack,
1014 &MCMvdStripAloneList
1020 SciTilMatchedSpurioustoTrackCand(
1021 &daTrackFoundaTrackMC,
1022 &FromSciTiltoMCTrackList,
1025 &ListSciTilHitsinTrack,
1027 MAXSCITILHITSINTRACK,
1030 &nFromSciTiltoMCTrack,
1034 &nSciTilHitsinTrack,
1055 int nMCTracksaccettabili=0;
1056 int ListaMCTracksaccettabili[nMCTracks];
1058 int nHasSciTilHit=0;
1063 for (i=0;i<nMCTracks;i++){
1065 if ( ! pMCtr )
continue;
1066 Double_t aaa, carica, Rr, Oxx, Oyy, Cx, Cy, Pxx, Pyy ;
1073 aaa =
sqrt( Pxx*Pxx + Pyy*Pyy);
1074 Rr = aaa*1000./(BFIELD*
CVEL);
1079 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1080 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
1081 if (icode>1000000000) carica = 1.;
1082 else carica = fParticle->Charge()/3. ;
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;
1092 for(
int ic=0;ic<nSttHit;ic++){
1095 if( ( (
int) (info[ic*7 + 6]+0.1) ) == i && info[ic*7 + 5]<2.){
1100 if( citata>2 &&
fabs(Oxx)<1. &&
fabs(Oyy) < 1. ) {
1111 for(
int ic=0;ic<nMvdPixelHit;ic++){
1112 if( FromPixeltoMCTrack[ic] == i ){
1119 for(
int ic=0;ic<nMvdStripHit;ic++){
1120 if( FromStriptoMCTrack[ic] == i ){
1130 ListaMCTracksaccettabili[nMCTracksaccettabili]=
i;
1131 nMCTracksaccettabili++;
1141 for(
int ic=0;ic<nSciTilHits;ic++){
1142 for(
int jc=0; jc< nFromSciTiltoMCTrack[ic]; jc++){
1143 if( FromSciTiltoMCTrackList[ic*nMCTracks + jc] == i ){
1150 if(cita>0){ nHasSciTilHit++; }
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);
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]){
1175 if(ibene>0) fprintf(HANDLE,
"\tn. volte almeno 1 traccia MC accettabile e' ricostruita %d\n"
1182 perc_trueSttSkew = 0. ,
1183 perc_missSttSkew = 0. ,
1186 perc_trueMvdPixel = 0. ,
1187 perc_trueMvdStrip = 0. ,
1189 perc_missSttPar = 0. ,
1191 perc_missMvdPixel = 0. ,
1192 perc_missMvdStrip = 0. ,
1196 for (ii=0; ii<nTotalCandidates ;ii++){
1197 if(!keepit[ii]) {
if(istampa>1) {cout<<
"\tevt. n "<<IVOLTE<<
", cand. "<<ii<<
" ha keepit false."<<
1200 fprintf(HANDLE,
"----------------------------------------------------------\n");
1201 i=daTrackFoundaTrackMC[ii];
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] );
1211 if( ( !SttSZfit[ii] )&&(resultFitSZagain[ii] !=1 )) {
1213 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' in Z-S e' fallito il fit \n"
1217 if(
fabs(KAPPA[ii])<1.e-20 ){
1219 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' KAPPA troppo piccolo; KAPPA = %g\n",
1220 i,ibuone,KAPPA[ii]);
1223 dista=
sqrt( Ox[ii]*Ox[ii]+Oy[ii]*Oy[ii] );
1224 if(
fabs(dista)<1.e-20 ){
1226 " TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' centro Helix Cilinder trovato dista solo %g da (0,0)\n",
1233 " MC track n. %d doesn't have pointer to MC Track TClones Array\n",
1241 for(
int g=0;
g<nMCTracksaccettabili;
g++){
1242 if( i==ListaMCTracksaccettabili[
g])
1248 if(flaggo)
continue;
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; }
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; }
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; }
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; }
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; }
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; }
1289 " TracciaMC %d ParHitsMC %d ParMecc %d ParMeccSpuri %d SkewHitsMC %d SkewMecc %d SkewMeccSpuri %d\n",
1293 nSpuriParinTrack[ii],
1294 nSkewHitsInMCTrack[ii],
1296 nSpuriSkewinTrack[ii]
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",
1307 " e corrisponde a track found n. %d\n", ibuone );
1309 " AVENDO %d hits paralleli e %d hits skew non mecciati dalla corrisponde track found\n"
1310 , nMCParalAlone[ii],nMCSkewAlone[ii] );
1312 HoughFiii =
atan2(Oy[ii],Ox[ii]);
1313 if(HoughFiii<0.) HoughFiii += 2.*
PI;
1315 Double_t aaa, carica, Rr, Fifi, Oxx, Oyy, Cx, Cy, Pxx, Pyy ;
1322 aaa =
sqrt( Pxx*Pxx + Pyy*Pyy);
1323 Rr = aaa*1000./(BFIELD*
CVEL);
1324 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1325 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
1326 if (icode>1000000000) carica = 1.;
1327 else carica = fParticle->Charge()/3. ;
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);
1332 if(Fifi<0.) Fifi += 2.*
PI;
1335 else Kakka = -carica*0.001*BFIELD*CVEL/pMCtr->
GetMomentum().Z();
1338 " R_MC %g R %g Fi_MC %g Fi %g KAPPA_MC %g KAPPA %g FI0_MC %g FI0 %g\n",
1345 fmod(Fifi+ PI, 2.*PI),
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.
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.
1366 fprintf(HANDLE2,
"Evento n. %d Found track %d messa in PndTrackCand",IVOLTE, ii);
1368 " R_MC %g R %g Fi_MC %g Fi %g KAPPA_MC %g KAPPA %g FI0_MC %g FI0 %g\n",
1375 fmod(Fifi+ PI, 2.*PI),
1388 int NParghost=0, NParhitsghost=0,icc;
1390 if( nMCTracksaccettabili>0){
1391 for(icc=0; icc<nTotalCandidates;icc++){
1392 if(!keepit[icc])
continue;
1394 if( daTrackFoundaTrackMC[icc] == -1){
1396 NParhitsghost += nSttParHitsinTrack[icc]+nSttSkewHitsinTrack[icc];
1398 if(NParghost==1) fprintf(HANDLE,
"----------------------------------------------------------\n");
1399 fprintf(HANDLE,
" tracce Trovata n. %d e' Ghost\n",ibuone);
1403 " tracceGhostTrovate %d TotaleHitsGhost %d ----\n",
1410 fprintf(HANDLE,
"----------------------------------------------------------\n");
1473 if( tanlow<999998.) {
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;
1479 }
else if (Delta==0.){
1480 x1 = 0.5*(-alfa - 2.*m[
i]*q - beta*m[
i] )/(1.+m[i]*m[i]);
1482 dist =
fabs(
sqrt( (Oxx-x1)*(Oxx-x1) + (Oyy-y1)*(Oyy-y1) ) - Rr);
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]);
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);
1498 Delta = beta*beta - 4.*Oxx*Oxx - 4.*Oxx*alfa - 4.*gamma;
1502 }
else if (Delta==0.){
1503 dist =
fabs(
fabs(Oyy+0.5*beta) - Rr);
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;
1524 if(n!=3) totaldist = -1.;
1525 else totaldist = totaldist /
n;
1544 TClonesArray *fMCTrackArray,
1551 Double_t aaa, Oxx, Oyy, Pxx, Pyy, carica ;
1561 pMC = (
PndMCTrack*) fMCTrackArray->At(MCTrack);
1568 aaa =
sqrt( Pxx*Pxx + Pyy*Pyy);
1569 *Rr = aaa*1000./(BFIELD*
CVEL);
1571 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1572 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
1573 if (icode>1000000000) carica = 1.;
1574 else carica = fParticle->Charge()/3. ;
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);
1601 int MAXMVDPIXELHITSINTRACK,
1602 int MAXMVDSTRIPHITSINTRACK,
1603 Short_t nMvdPixelHit,
1604 Short_t nMvdStripHit,
1607 Short_t nSttTrackCand,
1627 int tmp_dim1, tmp_dim2, tmp_dim3;
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;}
1634 bool TMPincludePixel[tmp_dim1*tmp_dim2];
1635 Vec <bool> includePixel(TMPincludePixel,tmp_dim1*tmp_dim2,
"includePixel");
1637 bool TMPincludeStrip[tmp_dim1*tmp_dim3];
1638 Vec <bool> includeStrip(TMPincludeStrip,tmp_dim1*tmp_dim3,
"includeStrip");
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;
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;
1661 for(j=0;j<nMvdStripHit;j++){
1662 includeStrip[i*tmp_dim3+ j]=
true;
1666 for(j=0;j<nMvdPixelHitsinTrack->
at(i);j++){
1667 index = i*MAXMVDPIXELHITSINTRACK+j;
1668 includePixel[i*tmp_dim2+ListMvdPixelHitsinTrack->
at(index)]=
false;
1670 if( daTrackFoundaTrackMC->
at(i)>= 0 && daTrackFoundaTrackMC->
at(i) ==
1671 FromPixeltoMCTrack->
at(ListMvdPixelHitsinTrack->
at(index))
1673 index2 = i*MAXMVDPIXELHITSINTRACK+nMvdPixelCommon->
at(i);
1674 MvdPixelCommonList->
at(index2) =
1675 ListMvdPixelHitsinTrack->
at(index);
1676 nMvdPixelCommon->
at(i)++;
1678 index2 = i*MAXMVDPIXELHITSINTRACK+nMvdPixelSpuriinTrack->
at(i);
1679 MvdPixelSpuriList->
at(index2) =
1680 ListMvdPixelHitsinTrack->
at(index);
1681 nMvdPixelSpuriinTrack->
at(i)++;
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))
1691 index2 = i*MAXMVDSTRIPHITSINTRACK+nMvdStripCommon->
at(i);
1692 MvdStripCommonList->
at(index2) =
1693 ListMvdStripHitsinTrack->
at(index);
1694 nMvdStripCommon->
at(i)++;
1696 index2 = i*MAXMVDSTRIPHITSINTRACK+nMvdStripSpuriinTrack->
at(i);
1697 MvdStripSpuriList->
at(index2) =
1698 ListMvdStripHitsinTrack->
at(index);
1699 nMvdStripSpuriinTrack->
at(i)++;
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;
1712 if( daTrackFoundaTrackMC->
at(j)==FromPixeltoMCTrack->
at(i) ){
1713 index = j*nMvdPixelHit+nMCMvdPixelAlone->
at(j);
1714 MCMvdPixelAloneList->
at(index)=
i;
1715 nMCMvdPixelAlone->
at(j)++;
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)++;
1747 TClonesArray *fMvdMCPointArray,
1748 Short_t nMvdMCPoint,
1751 Short_t nMvdPixelHit,
1752 Short_t nMvdStripHit,
1770 if(nMvdMCPoint>0) {tmp_dim = nMvdMCPoint;}
else {tmp_dim = 1;}
1772 bool TMPinclusionMCPoint[tmp_dim];
1773 Vec <bool> inclusionMCPoint(TMPinclusionMCPoint,tmp_dim,
"inclusionMCPoint");
1782 Int_t MCPointtoMCTrackID;
1793 for(i=0; i<nMvdMCPoint;i++){
1794 inclusionMCPoint[
i]=
true;
1796 for(i=0; i<nMvdPixelHit;i++){
1797 FromPixeltoMCTrack->
at(i)=-1;
1799 for(i=0; i<nMvdStripHit;i++){
1800 FromStriptoMCTrack->
at(i)=-1;
1805 for(i=0; i<nMvdPixelHit;i++){
1806 if (refindexMvdPixel->
at(i)<0.)
continue;
1811 for(j=0;j<nMvdMCPoint;j++){
1815 pMvdMCPoint->Position(position);
1816 XMvdMCPoint=position.X();
1817 YMvdMCPoint=position.Y();
1818 ZMvdMCPoint=position.Z();
1819 MCPointtoMCTrackID= pMvdMCPoint->GetTrackID();
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));
1826 FromPixeltoMCTrack->
at(i)=MCPointtoMCTrackID;
1832 if( FromPixeltoMCTrack->
at(i)>= 0){
1833 inclusionMCPoint[jmcpoint]=
false;
1838 for(i=0; i<nMvdStripHit;i++){
1839 if (refindexMvdStrip->
at(i)<0.)
continue;
1844 for(j=0;j<nMvdMCPoint;j++){
1848 pMvdMCPoint->Position(position);
1849 XMvdMCPoint=position.X();
1850 YMvdMCPoint=position.Y();
1851 ZMvdMCPoint=position.Z();
1852 MCPointtoMCTrackID= pMvdMCPoint->GetTrackID();
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;
1863 FromStriptoMCTrack->
at(i)=MCPointtoMCTrackID;
1868 if( FromStriptoMCTrack->
at(i)>= 0){
1869 inclusionMCPoint[jmcpoint]=
false;
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";
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;
1899 TClonesArray *fSciTHitArray,
1900 Short_t fSciTilMaxNumber,
1901 TClonesArray *fSciTPointArray,
1903 Short_t *nHitsInSciTile,
1905 Short_t nSciTilHits,
1906 Short_t *OriginalSciTilList,
1918 for(
int nsc=0; nsc<nSciTilHits; nsc++){
1921 nFromSciTiltoMCTrack->
at(nsc)=0;
1933 for(
int h=0;
h<nHitsInSciTile[nsc];
h++){
1934 int m=OriginalSciTilList[nsc*fSciTilMaxNumber+
h];
1937 fSciTPointArray->At(hit->GetRefIndex());
1938 if( point->GetTrackID()>=0){
1942 bool accetto =
true;
1943 for(
int kk=0;kk<nFromSciTiltoMCTrack->
at(nsc);kk++){
1944 if( point->GetTrackID() ==
1945 FromSciTiltoMCTrackList->
at(nsc*nMCTracks+kk) ){
1953 FromSciTiltoMCTrackList->
at(nsc*nMCTracks+nFromSciTiltoMCTrack->
at(nsc))
1954 =point->GetTrackID();
1955 nFromSciTiltoMCTrack->
at(nsc)++;
1980 int MAXSCITILHITSINTRACK,
1981 Short_t *MCSciTilAloneList,
1984 Short_t *nMCSciTilAlone,
1986 Short_t nSciTilHits,
1988 Short_t *nSciTilCommon,
1989 Short_t *nSciTilSpuriinTrack,
1990 Short_t nSttTrackCand,
1991 Short_t *SciTilCommonList,
1993 Short_t *SciTilSpuriList
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;}
2012 bool TMPincludeSciTil[tmp_dim1*tmp_dim2];
2013 Vec <bool> includeSciTil(TMPincludeSciTil,tmp_dim1*tmp_dim2,
"includeSciTil");
2023 for(i=0; i<nSttTrackCand;i++){
2024 if(!keepit->
at(i))
continue;
2025 nSciTilSpuriinTrack[
i]=0;
2026 nMCSciTilAlone[
i]=0;
2030 for(i=0; i<nSttTrackCand;i++){
2031 if(!keepit->
at(i))
continue;
2033 for(j=0;j<nSciTilHits;j++){
2034 includeSciTil[i*tmp_dim2+j]=
true;
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;
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) )
2048 index2 = i*MAXSCITILHITSINTRACK+nSciTilCommon[
i];
2049 SciTilCommonList[index2] = SciTHn;
2058 index2 = i*MAXSCITILHITSINTRACK+nSciTilSpuriinTrack[
i];
2059 SciTilSpuriList[index2] = SciTHn ;
2060 nSciTilSpuriinTrack[
i]++;
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]++;
2096 TClonesArray* fMCTrackArray,
2102 for(
int ic=0;ic<nMCTracks;ic++){
2159 Short_t nTracksFoundSoFar,
2169 Short_t
i, jexp, exphit, iHit,
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;
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)++;
2194 index2 = jexp*MAXSTTHITSINTRACK +nSpuriParinTrack->
at(jexp);
2195 ParSpuriList->
at(index2) = iHit;
2196 nSpuriParinTrack->
at(jexp)++;
2201 for(i=0; i<nSttHit; i++){
2202 emme = (Short_t) ( info->
at( i*7+6) + 0.01);
2205 if( info->
at(i*7+5) > 2. || (emme != daTrackFoundaTrackMC->
at(jexp)) )
continue;
2206 if( !InclusionListStt->
at(i))
continue;
2208 for(exphit=0; exphit<nSttParHitsinTrack->
at(jexp); exphit++){
2209 index1 = jexp*MAXSTTHITSINTRACK + exphit;
2210 if(ListSttParHitsinTrack->
at(index1) ==
i){
2216 index2 = jexp*nSttHit+nMCParalAlone->
at(jexp);
2217 MCParalAloneList->
at(index2) =
i;
2218 nMCParalAlone->
at(jexp)++;
2222 nHitsInMCTrack->
at(jexp) = nMCParalAlone->
at(jexp)+nParalCommon->
at(jexp);
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)++;
2234 index2 = jexp*MAXSTTHITSINTRACK+nSpuriSkewinTrack->
at(jexp);
2235 SkewSpuriList->
at(index2) = iHit;
2236 nSpuriSkewinTrack->
at(jexp)++;
2241 for(i=0; i<nSttHit; i++){
2242 emme = (Short_t) ( info->
at( i*7+6) + 0.01);
2246 if( info->
at(i*7+5) < 98. || (emme != daTrackFoundaTrackMC->
at(jexp)) )
continue;
2247 if( !InclusionListStt->
at(i))
continue;
2249 for(exphit=0; exphit<nSttSkewHitsinTrack->
at(jexp); exphit++){
2250 index1 = jexp*MAXSTTHITSINTRACK + exphit;
2251 if(i == ListSttSkewHitsinTrack->
at(index1) ){
2257 index2 = jexp*nSttHit+nMCSkewAlone->
at(jexp) ;
2258 MCSkewAloneList->
at(index2) =
i;
2259 nMCSkewAlone->
at(jexp)++;
2263 nSkewHitsInMCTrack->
at(jexp) = nMCSkewAlone->
at(jexp)+nSkewCommon->
at(jexp);
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)
Short_t * nMvdPixelCommon
Short_t * nSttSkewHitsinTrack
friend F32vec4 cos(const F32vec4 &a)
Short_t * nMCMvdStripAlone
Short_t * MvdPixelSpuriList
Short_t * nMvdStripSpuriinTrack
void getMCInfo(Double_t BFIELD, Double_t CVEL, Double_t *Cx, Double_t *Cy, TClonesArray *fMCTrackArray, Int_t MCTrack, Double_t *Rr)
Double_t * refindexMvdPixel
Short_t * nSpuriParinTrack
Short_t * MvdPixelCommonList
Short_t * nSkewHitsInMCTrack
friend F32vec4 sqrt(const F32vec4 &a)
Short_t * ListSttSkewHitsinTrack
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)
Short_t * nMvdStripHitsinTrack
ClassImp(PndTrkComparisonMCtruth)
friend F32vec4 sin(const F32vec4 &a)
Short_t * ListTrackCandHit
Short_t * nMvdStripCommon
Short_t * MvdStripSpuriList
Short_t * MvdStripCommonList
TVector3 GetMomentum() const
TClonesArray * fSciTHitArray
TClonesArray * fSciTPointArray
Short_t * SciTilSpuriList
Short_t * MCSciTilAloneList
Short_t * SciTilCommonList
int ComparisonwithMC(PndTrkComparisonMCtruth_io_Data ioData)
Short_t * MCMvdStripAloneList
Short_t * ListMvdPixelHitsinTrack
Short_t * OriginalSciTilList
friend F32vec4 fabs(const F32vec4 &a)
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)
TClonesArray * fSttPointArray
Short_t * MCMvdPixelAloneList
const Double_t ERRORSQSTRIP
TClonesArray * fMvdMCPointArray
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
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)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Short_t * nMvdPixelHitsinTrack
const int MAXSTTHITSINTRACK
Short_t * nSciTilHitsinTrack
Short_t * ListSciTilHitsinTrack
TClonesArray * fMCTrackArray
Short_t * nSpuriSkewinTrack
const Double_t ERRORSQPIXEL
Double_t * refindexMvdStrip
Short_t * ParalCommonList
Short_t * nSciTilSpuriinTrack
Short_t * ListMvdStripHitsinTrack
int MAXMVDPIXELHITSINTRACK
int MAXMVDSTRIPHITSINTRACK
Short_t * MCSkewAloneList
TVector3 GetStartVertex() const
Short_t * resultFitSZagain
Short_t * ListTrackCandHitType
Short_t * ListSttParHitsinTrack
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)
Short_t * nMCMvdPixelAlone
Short_t * nSttParHitsinTrack
Short_t * nMvdPixelSpuriinTrack
Short_t * daTrackFoundaTrackMC
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)
Short_t * MCParalAloneList
const Double_t DIMENSIONSCITIL