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]