34 #include "FairRootManager.h"
35 #include "FairRunAna.h"
36 #include "FairRuntimeDb.h"
37 #include "FairTrackParP.h"
38 #include "FairField.h"
40 #include "TGeoManager.h"
41 #include "TClonesArray.h"
42 #include "TGeoVolume.h"
49 #include "TStopwatch.h"
287 memset (
fALFA,0,len);
290 memset (
fBETA,0,len);
296 memset (
fCxMC,0,len);
299 memset (
fCyMC,0,len);
302 memset (
fR_MC,0,len);
466 FairField* Field = FairRunAna::Instance()->GetField();
473 Field->GetFieldValue(po, BB);
477 hdeltaRPixel =
new TH1F(
"hdeltaRPixel",
"distance MC Pixel point from trajectory in XY plane", 100, -1, 1);
478 hdeltaRStrip =
new TH1F(
"hdeltaRStrip",
"distance MC Strip point from trajectory in XY plane", 100, -1, 1);
480 "hdeltaRPixel2",
"distance MC point from trajectory in XY plane (Pixels)", 100, -10, 10);
482 "hdeltaRStrip2",
"distance MC point from trajectory in XY plane (Strips)", 100, -10,10);
491 HANDLE2 = fopen(
"info_da_PndTrackFinderReal.txt",
"w");
494 HANDLE = fopen(
"statistiche.txt",
"w");
581 FairRootManager* ioman = FairRootManager::Instance();
584 cout <<
"-E- PndTrkTracking2::Init: "
585 <<
"RootManager not instantiated, return!" << endl;
608 BoundaryParStraws.
Set(
682 cout <<
"-E- PndTrkTracking2::Init: No MCTrack array!"
705 cout <<
"-W- PndSttHelixHitProducer::Init: "
706 <<
"No STTPoint array, return!" << endl;
714 cout <<
"-W- PndTrkTracking2::Init: "
715 <<
"No STTHit array, return!" << endl;
723 cout <<
"-W- PndTrkTracking2::Init: " <<
"No MVD Pixel hitArray, return!" <<endl;
730 cout <<
"-W- PndTrkTracking2::Init: " <<
"No MVD Strip hitArray, return!" <<endl;
739 cout <<
"-W- PndTrkTracking2::Init: " <<
"No MVD TrackCand Array, return!" <<endl;
743 cout <<
"-I- PndTrkTracking2: Initialization successfull" << endl;
749 cout <<
"-W- PndTrkTracking2::Init: " <<
"No MVD MC Point Array, return!" <<endl;
752 cout <<
"-I- PndTrkTracking2: Initialization successfull" << endl;
801 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
810 TFile*
file = FairRootManager::Instance()->GetOutFile();
812 file->mkdir(
"PndTrkTracking2");
813 file->cd(
"PndTrkTracking2");
881 SkewCommonList(tSkewCommonList,
MAXTRACKSPEREVENT*MAXSTTHITSINTRACK,
"SkewCommonList"),
882 SkewSpuriList(tSkewSpuriList,
MAXTRACKSPEREVENT*MAXSTTHITSINTRACK,
"SkewSpuriList"),
884 daTrackFoundaTrackMC(tdaTrackFoundaTrackMC,
MAXTRACKSPEREVENT,
"daTrackFoundaTrackMC");
886 memset(SttStrawOn,-1,
sizeof(SttStrawOn));
897 nRemainingCandidates,
912 save_nMvdPixelHitsinTrack,
913 save_nSttSkewHitsinTrack,
914 save_nMvdStripHitsinTrack
975 trajectory_vertex[2],
1018 FairMCPoint *puntator;
1054 cout<<endl<<
"Entering in PndTrkTracking2 : evt (starting from 0) n. "<<
IVOLTE<<endl;
1072 cout<<
"from PndTrkTracking2, fnMvdPixelHit is > maximum allowed ("
1078 cout<<
"from PndTrkTracking2, fnMvdStripHit is > maximum allowed ("
1092 cout<<
"from PndTracking, nMvdMCPoint = "<<nMvdMCPoint
1098 if(
istampa>=1) cout<<
"N. MC Points delle Mvd = "<<nMvdMCPoint<<endl;
1125 for(j=0;j<nMvdMCPoint;j++){
1128 pMvdMCPoint->Position(MCposition);
1160 for(j=0;j<nMvdMCPoint;j++){
1163 pMvdMCPoint->Position(MCposition);
1208 if (nSttMCPoint ==0){
1209 if(
istampa>1) cout<<
"from PndTrkTracking2 : N. di Stt MC points = 0"<<endl<<endl;
1211 cout<<
"from PndTrkTracking2 : N. di Stt MC points = "<<nSttMCPoint
1213 <<
"), therefore consider only the first "<<
MAXSTTHITS<<
" hits"<<endl<<endl;
1222 if (
istampa >= 1) cout<<
"from PndTrkTracking2 : N. di Stt Hits = 0, return!"<<endl<<endl;
1225 cout<<
"from PndTrkTracking2 : N. di Stt Hits = "<<nSttHit
1227 <<
"), therefore consider only the first "<<
MAXSTTHITS<<
" hits"<<endl<<endl;
1232 cout<<
"from PndTrkTracking2 : total # Hits in STT : "<<nSttHit<<endl;
1238 for( i= 0; i< nSttHit; i++){
1241 ipunto= pSttHit->GetRefIndex();
1251 if(wiredirection.Z() >=0.) {
1252 WDX[
i] = wiredirection.X();
1253 WDY[
i] = wiredirection.Y();
1254 WDZ[
i] = wiredirection.Z();
1256 WDX[
i] = -wiredirection.X();
1257 WDY[
i] = -wiredirection.Y();
1258 WDZ[
i] = -wiredirection.Z();
1263 info[
i][3]= dradius;
1271 info[
i][6]= puntator->GetTrackID();
1276 if(
fabs( WDX[i] )< 0.00001 &&
fabs( WDY[i] )< 0.00001 ){
1309 for( i= 0; i< nSttHit; i++){
1325 cout<<
"from PndTrkTracking2 : N. of SciTil Hits = "<<
fnSciTilHits
1327 <<
"), therefore consider only the first "<<
MAXSCITILHITS <<
" hits"<<endl<<endl;
1335 Short_t fSciTilMaxNumber;
1339 nHitsInSciTile[fSciTilMaxNumber],
1340 OriginalSciTilList[fSciTilMaxNumber][fSciTilMaxNumber];
1343 memset (nHitsInSciTile,0,
sizeof(nHitsInSciTile));
1347 <<
" SciTil hits present initially."<<endl;
1362 if(
istampa>1)cout<<
"from PndTrkTracking2 SciTil n. "<<0<<
1363 " not purged, Xpos "<<
1364 posiz.X()<<
", Ypos "<<
1365 posiz.Y()<<
", Zpos "<<posiz.Z()<<endl;
1373 OriginalSciTilList[0][0]=0;
1374 nHitsInSciTile[0]=1;
1380 if(
istampa>1)cout<<
"from PndTrkTracking2 SciTil n. "<<j<<
" not purged, Xpos "
1381 <<posiz.X()<<
", Ypos "<<posiz.Y()<<
", Zpos "<<posiz.Z()<<endl;
1385 for(k=0; k<iaccept; k++){
1392 OriginalSciTilList[k][nHitsInSciTile[k]]= j;
1393 nHitsInSciTile[k]++;
1404 OriginalSciTilList[iaccept][0]= j;
1405 nHitsInSciTile[iaccept]=1;
1409 fnSciTilHits=iaccept;
1419 cout<<
"from PndTrkTracking2, after purging SciTil; # hits = "<<fnSciTilHits<<endl;
1421 cout<<
"from PndTrkTracking2 SciTil n. "<<j<<
"Xpos "<<
fposizSciTil[j][0]<<
", Ypos "<<
1423 nHitsInSciTile[j]<<endl;
1464 trajectory_vertex[0]=trajectory_vertex[1]=0.;
1465 len =
sizeof(Trajectory_Start);
1466 memset (Trajectory_Start,0,len);
1516 cout<<
"from PndTrkTracking2, evt "<<
IVOLTE<<
"; number of clusters found : "<<nFoundClusters<<
" and their list :\n";
1517 for(
int ic=0;ic<nFoundClusters;ic++){
1518 cout<<
"cluster n. "<<ic<<
" is composed by "<<nHitsinCluster[ic]<<
" hits;"<<endl;
1519 for(
int icz=0;icz<nHitsinCluster[ic];icz++){
1520 cout<<
"\tStt || hit n. "<<ListHitsinCluster[ic*
MAXHITSINCLUSTER+icz]<<endl;
1626 for(iCluster=0; iCluster<nFoundClusters ; iCluster++) {
1628 if(
istampa>=2){ cout<<
"event "<<
IVOLTE<<
"; processing cluster n. "<<iCluster<<endl;}
1636 InOut.
Mvdhits = &Mvdhits[nSttTrackCand];
1639 InOut.
Oxx = &
fOx[nSttTrackCand];
1640 InOut.
Oyy = &
fOy[nSttTrackCand];
1641 InOut.
Rr = &
fR[nSttTrackCand];
1663 if(
istampa>=2){ cout<<
" Loop of Clusters; this cluster (n. "<<iCluster<<
1664 ") has nHitsinCluster = "<<nHitsinCluster[ iCluster ]
1665 <<
" which is < MINIMUMSTTMHITSPERTRACK (= "<<
1670 cout<<
"from PndTrkTracking2 : # n. Tracks found so far = "
1671 <<nSttTrackCand<<
" and it is >= MAXTRACKSPEREVENT ( = "
1680 for(i=0;i<nHitsinCluster[iCluster];i++){
1687 InOut.
Charge = &Charge[nSttTrackCand];
1702 InOut.
U = &U[nSttTrackCand][0];
1703 InOut.
V = &V[nSttTrackCand][0];
1715 if(
istampa>=2){ cout<<
" Loop of Clusters; this cluster (n. "<<iCluster<<
1716 ") has a bad outcome, no further processing.\n";}
1719 if(!outcome)
continue;
1740 InOut.
Oyy = &
fOy[nSttTrackCand];
1741 InOut.
Rr = &
fR[nSttTrackCand];
1749 keepit[nSttTrackCand]=
true;
1752 if(
istampa>=3){ cout<<
"At the bottom of Loop of Clusters; end processing cluster n."
1762 for(i=0; i<nSttTrackCand;i++){
1765 FI0[
i]=Fi_initial_helix_referenceframe[
i];
1768 GoodSkewFit[
i]=
false;
1776 nTotalCandidates = nSttTrackCand;
1787 for(ncand=0; ncand< nTotalCandidates; ncand++)
1790 if(!keepit[ncand])
continue;
1810 Fi_low_limit[ncand],
1856 save_nSttSkewHitsinTrack=fnSttSkewHitsinTrack[ncand];
1866 for(i=0;i<fnSttSkewHitsinTrack[ncand];i++){
1883 nXYZhits = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand]+ 1;
1885 nXYZhits = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand]+
1892 nhitsinfit = nXYZhits + fnSttSkewHitsinTrack[ncand];
1898 if(
istampa>=2) cout<<
"\tevt. "<<
IVOLTE<<
",nhitsinfit "<< nhitsinfit<<endl;
1914 ErrorDriftRadiusbis,
1944 resultFitSZagain[ncand] = 0;
1971 if( resultFitSZagain[ncand]==1 &&
fabs(emme) > 1.e-10 ){
1972 KAPPA[ncand] = emme;
1973 GoodSkewFit[ncand] =
true;
1974 if( ncand<= nSttTrackCand ) SttSZfit[ncand]=
true;
1976 keepit[ncand]=
false;
1977 GoodSkewFit[ncand] =
false;
1983 keepit[ncand]=
false;
1984 GoodSkewFit[ncand] =
false;
2002 signPz = -Charge[ncand]*KAPPA[ncand];
2006 if( Turns<10.) { MaxTurns=(Short_t) Turns ;}
else { MaxTurns=10; }
2009 if( Turns<10.) { MaxTurns=(Short_t) Turns ;}
else { MaxTurns=10;}
2017 oldPixel = fnMvdPixelHitsinTrack[ncand] ;
2018 oldStrip = fnMvdStripHitsinTrack[ncand] ;
2019 oldSkew = fnSttSkewHitsinTrack[ncand] ;
2026 &SchosenPixel[ncand][0],
2030 &SchosenStrip[ncand][0],
2034 &SchosenSkew[ncand][0],
2038 &ZchosenPixel[ncand][0],
2041 &ZchosenStrip[ncand][0],
2044 &ZchosenSkew[ncand][0],
2061 { keepit[ncand]=
false;
continue; }
2066 if( fnMvdPixelHitsinTrack[ncand] != oldPixel ||
2067 fnMvdStripHitsinTrack[ncand] != oldStrip ||
2068 fnSttSkewHitsinTrack[ncand] != oldSkew ) {
2069 nhitsinfit = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand]+
2070 fnSttSkewHitsinTrack[ncand];
2082 ErrorDriftRadiusbis,
2125 if( resultFitSZagain[ncand]==1 &&
fabs(emme) > 1.e-10 ){
2126 KAPPA[ncand] = emme;
2127 GoodSkewFit[ncand] =
true;
2128 if( ncand<= nSttTrackCand ) SttSZfit[ncand]=
true;
2130 keepit[ncand]=
false;
2131 GoodSkewFit[ncand] =
false;
2136 signPz = -Charge[ncand]*KAPPA[ncand];
2149 fnMvdPixelHitsinTrack[ncand]=save_nMvdPixelHitsinTrack;
2150 fnMvdStripHitsinTrack[ncand]=save_nMvdStripHitsinTrack;
2151 fnSttSkewHitsinTrack[ncand]=save_nSttSkewHitsinTrack;
2154 for(i=0;i<fnMvdPixelHitsinTrack[ncand];i++){
2157 for(i=0;i<fnMvdStripHitsinTrack[ncand];i++){
2160 for(i=0;i<fnSttSkewHitsinTrack[ncand];i++){
2170 &SchosenPixel[ncand][0],
2172 &SchosenStrip[ncand][0],
2173 &SchosenSkew[ncand][0],
2174 &ZchosenPixel[ncand][0],
2175 &ZchosenStrip[ncand][0],
2176 &ZchosenSkew[ncand][0],
2192 { keepit[ncand]=
false;
continue; }
2207 cout<<
"printout after SZ section "<<nTotalCandidates<<
" found tracks:"<<endl;
2245 fnMvdPixelHitsinTrack[ncand],
2247 fnMvdStripHitsinTrack[ncand],
2257 if( !accepted ) {keepit[ncand]=
false;
continue;}
2267 for(ncand=0; ncand< nTotalCandidates; ncand++){
2268 if(!GoodSkewFit[ncand]) keepit[ncand]=
false;
2275 cout<<
"printout after Mvd cleanup e before EliminateClones of all the "<<nTotalCandidates<<
" found tracks:"<<endl;
2313 for(ncand=0, nRemainingCandidates=0; ncand< nTotalCandidates; ncand++){
2316 cout<<
"--------------------------in the STT cleanup loop,before cleaning, this is ncand = "<<ncand ;
2317 if(!keepit[ncand]){ cout<<
" , its keepit is false therefore no printout;\n";}
2318 else{ cout<<
"\n\tits keepit is true, its charge is "<<Charge[ncand]<<
"; print it out :\n";
2330 if(!keepit[ncand])
continue;
2334 if(nHitsSkew>0) { dime = nHitsSkew; }
else { dime =1; }
2337 for(i=0;i<nHitsSkew;i++){
2369 keepit[ncand]=
false;
2375 nRemainingCandidates++;
2402 for(ncand=0; ncand< nTotalCandidates; ncand++){
2403 if(!keepit[ncand])
continue;
2438 int dim1, dim2 , dim3 , dim4, dim5, dim6, dim7;
2443 MCParalAloneList[dim1],
2444 MCSkewAloneList[dim1];
2446 if(nTotalCandidates == 0 ) {
2455 dim1 = nTotalCandidates;
2465 nMvdPixelCommon[dim1],
2466 MvdPixelCommonList[dim2],
2467 nMvdPixelSpuriinTrack[dim1],
2468 MvdPixelSpuriList[dim2],
2469 nMCMvdPixelAlone[dim1],
2470 MCMvdPixelAloneList[dim4],
2472 nMvdStripCommon[dim1],
2473 MvdStripCommonList[dim3],
2474 nMvdStripSpuriinTrack[dim1],
2475 MvdStripSpuriList[dim3],
2476 nMCMvdStripAlone[dim1],
2477 MCMvdStripAloneList[dim5],
2479 nSciTilCommon[dim1],
2480 SciTilCommonList[dim6],
2481 nSciTilSpuriinTrack[dim1],
2482 SciTilSpuriList[dim6],
2483 nMCSciTilAlone[dim1],
2484 MCSciTilAloneList[dim7];
2488 for(i=0;i<nTotalCandidates;i++){
2489 daTrackFoundaTrackMC[
i] = -1;
2517 ioData.
info = &info[0][0];
2520 ioData.
KAPPA = KAPPA;
2620 for(i=0; i<nTotalCandidates;i++){
2621 nParalCommon[
i]=0; nSpuriParinTrack[
i]=0; nMCParalAlone[
i]=0;
2622 nSkewCommon[
i]=0; nSpuriSkewinTrack[
i]=0; nMCSkewAlone[
i]=0;
2623 nMvdPixelCommon[
i]=0; nMvdPixelSpuriinTrack[
i]=0; nMCMvdPixelAlone[
i]=0;
2624 nMvdStripCommon[
i]=0; nMvdStripSpuriinTrack[
i]=0; nMCMvdStripAlone[
i]=0;
2625 nSciTilCommon[
i]=0; nSciTilSpuriinTrack[
i]=0; nMCSciTilAlone[
i]=0;
2647 In_Put.
info = &info[0][0] ;
2649 In_Put.
KAPPA = KAPPA ;
2767 tdaTrackFoundaTrackMC
2785 Short_t CandidateSkewnSttSkewhitinTrack,
2786 Short_t SkewList[][2],
2802 Short_t NAssociated;
2815 if(
fabs(KAPPA)<1.e-20) {
2823 zmax = (2.*
PI-FI0)/KAPPA;
2826 zmin = (2.*
PI-FI0)/KAPPA;
2830 for(i=0; i<CandidateSkewnSttSkewhitinTrack; i++){
2831 bbb=(S[
i]-FI0)/KAPPA;
2832 for(sign=0;sign<=1; sign ++){
2833 tempZ[
sign]=Z[
i]+(2*sign-1)*ZDrift[i];
2834 if( tempZ[sign] > zmax ){
2835 tempZ[
sign]=fmod( tempZ[sign]-zmax, deltaz) + zmin;
2836 }
else if (tempZ[sign]<zmin){
2837 tempZ[
sign]=fmod( tempZ[sign]-zmin, deltaz) + zmax;
2839 zdist1 =
fabs( bbb - tempZ[sign]);
2840 zdist2 = deltaz- zdist1;
2841 if(zdist2<0.) zdist2 = 0.;
2842 zdist[
sign] = zdist1 < zdist2 ? zdist1 : zdist2;
2844 zdist1 = zdist[0] < zdist[1] ? zdist[0] : zdist[1];
2845 if( zdist1 < allowed_distance ){
2846 tempore[NAssociated]=SkewList[
i ][0];
2847 temporeS[NAssociated]=S[
i];
2848 temporeZ[NAssociated]=Z[
i];
2849 temporeZDrift[NAssociated]=ZDrift[
i];
2850 temporeZError[NAssociated]=ZError[
i];
2879 Short_t SkewList[][2],
2905 for( iii=0; iii< NSkewhits; iii++) {
2926 for( ii=0; ii<2; ii++){
2928 if( auxZ[ii] < 999998.){
2930 S[location] = auxS[ii];
2932 if( S[location] < Fi_low_limit) {
2933 if( S[location]+2.*
PI > Fi_up_limit)
continue;
2934 }
else if( S[location] > Fi_up_limit) {
2935 if( S[location]- 2.*
PI < Fi_low_limit)
continue;
2937 Z[location] = auxZ[ii];
2938 ZDrift[location] = auxZDrift[ii];
2945 SkewList[NAssociated][0] = infoskew[iii];
2946 SkewList[NAssociated][1] = ii;
2987 Short_t StartTrackCand,
2989 Short_t EndTrackCand,
2994 Short_t *nParHitsinTrack,
3014 for(itrack=StartTrackCand; itrack<EndTrackCand; itrack++){
3015 if( ! keepit[itrack] )
continue;
3016 if( ! Mvdhits[itrack] )
continue;
3017 if( Fi_low_limit[itrack] < -99998.)
continue;
3019 nParHitsinTrack[itrack]=0;
3026 for(i=0; i<nSttParHit; i++){
3030 angle =
atan2(info[ihit][1]-
fOy[itrack],info[ihit][0]-
fOx[itrack]);
3031 if(angle<0.) angle += 2.*
PI;
3035 if(
fabs(KAPPA[itrack]) > 1.e-20){
3036 deltaZ = 2.*
PI/KAPPA[itrack];
3037 Zpos = (angle - FI0[itrack])/KAPPA[itrack];
3040 fabs(Zpos-info[ihit][2])>1.5*info[ihit][4] &&
3041 fabs(Zpos+deltaZ-info[ihit][2])>1.5*info[ihit][4] &&
3042 fabs(Zpos-deltaZ-info[ihit][2])>1.5*info[ihit][4]
3046 if( angle>Fi_up_limit[itrack]){
3048 if(angle < Fi_low_limit[itrack])
continue;
3049 }
else if (angle < Fi_low_limit[itrack]){
3051 if(angle > Fi_up_limit[itrack])
continue;
3056 (
fOx[itrack]-info[ihit][0])*(
fOx[itrack]-info[ihit][0])+
3057 (
fOy[itrack]-info[ihit][1])*(
fOy[itrack]-info[ihit][1])
3060 dist =
fabs( dist1 - info[ihit][3] );
3065 if(dist<NTIMES*
STRAWRADIUS || info[ihit][3]> dist ){
3066 ListParHitsinTrack[itrack][ nParHitsinTrack[itrack] ]
3068 nParHitsinTrack[itrack]++;
3088 Short_t first_track,
3089 Short_t second_track
3099 for(j=0;j<fnMvdPixelHitsinTrack[second_track];j++){
3109 for(j=0;j<fnMvdStripHitsinTrack[second_track];j++){
3120 for(j=0;j<fnSttParHitsinTrack[second_track];j++){
3131 for(j=0;j<fnSttSkewHitsinTrack[second_track];j++){
3148 Short_t nTotalCandidates,
3157 nTotalHits[nTotalCandidates];
3160 for(i=0;i<nTotalCandidates;i++){
3168 for(i=0;i<nTotalCandidates-1;i++){
3169 if( ! keepit[i] )
continue;
3170 for(j=i+1; j<nTotalCandidates;j++){
3171 if( ! keepit[j] )
continue;
3173 if(
istampa>=2) { cout<<
"from Eliminateclones, traccia i = "<<i<<
", j = "<<j<<
", nTotalHits[i] "<<
3174 nTotalHits[
i]<<
", nTotalHits[j] "<<nTotalHits[j]
3175 <<
", nCommon "<<nCommon<<endl;}
3177 if(nCommon > fraction * nTotalHits[i] || nCommon > fraction * nTotalHits[j]) {
3179 if( nTotalHits[i]>=nTotalHits[j] ){
3203 Short_t MaxTurnofTracks,
3238 minimumSttDriftError = 1.;
3242 MvdCut = MvdCut*
sqrt(1.+Rr*Rr*KAPPA*KAPPA)/(Rr*
fabs(KAPPA));
3243 minimumSttDriftError = minimumSttDriftError*
sqrt(1.+Rr*Rr*KAPPA*KAPPA)/(Rr*
fabs(KAPPA));
3261 int len =
sizeof(already);
3262 memset (already,
false,len);
3271 for(i=0;i< fnMvdPixelHitsinTrack[ncand] ;i++){
3275 dista = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z,Fi,MaxTurnofTracks,signPz,chosenS);
3278 ", Z "<<Z<<
", S "<<Fi<<
", R*S "<<Rr*Fi<<
", dista "<<dista<<
", X "<<
3280 if( dista < MvdCut){
3283 ZchosenPixel[fListMvdPixelHitsinTrack[ncand][
i]]=
Z;
3284 ErrorchosenPixel[fListMvdPixelHitsinTrack[ncand][
i]]=
ERRORPIXEL;
3285 Pix_distance[auxnMvdPixel] = dista;
3287 if(
istampa>=2){ cout<<
", chosen."<<endl;}
3289 if(
istampa>=2){ cout<<
", not chosen. "<<endl;}
3295 for(j=0;j<fnMvdStripHitsinTrack[ncand];j++){
3296 i=j+fnMvdPixelHitsinTrack[ncand] ;
3300 dista = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z,Fi,MaxTurnofTracks,signPz,chosenS);
3303 ", Z "<<Z<<
", S "<<Fi<<
", R*S "<<Rr*Fi<<
", dista "<<dista<<
", X "<<
3305 if( dista < MvdCut){
3308 ZchosenStrip[fListMvdStripHitsinTrack[ncand][j]]=
Z;
3309 ErrorchosenStrip[fListMvdStripHitsinTrack[ncand][j]]=
ERRORSTRIP;
3310 Strip_distance[auxnMvdStrip] = dista;
3312 if(
istampa>=2){ cout<<
", chosen. "<<endl;}
3314 if(
istampa>=2){ cout<<
", not chosen. "<<endl;}
3321 i=j+ fnMvdPixelHitsinTrack[ncand]+
3322 fnMvdStripHitsinTrack[ncand];
3328 dista =GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z+Drift,Fi,MaxTurnofTracks,signPz,chosenS);
3329 ddd = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z-Drift,Fi,MaxTurnofTracks,signPz,chosenS2);
3334 SchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]= chosenS2;
3337 SchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]= chosenS;
3346 ", suo Drift "<<Drift<<
", dista+ "<<dista<<
", dista- "<<ddd
3347 <<
", Maxturns "<< MaxTurnofTracks<<
", signPz "<<signPz<< endl;
3381 dista_storage[ fListSttSkewHitsinTrack[ncand][j] ]=dista;
3382 auxListSttSkew[auxnSttSkew]= fListSttSkewHitsinTrack[ncand][j] ;
3384 ErrorchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]=
error;
3397 fnMvdPixelHitsinTrack[ncand] = auxnMvdPixel;
3398 fnMvdStripHitsinTrack[ncand] = auxnMvdStrip;
3399 fnSttSkewHitsinTrack[ncand] = auxnSttSkew;
3400 for(j=0;j<fnMvdPixelHitsinTrack[ncand];j++){
3403 for(j=0;j<fnMvdStripHitsinTrack[ncand];j++){
3406 for(j=0;j<fnSttSkewHitsinTrack[ncand];j++){
3414 bool inclusion[fnMvdPixelHitsinTrack[ncand]];
3415 memset (inclusion,
true,
sizeof(inclusion));
3416 for(i=0;i<fnMvdPixelHitsinTrack[ncand];i++){
3417 if( !inclusion[i])
continue;
3419 for(j=i+1;j<fnMvdPixelHitsinTrack[ncand];j++){
3421 if( !inclusion[j])
continue;
3422 distance_RS =
fabs((SchosenPixel[k]- SchosenPixel[m]))*Rr;
3423 distance_Z =
fabs(ZchosenPixel[k] - ZchosenPixel[m]);
3424 if( distance_RS <0.2 && distance_Z > 1. ){
3425 if(
fabs( Pix_distance[i] ) <
fabs( Pix_distance[j])){
3437 for(j=0;j<fnMvdPixelHitsinTrack[ncand];j++){
3438 if( !inclusion[j])
continue;
3442 fnMvdPixelHitsinTrack[ncand] = auxnMvdPixel;
3447 bool inclusion2[fnMvdStripHitsinTrack[ncand]];
3448 memset (inclusion2,
true,
sizeof(inclusion2));
3449 for(i=0;i<fnMvdStripHitsinTrack[ncand];i++){
3450 if( !inclusion2[i])
continue;
3452 for(j=i+1;j<fnMvdStripHitsinTrack[ncand];j++){
3453 if( !inclusion2[j])
continue;
3456 distance_RS =
fabs((SchosenStrip[k]- SchosenStrip[m]))*Rr;
3457 distance_Z =
fabs(ZchosenStrip[k] - ZchosenStrip[m]);
3459 if( distance_RS <0.2 && distance_Z > 1. ){
3460 if(
fabs( Strip_distance[i] ) <
fabs( Strip_distance[j])){
3461 inclusion2[j]=
false;
3463 inclusion2[
i]=
false;
3472 for(j=0;j<fnMvdStripHitsinTrack[ncand];j++){
3473 if( !inclusion2[j])
continue;
3477 fnMvdStripHitsinTrack[ncand] = auxnMvdStrip;
3496 Short_t MaxTurnofTracks,
3536 minimumSttDriftError = 1.;
3540 MvdCut = MvdCut*
sqrt(1.+Rr*Rr*KAPPA*KAPPA)/(Rr*
fabs(KAPPA));
3541 if(
istampa>=2) cout<<
"from eliminatespurioussz_ter, MvdCut "<<MvdCut<<endl;
3542 minimumSttDriftError = minimumSttDriftError*
sqrt(1.+Rr*Rr*KAPPA*KAPPA)/(Rr*
fabs(KAPPA));
3556 int len =
sizeof(already);
3557 memset (already,
false,len);
3570 dista = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z,Fi,MaxTurnofTracks,signPz,chosenS);
3575 ", Z "<<Z<<
", R*S "<<Rr*Fi<<
", dista "<<dista<<
", X "<<
3577 if( dista < MvdCut){
3580 ZchosenPixel[fListMvdPixelHitsinTrack[ncand][
i]]=
Z;
3581 ErrorchosenPixel[fListMvdPixelHitsinTrack[ncand][
i]]=
ERRORPIXEL;
3584 if(
istampa>=2){ cout<<
", chosen. "<<endl;}
3586 if(
istampa>=2){ cout<<
", not chosen. "<<endl;}
3593 i=j+fnMvdPixelHitsinTrack[ncand] ;
3597 dista = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z,Fi,MaxTurnofTracks,signPz,chosenS);
3600 ", Z "<<Z<<
", R*S "<<Rr*Fi<<
", dista "<<dista<<
", X "<<
3602 if( dista < MvdCut){
3605 ZchosenStrip[fListMvdStripHitsinTrack[ncand][j]]=
Z;
3606 ErrorchosenStrip[fListMvdStripHitsinTrack[ncand][j]]=
ERRORSTRIP;
3609 if(
istampa>=2){ cout<<
", chosen. "<<endl;}
3611 if(
istampa>=2){ cout<<
", not chosen. "<<endl;}
3618 i=j+ fnMvdPixelHitsinTrack[ncand]+
3619 fnMvdStripHitsinTrack[ncand];
3625 dista =GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z+Drift,Fi,MaxTurnofTracks,signPz,chosenS);
3626 ddd = GeomC.
Dist_SZ_bis(Rr,KAPPA,FI0,Z-Drift,Fi,MaxTurnofTracks,signPz,chosenS2);
3629 Z<<
", suo Drift "<<Drift<<
", dista+ "<<dista<<
", dista- "<<ddd<<endl;
3635 SchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]= chosenS2;
3638 SchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]= chosenS;
3673 dista_storage[ fListSttSkewHitsinTrack[ncand][j] ]=dista;
3674 auxListSttSkew[auxnSttSkew]= fListSttSkewHitsinTrack[ncand][j] ;
3676 ErrorchosenSkew[ fListSttSkewHitsinTrack[ncand][j] ]=
error;
3689 fnMvdPixelHitsinTrack[ncand] = auxnMvdPixel;
3690 fnMvdStripHitsinTrack[ncand] = auxnMvdStrip;
3691 fnSttSkewHitsinTrack[ncand] = auxnSttSkew;
3692 for(j=0;j<fnMvdPixelHitsinTrack[ncand];j++){
3695 for(j=0;j<fnMvdStripHitsinTrack[ncand];j++){
3698 for(j=0;j<fnSttSkewHitsinTrack[ncand];j++){
3718 Short_t nParallelHits,
3738 for(ihit=0, nleft=0, nright=0, minr = 9999999., minl = 9999999.; ihit<nParallelHits; ihit++){
3743 cross = oX*Y[ihit] -
3757 if( nright> nleft) {
3759 }
else if ( nleft > nright) {
3762 if( minr < minl ) *Charge = -1;
3778 Short_t CandidateSkewnSkewHitsinTrack,
3780 Double_t *Fi_initial_helix_referenceframe,
3789 for(i=0 ; i<CandidateSkewnSkewHitsinTrack; i++){
3790 if( S[i] > *Fi_initial_helix_referenceframe ) S[
i]-= 2.*
PI;
3793 for(i=0 ; i<CandidateSkewnSkewHitsinTrack; i++){
3794 if( S[i] < *Fi_initial_helix_referenceframe ) S[
i]+= 2.*
PI;
3822 TObjArray * tobjnodes = tgeovol->GetNodes();
3828 if( strstr(tgeovol->GetName(),
"Active") == NULL
3830 (strstr(tgeovol->GetName(),
"Pixel") == NULL && strstr(tgeovol->GetName(),
"Strip") == NULL )
3834 cout<<
"-----------------------------------------------\n";
3835 cout<<
" the volume "<<tgeovol->GetName()<<
" is at the end of the chain!";
3836 if (tgeovol->IsActive()) cout<<
"volume attivo;\n";
else cout<<
"volume non attivo;\n";
3840 TGeoShape *
shape = tgeovol->GetShape();
3841 if(shape->GetByteCount()== 36){
3843 p = (TGeoBBox *) shape;
3845 Or = p->GetOrigin();
3846 cout<<
"questo e' una box con OriginX "<<Or[0]<<
",OriginY "<<Or[1]
3847 <<
",OriginZ "<<Or[2]<<
" e Semilato X (= DX) = "<<p->GetDX()
3848 <<
", DY "<<p->GetDY()<<
", DZ "<<p->GetDZ()<<endl;
3849 }
else if (shape->GetByteCount()== 100) {
3850 cout<<
"questo e' una TGeoArb8"<<endl;
3851 shape->InspectShape();
3853 cout<<
"anomalous case, not a box nor a TGeoArb8 !\n";
3858 cout<<
"---------- inizio stampa global Scale, Translation e Global matrix del volume calcolata col mio metodo "<<endl;
3859 cout<<
"\tla sua Scale rispetto a MARS : X "<<GlobalScal[0]<<
", Y "<<
3860 GlobalScal[1]<<
", Z "<<GlobalScal[2]<<endl;
3861 cout<<
"\tla sua traslazione rispetto a MARS : X "<<GlobalTrans[0]<<
" Y "<<
3862 GlobalTrans[1]<<
" Z "<<GlobalTrans[2]<<endl;
3863 cout<<
"\tla sua rotazione rispetto a Mars :\n"<<GlobalRot[0]<<
3866 " ,\n"<<GlobalRot[3]<<
3869 " ,\n"<<GlobalRot[6]<<
3871 " "<<GlobalRot[8]<<
" ;"<<
3873 cout<<
"-------------------------------\n\n";
3877 nodes = tobjnodes->GetEntriesFast();
3878 for(ino=0;ino<nodes; ino++){
3879 TGeoNode * geonode = (TGeoNode *) tobjnodes->At(ino);
3881 TGeoVolume * vol = geonode->GetVolume();
3895 TGeoMatrix * lmatrix = geonode->GetMatrix();
3897 const Double_t * Scal = lmatrix->GetScale();
3900 const Double_t * Trans = lmatrix->GetTranslation();
3903 const Double_t * Rot = lmatrix->GetRotationMatrix();
3926 newGlobalScal[
i] = GlobalScal[
i]*Scal[
i];
3932 newGlobalTrans[
i] = GlobalTrans[
i] ;
3934 newGlobalTrans[
i] += GlobalRot[i*3+k]*Trans[k];
3940 newGlobalRot[3*i+j] = 0.;
3942 newGlobalRot[3*i+j] += GlobalRot[3*i+k]*Rot[3*k+j];
3952 TGeoVolume * mother = geonode->GetMotherVolume();
3955 mother->FindMatrixOfDaughterVolume(vol);
3957 TGeoHMatrix * gmatrix =
gGeoManager->GetHMatrix();
4017 vers[0] = Oxx - info[infopar][0];
4018 vers[1] = Oyy - info[infopar][1];
4019 norm =
sqrt( vers[0]*vers[0] + vers[1]*vers[1] );
4022 Posiz[0] = -999999999.;
4031 if(
fabs( Rr -
fabs( norm - info[infopar][3] ) )
4033 fabs( Rr - (norm + info[infopar][3]) ) ) {
4035 Posiz[0] = info[infopar][0] + info[infopar][3]*vers[0]/norm;
4036 Posiz[1] = info[infopar][1] + info[infopar][3]*vers[1]/norm;
4040 Posiz[0] = info[infopar][0] - info[infopar][3]*vers[0]/norm;
4041 Posiz[1] = info[infopar][1] - info[infopar][3]*vers[1]/norm;
4051 if(
fabs(KAPPA)<1.e-20 ){
4052 Posiz[2] = -888888888.;
4057 fi =
atan2(-vers[1],-vers[0]);
4058 if(fi<0.) fi += 2.*
PI;
4061 if(fi > FI0 ) FI0 += 2.*
PI;
4064 if(fi < FI0 ) fi += 2.*
PI;
4066 Posiz[2] = (fi-FI0)/KAPPA;
4079 Short_t *ListSttParHi,
4086 OLDListSttParHits[nSttParHit];
4089 auxIndex[nSttParHit];
4092 auxRvalues[nSttParHit];
4097 for (j = 0; j< nSttParHit; j++){
4100 info[ListSttParHi[ j ] ][0]*info[ListSttParHi[ j ] ][0]+
4101 info[ListSttParHi[ j ] ][1]*info[ListSttParHi[ j ] ][1];
4102 OLDListSttParHits[j]=ListSttParHi[j];
4107 Sorter.
Merge_Sort( (Short_t) nSttParHit, auxRvalues, auxIndex);
4109 for (j = 0; j< nSttParHit; j++){
4110 ListSttParHi[ nSttParHit-1-j] = OLDListSttParHits[ auxIndex[ j ] ];
4126 Short_t nTotalCandidates,
4128 Int_t nSttTrackCand,
4132 Double_t SchosenSkew[][MAXSTTHITS],
4133 Double_t ZchosenSkew[][MAXSTTHITS],
4134 Short_t *daTrackFoundaTrackMC
4175 for(ncand=0, ipinco = 0; ncand< nTotalCandidates; ncand++){
4176 if(!keepit[ncand])
continue;
4179 if(ncand<nSttTrackCand && ! SttSZfit[ncand])
continue;
4182 dis=
sqrt( Oxx*Oxx+Oyy*Oyy );
4183 if( dis < 1.e-20)
continue;
4190 x=
fOx[ncand] +
fR[ncand]*
cos(FI0[ncand]);
4191 y=
fOy[ncand] +
fR[ncand]*
sin(FI0[ncand]);
4192 TVector3 posSeed(x,y,0.);
4194 if(
fabs(KAPPA[ncand])>1.e-20 ){
4195 Pzini = -Charge[ncand]*0.003*
fBFIELD/KAPPA[ncand];
4207 pTrckCand->
setMcTrackId( daTrackFoundaTrackMC[ncand] );
4213 pTrckCand->
AddHit(FairRootManager::Instance()->
4219 pTrckCand->
AddHit(FairRootManager::Instance()->
4225 pTrckCand->
AddHit(FairRootManager::Instance()->
4231 pTrckCand->
AddHit(FairRootManager::Instance()->
4247 Posiz1[1] =
fYMvdPixel[ fListTrackCandHit[ncand][0] ];
4248 Posiz1[2] =
fZMvdPixel[ fListTrackCandHit[ncand][0] ];
4254 Posiz1[1] =
fYMvdStrip[ fListTrackCandHit[ncand][0] ];
4255 Posiz1[2] =
fZMvdStrip[ fListTrackCandHit[ncand][0] ];
4274 if(Posiz1[2]<-888888887. || Posiz1[0] < -999999998.)
4277 ErrPosition.SetX(0.02);
4278 ErrPosition.SetY(0.02);
4279 ErrPosition.SetZ(1.);
4287 ErrPosition.SetX(0.02);
4288 ErrPosition.SetY(0.02);
4289 ErrPosition.SetZ(1.);
4293 Position.SetX( Posiz1[0] );
4294 Position.SetY( Posiz1[1] );
4295 Position.SetZ( Posiz1[2] );
4296 versor[0] =
fOx[ncand]-Posiz1[0];
4297 versor[1] =
fOy[ncand]-Posiz1[1];
4298 Distance =
sqrt(versor[0]*versor[0]+versor[1]*versor[1]);
4299 versor[0] /= Distance;
4300 versor[1] /= Distance;
4301 px = -Charge[ncand]*Ptras*versor[1];
4302 py = Charge[ncand]*Ptras*versor[0];
4305 Momentum.SetZ(Pzini);
4306 ErrMomentum.SetX(0.05*Ptras);
4307 ErrMomentum.SetY(0.05*Ptras);
4308 ErrMomentum.SetZ(0.05*Pzini);
4311 ddd = Ptras*
sqrt(Ptras*Ptras+Pzini*Pzini);
4313 FairTrackParP first( Position, Momentum,
4314 ErrPosition, ErrMomentum, Charge[ncand],
4316 TVector3(py/Ptras, -px/Ptras, 0.),
4317 TVector3(Pzini*px/ddd,Pzini*py/ddd,-Ptras*Ptras/ddd)
4321 k = fnTrackCandHit[ncand]-1;
4324 Posiz1[1] =
fYMvdPixel[ fListTrackCandHit[ncand][k] ];
4325 Posiz1[2] =
fZMvdPixel[ fListTrackCandHit[ncand][k] ];
4331 Posiz1[1] =
fYMvdStrip[ fListTrackCandHit[ncand][k] ];
4332 Posiz1[2] =
fZMvdStrip[ fListTrackCandHit[ncand][k] ];
4348 if(Posiz1[2]<-888888887. || Posiz1[0] < -999999998.)
4351 ErrPosition.SetX(0.02);
4352 ErrPosition.SetY(0.02);
4353 ErrPosition.SetZ(1.);
4360 ErrPosition.SetX(0.02);
4361 ErrPosition.SetY(0.02);
4362 ErrPosition.SetZ(1.);
4366 Position.SetX( Posiz1[0] );
4367 Position.SetY( Posiz1[1] );
4368 Position.SetZ( Posiz1[2] );
4369 versor[0] =
fOx[ncand]-Posiz1[0];
4370 versor[1] =
fOy[ncand]-Posiz1[1];
4371 Distance =
sqrt(versor[0]*versor[0]+versor[1]*versor[1]);
4372 versor[0] /= Distance;
4373 versor[1] /= Distance;
4374 px = -Charge[ncand]*Ptras*versor[1];
4375 py = Charge[ncand]*Ptras*versor[0];
4378 Momentum.SetZ(Pzini);
4381 ddd = Ptras*
sqrt(Ptras*Ptras+Pzini*Pzini);
4385 FairTrackParP last( Position, Momentum,
4386 ErrPosition, ErrMomentum, Charge[ncand],
4388 TVector3(py/Ptras, -px/Ptras, 0.),
4389 TVector3(Pzini*px/ddd,Pzini*py/ddd,-Ptras*Ptras/ddd)
4395 PndTrack *pTrck =
new((*fSttMvdPndTrackArray)[ipinco])
PndTrack(first,last,*pTrckCand);
4455 DriftRadiusbis[
i]=DriftRadius[
i]=-1.;
4469 DriftRadiusbis[
i]=DriftRadius[
i]=-1.;
4481 i = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand];
4496 kall = fnMvdPixelHitsinTrack[ncand]+
4497 fnMvdStripHitsinTrack[ncand]+j;
4500 i = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand]+1+j;
4504 i = fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand]+
4567 for(i=0; i< nSttHit-1; i++){
4569 for(j=i+1; j< nSttHit; j++){
4576 TubeID[i] == TubeID[j] )
4601 Short_t nSttTrackCand,
4605 Short_t *nPixelHitsinTrack,
4606 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
4607 Short_t *nStripHitsinTrack,
4608 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
4622 for(i=0; i<nSttTrackCand; i++){
4623 if( ! keepit[i] ) continue ;
4625 if( Fifirst[i] < -99998. ){
4636 anglemin = Fifirst[
i];
4639 anglemax = Fifirst[
i];
4641 if(anglemax < anglemin) anglemax += 2.*
PI;
4642 if(anglemax < anglemin) anglemax=anglemin;
4652 nPixelHitsinTrack[
i] = 0;
4655 if(angle<0.) angle += 2.*
PI;
4656 if( angle>anglemax){
4658 if( angle>anglemax) angle = anglemax;
4660 }
else if (angle<anglemin){
4662 if (angle<anglemin) angle = anglemin;
4665 if(angle > anglemin && angle < anglemax)
4671 ListPixelHitsinTrack[
i][nPixelHitsinTrack[
i]]=jmvdhit;
4672 nPixelHitsinTrack[
i]++;
4673 if( nPixelHitsinTrack[i] == MAXMVDPIXELHITSINTRACK )
break;
4680 nStripHitsinTrack[
i] = 0;
4683 if(angle<0.) angle += 2.*
PI;
4684 if( angle>anglemax){
4686 if( angle>anglemax) angle = anglemax;
4687 }
else if (angle<anglemin){
4689 if (angle<anglemin) angle = anglemin;
4692 if(angle > anglemin && angle < anglemax)
4698 ListStripHitsinTrack[
i][nStripHitsinTrack[
i]]=jmvdhit;
4699 nStripHitsinTrack[
i]++;
4700 if( nStripHitsinTrack[i] == MAXMVDSTRIPHITSINTRACK )
break;
4724 Short_t nSttTrackCand,
4729 Short_t *nPixelHitsinTrack,
4730 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
4731 Short_t *nStripHitsinTrack,
4732 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
4754 for(itrack=0; itrack<nSttTrackCand; itrack++){
4755 if( ! keepit[itrack] )
continue;
4758 if( Fifirst[itrack] < -99998. ){
4764 if(CHARGE[itrack]>0){
4766 anglemax = FI0[itrack];
4767 anglemin = Fifirst[itrack];
4769 anglemin = FI0[itrack];
4770 anglemax = Fifirst[itrack];
4772 if(anglemax < anglemin) anglemax += 2.*
PI;
4773 if(anglemax < anglemin) anglemax=anglemin;
4781 for(j=0; j<nPixelHitsinTrack[itrack]; j++){
4782 if(
fZMvdPixel[ListPixelHitsinTrack[itrack][j]]>0.){
4786 for(j=0; j<nStripHitsinTrack[itrack]; j++){
4787 if(
fZMvdPixel[ListStripHitsinTrack[itrack][j]]>0.){
4812 if(angle<0.) angle += 2.*
PI;
4813 if( angle>anglemax){
4815 if( angle>anglemax) angle = anglemax;
4816 }
else if (angle<anglemin){
4818 if (angle<anglemin) angle = anglemin;
4820 if(angle > anglemin && angle < anglemax){
4825 if(dist<highqualitycut){
4835 if(naddpix>MAXMVDPIXELHITSINTRACK){
4840 for(j=0;j<naddpix;j++){
4841 ListPixelHitsinTrack[itrack][j]=List[j];
4843 nPixelHitsinTrack[itrack] = naddpix;
4861 if(angle<0.) angle += 2.*
PI;
4862 if( angle>anglemax){
4864 if( angle>anglemax) angle = anglemax;
4865 }
else if (angle<anglemin){
4867 if (angle<anglemin) angle = anglemin;
4869 if(angle > anglemin && angle < anglemax){
4875 if(dist<highqualitycut){
4885 if(naddstr>MAXMVDSTRIPHITSINTRACK){
4890 for(j=0;j<naddstr;j++){
4891 ListStripHitsinTrack[itrack][j]=List[j];
4893 nStripHitsinTrack[itrack] = naddstr;
4897 if(nPixelHitsinTrack[itrack]+nStripHitsinTrack[itrack]>0)
4898 Mvdhits[itrack]=
true;
4916 Short_t nSttTrackCand,
4920 Short_t *nPixelHitsinTrack,
4921 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
4922 Short_t *nStripHitsinTrack,
4923 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
4927 Short_t
i,j,j1, imvdcand, jmvdhit, ncont,
4949 for(i=0; i<nSttTrackCand; i++){
4950 if( ! keepit[i] ) continue ;
4952 if( Fifirst[i] < -99998. ){
4963 anglemin = Fifirst[
i];
4966 anglemax = Fifirst[
i];
4968 if(anglemax < anglemin) anglemax += 2.*
PI;
4969 if(anglemax < anglemin) anglemax=anglemin;
4982 nHighQuality[ngoodmix]=0;
4992 if(angle<0.) angle += 2.*
PI;
4994 if( angle>anglemax){
4996 if( angle>anglemax) angle = anglemax;
4997 }
else if (angle<anglemin){
4999 if (angle<anglemin) angle = anglemin;
5001 if(angle > anglemin && angle < anglemax)
5010 List[ngoodmix][nn[ngoodmix]]=
5012 ListType[ngoodmix][nn[ngoodmix]]=
5015 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5028 if(angle<0.) angle += 2.*
PI;
5030 if( angle>anglemax){
5032 if( angle>anglemax) angle = anglemax;
5033 }
else if (angle<anglemin){
5035 if (angle<anglemin) angle = anglemin;
5037 if(angle > anglemin && angle < anglemax){
5045 List[ngoodmix][nn[ngoodmix]]=
5047 ListType[ngoodmix][nn[ngoodmix]]=
5050 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5060 if( nn[ngoodmix]>0) {
5061 DIST[ngoodmix]=Dist/nn[ngoodmix];
5066 if(
istampa>=3 ){cout<<
"\tquesto Mvd candidato (n. ngoodmix = "<<ngoodmix-1<<
5067 ") passa con i seguenti hits :"<<endl;
5069 for(
int icc=0; icc<nn[ngoodmix-1]; icc++){
5070 if(ListType[ngoodmix-1][icc]==FairRootManager::Instance()->GetBranchId(
fMvdPixelBranch)) {
5071 cout<<
"\tPixel hit n. "<<List[ngoodmix-1][icc]<<endl;
5072 }
else if(ListType[ngoodmix-1][icc]==
5074 cout<<
"\tStrip hit n. "<<List[ngoodmix-1][icc]<<endl;
5076 cout<<
"\tNoise (?) , hit tipo "<<ListType[ngoodmix-1][icc]<<endl;
5094 DIST[ngoodmix] = 0.;
5095 nHighQuality[ngoodmix]=0;
5102 if(angle<0.) angle += 2.*
PI;
5103 if( angle>anglemax){
5105 if( angle>anglemax) angle = anglemax;
5106 }
else if (angle<anglemin){
5108 if (angle<anglemin) angle = anglemin;
5110 if(angle > anglemin && angle < anglemax){
5119 List[ngoodmix][nn[ngoodmix]]=
5121 ListType[ngoodmix][nn[ngoodmix]]=
5123 DIST[ngoodmix] += dist;
5124 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5136 if(angle<0.) angle += 2.*
PI;
5137 if( angle>anglemax){
5139 if( angle>anglemax) angle = anglemax;
5140 }
else if (angle<anglemin){
5142 if (angle<anglemin) angle = anglemin;
5144 if(angle > anglemin && angle < anglemax){
5156 List[ngoodmix][nn[ngoodmix]]=
5158 ListType[ngoodmix][nn[ngoodmix]]=
5160 DIST[ngoodmix] += dist;
5161 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5168 if( nn[ngoodmix]>0) {
5169 DIST[ngoodmix] /= nn[ngoodmix];
5172 if(
istampa>=3){cout<<
"\tevento n. "<<
IVOLTE<<
" questi Mvd ALONE DS hits passano :\n"<<endl;
5174 for(
int icc=0; icc<nn[ngoodmix-1]; icc++){
5175 if(ListType[ngoodmix-1][icc]==FairRootManager::Instance()->GetBranchId(
fMvdPixelBranch)) {
5176 cout<<
"\tDS Pixel hit n. "<<List[ngoodmix-1][icc]<<endl;
5177 }
else if(ListType[ngoodmix-1][icc]==
5179 cout<<
"\tDS Strip hit n. "<<List[ngoodmix-1][icc]<<endl;
5181 cout<<
"\tNoise (?) , hit tipo "<<ListType[ngoodmix-1][icc]<<endl;
5197 DIST[ngoodmix] = 0.;
5198 nHighQuality[ngoodmix]=0;
5205 if(angle<0.) angle += 2.*
PI;
5206 if( angle>anglemax){
5208 if( angle>anglemax) angle = anglemax;
5209 }
else if (angle<anglemin){
5211 if (angle<anglemin) angle = anglemin;
5213 if(angle > anglemin && angle < anglemax){
5222 List[ngoodmix][nn[ngoodmix]]=
5224 ListType[ngoodmix][nn[ngoodmix]]=
5226 DIST[ngoodmix] += dist;
5227 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5240 if(angle<0.) angle += 2.*
PI;
5241 if( angle>anglemax){
5243 if( angle>anglemax) angle = anglemax;
5244 }
else if (angle<anglemin){
5246 if (angle<anglemin) angle = anglemin;
5248 if(angle > anglemin && angle < anglemax){
5260 List[ngoodmix][nn[ngoodmix]]=
5262 ListType[ngoodmix][nn[ngoodmix]]=
5264 DIST[ngoodmix] += dist;
5265 if( dist<highqualitycut) nHighQuality[ngoodmix]++;
5272 if( nn[ngoodmix]>0) {
5273 DIST[ngoodmix] /= nn[ngoodmix];
5276 if(
istampa>=3){cout<<
"\tevento n. "<<
IVOLTE<<
" questi Mvd ALONE US hits passano :\n"<<endl;
5278 for(
int icc=0; icc<nn[ngoodmix-1]; icc++){
5279 if(ListType[ngoodmix-1][icc]==FairRootManager::Instance()->GetBranchId(
fMvdPixelBranch)) {
5280 cout<<
"\tUS Pixel hit n. "<<List[ngoodmix-1][icc]<<endl;
5281 }
else if(ListType[ngoodmix-1][icc]==
5283 cout<<
"\tUS Strip hit n. "<<List[ngoodmix-1][icc]<<endl;
5285 cout<<
"\tNoise (?) , hit tipo "<<ListType[ngoodmix-1][icc]<<endl;
5300 if(
istampa>=3 ){cout<<
"from PndTrkTracking2 : appena prima arbitration, IVOLTE = "<<
5301 IVOLTE<<
", Stt track cand = "<<i<<
", ngoodmix = "<<ngoodmix<<endl;}
5306 }
else if( ngoodmix>1) {
5309 oldtotal2 = DIST[0];
5310 oldN = nHighQuality[0];
5312 if(
istampa>=3 ){cout<<
"from PndTrkTracking2 : goodmix n. 0, total distance (che e' = total distance2) = "<<oldtotal
5313 <<
", e nHighQuality = "<<nHighQuality[0]<<endl;}
5316 for(j1=1; j1<ngoodmix;j1++){
5318 if(
istampa>=3){cout<<
"from PndTrkTracking2 :\t goodmix n. "<<j1<<
", total distance "<<total
5319 <<
", e nHighQuality = "<<nHighQuality[j1]<<endl;}
5320 if(oldN<nHighQuality[j1]){
5321 oldN=nHighQuality[j1];
5323 }
else if (oldN==nHighQuality[j1]){
5324 if(total<oldtotal2){
5336 if(
istampa>=3 ){cout<<
"from PndTrkTracking2 : fine arbitration, IVOLTE = "<<
5337 IVOLTE<<
", Stt track cand = "<<i<<endl;}
5343 nPixelHitsinTrack[
i]=0;
5344 nStripHitsinTrack[
i]=0;
5346 chosenmix=chosenmix2;
5347 for(j=0;j<nn[chosenmix];j++){
5348 if( ListType[chosenmix][j]==
5350 ListPixelHitsinTrack[
i]
5351 [nPixelHitsinTrack[
i]]=List[chosenmix][j];
5352 nPixelHitsinTrack[
i]++;
5354 ListType[chosenmix][j]==
5356 ListStripHitsinTrack[
i]
5357 [nStripHitsinTrack[
i]]=List[chosenmix][j];
5358 nStripHitsinTrack[
i]++;
5402 if(!keepit[ncand])
return;
5409 fnMvdStripHitsinTrack[ncand] >0){
5412 XY[
i][1] =
fYMvdPixel[ fListMvdPixelHitsinTrack[ncand][
i] ];
5413 ListHits[
i] = fListMvdPixelHitsinTrack[ncand][
i];
5415 for(i=0; i< fnMvdStripHitsinTrack[ncand]; i++){
5416 XY[i+fnMvdPixelHitsinTrack[ncand]][0] =
5418 XY[i+fnMvdPixelHitsinTrack[ncand]][1] =
5422 ListHits[i+fnMvdPixelHitsinTrack[ncand]] =
5423 fListMvdStripHitsinTrack[ncand][
i]+
5431 &Trajectory_Start[ncand][0],
5432 fnMvdPixelHitsinTrack[ncand]+fnMvdStripHitsinTrack[ncand],
5438 for(i=0; i< fnMvdPixelHitsinTrack[ncand]+
5439 fnMvdStripHitsinTrack[ncand]; i++){
5461 XY2[
i][1] = info[ fListSttParHitsinTrack[ncand][
i] ][1];
5462 ListHits2[
i] = fListSttParHitsinTrack[ncand][
i];
5468 j = i+fnSttParHitsinTrack[ncand];
5469 XY2[j][0] =
fOx[ncand]+
fR[ncand]*
5471 XY2[j][1] =
fOy[ncand]+
fR[ncand]*
5484 &Trajectory_Start[ncand][0],
5485 fnSttParHitsinTrack[ncand]+fnSttSkewHitsinTrack[ncand],
5491 for(j=0,ipar=0,iskew=0;
5492 j< fnSttParHitsinTrack[ncand]+fnSttSkewHitsinTrack[ncand];j++){
5494 if(ListHits2[j]<MAXSTTHITS*10){
5512 cout<<
"from PndTrkTracking2, hit n. "<<
fListTrackCandHit[ncand][ica]<<
", hit type "
5530 Short_t FirstCandidate,
5531 Short_t LastCandidate,
5541 for(ncand=FirstCandidate; ncand< LastCandidate; ncand++){
5591 if(!keepit[ncand])
return;
5596 fnMvdStripHitsinTrack[ncand] ],
5598 fnMvdStripHitsinTrack[ncand] ];
5600 fnMvdStripHitsinTrack[ncand] ];
5602 fnMvdStripHitsinTrack[ncand] ];
5610 tempmvdindex[
i]=fListMvdPixelHitsinTrack[ncand][
i];
5614 for(i=0; i< fnMvdStripHitsinTrack[ncand]; i++){
5615 auxR[i+fnMvdPixelHitsinTrack[ncand]] =
5620 tempmvdindex[i+fnMvdPixelHitsinTrack[ncand]]=
5621 fListMvdStripHitsinTrack[ncand][
i];
5622 tempmvdtype[i+fnMvdPixelHitsinTrack[ncand]]=1;
5623 auxIndex[i+fnMvdPixelHitsinTrack[ncand]]=
5624 i+fnMvdPixelHitsinTrack[ncand];
5628 if( fnMvdPixelHitsinTrack[ncand]+
5629 fnMvdStripHitsinTrack[ncand] >0){
5630 MergeSort.
Merge_Sort( fnMvdPixelHitsinTrack[ncand]+
5631 fnMvdStripHitsinTrack[ncand],
5635 for(i=0; i< fnMvdPixelHitsinTrack[ncand]+
5636 fnMvdStripHitsinTrack[ncand]; i++){
5648 fnSttSkewHitsinTrack[ncand] ];
5650 fnSttSkewHitsinTrack[ncand] ];
5652 fnSttSkewHitsinTrack[ncand] ];
5660 tempmvdindex2[
i]=fListSttParHitsinTrack[ncand][
i];
5664 for(i=0; i<fnSttSkewHitsinTrack[ncand]; i++){
5665 j = i+fnSttParHitsinTrack[ncand];
5671 tempmvdindex2[j]=fListSttSkewHitsinTrack[ncand][
i];
5678 if( fnSttParHitsinTrack[ncand]+fnSttSkewHitsinTrack[ncand] >0){
5679 MergeSort.
Merge_Sort( fnSttParHitsinTrack[ncand]+fnSttSkewHitsinTrack[ncand],
5682 for(j=0,ipar=0,iskew=0;
5683 j< fnSttParHitsinTrack[ncand]+fnSttSkewHitsinTrack[ncand];j++){
5684 i = j+fnMvdPixelHitsinTrack[ncand]+
5685 fnMvdStripHitsinTrack[ncand];
5718 Short_t *ListSkewHits,
5724 Short_t *ListParHits,
5735 tmp[nSkewhit+nParHits],
5738 Int_t index[nSkewhit+nParHits];
5743 aux[nSkewhit+nParHits];
5762 aaa =
atan2( oY, oX);
5770 if( (aaa>b1&&aaa<3.*b1 ) || (aaa>-3.*b1&&aaa<-b1)){
5771 if( (aaa>b1&&aaa<3.*b1 && Charge == -1)||( aaa>-3.*b1&&aaa<-b1 && Charge == 1) )
5780 for (j = 0 ; j< nParHits; j++){
5783 for (j = 0; j< nSkewhit; j++){
5785 aux[j+nParHits]=sign*(oX + Rr*
cos(SList[ListSkewHits[j]]))/
5786 (oX*oX+oY*oY+Rr*Rr + 2.*Rr*
5787 (oX*
cos(SList[ListSkewHits[j]])
5788 +oY*
sin(SList[ListSkewHits[j]])));
5795 if( ((aaa<=-3.*b1|| aaa>=3.*b1) && Charge == -1)
5796 || ( -b1 <= aaa && aaa <= b1 && Charge == 1) ){
5801 for (j = 0 ; j< nParHits; j++){
5804 for (j = 0; j< nSkewhit; j++){
5806 aux[j+nParHits]=sign*(oY + Rr*
sin(SList[ListSkewHits[j]]))/
5807 (oX*oX+oY*oY+Rr*Rr + 2.*Rr*
5808 (oX*
cos(SList[ListSkewHits[j]])
5809 +oY*
sin(SList[ListSkewHits[j]])));
5816 for (j = 0 ; j< nParHits; j++){
5817 BigList[j]=ListParHits[j];
5820 for (j = 0; j< nSkewhit; j++){
5821 BigList[j+nParHits]=ListSkewHits[j];
5822 index[j+nParHits] = j+nParHits;
5825 MergeSort.
Merge_Sort( nSkewhit+nParHits, aux, index);
5828 for(i=0, j=0;i<nSkewhit+nParHits;i++){
5829 tmp[
i]=BigList[index[
i]];
5831 if( index[i] >= nParHits ){
5832 tmpList[j] = ListSkewHits[index[
i]-nParHits];
5836 for(i=0;i<nSkewhit+nParHits;i++){
5840 for(i=0;i<nSkewhit;i++){
5841 ListSkewHits[
i]= tmpList[
i];
5895 aaa =
atan2( oY-Traj_Sta[1], oX-Traj_Sta[0]);
5902 if((aaa>b1&&aaa<3.*b1) || (aaa>-3.*b1&&aaa<-b1)){
5904 for (j = 0; j<
nHits; j++){
5905 bbb = XY[j][0]-Traj_Sta[0];
5906 ccc = XY[j][1]-Traj_Sta[1];
5907 U[j]= bbb/(bbb*bbb+ccc*
ccc);
5911 if((aaa>b1&&aaa<3.*b1)){
5914 for(i=0;i<
nHits;i++){
5915 tmp[
i]=ListHits[nHits-1-
i];
5917 for(i=0;i<
nHits;i++){
5924 for(i=0;i<
nHits;i++){
5925 tmp[
i]=ListHits[nHits-1-
i];
5927 for(i=0;i<
nHits;i++){
5934 for (j = 0; j<
nHits; j++){
5935 bbb = XY[j][0]-Traj_Sta[0];
5936 ccc = XY[j][1]-Traj_Sta[1];
5937 V[j]= ccc/(bbb*bbb+ccc*
ccc);
5941 if((aaa<=-3.*b1 || aaa>=3.*b1)){
5944 for(i=0;i<
nHits;i++){
5945 tmp[
i]=ListHits[nHits-1-
i];
5947 for(i=0;i<
nHits;i++){
5954 for(i=0;i<
nHits;i++){
5955 tmp[
i]=ListHits[nHits-1-
i];
5957 for(i=0;i<
nHits;i++){
5978 Short_t *ListCandHit,
5979 Short_t *ListCandHitType,
6021 for(i=0, iparallel=0; i<nCandHit && iparallel<
MAXHITSINFIT; i++){
6025 if(i==iexcl)
continue;
6026 if( ListCandHitType[i] == 0 ){
6035 if(dist2<mindis)
continue;
6039 gamma = dist2 - ErrorMvd*ErrorMvd;
6042 Xconformal[iparallel] = (
fXMvdPixel[ListCandHit[
i]]-tv[0])/gamma;
6043 Yconformal[iparallel] = (
fYMvdPixel[ListCandHit[
i]]-tv[1])/gamma;
6044 DriftRadiusconformal[iparallel]=-1.;
6045 ErrorDriftRadiusconformal[iparallel]=factor*ErrorMvd/
fabs(gamma);
6047 }
else if ( ListCandHitType[i] == 1 ){
6055 if(dist2<mindis)
continue;
6059 gamma = dist2 - ErrorMvd*ErrorMvd;
6062 Xconformal[iparallel] = (
fXMvdStrip[ListCandHit[
i]]-tv[0])/gamma;
6063 Yconformal[iparallel] = (
fYMvdStrip[ListCandHit[
i]]-tv[1])/gamma;
6064 DriftRadiusconformal[iparallel]=-1.;
6065 ErrorDriftRadiusconformal[iparallel]=factor* ErrorMvd/
fabs(gamma);
6067 }
else if ( ListCandHitType[i] == 2 ){
6070 dist2 = (info[ListCandHit[
i]][0]-tv[0])*
6071 (info[ListCandHit[i]][0]-tv[0])+
6072 (info[ListCandHit[
i]][1]-tv[1])*
6073 (info[ListCandHit[i]][1]-tv[1]);
6077 if(dist2<mindis)
continue;
6079 info[ListCandHit[
i]][3]*
6080 info[ListCandHit[
i]][3];
6081 Xconformal[iparallel] = (info[ListCandHit[
i]][0]-tv[0])/gamma;
6082 Yconformal[iparallel] = (info[ListCandHit[
i]][1]-tv[1])/gamma;
6083 DriftRadiusconformal[iparallel]=info[ListCandHit[
i]][3]/
fabs(gamma);
6084 ErrorDriftRadiusconformal[iparallel]=factor*ErrorStraw/
fabs(gamma);
6090 if( nCandHit < 2)
return;
6096 DriftRadiusconformal,
6097 ErrorDriftRadiusconformal,
6115 if( exitstatus > 0 && Type) *status=
true;
Short_t * nMvdPixelCommon
const Double_t RSTRAWDETECTORMAX
Short_t * nSttSkewHitsinTrack
bool fInclusionListSciTil[MAXSCITILHITS]
virtual void Exec(Option_t *opt)
void CategorizeStt(const Short_t NUMBER_STRAWS, TClonesArray *SttTubeArray, Short_t &nAxialOuterRight, Short_t &nAxialInnerRight, Short_t &nAxialOuterLeft, Short_t &nAxialInnerLeft, Short_t *ListAxialOuterRight, Short_t *ListAxialInnerRight, Short_t *ListAxialOuterLeft, Short_t *ListAxialInnerLeft, Short_t &nSkewRight, Short_t &nSkewLeft, Short_t *ListSkewRight, Short_t *ListSkewLeft)
TClonesArray * fSciTHitArray
friend F32vec4 cos(const F32vec4 &a)
Double_t fS_SciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITS]
Short_t * nMCMvdStripAlone
Double_t fYMvdStrip[MAXMVDSTRIPHITS]
void SetRefIndex(TString branch, Int_t i)
Short_t fListAxialInnerLeft[NUMBER_STRAWS]
Double_t fXMvdStrip[MAXMVDSTRIPHITS]
Double_t fxxyyTube[NUMBER_STRAWS]
bool fTypeConf[MAXTRACKSPEREVENT]
void InfoXYZParal(Double_t info[][7], Short_t infopar, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
TClonesArray * fSttTrackArray
Short_t * MvdPixelSpuriList
Short_t fListSttParHits[MAXSTTHITS]
Short_t fTubeID[MAXSTTHITS]
void stampetta(int IVOLTE, bool *keepit, Short_t *ListMvdPixelHitsinTrack, Short_t *ListMvdStripHitsinTrack, Short_t *ListSttParHitsinTrack, Short_t *ListSttSkewHitsinTrack, Short_t *ListSciTilHitsinTrack, Short_t *nMvdPixelHitsinTrack, Short_t *nMvdStripHitsinTrack, Short_t *nSttParHitsinTrack, Short_t *nSttSkewHitsinTrack, Short_t *nSciTilHitsinTrack, Short_t nTotalCand, Short_t Cand, int maxmvdpixelhitsintrack, int maxmvdstriphitsintrack, int maxscitilhitsintrack, int maxstthitsintrack, Double_t *R, Double_t *Ox, Double_t *Oy, Double_t *FI0, Double_t *KAPPA)
Short_t fListMvdDSPixelHitNotTrackCand[MAXMVDPIXELHITS]
Short_t fListSttSkewHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK]
Short_t * nMvdStripSpuriinTrack
Double_t fsigmaYMvdStrip[MAXMVDSTRIPHITS]
Double_t fOy[MAXTRACKSPEREVENT]
TVector3 GetPosition() const
Double_t * refindexMvdPixel
Short_t * nSpuriParinTrack
TClonesArray * fSttMvdPndTrackCandArray
Double_t fZMvdStrip[MAXMVDSTRIPHITS]
void OrderingUsingConformal(Double_t oX, Double_t oY, Double_t Traj_Sta[2], Int_t nHits, Double_t XY[][2], Short_t Charge, Int_t *ListHits)
Short_t fListMvdStripHitsinTrack[MAXTRACKSPEREVENT][MAXMVDSTRIPHITSINTRACK]
Double_t fsigmaZMvdStrip[MAXMVDSTRIPHITS]
void GetClusters(bool *InclusionListStt, Short_t ListParContiguous[][6], Short_t *ListSttParHits, Short_t *nParContiguous, Short_t nSttParHit, const Short_t MAXFOUNDCLUSTERS, const Short_t MAXHITSINCLUSTER, const Short_t MAXSTTHITS, const Short_t NUMBER_STRAWS, Short_t *StrawCode, Short_t *StrawCode2, Short_t *SttStrawOn, TClonesArray *SttTubeArray, Short_t *TubeID, Short_t *ListHitsinCluster, Short_t &nFoundClusters, Short_t *nHitsinCluster)
Short_t * MvdPixelCommonList
Double_t fMCSkewAloneY[MAXSTTHITS]
Short_t * nSkewHitsInMCTrack
Short_t fnMvdUSStripHitNotTrackCand
friend F32vec4 sqrt(const F32vec4 &a)
void MatchMvdHitsToSttTracksagain(Vec< bool > &keepit, Vec< bool > &Mvdhits, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Vec< Short_t > &CHARGE, Short_t *nPixelHitsinTrack, Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], Short_t *nStripHitsinTrack, Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK])
Short_t * ListSttSkewHitsinTrack
Double_t fCandidatePixelDriftRadius[MAXMVDPIXELHITS]
Double_t fCandidateStripZ[MAXMVDSTRIPHITS]
Short_t CompareTracks(Short_t first_track, Short_t second_track)
Short_t fnSciTilHitsinTrack[MAXTRACKSPEREVENT]
static const Short_t LEGIANDRE_NRADIUSDIV
void CalculateSandZ(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2])
void Initial_SttParHits_DecreasingR_Ordering(Double_t info[][7], Short_t *ListSttParHi, Int_t nSttParHit)
Short_t * nMvdStripHitsinTrack
Double_t fsigmaXMvdStrip[MAXMVDSTRIPHITS]
Short_t fMCtrack_of_Strip[MAXMVDSTRIPHITS]
friend F32vec4 sin(const F32vec4 &a)
Short_t fListAxialInnerRight[NUMBER_STRAWS]
Double_t fposizSciTil[MAXSCITILHITS][3]
Short_t * ListTrackCandHit
Short_t * nMvdStripCommon
Short_t * MvdStripSpuriList
void GetVolumeCharacteristics(TGeoVolume *tgeovol, TGeoHMatrix *mat, Double_t GlobalScal[3], Double_t GlobalTrans[3], Double_t GlobalRot[9])
Double_t fMCtruthTrkInfo[15][MAXMCTRACKS]
TClonesArray * fSttMvdPndTrackArray
const int MINOUTERHITSPERTRACK
Short_t * MvdStripCommonList
Double_t fsigmaZMvdPixel[MAXMVDPIXELHITS]
const int MINIMUMMVDHITSPERTRACK
Short_t fListHitTypeMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK]
Double_t fpSciTilx[MAXSCITILHITS]
Double_t fALFA[MAXTRACKSPEREVENT]
void SetPersistency(Bool_t val=kTRUE)
Short_t fListSkewLeft[NUMBER_STRAWS]
TClonesArray * fSciTHitArray
TClonesArray * fSciTPointArray
void WriteAllMacros(PndTrkPlotMacros2_InputData In_Put)
Double_t fCandidateSciTilDriftRadius
Double_t fpSciTily[MAXSCITILHITS]
const Double_t APOTEMAMINSKEWSTRAW
static const Short_t MAXMCTRACKS
Short_t fnSttSkewHitsinTrack[MAXTRACKSPEREVENT]
Short_t * SciTilSpuriList
TVector3 GetPosition() const
Double_t fOx[MAXTRACKSPEREVENT]
TGeoManager * gGeoManager
void RefitMvdStt(Short_t nCandHit, Short_t *fListTrackCandHit, Short_t *fListTrackCandHitType, Double_t info[][7], Double_t rotationangle, Double_t trajectory_vertex[2], Short_t iexcl, Double_t *pAlfa, Double_t *pBeta, Double_t *pGamma, bool *status)
Short_t fListTrackCandHit[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK+MAXSCITILHITSINTRACK]
void CalculateSinandCosin()
void OrderingR_Loading_ListTrackCandHit(bool *keepit, Short_t ncand, Double_t info[][7])
Short_t FitHelixCylinder(Short_t nHitsinTrack, Double_t *Xconformal, Double_t *Yconformal, Double_t *DriftRadiusconformal, Double_t *ErrorDriftRadiusconformal, Double_t rotationangle, Double_t trajectory_vertex[2], Short_t NMAX, Double_t *m, Double_t *q, Double_t *pAlfa, Double_t *pBeta, Double_t *pGamma, bool *Type, int istampa, int IVOLTE)
Short_t fListMvdUSPixelHitNotTrackCand[MAXMVDPIXELHITS]
Short_t fnSttParHitsinTrack[MAXTRACKSPEREVENT]
static void error(int no)
Short_t fListSkewRight[NUMBER_STRAWS]
Short_t fStrawCode2[NUMBER_STRAWS]
Double_t fCosine[LEGIANDRE_NTHETADIV]
bool EliminateClones(Short_t nTotalCandidates, Double_t fraction, bool *keepit)
Double_t fCandidateSciTilS
Double_t Dist_SZ_bis(Double_t Rr, Double_t KAPPA, Double_t FI0, Double_t ZED, Double_t S, Short_t n_allowed_rounds, Double_t signPz, Double_t &chosenS)
Short_t fListMvdUSStripHitNotTrackCand[MAXMVDSTRIPHITS]
Double_t fCxMC[MAXMCTRACKS]
Double_t fR_MC[MAXMCTRACKS]
bool finMvdTrackCandPixel[MAXMVDPIXELHITS]
void stampaSttHits2(Short_t iHit, Short_t ipunto, Double_t dradius, Double_t *WDX, Double_t *WDY, Double_t *WDZ, FairMCPoint *puntator, PndSttTube *pSttTube, Short_t tubeID)
static const Short_t MAXSCITILHITSINTRACK
void Initialization_ClassVariables()
Short_t fListTrackCandHitType[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK+MAXSCITILHITSINTRACK]
static const Short_t MAXMVDPIXELHITSINTRACK
bool finMvdTrackCandStrip[MAXMVDSTRIPHITS]
Double_t fMCSkewAloneX[MAXSTTHITS]
Double_t fsigmaYMvdPixel[MAXMVDPIXELHITS]
TClonesArray * fSttTubeArray
const Double_t STRAW_SKEW_INCLINATION
Short_t fnParContiguous[NUMBER_STRAWS]
Short_t * MCSciTilAloneList
Short_t * SciTilCommonList
Short_t FitSZspace_Chi2_AnnealingtheMvdOnly(Short_t nHitsinTrack, Double_t *S, Double_t *Z, Double_t *DriftRadius, Double_t *ErrorDriftRadius, Double_t FInot, Short_t NMAX, Double_t *emme, int IVOLTE)
int ComparisonwithMC(PndTrkComparisonMCtruth_io_Data ioData)
Short_t fnMvdDSPixelHitNotTrackCand
char fMvdPixelBranch[200]
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
Double_t fXMvdPixel[MAXMVDPIXELHITS]
void Set(Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Short_t NUMBER_STRAWS, Double_t RSTRAWDETECTORMIN, Double_t RSTRAWDETECTORMAX, bool stampa, TClonesArray *SttTubeArray, Double_t STRAWRADIUS, Double_t VERTICALGAP, Short_t *StrawCode, Short_t *StrawCode2)
static const Short_t LEGIANDRE_NTHETADIV
const Double_t SEMILENGTH_STRAIGHT
Short_t fListMvdDSStripHitNotTrackCand[MAXMVDSTRIPHITS]
TClonesArray * fMvdPixelHitArray
void MatchMvdHitsToSttTracks(Vec< bool > &keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Vec< Short_t > &CHARGE, Short_t *nPixelHitsinTrack, Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], Short_t *nStripHitsinTrack, Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK])
Double_t GetIsochrone() const
bool FindTrackInXYProjection(struct FindTrackInXYProjection2_InputOutputData *InOut, int istampa, int IVOLTE)
Double_t fCandidateStripErrorDriftRadius[MAXMVDSTRIPHITS]
Short_t * MCMvdStripAloneList
TClonesArray * fSttTrackCandArray
const Double_t STRAWRADIUS
Double_t frefindexMvdPixel[MAXMVDPIXELHITS]
Double_t fCyMC[MAXMCTRACKS]
Double_t fsigmaXMvdPixel[MAXMVDPIXELHITS]
const Double_t ERRORSTRIP
Short_t fListHitMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK+MAXMVDSTRIPHITSINTRACK]
Short_t fnMvdDSStripHitNotTrackCand
const Double_t APOTEMAMINOUTERPARSTRAW
Double_t fxTube[NUMBER_STRAWS]
const int MAXFOUNDCLUSTERS
TClonesArray * fSttPointArray
Short_t fListParContiguous[NUMBER_STRAWS][6]
Short_t fListAxialOuterRight[NUMBER_STRAWS]
static const Short_t MAXSCITILHITS
bool fInclusionListStt[MAXSTTHITS]
void CollectParSttHitsagain(Vec< bool > &keepit, Vec< bool > &Mvdhits, Double_t info[][7], Short_t nSttParHit, Short_t StartTrackCand, Short_t EndTrackCand, Double_t *KAPPA, Double_t *FI0, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Short_t *fnSttParHitsinTrack, Short_t fListSttParHitsinTrack[][MAXSTTHITSINTRACK])
Double_t fCandidateStripDriftRadius[MAXMVDSTRIPHITS]
TClonesArray * fSttHitArray
TClonesArray * FillTubeArray()
static const Short_t MAXSTTHITSINTRACK
Short_t * ListMvdPixelHitsinTrack
Short_t * OriginalSciTilList
Double_t fBETA[MAXTRACKSPEREVENT]
Double_t fCandidateSciTilErrorDriftRadius
Double_t fCandidatePixelS[MAXMVDPIXELHITS]
Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack, Short_t SkewList[][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZError, Double_t KAPPA, Double_t FI0, Short_t *tempore, Double_t *temporeS, Double_t *temporeZ, Double_t *temporeZDrift, Double_t *temporeZError, Short_t *STATUS)
static const Short_t NUMBER_STRAWS
friend F32vec4 fabs(const F32vec4 &a)
static const Short_t MAXMVDPIXELHITS
Short_t fMCtrack_of_Pixel[MAXMVDPIXELHITS]
TClonesArray * fMvdMCPointArray
void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSkewHitsinTrack, Vec< Double_t > &S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge)
TClonesArray * fMCTrackArray
bool fSingleHitListStt[MAXSTTHITS]
static const Short_t MAXMVDSTRIPHITSINTRACK
void StoreSZ_MvdScitil(Short_t ncand)
const Double_t VERTICALGAP
void CalculateAdjacentStt2(const Short_t NUMBER_STRAWS, TClonesArray *SttTubeArray, Short_t *nParContiguous, Short_t ListParContiguous[][6], Double_t *x, Double_t *y, Double_t *z, Double_t *rxy2)
void Ordering_Loading_ListTrackCandHit(bool *keepit, Short_t FirstCandidate, Short_t LastCandidate, Double_t info[][7], Double_t Trajectory_Start[][2], Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS])
TClonesArray * fSttPointArray
void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge)
Short_t * MCMvdPixelAloneList
const int MAXSKEWHITSINFIT
void MakeInclusionListStt(Int_t nSttHit, Short_t *TubeID, Double_t info[][7])
Double_t fCandidatePixelErrorDriftRadius[MAXMVDPIXELHITS]
static const Double_t THETAMAX
Double_t fYMvdPixel[MAXMVDPIXELHITS]
void Merge_Sort(Short_t n_ele, Double_t *array, Int_t *ind)
const Double_t ERRORSQSTRIP
TClonesArray * fMvdMCPointArray
Short_t fnMvdUSPixelHitNotTrackCand
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Short_t fnHitMvdTrackCand[MAXMVDTRACKSPEREVENT]
Double_t fSinus[LEGIANDRE_NTHETADIV]
const int MAXHITSINCLUSTER
Short_t fStrawCode[NUMBER_STRAWS]
Short_t fListSciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK]
Short_t fnMvdPixelHitsinTrack[MAXTRACKSPEREVENT]
Short_t * nMvdPixelHitsinTrack
const Double_t APOTEMAMAXINNERPARSTRAW
Double_t fCandidateSkewS[2 *MAXSTTHITS]
const int MAXSTTHITSINTRACK
Short_t * nSciTilHitsinTrack
Short_t fListSttSkewHitsinTrackSolution[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK]
Short_t fListMvdPixelHitsinTrack[MAXTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK]
Short_t * ListSciTilHitsinTrack
TClonesArray * fMCTrackArray
Short_t * nSpuriSkewinTrack
Double_t fCandidateSkewZDrift[2 *MAXSTTHITS]
const Double_t ERRORSQPIXEL
void LoadPndTrack_TrackCand(bool *keepit, bool *SttSZfit, Short_t nTotalCandidates, Short_t *Charge, Int_t nSttTrackCand, Double_t *FI0, Double_t *KAPPA, Double_t info[][7], Double_t SchosenSkew[][MAXSTTHITS], Double_t ZchosenSkew[][MAXSTTHITS], Short_t *daTrackFoundaTrackMC)
virtual InitStatus Init()
Double_t fCandidateSkewZ[2 *MAXSTTHITS]
Short_t fnAxialInnerRight
Double_t fyTube[NUMBER_STRAWS]
void EliminateSpuriousSZ_ter(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew, Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip, Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr)
Double_t * refindexMvdStrip
Short_t fListAxialOuterLeft[NUMBER_STRAWS]
Short_t * ParalCommonList
Short_t * nSciTilSpuriinTrack
void LoadSZetc_forSZfit(Short_t ncand, Short_t nhitsinfit, Vec< Double_t > &ErrorDriftRadius, Double_t *ErrorDriftRadiusbis, Vec< Double_t > &DriftRadius, Double_t *DriftRadiusbis, Vec< Double_t > &S, Double_t *Sbis, Vec< Double_t > &ZED, Double_t *ZEDbis)
Double_t fZMvdPixel[MAXMVDPIXELHITS]
static const Short_t MAXTRACKSPEREVENT
Short_t * ListMvdStripHitsinTrack
TClonesArray * fMvdTrackCandArray
int MAXMVDPIXELHITSINTRACK
Double_t fGAMMA[MAXTRACKSPEREVENT]
const Double_t ERRORPIXEL
const int MINIMUMSTTMHITSPERTRACK
Short_t fListSttParHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK]
void OrderingConformal_Loading_ListTrackCandHit(bool *keepit, Short_t ncand, Double_t info[][7], Double_t Trajectory_Start[][2], Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS])
int MAXMVDSTRIPHITSINTRACK
Short_t AssociateSkewHitsToXYTrack(bool *InclusionListSkew, Short_t NSkewhits, Short_t *infoskew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge, Short_t SkewList[][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZError)
void MatchMvdHitsToSttTracks2(bool *keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Short_t *CHARGE, Short_t *nPixelHitsinTrack, Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], Short_t *nStripHitsinTrack, Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK])
Double_t fpSciTilz[MAXSCITILHITS]
Short_t * MCSkewAloneList
Short_t fnAxialOuterRight
Short_t * resultFitSZagain
const Double_t APOTEMAMAXSKEWSTRAW
TClonesArray * fSciTPointArray
Double_t fCandidateSkewZError[2 *MAXSTTHITS]
Short_t fnMvdStripHitsinTrack[MAXTRACKSPEREVENT]
Double_t fCandidateSciTilZ
Short_t fnTrackCandHit[MAXTRACKSPEREVENT]
static const Short_t NFIDIVCONFORMAL
void OrderingSttSkewandSttParallel(Double_t oX, Double_t oY, Double_t Rr, Short_t nSkewhit, Short_t *ListSkewHits, Double_t *SList, Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V, Short_t *BigList)
Short_t * ListTrackCandHitType
const Double_t APOTEMASTRAWDETECTORMIN
static const Short_t MAXMVDSTRIPHITS
Double_t fCandidatePixelZ[MAXMVDPIXELHITS]
Short_t * ListSttParHitsinTrack
Short_t fListSttSkewHits[MAXSTTHITS]
Double_t fR[MAXTRACKSPEREVENT]
Short_t * nMCMvdPixelAlone
bool TrackCleanup(Double_t ApotemaMaxInnerPar, Double_t ApotemaMaxSkew, Double_t ApotemaMinOuterPar, Double_t ApotemaMinSkew, Double_t *auxS, Short_t Charge, Double_t FI0, Double_t GAP, Double_t info[][7], int istampa, int IVOLTE, Double_t KAPPA, Short_t *ListHitsPar, Short_t *ListHitsSkew, int MAXSTTHITS, Short_t nHitsPar, Short_t nHitsSkew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t RStrawDetMax, Double_t RStrawDetMin, Double_t Start[3], Double_t Strawradius)
Short_t * nSttParHitsinTrack
Double_t fradiaConf[NRDIVCONFORMAL]
static const Double_t THETAMIN
TVector3 GetWireDirection()
static const Short_t NRDIVCONFORMAL
void stampaMvdHits2(char *fMvdPixelBranch, char *fMvdStripBranch, Short_t nMvdPixelHit, Short_t nMvdStripHit, Double_t *refindexMvdPixel, Double_t *refindexMvdStrip, Short_t *fMCtrack_of_Pixel, Short_t *fMCtrack_of_Strip, Double_t *sigmaXMvdPixel, Double_t *sigmaXMvdStrip, Double_t *sigmaYMvdPixel, Double_t *sigmaYMvdStrip, Double_t *sigmaZMvdPixel, Double_t *sigmaZMvdStrip, Double_t *XMvdPixel, Double_t *XMvdStrip, Double_t *YMvdPixel, Double_t *YMvdStrip, Double_t *ZMvdPixel, Double_t *ZMvdStrip)
char fMvdStripBranch[200]
Short_t * nMvdPixelSpuriinTrack
bool MvdCleanup(Double_t Ox, Double_t Oy, Double_t R, Double_t fi0, Double_t kappa, Double_t charge, Double_t *XMvdPixel, Double_t *XMvdStrip, Double_t *YMvdPixel, Double_t *YMvdStrip, Double_t *ZMvdPixel, Double_t *ZMvdStrip, Short_t nPixelHitsinTrack, Short_t *ListMvdPixelHitsinTrack, Short_t nStripHitsinTrack, Short_t *ListMvdStripHitsinTrack, Double_t extra_distance, Double_t extra_distance_Z, PndTrkCTGeometryCalculations *GeomCalculator)
const Double_t ZCENTER_STRAIGHT
TClonesArray * fMvdStripHitArray
Short_t * daTrackFoundaTrackMC
static const Short_t MAXSTTHITS
void EliminateSpuriousSZ_bis(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew, Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip, Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr)
static const Short_t MAXMVDTRACKSPEREVENT
PndGeoSttPar * fSttParameters
Short_t * MCParalAloneList
Double_t fCandidateStripS[MAXMVDSTRIPHITS]
const Double_t DIMENSIONSCITIL
Double_t frefindexMvdStrip[MAXMVDSTRIPHITS]
Double_t fzTube[NUMBER_STRAWS]