20 #include "FairTrackParP.h" 
   21 #include "FairMCPoint.h" 
   22 #include "FairRootManager.h" 
   25 #include "TClonesArray.h" 
   26 #include "TDatabasePDG.h" 
  207         memset (
GAMMA,0,len);
 
  255           TFile* 
file = FairRootManager::Instance()->GetOutFile();
 
  257           file->mkdir(
"PndSttTrackFinderReal");
 
  258           file->cd(
"PndSttTrackFinderReal");
 
  289    HANDLE2 = fopen(
"info_da_PndTrackFinderReal.txt",
"w");
 
  292    HANDLE = fopen(
"statistichePndTrackFinderReal.txt",
"w");
 
  298    PHANDLEX = fopen(
"deltaParXmio.txt",
"w");
 
  299    PHANDLEY = fopen(
"deltaParYmio.txt",
"w");
 
  300    PHANDLEZ = fopen(
"deltaParZmio.txt",
"w");
 
  301    SHANDLEX = fopen(
"deltaSkewXmio.txt",
"w");
 
  302    SHANDLEY = fopen(
"deltaSkewYmio.txt",
"w");
 
  303    SHANDLEZ = fopen(
"deltaSkewZmio.txt",
"w");
 
  318   FairRootManager* ioman = FairRootManager::Instance();
 
  321       cout << 
"-E- PndSttTrackFinderReal::Init: " 
  322            << 
"RootManager not instantiated, return!" << endl;
 
  348   hdist = 
new TH1F(
"hdist", 
"distance (cm)", 20, 0., 10.);
 
  349   hdistgoodlast = 
new TH1F(
"hDistanceTrulyInnerLast", 
"distance (cm)", 20, 0., 10.);
 
  350   hdistbadlast = 
new TH1F(
"hDistanceNonLastInner", 
"distance (cm)", 20, 0., 10.);
 
  384         relativeCounter = hitCounter;
 
  386     for (Int_t collectionCounter = 0; collectionCounter < 
fHitCollectionList.GetEntries(); collectionCounter++)
 
  391         if (relativeCounter < size)
 
  398             relativeCounter -= size;
 
  416         relativeCounter = hitCounter;
 
  418     for (Int_t collectionCounter = 0; collectionCounter < 
fHitCollectionList.GetEntries(); collectionCounter++)
 
  423         if (relativeCounter < size)
 
  434             relativeCounter -= size;
 
  453    Int_t  
i, j, iaccept, ii,
jj,k,kk,n1,n2,n3,
 
  454           i1,j1,k1,imaxima, jmaxima,
 
  455           iofmax, jofmax, kofmax,
 
  457           Ncirc, nSkew1, nSkew2,
 
  458           n_K, n_FI0, n_R, n_D, n_Fi,STATUS,
 
  459           Nremaining, Nremaining2,
 
  462           nAssociatedParallelHits ;
 
  481  Double_t aaa, ddd, delta, deltabis, deltaZ, mindis, distanza, fi_hit,
 
  482               ap1, ap2, ap3, carica, cross1, cross2, cross3,
 
  494     inclination[0][0]=inclination[0][1]=0.,    inclination[0][2]=1.;
 
  495     Int_t Nincl = 1, Ninclinate, iHit;
 
  528         TemporarynSttSkewhitinTrack,
 
  561    int   iimax,jjmax,  ncount;
 
  564    Double_t angle, Distance, max1, HoughR, HoughD, HoughFi, HoughKAPPA, HoughFI0,
 
  566               tempR, tempD,tempFi,tempKAPPA,tempFI0,
 
  567               Rlow, Rup, Dlow, Dup,Filow,Fiup, KAPPAlow, KAPPAup, FI0low, FI0up,
 
  583                trajectory_vertex[3],
 
  631    char nomef[100], nome[30],titolo[100];
 
  640          cout<<
"\nEntering in PndSttTrackFinderReal : evt (starting from 0)  n. "<<
IVOLTE<<endl;
 
  648       cout << 
"-E- PndSttTrackFinderReal::DoFind: " 
  649         << 
"No hit arrays present, call AddHitCollection() first (at least once), return -1! " 
  656       cout << 
"-E- PndSttTrackFinderReal::DoFind: " 
  657         << 
"No point arrays present, call AddHitCollection() first (at least once), return -1! " 
  662   if ( !trackCandArray ) 
 
  664       cout << 
"-E- PndSttTrackFinderReal::DoFind: " 
  665            << 
"Track array missing, return -1!" << endl;
 
  672                 cout<<
"da PndSttTrackFinderReal  :  N. di MC truth tracks = 0, return -1!\n" 
  676                 cout<<
"da PndSttTrackFinderReal  :  N. di MC truth tracks = "<<
nMCTracks 
  677                 <<
" and it is > MAXMCTRACKS = "<<
MAXMCTRACKS<<
", setting it equal to MAXMCTRACKS.\n";
 
  688   for (Int_t hitListCounter = 0; hitListCounter < 
fHitCollectionList.GetEntries(); hitListCounter++)
 
  694     cout<<
"from PndSttTrackFinderReal :  # Stt hits (|| + //) = "<<Nhits
 
  695     <<
" and it is < MINIMUMHITSPERTRACK = " 
  702         cout<<
"da PndSttTrackFinderReal  :  N. di Stt Hits = "<<Nhits
 
  703              <<
" and it is > nmaxHits (="<<
nmaxHits 
  704              <<
"), therefore consider only the first "<<
nmaxHits<<
" hits\n"<<endl;
 
  719    <<
" SciTil hits presenti inizialmente.\n";
 
  729 if(
istampa>0)cout<<
"da PndSttTrackFinderReal, evt "<<
IVOLTE<<
 
  730         ",  SciTil non purgati, Xpos "<<posiz.X()<<
", Ypos "<<
 
  731                 posiz.Y()<<
", Zpos "<<posiz.Z()<<endl;
 
  743 if(
istampa>0)cout<<
"da PndSttTrackFinderReal, evt. "<<
IVOLTE<<
",  SciTil non purgati, Xpos " 
  744                         <<posiz.X()<<
", Ypos "<<
 
  745                 posiz.Y()<<
", Zpos "<<posiz.Z()<<endl;
 
  750             for(k=0; k<iaccept; k++){
 
  779   cout<<
"da PndSttTrackFinderReal, dopo purga di SciTil; evt. "<<
IVOLTE 
  782         cout<<
"da PndSttTrackFinderReal, evt. "<<
IVOLTE<<
 
  798   Int_t nNoSttPoint  = 0;
 
  803   FairMCPoint*      pMCpt = NULL;
 
  808   Int_t trackIndex   = 0;     
 
  811   map<Int_t, map<Double_t, Int_t> >
 
  823   if (
istampa >= 1 ) cout<<
"Gianluigi : da PndSttTrackFinderReal::DoFind : Nhits="<<Nhits<<endl;
 
  831   for (iHit = 0; iHit < Nhits; iHit++) 
 
  835       ListPointer_to_Hit[iHit]=pMhit;
 
  837        cout<<
"from PndSttTrackFinderReal :  # Stt hits pointer missing, skip this hit!\n";
 
  842       Int_t ptIndex = pMhit->GetRefIndex();
 
  865       if(wiredirection.Z() >=0.) {
 
  866        WDX = wiredirection.X();     WDY = wiredirection.Y(); WDZ = wiredirection.Z();
 
  868        WDX = -wiredirection.X();     WDY = -wiredirection.Y(); WDZ = -wiredirection.Z();
 
  878       info[iHit][3]= dradius;
 
  881                 info[iHit][6]= pMCpt->GetTrackID();
 
  886       if( 
fabs( WDX )< 0.00001 && 
fabs( WDY )< 0.00001 ){
 
  894        for (i=2; i<=Nincl;i++) {
 
  895         if (
fabs( WDX-inclination[i-1][0] )< 0.00001
 
  897             fabs( WDY -inclination[i-1][1])< 0.00001
 
  899             fabs( WDZ -inclination[i-1][2])< 0.00001
 
  904           Minclinations[i-1]++;
 
  911         inclination[Nincl-1][0]=(
Double_t) WDX;
 
  912         inclination[Nincl-1][1]=(
Double_t) WDY;
 
  913         inclination[Nincl-1][2]=(
Double_t) WDZ;
 
  914         info[iHit][5]= Nincl;
 
  917         Minclinations[Nincl-1]++;
 
  937      cout <<
"iHit "<< iHit << endl;
 
  939 cout<<
"from PndSttTrackFinderReal...this hit must be noise (RefIndex = "<<ptIndex
 
  940         <<
" )\n\t\t\tnot associate to any MC Track\n";
 
  943       cout <<
"             MC point X, Y, Z space position "   << 
veritaMC[iHit][0] << 
" " <<
 
  948       cout <<
"             wire direction, X, Y, Z (Z direction set always positive)" 
  949         << WDX<<
"  "<<WDY<<
"  "<<WDZ <<endl;
 
  966       cout<<
"Gianluigi : da PndSttTrackFinderReal::DoFind : Nhits totali =" 
  967       <<Nhits<<
",  n Hits ||  = "<<Minclinations[0]<<
 
  977     for (j = 0; j< Minclinations[0]; j++){
 
  984       OLDinfoparal[j]=infoparal[j];
 
  988     Merge_Sort( Minclinations[0], auxRvalues, auxIndex);
 
  989     for (j = 0; j< Minclinations[0]; j++){
 
  990       infoparal[ Minclinations[0]-1-j]  =  OLDinfoparal[ auxIndex[ j ]   ];
 
  996      cout<< 
"from PndSttTrackFinderReal :  # Stt || hits = "<< Minclinations[0]
 
 1002        for(i=0; i< Minclinations[0]; i++){
 
 1004          InclusionListbis[   infoparal[
i]   ]= true ;
 
 1007          InclusionListSkew[   
infoskew[
i]   ]= true ;
 
 1008          InclusionListSkewbis[   infoskew[
i]   ]= true ;
 
 1018       for(i=0; i< Nhits-1; i++){
 
 1019         if( info[i][5]==1.){
 
 1020                 if( InclusionList[ i ] ){
 
 1021                         for(j=i+1; j< Nhits; j++){
 
 1022                                 if(InclusionList[ j ] && info[j][5]==1. &&
 
 1023                                         fabs(info[i][0] - info[j][0])<1.e-20 &&
 
 1024                                         fabs(info[i][1] - info[j][1])<1.e-20  )
 
 1026                                         InclusionList[j]= false ;
 
 1027                                         InclusionListbis[j]= false ;
 
 1033                 if( InclusionListSkew[ i ] ){
 
 1034                         for(j=i+1; j< Nhits; j++){
 
 1035                                 if(InclusionListSkew[ j ] && info[j][5] != 1. &&
 
 1036                                         fabs(info[i][0] - info[j][0])<1.e-20 &&
 
 1037                                         fabs(info[i][1] - info[j][1])<1.e-20  )
 
 1039                                         InclusionListSkew[j]= false ;
 
 1040                                         InclusionListSkewbis[j]= false ;
 
 1057  trajectory_vertex[0]=trajectory_vertex[1]=trajectory_vertex[2]=0.;
 
 1084   nTracksFoundSoFar=0;    
 
 1095         if ( Fi < 0. ) Fi += 2.*
PI;
 
 1099          } 
else if (nFicell<0) {
 
 1126                                  Fi_initial_helix_referenceframe,
 
 1127                                  Fi_final_helix_referenceframe,
 
 1129                                  &U[nTracksFoundSoFar][0],
 
 1130                                  &V[nTracksFoundSoFar][0]
 
 1135         for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
 1136           InclusionList[
infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]] = 
false;
 
 1142         cout<<
"PndTrackFinderReal, evt. "<<
IVOLTE<<
 
 1143         ", cand. "<<nTracksFoundSoFar<<
 
 1144         ", partendo da SciTil, traccia n. "<<nTracksFoundSoFar<<
",n SciTilhitsintrack  "<<
 
 1146         for(j=0; j<nSciTilHitsinTrack[nTracksFoundSoFar]; j++){
 
 1147                 cout<<
"\t hit || n. "<<
 
 1151         cout<<
"\t\tora stampa hit || :\n";
 
 1152         for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
 1153                 cout<<
"\t hit || n. "<<
 
 1154           infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]<<endl;
 
 1159         nTracksFoundSoFar++;
 
 1162 cout<<
"from PndSttTrackFinderReal :  # n. Tracks found so far = "<<nTracksFoundSoFar
 
 1164                  <<
"; rejecting this event and returning -15!\n";
 
 1185         if( ! InclusionList[    
infoparal[iParHit]  ] )  
continue;
 
 1187         nRcell = RConformalIndex[ 
infoparal[iParHit] ];
 
 1188         nFicell = FiConformalIndex[infoparal[iParHit]];
 
 1214                                  Fi_initial_helix_referenceframe,
 
 1215                                  Fi_final_helix_referenceframe,
 
 1217                                  &U[nTracksFoundSoFar][0],
 
 1218                                  &V[nTracksFoundSoFar][0]
 
 1221         if(!outcome)  
continue;
 
 1225  for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
 1226    InclusionList[infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]] = 
false;
 
 1230         cout<<
"PndTrackFinderReal, evt. "<<
IVOLTE<<
 
 1231         ", cand. "<<nTracksFoundSoFar<<
 
 1232         ", partendo da Stt || hits, traccia n. "<<nTracksFoundSoFar<<
",n SciTilhitsintrack  "<<
 
 1234         for(j=0; j<nSciTilHitsinTrack[nTracksFoundSoFar]; j++){
 
 1235                 cout<<
"\t hit || n. "<<
 
 1239         cout<<
"\t\tora stampa hit || :\n";
 
 1240         for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
 1241                 cout<<
"\t hit || n. "<<
 
 1242           infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]<<endl;
 
 1247  nTracksFoundSoFar++;
 
 1250         cout<<
"from PndSttTrackFinderReal :  # n. Tracks found so far = "<<nTracksFoundSoFar
 
 1252          <<
"; rejecting this event and returning -15!\n";
 
 1261     for(j=0;j<nTracksFoundSoFar;j++){
 
 1263                 cout<<
"from PndTrackFinderReal evt "<<
IVOLTE<<
", cand "<<jc<<
 
 1282   bool keepit[nTracksFoundSoFar];
 
 1284   for(i=0; i<nTracksFoundSoFar;i++){
 
 1288     GoodSkewFit[
i]=
false;  
 
 1291     nSttSkewhitinTrack[
i]=0;
 
 1293     if( Fi_low_limit[i] <-99998.) continue ;  
 
 1309         Fi_initial_helix_referenceframe[i],
 
 1310         Fi_final_helix_referenceframe[i],
 
 1318  nSttSkewhitinTrack[
i]=TemporarynSttSkewhitinTrack;   
 
 1322         else nSttSkewhitinTrack[
i]=0;
 
 1336  for(j=0;j<nSttSkewhitinTrack[
i];j++){
 
 1337         ListSkewHitsinTrack[
i][j]=TemporarySkewList[j][0];
 
 1339         tmpZ[j+nSciTilHitsinTrack[
i]]=Z[j],
 
 1340         tmpZDrift[j+nSciTilHitsinTrack[
i]]=ZDrift[j],
 
 1342         tmpErrorZDrift[j+nSciTilHitsinTrack[
i]] = 3.*
STRAWRADIUS;
 
 1347                 for(j=0;j<nSttSkewhitinTrack[
i];j++){
 
 1348                    Sfinal[
i][
infoskew[ ListSkewHitsinTrack[
i][j] ]]= S[j];
 
 1363         nSttSkewhitinTrack[i],
 
 1365         &Fi_initial_helix_referenceframe[i],
 
 1377         Fi_initial_helix_referenceframe[i],   
 
 1385       if(Status[i] < 0 || 
fabs(KAPPA[i])>1.e10)  {
 
 1387         for(j=0;j<nSttSkewhitinTrack[
i];j++){
 
 1388                 Sfinal[
i][
infoskew[ListSkewHitsinTrack[
i][j]]]= S[j];
 
 1393       FI0[
i]=Fi_initial_helix_referenceframe[
i];  
 
 1406                 nSttSkewhitinTrack[i],
 
 1419                 temporeZErrorafterTilt,  
 
 1429        nSttSkewhitinTrack[
i] = NNN;
 
 1433          else nSttSkewhitinTrack[
i]=0;
 
 1435        for(j=0;j<nSttSkewhitinTrack[
i];j++){
 
 1436                 ListSkewHitsinTrack[
i][j]=tempore[j];
 
 1437                 Sfinal[
i][
infoskew[ListSkewHitsinTrack[
i][j]]]= temporeS[j];
 
 1438                 S[j]  =  temporeS[j] ;
 
 1439                 Z[j]  =  temporeZ[j] ;
 
 1440                 ZDrift[j]  =  temporeZDrift[j] ;
 
 1441                 ZErrorafterTilt[j]  =  temporeZErrorafterTilt[j] ;
 
 1444        if (NNN < 2) continue ;
 
 1446        GoodSkewFit[
i]= 
true;
 
 1450     nSttSkewhitinTrack[
i]=TemporarynSttSkewhitinTrack;
 
 1454          else nSttSkewhitinTrack[
i]=0;
 
 1456     for(j=0;j<nSttSkewhitinTrack[
i];j++){ ListSkewHitsinTrack[
i][j]=TemporarySkewList[j][0];}
 
 1457     GoodSkewFit[
i]= 
true;
 
 1461       if( nHitsinTrack[i]+nSttSkewhitinTrack[i] < MINIMUMHITSPERTRACK ||
 
 1470     for(i1=0; i1< nSttSkewhitinTrack[
i]; i1++){
 
 1471              Sfinal[
i][  
infoskew[ ListSkewHitsinTrack[
i][i1]  ]  ]  =  S[i1] ;
 
 1472              Zfinal[
i][  
infoskew[ ListSkewHitsinTrack[
i][i1]  ]  ]  =  Z[i1] ;
 
 1473              ZDriftfinal[
i][  
infoskew[ ListSkewHitsinTrack[
i][i1]  ]  ]  =  ZDrift[i1] ;
 
 1474              ZErrorafterTiltfinal[
i][  
infoskew[ ListSkewHitsinTrack[
i][i1]  ]  ]  =  ZErrorafterTilt[i1] ;
 
 1490    for(i=0; i<nTracksFoundSoFar;i++){
 
 1491         nTotalHits[
i] =  nHitsinTrack[
i]+nSttSkewhitinTrack[
i];
 
 1500                 nSttSkewhitinTrack[i],  
 
 1501                 &ListSkewHitsinTrack[i][0],
 
 1505                 &ListHitsinTrack[i][0], 
 
 1518   cout<<
"Evt. n. "<<
IVOLTE<<
", Traccia n. "<<i<<
",  list dei "<<nTotalHits[
i]
 
 1519   <<
"   hits come stanno in BigList (original notation) :\n";
 
 1521    for(
int ig=0;ig<nTotalHits[
i];ig++){
 
 1522         cout<<
"          hit n.  "<<BigList[
i][ig] <<endl;
 
 1524   cout<<
"e ora gli skew hits ordinati (original notation) :\n";
 
 1525    for(
int ig=0;ig<nSttSkewhitinTrack[
i];ig++){
 
 1526         cout<<
"          hit n.  "<<
infoskew[ListSkewHitsinTrack[
i][ig]] <<endl;
 
 1538    for(i=0; i<nTracksFoundSoFar;i++){
 
 1543 if(
istampa>=2){cout<<
"\tPndSttTrackFinderReal, fine di procedura, IVOLTE = " 
 1544         <<
IVOLTE<<
",  traccia n. "<<i<<
", lista degli hit || :"<<endl;
 
 1545         for(
int ic=0;ic<nHitsinTrack[
i];ic++){
 
 1546                 cout<<
"\thit || (nativo) n. "<<
infoparal[ ListHitsinTrack[
i][ic] ]<<endl;
 
 1548         cout<<
"\tlista degli Stt // hits :"<<endl;
 
 1550                 cout<<
"\thit // Stt (nativo) n. "<<
infoskew[ ListSkewHitsinTrack[
i][ic] ]
 
 1554         cout<<
"\tlista degli hit SciTil :"<<endl;
 
 1555         for(
int ic=0;ic<nSciTilHitsinTrack[
i];ic++){
 
 1570    for(
int ig=0;ig<nTracksFoundSoFar;ig++){
 
 1571         daTrackFoundaTrackMC[ig]=-1;    
 
 1587                   ListSkewHitsinTrack,
 
 1588                   daTrackFoundaTrackMC
 
 1592    for(jexp=0; jexp<nTracksFoundSoFar;jexp++){
 
 1593         if(!keepit[jexp]) 
continue;
 
 1594         nParalCommon[jexp]=0;
 
 1595         nSkewCommon[jexp]=0;
 
 1596         nMCParalAlone[jexp]=0;
 
 1597         nMCSkewAlone[jexp]=0;
 
 1598         nSpuriParinTrack[jexp]=0;
 
 1599         nSpuriSkewinTrack[jexp]=0;
 
 1603         for(exphit=0; exphit<nHitsinTrack[jexp]; exphit++){
 
 1604                 iHit = 
infoparal[ ListHitsinTrack[jexp][exphit] ];
 
 1605                 enne[jexp][exphit] = (Short_t) ( info[iHit][6] + 0.01);
 
 1606                 if( enne[jexp][exphit] == daTrackFoundaTrackMC[jexp] ){
 
 1607                         ParalCommonList[jexp][ nParalCommon[jexp] ] = iHit;
 
 1608                         nParalCommon[jexp]++;
 
 1610                         ParSpuriList[jexp][ nSpuriParinTrack[jexp] ] = iHit;
 
 1611                         nSpuriParinTrack[jexp]++;
 
 1616         for(i=0; i<Minclinations[0]; i++){
 
 1617                 if( !InclusionListbis[ 
infoparal[i] ] ) 
continue;
 
 1618                 emme = (Short_t) ( info[ 
infoparal[i] ][6] + 0.01);
 
 1619                 if( emme == daTrackFoundaTrackMC[jexp] ){
 
 1621                         for(exphit=0; exphit<nHitsinTrack[jexp]; exphit++){
 
 1622                                 if(ListHitsinTrack[jexp][exphit] == i){
 
 1628                           MCParalAloneList[jexp][ nMCParalAlone[jexp] ] = 
infoparal[
i];
 
 1629                           nMCParalAlone[jexp]++;
 
 1637         for(exphit=0; exphit<nSttSkewhitinTrack[jexp]; exphit++){
 
 1638                 iHit = 
infoskew[ ListSkewHitsinTrack[jexp][exphit] ];
 
 1639                 enne[jexp][exphit] = (Short_t) ( info[iHit][6] + 0.01);
 
 1640                 if( enne[jexp][exphit] ==   daTrackFoundaTrackMC[jexp] ){
 
 1641                         SkewCommonList[jexp][ nSkewCommon[jexp] ] = iHit;
 
 1642                         nSkewCommon[jexp]++;
 
 1644                         SkewSpuriList[jexp][ nSpuriSkewinTrack[jexp] ] = iHit;
 
 1645                         nSpuriSkewinTrack[jexp]++;                      
 
 1652                 if( !InclusionListSkewbis[ 
infoskew[i] ] ) 
continue;
 
 1653                 emme = (Short_t) ( info[ 
infoskew[i] ][6] + 0.01);
 
 1654                 if( emme ==   daTrackFoundaTrackMC[jexp] ){
 
 1656                         for(exphit=0; exphit<nSttSkewhitinTrack[jexp]; exphit++){
 
 1657                                 if(i == ListSkewHitsinTrack[jexp][exphit]){
 
 1663                           MCSkewAloneList[jexp][ nMCSkewAlone[jexp] ] = 
infoskew[
i];
 
 1664                           nMCSkewAlone[jexp]++;
 
 1682 int nMCTracksaccettabili=0;
 
 1683 int ListaMCTracksaccettabili[
nMCTracks];
 
 1687         if ( ! 
pMCtr ) 
continue;
 
 1688          Double_t   Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Pxx, Pyy  ;
 
 1695          aaa = 
sqrt( Pxx*Pxx + Pyy*Pyy);
 
 1699                 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 1700                 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 1701                 if (icode>1000000000) carica = 1.;
 
 1702                 else  carica = fParticle->Charge()/3. ;    
 
 1703                 if(
fabs(carica)<1.e-5) 
continue;
 
 1706                 cout<<
"da PndSttTrackFinderReal, evento (cominciando da 0) n. "<<
IVOLTE<<
 
 1707                 ",  traccia MC n. "<<i<<
",  R MC = "<<Rr<<
", Centro X = "<<Cx
 
 1708                 <<
", Centro Y = "<<Cy<<endl;
 
 1711         for(
int ic=0;ic<Nhits;ic++){
 
 1712                 if( ( (
int) (info[ic][6]+0.1) ) == i   && info[ic][5]<2.){
 
 1716         if( citata>2 && 
fabs(Oxx)<1. && 
fabs(Oyy) < 1. ) {
 
 1717                 ListaMCTracksaccettabili[nMCTracksaccettabili]=
i;
 
 1718                 nMCTracksaccettabili++;
 
 1724 if(
istampa>=1){cout<<
"da PndSttTrackFinderReal, MC comparison; evt. "<<
IVOLTE<<
", nMCTracks "<<nMCTracks
 
 1725 <<
", n. MC tracce accettabili "<<nMCTracksaccettabili
 
 1726 <<
" e loro lista :\n";
 
 1727         for(
int g=0; 
g<nMCTracksaccettabili;
g++){
 
 1728                 cout<<
"\ttraccia MC n. "<<ListaMCTracksaccettabili[
g]<<endl;
 
 1730 cout<<
"Total track trovate "<<nTracksFoundSoFar<<endl;
 
 1741         fprintf(
HANDLE, 
"\n Evento %d  NTotaleTracceMC %d ------\n",
 
 1742                 IVOLTE, nMCTracksaccettabili);
 
 1744         if(nMCTracksaccettabili>0){
 
 1745                 for(ii=0; ii<nTracksFoundSoFar;ii++){
 
 1750                         for(i=0;i<nMCTracksaccettabili;i++){
 
 1751                                 if( daTrackFoundaTrackMC[ii]==ListaMCTracksaccettabili[i]){
 
 1757         if(ibene>0) fprintf(
HANDLE,
"\tn. volte almeno 1 traccia MC accettabile e' ricostruita %d\n" 
 1765 for (ii=0; ii<nTracksFoundSoFar && istampa>=1 ;ii++){
 
 1766    if(!keepit[ii]) 
continue;
 
 1767    fprintf(
HANDLE,
"----------------------------------------------------------\n");
 
 1768    i=daTrackFoundaTrackMC[ii];
 
 1772 "   No TracciaMC associated to found track n. %d in pattern recognition, with %d Hits ||, %d skew hits, %f Radius \n " 
 1773              ,ii,nHitsinTrack[ii], nSttSkewhitinTrack[ii],  R[ii] );
 
 1776    if( ! ( GoodSkewFit[ii] ) ) {
 
 1778 "       TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' in Z-S KAPPA e' risultata || asse S\n",i,ii);
 
 1781    if(
fabs(KAPPA[ii])<1.e-10 ){
 
 1783 "       TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' KAPPA troppo piccolo; KAPPA = %g\n",
 
 1793    if(
fabs(dista)<1.e-20 ){
 
 1795 "       TracciaMC %d; sua FoundTrack associata (n. %d) NONsoddisfaRequisitiMinimi perche' centro Helix Cilinder trovato dista solo %g da (0,0)\n",
 
 1802                 "       MC track n. %d doesn't have pointer to MC Track TClones Array\n",
 
 1810         for(
int g=0; 
g<nMCTracksaccettabili;
g++){
 
 1811                 if( i==ListaMCTracksaccettabili[
g]){
 
 1816         if(flaggo) 
continue;
 
 1820 "       TracciaMC %d ParHitsMC %d ParMecc %d ParMeccSpuri %d SkewHitsMC %d  SkewMecc %d SkewMeccSpuri %d\n",
 
 1824              nSpuriParinTrack[ii],
 
 1827              nSpuriSkewinTrack[ii]
 
 1831 "       e corrisponde a track found n. %d\n", ii );
 
 1833 "       AVENDO %d hits paralleli e %d hits skew non mecciati dalla corrisponde track found\n" 
 1834        , nMCParalAlone[ii],nMCSkewAlone[ii]  );
 
 1836     HoughFi = 
atan2(Oy[ii],Ox[ii]);
 
 1837     if(HoughFi<0.)  HoughFi += 2.*
PI;
 
 1839          Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy  ;
 
 1846          aaa = 
sqrt( Px*Px + Py*Py);
 
 1848          TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 1849          TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 1850          if (icode>1000000000) carica = 1.;
 
 1851          else  carica = fParticle->Charge()/3. ;    
 
 1854          Fifi = 
atan2(Cy, Cx);       
 
 1855          if(Fifi<0.)  Fifi += 2.*
PI;
 
 1861 "       R_MC %g R %g Fi_MC %g Fi %g KAPPA_MC %g KAPPA %g FI0_MC %g FI0 %g\n",
 
 1868      fmod(Fifi+ 
PI, 2.*
PI),  
 
 1879 int NParghost=0, NParhitsghost=0,icc;
 
 1880 if( 
istampa>=1 && nMCTracksaccettabili>0 ){
 
 1881     for(icc=0; icc<nTracksFoundSoFar;icc++){
 
 1882         if(!keepit[icc]) 
continue;
 
 1883        if( daTrackFoundaTrackMC[icc] == -1){
 
 1885           NParhitsghost += nHitsinTrack[icc]+nSttSkewhitinTrack[icc];
 
 1887           fprintf(
HANDLE,
"          tracce Trovata n. %d e' Ghost\n",icc);
 
 1891 "          tracceGhostTrovate %d TotaleHitsGhost %d  ----\n",
 
 1896     fprintf(
HANDLE,
"----------------------------------------------------------\n");
 
 1914         int   ipinco=0, ipanco=0;
 
 1916         Double_t Ptras,Pxini,Pyini,Pzini,dista, qop;
 
 1919         TVector3   Momentum,ErrMomentum,
Position,ErrPosition;
 
 1920     for(i=0; i<nTracksFoundSoFar;i++){
 
 1921         if(!keepit[i]) 
continue;
 
 1922        dista=
sqrt( Ox[i]*Ox[i]+Oy[i]*Oy[i] );
 
 1924        Pxini = -Charge[
i]*Ptras*Oy[
i]/dista;
 
 1925        Pyini = Charge[
i]*Ptras*Ox[
i]/dista;
 
 1926        TVector3 posSeed(0.,0.,0.);  
 
 1928      if(   GoodSkewFit[i]  ) {
 
 1930        pTrckCand = (
PndTrackCand*) trackCandArray->At(ipinco);
 
 1932        if(
fabs(KAPPA[i])>1.e-20  ){
 
 1933                 Pzini = -Charge[
i]*0.003*
BFIELD/KAPPA[
i];
 
 1935                 if(
fabs(Pzini) < 
PMAX)  flag =0 ; 
else flag=-1;
 
 1936                 TVector3 dirSeed(Pxini,
 
 1939                 qop = Charge[
i]/dirSeed.Mag();
 
 1941                 pTrckCand->setTrackSeed(posSeed, dirSeed, qop);
 
 1947                 for(j=0; j< nTotalHits[
i]; j++){
 
 1949                         FairRootManager::Instance()->GetBranchId(
fSttBranch),
 
 1950                         (Int_t) BigList[i][j] , j);
 
 1965                 if(
fabs(info[ BigList[i][0] ][5] -1.)< 1.e-10 ) {
 
 1979                              Zfinal[i][ BigList[i][0] ],       
 
 1980                              ZDriftfinal[i][ BigList[i][0] ],   
 
 1981                              Sfinal[i][ BigList[i][0] ],
 
 1992                 if( Posiz1[0] > -777777776. )
 
 1995                         if(
fabs(info[ BigList[i][nTotalHits[i]-1] ][5] -1.)< 1.e-10 ) {
 
 1998                                                 BigList[i][nTotalHits[i]-1],
 
 2009                              Zfinal[i][ BigList[i][nTotalHits[i]-1] ],       
 
 2010                              ZDriftfinal[i][ BigList[i][nTotalHits[i]-1] ],   
 
 2011                              Sfinal[i][ BigList[i][nTotalHits[i]-1] ],
 
 2021                         if( Posiz2[0] > -777777776.  )
 
 2026                                 Position.SetX( Posiz1[0] );
 
 2027                                 Position.SetY( Posiz1[1] );
 
 2028                                 Position.SetZ( Posiz1[2] );
 
 2029                                 ErrPosition.SetX(0.02); 
 
 2030                                 ErrPosition.SetY(0.02); 
 
 2031                                 ErrPosition.SetZ(1.);           
 
 2033                                 versor[0] = Ox[
i]-Posiz1[0];
 
 2034                                 versor[1] = Oy[
i]-Posiz1[1];
 
 2035                                 Distance = 
sqrt(versor[0]*versor[0]+versor[1]*versor[1]);
 
 2037                                 versor[0] /= Distance;
 
 2038                                 versor[1] /= Distance;
 
 2039                                 Px = -Charge[
i]*Ptras*versor[1];
 
 2040                                 Py = Charge[
i]*Ptras*versor[0];
 
 2043                                 Momentum.SetZ(Pzini);
 
 2044                                 ErrMomentum.SetX(0.05*Ptras); 
 
 2045                                 ErrMomentum.SetY(0.05*Ptras); 
 
 2046                                 ErrMomentum.SetZ(0.05*Pzini); 
 
 2049                                 ddd = Ptras*
sqrt(Ptras*Ptras+Pzini*Pzini);
 
 2050                                 FairTrackParP first( Position,  Momentum,
 
 2051                                         ErrPosition, ErrMomentum, Charge[i],
 
 2052                                         Position, TVector3(Py/Ptras, -Px/Ptras, 0.),
 
 2053                                         TVector3(Pzini*Px/ddd,Pzini*Py/ddd, -Ptras*Ptras/ddd)
 
 2057                                 Position.SetX( Posiz2[0] );
 
 2058                                 Position.SetY( Posiz2[1] );
 
 2059                                 Position.SetZ( Posiz2[2] );
 
 2060                                 ErrPosition.SetX(0.02); 
 
 2061                                 ErrPosition.SetY(0.02); 
 
 2062                                 ErrPosition.SetZ(1.);           
 
 2064                                 versor[0] = Ox[
i]-Posiz2[0];
 
 2065                                 versor[1] = Oy[
i]-Posiz2[1];
 
 2066                                 Distance = 
sqrt(versor[0]*versor[0]+versor[1]*versor[1]);
 
 2068                                 versor[0] /= Distance;
 
 2069                                 versor[1] /= Distance;
 
 2070                                 Px = -Charge[
i]*Ptras*versor[1];
 
 2071                                 Py = Charge[
i]*Ptras*versor[0];
 
 2075                                 ErrMomentum.SetX(0.05*Ptras); 
 
 2076                                 ErrMomentum.SetY(0.05*Ptras); 
 
 2080                                 FairTrackParP last( Position,  Momentum,
 
 2081                                 ErrPosition, ErrMomentum, Charge[i],
 
 2082                                 Position, TVector3(Py/Ptras, -Px/Ptras, 0.),
 
 2083                                         TVector3(Pzini*Px/ddd,Pzini*Py/ddd, -Ptras*Ptras/ddd)
 
 2086                                 pTrck = 
new((*trackArray)[ipanco]) 
PndTrack(first, last, *pTrckCand);
 
 2093                                 FairTrackParP first(
 
 2094                                         TVector3(-99999., -99999., -99999.), 
 
 2095                                         TVector3(-99999., -99999., -99999.), 
 
 2096                                         TVector3(-99999., -99999., -99999.), 
 
 2097                                         TVector3(-99999., -99999., -99999.), 
 
 2099                                         TVector3(-99999., -99999., -99999.), 
 
 2100                                         TVector3(1., 0., 0.), 
 
 2101                                         TVector3(0., 1., 0.) 
 
 2104                                         TVector3(-99999., -99999., -99999.), 
 
 2105                                         TVector3(-99999., -99999., -99999.), 
 
 2106                                         TVector3(-99999., -99999., -99999.), 
 
 2107                                         TVector3(-99999., -99999., -99999.), 
 
 2109                                         TVector3(-99999., -99999., -99999.), 
 
 2110                                         TVector3(1., 0., 0.), 
 
 2111                                         TVector3(0., 1., 0.) 
 
 2114                                 pTrck = 
new((*trackArray)[ipanco]) 
PndTrack(first, last, *pTrckCand);
 
 2123                         FairTrackParP first(
 
 2124                                         TVector3(-99999., -99999., -99999.), 
 
 2125                                         TVector3(-99999., -99999., -99999.), 
 
 2126                                         TVector3(-99999., -99999., -99999.), 
 
 2127                                         TVector3(-99999., -99999., -99999.), 
 
 2129                                         TVector3(-99999., -99999., -99999.), 
 
 2130                                         TVector3(1., 0., 0.), 
 
 2131                                         TVector3(0., 1., 0.) 
 
 2134                                         TVector3(-99999., -99999., -99999.), 
 
 2135                                         TVector3(-99999., -99999., -99999.), 
 
 2136                                         TVector3(-99999., -99999., -99999.), 
 
 2137                                         TVector3(-99999., -99999., -99999.), 
 
 2139                                         TVector3(-99999., -99999., -99999.), 
 
 2140                                         TVector3(1., 0., 0.), 
 
 2141                                         TVector3(0., 1., 0.) 
 
 2144                         pTrck = 
new((*trackArray)[ipanco]) 
PndTrack(first, last, *pTrckCand);
 
 2154                 TVector3 dirSeed(Pxini,
 
 2157                 qop = Charge[
i]/dirSeed.Mag();
 
 2160                 pTrckCand->setTrackSeed(posSeed, dirSeed, qop);
 
 2162                 for(j=0; j< nTotalHits[
i]; j++){
 
 2165                         FairRootManager::Instance()->GetBranchId(
fSttBranch),
 
 2166                         (Int_t) BigList[i][j] , j);
 
 2171                 FairTrackParP first(
 
 2172                                         TVector3(-99999., -99999., -99999.), 
 
 2173                                         TVector3(-99999., -99999., -99999.), 
 
 2174                                         TVector3(-99999., -99999., -99999.), 
 
 2175                                         TVector3(-99999., -99999., -99999.), 
 
 2177                                         TVector3(-99999., -99999., -99999.), 
 
 2178                                         TVector3(1., 0., 0.), 
 
 2179                                         TVector3(0., 1., 0.) 
 
 2182                                         TVector3(-99999., -99999., -99999.), 
 
 2183                                         TVector3(-99999., -99999., -99999.), 
 
 2184                                         TVector3(-99999., -99999., -99999.), 
 
 2185                                         TVector3(-99999., -99999., -99999.), 
 
 2187                                         TVector3(-99999., -99999., -99999.), 
 
 2188                                         TVector3(1., 0., 0.), 
 
 2189                                         TVector3(0., 1., 0.) 
 
 2192                 pTrck = 
new((*trackArray)[ipanco]) 
PndTrack(first, last, *pTrckCand);
 
 2208          pTrckCand = (
PndTrackCand*) trackCandArray->At(ipinco);
 
 2209          TVector3 dirSeed(Pxini,
 
 2212          qop = Charge[
i]/Ptras;   
 
 2216          pTrckCand->setTrackSeed(posSeed, dirSeed, qop);
 
 2218          for(j=0; j< nTotalHits[
i]; j++){
 
 2222                 FairRootManager::Instance()->GetBranchId(
fSttBranch),
 
 2223                 (Int_t) BigList[i][j] , j);
 
 2228         FairTrackParP first(
 
 2229                                         TVector3(-99999., -99999., -99999.), 
 
 2230                                         TVector3(-99999., -99999., -99999.), 
 
 2231                                         TVector3(-99999., -99999., -99999.), 
 
 2232                                         TVector3(-99999., -99999., -99999.), 
 
 2234                                         TVector3(-99999., -99999., -99999.), 
 
 2235                                         TVector3(1., 0., 0.), 
 
 2236                                         TVector3(0., 1., 0.) 
 
 2239                                         TVector3(-99999., -99999., -99999.), 
 
 2240                                         TVector3(-99999., -99999., -99999.), 
 
 2241                                         TVector3(-99999., -99999., -99999.), 
 
 2242                                         TVector3(-99999., -99999., -99999.), 
 
 2244                                         TVector3(-99999., -99999., -99999.), 
 
 2245                                         TVector3(1., 0., 0.), 
 
 2246                                         TVector3(0., 1., 0.) 
 
 2249         pTrck = 
new((*trackArray)[ipanco]) 
PndTrack(first, last, *pTrckCand);
 
 2286     for(i=0; i<nTracksFoundSoFar;i++){
 
 2287        if(!GoodSkewFit[i])   
continue;
 
 2288         if(!keepit[i]) 
continue;
 
 2290     for( j=0; j<nParalCommon[
i]; j++){
 
 2292         Posiz[0]=Posiz[1]=Posiz[2]=0.;
 
 2295                              ParalCommonList[i][j],
 
 2306 if(
istampa>=2)  cout<<
"PndTrackFinderReal::DoFind, paralleli, n. hits (original notation) = "<<
 
 2307        ParalCommonList[
i][j] <<
 
 2317         if( info[ParalCommonList[i][j]][6]<0. ){
 
 2322                 fprintf(
PHANDLEX,
"%g\n", 
veritaMC[ ParalCommonList[i][j] ] [0] - Posiz[0]);
 
 2323                 fprintf(
PHANDLEY,
"%g\n", 
veritaMC[ ParalCommonList[i][j] ] [1] - Posiz[1]);
 
 2324                 fprintf(
PHANDLEZ,
"%g\n", 
veritaMC[ ParalCommonList[i][j] ] [2] - Posiz[2]);
 
 2333     for( j=0; j<nSkewCommon[
i]; j++){
 
 2336                              Zfinal[i][ SkewCommonList[i][j] ],       
 
 2337                              ZDriftfinal[i][ SkewCommonList[i][j] ],   
 
 2338                              Sfinal[i][ SkewCommonList[i][j] ],
 
 2347 if(
istampa>=2)  cout<<
"DoFind, skew, n. hits (original notation) = "<<
 
 2348        SkewCommonList[
i][j] <<
 
 2358         if( info[SkewCommonList[i][j]][6]<0. ){
 
 2399                    Nhits, info, Nincl, Minclinations,
 
 2410                    Nhits, info, Nincl, Minclinations,
 
 2416         for(i=0, ii=-1; i<nTracksFoundSoFar;i++){
 
 2417                 if(!keepit[i])
continue;
 
 2422                         nHitsinTrack[i],ListHitsinTrack,
 
 2423                         info, Nincl, Minclinations, inclination,
 
 2433                    daTrackFoundaTrackMC[i],
 
 2452 for(i=0,ii=-1; i<nTracksFoundSoFar;i++){
 
 2453         if(!keepit[i]) 
continue;
 
 2459     HoughD   = 
sqrt(Ox[i]*Ox[i]+Oy[i]*Oy[i]) -R[
i];
 
 2460     HoughFi = 
atan2(Oy[i],Ox[i]);
 
 2461     if(HoughFi<0.)  HoughFi += 2.*
PI;
 
 2465                 ZETA[nSciTilHitsinTrack[
i]];
 
 2467     if(nSciTilHitsinTrack[i]>0){
 
 2468       for(j=0;j<nSciTilHitsinTrack[
i];j++){
 
 2478                    KAPPA[i],FI0[i], HoughD, HoughFi, HoughR,
 
 2479                    info, Nincl,Minclinations,inclination,
 
 2482                    nSttSkewhitinTrack[i],
 
 2483                    ListSkewHitsinTrack,
 
 2484                 nSciTilHitsinTrack[i],
 
 2489       if( daTrackFoundaTrackMC[i] >= 0){
 
 2492                    KAPPA[i],FI0[i], HoughD, HoughFi, HoughR,
 
 2493                    info, Nincl,Minclinations,inclination,
 
 2496                    nSttSkewhitinTrack[i],
 
 2497                    ListSkewHitsinTrack,
 
 2500                    daTrackFoundaTrackMC[i],
 
 2503                 nSciTilHitsinTrack[i],
 
 2525   return   ((Int_t )nTracksFoundSoFar );
 
 2541   Double_t a,
b,
c,
d,ap,
bp,cp,dp,radix,solution,Radius, A,B,
C,D,AAA,BBB,CCC,DELTA,S,
T,
X;
 
 2563   d= x1*x1+y1*y1-r1*r1-x2*x2-y2*y2+r2*
r2;
 
 2566   dp= x1*x1+y1*y1-r1*r1-x3*x3-y3*y3+r3*r3;
 
 2579    for(Int_t i1=-1;i1<=1;i1+=2){
 
 2580     for(Int_t i2=-1;i2<=1;i2+=2){
 
 2581       c=-2.*(i1*r1-i2*
r2);
 
 2582       for(Int_t i3=-1;i3<=1;i3+=2){
 
 2583         cp=-2.*(i1*r1-i3*r3);
 
 2584         if( bp*c-b*cp == 0. && b == 0. && bp == 0. && a != 0. && ap != 0. && a != ap && ap*c-a*cp != 0.){
 
 2585            Radius = (a*dp-ap*
d)/(ap*c-a*cp);
 
 2590              CCC = (S-T*Radius)*(S-T*Radius)-Radius*Radius-2.*x1*(S-T*Radius)-2.*i1*Radius*r1+x1*x1+y1*y1-r1*r1;
 
 2591              DELTA = BBB*BBB-CCC;
 
 2594              } 
else if (DELTA ==0.){
 
 2596               R[Nsol-1] = Radius ;
 
 2597               CX[Nsol-1] = S-T*Radius;
 
 2601               R[Nsol-2] = Radius ;
 
 2602               CX[Nsol-2] = S-T*Radius;
 
 2603               CY[Nsol-2] = -BBB+
sqrt(DELTA);
 
 2604               R[Nsol-1] = Radius ;
 
 2605               CX[Nsol-1] = S-T*Radius;
 
 2606               CY[Nsol-1] = -BBB-
sqrt(DELTA);
 
 2610         }  
else if(bp*c-b*cp != 0.) {
 
 2612          Radius = (-bp*d+b*dp)/(bp*c-b*cp) ;
 
 2613          if( Radius > 0. && b != 0. ){
 
 2617            BBB = -(T*S+x1-T*y1);
 
 2618            CCC = S*S-Radius*Radius-2.*y1*S-2.*i1*r1*Radius+x1*x1+y1*y1-r1*
r1;
 
 2619            DELTA= BBB*BBB-AAA*CCC;
 
 2624            } 
else if (DELTA ==0.){
 
 2626              R[Nsol-1] = Radius ;
 
 2627              CX[Nsol-1] = -BBB/AAA;
 
 2628              CY[Nsol-1] = S-T*CX[Nsol-1];
 
 2632              R[Nsol-2] = Radius ;
 
 2633              CX[Nsol-2] = (-BBB+
sqrt(DELTA))/AAA;
 
 2634              CY[Nsol-2] = S-T*CX[Nsol-2];
 
 2635              R[Nsol-1] = Radius ;
 
 2636              CX[Nsol-1] = (-BBB-
sqrt(DELTA))/AAA;
 
 2637              CY[Nsol-1] = S-T*CX[Nsol-1];
 
 2652    for(Int_t i1=-1;i1<=1;i1+=2){
 
 2653     for(Int_t i2=-1;i2<=1;i2+=2){
 
 2654       c=-2.*(i1*r1-i2*
r2);
 
 2655       for(Int_t i3=-1;i3<=1;i3+=2){
 
 2656         cp=-2.*(i1*r1-i3*r3);
 
 2664         BBB = A*B+C*D-B*x1-D*y1-i1*
r1;
 
 2665         CCC = A*A+C*C-2.*x1*A-2.*y1*C+x1*x1+y1*y1-r1*
r1;
 
 2666         DELTA = BBB*BBB - CCC*AAA;
 
 2672         if (DELTA <0.) { 
continue; }
 
 2673         else if (DELTA==0.){
 
 2680            R[Nsol-1] = solution;
 
 2681              CX[Nsol-1] = A+B*R[Nsol-1];
 
 2682              CY[Nsol-1] = C+D*R[Nsol-1];
 
 2690         radix = 
sqrt(DELTA);
 
 2697           solution=(-BBB+radix)/AAA;
 
 2701            R[Nsol-1] = solution;
 
 2702            CX[Nsol-1] = A+B*R[Nsol-1];
 
 2703            CY[Nsol-1] = C+D*R[Nsol-1];
 
 2707           solution=(-BBB-radix)/AAA;
 
 2711            R[Nsol-1] = solution;
 
 2712            CX[Nsol-1] = A+B*R[Nsol-1];
 
 2713            CY[Nsol-1] = C+D*R[Nsol-1];
 
 2735  for(Int_t 
i=0; 
i<Nsol;
i++){
 
 2765   Double_t P1x, P1y, P1z, P2x, P2y, P2z;
 
 2811   DELTA = R*R*(vx*vx+vy*vy) - (vx*ay - vy*ax)*(vx*ay - vy*ax);
 
 2817   } 
else if (AAA == 0.){
 
 2819   } 
else if (DELTA == 0.){
 
 2821       POINTS[0] = C0x - vx*(vx*ax + vy*ay)/AAA;
 
 2822       POINTS[1] = C0y - vy*(vx*ax + vy*ay)/AAA;
 
 2823       POINTS[2] = C0z - vz*(vx*ax + vy*ay)/AAA;
 
 2826       DELTA = 
sqrt(DELTA);
 
 2827       POINTS[0] = C0x - vx*(vx*ax + vy*ay - DELTA)/AAA;
 
 2828       POINTS[1] = C0y - vy*(vx*ax + vy*ay - DELTA)/AAA;
 
 2829       POINTS[2] = C0z - vz*(vx*ax + vy*ay - DELTA)/AAA;
 
 2830       POINTS[3] = C0x - vx*(vx*ax + vy*ay + DELTA)/AAA;
 
 2831       POINTS[4] = C0y - vy*(vx*ax + vy*ay + DELTA)/AAA;
 
 2832       POINTS[5] = C0z - vz*(vx*ax + vy*ay + DELTA)/AAA;
 
 2864                    Short_t *auxListHitsinTrack              
 
 2869     Short_t Nassociatedhits;
 
 2883        for( i=0; i< Nhits; i++) {
 
 2892           dy = -Oy+info[ infoparal[
i] ][1];
 
 2893           distance = 
sqrt(dx*dx+dy*dy);
 
 2899           auxListHitsinTrack[Nassociatedhits]=
i;
 
 2912     return Nassociatedhits;
 
 2926                       Int_t Nremaining, Float_t * RemainingR, Float_t * RemainingD,
 
 2927                       Float_t * RemainingFi, Float_t * RemainingCX, Float_t * RemainingCY,
 
 2933    int itemp, 
i, j, ii, 
jj;
 
 2937    char nome[300],titolo[300];
 
 2941    sprintf(nome,
"HoughGeneralPlotsEvent%d.root",
IVOLTE);
 
 2942    TFile  hfile(nome,
"RECREATE", 
"STT pattern recognition");
 
 2945        sprintf(titolo,
"Cxofcircle");
 
 2948        sprintf(titolo,
"Cyofcircle");
 
 2951        sprintf(titolo,
"Radiusofcircle");
 
 2954        sprintf(titolo,
"CxabscissavsCy");
 
 2957        sprintf(titolo,
"CxabscissavsRadius");
 
 2960        sprintf(titolo,
"CyabscissavsRadius");
 
 2963        sprintf(titolo,
"CxabscissavsCyordinatevsRadius");
 
 2964        TH3F hCX_CY_R(titolo,titolo,
nbinCX,
CXmin,
CXmax,
nbinCY,
CYmin,
CYmax,
nbinR,
Rmin,
Rmax);
 
 2966        sprintf(titolo,
"Distanceofclosestapproachofcircle");
 
 2969        sprintf(titolo,
"Firadofcircle");
 
 2972        sprintf(titolo,
"DabscissavsFi");
 
 2975        sprintf(titolo,
"DabscissavsRadius");
 
 2978        sprintf(titolo,
"FiabscissavsRadius");
 
 2981        sprintf(titolo,
"DabscissavsFiordinatevsRadius");
 
 2982        TH3F hD_Fi_R(titolo,titolo,
nbinD,
Dmin,
Dmax,
nbinFi,
Fimin,
Fimax,
nbinR,
Rmin,
Rmax);
 
 2988        sprintf(titolo,
"Cxofcircle_truth");
 
 2991        sprintf(titolo,
"Cyofcircle_truth");
 
 2994        sprintf(titolo,
"Radiusofcircle_truth");
 
 2997        sprintf(titolo,
"CxabscissavsCy_truth");
 
 3000        sprintf(titolo,
"CxabscissavsRadius_truth");
 
 3003        sprintf(titolo,
"CyabscissavsRadius_truth");
 
 3006        sprintf(titolo,
"CxabscissavsCyordinatevsRadius_truth");
 
 3007        TH3F hCX_CY_Rverita(titolo,titolo,
nbinCX,
CXmin,
CXmax,
nbinCY,
CYmin,
CYmax,
nbinR,
Rmin,
Rmax);
 
 3009        sprintf(titolo,
"Distanceofclosestapproachofcircle_truth");
 
 3012        sprintf(titolo,
"Firadofcircle_truth");
 
 3015        sprintf(titolo,
"DabscissavsFi_truth");
 
 3018        sprintf(titolo,
"DabscissavsRadius_truth");
 
 3021        sprintf(titolo,
"FiabscissavsRadius_truth");
 
 3024        sprintf(titolo,
"DabscissavsFiordinatevsRadius_truth");
 
 3025        TH3F hD_Fi_Rverita(titolo,titolo,
nbinD,
Dmin,
Dmax,
nbinFi,
Fimin,
Fimax,
nbinR,
Rmin,
Rmax);
 
 3031        sprintf(titolo,
"Cxofcircle_nontruth");
 
 3034        sprintf(titolo,
"Cyofcircle_nontruth");
 
 3037        sprintf(titolo,
"Radiusofcircle_nontruth");
 
 3040        sprintf(titolo,
"CxabscissavsCy_nontruth");
 
 3043        sprintf(titolo,
"CxabscissavsRadius_nontruth");
 
 3046        sprintf(titolo,
"CyabscissavsRadius_nontruth");
 
 3049        sprintf(titolo,
"CxabscissavsCyordinatevsRadius_nontruth");
 
 3050        TH3F hCX_CY_Rnonverita(titolo,titolo,
nbinCX,
CXmin,
CXmax,
nbinCY,
CYmin,
CYmax,
nbinR,
Rmin,
Rmax);
 
 3052        sprintf(titolo,
"Distanceofclosestapproachofcircle_nontruth");
 
 3055        sprintf(titolo,
"Firadofcircle_nontruth");
 
 3058        sprintf(titolo,
"DabscissavsFi_nontruth");
 
 3061        sprintf(titolo,
"DabscissavsRadius_nontruth");
 
 3064        sprintf(titolo,
"FiabscissavsRadius_nontruth");
 
 3067        sprintf(titolo,
"DabscissavsFiordinatevsRadius_nontruth");
 
 3068        TH3F hD_Fi_Rnonverita(titolo,titolo,
nbinD,
Dmin,
Dmax,
nbinFi,
Fimin,
Fimax,
nbinR,
Rmin,
Rmax);
 
 3077   for(itemp = 0; itemp<Nremaining; itemp++){
 
 3079        D = RemainingD[itemp];
 
 3080        Fi = RemainingFi[itemp];
 
 3083        hCX.Fill(RemainingCX[itemp]);
 
 3084        hCY.Fill(RemainingCY[itemp]);
 
 3085        hR.Fill(RemainingR[itemp]);
 
 3086        hCX_CY.Fill(RemainingCX[itemp],RemainingCY[itemp]);
 
 3087        hCX_R.Fill(RemainingCX[itemp],RemainingR[itemp]);
 
 3088        hCY_R.Fill(RemainingCY[itemp],RemainingR[itemp]);
 
 3089        hCX_CY_R.Fill(RemainingCX[itemp],RemainingCY[itemp],RemainingR[itemp]);
 
 3094        hD_R.Fill(D,RemainingR[itemp]);
 
 3095        hFi_R.Fill(Fi,RemainingR[itemp]);
 
 3096        hD_Fi_R.Fill(D,Fi,RemainingR[itemp]);
 
 3102      if (Goodflag[itemp]) {
 
 3104        hCXverita.Fill(RemainingCX[itemp]);
 
 3105        hCYverita.Fill(RemainingCY[itemp]);
 
 3106        hRverita.Fill(RemainingR[itemp]);
 
 3107        hCX_CYverita.Fill(RemainingCX[itemp],RemainingCY[itemp]);
 
 3108        hCX_Rverita.Fill(RemainingCX[itemp],RemainingR[itemp]);
 
 3109        hCY_Rverita.Fill(RemainingCY[itemp],RemainingR[itemp]);
 
 3110        hCX_CY_Rverita.Fill(RemainingCX[itemp],RemainingCY[itemp],RemainingR[itemp]);
 
 3114        hD_Fiverita.Fill(D,Fi);
 
 3115        hD_Rverita.Fill(D,RemainingR[itemp]);
 
 3116        hFi_Rverita.Fill(Fi,RemainingR[itemp]);
 
 3117        hD_Fi_Rverita.Fill(D,Fi,RemainingR[itemp]);
 
 3121        hCXnonverita.Fill(RemainingCX[itemp]);
 
 3122        hCYnonverita.Fill(RemainingCY[itemp]);
 
 3123        hRnonverita.Fill(RemainingR[itemp]);
 
 3124        hCX_CYnonverita.Fill(RemainingCX[itemp],RemainingCY[itemp]);
 
 3125        hCX_Rnonverita.Fill(RemainingCX[itemp],RemainingR[itemp]);
 
 3126        hCY_Rnonverita.Fill(RemainingCY[itemp],RemainingR[itemp]);
 
 3127        hCX_CY_Rnonverita.Fill(RemainingCX[itemp],RemainingCY[itemp],RemainingR[itemp]);
 
 3129        hDnonverita.Fill(D);
 
 3130        hFinonverita.Fill(Fi);
 
 3131        hD_Finonverita.Fill(D,Fi);
 
 3132        hD_Rnonverita.Fill(D,RemainingR[itemp]);
 
 3133        hFi_Rnonverita.Fill(Fi,RemainingR[itemp]);
 
 3134        hD_Fi_Rnonverita.Fill(D,Fi,RemainingR[itemp]);
 
 3161                       Int_t Nremaining, Float_t * RemainingR, Float_t * RemainingD,
 
 3162                       Float_t * RemainingFi, Float_t * RemainingCX, Float_t * RemainingCY,  
 
 3168    int itemp, 
i, j, ii, 
jj;
 
 3172    char nome[300],titolo[300];
 
 3176    sprintf(nome,
"HoughParallele%sMaximumN%devent%d.root",tipo,nMaxima,
IVOLTE);
 
 3177    TFile  hfile(nome,
"RECREATE", 
"STT pattern recognition");
 
 3181        sprintf(titolo,
"CxofcircleSelected");
 
 3184        sprintf(titolo,
"CyofcircleSelected");
 
 3187        sprintf(titolo,
"RadiusofcircleSelected");
 
 3188        TH1F hRsel(titolo,titolo,
nbinR,Rlow,Rup);
 
 3190        sprintf(titolo,
"CxabscissavsCyordinatevsRadiusSelected");
 
 3191        TH3F hCX_CY_Rsel(titolo,titolo,
nbinCX,
CXmin,
CXmax,
nbinCY,
CYmin,
CYmax,
nbinR,Rlow,Rup);
 
 3193        sprintf(titolo,
"DistanceofclosestapproachofcircleSelected");
 
 3194        TH1F hDsel(titolo,titolo,
nbinD,Dlow,Dup);
 
 3196        sprintf(titolo,
"FiradofcircleSselected");
 
 3197        TH1F hFisel(titolo,titolo,
nbinFi,Filow,Fiup);
 
 3199        sprintf(titolo,
"DabscissavsFiSelected");
 
 3200        TH2F hD_Fisel(titolo,titolo,
nbinD,Dlow,Dup,
nbinFi,Filow,Fiup);
 
 3202        sprintf(titolo,
"DabscissavsRadiusSelected");
 
 3203        TH2F hD_Rsel(titolo,titolo,
nbinD,Dlow,Dup,
nbinR,Rlow,Rup);
 
 3205        sprintf(titolo,
"FiabscissavsRadiusSelected");
 
 3206        TH2F hFi_Rsel(titolo,titolo,
nbinFi,Filow,Fiup,
nbinR,Rlow,Rup);
 
 3208        sprintf(titolo,
"DabscissavsFiordinatevsRadiusSelected");
 
 3209        TH3F hD_Fi_Rsel(titolo,titolo,
nbinD,Dlow,Dup,
nbinFi,Filow,Fiup,
nbinR,Rlow,Rup);
 
 3214   for(itemp = 0; itemp<Nremaining; itemp++){
 
 3216        D = RemainingD[itemp];
 
 3217        Fi = RemainingFi[itemp];
 
 3220       if( RemainingR[itemp]>Rlow && RemainingR[itemp]<Rup
 
 3222           RemainingD[itemp]>Dlow && RemainingD[itemp]<Dup
 
 3224           RemainingFi[itemp]>Filow && RemainingFi[itemp]<Fiup
 
 3226            hRsel.Fill(RemainingR[itemp]);
 
 3229            hCXsel.Fill(RemainingCX[itemp]);
 
 3230            hCYsel.Fill(RemainingCY[itemp]);
 
 3231            hD_Fisel.Fill(D,Fi);
 
 3232            hD_Rsel.Fill(D,RemainingR[itemp]);
 
 3233            hFi_Rsel.Fill(Fi,RemainingR[itemp]);
 
 3234            hD_Fi_Rsel.Fill(D,Fi,RemainingR[itemp]);
 
 3235            hCX_CY_Rsel.Fill(RemainingCX[itemp],RemainingCY[itemp],RemainingR[itemp]);
 
 3259                 int ncomponents, Short_t * vec1, Short_t *vec2)
 
 3262     for(
int i=0; 
i<ncomponents;
i++){
 
 3263       if( vec1[
i]-vec2[
i] >3 || vec1[
i]-vec2[
i]<-3) 
return false;
 
 3276           int nListElements, Short_t List[][2],                 
 
 3277           int & nClusterElementsFound, Short_t ClusterElementsFound[][2],  
 
 3278           int & nRemainingElements, Short_t  RemainingElements[][2]     
 
 3284    nClusterElementsFound=0;
 
 3285    nRemainingElements=0;
 
 3286    for(i=0; i<nListElements; i++){
 
 3290          ClusterElementsFound[nClusterElementsFound][0] = vec2[0];
 
 3291          ClusterElementsFound[nClusterElementsFound][1] = vec2[1];
 
 3292          nClusterElementsFound++;
 
 3294          RemainingElements[nRemainingElements][0] = vec2[0];
 
 3295          RemainingElements[nRemainingElements][1] = vec2[1];
 
 3296          nRemainingElements++;
 
 3309           int nListElements, Short_t List[][3],                 
 
 3310           int & nClusterElementsFound, Short_t ClusterElementsFound[][3],  
 
 3311           int & nRemainingElements, Short_t  RemainingElements[][3]     
 
 3317    nClusterElementsFound=0;
 
 3318    nRemainingElements=0;
 
 3319    for(i=0; i<nListElements; i++){
 
 3324          ClusterElementsFound[nClusterElementsFound][0] = vec2[0];
 
 3325          ClusterElementsFound[nClusterElementsFound][1] = vec2[1];
 
 3326          ClusterElementsFound[nClusterElementsFound][2] = vec2[2];
 
 3327          nClusterElementsFound++;
 
 3329          RemainingElements[nRemainingElements][0] = vec2[0];
 
 3330          RemainingElements[nRemainingElements][1] = vec2[1];
 
 3331          RemainingElements[nRemainingElements][2] = vec2[2];
 
 3332          nRemainingElements++;
 
 3353                    Int_t Nincl, Int_t Minclinations[],
 
 3355                    Short_t nTracksFoundSoFar
 
 3359     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS;
 
 3363            dx, 
dy, diff, d1, d2,
 
 3364            delta, deltax, deltay, deltaz, deltaS,
 
 3366            zmin, zmax, Smin, Smax, S1, S2,
 
 3367            z1, z2, y1, y2,x1,x2,
 
 3368            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 3369            aaa, bbb, 
ccc, rrr, 
angle, minor, major,
 
 3370            distance, Rx, Ry, LL,
 
 3371            Aellipsis1, Bellipsis1,fi1,
 
 3372            fmin, fmax, 
offset, step,
 
 3373            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 3378       char nome[300], nome2[300];
 
 3384       sprintf(nome,
"MacroSttParEvent%d", 
IVOLTE);
 
 3385       sprintf(nome2,
"%s.C",nome);
 
 3386       FILE * MACRO = fopen(nome2,
"w");
 
 3387       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 3404        for( i=0; i< Nhits; i++) {
 
 3405          if( info[i][5] == 1 ) {     
 
 3406             if (info[i][0]-info[i][3] < xmin)   xmin = info[
i][0]-info[
i][3];
 
 3407             if (info[i][0]+info[i][3] > xmax)   xmax = info[
i][0]+info[
i][3];
 
 3408             if (info[i][1]-info[i][3] < ymin)   ymin = info[
i][1]-info[
i][3];
 
 3409             if (info[i][1]+info[i][3] > ymax)   ymax = info[
i][1]+info[
i][3];
 
 3413        if( xmin > 0. ) xmin = 0.;
 
 3414        if( xmax < 0.)  xmax = 0.;
 
 3415        if( ymin > 0. ) ymin = 0.;
 
 3416        if( ymax < 0.)  ymax = 0.;
 
 3419        deltay = ymax - ymin;
 
 3421        if( deltax > deltay) {
 
 3422          ymin -=  0.5*(deltax-deltay);
 
 3423          ymax = ymin+ deltax;
 
 3426          xmin -=  0.5*(deltay-deltax);
 
 3427          xmax = xmin+ deltay;
 
 3431        xmax = xmax + delta*0.15;
 
 3432        xmin = xmin - delta*0.15;
 
 3434        ymax = ymax + delta*0.15;
 
 3435        ymin = ymin - delta*0.15;
 
 3438        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 3463        for( i=0; i< Nhits; i++) {
 
 3464          if( info[i][5] == 1 ) {     
 
 3465             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 3466                      i,info[i][0],info[i][1],info[i][3],info[i][3],i,i);
 
 3475     for(i=0; i<nTracksFoundSoFar; i++){
 
 3476         if(!keepit[i]) 
continue;
 
 3481        rrr = 
sqrt( aaa*aaa+bbb*bbb);
 
 3484 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
 3485                      i,aaa,bbb,rrr,rrr,i,i,i);
 
 3490          fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,0.,ymin,0.,ymax);
 
 3491          fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3492          fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3498          fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 3499          fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3500          fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3508   cout<<
"stampa da WriteMacroParallelHitsGeneral , for trackfoundsofar n. "<<i<<
",  typconf "<<
 
 3510        <<
"  a cui corrisponde  Cx = "<<-0.5*
ALFA[
i]<<
",  Cy = "<<-0.5*
BETA[
i]<<
" ed  R = " 
 3512        << 
sqrt( aaa*aaa+bbb*bbb) <<endl;
 
 3524       fprintf(MACRO,
"}\n");
 
 3537       sprintf(nome,
"MacroSttParwithMCEvent%d", 
IVOLTE);
 
 3538       sprintf(nome2,
"%s.C",nome);
 
 3539       MACRO = fopen(nome2,
"w");
 
 3540       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 3555        for( i=0; i< Nhits; i++) {
 
 3556          if( info[i][5] == 1 ) {     
 
 3557             if (info[i][0]-info[i][3] < xmin)   xmin = info[
i][0]-info[
i][3];
 
 3558             if (info[i][0]+info[i][3] > xmax)   xmax = info[
i][0]+info[
i][3];
 
 3559             if (info[i][1]-info[i][3] < ymin)   ymin = info[
i][1]-info[
i][3];
 
 3560             if (info[i][1]+info[i][3] > ymax)   ymax = info[
i][1]+info[
i][3];
 
 3564        if( xmin > 0. ) xmin = 0.;
 
 3565        if( xmax < 0.)  xmax = 0.;
 
 3566        if( ymin > 0. ) ymin = 0.;
 
 3567        if( ymax < 0.)  ymax = 0.;
 
 3570        deltay = ymax - ymin;
 
 3572        if( deltax > deltay) {
 
 3573          ymin -=  0.5*(deltax-deltay);
 
 3574          ymax = ymin+ deltax;
 
 3577          xmin -=  0.5*(deltay-deltax);
 
 3578          xmax = xmin+ deltay;
 
 3582        xmax = xmax + delta*0.15;
 
 3583        xmin = xmin - delta*0.15;
 
 3585        ymax = ymax + delta*0.15;
 
 3586        ymin = ymin - delta*0.15;
 
 3589        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 3617        for( i=0; i< Nhits; i++) {
 
 3618          if( info[i][5] == 1 ) {     
 
 3619             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 3620                      i,info[i][0],info[i][1],info[i][3],info[i][3],i,i);
 
 3626          Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica  ;
 
 3630                 if ( ! pMC ) 
continue;
 
 3636                 aaa = 
sqrt( Px*Px + Py*Py);
 
 3638          TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 3639          TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 3640        if (icode>1000000000) carica = 1.;
 
 3641        else  carica = fParticle->Charge()/3. ;    
 
 3642         if( 
fabs(carica)<0.1) 
continue;
 
 3645             fprintf(MACRO,
"TEllipse* MC%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMC%d->SetFillStyle(0);\nMC%d->SetLineColor(3);\nMC%d->Draw();\n",
 
 3646                      im,Cx,Cy,Rr,Rr,im,im,im);
 
 3653     for(i=0; i<nTracksFoundSoFar; i++){
 
 3654         if(!keepit[i]) 
continue;
 
 3660        fprintf(MACRO,
"TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
 3661                      i,aaa,bbb,rrr,rrr,i,i,i);
 
 3664          fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,- 
GAMMA[i]/
ALFA[i],ymin,- 
GAMMA[i]/
ALFA[i],ymax);
 
 3665          fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3666          fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3670          fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 3671          fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3672          fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3681       fprintf(MACRO,
"}\n");
 
 3692       sprintf(nome,
"MacroSttParConformeEvent%d", 
IVOLTE);
 
 3693       sprintf(nome2,
"%s.C",nome);
 
 3694       MACRO = fopen(nome2,
"w");
 
 3695       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 3708             USciTil[
i] = posizSciTil[
i][0]/erre;
 
 3709             VSciTil[
i] = posizSciTil[
i][1]/erre;
 
 3710             if (USciTil[i] < xmin)   xmin = USciTil[
i];
 
 3711             if (USciTil[i] > xmax)   xmax = USciTil[
i];
 
 3712             if (VSciTil[i] < ymin)   ymin = VSciTil[
i];
 
 3713             if (VSciTil[i] > ymax)   ymax = VSciTil[
i];
 
 3719        for( i=0; i< Nhits; i++) {
 
 3720          if( info[i][5] == 1 ) {     
 
 3722             gamma = info[
i][0]*info[
i][0] + info[
i][1]*info[
i][1] - info[
i][3]*info[
i][3];
 
 3723             Ox[
i] = info[
i][0] / gamma;
 
 3724             Oy[
i] = info[
i][1] / gamma;
 
 3725             Radius[
i] = info[
i][3]/gamma;
 
 3726             if (Ox[i]-Radius[i] < xmin)   xmin = Ox[
i]-Radius[
i];
 
 3727             if (Ox[i]+Radius[i] > xmax)   xmax = Ox[
i]+Radius[
i];
 
 3728             if (Oy[i]-Radius[i] < ymin)   ymin = Oy[
i]-Radius[
i];
 
 3729             if (Oy[i]+Radius[i] > ymax)   ymax = Oy[
i]+Radius[
i];
 
 3733        if( xmin > 0. ) xmin = 0.;
 
 3734        if( xmax < 0.)  xmax = 0.;
 
 3735        if( ymin > 0. ) ymin = 0.;
 
 3736        if( ymax < 0.)  ymax = 0.;
 
 3739        deltay = ymax - ymin;
 
 3741        if( deltax > deltay) {
 
 3742          ymin -=  0.5*(deltax-deltay);
 
 3743          ymax = ymin+ deltax;
 
 3746          xmin -=  0.5*(deltay-deltax);
 
 3747          xmax = xmin+ deltay;
 
 3751        xmax = xmax + delta*0.15;
 
 3752        xmin = xmin - delta*0.15;
 
 3754        ymax = ymax + delta*0.15;
 
 3755        ymin = ymin - delta*0.15;
 
 3758        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 3762        fprintf(MACRO,
"TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
 
 3766             fprintf(MACRO,
"TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
 
 3778             fprintf(MACRO,
"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(4);\nSeg%d->Draw();\n",
 
 3790  fprintf(MACRO,
"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(6);\nSeg%d->Draw();\n",
 
 3795        fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
 
 3796        fprintf(MACRO,
"Assex->SetTitle(\"U    \");\n");
 
 3797        fprintf(MACRO,
"Assex->SetTitleOffset(1.5);\n");
 
 3798        fprintf(MACRO,
"Assex->Draw();\n");
 
 3799        fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
 
 3800        fprintf(MACRO,
"Assey->SetTitle(\"V    \");\n");
 
 3801        fprintf(MACRO,
"Assey->SetTitleOffset(1.5);\n");
 
 3802        fprintf(MACRO,
"Assey->Draw();\n");
 
 3806        for( i=0; i< Nhits; i++) {
 
 3807          if( info[i][5] == 1 ) {     
 
 3808             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 3809                      i,Ox[i],Oy[i],Radius[i],Radius[i],i,i);
 
 3839     for(i=0; i<nTracksFoundSoFar; i++){
 
 3840         if(!keepit[i]) 
continue;
 
 3855           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,-1./
ALFA[i],ymin,- 1./
ALFA[i],ymax);
 
 3856           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3857           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3862           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 3863           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3864           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3874        rrr = 
sqrt( aaa*aaa+bbb*bbb);
 
 3875        fprintf(MACRO,
"TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
 3876                      i,aaa,bbb,rrr,rrr,i,i,i);
 
 3881           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 3882           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3883           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3885           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,0.,ymin,0.,ymax);
 
 3886           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 3887           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 3896      fprintf(MACRO,
"}\n");
 
 3916                     Int_t Minclinations[],
 
 3918                    Short_t nTracksFoundSoFar
 
 3922     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS;
 
 3926            dx, 
dy, diff, d1, d2,
 
 3927            delta, deltax, deltay, deltaz, deltaS,
 
 3929            zmin, zmax, Smin, Smax, S1, S2,
 
 3930            z1, z2, y1, y2,x1,x2,
 
 3931            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 3932            aaa, bbb, 
ccc, 
angle, minor, major,
 
 3933            distance, Rx, Ry, LL,
 
 3934            Aellipsis1, Bellipsis1,fi1,
 
 3935            fmin, fmax, 
offset, step,
 
 3936            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 3943       char nome[300], nome2[300];
 
 3951       sprintf(nome,
"MacroSttParConformewithMCEvent%d", 
IVOLTE);
 
 3952       sprintf(nome2,
"%s.C",nome);
 
 3953       MACRO = fopen(nome2,
"w");
 
 3954       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 3965             USciTil[
i] = posizSciTil[
i][0]/erre;
 
 3966             VSciTil[
i] = posizSciTil[
i][1]/erre;
 
 3967             if (USciTil[i] < xmin)   xmin = USciTil[
i];
 
 3968             if (USciTil[i] > xmax)   xmax = USciTil[
i];
 
 3969             if (VSciTil[i] < ymin)   ymin = VSciTil[
i];
 
 3970             if (VSciTil[i] > ymax)   ymax = VSciTil[
i];
 
 3974        for( i=0; i< Nhits; i++) {
 
 3975          if( info[i][5] == 1 ) {     
 
 3977             gamma = info[
i][0]*info[
i][0] + info[
i][1]*info[
i][1] - info[
i][3]*info[
i][3];
 
 3978             Ox[
i] = info[
i][0] / gamma;
 
 3979             Oy[
i] = info[
i][1] / gamma;
 
 3980             Radius[
i] = info[
i][3]/gamma;
 
 3981             if (Ox[i]-Radius[i] < xmin)   xmin = Ox[
i]-Radius[
i];
 
 3982             if (Ox[i]+Radius[i] > xmax)   xmax = Ox[
i]+Radius[
i];
 
 3983             if (Oy[i]-Radius[i] < ymin)   ymin = Oy[
i]-Radius[
i];
 
 3984             if (Oy[i]+Radius[i] > ymax)   ymax = Oy[
i]+Radius[
i];
 
 3988        if( xmin > 0. ) xmin = 0.;
 
 3989        if( xmax < 0.)  xmax = 0.;
 
 3990        if( ymin > 0. ) ymin = 0.;
 
 3991        if( ymax < 0.)  ymax = 0.;
 
 3994        deltay = ymax - ymin;
 
 3996        if( deltax > deltay) {
 
 3997          ymin -=  0.5*(deltax-deltay);
 
 3998          ymax = ymin+ deltax;
 
 4001          xmin -=  0.5*(deltay-deltax);
 
 4002          xmax = xmin+ deltay;
 
 4006        xmax = xmax + delta*0.15;
 
 4007        xmin = xmin - delta*0.15;
 
 4009        ymax = ymax + delta*0.15;
 
 4010        ymin = ymin - delta*0.15;
 
 4013        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 4017        fprintf(MACRO,
"TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
 
 4021             fprintf(MACRO,
"TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
 
 4033             fprintf(MACRO,
"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(4);\nSeg%d->Draw();\n",
 
 4045  fprintf(MACRO,
"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(6);\nSeg%d->Draw();\n",
 
 4050        fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
 
 4051        fprintf(MACRO,
"Assex->SetTitle(\"U    \");\n");
 
 4052        fprintf(MACRO,
"Assex->SetTitleOffset(1.5);\n");
 
 4053        fprintf(MACRO,
"Assex->Draw();\n");
 
 4054        fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
 
 4055        fprintf(MACRO,
"Assey->SetTitle(\"V    \");\n");
 
 4056        fprintf(MACRO,
"Assey->SetTitleOffset(1.5);\n");
 
 4057        fprintf(MACRO,
"Assey->Draw();\n");
 
 4060        for( i=0; i< Nhits; i++) {
 
 4061          if( info[i][5] == 1 ) {     
 
 4062 fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetLineWidth(2);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 4063                      i,Ox[i],Oy[i],Radius[i],Radius[i],i,i,i);
 
 4088     for(i=0; i<nTracksFoundSoFar; i++){
 
 4089         if(!keepit[i]) 
continue;
 
 4096        rrr = 
sqrt( aaa*aaa+bbb*bbb-1./
GAMMA[i]);
 
 4099 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
 4100                      i,aaa,bbb,rrr,rrr,i,i,i);
 
 4106           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4107           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 4108           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 4119           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,-1./
ALFA[i],ymin,- 1./
ALFA[i],ymax);
 
 4120           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 4121           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 4126           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4127           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 4128           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 4139        rrr = 
sqrt( aaa*aaa+bbb*bbb);
 
 4140        fprintf(MACRO,
"TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
 4141                      i,aaa,bbb,rrr,rrr,i,i,i);
 
 4146           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4147           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 4148           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 4150           fprintf(MACRO,
"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,0.,ymin,0.,ymax);
 
 4151           fprintf(MACRO,
"ris%d->SetLineColor(2);\n",i);
 
 4152           fprintf(MACRO,
"ris%d->Draw();\n",i);
 
 4166          Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica  ;
 
 4170                 if ( ! pMC ) 
continue;
 
 4176                 aaa = 
sqrt( Px*Px + Py*Py);
 
 4178          TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 4179          TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 4180        if (icode>1000000000) carica = 1.;
 
 4181        else  carica = fParticle->Charge()/3. ;    
 
 4182        if (
fabs(carica)<0.1 ) 
continue;
 
 4185     gamma = -Rr*Rr + Cx*Cx+Cy*Cy;
 
 4186     if(
fabs(gamma)< 0.001) {
 
 4188        yl = xmin*(-Cx/Cy) + 0.5/Cy;
 
 4189        yu = xmax*(-Cx/Cy) + 0.5/Cy;
 
 4197        fprintf(MACRO,
"TLine* MCris%d = new TLine(%f,%f,%f,%f);\n",i,xl,yl,xu,yu);
 
 4198        fprintf(MACRO,
"MCris%d->SetLineStyle(2);\n",i);
 
 4199        fprintf(MACRO,
"MCris%d->SetLineColor(3);\n",i);
 
 4200        fprintf(MACRO,
"MCris%d->SetLineWidth(1);\n",i);
 
 4201        fprintf(MACRO,
"MCris%d->Draw();\n",i);
 
 4204        if(
fabs(Rr/gamma) > 1.) {
 
 4205          if(
fabs(Cy)>0.001 ) {
 
 4206            yl = -xmin*Cx/Cy+0.5/Cy;
 
 4207            yu = -xmax*Cx/Cy+0.5/Cy;
 
 4208            fprintf(MACRO,
"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4209            fprintf(MACRO,
"MCline%d->SetLineColor(3);\n",i);
 
 4210            fprintf(MACRO,
"MCline%d->Draw();\n",i);
 
 4212            fprintf(MACRO,
"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,2.*
CxMC[i],ymin,2.*
CxMC[i],ymax);
 
 4213            fprintf(MACRO,
"MCline%d->SetLineColor(2);\n",i);
 
 4214            fprintf(MACRO,
"MCline%d->Draw();\n",i);
 
 4217            fprintf(MACRO, 
"TEllipse* MCcerchio%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMCcerchio%d->SetLineColor(3);\n",
 
 4218                      i,Cx/gamma,Cy/gamma,Rr/
fabs(gamma),Rr/
fabs(gamma),i);
 
 4220            fprintf(MACRO,
"MCcerchio%d->SetFillStyle(0);\nMCcerchio%d->SetLineStyle(2);\nMCcerchio%d->SetLineWidth(1);\nMCcerchio%d->Draw();\n",
 
 4228      fprintf(MACRO,
"}\n");
 
 4245                    Double_t auxinfoparalConformal[][5],
 
 4246                    Short_t nTracksFoundSoFar,
 
 4255     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS;
 
 4257     Double_t xmin , 
xmax, ymin, ymax, xl, xu, yl, yu, rrr, 
cx, 
cy,
 
 4259            dx, 
dy, diff, d1, d2,
 
 4260            delta, deltax, deltay, deltaz, deltaS,
 
 4262            zmin, zmax, Smin, Smax, S1, S2,
 
 4263            z1, z2, y1, y2,x1,x2,
 
 4264            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 4265            aaa, bbb, 
ccc, 
angle, minor, major,
 
 4266            distance, Rx, Ry, LL,
 
 4267            Aellipsis1, Bellipsis1,fi1,
 
 4268            fmin, fmax, 
offset, step,
 
 4269            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 4278       char nome[300], nome2[300];
 
 4285       sprintf(nome,
"MacroSttParConformewithMCspecialEvent%dTrack%d", 
IVOLTE,nTracksFoundSoFar);
 
 4286       sprintf(nome2,
"%s.C",nome);
 
 4287       MACRO = fopen(nome2,
"w");
 
 4288       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 4293        for( i=0; i< Nhits; i++) {
 
 4296             Ox[
i] = auxinfoparalConformal[
i][0] ;
 
 4297             Oy[
i] = auxinfoparalConformal[
i][1] ;
 
 4298             Radius[
i] = auxinfoparalConformal[
i][2];
 
 4299             if (Ox[i]-Radius[i] < xmin)   xmin = Ox[
i]-Radius[
i];
 
 4300             if (Ox[i]+Radius[i] > xmax)   xmax = Ox[
i]+Radius[
i];
 
 4301             if (Oy[i]-Radius[i] < ymin)   ymin = Oy[
i]-Radius[
i];
 
 4302             if (Oy[i]+Radius[i] > ymax)   ymax = Oy[
i]+Radius[
i];
 
 4305        if( xmin > 0. ) xmin = 0.;
 
 4306        if( xmax < 0.)  xmax = 0.;
 
 4307        if( ymin > 0. ) ymin = 0.;
 
 4308        if( ymax < 0.)  ymax = 0.;
 
 4311        deltay = ymax - ymin;
 
 4313        if( deltax > deltay) {
 
 4314          ymin -=  0.5*(deltax-deltay);
 
 4315          ymax = ymin+ deltax;
 
 4318          xmin -=  0.5*(deltay-deltax);
 
 4319          xmax = xmin+ deltay;
 
 4323        xmax = xmax + delta*0.15;
 
 4324        xmin = xmin - delta*0.15;
 
 4326        ymax = ymax + delta*0.15;
 
 4327        ymin = ymin - delta*0.15;
 
 4330        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 4333        fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
 
 4334        fprintf(MACRO,
"Assex->Draw();\n");
 
 4335        fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
 
 4336        fprintf(MACRO,
"Assey->Draw();\n");
 
 4339        for( i=0; i< Nhits; i++) {
 
 4341             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetLineWidth(2);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 4342                      i,Ox[i],Oy[i],Radius[i],Radius[i],i,i,i);
 
 4350      i = nTracksFoundSoFar;
 
 4353           rrr = 
sqrt( 0.25*
ALFA[nTracksFoundSoFar]*
ALFA[nTracksFoundSoFar] + 0.25*
BETA[nTracksFoundSoFar]*
BETA[nTracksFoundSoFar]
 
 4354                     -
GAMMA[nTracksFoundSoFar]);
 
 4355           alfa = 
ALFA[nTracksFoundSoFar]+2.*trajectory_vertex[0];
 
 4356           beta = 
BETA[nTracksFoundSoFar]+2.*trajectory_vertex[1];
 
 4359           gamma = cx*cx+cy*cy-rrr*rrr;
 
 4361        if(
fabs(gamma) > 1.e-8){
 
 4362           fprintf(MACRO, 
"TEllipse* FoundTrack%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nFoundTrack%d->SetLineColor(2);\n",
 
 4363                      i,cx/gamma,cy/gamma,rrr/
fabs(gamma),rrr/
fabs(gamma),i);
 
 4364           fprintf(MACRO,
"FoundTrack%d->SetFillStyle(0);\nFoundTrack%d->SetLineStyle(2);\nFoundTrack%d->SetLineWidth(1);\nFoundTrack%d->Draw();\n",
 
 4367           if( 
fabs(beta) > 1.e-8){
 
 4368             yl = -xmin*alfa/beta-1./beta ;
 
 4369             yu = -xmax*alfa/beta-1./beta  ;
 
 4370             fprintf(MACRO,
"TLine* FoundTrack%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4371             fprintf(MACRO,
"FoundTrack%d->SetLineColor(2);\n",i);
 
 4372             fprintf(MACRO,
"FoundTrack%d->Draw();\n",i);
 
 4374             fprintf(MACRO,
"TLine* FoundTrack%d = new TLine(%f,%f,%f,%f);\n",i,-1./alfa,ymin,-1./alfa,ymax);
 
 4375             fprintf(MACRO,
"FoundTrack%d->SetLineColor(2);\n",i);
 
 4376             fprintf(MACRO,
"FoundTrack%d->Draw();\n",i);
 
 4383           alfa = 
ALFA[nTracksFoundSoFar];
 
 4384           beta = 
BETA[nTracksFoundSoFar];
 
 4385           gamma = 
GAMMA[nTracksFoundSoFar]+
ALFA[nTracksFoundSoFar]*trajectory_vertex[0]+
BETA[nTracksFoundSoFar]*trajectory_vertex[1];
 
 4387           if( 
fabs(beta) > 1.e-8){
 
 4388             yl = -xmin*alfa/beta-1./beta ;
 
 4389             yu = -xmax*alfa/beta-1./beta  ;
 
 4390             fprintf(MACRO,
"TLine* FoundTrack%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4391             fprintf(MACRO,
"FoundTrack%d->SetLineColor(2);\n",i);
 
 4392             fprintf(MACRO,
"FoundTrack%d->Draw();\n",i);
 
 4394             fprintf(MACRO,
"TLine* FoundTrack%d = new TLine(%f,%f,%f,%f);\n",i,-1./alfa,ymin,-1./alfa,ymax);
 
 4395             fprintf(MACRO,
"FoundTrack%d->SetLineColor(2);\n",i);
 
 4396             fprintf(MACRO,
"FoundTrack%d->Draw();\n",i);
 
 4412          Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica  ;
 
 4416                 if ( ! pMC ) 
continue;
 
 4422                 aaa = 
sqrt( Px*Px + Py*Py);
 
 4424          TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 4425          TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 4426        if (icode>1000000000) carica = 1.;
 
 4427        else  carica = fParticle->Charge()/3. ;    
 
 4428        if(
fabs(carica)<0.1)  
continue;
 
 4434      cx = Cx - trajectory_vertex[0];
 
 4435      cy = Cy - trajectory_vertex[1];
 
 4436      gamma = -Rr*Rr + (cx*cx+cy*
cy);
 
 4441     if(
fabs(gamma)< 0.001) {
 
 4444        yl = xmin*(-cx/
cy) + 0.5/cy;
 
 4445        yu = xmax*(-cx/
cy) + 0.5/cy;
 
 4453        fprintf(MACRO,
"TLine* MCris%d = new TLine(%f,%f,%f,%f);\n",i,xl,yl,xu,yu);
 
 4454        fprintf(MACRO,
"MCris%d->SetLineStyle(2);\n",i);
 
 4455        fprintf(MACRO,
"MCris%d->SetLineColor(3);\n",i);
 
 4456        fprintf(MACRO,
"MCris%d->SetLineWidth(1);\n",i);
 
 4457        fprintf(MACRO,
"MCris%d->Draw();\n",i);
 
 4462        if(
fabs(Rr/gamma) > 1.) {
 
 4463          if(
fabs(Cy)>0.001 ) {
 
 4464            yl = -xmin*Cx/Cy+0.5/Cy;
 
 4465            yu = -xmax*Cx/Cy+0.5/Cy;
 
 4466            fprintf(MACRO,
"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
 
 4467            fprintf(MACRO,
"MCline%d->SetLineColor(3);\n",i);
 
 4468            fprintf(MACRO,
"MCline%d->Draw();\n",i);
 
 4470            fprintf(MACRO,
"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,2.*
CxMC[i],ymin,2.*
CxMC[i],ymax);
 
 4471            fprintf(MACRO,
"MCline%d->SetLineColor(2);\n",i);
 
 4472            fprintf(MACRO,
"MCline%d->Draw();\n",i);
 
 4479      "TEllipse* MCcerchio%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMCcerchio%d->SetLineColor(3);\n",
 
 4480                      i,cx/gamma,cy/gamma,Rr/
fabs(gamma),Rr/
fabs(gamma),i);
 
 4482  "MCcerchio%d->SetFillStyle(0);\nMCcerchio%d->SetLineStyle(2);\nMCcerchio%d->SetLineWidth(1);\nMCcerchio%d->Draw();\n",
 
 4495      fprintf(MACRO,
"}\n");
 
 4522         Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
 4523         Double_t info[][7], Int_t Nincl, Int_t Minclinations[],
 
 4527         Short_t nscitilhitsintrack,
 
 4528         Short_t *listscitilhitsintrack
 
 4532     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS;
 
 4535            dx, 
dy, diff, d1, d2,
 
 4536            delta, deltax, deltay, deltaz, deltaS,
 
 4538            zmin, zmax, Smin, Smax, S1, S2,
 
 4540            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 4541            aaa, bbb, 
ccc, 
angle, minor, major,
 
 4542            distance, Rx, Ry, LL,
 
 4543            Aellipsis1, Bellipsis1,fi1,
 
 4544            fmin, fmax, 
offset, step,
 
 4545            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 4561       char nome[300], nome2[300];
 
 4562       sprintf(nome,
"MacroSttParEvent%dT%d", 
IVOLTE,sequencial);
 
 4563       sprintf(nome2,
"%s.C",nome);
 
 4564       FILE * MACRO = fopen(nome2,
"w");
 
 4565       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 4572        if(nscitilhitsintrack>0) {
 
 4573         for(j=0;j<nscitilhitsintrack;j++){
 
 4574             i = listscitilhitsintrack[j] ;
 
 4583        for( ii=0; ii< Nhits; ii++) {
 
 4584             i = 
infoparal[  ListHitsinTrack[imaxima][ii]  ] ;
 
 4585             if (info[i][0]-info[i][3] < xmin)   xmin = info[
i][0]-info[
i][3];
 
 4586             if (info[i][0]+info[i][3] > xmax)   xmax = info[
i][0]+info[
i][3];
 
 4587             if (info[i][1]-info[i][3] < ymin)   ymin = info[
i][1]-info[
i][3];
 
 4588             if (info[i][1]+info[i][3] > ymax)   ymax = info[
i][1]+info[
i][3];
 
 4591        if( xmin > 0. ) xmin = 0.;
 
 4592        if( xmax < 0.)  xmax = 0.;
 
 4593        if( ymin > 0. ) ymin = 0.;
 
 4594        if( ymax < 0.)  ymax = 0.;
 
 4597        deltay = ymax - ymin;
 
 4599        if( deltax > deltay) {
 
 4600          ymin -=  0.5*(deltax-deltay);
 
 4601          ymax = ymin+ deltax;
 
 4604          xmin -=  0.5*(deltay-deltax);
 
 4605          xmax = xmin+ deltay;
 
 4609        xmax = xmax + delta*0.15;
 
 4610        xmin = xmin - delta*0.15;
 
 4612        ymax = ymax + delta*0.15;
 
 4613        ymin = ymin - delta*0.15;
 
 4616        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 4618        fprintf(MACRO,
"TEllipse* TC = new TEllipse(%f,%f,%f,%f,0.,360.);\n",Ox,Oy,R,R);
 
 4619        fprintf(MACRO,
"TC->SetLineColor(2);\nTC->SetFillStyle(0);\nTC->Draw();\n");
 
 4624        for( ii=0; ii< Nhits; ii++) {
 
 4625             i = 
infoparal[  ListHitsinTrack[imaxima][ii]  ] ;
 
 4626             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
 4627                      i,info[i][0],info[i][1],info[i][3],info[i][3],i,i);
 
 4633         if(nscitilhitsintrack>0) {
 
 4634           for(j=0;j<nscitilhitsintrack;j++){
 
 4635                 i = listscitilhitsintrack[j] ;
 
 4658       fprintf(MACRO,
"}\n");
 
 4684         Short_t TrackFoundaTrackMC,
 
 4686         Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
 4688         Short_t ifoundtrack,
 
 4689         Int_t sequentialNTrack,
 
 4690         Short_t nscitilhitsintrack,
 
 4691         Short_t *listscitilhitsintrack,
 
 4692                 Short_t nParalCommon[MAXTRACKSPEREVENT],
 
 4693                 Short_t ParalCommonList[MAXTRACKSPEREVENT][nmaxHits],
 
 4694                 Short_t nSpuriParinTrack[MAXTRACKSPEREVENT],
 
 4695                 Short_t ParSpuriList[MAXTRACKSPEREVENT][nmaxHits],
 
 4696                 Short_t nMCParalAlone[MAXTRACKSPEREVENT],
 
 4697                 Short_t MCParalAloneList[MAXTRACKSPEREVENT][nmaxHits]
 
 4701     Int_t 
i, j, i1, ii, index, imaxima, Kincl, nlow, nup, STATUS;
 
 4704            dx, 
dy, diff, d1, d2,
 
 4705            delta, deltax, deltay, deltaz, deltaS,
 
 4707            zmin, zmax, Smin, Smax, S1, S2,
 
 4709            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 4710            aaa, bbb, 
ccc, 
angle, minor, major,
 
 4711            distance, Rx, Ry, LL,
 
 4712            Aellipsis1, Bellipsis1,fi1,
 
 4713            fmin, fmax, 
offset, step,
 
 4714            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 4721         imaxima=ifoundtrack;
 
 4726       char nome[300], nome2[300];
 
 4727       sprintf(nome,
"MacroSttParwithMCEvent%dT%d", 
IVOLTE,sequentialNTrack);
 
 4728       sprintf(nome2,
"%s.C",nome);
 
 4729       FILE * MACRO = fopen(nome2,
"w");
 
 4730       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 4737        if(nscitilhitsintrack>0) {
 
 4738         for(j=0;j<nscitilhitsintrack;j++){
 
 4739             i = listscitilhitsintrack[j] ;
 
 4748        for( ii=0; ii< Nhits; ii++) {
 
 4749             i = 
infoparal[  ListHitsinTrack[imaxima][ii]  ] ;
 
 4750             if (info[i][0]-info[i][3] < xmin)   xmin = info[
i][0]-info[
i][3];
 
 4751             if (info[i][0]+info[i][3] > xmax)   xmax = info[
i][0]+info[
i][3];
 
 4752             if (info[i][1]-info[i][3] < ymin)   ymin = info[
i][1]-info[
i][3];
 
 4753             if (info[i][1]+info[i][3] > ymax)   ymax = info[
i][1]+info[
i][3];
 
 4756        if( xmin > 0. ) xmin = 0.;
 
 4757        if( xmax < 0.)  xmax = 0.;
 
 4758        if( ymin > 0. ) ymin = 0.;
 
 4759        if( ymax < 0.)  ymax = 0.;
 
 4762        deltay = ymax - ymin;
 
 4764        if( deltax > deltay) {
 
 4765          ymin -=  0.5*(deltax-deltay);
 
 4766          ymax = ymin+ deltax;
 
 4769          xmin -=  0.5*(deltay-deltax);
 
 4770          xmax = xmin+ deltay;
 
 4774        xmax = xmax + delta*0.15;
 
 4775        xmin = xmin - delta*0.15;
 
 4777        ymax = ymax + delta*0.15;
 
 4778        ymin = ymin - delta*0.15;
 
 4781        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
 4783        fprintf(MACRO,
"TEllipse* TC = new TEllipse(%f,%f,%f,%f,0.,360.);\n",Ox,Oy,R,R);
 
 4784        fprintf(MACRO,
"TC->SetLineColor(2);\nTC->SetFillStyle(0);\nTC->Draw();\n");
 
 4788        for( ii=0; ii< nParalCommon[ifoundtrack]; ii++) {
 
 4789             i = ParalCommonList[ifoundtrack][ii] ;
 
 4790             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);",
 
 4791                      i,info[i][0],info[i][1],info[i][3],info[i][3],i);
 
 4792             fprintf(MACRO,
"E%d->Draw();\n",i);
 
 4795        for( ii=0; ii< nSpuriParinTrack[ifoundtrack]; ii++) {
 
 4796             i = ParSpuriList[ifoundtrack][ii] ;
 
 4798          "TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);",
 
 4799                      i,info[i][0],info[i][1],info[i][3],info[i][3],i);
 
 4800                 fprintf(MACRO,
"E%d->SetLineColor(2);\n",i);
 
 4801             fprintf(MACRO,
"E%d->Draw();\n",i);
 
 4804        for( ii=0; ii< nMCParalAlone[ifoundtrack]; ii++) {
 
 4805             i = MCParalAloneList[ifoundtrack][ii] ;
 
 4807          "TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);",
 
 4808                      i,info[i][0],info[i][1],info[i][3],info[i][3],i);
 
 4809                 fprintf(MACRO,
"E%d->SetLineColor(4);\n",i);
 
 4810             fprintf(MACRO,
"E%d->Draw();\n",i);
 
 4817         if(nscitilhitsintrack>0) {
 
 4818           for(j=0;j<nscitilhitsintrack;j++){
 
 4819                 i = listscitilhitsintrack[j] ;
 
 4847          Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica  ;
 
 4849  if( TrackFoundaTrackMC > -1){
 
 4850         im=TrackFoundaTrackMC;
 
 4858                 aaa = 
sqrt( Px*Px + Py*Py);
 
 4860          TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
 4861          TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
 4862        if (icode>1000000000) carica = 1.;
 
 4863        else  carica = fParticle->Charge()/3. ;    
 
 4864         if( 
fabs(carica)>=0.1){
 
 4867             fprintf(MACRO,
"TEllipse* MC%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMC%d->SetFillStyle(0);\nMC%d->SetLineColor(3);\nMC%d->Draw();\n",
 
 4868                      im,Cx,Cy,Rr,Rr,im,im,im);
 
 4878       fprintf(MACRO,
"}\n");
 
 4905                    Int_t Minclinations[],
 
 4908         Int_t sequentialNTrack,
 
 4909         Short_t nSttSkewhitinTrack,
 
 4910         Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
 4911         Short_t nscitilhits,
 
 4920     Int_t 
i, j, i1, ii, iii, index, Kincl, nlow, nup, STATUS, imc, Nmin, Nmax;
 
 4923            dx, 
dy, diff, d1, d2,
 
 4924            delta, deltax, deltay, deltaz, deltaS,
 
 4926            zmin, zmax, Smin, Smax, S1, S2,
 
 4928            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 4929            aaa, bbb, 
ccc, 
angle, minor, major,
 
 4930            distance, Rx, Ry, LL,
 
 4931            Aellipsis1, Bellipsis1,fi1,
 
 4932            fmin, fmax, 
offset, step,
 
 4933            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 4944       char  nome2[300],nome[300];
 
 4946       sprintf(nome,
"MacroSttSkewEvent%dT%d",
IVOLTE,sequentialNTrack);
 
 4947       sprintf(nome2,  
"%s.C",nome);
 
 4948       MACRO = fopen(nome2,
"w");
 
 4949       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 4958  for(i=0;i<nscitilhits;i++){
 
 4959                 if( ESSE[i]>Smax ) Smax=ESSE[
i];
 
 4960                 if( ESSE[i]<Smin ) Smin=ESSE[
i];
 
 4961                 if( ZETA[i]>zmax ) zmax=ZETA[
i];
 
 4962                 if( ZETA[i]<zmin ) zmin=ZETA[
i];
 
 4970        for( iii=0; iii< nSttSkewhitinTrack; iii++) {
 
 4971          i = 
infoskew[ ListSkewHitsinTrack[imaxima][iii] ];
 
 4973          Kincl = (int) info[i][5] - 1;
 
 4976          aaa = 
sqrt(inclination[Kincl][0]*inclination[Kincl][0]+inclination[Kincl][1]*inclination[Kincl][1]+
 
 4977                   inclination[Kincl][2]*inclination[Kincl][2]);
 
 4978          vx1 = inclination[Kincl][0]/aaa;
 
 4979          vy1 = inclination[Kincl][1]/aaa;
 
 4980          vz1 = inclination[Kincl][2]/aaa;
 
 4991        if(STATUS < 0 ) continue ;
 
 4995        for( ii=0; ii<2; ii++){
 
 4998                   (POINTS1[j]-C0x1)*(POINTS1[j]-C0x1) + 
 
 4999                   (POINTS1[1+j]-C0y1)*(POINTS1[1+j]-C0y1) + 
 
 5000                   (POINTS1[2+j]-C0z1)*(POINTS1[2+j]-C0z1) 
 
 5004         Rx = POINTS1[j]-Ox ;   
 
 5005         Ry = POINTS1[1+j]-Oy ;   
 
 5007         aaa = 
sqrt(Rx*Rx+Ry*Ry);
 
 5008         SkewInclWithRespectToS = (-Ry*vx1 + Rx*vy1)/aaa ;
 
 5009         SkewInclWithRespectToS /= 
R;
 
 5010         bbb = 
sqrt( SkewInclWithRespectToS*SkewInclWithRespectToS + vz1*vz1);
 
 5013            Tiltdirection1[0] = vz1/bbb;
 
 5014            Tiltdirection1[1] = SkewInclWithRespectToS/bbb;
 
 5016            Tiltdirection1[0] = 1.;
 
 5017            Tiltdirection1[1] = 0.;
 
 5020         LL = 
fabs(vx1*Rx + vy1*Ry);
 
 5021         if( LL < 1.e-10) 
continue;
 
 5022         Aellipsis1 = info[
i][3]*aaa/LL;
 
 5024         Bellipsis1 = info[
i][3]/
R;
 
 5026         if( distance >= info[i][4] + Aellipsis1) 
continue;
 
 5034         fi1 = 
atan2(POINTS1[j+1]-Oy, POINTS1[j]-Ox) ;  
 
 5035         if( fi1 < 0.) fi1 += 2.*
PI;
 
 5037         if( zmin > POINTS1[j+2] - Aellipsis1 ) zmin = POINTS1[j+2] - Aellipsis1;
 
 5038         if( zmax < POINTS1[j+2] + Aellipsis1 ) zmax = POINTS1[j+2] + Aellipsis1;
 
 5040         if( Smin > fi1 - Bellipsis1 ) Smin = fi1 - Bellipsis1;
 
 5041         if( Smax < fi1 + Bellipsis1 ) Smax = fi1 + Bellipsis1;
 
 5044         Double_t rotation1 = 180.*
atan2(Tiltdirection1[1],Tiltdirection1[0])/
PI;
 
 5045 fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nE%d->SetFillStyle(0);\n",
 
 5046                      index,POINTS1[j+2],fi1,Aellipsis1,Bellipsis1,rotation1,index);
 
 5064   if(!(index+nscitilhits==0 || zmax < zmin  ||  Smax < Smin )) {
 
 5073   if(Smax > 2.*
PI) Smax = 2.*
PI;
 
 5074   if( Smin < 0.) Smin = 0.;
 
 5080   fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",zmin,Smin,zmax,Smax);
 
 5081   for( ii=0; ii< index; ii++) {
 
 5082        fprintf(MACRO,
"E%d->Draw();\n",ii);
 
 5087    fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
 5088         zmin+0.05*deltaz,Smin+0.05*deltaS,zmax-0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,zmax-0.05*deltaz);
 
 5089    fprintf(MACRO,
"Assex->Draw();\n");
 
 5090    fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
 5091         zmin+0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,Smax-0.05*deltaS,Smin+0.05*deltaS,Smax-0.05*deltaS);
 
 5092    fprintf(MACRO,
"Assey->Draw();\n");
 
 5096         for(i=0;i<nscitilhits;i++){
 
 5118   if ( 
fabs(KAPPA) <= 1.e-10 || 
fabs(KAPPA) >= 1.e10  ) {
 
 5119         cout<<
"PndSttTrackFinderReal::WriteMacroSkewAssociatedHits," 
 5120         <<
" this track found by PR not plotted" 
 5121         <<
"\n\t because KAPPA = "<<KAPPA<<endl;
 
 5124      fmin = KAPPA*zmin + FI0;
 
 5125      fmax = KAPPA*zmax + FI0;
 
 5129      fmin = KAPPA*zmin + FI0;
 
 5130      fmax = KAPPA*zmax + FI0;
 
 5132      fmax = KAPPA*zmin + FI0;
 
 5133      fmin = KAPPA*zmax + FI0;
 
 5137     Nmax = (int) (0.5*fmax/ 
PI);
 
 5139     Nmax = ( (int) (0.5*fmax/ 
PI) ) -1;
 
 5142     Nmin = (int) (0.5*fmin/ 
PI);
 
 5144     Nmin = ((int) (0.5*fmin/ 
PI) )-1;
 
 5146   for(i=Nmin; i<= Nmax;i++){
 
 5148    z1 = (i*2.*
PI-FI0)/KAPPA;
 
 5149    z2 = ((i+1)*2.*
PI-FI0)/KAPPA;
 
 5150 fprintf(MACRO,
"TLine* FOUND%d = new TLine(%f,%f,%f,%f);\nFOUND%d->SetLineColor(2);\nFOUND%d->Draw();\n",
 
 5151                  i-Nmin,z1,0.,z2, 2.*
PI,i-Nmin,i-Nmin);
 
 5159       fprintf(MACRO,
"}\n");
 
 5196                    Int_t Minclinations[],
 
 5199                    Int_t sequentialNTrack,
 
 5200                    Short_t nSttSkewhitinTrack,
 
 5201                    Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
 5202                    Short_t nSkewCommon,
 
 5203                    Short_t SkewCommonList[MAXTRACKSPEREVENT][nmaxHits],
 
 5204                    Short_t daTrackFoundaTrackMC,
 
 5205                 Short_t nMCSkewAlone[MAXTRACKSPEREVENT],
 
 5206                 Short_t MCSkewAloneList[MAXTRACKSPEREVENT][nmaxHits],
 
 5207         Short_t nscitilhits,
 
 5215     Int_t 
i, j, i1, ii, iii, index, Kincl, nlow, nup, STATUS, imc, Nmin, Nmax;
 
 5220            dx, 
dy, diff, d1, d2,
 
 5221            delta, deltax, deltay, deltaz, deltaS,
 
 5223            zmin, zmax, Smin, Smax, S1, S2,
 
 5225            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 5226            aaa, bbb, 
ccc, 
angle, minor, major,
 
 5227            distance, Rx, Ry, LL,
 
 5228            Aellipsis1, Bellipsis1,fi1,
 
 5229            fmin, fmax, 
offset, step,
 
 5230            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 5236          TDatabasePDG *fdbPDG;
 
 5243       char  nome2[300],nome[300];
 
 5245       sprintf(nome,  
"MacroSttSkewwithMCEvent%dT%d", 
IVOLTE,sequentialNTrack);
 
 5246       sprintf(nome2,  
"%s.C",nome);
 
 5247       MACRO = fopen(nome2,
"w");
 
 5248       fprintf(MACRO,
"void %s()\n{\n",nome);
 
 5257  for(i=0;i<nscitilhits;i++){
 
 5258                 if( ESSE[i]>Smax ) Smax=ESSE[
i];
 
 5259                 if( ESSE[i]<Smin ) Smin=ESSE[
i];
 
 5260                 if( ZETA[i]>zmax ) zmax=ZETA[
i];
 
 5261                 if( ZETA[i]<zmin ) zmin=ZETA[
i];
 
 5265        for( iii=0; iii< nSttSkewhitinTrack; iii++) {
 
 5266          i = 
infoskew[ ListSkewHitsinTrack[imaxima][iii] ];
 
 5268          Kincl = (int) info[i][5] - 1;
 
 5271          aaa = 
sqrt(inclination[Kincl][0]*inclination[Kincl][0]+
 
 5272                 inclination[Kincl][1]*inclination[Kincl][1]+
 
 5273                   inclination[Kincl][2]*inclination[Kincl][2]);
 
 5274          vx1 = inclination[Kincl][0]/aaa;
 
 5275          vy1 = inclination[Kincl][1]/aaa;
 
 5276          vz1 = inclination[Kincl][2]/aaa;
 
 5287        if(STATUS < 0 ) continue ;
 
 5291        for( ii=0; ii<2; ii++){
 
 5294                   (POINTS1[j]-C0x1)*(POINTS1[j]-C0x1) + 
 
 5295                   (POINTS1[1+j]-C0y1)*(POINTS1[1+j]-C0y1) + 
 
 5296                   (POINTS1[2+j]-C0z1)*(POINTS1[2+j]-C0z1) 
 
 5300         Rx = POINTS1[j]-Ox ;   
 
 5301         Ry = POINTS1[1+j]-Oy ;   
 
 5303         aaa = 
sqrt(Rx*Rx+Ry*Ry);
 
 5304         SkewInclWithRespectToS = (-Ry*vx1 + Rx*vy1)/aaa ;
 
 5305         SkewInclWithRespectToS /= 
R;
 
 5306         bbb = 
sqrt( SkewInclWithRespectToS*SkewInclWithRespectToS + vz1*vz1);
 
 5309            Tiltdirection1[0] = vz1/bbb;
 
 5310            Tiltdirection1[1] = SkewInclWithRespectToS/bbb;
 
 5312            Tiltdirection1[0] = 1.;
 
 5313            Tiltdirection1[1] = 0.;
 
 5316         LL = 
fabs(vx1*Rx + vy1*Ry);
 
 5317         if( LL < 1.e-10) 
continue;
 
 5318         Aellipsis1 = info[
i][3]*aaa/LL;
 
 5320         Bellipsis1 = info[
i][3]/
R;
 
 5322         if( distance >= info[i][4] + Aellipsis1) 
continue;
 
 5330         fi1 = 
atan2(POINTS1[j+1]-Oy, POINTS1[j]-Ox) ;  
 
 5331         if( fi1 < 0.) fi1 += 2.*
PI;
 
 5333         if( zmin > POINTS1[j+2] - Aellipsis1 ) zmin = POINTS1[j+2] - Aellipsis1;
 
 5334         if( zmax < POINTS1[j+2] + Aellipsis1 ) zmax = POINTS1[j+2] + Aellipsis1;
 
 5336         if( Smin > fi1 - Bellipsis1 ) Smin = fi1 - Bellipsis1;
 
 5337         if( Smax < fi1 + Bellipsis1 ) Smax = fi1 + Bellipsis1;
 
 5340         Lista[index] = i+ii*10000;  
 
 5343         Double_t rotation1 = 180.*
atan2(Tiltdirection1[1],Tiltdirection1[0])/
PI;
 
 5344         fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nE%d->SetFillStyle(0);\n",
 
 5345                      i+ii*10000,POINTS1[j+2],fi1,Aellipsis1,Bellipsis1,rotation1,i+ii*10000);
 
 5350         for( i1=0; i1<nSkewCommon; i1++){
 
 5351           if ( SkewCommonList[   imaxima   ][i1] == i ){
 
 5357         if(flaggo) fprintf(MACRO,
"E%d->SetLineColor(2);\n",i+ii*10000);
 
 5371        for( iii=0; iii< nMCSkewAlone[imaxima]; iii++) {
 
 5372          i = MCSkewAloneList[imaxima][iii];
 
 5374          Kincl = (int) info[i][5] - 1;
 
 5377          aaa = 
sqrt(inclination[Kincl][0]*inclination[Kincl][0]+inclination[Kincl][1]*inclination[Kincl][1]+
 
 5378                   inclination[Kincl][2]*inclination[Kincl][2]);
 
 5379          vx1 = inclination[Kincl][0]/aaa;
 
 5380          vy1 = inclination[Kincl][1]/aaa;
 
 5381          vz1 = inclination[Kincl][2]/aaa;
 
 5392        if(STATUS < 0 ) continue ;
 
 5395        for( ii=0; ii<2; ii++){
 
 5398                   (POINTS1[j]-C0x1)*(POINTS1[j]-C0x1) + 
 
 5399                   (POINTS1[1+j]-C0y1)*(POINTS1[1+j]-C0y1) + 
 
 5400                   (POINTS1[2+j]-C0z1)*(POINTS1[2+j]-C0z1) 
 
 5404         Rx = POINTS1[j]-Ox ;   
 
 5405         Ry = POINTS1[1+j]-Oy ;   
 
 5407         aaa = 
sqrt(Rx*Rx+Ry*Ry);
 
 5408         SkewInclWithRespectToS = (-Ry*vx1 + Rx*vy1)/aaa ;
 
 5409         SkewInclWithRespectToS /= 
R;
 
 5410         bbb = 
sqrt( SkewInclWithRespectToS*SkewInclWithRespectToS + vz1*vz1);
 
 5413            Tiltdirection1[0] = vz1/bbb;
 
 5414            Tiltdirection1[1] = SkewInclWithRespectToS/bbb;
 
 5416            Tiltdirection1[0] = 1.;
 
 5417            Tiltdirection1[1] = 0.;
 
 5420         LL = 
fabs(vx1*Rx + vy1*Ry);
 
 5421         if( LL < 1.e-10) 
continue;
 
 5422         Aellipsis1 = info[
i][3]*aaa/LL;
 
 5424         Bellipsis1 = info[
i][3]/
R;
 
 5426         if( distance >= info[i][4] + Aellipsis1) 
continue;
 
 5432         fi1 = 
atan2(POINTS1[j+1]-Oy, POINTS1[j]-Ox) ;  
 
 5433         if( fi1 < 0.) fi1 += 2.*
PI;
 
 5435         if( zmin > POINTS1[j+2] - Aellipsis1 ) zmin = POINTS1[j+2] - Aellipsis1;
 
 5436         if( zmax < POINTS1[j+2] + Aellipsis1 ) zmax = POINTS1[j+2] + Aellipsis1;
 
 5438         if( Smin > fi1 - Bellipsis1 ) Smin = fi1 - Bellipsis1;
 
 5439         if( Smax < fi1 + Bellipsis1 ) Smax = fi1 + Bellipsis1;
 
 5442         Double_t rotation1 = 180.*
atan2(Tiltdirection1[1],Tiltdirection1[0])/
PI;
 
 5443         fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nE%d->SetFillStyle(0);\n",
 
 5444                      i+ii*10000,POINTS1[j+2],fi1,Aellipsis1,Bellipsis1,rotation1,i+ii*10000);
 
 5447         fprintf(MACRO,
"E%d->SetLineColor(4);\n",i+ii*10000);
 
 5448         Lista[index] = i+ii*10000;  
 
 5459   if( !(index+nscitilhits==0|| zmax < zmin || Smax < Smin ) ){
 
 5468   if(Smax > 2.*
PI) Smax = 2.*
PI;
 
 5469   if( Smin < 0.) Smin = 0.;
 
 5475   fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",zmin,Smin,zmax,Smax);
 
 5476   for( ii=0; ii< index; ii++) {
 
 5478        fprintf(MACRO,
"E%d->Draw();\n",Lista[ii]);
 
 5483    fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
 5484         zmin+0.05*deltaz,Smin+0.05*deltaS,zmax-0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,zmax-0.05*deltaz);
 
 5485    fprintf(MACRO,
"Assex->Draw();\n");
 
 5486    fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
 5487         zmin+0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,Smax-0.05*deltaS,Smin+0.05*deltaS,Smax-0.05*deltaS);
 
 5488    fprintf(MACRO,
"Assey->Draw();\n");
 
 5494         for(i=0;i<nscitilhits;i++){
 
 5513   if ( 
fabs(KAPPA) > 1.e-10 && 
fabs(KAPPA) < 1.e10) {
 
 5514      fmin = KAPPA*zmin + FI0;
 
 5515      fmax = KAPPA*zmax + FI0;
 
 5518      fmin = KAPPA*zmin + FI0;
 
 5519      fmax = KAPPA*zmax + FI0;
 
 5521      fmax = KAPPA*zmin + FI0;
 
 5522      fmin = KAPPA*zmax + FI0;
 
 5527     Nmax = (int) (0.5*fmax/ 
PI);
 
 5529     Nmax = ( (int) (0.5*fmax/ 
PI) ) -1;
 
 5532     Nmin = (int) (0.5*fmin/ 
PI);
 
 5534     Nmin = ((int) (0.5*fmin/ 
PI) )-1;
 
 5536   for(i=Nmin; i<= Nmax;i++){
 
 5538    z1 = (i*2.*
PI-FI0)/KAPPA;
 
 5539    z2 = ((i+1)*2.*
PI-FI0)/KAPPA;
 
 5540    fprintf(MACRO,
"TLine* FOUND%d = new TLine(%f,%f,%f,%f);\nFOUND%d->SetLineColor(2);\nFOUND%d->Draw();\n",
 
 5541                  i-Nmin,z1,0.,z2, 2.*
PI,i-Nmin,i-Nmin);
 
 5546   cout<<
"PndSttTrackFinderReal::WriteMacroSkewAssociatedHitswithMC," 
 5547   <<
" this track found by PR not plotted" 
 5548         <<
"\n\t because KAPPA = "<<KAPPA<<endl;
 
 5555      imc=    daTrackFoundaTrackMC ;
 
 5558                 Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica  ;
 
 5567                 aaa = 
sqrt( Px*Px + Py*Py);
 
 5569                 fdbPDG= TDatabasePDG::Instance();
 
 5570                 fParticle= fdbPDG->GetParticle(icode);
 
 5571                 if (icode>1000000000) carica = 1.;
 
 5572                 else  carica = fParticle->Charge()/3. ;    
 
 5573                 if( 
fabs(carica)>=0.1) {
 
 5577                 Fifi = 
atan2(Cy, Cx);       
 
 5578                 if(Fifi<0.)  Fifi += 2.*
PI;
 
 5582                 FI0 = fmod(Fifi+ 
PI, 2.*
PI);
 
 5586   if ( 
fabs(KAPPA) > 1.e-10  && 
fabs(KAPPA) < 1.e10) {
 
 5587      fmin = KAPPA*zmin + FI0;
 
 5588      fmax = KAPPA*zmax + FI0;
 
 5590     Nmax = (int) (0.5*fmax/ 
PI);
 
 5592     Nmax = ( (int) (0.5*fmax/ 
PI) ) -1;
 
 5595     Nmin = (int) (0.5*fmin/ 
PI);
 
 5597     Nmin = ((int) (0.5*fmin/ 
PI) )-1;
 
 5600   for(i=Nmin; i<= Nmax;i++){
 
 5602    z1 = (i*2.*
PI-FI0)/KAPPA;
 
 5603    z2 = ((i+1)*2.*
PI-FI0)/KAPPA;
 
 5604    fprintf(MACRO,
"TLine* MC%d_%d = new TLine(%f,%f,%f,%f);\nMC%d_%d->SetLineColor(3);\nMC%d_%d->Draw();\n",
 
 5605                  imc,i-Nmin,z1,0.,z2, 2.*
PI,imc,i-Nmin,imc,i-Nmin);
 
 5615 cout<<
"PndSttTrackFinderReal::WriteMacroSkewAssociatedHits, this track found by PR not plotted" 
 5616         <<
"\n\t because KAPPA = "<<KAPPA<<endl;
 
 5628       fprintf(MACRO,
"}\n");
 
 5662     for(
int i=0; 
i<Nparal; 
i++){
 
 5663             x = info[
infoparal[
i]][0]-trajectory_vertex[0];
 
 5664             y = info[
infoparal[
i]][1]-trajectory_vertex[1];
 
 5666             gamma = x*x + y*y - r*
r;
 
 5667             if(
fabs( gamma ) < 1.e-10) {
 
 5671             infoparalConformal[
i][0] = x / gamma;
 
 5672             infoparalConformal[
i][1] = y / gamma;
 
 5673             infoparalConformal[
i][2] = r/
fabs(gamma);
 
 5674             infoparalConformal[
i][3] = infoparal[
i] ;      
 
 5698                                 Short_t nHitsinTrack ,
 
 5702                                 Double_t auxinfoparalConformal[][5],
 
 5715     for(
int i=0; 
i<nHitsinTrack; 
i++){
 
 5716             if( 
i == iExclude) 
continue;
 
 5717             x = info[  
infoparal[ListHits[
i]]  ][0]-trajectory_vertex[0];
 
 5718             y = info[  
infoparal[ListHits[
i]]  ][1]-trajectory_vertex[1];
 
 5720             gamma = x*x + y*y - r*
r;
 
 5721             if(
fabs( gamma ) < 1.e-10) {
 
 5725             auxinfoparalConformal[
i][0] = x / gamma;
 
 5726             auxinfoparalConformal[
i][1] = y / gamma;
 
 5727             auxinfoparalConformal[
i][2] = r/
fabs(gamma);
 
 5728             auxinfoparalConformal[
i][3] = 
infoparal[ListHits[
i]] ;      
 
 5763                         bool InclusionList[nmaxHits],
 
 5764                         Double_t infoparalConformal[][5],Int_t Nparal,
 
 5765                         Short_t nBoxConformal[nRdivConformal][nFidivConformal],
 
 5766                         Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
 
 5767                         Short_t  RConformalIndex[nmaxHits],
 
 5768                         Short_t  FiConformalIndex[nmaxHits]
 
 5772     Short_t iR, iFi, 
i, j;
 
 5779            nBoxConformal[
i][j]= 0;
 
 5783       for(i = 0; i< Nparal ; i++){
 
 5784          if( ! InclusionList[ 
infoparal[i] ] ) 
continue;
 
 5785          Fi =  
atan2(infoparalConformal[i][1],infoparalConformal[i][0]) ;
 
 5786          if ( Fi < 0. ) Fi += 2.*
PI;
 
 5787          iFi =  (Short_t) (0.5*nFidivConformal*Fi/
PI);
 
 5788          if(iFi > nFidivConformal ) {
 
 5795          Double_t RRR = 
sqrt(infoparalConformal[i][0]*infoparalConformal[i][0]+
 
 5796                         infoparalConformal[i][1]*infoparalConformal[i][1]);
 
 5799          for(j=nRdivConformalEffective-1, iR=0; j>0; j--){
 
 5806                 cout<<
"Warning from PndSttTrackFinderReal::PndSttBoxConformalFilling     :" 
 5807         <<
"\n\tcontent in nBoxConformal["<<iR<<
"]["<<iFi<<
"] has reached the Max allowed value = " 
 5811          HitsinBoxConformal[ nBoxConformal[iR][iFi] ][iR][iFi]=(Short_t) i;
 
 5812          nBoxConformal[iR][iFi]++;
 
 5814          FiConformalIndex[ infoparal[
i] ]  =  iFi;
 
 5839   Short_t nr, nl, middle, 
i,
 
 5840            ind_left[n_ele], ind_right[n_ele];
 
 5842   Double_t left[n_ele], right[n_ele], result[n_ele];
 
 5844    if( n_ele <= 1)  
return;
 
 5847    for(i=0; i<middle; i++){
 
 5849      ind_left[
i]= ind[
i];
 
 5851    for(i=middle; i<n_ele; i++){
 
 5852      right[i-middle]=array[
i];
 
 5853      ind_right[i-middle]= ind[
i];
 
 5859    if( left[middle-1] > right[0]) {
 
 5860      Merge(middle, left,ind_left, n_ele-middle, right, ind_right, array, ind);
 
 5863      for(i=0; i<middle; i++){
 
 5868      for(i=middle; i<n_ele; i++){
 
 5869        array[
i]=right[i-middle];
 
 5870        ind[
i]=ind_right[i-middle];
 
 5889    Short_t 
i =0, j, nl_curr=0, nr_curr=0;
 
 5891    while( nl > 0 && nr >0){
 
 5892      if( left[nl_curr] <= right[nr_curr]){
 
 5893       result[
i] =  left[nl_curr];
 
 5894       ind[
i] = ind_left[nl_curr];
 
 5898       result[
i] =  right [nr_curr];
 
 5899       ind[
i] =  ind_right [nr_curr];
 
 5907      for(j=0; j<nr; j++){
 
 5908       result[i+j]= right[nr_curr+j];
 
 5909       ind[i+j]= ind_right[nr_curr+j];
 
 5912      for(j=0; j<nl; j++){
 
 5913       result[i+j]= left[nl_curr+j];
 
 5914       ind[i+j]= ind_left[nl_curr+j];
 
 5934                 Short_t NRCELLDISTANCE,
 
 5935                 Short_t NFiCELLDISTANCE,
 
 5941                 bool InclusionList[nmaxHits],
 
 5942                 Short_t RConformalIndex[nmaxHits],
 
 5943                 Short_t FiConformalIndex[nmaxHits],
 
 5944                 Short_t nBoxConformal[nRdivConformal][nFidivConformal],
 
 5945                 Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
 
 5946                 Short_t *ListHitsinTrack
 
 5971  for(i=0, nRemainingHits=0; i<Nparal; i++){
 
 5973         if( i != ihit && InclusionList[  
infoparal[i]   ] ) {   
 
 5977                 TemporaryInclusionList[ 
infoparal[
i]  ]= 
true;
 
 5978                 Remaining[nRemainingHits]= 
i;   
 
 5981                 TemporaryInclusionList[ 
infoparal[
i]  ]= 
false;
 
 5993         ListHitsinTrack[0]=  ihit ;
 
 6001  while( nRemainingHits > 0 &&  i < nHitsinTrack && status) {
 
 6004         if (nRcell - NRCELLDISTANCE < 0 ) {
 
 6007                 nRmin = nRcell - NRCELLDISTANCE;
 
 6012                 nRmax = nRcell + NRCELLDISTANCE;
 
 6014 if(
istampa>0) {cout<<
"\tin FindTrackPatterninBoxConformal, nRmin = "<<nRmin
 
 6015         <<
", nRmax = "<<nRmax<<endl;
 
 6016 cout<<
"\tin FindTrackPatterninBoxConformal, nFicell = "<<nFicell<<endl;
 
 6018     for( iR= nRmin ; iR<= nRmax && 
status ; iR++){
 
 6019       for(iFi2=nFicell-NFiCELLDISTANCE;iFi2<=nFicell+NFiCELLDISTANCE && 
status;iFi2++){
 
 6021                         iFi = nFidivConformal + iFi2;
 
 6022                 } 
else if ( iFi2 >= nFidivConformal) {
 
 6027          for (j = 0; j< nBoxConformal[iR][iFi]; j++){
 
 6028             if( InclusionList[  
infoparal[  HitsinBoxConformal[j][iR][iFi]  ]  ]
 
 6030                    TemporaryInclusionList[
infoparal[HitsinBoxConformal[j][iR][iFi]]]){
 
 6032                         ListHitsinTrack[nHitsinTrack]=HitsinBoxConformal[j][iR][iFi] ;
 
 6039                 TemporaryInclusionList[
infoparal[HitsinBoxConformal[j][iR][iFi]]]= 
false;
 
 6048         nRcell = RConformalIndex[   
infoparal[  ListHitsinTrack[
i] ]   ];
 
 6049         nFicell = FiConformalIndex[  
infoparal[  ListHitsinTrack[
i]  ]  ];
 
 6055     return nHitsinTrack;
 
 6069                         Short_t NRCELLDISTANCE,
 
 6070                         Short_t NFiCELLDISTANCE,
 
 6072                         Short_t NparallelToSearch,
 
 6074                         Short_t *ListHitsinTrackinWhichToSearch,
 
 6076                         bool InclusionList[nmaxHits],
 
 6077                         Short_t RConformalIndex[nmaxHits],
 
 6078                         Short_t FiConformalIndex[nmaxHits],
 
 6079                         Short_t nBoxConformal[nRdivConformal][nFidivConformal],
 
 6080                         Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
 
 6081                         Short_t *OutputListHitsinTrack
 
 6086      bool TemporaryInclusionList[
nmaxHits];
 
 6109      for(i=0; i<Nparal; i++){
 
 6110        TemporaryInclusionList[ 
infoparal[
i]  ]= 
false;
 
 6114      for(i2=0, nRemainingHits=0; i2<NparallelToSearch; i2++){
 
 6115         i=ListHitsinTrackinWhichToSearch[i2];
 
 6118         if( i != iSeed && InclusionList[  
infoparal[i]   ] ) {
 
 6119                 TemporaryInclusionList[ 
infoparal[
i]  ]= 
true;
 
 6120                 Remaining[nRemainingHits]= 
i;   
 
 6131     OutputListHitsinTrack[0]=  iSeed ;
 
 6133    while( nRemainingHits > 0 &&  i < nHitsinTrack) {
 
 6135     nRcell = RConformalIndex[   
infoparal[  OutputListHitsinTrack[
i] ]   ];
 
 6136     nFicell = FiConformalIndex[  
infoparal[  OutputListHitsinTrack[
i]  ]  ];
 
 6140     if (nRcell - NRCELLDISTANCE < 0 ) {
 
 6143         nRmin = nRcell - NRCELLDISTANCE;
 
 6148         nRmax = nRcell + NRCELLDISTANCE;
 
 6151     for( iR= nRmin ; iR<= nRmax ; iR++){
 
 6152       for( iFi2=nFicell-NFiCELLDISTANCE ; iFi2<=nFicell+NFiCELLDISTANCE;iFi2++){
 
 6154                 iFi = nFidivConformal + iFi2;
 
 6155         } 
else if ( iFi2 >= nFidivConformal) {
 
 6160         for (j = 0; j< nBoxConformal[iR][iFi]; j++){
 
 6161          if( InclusionList[ 
infoparal[ HitsinBoxConformal[j][iR][iFi] ] ]
 
 6163             TemporaryInclusionList[ 
infoparal[ HitsinBoxConformal[j][iR][iFi] ] ]) {
 
 6165                 OutputListHitsinTrack[nHitsinTrack]=HitsinBoxConformal[j][iR][iFi] ;
 
 6167                 TemporaryInclusionList[
infoparal[HitsinBoxConformal[j][iR][iFi]]]
 
 6180     return nHitsinTrack;
 
 6196                                                   Short_t NFiCELLDISTANCE,                                                  
 
 6198                                                   Short_t NParallelToSearch,    
 
 6199                                                   Short_t *ListHitsinTrackinWhichToSearch,
 
 6200                                                   bool InclusionList[nmaxHits],
 
 6201                                                   Short_t FiConformalIndex[nmaxHits],
 
 6202                                                   Short_t  *OutputListHitsinTrack
 
 6211      Short_t 
i,  j, iR, iFi,  iFiseed, nHitsinTrack;
 
 6218      cout<<
"Da strictcollection, n. elementi delle search list "<<NParallelToSearch<<endl;
 
 6219      for(i=0; i<NParallelToSearch; i++){
 
 6220         cout<<
"Da strictcollection,  hit n. (parallel notation ) "<<ListHitsinTrackinWhichToSearch[
i]<<endl;
 
 6227      iFiseed = FiConformalIndex[ 
infoparal[  iSeed ] ];
 
 6231      for(i=0; i<NParallelToSearch; i++){
 
 6232         if( InclusionList[  infoparal[ ListHitsinTrackinWhichToSearch[i] ]   ] ) {   
 
 6235           iFi = FiConformalIndex[ infoparal[  ListHitsinTrackinWhichToSearch[
i] ] ];
 
 6236           if( iFi == iFiseed ) {
 
 6237             OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
 
 6239           } 
else if ( iFi < iFiseed ) {
 
 6240             if( iFiseed - iFi <= NFiCELLDISTANCE ) {
 
 6241               OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
 
 6245                  OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
 
 6250             if( -iFiseed + iFi <= NFiCELLDISTANCE ) {
 
 6251               OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
 
 6255                  OutputListHitsinTrack[nHitsinTrack]=ListHitsinTrackinWhichToSearch[
i];
 
 6268      cout<<
"Da strictcollection, n. elementi aggiunti "<<nHitsinTrack<<endl;
 
 6269      for(i=0; i<nHitsinTrack; i++){
 
 6270        cout<<
"Da strictcollection,  hit n. (parallel notaion ) "<<OutputListHitsinTrack[
i]<<endl;
 
 6274     return nHitsinTrack;
 
 6290                    bool InclusionList[nmaxHits],
 
 6294                    Short_t nHitsinTrack,
 
 6295                    Short_t *ListHitsinTrack,
 
 6296                    Int_t NhitsParallel,
 
 6302                    Short_t *RConformalIndex,
 
 6303                    Short_t *FiConformalIndex,
 
 6304                    Short_t nBoxConformal[nRdivConformal][nFidivConformal],
 
 6305                    Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
 
 6306                    Short_t *auxListHitsinTrack
 
 6309   bool passamin,passamax,
 
 6312   Short_t 
i, i2, j, k, l,  l2, l3, itemp, kstart, kend,
 
 6313           iFi0,FFimin, FFimax;
 
 6342   for(i=0; i<NhitsParallel;i++){
 
 6343    Unselected[
i]= 
true;
 
 6350   for(j=0; j<nHitsinTrack; j++){
 
 6351     i = (Short_t)  infoparalConformal[ ListHitsinTrack[j] ][3];
 
 6354     if( FiConformalIndex[i] <  FFimin ) FFimin = FiConformalIndex[
i];
 
 6355     if( FiConformalIndex[i] >  FFimax ) FFimax = FiConformalIndex[
i];
 
 6359   if( FFimax > 3.*nFidivConformal/4. && FFimin < nFidivConformal/4.) {
 
 6362      for(j=0; j<nHitsinTrack; j++){
 
 6363        i = (Short_t)  infoparalConformal[ ListHitsinTrack[j] ][3];
 
 6364        Fi = FiConformalIndex[
i];
 
 6366        if( Fi <  FFimin ) FFimin = Fi;
 
 6367        if( Fi >  FFimax ) FFimax = Fi;
 
 6375   FFimin -= (Short_t) nFidivConformal/Nextra;
 
 6376   FFimax +=  (Short_t) nFidivConformal/Nextra;
 
 6377 if( FFimax - FFimin > nFidivConformal/2 ) {
 
 6378     cout<<
"something fishy is going on in PndSttTrkAssociatedParallelHitsToHelixQuater!" 
 6379       <<
"Range in Fi (rad) is  "<<(FFimax - FFimin)*2.*
PI/nFidivConformal<<endl;
 
 6389     if(
fabs(q) > 1.e-10 ) {
 
 6392       for(itemp=FFimin; itemp<=FFimax;itemp++){
 
 6396         } 
else if (i>=nFidivConformal){
 
 6402         if( 
fabs(
cos(angle)) <1.e-10)  
continue;
 
 6416               for( k=0;k<nBoxConformal[l2][
i];k++){
 
 6417                 nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[k][l2][i]  ][3];
 
 6418                 if( !InclusionList[ nHit_original ] ) 
continue;
 
 6420                 dx = -Ox+info[ nHit_original ][0];
 
 6421                 dy = -Oy+info[ nHit_original ][1];
 
 6422                 distance = 
sqrt(dx*dx+dy*dy);
 
 6427                 xx=infoparalConformal[  HitsinBoxConformal[k][l2][
i]  ][0];
 
 6428                 dist = 
fabs( xx +q );
 
 6430                         infoparalConformal[  HitsinBoxConformal[k][l2][i]  ][2],
 
 6431                                                  infoparalConformal[  HitsinBoxConformal[k][l2][i]  ][4]
 
 6433                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[k][l2][
i];
 
 6442             if(nR == 0)   passamin=
true;
 
 6444             for(l2=1;l2<3;l2++){
 
 6450               for( k=0;k<nBoxConformal[l3][i2];k++){
 
 6451                 nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][3];
 
 6452                 if( !InclusionList[ nHit_original ] ) 
continue;
 
 6454                 dx = -Ox+info[ nHit_original ][0];
 
 6455                 dy = -Oy+info[ nHit_original ][1];
 
 6456                 distance = 
sqrt(dx*dx+dy*dy);
 
 6460                 xx=infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][0];
 
 6461                 dist = 
fabs( xx +q );
 
 6464                                                  infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][2],
 
 6465                                                  infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][4]
 
 6467                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[k][l3][i2];
 
 6473             return  nAssociatedHits;
 
 6474            } 
else if ((nR == 
nRdivConformalEffective-1 && ! passamin && !passamax) || (nR==0 && !passamax && !passamin)){
 
 6476              if(nR == 0)   passamin=
true;
 
 6478             for(l2=1;l2<3;l2++){
 
 6484               for( k=0;k<nBoxConformal[l3][i2];k++){
 
 6485                 nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][3];
 
 6486                 if( !InclusionList[ nHit_original ] ) 
continue;
 
 6488                 dx = -Ox+info[ nHit_original ][0];
 
 6489                 dy = -Oy+info[ nHit_original ][1];
 
 6490                 distance = 
sqrt(dx*dx+dy*dy);
 
 6494                 xx=infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][0];
 
 6495                 dist = 
fabs( xx +q );
 
 6498                                                  infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][2],
 
 6499                                                  infoparalConformal[  HitsinBoxConformal[k][l3][i2]  ][4]
 
 6501                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[k][l3][i2];
 
 6523                 cout <<
"From PndSttTrackFinderReal::PndSttTrkAssociatedParallelHitsToHelixQuater  :" 
 6524                       <<
"  inconsistency, 0 associated hits to this track candidate\n";
 
 6528       for(itemp=iFi0-5; itemp<=iFi0+5;itemp++){
 
 6532         } 
else if (i>=nFidivConformal){
 
 6537               for( k=0;k<nBoxConformal[l][
i];k++){
 
 6538                 nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[k][l][i]  ][3];
 
 6539                 if( !InclusionList[ nHit_original ] ) 
continue;
 
 6541                 dx = -Ox+info[ nHit_original ][0];
 
 6542                 dy = -Oy+info[ nHit_original ][1];
 
 6543                 distance = 
sqrt(dx*dx+dy*dy);
 
 6547                 xx=infoparalConformal[  HitsinBoxConformal[k][l][
i]  ][0];
 
 6551                                                  infoparalConformal[  HitsinBoxConformal[k][l][i]  ][2],
 
 6552                                                  infoparalConformal[  HitsinBoxConformal[k][l][i]  ][4]
 
 6554                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[k][l][
i];
 
 6567   }  
else if( 
fabs(q)> 1.e-10) {   
 
 6571         aaa = 
atan2(q, -m*q);
 
 6574          if (Fi0 <0. ) Fi0 =0.;
 
 6575          if (Fi0 >
PI ) Fi0 =
PI;
 
 6580         for(itemp=FFimin; itemp<=FFimax;itemp++){
 
 6584          } 
else if (i>=nFidivConformal){
 
 6596                  erre1 = q/(
sin(fi1)-m*
cos(fi1));
 
 6598                  erre1 = 99999999999.;
 
 6601          fi2 = (i+1)*2.*(
PI/nFidivConformal);
 
 6603                  erre2 = q/(
sin(fi2)-m*
cos(fi2));
 
 6605                  erre2 = 99999999999.;
 
 6611               if(j!=nRdivConformal-1) {
 
 6621                 if(erre2< 0. || erre2 > Rout ){
 
 6624               } 
else if(
fabs(erre1) < 1.e-10){
 
 6625                 if( Fi0 > fi2 || Fi0 < fi1){
 
 6628               } 
else if ( erre1<Rin) {
 
 6629                 if( erre2< Rin &&  erre2> 0. ) {
 
 6632               }   
else if (erre1> Rout  &&  erre2 > Rout && !( fi1<= aaa && aaa<=fi2 && ddd<=Rout )
 
 6637               for(l=itemp-2; l<=itemp+2; l++){
 
 6640                 } 
else if (l>=nFidivConformal){
 
 6650                 if ( j+1 >=  nRdivConformal ) {
 
 6656                 for(k=kstart;k<kend;k++){
 
 6658                  for( l3=0;l3<nBoxConformal[k][l2];l3++){
 
 6659                   if( ! Unselected[HitsinBoxConformal[l3][k][l2] ] )  
continue;
 
 6660                    nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[l3][k][l2]  ][3];
 
 6661                    if( !InclusionList[ nHit_original ] ) 
continue;
 
 6663                    dx = -Ox+info[ nHit_original ][0];
 
 6664                    dy = -Oy+info[ nHit_original ][1];
 
 6665                    distance = 
sqrt(dx*dx+dy*dy);
 
 6669                    xx=infoparalConformal[  HitsinBoxConformal[l3][k][l2]  ][0];
 
 6670                    yy=infoparalConformal[  HitsinBoxConformal[l3][k][l2]  ][1];
 
 6671                    dist = 
fabs( -yy+ m*xx +q )/
sqrt(m*m+1.);
 
 6673                                                  infoparalConformal[  HitsinBoxConformal[l3][k][l2]  ][2],
 
 6674                                                  infoparalConformal[  HitsinBoxConformal[l3][k][l2]  ][4]
 
 6677                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[l3][k][l2];
 
 6678                     Unselected[HitsinBoxConformal[l3][k][l2]]= 
false;
 
 6696       for(itemp=iFi0-5; itemp<=iFi0+5;itemp++){
 
 6700          } 
else if (i>=nFidivConformal){
 
 6705               for( k=0;k<nBoxConformal[l][
i];k++){
 
 6706                 nHit_original = (Short_t) infoparalConformal[  HitsinBoxConformal[k][l][i]  ][3];
 
 6707                 if( !InclusionList[ nHit_original ] ) 
continue;
 
 6709                 dx = -Ox+info[ nHit_original ][0];
 
 6710                 dy = -Oy+info[ nHit_original ][1];
 
 6711                 distance = 
sqrt(dx*dx+dy*dy);
 
 6715                 xx=infoparalConformal[  HitsinBoxConformal[k][l][
i]  ][0];
 
 6716                 yy=infoparalConformal[  HitsinBoxConformal[k][l][
i]  ][1];
 
 6717                 dist = 
fabs( m*xx-yy  )/
sqrt( m*m+1.);
 
 6719                                                  infoparalConformal[  HitsinBoxConformal[k][l][i]  ][2],
 
 6720                                                  infoparalConformal[  HitsinBoxConformal[k][l][i]  ][4]
 
 6722                     auxListHitsinTrack[nAssociatedHits]= HitsinBoxConformal[k][l][
i];
 
 6737   cout<<
"from PndSttTrkAssociatedParallelHitsToHelixQuater, before exiting; nAssociatedHits = " 
 6738    <<nAssociatedHits<<endl;
 
 6743  return nAssociatedHits;
 
 6762                 bool InclusionList[nmaxHits],
 
 6763                 Int_t NhitsParallel,
 
 6770                 Short_t *auxListHitsinTrack
 
 6776   Short_t nAssociatedHits;
 
 6789   for(i=0; i<NhitsParallel;i++){
 
 6790         if( !InclusionList[ 
infoparal[i] ] ) 
continue;
 
 6798         dy = -Oy+info[ infoparal[
i] ][1];
 
 6800         if(angle<0.) angle += 2.*
PI;
 
 6801         if(angle<0.) angle =0.;
 
 6802         distance = 
sqrt(dx*dx+dy*dy);
 
 6804         if(angle<Fi_low) angle += 2.*
PI;
 
 6805         if(angle>Fi_up) 
continue;
 
 6806         auxListHitsinTrack[nAssociatedHits]= 
i;
 
 6810  return nAssociatedHits;
 
 6849      if(  
fabs(distance-DriftConfR)  <   2.*StrawConfR )   
return true;
 
 6867         bool *InclusionListSkew,
 
 6876         Double_t Fi_initial_helix_referenceframe,
 
 6877         Double_t Fi_final_helix_referenceframe,
 
 6878         Short_t SkewList[nmaxHits][2], 
 
 6888     Int_t 
i, j, i1, ii, iii, NAssociated, Kincl, nlow, nup, STATUS, Nmin, Nmax;
 
 6891            dx, 
dy, diff, d1, d2,
 
 6892            delta, deltax, deltay, deltaz, deltaS,
 
 6894            zmin, zmax, Smin, Smax, S1, S2,
 
 6896            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
 6897            aaa, bbb, 
ccc, 
angle, minor, major,
 
 6898            distance, Rx, Ry, LL,
 
 6899            Aellipsis1, Bellipsis1,fi1,
 
 6900            fmin, fmax, 
offset, step,
 
 6901            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
 6915          if( !InclusionListSkew[i]) 
continue;
 
 6918          Kincl = (int) info[i][5] - 1;
 
 6921          aaa = 
sqrt(inclination[Kincl][0]*inclination[Kincl][0]+inclination[Kincl][1]*inclination[Kincl][1]+
 
 6922                   inclination[Kincl][2]*inclination[Kincl][2]);
 
 6923          vx1 = inclination[Kincl][0]/aaa;
 
 6924          vy1 = inclination[Kincl][1]/aaa;
 
 6925          vz1 = inclination[Kincl][2]/aaa;
 
 6934        if(STATUS < 0 ) continue ;
 
 6937        for( ii=0; ii<2; ii++){
 
 6941                   (POINTS1[j]-C0x1)*(POINTS1[j]-C0x1) + 
 
 6942                   (POINTS1[1+j]-C0y1)*(POINTS1[1+j]-C0y1) + 
 
 6943                   (POINTS1[2+j]-C0z1)*(POINTS1[2+j]-C0z1) 
 
 6947         Rx = POINTS1[j]-Ox ;   
 
 6948         Ry = POINTS1[1+j]-Oy ;   
 
 6950         aaa = 
sqrt(Rx*Rx+Ry*Ry);
 
 6951         SkewInclWithRespectToS = (-Ry*vx1 + Rx*vy1)/aaa ;
 
 6952         SkewInclWithRespectToS /= 
R;
 
 6953         bbb = 
sqrt( SkewInclWithRespectToS*SkewInclWithRespectToS + vz1*vz1);
 
 6956            Tiltdirection1[0] = vz1/bbb;
 
 6957            Tiltdirection1[1] = SkewInclWithRespectToS/bbb;
 
 6959            Tiltdirection1[0] = 1.;
 
 6960            Tiltdirection1[1] = 0.;
 
 6963         LL = 
fabs(vx1*Rx + vy1*Ry);
 
 6964         if( LL < 1.e-10) 
continue;
 
 6966         Aellipsis1 = info[
i][3]*aaa/LL;
 
 6968         Bellipsis1 = info[
i][3]/
R;
 
 6970         if( distance >= info[i][4] + Aellipsis1 ) 
continue;
 
 6985         S[NAssociated] = 
atan2(POINTS1[j+1]-Oy, POINTS1[j]-Ox) ;  
 
 6986         if( S[NAssociated] < 0.) S[NAssociated] += 2.*
PI;
 
 6999         if(  S[NAssociated] < Fi_low_limit) {
 
 7000            if(  S[NAssociated]+2.*
PI > Fi_up_limit)  
continue;
 
 7001         }  
else if(  S[NAssociated] > Fi_up_limit) {
 
 7002            if(  S[NAssociated]- 2.*
PI < Fi_low_limit)  
continue;
 
 7019         Z[NAssociated] = POINTS1[j+2];
 
 7020         ZDrift[NAssociated] = Aellipsis1*Tiltdirection1[0];
 
 7021         ZErrorafterTilt[NAssociated] = 
StrawDriftError*aaa*Tiltdirection1[0]/LL;
 
 7022         SkewList[NAssociated][0] = iii;  
 
 7023         SkewList[NAssociated][1] = ii;  
 
 7029         Double_t Zh1 = Z[NAssociated] - ZDrift[NAssociated];
 
 7030         Double_t Zh2 = Z[NAssociated] + ZDrift[NAssociated];
 
 7031         Double_t Sh1 = S[NAssociated] - Aellipsis1*Tiltdirection1[1];
 
 7032         Double_t Sh2 = S[NAssociated] + Aellipsis1*Tiltdirection1[1];
 
 7033         Double_t Zlast1 = (Fi_final_helix_referenceframe-Fi_initial_helix_referenceframe)*Zh1
 
 7034                                   /(Sh1-Fi_initial_helix_referenceframe);
 
 7035         Double_t Zlast2 = (Fi_final_helix_referenceframe-Fi_initial_helix_referenceframe)*Zh2
 
 7036                                   /(Sh2-Fi_initial_helix_referenceframe);
 
 7076                    Short_t TemporarynSttSkewhitinTrack,  
 
 7077                    Short_t SkewList[nmaxHits][2], 
 
 7095     Short_t NAssociated;
 
 7097     Int_t 
i, j, i1, ii, iii,  Kincl, nlow, nup;
 
 7109     if(
fabs(KAPPA)<1.e-20) {
 
 7119      zmax = (2.*
PI-FI0)/KAPPA;
 
 7122      zmin = (2.*
PI-FI0)/KAPPA;
 
 7126      for(i=0; i<TemporarynSttSkewhitinTrack; i++){
 
 7127        bbb=(S[
i]-FI0)/KAPPA;
 
 7128       for(sign=0;sign<=1; sign ++){
 
 7129        tempZ[
sign]=Z[
i]+(2*sign-1)*ZDrift[i];
 
 7130        if( tempZ[sign] > zmax ){
 
 7131          tempZ[
sign]=fmod( tempZ[sign]-zmax, deltaz) + zmin;
 
 7132        } 
else if (tempZ[sign]<zmin){
 
 7133          tempZ[
sign]=fmod( tempZ[sign]-zmin, deltaz) + zmax;
 
 7136         zdist1 = 
fabs( bbb - tempZ[sign]);
 
 7137         zdist2 = deltaz- zdist1;
 
 7138         if(zdist2<0.) zdist2 = 0.;  
 
 7139         zdist[
sign] = zdist1 < zdist2 ? zdist1 : zdist2;
 
 7143         zdist1 = zdist[0] < zdist[1] ? zdist[0] : zdist[1];
 
 7146         if(  zdist1 < allowed_distance ){
 
 7150          tempore[NAssociated]=SkewList[ 
i ][0];
 
 7151          temporeS[NAssociated]=S[
i];
 
 7152          temporeZ[NAssociated]=Z[
i];
 
 7153          temporeZDrift[NAssociated]=ZDrift[
i];
 
 7154          temporeZErrorafterTilt[NAssociated]=ZErrorafterTilt[
i];
 
 7180                 Short_t nHitsinTrack,
 
 7184                 Double_t *ErrorDriftRadiusconformal,
 
 7201    Short_t  NpointsInFit = nHitsinTrack-NMAX <0 ?  nHitsinTrack :  NMAX;
 
 7203    bool mvdhit[NpointsInFit];
 
 7213               Delta[NpointsInFit],
 
 7217      Short_t  
i, j, ii, iii, nSttHits, nMvdHits;
 
 7220      char nome[300], stringa[300], stringa2[300];
 
 7221      float m1_result,m2_result, q1_result,q2_result, A1_result, A2_result;
 
 7227         cout<<
"from FitHelixCylinder,prima di rotazione,  Evento "<<
IVOLTE<<
", nHitsinTrack = "<<nHitsinTrack
 
 7228         <<
"\nfrom FitHelixCylinder, nPointsinFit = "<<NpointsInFit<<endl;
 
 7229         for(i=0 ; i< NpointsInFit ; i++) {
 
 7230                 cout<<
"  Xconformal["<<i<<
"] = "<<Xconformal[ 
i ]<<
 
 7231                 ";   Yconformal["<<i<<
"] = "<<Yconformal[ 
i ]<<
",  drift radius conformal "<<
 
 7232                 DriftRadiusconformal[
i]<<endl<<
"\tErrordiriftradiusconformal = " 
 7233                 <<ErrorDriftRadiusconformal[
i]<<endl;
 
 7240      if( nHitsinTrack < 2) {
 
 7244       rotationangle -= 
PI/18.;
 
 7250         nSttHits = nMvdHits = 0;
 
 7251       for(i=0;i<NpointsInFit; i++){
 
 7252        Ox[
i] = Xconformal[ 
i ] *cose + Yconformal[ 
i ]*sine;
 
 7253        Oy[
i] = -Xconformal[ 
i ] *sine + Yconformal[ 
i ]*cose;
 
 7254           Delta[
i] = 3.*ErrorDriftRadiusconformal[ 
i ];   
 
 7256         if( DriftRadiusconformal[ i ]<0. )
 
 7268         cout<<
"from FitHelixCylinder, dopo rotazione, Evento "<<
IVOLTE<<
", nHitsinTrack = "<<nHitsinTrack
 
 7269         <<
"\nfrom FitHelixCylinder, nPointsinFit = "<<NpointsInFit<<endl;
 
 7270         for(i=0 ; i< NpointsInFit ; i++) {
 
 7271                 cout<<
"  Ox["<<i<<
"] = "<<Ox[ 
i ]<<
 
 7272                 ";   Oy["<<i<<
"] = "<<Oy[ 
i ]<<
",  Delta "<<
 
 7279         int NStructVar =     4           +    1       +  nMvdHits * 2     +                nSttHits *4 ;
 
 7283         int nRows =     1    +  nMvdHits * 4  +               nSttHits * 9;
 
 7287         int typeRows[nRows];
 
 7288         char * nameRows[nRows];
 
 7289         char  auxnameRows[nRows][20];
 
 7291         int  NStructRowsMax = 8*NpointsInFit ;  
 
 7293         double final_values[NStructVar];
 
 7294         int  NRowsInWhichStructVarArePresent[NStructVar];
 
 7295         char *StructVarName[NStructVar];
 
 7296         char auxStructVarName[NStructVar][20];
 
 7297         char *NameRowsInWhichStructVarArePresent[NStructVar*NStructRowsMax];
 
 7298         char aux[NStructVar*NStructRowsMax][20];
 
 7299         double Coefficients[NStructVar*NStructRowsMax];
 
 7302         double ValueB[nRows-1]; 
 
 7304         int nRanges = nSttHits;
 
 7305         double ValueRanges[nRanges];
 
 7306         char *NameRanges[nRanges];
 
 7307         char auxNameRanges[nRanges][20];
 
 7310         int nBounds=NpointsInFit+nSttHits+1;
 
 7311         double BoundValue[nBounds];
 
 7312         char *BoundStructVarName[nBounds];
 
 7313         char auxBoundStructVarName[nBounds][20];
 
 7314         char *TypeofBound[nBounds];
 
 7315         char auxTypeofBound[nBounds][20];
 
 7324         NRowsInWhichStructVarArePresent[0] =    
 
 7325         NRowsInWhichStructVarArePresent[1] =    
 
 7326         NRowsInWhichStructVarArePresent[2] =    
 
 7327         NRowsInWhichStructVarArePresent[3] = nMvdHits*2 + nSttHits *4;  
 
 7329       for(i=0,ii=0; i< NpointsInFit ; i++) {
 
 7331                         NRowsInWhichStructVarArePresent[4+ii]= 4;
 
 7333                         NRowsInWhichStructVarArePresent[4+ii]= 5;
 
 7338       for(i=0; i< NpointsInFit ; i++) {
 
 7340                         NRowsInWhichStructVarArePresent[4+ii]= 5;
 
 7346         for(i=0 ; i< nMvdHits+2*nSttHits ; i++) {
 
 7347                 NRowsInWhichStructVarArePresent[4+ii+
i]= 5;
 
 7350         NRowsInWhichStructVarArePresent[4+ii+nMvdHits+2*nSttHits]= nMvdHits*4 + nSttHits*8;
 
 7362       sprintf(&(auxnameRows[0][0]),
"OBJECT");
 
 7363       nameRows[0]=&auxnameRows[0][0];
 
 7365       for(i=0 , ii=0 ; i< NpointsInFit ; i++) {
 
 7368        typeRows[1+ii]=GLP_UP;typeRows[2+ii]=GLP_UP;typeRows[3+ii]=GLP_UP;typeRows[4+ii]=GLP_UP;
 
 7369        typeRows[5+ii]=GLP_LO;
 
 7371        sprintf(&(auxnameRows[1+ii][0]),
"A%d",i);  nameRows[1+ii]=&auxnameRows[1+ii][0];
 
 7372        sprintf(&(auxnameRows[2+ii][0]),
"B%d",i);  nameRows[2+ii]=&auxnameRows[2+ii][0];
 
 7373        sprintf(&(auxnameRows[3+ii][0]),
"C%d",i);  nameRows[3+ii]=&auxnameRows[3+ii][0];
 
 7374        sprintf(&(auxnameRows[4+ii][0]),
"D%d",i);  nameRows[4+ii]=&auxnameRows[4+ii][0];
 
 7378          typeRows[1+ii]=GLP_UP;typeRows[2+ii]=GLP_UP;typeRows[3+ii]=GLP_UP;typeRows[4+ii]=GLP_UP;
 
 7379          typeRows[5+ii]=GLP_UP;typeRows[6+ii]=GLP_UP;typeRows[7+ii]=GLP_UP;typeRows[8+ii]=GLP_UP;
 
 7380          typeRows[9+ii]=GLP_LO;
 
 7382          sprintf(&(auxnameRows[1+ii][0]),
"Ap%d",i);  nameRows[1+ii]=&auxnameRows[1+ii][0];
 
 7383          sprintf(&(auxnameRows[2+ii][0]),
"Bp%d",i);  nameRows[2+ii]=&auxnameRows[2+ii][0];
 
 7384          sprintf(&(auxnameRows[3+ii][0]),
"Cp%d",i);  nameRows[3+ii]=&auxnameRows[3+ii][0];
 
 7385          sprintf(&(auxnameRows[4+ii][0]),
"Dp%d",i);  nameRows[4+ii]=&auxnameRows[4+ii][0];
 
 7386          sprintf(&(auxnameRows[5+ii][0]),
"Am%d",i);  nameRows[5+ii]=&auxnameRows[5+ii][0];
 
 7387          sprintf(&(auxnameRows[6+ii][0]),
"Bm%d",i);  nameRows[6+ii]=&auxnameRows[6+ii][0];
 
 7388          sprintf(&(auxnameRows[7+ii][0]),
"Cm%d",i);  nameRows[7+ii]=&auxnameRows[7+ii][0];
 
 7389          sprintf(&(auxnameRows[8+ii][0]),
"Dm%d",i);  nameRows[8+ii]=&auxnameRows[8+ii][0];
 
 7390          sprintf(&(auxnameRows[9+ii][0]),
"LAMBDA%d",i);  nameRows[9+ii]=&auxnameRows[9+ii][0];
 
 7405       for(i=0  ; i< NpointsInFit ; i++) {
 
 7412          Coefficients[ii]=    Ox[
i];
 
 7413          Coefficients[ii+1]= -Ox[
i];
 
 7421          Coefficients[ii]=    Ox[
i];
 
 7422          Coefficients[ii+1]=  Ox[
i];
 
 7423          Coefficients[ii+2]= -Ox[
i];
 
 7424          Coefficients[ii+3]= -Ox[
i];
 
 7432       for(i=0, ii=0; i< NpointsInFit ; i++) {
 
 7436          Coefficients[NStructRowsMax+ii]=   -Ox[
i];
 
 7437          Coefficients[NStructRowsMax+ii+1]= Ox[
i];
 
 7442          Coefficients[NStructRowsMax+ii]=   -Ox[
i];
 
 7443          Coefficients[NStructRowsMax+ii+1]= -Ox[
i];
 
 7444          Coefficients[NStructRowsMax+ii+2]= Ox[
i];
 
 7445          Coefficients[NStructRowsMax+ii+3]= Ox[
i];
 
 7451       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 7455          Coefficients[2*NStructRowsMax+ii]=    1.;
 
 7456          Coefficients[2*NStructRowsMax+ii+1]= -1.;
 
 7461          Coefficients[2*NStructRowsMax+ii]=    1.;
 
 7462          Coefficients[2*NStructRowsMax+ii+1]=  1.;
 
 7463          Coefficients[2*NStructRowsMax+ii+2]= -1.;
 
 7464          Coefficients[2*NStructRowsMax+ii+3]= -1.;
 
 7470       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 7474           Coefficients[3*NStructRowsMax+ii]=   -1.;
 
 7475           Coefficients[3*NStructRowsMax+ii+1]=  1.;
 
 7480           Coefficients[3*NStructRowsMax+ii]=   -1.;
 
 7481           Coefficients[3*NStructRowsMax+ii+1]= -1.;
 
 7482           Coefficients[3*NStructRowsMax+ii+2]=  1.;
 
 7483           Coefficients[3*NStructRowsMax+ii+3]=  1.;
 
 7490       for(i=0 ; i< NpointsInFit ; i++) {
 
 7491          ii=(4+
i)*NStructRowsMax;
 
 7492          Coefficients[ii]= -M;
 
 7493          Coefficients[ii+1]= -M;
 
 7494          Coefficients[ii+2]= -M;
 
 7495          Coefficients[ii+3]=  M;
 
 7504         if(! mvdhit[i]) Coefficients[ii+4]=  1.;
 
 7511       for(i=0 ; i< NpointsInFit ; i++) {
 
 7512         if( mvdhit[i]) 
continue;
 
 7513          ii+= NStructRowsMax;
 
 7516          Coefficients[ii]= -M;
 
 7517          Coefficients[ii+1]= -M;
 
 7518          Coefficients[ii+2]= -M;
 
 7519          Coefficients[ii+3]=  M;
 
 7520          Coefficients[ii+4]=  1.;
 
 7523       for(i=0; i< NpointsInFit ; i++) {
 
 7524         ii+= NStructRowsMax;
 
 7537         Coefficients[ii]=  1./Delta[
i];
 
 7538         Coefficients[ii+1]= -1.;
 
 7539         Coefficients[ii+2]= -1.;
 
 7540         Coefficients[ii+3]=  1.;
 
 7541         Coefficients[ii+4]= -1.;
 
 7546       for(i=0 ; i< NpointsInFit ; i++) {
 
 7547         if( mvdhit[i])
continue;
 
 7548          ii+= NStructRowsMax;
 
 7551         Coefficients[ii]=  1./Delta[
i];
 
 7552         Coefficients[ii+1]= -1.;
 
 7553         Coefficients[ii+2]= -1.;
 
 7554         Coefficients[ii+3]=  1.;
 
 7555         Coefficients[ii+4]= -1.;
 
 7573         ii+= NStructRowsMax;
 
 7574       for(i=0, iii=0 ; i< NpointsInFit ; i++) {
 
 7576          Coefficients[ii+iii]= 1.;
 
 7577          Coefficients[ii+iii+1]= 1.;
 
 7578          Coefficients[ii+iii+2]= 1.;
 
 7579          Coefficients[ii+iii+3]= 1.;
 
 7582          Coefficients[ii+iii]= 1.;
 
 7583          Coefficients[ii+iii+1]= 1.;
 
 7584          Coefficients[ii+iii+2]= 1.;
 
 7585          Coefficients[ii+iii+3]= 1.;
 
 7586          Coefficients[ii+iii+4]= 1.;
 
 7587          Coefficients[ii+iii+5]= 1.;
 
 7588          Coefficients[ii+iii+6]= 1.;
 
 7589          Coefficients[ii+iii+7]= 1.;
 
 7598       sprintf(&auxStructVarName[0][0],
"m1",i);
 
 7599       StructVarName[0] = &auxStructVarName[0][0];
 
 7600       sprintf(&auxStructVarName[1][0],
"m2",i);
 
 7601       StructVarName[1] = &auxStructVarName[1][0];
 
 7603       sprintf(&auxStructVarName[2][0],
"q1",i);
 
 7604       StructVarName[2] = &auxStructVarName[2][0];
 
 7606       sprintf(&auxStructVarName[3][0],
"q2",i);
 
 7607       StructVarName[3] = &auxStructVarName[3][0];
 
 7608       for(i=0, ii=0; i< NpointsInFit ; i++) {
 
 7610           sprintf(&auxStructVarName[4+i][0],
"lam%d",i);
 
 7611           StructVarName[4+
i] = &auxStructVarName[4+
i][0];
 
 7613           sprintf(&auxStructVarName[4+nMvdHits+2*nSttHits+i][0],
"sigma%d",i);
 
 7614           StructVarName[4+nMvdHits+2*nSttHits+
i] = &auxStructVarName[4+nMvdHits+2*nSttHits+
i][0];
 
 7616           sprintf(&auxStructVarName[4+i][0],
"lamp%d",i);
 
 7617           StructVarName[4+
i] = &auxStructVarName[4+
i][0];
 
 7619           sprintf(&auxStructVarName[4+NpointsInFit+ii][0],
"lamm%d",i);
 
 7620           StructVarName[4+NpointsInFit+ii] = &auxStructVarName[4+NpointsInFit+ii][0];
 
 7622           sprintf(&auxStructVarName[4+nMvdHits+2*nSttHits+i][0],
"sigmap%d",i);
 
 7623           StructVarName[4+nMvdHits+2*nSttHits+
i] = &auxStructVarName[4+nMvdHits+2*nSttHits+
i][0];
 
 7625           sprintf(&auxStructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii][0],
"sigmam%d",i);
 
 7626           StructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii] =
 
 7627                  &auxStructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii][0];
 
 7633       sprintf(&auxStructVarName[NStructVar-1][0],
"DUMMY",i);
 
 7634       StructVarName[NStructVar-1] = &auxStructVarName[NStructVar-1][0];
 
 7641       for(i=0; i< 4; i++){
 
 7642         for(j=0, ii=0; j< NpointsInFit;j++){
 
 7644          sprintf(&aux[i*NStructRowsMax+ii][0],
"A%d",j);
 
 7645          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii]=&aux[i*NStructRowsMax+ii][0];
 
 7646          sprintf(&aux[i*NStructRowsMax+ii+1][0],
"B%d",j);
 
 7647          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+1]=&aux[i*NStructRowsMax+ii+1][0];
 
 7650          sprintf(&aux[i*NStructRowsMax+ii][0],
"Ap%d",j);
 
 7651          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii]=&aux[i*NStructRowsMax+ii][0];
 
 7652          sprintf(&aux[i*NStructRowsMax+ii+1][0],
"Am%d",j);
 
 7653          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+1]=&aux[i*NStructRowsMax+ii+1][0];
 
 7654          sprintf(&aux[i*NStructRowsMax+ii+2][0],
"Bp%d",j);
 
 7655          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+2]=&aux[i*NStructRowsMax+ii+2][0];
 
 7656          sprintf(&aux[i*NStructRowsMax+ii+3][0],
"Bm%d",j);
 
 7657          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+3]=&aux[i*NStructRowsMax+ii+3][0];
 
 7664       for(i=0; i< NpointsInFit;i++){
 
 7666          sprintf(&aux[(i+4)*NStructRowsMax+0][0],
"A%d",i);
 
 7667          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+0]= &aux[(i+4)*NStructRowsMax+0][0];
 
 7668          sprintf(&aux[(i+4)*NStructRowsMax+1][0],
"B%d",i);
 
 7669          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+1]= &aux[(i+4)*NStructRowsMax+1][0];
 
 7670          sprintf(&aux[(i+4)*NStructRowsMax+2][0],
"C%d",i);
 
 7671          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+2]= &aux[(i+4)*NStructRowsMax+2][0];
 
 7672          sprintf(&aux[(i+4)*NStructRowsMax+3][0],
"D%d",i);
 
 7673          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+3]= &aux[(i+4)*NStructRowsMax+3][0];
 
 7675          sprintf(&aux[(i+4)*NStructRowsMax+0][0],
"Ap%d",i);
 
 7676          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+0]= &aux[(i+4)*NStructRowsMax+0][0];
 
 7677          sprintf(&aux[(i+4)*NStructRowsMax+1][0],
"Bp%d",i);
 
 7678          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+1]= &aux[(i+4)*NStructRowsMax+1][0];
 
 7679          sprintf(&aux[(i+4)*NStructRowsMax+2][0],
"Cp%d",i);
 
 7680          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+2]= &aux[(i+4)*NStructRowsMax+2][0];
 
 7681          sprintf(&aux[(i+4)*NStructRowsMax+3][0],
"Dp%d",i);
 
 7682          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+3]= &aux[(i+4)*NStructRowsMax+3][0];
 
 7683          sprintf(&aux[(i+4)*NStructRowsMax+4][0],
"LAMBDA%d",i);
 
 7684          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+4]= &aux[(i+4)*NStructRowsMax+4][0];
 
 7689       for(i=0, ii=0; i< NpointsInFit;i++){
 
 7690         if( mvdhit[i]) 
continue;
 
 7691          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax][0],
"Am%d",i);
 
 7692          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax]=
 
 7693                 &aux[(ii+4+NpointsInFit)*NStructRowsMax][0];
 
 7694          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+1][0],
"Bm%d",i);
 
 7695          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+1]=
 
 7696                 &aux[(ii+4+NpointsInFit)*NStructRowsMax+1][0];
 
 7697          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+2][0],
"Cm%d",i);
 
 7698          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+2]=
 
 7699                 &aux[(ii+4+NpointsInFit)*NStructRowsMax+2][0];
 
 7700          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+3][0],
"Dm%d",i);
 
 7701          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+3]=
 
 7702                 &aux[(ii+4+NpointsInFit)*NStructRowsMax+3][0];
 
 7703          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+4][0],
"LAMBDA%d",i);
 
 7704          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+4]=
 
 7705                 &aux[(ii+4+NpointsInFit)*NStructRowsMax+4][0];
 
 7710       for(i=0; i< NpointsInFit;i++){
 
 7713          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 7714          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax]=
 
 7715                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 7716          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"A%d",i);
 
 7717          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 7718                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 7719          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"B%d",i);
 
 7720          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 7721                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 7722          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"C%d",i);
 
 7723          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 7724                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 7725          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"D%d",i);
 
 7726          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 7727                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 7730          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 7731          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax]=
 
 7732                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 7733          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"Ap%d",i);
 
 7734          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 7735                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 7736          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"Bp%d",i);
 
 7737          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 7738                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 7739          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"Cp%d",i);
 
 7740          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 7741                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 7742          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"Dp%d",i);
 
 7743          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 7744                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 7749       for(i=0, ii=0; i< NpointsInFit;i++){
 
 7750         if( mvdhit[i]) 
continue;
 
 7752          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 7753          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax]=
 
 7754                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 7756          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"Am%d",i);
 
 7757          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 7758                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 7760          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"Bm%d",i);
 
 7761          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 7762                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 7764          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"Cm%d",i);
 
 7765          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 7766                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 7768          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"Dm%d",i);
 
 7769          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 7770                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 7775       for(i=0, ii=0; i< NpointsInFit;i++){
 
 7777          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii][0],
"A%d",i);
 
 7778          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii]=
 
 7779                  &aux[(NStructVar-1)*NStructRowsMax+ii][0];
 
 7781          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+1][0],
"B%d",i);
 
 7782          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+1]=
 
 7783                  &aux[(NStructVar-1)*NStructRowsMax+ii+1][0];
 
 7785          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+2][0],
"C%d",i);
 
 7786          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+2]=
 
 7787                  &aux[(NStructVar-1)*NStructRowsMax+ii+2][0];
 
 7789          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+3][0],
"D%d",i);
 
 7790          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+3]=
 
 7791                  &aux[(NStructVar-1)*NStructRowsMax+ii+3][0];
 
 7794          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii][0],
"Ap%d",i);
 
 7795          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii]=
 
 7796                  &aux[(NStructVar-1)*NStructRowsMax+ii][0];
 
 7798          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+1][0],
"Am%d",i);
 
 7799          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+1]=
 
 7800                  &aux[(NStructVar-1)*NStructRowsMax+ii+1][0];
 
 7802          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+2][0],
"Bp%d",i);
 
 7803          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+2]=
 
 7804                  &aux[(NStructVar-1)*NStructRowsMax+ii+2][0];
 
 7806          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+3][0],
"Bm%d",i);
 
 7807          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+3]=
 
 7808                  &aux[(NStructVar-1)*NStructRowsMax+ii+3][0];
 
 7809          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+4][0],
"Cp%d",i);
 
 7810          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+4]=
 
 7811                  &aux[(NStructVar-1)*NStructRowsMax+ii+4][0];
 
 7813          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+5][0],
"Cm%d",i);
 
 7814          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+5]=
 
 7815                  &aux[(NStructVar-1)*NStructRowsMax+ii+5][0];
 
 7817          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+6][0],
"Dp%d",i);
 
 7818          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+6]=
 
 7819                  &aux[(NStructVar-1)*NStructRowsMax+ii+6][0];
 
 7821          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+7][0],
"Dm%d",i);
 
 7822          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+7]=
 
 7823                  &aux[(NStructVar-1)*NStructRowsMax+ii+7][0];
 
 7833       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 7843           ValueB[ii]  =  Oy[
i]+2.*M;
 
 7844           ValueB[ii+1]= -Oy[
i]+2.*M;
 
 7845           ValueB[ii+2]= Delta[
i]+2.*M;
 
 7846           ValueB[ii+3]= M-Delta[
i]+2.*M;
 
 7857           ValueB[ii]  =  Oy[
i]+DriftRadiusconformal[ 
i ]+2.*M;
 
 7858           ValueB[ii+1]= -Oy[
i]-DriftRadiusconformal[ 
i ]+2.*M;
 
 7859           ValueB[ii+2]= Delta[
i]+2.*M;
 
 7860           ValueB[ii+3]= M-Delta[
i]+2.*M;
 
 7872           ValueB[ii+4]=  Oy[
i]-DriftRadiusconformal[ 
i ]+2.*M;
 
 7873           ValueB[ii+5]= -Oy[
i]+DriftRadiusconformal[ 
i ]+2.*M;
 
 7874           ValueB[ii+6]= Delta[
i]+2.*M;
 
 7875           ValueB[ii+7]= M-Delta[
i]+2.*M;
 
 7886       for(i=0 , ii=0; i< NpointsInFit ; i++) {
 
 7887         if( mvdhit[i]) 
continue;
 
 7891         sprintf(&auxNameRanges[ii][0],
"LAMBDA%d",i);
 
 7892         NameRanges[ii]=&auxNameRanges[ii][0];
 
 7900       for(i=0 ; i< NpointsInFit ; i++) {
 
 7903           sprintf(&auxTypeofBound[i][0],
"BV");   TypeofBound[
i]= &auxTypeofBound[
i][0];
 
 7904           sprintf(&auxBoundStructVarName[i][0],
"lam%d",i);
 
 7907           sprintf(&auxTypeofBound[i][0],
"BV");   TypeofBound[
i]= &auxTypeofBound[
i][0];
 
 7908           sprintf(&auxBoundStructVarName[i][0],
"lamp%d",i);
 
 7911         BoundStructVarName[
i]=&auxBoundStructVarName[
i][0];
 
 7916       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 7917         if( mvdhit[i]) 
continue;
 
 7919           sprintf(&auxTypeofBound[ii+NpointsInFit][0],
"BV");
 
 7920           TypeofBound[ii+NpointsInFit]= &auxTypeofBound[ii+NpointsInFit][0];
 
 7921           sprintf(&auxBoundStructVarName[ii+NpointsInFit][0],
"lamm%d",i);
 
 7922           BoundStructVarName[ii+NpointsInFit]=&auxBoundStructVarName[ii+NpointsInFit][0];
 
 7923           BoundValue[ii+NpointsInFit]=0.;
 
 7928           sprintf(&auxTypeofBound[NpointsInFit+nSttHits][0],
"FX");
 
 7929           TypeofBound[NpointsInFit+nSttHits]= &auxTypeofBound[NpointsInFit+nSttHits][0];
 
 7931           sprintf(&auxTypeofBound[NpointsInFit+nSttHits][0],
"FX");
 
 7932           TypeofBound[NpointsInFit+nSttHits]= &auxTypeofBound[NpointsInFit+nSttHits][0];
 
 7934           sprintf(&auxBoundStructVarName[NpointsInFit+nSttHits][0],
"DUMMY");
 
 7935           BoundStructVarName[NpointsInFit+nSttHits]=
 
 7936                 &auxBoundStructVarName[NpointsInFit+nSttHits][0];
 
 7937           BoundValue[NpointsInFit+nSttHits]=2.*M;
 
 7948 cout<<
"n.  punti nel fit "<<NpointsInFit<<endl;
 
 7951 cout<<
"nRows "<<nRows<<endl;
 
 7952 for(
int ic =0;ic<nRows; ic++){
 
 7953    cout<<
"n.  Row  "<<ic<<
", nameRows "<<nameRows[ic]<<
",  typeRows "<<typeRows[ic]<<endl;
 
 7956 cout<<
"NStructRowsMax, NStructVar "<<NStructRowsMax<<
", "<<NStructVar<<endl;
 
 7957 for(
int ic =0;ic<NStructVar; ic++){
 
 7958    cout<<
"NRowsInWhichStructVarArePresent  "<<NRowsInWhichStructVarArePresent[ic]
 
 7959      <<
", nome var. strut. n."<<ic<<
"  = " 
 7960      <<StructVarName[ic]<<endl;
 
 7962   for(
int jc=0; jc<NRowsInWhichStructVarArePresent[ic];jc++){
 
 7963    cout<<
"n. "<<jc<<
"  NameRowsInWhichStructVarArePresent  " 
 7964         <<NameRowsInWhichStructVarArePresent[ic*NStructRowsMax+jc]<<endl;
 
 7969 cout<<
"n Coefficient "<<21*nMvdHits+24*nSttHits<<endl;
 
 7971 for(
int ic =0;ic<NStructVar; ic++){
 
 7972    cout<<
"Struct. Var."<< StructVarName[ic] <<
" e' presente in " 
 7973         << NRowsInWhichStructVarArePresent[ic]<<
"  Rows;"<<endl;
 
 7974   for(ii=0;ii<NRowsInWhichStructVarArePresent[ic];ii++){
 
 7976    cout<<
"\tin Row "<<NameRowsInWhichStructVarArePresent[ic*NStructRowsMax+ii]
 
 7977          <<
", ha  Coefficient   "<<Coefficients[ic*NStructRowsMax+ii]<<
 
 7978         " (n. sequenziale = "<<iii<<
")"<<endl;
 
 7983 cout<<
"n valuesB "<<nRows-1<<endl;
 
 7984 for(
int ic =0;ic<nRows-1; ic++){
 
 7985    cout<<
"n. "<<ic<<
",  valuesB   "<<ValueB[ic]<<endl;
 
 7987 cout<<
"n ranges "<<nRanges<<endl;
 
 7988 for(
int ic =0;ic<nRanges; ic++){
 
 7989    cout<<
"n. "<<ic<<
",  RANGES   "<<ValueRanges[ic]<<endl;
 
 7991 cout<<
"n Bounds "<<nBounds<<endl;
 
 7992 for(
int ic =0;ic<nBounds; ic++){
 
 7993    cout<<
"n. "<<ic<<
",  Bounds   "<<BoundValue[ic]<<endl;
 
 7994    cout<<
"n. "<<ic<<
",  Bound Type   "<<TypeofBound[ic]<<endl;
 
 7995    cout<<
"n. "<<ic<<
",  Bound Name   "<<BoundStructVarName[ic]<<endl;
 
 8010             nRows,nameRows,typeRows, 
 
 8011             NStructVar, NStructRowsMax, NRowsInWhichStructVarArePresent,  
 
 8012       StructVarName, NameRowsInWhichStructVarArePresent,  
 
 8015       nRanges, ValueRanges, NameRanges, 
 
 8016       nBounds, BoundValue, BoundStructVarName, TypeofBound 
 
 8020         if(status != 0) 
return -5 ;
 
 8025 printf(
"from FitHelixCylinder  printout dopo glp_main -------------------------------\n");
 
 8026 printf(
"      number of structural variables %d\n",NStructVar);
 
 8028 for(ica=0;ica<NStructVar;ica++){
 
 8029     printf(
"name of structural variable %s and its final value %g\n",
 
 8030            StructVarName[ica], final_values[ica]);
 
 8032 printf(
"from FitHelixCylinder  printout dopo glp_main  -------------------------------\n");
 
 8053      m1_result = final_values[0];
 
 8054      m2_result = final_values[1];
 
 8055      q1_result = final_values[2];
 
 8056      q2_result = final_values[3];
 
 8058 if(
istampa>2) cout<<
"Results : m1 = "<<m1_result<<
", m2= "<<m2_result<<
", q1 = "<<q1_result<<
 
 8059         ", q2 = "<<q2_result<<endl;
 
 8062         if( final_values[0]==0. && final_values[1]==0. && final_values[2]==0. &&final_values[3]==0. )
 
 8068      *qu = q1_result - q2_result;
 
 8069      *emme = m1_result-m2_result ;
 
 8072     if( 
fabs( *qu ) > 1.e-10) {    
 
 8073      *pAlfa = *emme/(*qu);
 
 8078       *pAlfa = *pAlfa*cose - *pBeta*sine;
 
 8079       *pBeta = alfetta*sine + *pBeta*cose;
 
 8082     }  
else if(
fabs(*emme)> 1.e-10)  {
 
 8084        angle = atan(*emme) + rotationangle;
 
 8085        if( 
fabs(
cos(angle)) > 1.e-10 ) {
 
 8087          *pBeta = -(*pAlfa)/tan(angle);
 
 8105       *pGamma += (trajectory_vertex[0]*trajectory_vertex[0]+
 
 8106                         trajectory_vertex[1]*trajectory_vertex[1]
 
 8107                 -*pAlfa*trajectory_vertex[0]-*pBeta*trajectory_vertex[1]);
 
 8108       *pAlfa -=  2.*trajectory_vertex[0];
 
 8109       *pBeta -=  2.*trajectory_vertex[1];
 
 8112       if(
fabs(cose-*emme*sine)> 1.e-10) {
 
 8113         *qu=*qu/(cose-*emme*sine);
 
 8114         *emme=(*emme*cose+sine)/(cose-*emme*sine);
 
 8117         if(
fabs(sine+*emme*cose) < 1.e-10)  {
 
 8118   cout<<
" From FitHelixCylinder, equation of XY circle : X**2 + Y**2 =0," 
 8119         <<
" situation impossible in principle! Returning -1" 
 8125         *qu = *qu/(sine+*emme*cose);
 
 8147                         Short_t nSkewHitsinTrack,
 
 8162  Short_t  NpointsInFit = nSkewHitsinTrack-NMAX <0 ?  nSkewHitsinTrack :  NMAX;
 
 8165  bool mvdhit[NpointsInFit];
 
 8185                 Delta[NpointsInFit];
 
 8187  Short_t  
i, j, ii, iii, 
n, nSttHits, nMvdHits;
 
 8190  char nome[300], stringa[300], stringa2[300];
 
 8191  float m1_result,m2_result, q1_result,q2_result, A1_result, A2_result;
 
 8195         if(nSkewHitsinTrack==0) {
 
 8196         cout<<
"from FitSZspace, Evento "<<
IVOLTE<<endl;
 
 8197                 cout<<
"from PndSttTrackFinderReal::FitSZspace  :  no points in fit, return!\n";
 
 8208  rotationangle = 
PI/2.;
 
 8211  cose = 
cos(rotationangle);
 
 8212  sine = 
sin(rotationangle);
 
 8214  nSttHits = nMvdHits = 0;
 
 8216  for(i=0;i<NpointsInFit; i++){
 
 8217         Ox[
i] =   Z[
i]*cose +(S[
i] - FInot)*sine;
 
 8218         Oy[
i] = -Z[
i]*sine +(S[
i] - FInot)*cose;
 
 8219         Delta[
i] = ErrorDriftRadius[
i];
 
 8221         if( DriftRadius[ i ]<0. )  
 
 8237         int NStructVar =     4           +    1       +  nMvdHits * 2     +                nSttHits *4 ;
 
 8241         int nRows =     1    +  nMvdHits * 4  +               nSttHits * 9;
 
 8245         int typeRows[nRows];
 
 8246         char * nameRows[nRows];
 
 8247         char  auxnameRows[nRows][20];
 
 8249         int  NStructRowsMax = 8*NpointsInFit ;  
 
 8251         double final_values[NStructVar];
 
 8252         int  NRowsInWhichStructVarArePresent[NStructVar];
 
 8253         char *StructVarName[NStructVar];
 
 8254         char auxStructVarName[NStructVar][20];
 
 8255         char *NameRowsInWhichStructVarArePresent[NStructVar*NStructRowsMax];
 
 8256         char aux[NStructVar*NStructRowsMax][20];
 
 8257         double Coefficients[NStructVar*NStructRowsMax];
 
 8260         double ValueB[nRows-1]; 
 
 8262         int nRanges = nSttHits;
 
 8263         double ValueRanges[nRanges];
 
 8264         char *NameRanges[nRanges];
 
 8265         char auxNameRanges[nRanges][20];
 
 8268         int nBounds=NpointsInFit+nSttHits+1+2;
 
 8269         double BoundValue[nBounds];
 
 8270         char *BoundStructVarName[nBounds];
 
 8271         char auxBoundStructVarName[nBounds][20];
 
 8272         char *TypeofBound[nBounds];
 
 8273         char auxTypeofBound[nBounds][20];
 
 8282         NRowsInWhichStructVarArePresent[0] =    
 
 8283         NRowsInWhichStructVarArePresent[1] =    
 
 8284         NRowsInWhichStructVarArePresent[2] =    
 
 8285         NRowsInWhichStructVarArePresent[3] = nMvdHits*2 + nSttHits *4;  
 
 8287       for(i=0,ii=0; i< NpointsInFit ; i++) {
 
 8289                         NRowsInWhichStructVarArePresent[4+ii]= 4;
 
 8291                         NRowsInWhichStructVarArePresent[4+ii]= 5;
 
 8297       for(i=0; i< NpointsInFit ; i++) {
 
 8299                         NRowsInWhichStructVarArePresent[4+ii]= 5;
 
 8309         for(i=0 ; i< nMvdHits+2*nSttHits ; i++) {
 
 8310                 NRowsInWhichStructVarArePresent[4+ii+
i]= 5;
 
 8313         NRowsInWhichStructVarArePresent[4+ii+nMvdHits+2*nSttHits]= nMvdHits*4 + nSttHits*8;
 
 8344       sprintf(&(auxnameRows[0][0]),
"OBJECT");
 
 8345       nameRows[0]=&auxnameRows[0][0];
 
 8347       for(i=0 , ii=0 ; i< NpointsInFit ; i++) {
 
 8350        typeRows[1+ii]=GLP_UP;typeRows[2+ii]=GLP_UP;typeRows[3+ii]=GLP_UP;typeRows[4+ii]=GLP_UP;
 
 8351        typeRows[5+ii]=GLP_LO;
 
 8353        sprintf(&(auxnameRows[1+ii][0]),
"A%d",i);  nameRows[1+ii]=&auxnameRows[1+ii][0];
 
 8354        sprintf(&(auxnameRows[2+ii][0]),
"B%d",i);  nameRows[2+ii]=&auxnameRows[2+ii][0];
 
 8355        sprintf(&(auxnameRows[3+ii][0]),
"C%d",i);  nameRows[3+ii]=&auxnameRows[3+ii][0];
 
 8356        sprintf(&(auxnameRows[4+ii][0]),
"D%d",i);  nameRows[4+ii]=&auxnameRows[4+ii][0];
 
 8360          typeRows[1+ii]=GLP_UP;typeRows[2+ii]=GLP_UP;typeRows[3+ii]=GLP_UP;typeRows[4+ii]=GLP_UP;
 
 8361          typeRows[5+ii]=GLP_UP;typeRows[6+ii]=GLP_UP;typeRows[7+ii]=GLP_UP;typeRows[8+ii]=GLP_UP;
 
 8362          typeRows[9+ii]=GLP_LO;
 
 8364          sprintf(&(auxnameRows[1+ii][0]),
"Ap%d",i);  nameRows[1+ii]=&auxnameRows[1+ii][0];
 
 8365          sprintf(&(auxnameRows[2+ii][0]),
"Bp%d",i);  nameRows[2+ii]=&auxnameRows[2+ii][0];
 
 8366          sprintf(&(auxnameRows[3+ii][0]),
"Cp%d",i);  nameRows[3+ii]=&auxnameRows[3+ii][0];
 
 8367          sprintf(&(auxnameRows[4+ii][0]),
"Dp%d",i);  nameRows[4+ii]=&auxnameRows[4+ii][0];
 
 8368          sprintf(&(auxnameRows[5+ii][0]),
"Am%d",i);  nameRows[5+ii]=&auxnameRows[5+ii][0];
 
 8369          sprintf(&(auxnameRows[6+ii][0]),
"Bm%d",i);  nameRows[6+ii]=&auxnameRows[6+ii][0];
 
 8370          sprintf(&(auxnameRows[7+ii][0]),
"Cm%d",i);  nameRows[7+ii]=&auxnameRows[7+ii][0];
 
 8371          sprintf(&(auxnameRows[8+ii][0]),
"Dm%d",i);  nameRows[8+ii]=&auxnameRows[8+ii][0];
 
 8372          sprintf(&(auxnameRows[9+ii][0]),
"LAMBDA%d",i);  nameRows[9+ii]=&auxnameRows[9+ii][0];
 
 8387       for(i=0  ; i< NpointsInFit ; i++) {
 
 8394          Coefficients[ii]=    Ox[
i];
 
 8395          Coefficients[ii+1]= -Ox[
i];
 
 8403          Coefficients[ii]=    Ox[
i];
 
 8404          Coefficients[ii+1]=  Ox[
i];
 
 8405          Coefficients[ii+2]= -Ox[
i];
 
 8406          Coefficients[ii+3]= -Ox[
i];
 
 8414       for(i=0, ii=0; i< NpointsInFit ; i++) {
 
 8418          Coefficients[NStructRowsMax+ii]=   -Ox[
i];
 
 8419          Coefficients[NStructRowsMax+ii+1]= Ox[
i];
 
 8424          Coefficients[NStructRowsMax+ii]=   -Ox[
i];
 
 8425          Coefficients[NStructRowsMax+ii+1]= -Ox[
i];
 
 8426          Coefficients[NStructRowsMax+ii+2]= Ox[
i];
 
 8427          Coefficients[NStructRowsMax+ii+3]= Ox[
i];
 
 8433       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 8437          Coefficients[2*NStructRowsMax+ii]=    1.;
 
 8438          Coefficients[2*NStructRowsMax+ii+1]= -1.;
 
 8443          Coefficients[2*NStructRowsMax+ii]=    1.;
 
 8444          Coefficients[2*NStructRowsMax+ii+1]=  1.;
 
 8445          Coefficients[2*NStructRowsMax+ii+2]= -1.;
 
 8446          Coefficients[2*NStructRowsMax+ii+3]= -1.;
 
 8452       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 8456           Coefficients[3*NStructRowsMax+ii]=   -1.;
 
 8457           Coefficients[3*NStructRowsMax+ii+1]=  1.;
 
 8462           Coefficients[3*NStructRowsMax+ii]=   -1.;
 
 8463           Coefficients[3*NStructRowsMax+ii+1]= -1.;
 
 8464           Coefficients[3*NStructRowsMax+ii+2]=  1.;
 
 8465           Coefficients[3*NStructRowsMax+ii+3]=  1.;
 
 8472       for(i=0 ; i< NpointsInFit ; i++) {
 
 8473          ii=(4+
i)*NStructRowsMax;
 
 8474          Coefficients[ii]= -M;
 
 8475          Coefficients[ii+1]= -M;
 
 8476          Coefficients[ii+2]= -M;
 
 8477          Coefficients[ii+3]=  M;
 
 8487         if(! mvdhit[i]) Coefficients[ii+4]=  1.;
 
 8494       for(i=0 ; i< NpointsInFit ; i++) {
 
 8495         if( mvdhit[i]) 
continue;
 
 8496          ii+= NStructRowsMax;
 
 8499          Coefficients[ii]= -M;
 
 8500          Coefficients[ii+1]= -M;
 
 8501          Coefficients[ii+2]= -M;
 
 8502          Coefficients[ii+3]=  M;
 
 8503          Coefficients[ii+4]=  1.;
 
 8506       for(i=0; i< NpointsInFit ; i++) {
 
 8507         ii+= NStructRowsMax;
 
 8521         Coefficients[ii]=  1./Delta[
i];
 
 8522         Coefficients[ii+1]= -1.;
 
 8523         Coefficients[ii+2]= -1.;
 
 8524         Coefficients[ii+3]=  1.;
 
 8525         Coefficients[ii+4]= -1.;
 
 8530       for(i=0 ; i< NpointsInFit ; i++) {
 
 8531         if( mvdhit[i])
continue;
 
 8532          ii+= NStructRowsMax;
 
 8537         Coefficients[ii]=  1./Delta[
i];
 
 8538         Coefficients[ii+1]= -1.;
 
 8539         Coefficients[ii+2]= -1.;
 
 8540         Coefficients[ii+3]=  1.;
 
 8541         Coefficients[ii+4]= -1.;
 
 8559         ii+= NStructRowsMax;
 
 8560       for(i=0, iii=0 ; i< NpointsInFit ; i++) {
 
 8562          Coefficients[ii+iii]= 1.;
 
 8563          Coefficients[ii+iii+1]= 1.;
 
 8564          Coefficients[ii+iii+2]= 1.;
 
 8565          Coefficients[ii+iii+3]= 1.;
 
 8568          Coefficients[ii+iii]= 1.;
 
 8569          Coefficients[ii+iii+1]= 1.;
 
 8570          Coefficients[ii+iii+2]= 1.;
 
 8571          Coefficients[ii+iii+3]= 1.;
 
 8572          Coefficients[ii+iii+4]= 1.;
 
 8573          Coefficients[ii+iii+5]= 1.;
 
 8574          Coefficients[ii+iii+6]= 1.;
 
 8575          Coefficients[ii+iii+7]= 1.;
 
 8584       sprintf(&auxStructVarName[0][0],
"m1",i);
 
 8585       StructVarName[0] = &auxStructVarName[0][0];
 
 8586       sprintf(&auxStructVarName[1][0],
"m2",i);
 
 8587       StructVarName[1] = &auxStructVarName[1][0];
 
 8589       sprintf(&auxStructVarName[2][0],
"q1",i);
 
 8590       StructVarName[2] = &auxStructVarName[2][0];
 
 8592       sprintf(&auxStructVarName[3][0],
"q2",i);
 
 8593       StructVarName[3] = &auxStructVarName[3][0];
 
 8594       for(i=0, ii=0; i< NpointsInFit ; i++) {
 
 8596           sprintf(&auxStructVarName[4+i][0],
"lam%d",i);
 
 8597           StructVarName[4+
i] = &auxStructVarName[4+
i][0];
 
 8599           sprintf(&auxStructVarName[4+nMvdHits+2*nSttHits+i][0],
"sigma%d",i);
 
 8600           StructVarName[4+nMvdHits+2*nSttHits+
i] = &auxStructVarName[4+nMvdHits+2*nSttHits+
i][0];
 
 8602           sprintf(&auxStructVarName[4+i][0],
"lamp%d",i);
 
 8603           StructVarName[4+
i] = &auxStructVarName[4+
i][0];
 
 8605           sprintf(&auxStructVarName[4+NpointsInFit+ii][0],
"lamm%d",i);
 
 8606           StructVarName[4+NpointsInFit+ii] = &auxStructVarName[4+NpointsInFit+ii][0];
 
 8608           sprintf(&auxStructVarName[4+nMvdHits+2*nSttHits+i][0],
"sigmap%d",i);
 
 8609           StructVarName[4+nMvdHits+2*nSttHits+
i] = &auxStructVarName[4+nMvdHits+2*nSttHits+
i][0];
 
 8611           sprintf(&auxStructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii][0],
"sigmam%d",i);
 
 8612           StructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii] =
 
 8613                  &auxStructVarName[4+NpointsInFit+nMvdHits+2*nSttHits+ii][0];
 
 8619       sprintf(&auxStructVarName[NStructVar-1][0],
"DUMMY",i);
 
 8620       StructVarName[NStructVar-1] = &auxStructVarName[NStructVar-1][0];
 
 8627       for(i=0; i< 4; i++){
 
 8628         for(j=0, ii=0; j< NpointsInFit;j++){
 
 8630          sprintf(&aux[i*NStructRowsMax+ii][0],
"A%d",j);
 
 8631          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii]=&aux[i*NStructRowsMax+ii][0];
 
 8632          sprintf(&aux[i*NStructRowsMax+ii+1][0],
"B%d",j);
 
 8633          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+1]=&aux[i*NStructRowsMax+ii+1][0];
 
 8636          sprintf(&aux[i*NStructRowsMax+ii][0],
"Ap%d",j);
 
 8637          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii]=&aux[i*NStructRowsMax+ii][0];
 
 8638          sprintf(&aux[i*NStructRowsMax+ii+1][0],
"Am%d",j);
 
 8639          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+1]=&aux[i*NStructRowsMax+ii+1][0];
 
 8640          sprintf(&aux[i*NStructRowsMax+ii+2][0],
"Bp%d",j);
 
 8641          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+2]=&aux[i*NStructRowsMax+ii+2][0];
 
 8642          sprintf(&aux[i*NStructRowsMax+ii+3][0],
"Bm%d",j);
 
 8643          NameRowsInWhichStructVarArePresent[i*NStructRowsMax+ii+3]=&aux[i*NStructRowsMax+ii+3][0];
 
 8650       for(i=0; i< NpointsInFit;i++){
 
 8652          sprintf(&aux[(i+4)*NStructRowsMax+0][0],
"A%d",i);
 
 8653          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+0]= &aux[(i+4)*NStructRowsMax+0][0];
 
 8654          sprintf(&aux[(i+4)*NStructRowsMax+1][0],
"B%d",i);
 
 8655          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+1]= &aux[(i+4)*NStructRowsMax+1][0];
 
 8656          sprintf(&aux[(i+4)*NStructRowsMax+2][0],
"C%d",i);
 
 8657          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+2]= &aux[(i+4)*NStructRowsMax+2][0];
 
 8658          sprintf(&aux[(i+4)*NStructRowsMax+3][0],
"D%d",i);
 
 8659          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+3]= &aux[(i+4)*NStructRowsMax+3][0];
 
 8661          sprintf(&aux[(i+4)*NStructRowsMax+0][0],
"Ap%d",i);
 
 8662          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+0]= &aux[(i+4)*NStructRowsMax+0][0];
 
 8663          sprintf(&aux[(i+4)*NStructRowsMax+1][0],
"Bp%d",i);
 
 8664          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+1]= &aux[(i+4)*NStructRowsMax+1][0];
 
 8665          sprintf(&aux[(i+4)*NStructRowsMax+2][0],
"Cp%d",i);
 
 8666          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+2]= &aux[(i+4)*NStructRowsMax+2][0];
 
 8667          sprintf(&aux[(i+4)*NStructRowsMax+3][0],
"Dp%d",i);
 
 8668          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+3]= &aux[(i+4)*NStructRowsMax+3][0];
 
 8669          sprintf(&aux[(i+4)*NStructRowsMax+4][0],
"LAMBDA%d",i);
 
 8670          NameRowsInWhichStructVarArePresent[(i+4)*NStructRowsMax+4]= &aux[(i+4)*NStructRowsMax+4][0];
 
 8675       for(i=0, ii=0; i< NpointsInFit;i++){
 
 8676         if( mvdhit[i]) 
continue;
 
 8677          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax][0],
"Am%d",i);
 
 8678          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax]= &aux[(ii+4+NpointsInFit)*NStructRowsMax][0];
 
 8679          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+1][0],
"Bm%d",i);
 
 8680          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+1]= &aux[(ii+4+NpointsInFit)*NStructRowsMax+1][0];
 
 8681          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+2][0],
"Cm%d",i);
 
 8682          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+2]= &aux[(ii+4+NpointsInFit)*NStructRowsMax+2][0];
 
 8683          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+3][0],
"Dm%d",i);
 
 8684          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+3]= &aux[(ii+4+NpointsInFit)*NStructRowsMax+3][0];
 
 8685          sprintf(&aux[(ii+4+NpointsInFit)*NStructRowsMax+4][0],
"LAMBDA%d",i);
 
 8686          NameRowsInWhichStructVarArePresent[(ii+4+NpointsInFit)*NStructRowsMax+4]= &aux[(ii+4+NpointsInFit)*NStructRowsMax+4][0];
 
 8691       for(i=0; i< NpointsInFit;i++){
 
 8694          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 8695          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax]=
 
 8696                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 8697          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"A%d",i);
 
 8698          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 8699                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 8700          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"B%d",i);
 
 8701          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 8702                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 8703          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"C%d",i);
 
 8704          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 8705                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 8706          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"D%d",i);
 
 8707          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 8708                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 8711          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 8712          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax]=
 
 8713                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 8714          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"Ap%d",i);
 
 8715          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 8716                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 8717          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"Bp%d",i);
 
 8718          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 8719                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 8720          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"Cp%d",i);
 
 8721          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 8722                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 8723          sprintf(&aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"Dp%d",i);
 
 8724          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 8725                  &aux[(i+4+NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 8730       for(i=0, ii=0; i< NpointsInFit;i++){
 
 8731         if( mvdhit[i]) 
continue;
 
 8733          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax][0],
"OBJECT");
 
 8734          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax]=
 
 8735                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax][0];
 
 8737          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1][0],
"Am%d",i);
 
 8738          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1]=
 
 8739                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+1][0];
 
 8741          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2][0],
"Bm%d",i);
 
 8742          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2]=
 
 8743                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+2][0];
 
 8745          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3][0],
"Cm%d",i);
 
 8746          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3]=
 
 8747                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+3][0];
 
 8749          sprintf(&aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4][0],
"Dm%d",i);
 
 8750          NameRowsInWhichStructVarArePresent[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4]=
 
 8751                  &aux[(ii+4+2*NpointsInFit+nSttHits)*NStructRowsMax+4][0];
 
 8756       for(i=0, ii=0; i< NpointsInFit;i++){
 
 8758          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii][0],
"A%d",i);
 
 8759          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii]=
 
 8760                  &aux[(NStructVar-1)*NStructRowsMax+ii][0];
 
 8762          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+1][0],
"B%d",i);
 
 8763          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+1]=
 
 8764                  &aux[(NStructVar-1)*NStructRowsMax+ii+1][0];
 
 8766          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+2][0],
"C%d",i);
 
 8767          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+2]=
 
 8768                  &aux[(NStructVar-1)*NStructRowsMax+ii+2][0];
 
 8770          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+3][0],
"D%d",i);
 
 8771          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+3]=
 
 8772                  &aux[(NStructVar-1)*NStructRowsMax+ii+3][0];
 
 8775          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii][0],
"Ap%d",i);
 
 8776          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii]=
 
 8777                  &aux[(NStructVar-1)*NStructRowsMax+ii][0];
 
 8779          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+1][0],
"Am%d",i);
 
 8780          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+1]=
 
 8781                  &aux[(NStructVar-1)*NStructRowsMax+ii+1][0];
 
 8783          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+2][0],
"Bp%d",i);
 
 8784          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+2]=
 
 8785                  &aux[(NStructVar-1)*NStructRowsMax+ii+2][0];
 
 8787          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+3][0],
"Bm%d",i);
 
 8788          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+3]=
 
 8789                  &aux[(NStructVar-1)*NStructRowsMax+ii+3][0];
 
 8790          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+4][0],
"Cp%d",i);
 
 8791          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+4]=
 
 8792                  &aux[(NStructVar-1)*NStructRowsMax+ii+4][0];
 
 8794          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+5][0],
"Cm%d",i);
 
 8795          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+5]=
 
 8796                  &aux[(NStructVar-1)*NStructRowsMax+ii+5][0];
 
 8798          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+6][0],
"Dp%d",i);
 
 8799          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+6]=
 
 8800                  &aux[(NStructVar-1)*NStructRowsMax+ii+6][0];
 
 8802          sprintf(&aux[(NStructVar-1)*NStructRowsMax+ii+7][0],
"Dm%d",i);
 
 8803          NameRowsInWhichStructVarArePresent[(NStructVar-1)*NStructRowsMax+ii+7]=
 
 8804                  &aux[(NStructVar-1)*NStructRowsMax+ii+7][0];
 
 8814       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 8824           ValueB[ii]  =  Oy[
i]+2.*M;
 
 8825           ValueB[ii+1]= -Oy[
i]+2.*M;
 
 8826           ValueB[ii+2]= Delta[
i]+2.*M;
 
 8827           ValueB[ii+3]= M-Delta[
i]+2.*M;
 
 8838           ValueB[ii]  =  Oy[
i]+DriftRadius[ 
i ]+2.*M;
 
 8839           ValueB[ii+1]= -Oy[
i]-DriftRadius[ 
i ]+2.*M;
 
 8840           ValueB[ii+2]= Delta[
i]+2.*M;
 
 8841           ValueB[ii+3]= M-Delta[
i]+2.*M;
 
 8853           ValueB[ii+4]=  Oy[
i]-DriftRadius[ 
i ]+2.*M;
 
 8854           ValueB[ii+5]= -Oy[
i]+DriftRadius[ 
i ]+2.*M;
 
 8855           ValueB[ii+6]= Delta[
i]+2.*M;
 
 8856           ValueB[ii+7]= M-Delta[
i]+2.*M;
 
 8867       for(i=0 , ii=0; i< NpointsInFit ; i++) {
 
 8868         if( mvdhit[i]) 
continue;
 
 8872         sprintf(&auxNameRanges[ii][0],
"LAMBDA%d",i);
 
 8873         NameRanges[ii]=&auxNameRanges[ii][0];
 
 8881       for(i=0 ; i< NpointsInFit ; i++) {
 
 8884           sprintf(&auxTypeofBound[i][0],
"BV");   TypeofBound[
i]= &auxTypeofBound[
i][0];
 
 8885           sprintf(&auxBoundStructVarName[i][0],
"lam%d",i);
 
 8888           sprintf(&auxTypeofBound[i][0],
"BV");   TypeofBound[
i]= &auxTypeofBound[
i][0];
 
 8889           sprintf(&auxBoundStructVarName[i][0],
"lamp%d",i);
 
 8892         BoundStructVarName[
i]=&auxBoundStructVarName[
i][0];
 
 8897       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 8898         if( mvdhit[i]) 
continue;
 
 8900           sprintf(&auxTypeofBound[ii+NpointsInFit][0],
"BV");
 
 8901           TypeofBound[ii+NpointsInFit]= &auxTypeofBound[ii+NpointsInFit][0];
 
 8902           sprintf(&auxBoundStructVarName[ii+NpointsInFit][0],
"lamm%d",i);
 
 8903           BoundStructVarName[ii+NpointsInFit]=&auxBoundStructVarName[ii+NpointsInFit][0];
 
 8904           BoundValue[ii+NpointsInFit]=0.;
 
 8909           sprintf(&auxTypeofBound[NpointsInFit+nSttHits][0],
"FX");
 
 8910           TypeofBound[NpointsInFit+nSttHits]= &auxTypeofBound[NpointsInFit+nSttHits][0];
 
 8912           sprintf(&auxTypeofBound[NpointsInFit+nSttHits][0],
"FX");
 
 8913           TypeofBound[NpointsInFit+nSttHits]= &auxTypeofBound[NpointsInFit+nSttHits][0];
 
 8915           sprintf(&auxBoundStructVarName[NpointsInFit+nSttHits][0],
"DUMMY");
 
 8916           BoundStructVarName[NpointsInFit+nSttHits]=&auxBoundStructVarName[NpointsInFit+nSttHits][0];
 
 8917           BoundValue[NpointsInFit+nSttHits]=2.*M;
 
 8921           sprintf(&auxTypeofBound[NpointsInFit+nSttHits+1][0],
"FX");
 
 8922           TypeofBound[NpointsInFit+nSttHits+1]=&auxTypeofBound[NpointsInFit+nSttHits+1][0];
 
 8923           sprintf(&auxBoundStructVarName[NpointsInFit+nSttHits+1][0],
"q1");
 
 8924           BoundStructVarName[NpointsInFit+nSttHits+1]=&auxBoundStructVarName[NpointsInFit+nSttHits+1][0];
 
 8925           BoundValue[NpointsInFit+nSttHits+1]= 0.;
 
 8928           sprintf(&auxTypeofBound[NpointsInFit+nSttHits+2][0],
"FX");
 
 8929           TypeofBound[NpointsInFit+nSttHits+2]=&auxTypeofBound[NpointsInFit+nSttHits+2][0];
 
 8930           sprintf(&auxBoundStructVarName[NpointsInFit+nSttHits+2][0],
"q2");
 
 8931           BoundStructVarName[NpointsInFit+nSttHits+2]=&auxBoundStructVarName[NpointsInFit+nSttHits+2][0];
 
 8932           BoundValue[NpointsInFit+nSttHits+2]= 0.;
 
 9011             nRows,nameRows,typeRows, 
 
 9012             NStructVar, NStructRowsMax, NRowsInWhichStructVarArePresent,  
 
 9013       StructVarName, NameRowsInWhichStructVarArePresent,  
 
 9016       nRanges, ValueRanges, NameRanges, 
 
 9017       nBounds, BoundValue, BoundStructVarName, TypeofBound 
 
 9022      if (status != 0) 
return -5;        
 
 9026 printf(
"from PndSttTrackFinderReal:FitSZ, final printout dopo glpmain -------------------------------\n");
 
 9027 printf(
"      number of structural variables %d\n",NStructVar);
 
 9029 for(ica=0;ica<NStructVar;ica++){
 
 9030     printf(
"name of structural variable %s and its final value %g\n",
 
 9031            StructVarName[ica], final_values[ica]);
 
 9033 printf(
"from main, end of final printout  con routines chiamate direttamente -------------------------------\n");
 
 9042      m1_result=final_values[0];
 
 9043      m2_result=final_values[1];
 
 9048      *emme = m1_result-m2_result ;
 
 9051       if(
fabs(cose-*emme*sine)> 1.e-10) {
 
 9052         *emme=((*emme)*cose+sine)/(cose-(*emme)*sine);
 
 9080                                                      Short_t nSttSkewhitinTrack,
 
 9093    Short_t  NpointsInFit = nSttSkewhitinTrack-NMAX <0 ?  nSttSkewhitinTrack :  NMAX;
 
 9094    int    nRows= NpointsInFit*9 +1;
 
 9095    int typeRows[nRows];
 
 9096    char * nameRows[nRows];
 
 9097    char  auxnameRows[nRows][20];
 
 9100       int  NStructVar=5+NpointsInFit*4;  
 
 9101       int  NStructRows = 8*NpointsInFit ;  
 
 9102       double final_values[NStructVar];
 
 9103       int  NRowsInWhichStructVarArePresent[NStructVar];
 
 9104       char *StructVarName[NStructVar];
 
 9105       char auxStructVarName[NStructVar][20];
 
 9106       char *NameRowsInWhichStructVarArePresent[NStructVar*NStructRows];
 
 9107       char aux[NStructVar*NStructRows][20];
 
 9109       double Coefficients[NStructVar*NStructRows];
 
 9112       double ValueB[9*NpointsInFit];
 
 9115       int nRanges = NpointsInFit;
 
 9116       double ValueRanges[nRanges];
 
 9117       char *NameRanges[nRanges];
 
 9118       char auxNameRanges[nRanges][20];
 
 9121       int nBounds=2*NpointsInFit+3;
 
 9123       double BoundValue[nBounds];
 
 9124       char *BoundStructVarName[nBounds];
 
 9125       char auxBoundStructVarName[nBounds][20];
 
 9126       char *TypeofBound[nBounds];
 
 9127       char auxTypeofBound[nBounds][20];
 
 9153      char nome[300], stringa[300], stringa2[300];
 
 9157      float m1_result,m2_result, q1_result,q2_result, A1_result, A2_result;
 
 9165       for(i=0;i<nSttSkewhitinTrack; i++){
 
 9168        Ox[
i] = S[ 
i ] - FInot;
 
 9178       sprintf(&auxnameRows[0][0],
"OBJECT");
 
 9179       nameRows[0]=&auxnameRows[0][0];
 
 9181       for(i=0 ; i< NpointsInFit ; i++) {
 
 9183        typeRows[1+ii]=GLP_UP;typeRows[2+ii]=GLP_UP;typeRows[3+ii]=GLP_UP;typeRows[4+ii]=GLP_UP;
 
 9184        typeRows[5+ii]=GLP_UP;typeRows[6+ii]=GLP_UP;typeRows[7+ii]=GLP_UP;typeRows[8+ii]=GLP_UP;
 
 9185        typeRows[9+ii]=GLP_LO;
 
 9187        sprintf(&(auxnameRows[1+ii][0]),
"Ap%d",i);  nameRows[1+ii]=&auxnameRows[1+ii][0];
 
 9188        sprintf(&(auxnameRows[2+ii][0]),
"Bp%d",i);  nameRows[2+ii]=&auxnameRows[2+ii][0];
 
 9189        sprintf(&(auxnameRows[3+ii][0]),
"Cp%d",i);  nameRows[3+ii]=&auxnameRows[3+ii][0];
 
 9190        sprintf(&(auxnameRows[4+ii][0]),
"Dp%d",i);  nameRows[4+ii]=&auxnameRows[4+ii][0];
 
 9191        sprintf(&(auxnameRows[5+ii][0]),
"Am%d",i);  nameRows[5+ii]=&auxnameRows[5+ii][0];
 
 9192        sprintf(&(auxnameRows[6+ii][0]),
"Bm%d",i);  nameRows[6+ii]=&auxnameRows[6+ii][0];
 
 9193        sprintf(&(auxnameRows[7+ii][0]),
"Cm%d",i);  nameRows[7+ii]=&auxnameRows[7+ii][0];
 
 9194        sprintf(&(auxnameRows[8+ii][0]),
"Dm%d",i);  nameRows[8+ii]=&auxnameRows[8+ii][0];
 
 9195        sprintf(&(auxnameRows[9+ii][0]),
"LAMBDA%d",i);  nameRows[9+ii]=&auxnameRows[9+ii][0];
 
 9206       for(i=0, ii=0 ; i< NpointsInFit ; i++) {
 
 9208         Coefficients[i*4]=    Ox[
i];
 
 9209         Coefficients[i*4+1]=  Ox[
i];
 
 9210         Coefficients[i*4+2]= -Ox[
i];
 
 9211         Coefficients[i*4+3]= -Ox[
i];
 
 9215       for(i=0; i< NpointsInFit ; i++) {
 
 9216         Coefficients[NStructRows+i*4]=   -Ox[
i];
 
 9217         Coefficients[NStructRows+i*4+1]= -Ox[
i];
 
 9218         Coefficients[NStructRows+i*4+2]= Ox[
i];
 
 9219         Coefficients[NStructRows+i*4+3]= Ox[
i];
 
 9224       for(i=0 ; i< NpointsInFit ; i++) {
 
 9225         Coefficients[2*NStructRows+i*4]=    1.;
 
 9226         Coefficients[2*NStructRows+i*4+1]=  1.;
 
 9227         Coefficients[2*NStructRows+i*4+2]= -1.;
 
 9228         Coefficients[2*NStructRows+i*4+3]= -1.;
 
 9232       for(i=0 ; i< NpointsInFit ; i++) {
 
 9233         Coefficients[3*NStructRows+i*4]=   -1.;
 
 9234         Coefficients[3*NStructRows+i*4+1]= -1.;
 
 9235         Coefficients[3*NStructRows+i*4+2]=  1.;
 
 9236         Coefficients[3*NStructRows+i*4+3]=  1.;
 
 9240       for(i=0 ; i< NpointsInFit ; i++) {
 
 9241         Coefficients[(4+
i)*NStructRows+0]= -M;
 
 9242         Coefficients[(4+
i)*NStructRows+1]= -M;
 
 9243         Coefficients[(4+
i)*NStructRows+2]= -M;
 
 9244         Coefficients[(4+
i)*NStructRows+3]=  M;
 
 9245         Coefficients[(4+
i)*NStructRows+4]=  1.;
 
 9248       for(i=0 ; i< NpointsInFit ; i++) {
 
 9249         Coefficients[(4+i+NpointsInFit)*NStructRows+0]= -M;
 
 9250         Coefficients[(4+i+NpointsInFit)*NStructRows+1]= -M;
 
 9251         Coefficients[(4+i+NpointsInFit)*NStructRows+2]= -M;
 
 9252         Coefficients[(4+i+NpointsInFit)*NStructRows+3]=  M;
 
 9253         Coefficients[(4+i+NpointsInFit)*NStructRows+4]=  1.;
 
 9256       for(i=0; i< NpointsInFit ; i++) {
 
 9258         Coefficients[(4+i+2*NpointsInFit)*NStructRows+0]=  1./Delta[i];
 
 9259         Coefficients[(4+i+2*NpointsInFit)*NStructRows+1]= -1.;
 
 9260         Coefficients[(4+i+2*NpointsInFit)*NStructRows+2]= -1.;
 
 9261         Coefficients[(4+i+2*NpointsInFit)*NStructRows+3]=  1.;
 
 9262         Coefficients[(4+i+2*NpointsInFit)*NStructRows+4]= -1.;
 
 9265       for(i=0 ; i< NpointsInFit ; i++) {
 
 9266         Coefficients[(4+i+3*NpointsInFit)*NStructRows+0]=  1./Delta[i];
 
 9267         Coefficients[(4+i+3*NpointsInFit)*NStructRows+1]= -1.;
 
 9268         Coefficients[(4+i+3*NpointsInFit)*NStructRows+2]= -1.;
 
 9269         Coefficients[(4+i+3*NpointsInFit)*NStructRows+3]=  1.;
 
 9270         Coefficients[(4+i+3*NpointsInFit)*NStructRows+4]= -1.;
 
 9274       for(i=0 ; i< NStructRows ; i++) {
 
 9275         Coefficients[(4+4*NpointsInFit)*NStructRows+i]= 1.;
 
 9278       sprintf(&auxStructVarName[0][0],
"m1");
 
 9279       StructVarName[0] = &auxStructVarName[0][0];
 
 9280       NRowsInWhichStructVarArePresent[0]= 4*NpointsInFit;
 
 9282       sprintf(&auxStructVarName[1][0],
"m2");
 
 9283       StructVarName[1] = &auxStructVarName[1][0];
 
 9284       NRowsInWhichStructVarArePresent[1]= 4*NpointsInFit;
 
 9286       sprintf(&auxStructVarName[2][0],
"q1");
 
 9287       StructVarName[2] = &auxStructVarName[2][0];
 
 9288       NRowsInWhichStructVarArePresent[2]= 4*NpointsInFit;
 
 9290       sprintf(&auxStructVarName[3][0],
"q2");
 
 9291       StructVarName[3] = &auxStructVarName[3][0];
 
 9292       NRowsInWhichStructVarArePresent[3]= 4*NpointsInFit;
 
 9293       for(i=0; i< NpointsInFit ; i++) {
 
 9294           sprintf(&auxStructVarName[3+i+1][0],
"lamp%d",i);
 
 9295           StructVarName[4+
i] = &auxStructVarName[4+
i][0];
 
 9296           NRowsInWhichStructVarArePresent[4+
i]= 5;
 
 9298           sprintf(&auxStructVarName[4+NpointsInFit+i][0],
"lamm%d",i);
 
 9299           StructVarName[4+NpointsInFit+
i] = &auxStructVarName[4+NpointsInFit+
i][0];
 
 9300           NRowsInWhichStructVarArePresent[4+NpointsInFit+
i]= 5;
 
 9302           sprintf(&auxStructVarName[4+2*NpointsInFit+i][0],
"sigmap%d",i);
 
 9303           StructVarName[4+2*NpointsInFit+
i] = &auxStructVarName[4+2*NpointsInFit+
i][0];
 
 9304           NRowsInWhichStructVarArePresent[4+2*NpointsInFit+
i]= 5;
 
 9306           sprintf(&auxStructVarName[4+3*NpointsInFit+i][0],
"sigmam%d",i);
 
 9307           StructVarName[4+3*NpointsInFit+
i] = &auxStructVarName[4+3*NpointsInFit+
i][0];
 
 9308           NRowsInWhichStructVarArePresent[4+3*NpointsInFit+
i]= 5;
 
 9311       sprintf(&auxStructVarName[4+4*NpointsInFit][0],
"DUMMY");
 
 9312       StructVarName[4+4*NpointsInFit] = &auxStructVarName[4+4*NpointsInFit][0];
 
 9313       NRowsInWhichStructVarArePresent[4+4*NpointsInFit]= NStructRows;
 
 9315       for(i=0; i< 4; i++){
 
 9316         for(ii=0; ii< NpointsInFit;ii++){
 
 9317          sprintf(&aux[i*NStructRows+ii*4][0],
"Ap%d",ii);
 
 9318          NameRowsInWhichStructVarArePresent[i*NStructRows+ii*4]=&aux[i*NStructRows+ii*4][0];
 
 9319          sprintf(&aux[i*NStructRows+ii*4+1][0],
"Am%d",ii);
 
 9320          NameRowsInWhichStructVarArePresent[i*NStructRows+ii*4+1]=&aux[i*NStructRows+ii*4+1][0];
 
 9321          sprintf(&aux[i*NStructRows+ii*4+2][0],
"Bp%d",ii);
 
 9322          NameRowsInWhichStructVarArePresent[i*NStructRows+ii*4+2]=&aux[i*NStructRows+ii*4+2][0];
 
 9323          sprintf(&aux[i*NStructRows+ii*4+3][0],
"Bm%d",ii);
 
 9324          NameRowsInWhichStructVarArePresent[i*NStructRows+ii*4+3]=&aux[i*NStructRows+ii*4+3][0];
 
 9329       for(i=0; i< NpointsInFit;i++){
 
 9330          sprintf(&aux[(i+4)*NStructRows+0][0],
"Ap%d",i);
 
 9331          NameRowsInWhichStructVarArePresent[(i+4)*NStructRows+0]= &aux[(i+4)*NStructRows+0][0];
 
 9332          sprintf(&aux[(i+4)*NStructRows+1][0],
"Bp%d",i);
 
 9333          NameRowsInWhichStructVarArePresent[(i+4)*NStructRows+1]= &aux[(i+4)*NStructRows+1][0];
 
 9334          sprintf(&aux[(i+4)*NStructRows+2][0],
"Cp%d",i);
 
 9335          NameRowsInWhichStructVarArePresent[(i+4)*NStructRows+2]= &aux[(i+4)*NStructRows+2][0];
 
 9336          sprintf(&aux[(i+4)*NStructRows+3][0],
"Dp%d",i);
 
 9337          NameRowsInWhichStructVarArePresent[(i+4)*NStructRows+3]= &aux[(i+4)*NStructRows+3][0];
 
 9338          sprintf(&aux[(i+4)*NStructRows+4][0],
"LAMBDA%d",i);
 
 9339          NameRowsInWhichStructVarArePresent[(i+4)*NStructRows+4]= &aux[(i+4)*NStructRows+4][0];
 
 9343       for(i=0; i< NpointsInFit;i++){
 
 9344          sprintf(&aux[(i+4+NpointsInFit)*NStructRows+0][0],
"Am%d",i);
 
 9345          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit)*NStructRows+0]= &aux[(i+4+NpointsInFit)*NStructRows+0][0];
 
 9346          sprintf(&aux[(i+4+NpointsInFit)*NStructRows+1][0],
"Bm%d",i);
 
 9347          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit)*NStructRows+1]= &aux[(i+4+NpointsInFit)*NStructRows+1][0];
 
 9348          sprintf(&aux[(i+4+NpointsInFit)*NStructRows+2][0],
"Cm%d",i);
 
 9349          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit)*NStructRows+2]= &aux[(i+4+NpointsInFit)*NStructRows+2][0];
 
 9350          sprintf(&aux[(i+4+NpointsInFit)*NStructRows+3][0],
"Dm%d",i);
 
 9351          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit)*NStructRows+3]= &aux[(i+4+NpointsInFit)*NStructRows+3][0];
 
 9352          sprintf(&aux[(i+4+NpointsInFit)*NStructRows+4][0],
"LAMBDA%d",i);
 
 9353          NameRowsInWhichStructVarArePresent[(i+4+NpointsInFit)*NStructRows+4]= &aux[(i+4+NpointsInFit)*NStructRows+4][0];
 
 9357       for(i=0; i< NpointsInFit;i++){
 
 9359          sprintf(&aux[(i+4+2*NpointsInFit)*NStructRows+0][0],
"OBJECT");
 
 9360          NameRowsInWhichStructVarArePresent[(i+4+2*NpointsInFit)*NStructRows+0]= &aux[(i+4+2*NpointsInFit)*NStructRows+0][0];
 
 9361          sprintf(&aux[(i+4+2*NpointsInFit)*NStructRows+1][0],
"Ap%d",i);
 
 9362          NameRowsInWhichStructVarArePresent[(i+4+2*NpointsInFit)*NStructRows+1]= &aux[(i+4+2*NpointsInFit)*NStructRows+1][0];
 
 9363          sprintf(&aux[(i+4+2*NpointsInFit)*NStructRows+2][0],
"Bp%d",i);
 
 9364          NameRowsInWhichStructVarArePresent[(i+4+2*NpointsInFit)*NStructRows+2]= &aux[(i+4+2*NpointsInFit)*NStructRows+2][0];
 
 9365          sprintf(&aux[(i+4+2*NpointsInFit)*NStructRows+3][0],
"Cp%d",i);
 
 9366          NameRowsInWhichStructVarArePresent[(i+4+2*NpointsInFit)*NStructRows+3]= &aux[(i+4+2*NpointsInFit)*NStructRows+3][0];
 
 9367          sprintf(&aux[(i+4+2*NpointsInFit)*NStructRows+4][0],
"Dp%d",i);
 
 9368          NameRowsInWhichStructVarArePresent[(i+4+2*NpointsInFit)*NStructRows+4]= &aux[(i+4+2*NpointsInFit)*NStructRows+4][0];
 
 9372       for(i=0; i< NpointsInFit;i++){
 
 9374          sprintf(&aux[(i+4+3*NpointsInFit)*NStructRows+0][0],
"OBJECT");
 
 9375          NameRowsInWhichStructVarArePresent[(i+4+3*NpointsInFit)*NStructRows+0]= &aux[(i+4+3*NpointsInFit)*NStructRows+0][0];
 
 9376          sprintf(&aux[(i+4+3*NpointsInFit)*NStructRows+1][0],
"Am%d",i);
 
 9377          NameRowsInWhichStructVarArePresent[(i+4+3*NpointsInFit)*NStructRows+1]= &aux[(i+4+3*NpointsInFit)*NStructRows+1][0];
 
 9378          sprintf(&aux[(i+4+3*NpointsInFit)*NStructRows+2][0],
"Bm%d",i);
 
 9379          NameRowsInWhichStructVarArePresent[(i+4+3*NpointsInFit)*NStructRows+2]= &aux[(i+4+3*NpointsInFit)*NStructRows+2][0];
 
 9380          sprintf(&aux[(i+4+3*NpointsInFit)*NStructRows+3][0],
"Cm%d",i);
 
 9381          NameRowsInWhichStructVarArePresent[(i+4+3*NpointsInFit)*NStructRows+3]= &aux[(i+4+3*NpointsInFit)*NStructRows+3][0];
 
 9382          sprintf(&aux[(i+4+3*NpointsInFit)*NStructRows+4][0],
"Dm%d",i);
 
 9383          NameRowsInWhichStructVarArePresent[(i+4+3*NpointsInFit)*NStructRows+4]= &aux[(i+4+3*NpointsInFit)*NStructRows+4][0];
 
 9387       for(i=0; i< NpointsInFit;i++){
 
 9388          sprintf(&aux[(4+4*NpointsInFit)*NStructRows  +8*i][0],
"Ap%d",i);
 
 9389          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+i*8  ]= &aux[(4+4*NpointsInFit)*NStructRows  +8*
i][0];
 
 9391          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+1+8*i][0],
"Am%d",i);
 
 9392          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+1+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+1+8*
i][0];
 
 9393          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+2+8*i][0],
"Bp%d",i);
 
 9394          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+2+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+2+8*
i][0];
 
 9395          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+3+8*i][0],
"Bm%d",i);
 
 9396          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+3+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+3+8*
i][0];
 
 9397          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+4+8*i][0],
"Cp%d",i);
 
 9398          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+4+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+4+8*
i][0];
 
 9399          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+5+8*i][0],
"Cm%d",i);
 
 9400          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+5+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+5+8*
i][0];
 
 9401          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+6+8*i][0],
"Dp%d",i);
 
 9402          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+6+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+6+8*
i][0];
 
 9403          sprintf(&aux[(4+4*NpointsInFit)*NStructRows+7+8*i][0],
"Dm%d",i);
 
 9404          NameRowsInWhichStructVarArePresent[(4+4*NpointsInFit)*NStructRows+7+8*i]= &aux[(4+4*NpointsInFit)*NStructRows+7+8*
i][0];
 
 9409       for(i=0 ; i< NpointsInFit ; i++) {
 
 9410           ValueB[i*9]  =  Oy[
i]+DriftRadius[ 
i ]+2.*M;
 
 9411           ValueB[i*9+1]= -Oy[
i]-DriftRadius[ 
i ]+2.*M;
 
 9412           ValueB[i*9+2]= Delta[
i]+2.*M;
 
 9413           ValueB[i*9+3]= M-Delta[
i]+2.*M;
 
 9414           ValueB[i*9+4]=  Oy[
i]-DriftRadius[ 
i ]+2.*M;
 
 9415           ValueB[i*9+5]= -Oy[
i]+DriftRadius[ 
i ]+2.*M;
 
 9416           ValueB[i*9+6]= Delta[
i]+2.*M;
 
 9417           ValueB[i*9+7]= M-Delta[
i]+2.*M;
 
 9426       for(i=0 ; i< NpointsInFit ; i++) {
 
 9428         sprintf(&auxNameRanges[i][0],
"LAMBDA%d",i);
 
 9429         NameRanges[
i]=&auxNameRanges[
i][0];
 
 9435       for(i=0 ; i< NpointsInFit ; i++) {
 
 9436           sprintf(&auxTypeofBound[i][0],
"BV");
 
 9437           TypeofBound[
i]=&auxTypeofBound[
i][0];
 
 9438           sprintf(&auxBoundStructVarName[i][0],
"lamp%d",i);
 
 9439           BoundStructVarName[
i]=&auxBoundStructVarName[
i][0];
 
 9443       for(i=0 ; i< NpointsInFit ; i++) {
 
 9444           sprintf(&auxTypeofBound[i+NpointsInFit][0],
"BV");
 
 9445           TypeofBound[i+NpointsInFit]=&auxTypeofBound[i+NpointsInFit][0];
 
 9446           sprintf(&auxBoundStructVarName[i+NpointsInFit][0],
"lamm%d",i);
 
 9447           BoundStructVarName[i+NpointsInFit]=&auxBoundStructVarName[i+NpointsInFit][0];
 
 9448           BoundValue[i+NpointsInFit]=0.;
 
 9451           sprintf(&auxTypeofBound[2*NpointsInFit][0],
"FX");
 
 9452           TypeofBound[2*NpointsInFit]=&auxTypeofBound[2*NpointsInFit][0];
 
 9453           sprintf(&auxBoundStructVarName[2*NpointsInFit][0],
"DUMMY");
 
 9454           BoundStructVarName[2*NpointsInFit]=&auxBoundStructVarName[2*NpointsInFit][0];
 
 9455           BoundValue[2*NpointsInFit]=2.*M;
 
 9460           sprintf(&auxTypeofBound[2*NpointsInFit+1][0],
"FX");
 
 9461           TypeofBound[2*NpointsInFit+1]=&auxTypeofBound[2*NpointsInFit+1][0];
 
 9462           sprintf(&auxBoundStructVarName[2*NpointsInFit+1][0],
"q1");
 
 9463           BoundStructVarName[2*NpointsInFit+1]=&auxBoundStructVarName[2*NpointsInFit+1][0];
 
 9464           BoundValue[2*NpointsInFit+1]= 0.;
 
 9466           sprintf(&auxTypeofBound[2*NpointsInFit+2][0],
"FX");
 
 9467           TypeofBound[2*NpointsInFit+2]=&auxTypeofBound[2*NpointsInFit+2][0];
 
 9468           sprintf(&auxBoundStructVarName[2*NpointsInFit+2][0],
"q2");
 
 9469           BoundStructVarName[2*NpointsInFit+2]=&auxBoundStructVarName[2*NpointsInFit+2][0];
 
 9470           BoundValue[2*NpointsInFit+2]= 0.;
 
 9484             nRows,nameRows,typeRows, 
 
 9485             NStructVar, NStructRows, NRowsInWhichStructVarArePresent,  
 
 9486       StructVarName, NameRowsInWhichStructVarArePresent,  
 
 9489       nRanges, ValueRanges, NameRanges, 
 
 9490       nBounds, BoundValue, BoundStructVarName, TypeofBound 
 
 9495         if (status != 0) 
return -100;
 
 9499      m1_result=final_values[0];
 
 9500      m2_result=final_values[1];
 
 9512      *emme = m1_result-m2_result ;
 
 9515       if(
fabs( (*emme)  )> 1.e-10) {
 
 9541                 Short_t nParallelHits,
 
 9542                 Short_t *ListParallelHits,
 
 9545                 Double_t *Fi_initial_helix_referenceframe, 
 
 9546                 Double_t *Fi_final_helix_referenceframe,   
 
 9579         aaa = 
atan2( oY, oX);  
 
 9586         if((aaa>b1&&aaa<3.*b1) || (aaa>-3.*b1&&aaa<-b1)){
 
 9588                 for (j = 0; j< nParallelHits; j++){
 
 9589                         U[j]=info[ Infoparal[ ListParallelHits[j] ]  ][0]/(
 
 9590                         info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9591                         info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9592                         info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9593                         info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9595                 Merge_Sort( nParallelHits, U, ListParallelHits);
 
 9597                 if((aaa>b1&&aaa<3.*b1)){  
 
 9600                                 for(i=0;i<nParallelHits;i++){
 
 9601                                         tmp[
i]=ListParallelHits[nParallelHits-1-
i];
 
 9602                                         aux[
i] = U[nParallelHits-1-
i];
 
 9604                                 for(i=0;i<nParallelHits;i++){
 
 9605                                         ListParallelHits[
i]=tmp[
i];
 
 9609                         for (j = 0; j< nParallelHits; j++){
 
 9610                                 V[j]=info[ Infoparal[ ListParallelHits[j] ]  ][1]/(
 
 9611                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9612                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9613                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9614                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9619                                 for(i=0;i<nParallelHits;i++){
 
 9620                                         tmp[
i]=ListParallelHits[nParallelHits-1-
i];
 
 9621                                         aux[
i] = U[nParallelHits-1-
i];
 
 9623                                 for(i=0;i<nParallelHits;i++){
 
 9624                                         ListParallelHits[
i]=tmp[
i];
 
 9628                         for (j = 0; j< nParallelHits; j++){
 
 9629                                 V[j]=info[ Infoparal[ ListParallelHits[j] ]  ][1]/(
 
 9630                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9631                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9632                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9633                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9638                 for (j = 0; j< nParallelHits; j++){
 
 9639                         V[j]=info[ Infoparal[ ListParallelHits[j] ]  ][1]/(
 
 9640                         info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9641                         info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9642                         info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9643                         info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9645                 Merge_Sort( nParallelHits, V, ListParallelHits);
 
 9647                 if((aaa<=-3.*b1 || aaa>=3.*b1)){  
 
 9650                                 for(i=0;i<nParallelHits;i++){
 
 9651                                         tmp[
i]=ListParallelHits[nParallelHits-1-
i];
 
 9652                                         aux[
i] = V[nParallelHits-1-
i];
 
 9654                                 for(i=0;i<nParallelHits;i++){
 
 9655                                         ListParallelHits[
i]=tmp[
i];
 
 9659                         for (j = 0; j< nParallelHits; j++){
 
 9660                                 U[j]=info[ Infoparal[ ListParallelHits[j] ]  ][0]/(
 
 9661                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9662                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9663                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9664                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9669                                 for(i=0;i<nParallelHits;i++){
 
 9670                                         tmp[
i]=ListParallelHits[nParallelHits-1-
i];
 
 9671                                         aux[
i] = V[nParallelHits-1-
i];
 
 9673                                 for(i=0;i<nParallelHits;i++){
 
 9674                                         ListParallelHits[
i]=tmp[
i];
 
 9678                         for (j = 0; j< nParallelHits; j++){
 
 9679                                 U[j]=info[ Infoparal[ ListParallelHits[j] ]  ][0]/(
 
 9680                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]*
 
 9681                                 info[ Infoparal[ ListParallelHits[j] ]  ][0]+
 
 9682                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]*
 
 9683                                 info[ Infoparal[ ListParallelHits[j] ]  ][1]);
 
 9696         *Fi_initial_helix_referenceframe = 
atan2(-oY,-oX) ;
 
 9699         if ( *Fi_initial_helix_referenceframe <0.)
 
 9700                         *Fi_initial_helix_referenceframe += 2.*
PI;
 
 9704         *Fi_final_helix_referenceframe = 
atan2(
 
 9705                 info[ Infoparal[ ListParallelHits[nParallelHits-1] ] ][1]-oY,
 
 9706                 info[ Infoparal[ ListParallelHits[nParallelHits-1] ] ][0]-oX
 
 9708         if ( *Fi_final_helix_referenceframe <0.)
 
 9709                         *Fi_final_helix_referenceframe += 2.*
PI;
 
 9712                 if( *Fi_final_helix_referenceframe> *Fi_initial_helix_referenceframe)
 
 9713                         *Fi_final_helix_referenceframe -= 2.*
PI;
 
 9714                 if( *Fi_final_helix_referenceframe> *Fi_initial_helix_referenceframe)
 
 9715                         *Fi_final_helix_referenceframe = *Fi_initial_helix_referenceframe;
 
 9717                 if( *Fi_final_helix_referenceframe< *Fi_initial_helix_referenceframe)
 
 9718                         *Fi_final_helix_referenceframe += 2.*
PI;
 
 9719                 if( *Fi_final_helix_referenceframe< *Fi_initial_helix_referenceframe)
 
 9720                         *Fi_final_helix_referenceframe = *Fi_initial_helix_referenceframe;
 
 9746                         Short_t *ListSkewHits,
 
 9752                         Short_t *ListParHits,
 
 9762                 index[nSkewhit+nParHits],
 
 9763                 tmp[nSkewhit+nParHits],
 
 9768                 aux[nSkewhit+nParHits];
 
 9785         aaa = 
atan2( oY, oX);  
 
 9793         if(aaa>b1&&aaa<3.*b1|| (aaa>-3.*b1&&aaa<-b1)){  
 
 9794                 if( (aaa>b1&&aaa<3.*b1 && Charge == -1)||( aaa>-3.*b1&&aaa<-b1 && Charge == 1) )
 
 9803                 for (j = 0 ; j< nParHits; j++){
 
 9808                 for (j = 0; j< nSkewhit; j++){
 
 9810                         aux[j+nParHits]=sign*(oX + Rr*
cos(SList[Infoskew[ListSkewHits[j]]]))/
 
 9811                                         (oX*oX+oY*oY+Rr*Rr + 2.*Rr*
 
 9812                                         (oX*
cos(SList[Infoskew[ListSkewHits[j]]])
 
 9813                                         +oY*
sin(SList[Infoskew[ListSkewHits[j]]])));
 
 9822                 if( ((aaa<=-3.*b1|| aaa>=3.*b1) && Charge == -1)
 
 9823                                 || ( -b1 <= aaa && aaa <= b1 && Charge == 1) ){
 
 9828                 for (j = 0 ; j< nParHits; j++){
 
 9833                 for (j = 0; j< nSkewhit; j++){
 
 9835                         aux[j+nParHits]=sign*(oY + Rr*
sin(SList[Infoskew[ListSkewHits[j]]]))/
 
 9836                         (oX*oX+oY*oY+Rr*Rr + 2.*Rr*
 
 9837                                 (oX*
cos(SList[Infoskew[ListSkewHits[j]]])
 
 9838                                 +oY*
sin(SList[Infoskew[ListSkewHits[j]]])));
 
 9847         for (j = 0 ; j< nParHits; j++){
 
 9848                 BigList[j]=Infoparal[ListParHits[j]];
 
 9851         for (j = 0; j< nSkewhit; j++){
 
 9852                 BigList[j+nParHits]=Infoskew[ListSkewHits[j]];
 
 9853                 index[j+nParHits] = j+nParHits;
 
 9859         for(i=0, j=0;i<nSkewhit+nParHits;i++){
 
 9860                 tmp[
i]=BigList[index[
i]];
 
 9862                 if( index[i] >= nParHits ){
 
 9863                         tmpList[j] = ListSkewHits[index[
i]-nParHits];
 
 9867         for(i=0;i<nSkewhit+nParHits;i++){
 
 9871         for(i=0;i<nSkewhit;i++){
 
 9872                 ListSkewHits[
i]= tmpList[
i];
 
 9894                                                      Short_t nParallelHits,
 
 9895                                                      Short_t *ListParallelHits,
 
 9897                                                      Short_t *ListSkewHits,
 
 9927     for (j = 0; j< nParallelHits; j++){              
 
 9928       auxFivalues[j] = 
atan2( info[ Infoparal[ ListParallelHits[j] ]  ][1]-oY,
 
 9929                               info[ Infoparal[ ListParallelHits[j] ]  ][0]-oX);
 
 9930       if( auxFivalues[j] < 0. ) auxFivalues[j] += 2.*
PI;
 
 9935    for (old=auxFivalues[0],flag=0, j = 1; j< nParallelHits; j++){
 
 9936       if( 
fabs(old - auxFivalues[j]) > 
PI ) {
 
 9944       for (j = 0; j< nParallelHits; j++){
 
 9945         if( auxFivalues[j] < 
PI) auxFivalues[j] += 2.*
PI;
 
 9952       for (j = 0; j< nSkewHit; j++){
 
 9953        if( S[Infoskew[ ListSkewHits[j] ]] < 
PI) {
 
 9954             auxFiSkewvalues[j] = S[Infoskew[ ListSkewHits[j] ]] + 2.*
PI;
 
 9956             auxFiSkewvalues[j] = S[Infoskew[ ListSkewHits[j] ]];
 
 9960       for (j = 0; j< nSkewHit; j++){
 
 9961        auxFiSkewvalues[j] = S[Infoskew[ ListSkewHits[j] ]];
 
 9965     Merge_Sort( nSkewHit, auxFiSkewvalues, ListSkewHits);
 
 9969      for(j = 0;j< nParallelHits; j++){
 
 9970        BigListFi[j]=auxFivalues[j];
 
 9971        BigList[j] = Infoparal[  ListParallelHits[j]  ] ;        
 
 9973       for(j=0; j<nSkewHit; j++){
 
 9974        BigListFi[j+nParallelHits]=auxFiSkewvalues[j];
 
 9975        BigList [j+nParallelHits] = Infoskew[  ListSkewHits[j]  ] ;
 
 9978     if(nSkewHit>0) 
Merge_Sort(*nTotal, BigListFi, BigList);
 
10034         bool    intersection_inner,
 
10035                 intersection_outer;
 
10058         a = 
sqrt(oX*oX+oY*oY);
 
10062                  { *status = -1 ;
return;}
 
10063         if( a >= R + Rma || R >= a + Rma)  
 
10064                  { *status = -2;
return;}
 
10066         if( a - R >= Rmi ) intersection_inner = 
false; 
else intersection_inner = 
true;
 
10068         if( a + R <= Rma || a - R >= Rma  )
 
10069                  intersection_outer = 
false; 
else intersection_outer = 
true;
 
10071         if( (! intersection_inner) && (! intersection_outer) ){
 
10072                 *Fi_low_limit = 0.;
 
10073                 *Fi_up_limit = 2.*
PI;
 
10080         FI0 = 
atan2(-oY,-oX);
 
10081         if( intersection_outer ){
 
10082                 cosFi = (a*a + R*R - Rma*Rma)/(2.*R*a);
 
10083                 if(cosFi<-1.) cosFi=-1.; 
else if(cosFi>1.) cosFi=1.;
 
10087         if( intersection_inner ){
 
10088                 cosfi = (a*a + R*R - Rmi*Rmi)/(2.*R*a);
 
10089                 if(cosfi<-1.) cosfi=-1.; 
else if(cosfi>1.) cosfi=1.;
 
10095                 if( intersection_outer && intersection_inner){
 
10096                         *Fi_low_limit=FI0 + 
fi;
 
10097                         *Fi_up_limit= FI0 +Fi;
 
10099                 } 
else if (intersection_inner) {
 
10100                         *Fi_low_limit=FI0 + 
fi;
 
10101                         *Fi_up_limit= FI0 - 
fi;
 
10103                         *Fi_low_limit=FI0 - Fi;
 
10104                         *Fi_up_limit= FI0 + Fi;
 
10111                 if( intersection_outer && intersection_inner){
 
10112                         *Fi_low_limit=FI0 - Fi;
 
10113                         *Fi_up_limit= FI0 - 
fi;
 
10115                 } 
else if (intersection_inner) {
 
10116                         *Fi_low_limit=FI0 + 
fi; 
 
10117                         *Fi_up_limit= FI0 - 
fi;
 
10119                         *Fi_low_limit=FI0 - Fi;
 
10120                         *Fi_up_limit= FI0 + Fi;
 
10129         if(*Fi_low_limit<0.) {
 
10130                 *Fi_low_limit=fmod(*Fi_low_limit,2.*
PI);
 
10131                 *Fi_low_limit += 2.*
PI;
 
10132         } 
else if (*Fi_low_limit>=2.*
PI){
 
10133                 *Fi_low_limit=fmod(*Fi_low_limit,2.*
PI);
 
10135         if(*Fi_up_limit<0.) {
 
10136                 *Fi_up_limit=fmod(*Fi_up_limit,2.*
PI);
 
10137                 *Fi_up_limit += 2.*
PI;
 
10138         } 
else if (*Fi_up_limit>=2.*
PI){
 
10139                 *Fi_up_limit=fmod(*Fi_up_limit,2.*
PI);
 
10144         if( *Fi_up_limit < *Fi_low_limit ) *Fi_up_limit += 2.*
PI;
 
10145         if( *Fi_up_limit < *Fi_low_limit ) *Fi_up_limit = *Fi_low_limit;
 
10175                    Short_t nTracksFoundSoFar,
 
10179                    Short_t * daTrackFoundaTrackMC
 
10183     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS;
 
10187            dx, 
dy, diff, d1, d2,
 
10188            delta, deltax, deltay, deltaz, deltaS,
 
10190            zmin, zmax, Smin, Smax, S1, S2,
 
10191            z1, z2, y1, y2,x1,x2,
 
10192            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
10193            aaa, bbb, 
ccc, rrr, 
angle, minor, major,
 
10194            distance, Rx, Ry, LL,
 
10195            Aellipsis1, Bellipsis1,fi1,
 
10196            fmin, fmax, 
offset, step,
 
10197            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
10202       char nome[300], nome2[300];
 
10212       sprintf(nome,
"MacroSttwithRfromMCParallelHitswithMCEvent%d", 
IVOLTE);
 
10213       sprintf(nome2,
"%s.C",nome);
 
10214       FILE * MACRO = fopen(nome2,
"w");
 
10216       fprintf(MACRO,
"void %s()\n{\n",nome);
 
10221        for( i=0; i< Nhits; i++) {
 
10222          if( info[i][5] == 1 ) {     
 
10223             if (info[i][0]-info[i][3] < xmin)   xmin = info[
i][0]-info[
i][3];
 
10224             if (info[i][0]+info[i][3] > xmax)   xmax = info[
i][0]+info[
i][3];
 
10225             if (info[i][1]-info[i][3] < ymin)   ymin = info[
i][1]-info[
i][3];
 
10226             if (info[i][1]+info[i][3] > ymax)   ymax = info[
i][1]+info[
i][3];
 
10230        if( xmin > 0. ) xmin = 0.;
 
10231        if( xmax < 0.)  xmax = 0.;
 
10232        if( ymin > 0. ) ymin = 0.;
 
10233        if( ymax < 0.)  ymax = 0.;
 
10235        deltax = xmax-
xmin;
 
10236        deltay = ymax - ymin;
 
10238        if( deltax > deltay) {
 
10239          ymin -=  0.5*(deltax-deltay);
 
10240          ymax = ymin+ deltax;
 
10243          xmin -=  0.5*(deltay-deltax);
 
10244          xmax = xmin+ deltay;
 
10248        xmax = xmax + delta*0.15;
 
10249        xmin = xmin - delta*0.15;
 
10251        ymax = ymax + delta*0.15;
 
10252        ymin = ymin - delta*0.15;
 
10255        fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
 
10261        for( i=0; i< Nhits; i++) {
 
10262          if( info[i][5] == 1 ) {     
 
10263             fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
 
10264                      i,info[i][0],info[i][1],info[i][3],info[i][3],i,i);
 
10272                 Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica, KAPPA, FI0mc  ;
 
10275                 if ( ! pMC ) continue ;
 
10281                 aaa = 
sqrt( Px*Px + Py*Py);
 
10283                 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
10284                 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
10285                 if (icode>1000000000) carica = 1.;
 
10286                 else  carica = fParticle->Charge()/3. ;    
 
10287                 if( 
fabs(carica)<0.1) 
continue;
 
10292                 FI0mc = fmod(Fifi+ 
PI, 2.*
PI);
 
10296             fprintf(MACRO,
"TEllipse* MC%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMC%d->SetFillStyle(0);\nMC%d->SetLineColor(3);\nMC%d->Draw();\n",
 
10297                      i,Cx,Cy,Rr,Rr,i,i,i);
 
10303     for(i=0; i<nTracksFoundSoFar; i++){
 
10305        if( daTrackFoundaTrackMC[i] == -1 )  
continue;
 
10310                 Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica, KAPPA, FI0mc  ;
 
10313                 if ( ! pMC ) continue ;
 
10319                 aaa = 
sqrt( Px*Px + Py*Py);
 
10321                 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
10322                 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
10323                 if (icode>1000000000) carica = 1.;
 
10324                 else  carica = fParticle->Charge()/3. ;    
 
10325         if( 
fabs(carica)<0.1) 
continue;
 
10330                 FI0mc = fmod(Fifi+ 
PI, 2.*
PI);
 
10334        double angolo = 
atan2(Oy[i],Ox[i]); 
 
10335        aaa = rrr*
cos(angolo);
 
10336        bbb = rrr*
sin(angolo);
 
10337        fprintf(MACRO,
"TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
 
10338                      i,aaa,bbb,rrr,rrr,i,i,i);
 
10345       fprintf(MACRO,
"}\n");
 
10373                    Int_t Nhits, 
Double_t info[][7],  Int_t Nincl, Int_t Minclinations[], 
Double_t inclination[][3],
 
10374                    Int_t imaxima, Int_t nMaxima 
 
10380     Int_t 
i, j, i1, ii, index, Kincl, nlow, nup, STATUS, imc, Nmin, Nmax;
 
10383            dx, 
dy, diff, d1, d2,
 
10384            delta, deltax, deltay, deltaz, deltaS,
 
10386            zmin, zmax, Smin, Smax, S1, S2,
 
10388            vx1, vy1, vz1, C0x1, C0y1, C0z1,
 
10389            aaa, bbb, 
ccc, 
angle, minor, major,
 
10390            distance, Rx, Ry, LL,
 
10391            Aellipsis1, Bellipsis1,fi1,
 
10392            fmin, fmax, 
offset, step,
 
10393            SkewInclWithRespectToS, 
zpos, zpos1, zpos2,
 
10403       char  nome2[300],nome[300];
 
10405       sprintf(nome,  
"MacroSttParTrack%dSkewTrack%dSkewHitswithRfromMCEvent%d",imaxima,nMaxima, 
IVOLTE);
 
10406       sprintf(nome2,  
"%s.C",nome);
 
10407       MACRO = fopen(nome2,
"w");
 
10408       fprintf(MACRO,
"void %s()\n{\n",nome);
 
10416        for( i=0; i< Nhits; i++) {
 
10417          if( info[i][5] == 1. )   
continue;     
 
10419          Kincl = (int) info[i][5] - 1;
 
10422          aaa = 
sqrt(inclination[Kincl][0]*inclination[Kincl][0]+inclination[Kincl][1]*inclination[Kincl][1]+
 
10423                   inclination[Kincl][2]*inclination[Kincl][2]);
 
10424          vx1 = inclination[Kincl][0]/aaa;
 
10425          vy1 = inclination[Kincl][1]/aaa;
 
10426          vz1 = inclination[Kincl][2]/aaa;
 
10430          Ox = (R+D)*
cos(Fi);
 
10431          Oy = (R+D)*
sin(Fi);
 
10437        if(STATUS < 0 ) continue ;
 
10441        for( ii=0; ii<2; ii++){
 
10444                   (POINTS1[j]-C0x1)*(POINTS1[j]-C0x1) + 
 
10445                   (POINTS1[1+j]-C0y1)*(POINTS1[1+j]-C0y1) + 
 
10446                   (POINTS1[2+j]-C0z1)*(POINTS1[2+j]-C0z1) 
 
10450         Rx = POINTS1[j]-Ox ;   
 
10451         Ry = POINTS1[1+j]-Oy ;   
 
10453         aaa = 
sqrt(Rx*Rx+Ry*Ry);
 
10454         SkewInclWithRespectToS = (-Ry*vx1 + Rx*vy1)/aaa ;
 
10455         SkewInclWithRespectToS /= 
R;
 
10456         bbb = 
sqrt( SkewInclWithRespectToS*SkewInclWithRespectToS + vz1*vz1);
 
10459            Tiltdirection1[0] = vz1/bbb;
 
10460            Tiltdirection1[1] = SkewInclWithRespectToS/bbb;
 
10462            Tiltdirection1[0] = 1.;
 
10463            Tiltdirection1[1] = 0.;
 
10466         LL = 
fabs(vx1*Rx + vy1*Ry);
 
10467         if( LL < 1.e-10) 
continue;
 
10468         Aellipsis1 = info[
i][3]*aaa/LL;
 
10470         Bellipsis1 = info[
i][3]/
R;
 
10472         if( distance >= info[i][4] + Aellipsis1) 
continue;
 
10479           distance + bbb > info[i][4]        
 
10481 cout<<
"the ellipsis goes out of the boundaries of the skew straw, hit n. "<<i<<endl
 
10482      <<
"dis. from center "<<distance+bbb<<
",  length of the straw "<<info[
i][4]<<endl;
 
10488         fi1 = 
atan2(POINTS1[j+1]-Oy, POINTS1[j]-Ox) ;  
 
10489         if( fi1 < 0.) fi1 += 2.*
PI;
 
10491         if( zmin > POINTS1[j+2] - Aellipsis1 ) zmin = POINTS1[j+2] - Aellipsis1;
 
10492         if( zmax < POINTS1[j+2] + Aellipsis1 ) zmax = POINTS1[j+2] + Aellipsis1;
 
10494         if( Smin > fi1 - Bellipsis1 ) Smin = fi1 - Bellipsis1;
 
10495         if( Smax < fi1 + Bellipsis1 ) Smax = fi1 + Bellipsis1;
 
10498         Double_t rotation1 = 180.*
atan2(Tiltdirection1[1],Tiltdirection1[0])/
PI;
 
10499         fprintf(MACRO,
"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nE%d->SetFillStyle(0);\n",
 
10500                      index,POINTS1[j+2],fi1,Aellipsis1,Bellipsis1,rotation1,index);
 
10509   if(index!=0 &&  zmax >= zmin && Smax >= Smin ){
 
10518   if(Smax > 2.*
PI) Smax = 2.*
PI;
 
10519   if( Smin < 0.) Smin = 0.;
 
10525   fprintf(MACRO,
"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",zmin,Smin,zmax,Smax);
 
10526   for( ii=0; ii< index; ii++) {
 
10527        fprintf(MACRO,
"E%d->Draw();\n",ii);
 
10530    deltaz = zmax-zmin;
 
10531    deltaS = Smax-Smin;
 
10532    fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
10533         zmin+0.05*deltaz,Smin+0.05*deltaS,zmax-0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,zmax-0.05*deltaz);
 
10534    fprintf(MACRO,
"Assex->Draw();\n");
 
10535    fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
 
10536         zmin+0.05*deltaz,Smin+0.05*deltaS,zmin+0.05*deltaz,Smax-0.05*deltaS,Smin+0.05*deltaS,Smax-0.05*deltaS);
 
10537    fprintf(MACRO,
"Assey->Draw();\n");
 
10547   if ( KAPPA >= 0.) {
 
10548      fmin = KAPPA*zmin + FI0;
 
10549      fmax = KAPPA*zmax + FI0;
 
10551      fmax = KAPPA*zmin + FI0;
 
10552      fmin = KAPPA*zmax + FI0;
 
10555     Nmax = (int) (0.5*fmax/ 
PI);
 
10557     Nmax = ( (int) (0.5*fmax/ 
PI) ) -1;
 
10560     Nmin = (int) (0.5*fmin/ 
PI);
 
10562     Nmin = ((int) (0.5*fmin/ 
PI) )-1;
 
10564   for(i=Nmin; i<= Nmax;i++){
 
10566    z1 = (i*2.*
PI-FI0)/KAPPA;
 
10567    z2 = ((i+1)*2.*
PI-FI0)/KAPPA;
 
10568    fprintf(MACRO,
"TLine* FOUND%d = new TLine(%f,%f,%f,%f);\nFOUND%d->SetLineColor(2);\nFOUND%d->Draw();\n",
 
10569                  i-Nmin,z1,0.,z2, 2.*
PI,i-Nmin,i-Nmin);
 
10582                 Double_t Rr, Dd, Fifi, Oxx, Oyy, Cx, Cy, Px, Py, carica, FI0mc  ;
 
10585                 if ( ! pMC ) continue ;
 
10591                 aaa = 
sqrt( Px*Px + Py*Py);
 
10593                 TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
 
10594                 TParticlePDG *
fParticle= fdbPDG->GetParticle(icode);
 
10595                 if (icode>1000000000) carica = 1.;
 
10596                 else  carica = fParticle->Charge()/3. ;    
 
10597         if( 
fabs(carica)<0.1) 
continue;
 
10602                 FI0mc = fmod(Fifi+ 
PI, 2.*
PI);
 
10607   if ( KAPPA >= 0.) {
 
10608      fmin = KAPPA*zmin + FI0;
 
10609      fmax = KAPPA*zmax + FI0;
 
10611      fmax = KAPPA*zmin + FI0;
 
10612      fmin = KAPPA*zmax + FI0;
 
10615     Nmax = (int) (0.5*fmax/ 
PI);
 
10617     Nmax = ( (int) (0.5*fmax/ 
PI) ) -1;
 
10620     Nmin = (int) (0.5*fmin/ 
PI);
 
10622     Nmin = ((int) (0.5*fmin/ 
PI) )-1;
 
10624   for(i=Nmin; i<= Nmax;i++){
 
10626    z1 = (i*2.*
PI-FI0)/KAPPA;
 
10627    z2 = ((i+1)*2.*
PI-FI0)/KAPPA;
 
10628    fprintf(MACRO,
"TLine* MC%d_%d = new TLine(%f,%f,%f,%f);\nMC%d_%d->SetLineColor(3);\nMC%d_%d->Draw();\n",
 
10629                  imc,i-Nmin,z1,0.,z2, 2.*
PI,imc,i-Nmin,imc,i-Nmin);
 
10645       fprintf(MACRO,
"}\n");
 
10661                   Short_t nTracksFoundSoFar,
 
10662                   Short_t *nHitsinTrack,
 
10663                   Short_t  ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHits],
 
10664                   Short_t *nSttSkewhitinTrack,
 
10665                   Short_t  ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHits],
 
10666                   Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT]
 
10673                 inclusionMC[nTracksFoundSoFar][
nmaxHits],
 
10674                 inclusionExp[nTracksFoundSoFar];
 
10676    Short_t      ntoMCtrack[nTracksFoundSoFar],
 
10677                 toMCtracklist[nTracksFoundSoFar][
nmaxHits],
 
10678                 toMCtrackfrequency[nTracksFoundSoFar][
nmaxHits];
 
10680    Short_t  
i, j, jtemp,jexp;
 
10688    for(i=0; i<nTracksFoundSoFar;i++){
 
10689      daTrackFoundaTrackMC[
i]=-1;
 
10690      inclusionExp[
i]=
true;
 
10691         for(j=0; j<nHitsinTrack[
i]+nSttSkewhitinTrack[
i];j++){
 
10692                 inclusionMC[
i][j]=
true;
 
10701      for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
 
10704         ntoMCtrack[jexp]=0;
 
10708         for(i=0; i<nHitsinTrack[jexp]; i++){
 
10709                 enne = (Short_t)( info[ 
infoparal[ ListHitsinTrack[jexp][i] ] ][6]+0.01 );
 
10710                 if(enne<0) 
continue;   
 
10712                         ntoMCtrack[jexp]=1;
 
10713                         toMCtracklist[jexp][0]= enne;
 
10714                         toMCtrackfrequency[jexp][0]=1;
 
10719                         for(j=0; j<ntoMCtrack[jexp]; j++){
 
10720                                 if( enne == toMCtracklist[jexp][j] ) {
 
10721                                         toMCtrackfrequency[jexp][j]++;
 
10727                                 toMCtracklist[jexp][ ntoMCtrack[jexp] ] = enne;
 
10728                                 toMCtrackfrequency[jexp][ ntoMCtrack[jexp] ] = 1;
 
10729                                 ntoMCtrack[jexp]++;
 
10738         for(i=0; i<nSttSkewhitinTrack[jexp]; i++){
 
10739                 enne = (Short_t)( info[ 
infoskew[ ListSkewHitsinTrack[jexp][i] ] ][6]+0.01 );
 
10740                 if(enne<0) 
continue;   
 
10742                         ntoMCtrack[jexp]=1;
 
10743                         toMCtracklist[jexp][0]= enne;
 
10744                         toMCtrackfrequency[jexp][0]=1;
 
10747                         for(j=0, flaggo=
true; j<ntoMCtrack[jexp]; j++){
 
10748                                 if( enne == toMCtracklist[jexp][j] ) {
 
10749                                         toMCtrackfrequency[jexp][j]++;
 
10755                                 toMCtracklist[jexp][ ntoMCtrack[jexp] ] = enne;
 
10756                                 toMCtrackfrequency[jexp][ ntoMCtrack[jexp] ] = 1;
 
10757                                 ntoMCtrack[jexp]++;
 
10768      while ( itemp > -1){
 
10771         for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
 
10772                 if( !inclusionExp[jexp])  
continue;
 
10773                 for(i=0; i< ntoMCtrack[jexp]; i++){
 
10774                         if( !inclusionMC[jexp][i])  
continue;
 
10775                         if( toMCtrackfrequency[jexp][i]>massimo){
 
10776                                 massimo=toMCtrackfrequency[jexp][
i];
 
10777                                 itemp = toMCtracklist[jexp][
i];
 
10783                 daTrackFoundaTrackMC[jtemp]=itemp;
 
10784                 inclusionExp[jtemp]=
false;
 
10785                 inclusionMC[jtemp][itemp]=
false;
 
10820                   Short_t nTracksFoundSoFar,
 
10821                   Short_t nHitsinTrack[MAXTRACKSPEREVENT],
 
10822                   Short_t  ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
10823                   Short_t nSttSkewhitinTrack[MAXTRACKSPEREVENT],
 
10824                   Short_t  ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
10825                   Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT]
 
10831         inclusionMC[nTracksFoundSoFar][
nmaxHits],
 
10832                 inclusionExp[nTracksFoundSoFar];
 
10834    Short_t      ntoMCtrack[nTracksFoundSoFar],
 
10835                 toMCtrackfrequency[nTracksFoundSoFar][
nmaxHits];
 
10837    Short_t  
i, j, jtemp,jexp;
 
10842                 toMCtracklist[nTracksFoundSoFar][
nmaxHits];
 
10846    for(i=0; i<nTracksFoundSoFar;i++){
 
10849                 inclusionExp[
i]=
false;
 
10852         inclusionExp[
i]=
true;
 
10853         for(j=0; j<nHitsinTrack[
i]+nSttSkewhitinTrack[
i];j++){
 
10854                 inclusionMC[
i][j]=
true;
 
10860      for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
 
10862         if(!keepit[jexp]) 
continue;
 
10864         ntoMCtrack[jexp]=0;
 
10868         for(i=0; i<nHitsinTrack[jexp]; i++){
 
10870                 enne = (Short_t)( info[ 
infoparal[ ListHitsinTrack[jexp][i] ] ][6]+0.01 );
 
10871                 if(enne<0) 
continue;   
 
10873                         ntoMCtrack[jexp]=1;
 
10874                         toMCtracklist[jexp][0]= enne;
 
10875                         toMCtrackfrequency[jexp][0]=1;
 
10878                         for(j=0, flaggo=
true; j<ntoMCtrack[jexp]; j++){
 
10879                                 if( enne == toMCtracklist[jexp][j] ) {
 
10880                                         toMCtrackfrequency[jexp][j]++;
 
10886                                 toMCtracklist[jexp][ ntoMCtrack[jexp] ] = enne;
 
10887                                 toMCtrackfrequency[jexp][ ntoMCtrack[jexp] ] = 1;
 
10888                                 ntoMCtrack[jexp]++;
 
10899      while ( itemp > -1){
 
10902         for(jexp=0; jexp< nTracksFoundSoFar ;jexp++){
 
10903                 if( !inclusionExp[jexp])  
continue;
 
10904                 for(i=0; i< ntoMCtrack[jexp]; i++){
 
10905                         if( !inclusionMC[jexp][i])  
continue;
 
10906                         if( toMCtrackfrequency[jexp][i]>massimo){
 
10907                                 massimo=toMCtrackfrequency[jexp][
i];
 
10908                                 itemp = toMCtracklist[jexp][
i];
 
10914                 daTrackFoundaTrackMC[jtemp]=itemp;
 
10915                 inclusionExp[jtemp]=
false;
 
10916                 for(jexp=0; jexp<nTracksFoundSoFar;jexp++){
 
10917                         if( !inclusionExp[jexp])  
continue;
 
10918                         for(
int jk=0;jk<ntoMCtrack[jexp];jk++){
 
10919                                 if( itemp==toMCtracklist[jexp][jk]){
 
10920                                         inclusionMC[jexp][jk]=
false;
 
10973    vers[0] = Ox - info[infopar][0];
 
10974    vers[1] = Oy - info[infopar][1];
 
10975    norm = 
sqrt( vers[0]*vers[0] + vers[1]*vers[1] );
 
10977    if(norm < 1.e-20) {
 
10978      Posiz[0] = -999999999.;
 
10983    if( 
fabs( R - 
fabs( norm - info[infopar][3] ) ) 
 
10985                 fabs( R - (norm + info[infopar][3]) )  ) {
 
10987         Posiz[0] = info[infopar][0] + info[infopar][3]*vers[0]/norm;
 
10988         Posiz[1] = info[infopar][1] + info[infopar][3]*vers[1]/norm;
 
10992         Posiz[0] = info[infopar][0] - info[infopar][3]*vers[0]/norm;
 
10993         Posiz[1] = info[infopar][1] - info[infopar][3]*vers[1]/norm;
 
11003    if( 
fabs(KAPPA)<1.e-10 ){
 
11004      Posiz[2] = -888888888.;
 
11006    } 
else if ( 
fabs(KAPPA) > 1.e10){
 
11007      Posiz[2] = -777777777.;
 
11012    fi = 
atan2(-vers[1],-vers[0]);
 
11013    if(fi<0.)  fi += 2.*
PI;
 
11016     if(fi > FI0 )  FI0 += 2.*
PI;
 
11019     if(fi < FI0 )  fi += 2.*
PI;
 
11021     Posiz[2] = (fi-FI0)/KAPPA;
 
11058              zmin, zmax, deltaz,
 
11067    if(
fabs(KAPPA)< 1.e-10) {
 
11068      Posiz[0] = -999999999.;
 
11070    } 
else if (
fabs(KAPPA)> 1.e10) {
 
11071      Posiz[0] = -888888888.;
 
11075    Posiz[0] = Ox + R * 
cos(S);
 
11076    Posiz[1] = Oy + R * 
sin(S);
 
11080         if(
istampa>=3){ cout<<
"from PndSttInfoXYZSkew : inconsistency, FI0 is not the maximum for this track "<<endl;
 
11081 cout<<
"  stampa da PndSttInfoXYZSkew,  "<<
", Z hit = "<<Z<<
", Zrift = "<<ZDrift<<
", S = "<<S<<
",  FI0 = "<<FI0<<endl;
 
11083         Posiz[0] = -777777777.;
 
11088         if(
istampa>=3) {cout<<
"from PndSttInfoXYZSkew : inconsistency, FI0 is not the minimum for this track "<<endl;
 
11089 cout<<
"  stampa da PndSttInfoXYZSkew,  "<<
", Z hit = "<<Z<<
", Zrift = "<<ZDrift<<
", S = "<<S<<
",  FI0 = "<<FI0<<endl;
 
11091         Posiz[0] = -777777777.;
 
11104      zmax = (2.*
PI-FI0)/KAPPA;
 
11107      zmin = (2.*
PI-FI0)/KAPPA;
 
11109     deltaz = zmax-zmin;
 
11113       for(sign=0;sign<=1; sign ++){
 
11114        tempZ[
sign]=Z+(2*sign-1)*ZDrift;
 
11115        if( tempZ[sign] > zmax ){
 
11116          tempZ[
sign]=fmod( tempZ[sign]-zmax, deltaz) + zmin;
 
11117        } 
else if (tempZ[sign]<zmin){
 
11118          tempZ[
sign]=fmod( tempZ[sign]-zmin, deltaz) + zmax;
 
11122         zdist1 = 
fabs( bbb - tempZ[sign]);
 
11123         zdist2 = deltaz- zdist1;
 
11124         if( zdist2<0.) zdist2 =0.;      
 
11125         zdist[
sign] = zdist1 < zdist2 ? zdist1 : zdist2;
 
11132         zdist[0] < zdist[1] ? Posiz[2] = Z -  ZDrift : Posiz[2] = Z +  ZDrift ;
 
11145                           Short_t TemporarynSttSkewhitinTrack,
 
11147                           Double_t *Fi_initial_helix_referenceframe,
 
11155      for(i=0, min = 9999., max = -9999.; i<TemporarynSttSkewhitinTrack; i++){
 
11156         if( S[i] > max ) max = S[
i];
 
11157         if( S[i] < min ) min = S[
i];
 
11162        for(i=0, min = 9999., max = -9999.; i<TemporarynSttSkewhitinTrack; i++){
 
11163         if( S[i] < 
PI ) S[
i] += 2.*
PI;
 
11164         if( S[i] > max ) max = S[
i];
 
11165         if( S[i] < min ) min = S[
i];
 
11172        if( *Fi_initial_helix_referenceframe < max ) *Fi_initial_helix_referenceframe  += 2.*
PI;
 
11174        if( *Fi_initial_helix_referenceframe > min ) *Fi_initial_helix_referenceframe  -= 2.*
PI;
 
11187                 Short_t nParallelHits,
 
11207         for(ihit=0, nleft=0, nright=0, minr = 9999999., minl = 9999999.; ihit<nParallelHits; ihit++){ 
 
11212                 cross = oX*Y[ihit] -
 
11219                         disq =  X[ihit]*X[ihit]+Y[ihit]*Y[ihit];
 
11226         if( nright> nleft) {
 
11228         } 
else if ( nleft > nright) {
 
11231                 if( minr < minl ) *Charge = -1;
 
11258                 Short_t nIntersections[2],
 
11293                 b[] = { 1., 0. , 1., 1., 0. , 1. },
 
11297                 Erre[] = {Rmi, Rma},  
 
11305                 hexagon_side_x[] = { 0., 1. , 1., 0., -1., -1., 0. },
 
11306                 hexagon_side_y[] = { 2./
sqrt(3.),1./
sqrt(3.),-1./
sqrt(3.),
 
11323                 AtLeast1[
i] = 
false;
 
11324                 nIntersections[
i]=0;
 
11325                 internal[
i] = 
true;
 
11326                 mindist[
i]=999999.;
 
11327                 for(is=0; is<6; is++){
 
11331                                                 hexagon_side_x[is]*Erre[i],
 
11332                                                 hexagon_side_x[is+1]*Erre[i],
 
11333                                                 hexagon_side_y[is]*Erre[i],
 
11334                                                 hexagon_side_y[is+1]*Erre[i],
 
11346                            for(j=0;j<Nintersections;j++){
 
11347                                 XintersectionList[ nIntersections[
i] ][
i] =tempX[j];
 
11348                                 YintersectionList[ nIntersections[
i] ][
i] =tempY[j];
 
11349                                 nIntersections[
i]++;
 
11353                         if(mindist[i]>distance) mindist[
i]=distance;
 
11369         if( (!AtLeast1[0]) && (!AtLeast1[1]) ){
 
11370           if (!
internal[1])  
return -2; 
 
11371           if( R > mindist[1]) 
return -2;
 
11372           if( !
internal[0]) 
return 1; 
 
11373           if( mindist[0] >= R)  
return -1; 
 
11375         } 
else if (AtLeast1[0] && AtLeast1[1] ){ 
 
11377         } 
else if (AtLeast1[0]){
 
11433                 for(is=0; is<nSides; is++){
 
11451                            for(j=0;j<Nintersections;j++){
 
11452                                 XintersectionList[ nIntersections ] =tempX[j];
 
11453                                 YintersectionList[ nIntersections ] =tempY[j];
 
11454                                 nIntersections += Nintersections;
 
11464         return nIntersections;
 
11481                 Short_t *nIntersections,
 
11514 b[] = {1.,              0.,     1.,             0.,     1.,             0.,     1.,             0.},
 
11515 c[] = {-2.*Ama/
sqrt(3.),Ama,    2.*Ama/
sqrt(3.),vgap/2.,2.*Ami/
sqrt(3.),Ami,    -2.*Ami/
sqrt(3.),vgap/2.},
 
11523                 side_x[] = { -vgap/2.,  -Ama ,  -Ama,   -vgap/2.,       -vgap/2.,       -Ami,
 
11524                                         -Ami,   -vgap/2.,       -vgap/2.},
 
11525                 side_y[] = {(-0.5*vgap+2.*Ama)/
sqrt(3.),        Ama/
sqrt(3.),   -Ama/
sqrt(3.),
 
11526                             -(-0.5*vgap+2.*Ama)/
sqrt(3.),       -(-0.5*vgap+2.*Ami)/
sqrt(3.),
 
11527                             -Ami/
sqrt(3.),      Ami/
sqrt(3.),   (-0.5*vgap+2.*Ami)/
sqrt(3.),
 
11528                             (-0.5*vgap+2.*Ama)/
sqrt(3.) };
 
11539                 *nIntersections =0;
 
11542                 for(is=0; is<8; is++){
 
11543                         aaa = (side_x[
is]-Ox)*(side_x[is]-Ox)+(side_y[
is]-Oy)*(side_y[is]-Oy);
 
11544                         if(aaa>maxdistq) maxdistq=aaa;
 
11545                         aaa = (side_x[is+1]-Ox)*(side_x[is+1]-Ox)+(side_y[is+1]-Oy)*(side_y[is+1]-Oy);
 
11546                         if(aaa>maxdistq) maxdistq=aaa;
 
11566                            for(j=0;j<Nintersections;j++){
 
11567                                 XintersectionList[ *nIntersections ] =tempX[j];
 
11568                                 YintersectionList[ *nIntersections ] =tempY[j];
 
11569                                 (*nIntersections)++;
 
11597           if (!
internal)  
return -1;
 
11598           if( maxdistq < R*R ) 
return -1;
 
11618                 Short_t *nIntersections,
 
11651 b[] = {1.,              0.,     1.,             0.,     1.,             0.,     1.,             0.},
 
11652 c[] = {-2.*Ama/
sqrt(3.),-Ama,   2.*Ama/
sqrt(3.),-vgap/2.,2.*Ami/
sqrt(3.),-Ami,  -2.*Ami/
sqrt(3.),-vgap/2.},
 
11660                 side_x[] = { vgap/2.,   Ama ,   Ama,    vgap/2.,        vgap/2.,        Ami,
 
11661                                         Ami,    vgap/2.,        vgap/2.},
 
11662                 side_y[] = {(-0.5*vgap+2.*Ama)/
sqrt(3.),        Ama/
sqrt(3.),   -Ama/
sqrt(3.),
 
11663                             -(-0.5*vgap+2.*Ama)/
sqrt(3.),       -(-0.5*vgap+2.*Ami)/
sqrt(3.),
 
11664                             -Ami/
sqrt(3.),      Ami/
sqrt(3.),   (-0.5*vgap+2.*Ami)/
sqrt(3.),
 
11665                             (-0.5*vgap+2.*Ama)/
sqrt(3.) };
 
11676                 *nIntersections =0;
 
11679                 for(is=0; is<8; is++){
 
11680                         aaa = (side_x[
is]-Ox)*(side_x[is]-Ox)+(side_y[
is]-Oy)*(side_y[is]-Oy);
 
11681                         if(aaa>maxdistq) maxdistq=aaa;
 
11682                         aaa = (side_x[is+1]-Ox)*(side_x[is+1]-Ox)+(side_y[is+1]-Oy)*(side_y[is+1]-Oy);
 
11683                         if(aaa>maxdistq) maxdistq=aaa;
 
11703                            for(j=0;j<Nintersections;j++){
 
11704                                 XintersectionList[ *nIntersections ] =tempX[j];
 
11705                                 YintersectionList[ *nIntersections ] =tempY[j];
 
11706                                 (*nIntersections)++;
 
11734           if (!
internal)  
return -1;
 
11735           if( maxdistq < R*R ) 
return -1;
 
11757                                 Short_t * Nintersections,
 
11769         Short_t ipossibility;
 
11789                 cout<<
"from  PndSttTrackFinderReal::IntersectionCircle_Segment :" 
11790                                 <<
" this is not the equation of a segment, return!\n";
 
11796         distq = ( a*Ox+ b*Oy + 
c )*( a*Ox+ b*Oy + c )/det;
 
11797         *distance = 
sqrt(distq);
 
11799         length = Rq - distq;
 
11800         if(length <= 0. ) 
return false; 
 
11802         length = 
sqrt(length);
 
11806         cperp = - aperp*Ox - bperp*Oy;
 
11810         Xintersection = (-bperp*c + b*cperp)/det;
 
11811         Yintersection = (-a*cperp + aperp*
c)/det;
 
11813         length_segmentq = (P1x-P2x)*(P1x-P2x) + (P1y-P2y)*(P1y-P2y);
 
11816         for(ipossibility=-1;ipossibility<2;ipossibility +=2){
 
11817                 x = Xintersection + ipossibility*length*b/det ;
 
11818                 y = Yintersection - ipossibility*length*a/det ;
 
11819                 if ( (x-P1x)*(x-P1x)+(y-P1y)*(y-P1y) >  length_segmentq
 
11821                      (x-P2x)*(x-P2x)+(y-P2y)*(y-P2y) >  length_segmentq
 
11824                 XintersectionList[*Nintersections] = 
x;
 
11825                 YintersectionList[*Nintersections] = 
y;
 
11826                 (*Nintersections)++;
 
11851         Short_t nIntersectionsCircle;
 
11868         nIntersectionsCircle=0;
 
11869         aaa = 
sqrt(Oxx*Oxx+Oyy*Oyy);
 
11873         if( !( aaa >= Rr + Rma || Rr >= aaa + Rma) &&
 
11874                 !( aaa + Rr <= Rma || aaa - Rr >= Rma  ) )      {
 
11878                 FI0 = 
atan2(-Oyy,-Oxx);
 
11879                 cosFi = (aaa*aaa + Rr*Rr - Rma*Rma)/(2.*Rr*aaa);
 
11880                 if(cosFi<-1.) cosFi=-1.; 
else if(cosFi>1.) cosFi=1.;
 
11886                 x1 = Oxx+Rr*
cos(FI0 - Fi);
 
11887                 y1 = Oyy+Rr*
sin(FI0 - Fi);
 
11888                 theta1 = 
atan2(y1,x1); 
 
11889                 x2 = Oxx+Rr*
cos(FI0 + Fi);
 
11890                 y2 = Oyy+Rr*
sin(FI0 + Fi);
 
11891                 theta2 = 
atan2(y2,x2); 
 
11895                         Theta2 = 
atan2( 
sqrt(Rma*Rma-GAP*GAP/4.),GAP/2.);
 
11896                         Theta1 = 
atan2( -
sqrt(Rma*Rma-GAP*GAP/4.),GAP/2.);
 
11897                         if( Theta1<= theta1 && theta1 <= Theta2 ){
 
11898                                 XintersectionList[nIntersectionsCircle]=x1;
 
11899                                 YintersectionList[nIntersectionsCircle]=y1;
 
11900                                 nIntersectionsCircle++;
 
11902                         if( Theta1<= theta2 && theta2 <= Theta2 ){
 
11903                                 XintersectionList[nIntersectionsCircle]=x2;
 
11904                                 YintersectionList[nIntersectionsCircle]=y2;
 
11905                                 nIntersectionsCircle++;
 
11908                         Theta2 = 
atan2( -
sqrt(Rma*Rma-GAP*GAP/4.),-GAP/2.);
 
11909                         Theta1 = 
atan2( 
sqrt(Rma*Rma-GAP*GAP/4.),-GAP/2.);
 
11910                         if( Theta1<= theta1 || theta1 <= Theta2 ){
 
11911                                 XintersectionList[nIntersectionsCircle]=x1;
 
11912                                 YintersectionList[nIntersectionsCircle]=y1;
 
11913                                 nIntersectionsCircle++;
 
11915                         if( Theta1<= theta2 || theta2 <= Theta2 ){
 
11916                                 XintersectionList[nIntersectionsCircle]=x2;
 
11917                                 YintersectionList[nIntersectionsCircle]=y2;
 
11918                                 nIntersectionsCircle++;
 
11926         return nIntersectionsCircle;
 
11948         if( (Xtraslation-Px)*
sin(Theta) + (Py-Ytraslation)*
cos(Theta) >= 0. ) 
return true;
 
11962                         Short_t nIntersections[2],
 
11977                 Short_t auxIndex[nIntersections[j]];
 
11979                 for( i=0;i<nIntersections[j];i++){
 
11980                   fi[
i] = 
atan2(YintersectionList[i][j]-Oyy,
 
11981                                 XintersectionList[i][j]-Oxx);
 
11982                   if( 
fi[i] > FiStart) 
fi[
i]  -= 2.*
PI;
 
11983                   if( 
fi[i] > FiStart) 
fi[
i] = FiStart;
 
11987                 Xcross[j] = XintersectionList[ auxIndex[nIntersections[j]-1] ][j];
 
11988                 Ycross[j] = YintersectionList[ auxIndex[nIntersections[j]-1] ][j];
 
11993                 Short_t auxIndex[nIntersections[j]];
 
11995                 for( i=0;i<nIntersections[j];i++){
 
11996                   fi[
i] = 
atan2(YintersectionList[i][j]-Oyy,
 
11997                                 XintersectionList[i][j]-Oxx);
 
11998                   if( 
fi[i] < FiStart) 
fi[
i]  += 2.*
PI;
 
11999                   if( 
fi[i] < FiStart) 
fi[
i] = FiStart;
 
12003                 Xcross[j] = XintersectionList[ auxIndex[0] ][j];
 
12004                 Ycross[j] = YintersectionList[ auxIndex[0] ][j];
 
12010           Short_t auxIndex[nIntersections[0]];
 
12013                 for( i=0;i<nIntersections[0];i++){
 
12014                   fi[
i] = 
atan2(YintersectionList[i][0]-Oyy,
 
12015                                 XintersectionList[i][0]-Oxx);
 
12016                   if( 
fi[i] > FiStart) 
fi[
i]  -= 2.*
PI;
 
12017                   if( 
fi[i] > FiStart) 
fi[
i] = FiStart;
 
12021                 Xcross[0] = XintersectionList[ auxIndex[nIntersections[0]-1] ][0];
 
12022                 Ycross[0] = YintersectionList[ auxIndex[nIntersections[0]-1] ][0];
 
12023                 Xcross[1] = XintersectionList[ auxIndex[nIntersections[0]-2] ][0];
 
12024                 Ycross[1] = YintersectionList[ auxIndex[nIntersections[0]-2] ][0];
 
12027                 for( i=0;i<nIntersections[0];i++){
 
12028                   fi[
i] = 
atan2(YintersectionList[i][0]-Oyy,
 
12029                                 XintersectionList[i][0]-Oxx);
 
12030                   if( 
fi[i] < FiStart) 
fi[
i]  += 2.*
PI;
 
12031                   if( 
fi[i] < FiStart) 
fi[
i] = FiStart;
 
12035                 Xcross[0] = XintersectionList[ auxIndex[0] ][0];
 
12036                 Ycross[0] = YintersectionList[ auxIndex[0] ][0];
 
12037                 Xcross[1] = XintersectionList[ auxIndex[1] ][0];
 
12038                 Ycross[1] = YintersectionList[ auxIndex[1] ][0];
 
12061                         Short_t nIntersections,
 
12072         if (nIntersections<2) 
return;
 
12075                 Short_t auxIndex[nIntersections];
 
12077                 for( i=0;i<nIntersections;i++){
 
12078                   fi[
i] = 
atan2(YintersectionList[i]-Oyy,
 
12079                                 XintersectionList[i]-Oxx);
 
12080                   if( fi[i] > FiStart) fi[
i]  -= 2.*
PI;
 
12081                   if( fi[i] > FiStart) fi[
i] = FiStart;
 
12085                 Xcross[0] = XintersectionList[ auxIndex[nIntersections-1] ];
 
12086                 Ycross[0] = YintersectionList[ auxIndex[nIntersections-1] ];
 
12087                 Xcross[1] = XintersectionList[ auxIndex[nIntersections-2] ];
 
12088                 Ycross[1] = YintersectionList[ auxIndex[nIntersections-2] ];
 
12091                 Short_t auxIndex[nIntersections];
 
12093                 for( i=0;i<nIntersections;i++){
 
12094                   fi[
i] = 
atan2(YintersectionList[i]-Oyy,
 
12095                                 XintersectionList[i]-Oxx);
 
12096                   if( fi[i] < FiStart) fi[
i]  += 2.*
PI;
 
12097                   if( fi[i] < FiStart) fi[
i] = FiStart;
 
12101                 Xcross[0] = XintersectionList[ auxIndex[0] ];
 
12102                 Ycross[0] = YintersectionList[ auxIndex[0] ];
 
12103                 Xcross[1] = XintersectionList[ auxIndex[1] ];
 
12104                 Ycross[1] = YintersectionList[ auxIndex[1] ];
 
12133                         Short_t *nInnerHits,
 
12134                         Short_t *ListInnerHits,
 
12135                         Short_t *nOuterHits,
 
12136                         Short_t *ListOuterHits,
 
12138                         Short_t *nInnerHitsLeft,
 
12139                         Short_t *ListInnerHitsLeft,
 
12140                         Short_t *nInnerHitsRight,
 
12141                         Short_t *ListInnerHitsRight,
 
12143                         Short_t *nOuterHitsLeft,
 
12144                         Short_t *ListOuterHitsLeft,
 
12145                         Short_t *nOuterHitsRight,
 
12146                         Short_t *ListOuterHitsRight
 
12158         *nInnerHitsRight=0;
 
12161         *nOuterHitsRight=0;
 
12162         for(ihit=0  ;ihit<
nHits;ihit++){
 
12163                 r = 
sqrt( info[ListHits[ihit]][0]*info[ListHits[ihit]][0] +
 
12164                          info[ListHits[ihit]][1]*info[ListHits[ihit]][1]);
 
12168                         ListOuterHits[ *nOuterHits ] = ListHits[ihit];
 
12170                         if(info[ListHits[ihit]][0]<0.){
 
12171                                 ListOuterHitsLeft[ *nOuterHitsLeft ] = ListHits[ihit];
 
12172                                 (*nOuterHitsLeft)++;
 
12174                                 ListOuterHitsRight[ *nOuterHitsRight ] = ListHits[ihit];
 
12175                                 (*nOuterHitsRight)++;
 
12178                         ListInnerHits[ *nInnerHits ] = ListHits[ihit];
 
12180                         if(info[ListHits[ihit]][0]<0.){
 
12181                                 ListInnerHitsLeft[ *nInnerHitsLeft ] = ListHits[ihit];
 
12182                                 (*nInnerHitsLeft)++;
 
12184                                 ListInnerHitsRight[ *nInnerHitsRight ] = ListHits[ihit];
 
12185                                 (*nInnerHitsRight)++;
 
12211         Short_t nIntersections[2];
 
12213                         XintersectionList[12][2], 
 
12214                         YintersectionList[12][2]; 
 
12245         if (!(flag == 0 || flag == 2)) 
return flag;
 
12246         if (flag == 2 &&nIntersections[0]<2 ){
 
12247                         cout<<
"PndSttTrackFinderReal::FindTrackEntranceExitbiHexagon,"<<
 
12248                         " contraddiction, nIntersections[0]="<<
 
12249                         nIntersections[0]<<
"<2, returning -99!\n";
 
12257         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12301         Short_t nIntersections;
 
12303                         XintersectionList[16], 
 
12304                         YintersectionList[16]; 
 
12357         if (!(flag == 0)) 
return flag;
 
12358         if( nIntersections<2) 
return -1;
 
12364         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12418         Short_t nIntersections;
 
12420                         XintersectionList[16], 
 
12421                         YintersectionList[16]; 
 
12468         if (!(flag == 0)) 
return flag;
 
12469         if( nIntersections<2) 
return -1;
 
12475         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12530         Short_t nIntersections[2];
 
12532                         XintersectionList[12][2], 
 
12533                         YintersectionList[12][2]; 
 
12564         if (!(flag == 0 || flag == 2)) 
return flag;
 
12565         if (flag == 2 &&nIntersections[0]<2 ){
 
12566                         cout<<
"PndSttTrackFinderReal::FindTrackEntranceExitbiHexagon,"<<
 
12567                         " contraddiction, nIntersections[0]="<<
 
12568                         nIntersections[0]<<
"<2, returning -99!\n";
 
12576         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12650         Short_t nIntersectionsCircle,
 
12653                         XintersectionList[12],
 
12654                         YintersectionList[12]; 
 
12659         Double_t Side_x[] = {   -GAP/2., -GAP/2. , -ApotemaMin, -ApotemaMin, -GAP/2., -GAP/2. },
 
12660                  Side_y[] = {   
sqrt(Rma*Rma-GAP*GAP/4.),  (2.*ApotemaMin-GAP)/
sqrt(3.),
 
12661                                 ApotemaMin/
sqrt(3.),
 
12662                                 -ApotemaMin/
sqrt(3.),
 
12663                                 -(2.*ApotemaMin-GAP)/
sqrt(3.), -
sqrt(Rma*Rma-GAP*GAP/4.)},
 
12664                  a[] =  {1.,            -1./
sqrt(3.),   1.,     1./
sqrt(3.),    1.},
 
12665                  b[] =  {0.,            1.,             0.,     1.,             0.},
 
12666                  c[] =  {GAP/2., -2.*ApotemaMin/
sqrt(3.),ApotemaMin, 2.*ApotemaMin/
sqrt(3.), GAP/2.};
 
12696                 &XintersectionList[nIntersections], 
 
12697                 &YintersectionList[nIntersections]
 
12699         nIntersections += nIntersectionsCircle;
 
12703         if(nIntersections<2) 
return -1;
 
12705         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12780         Short_t nIntersectionsCircle,
 
12783                         XintersectionList[12],
 
12784                         YintersectionList[12]; 
 
12789         Double_t Side_x[] = {   GAP/2., GAP/2. , ApotemaMin, ApotemaMin, GAP/2., GAP/2. },
 
12790                  Side_y[] = {   
sqrt(Rma*Rma-GAP*GAP/4.),  (2.*ApotemaMin-GAP)/
sqrt(3.),
 
12791                                 ApotemaMin/
sqrt(3.),
 
12792                                 -ApotemaMin/
sqrt(3.),
 
12793                                 -(2.*ApotemaMin-GAP)/
sqrt(3.), -
sqrt(Rma*Rma-GAP*GAP/4.)},
 
12794                  a[] =  {1.,            1./
sqrt(3.),    1.,     -1./
sqrt(3.),   1.},
 
12795                  b[] =  {0.,            1.,             0.,     1.,             0.},
 
12796                  c[] =  {-GAP/2.,-2.*ApotemaMin/
sqrt(3.),-ApotemaMin, 2.*ApotemaMin/
sqrt(3.), -GAP/2.};
 
12825                 &XintersectionList[nIntersections], 
 
12826                 &YintersectionList[nIntersections]
 
12830         nIntersections += nIntersectionsCircle;
 
12834         if(nIntersections<2) 
return -1;
 
12836         FiStart = 
atan2( Start[1]-Oyy,Start[0]-Oxx);
 
12884         a = 
sqrt(oX*oX+oY*oY);
 
12887         if( a >= R + Rma || R >= a + Rma ||  a + R <= Rma) 
return -1;
 
12890         FI0 = 
atan2(-oY,-oX);
 
12891         cosFi = (a*a + R*R - Rma*Rma)/(2.*R*a);
 
12892         if(cosFi<-1.) cosFi=-1.; 
else if(cosFi>1.) cosFi=1.;
 
12895         Xcross[0] = oX + R*
cos(FI0+Fi);
 
12896         Ycross[0] = oY + R*
sin(FI0+Fi);
 
12897         Xcross[1] = oX + R*
cos(FI0-Fi);
 
12898         Ycross[1] = oY + R*
sin(FI0-Fi);
 
12919         theta1 = 
atan2(Ycross[0]-Oyy,  Xcross[0]- Oxx);
 
12920         theta2 = 
atan2(Ycross[1]-Oyy,  Xcross[1]- Oxx);
 
12924                 dis = theta1-theta2;
 
12926                 dis = theta2-theta1;
 
12929         if(dis<0.) dis += 2.*
PI;
 
12930         if(dis<0.) dis =0.;
 
12963         f1 = 
atan2(Ycross[0]-Oyy, Xcross[0]-Oxx);
 
12964         if(f1<0.) f1+= 2.*
PI;
 
12966         f2 = 
atan2(Ycross[1]-Oyy, Xcross[1]-Oxx);
 
12967         if(f2<0.) f2+= 2.*
PI;
 
12973                 if(f1 > f2 ) f2 +=2.*
PI;
 
12974                 if(f1 > f2 ) f2 = 
f1;
 
12976                         if(f<f2) 
return true; 
else return false;
 
12980                         if(f<f2) 
return true; 
else return false;
 
12983                 if(f1 < f2 ) f1 +=2.*
PI;
 
12984                 if(f1 < f2 ) f1 = 
f2;
 
12986                         if(f<f1) 
return true; 
else return false;
 
12990                         if(f<f1) 
return true; 
else return false;
 
13042         aaa = 
atan2( oY, oX);  
 
13049         if((aaa>b1&&aaa<3.*b1) || (aaa>-3.*b1&&aaa<-b1)){
 
13051                 for (j = 0; j< 
nHits; j++){
 
13052                         U[j]=XY[j][0]/(XY[j][0]*XY[j][0]+XY[j][1]*XY[j][1]);
 
13056                 if((aaa>b1&&aaa<3.*b1)){  
 
13059                                 for(i=0;i<
nHits;i++){
 
13060                                         tmp[
i]=ListHits[nHits-1-
i];
 
13062                                 for(i=0;i<
nHits;i++){
 
13063                                         ListHits[
i]=tmp[
i];
 
13069                                 for(i=0;i<
nHits;i++){
 
13070                                         tmp[
i]=ListHits[nHits-1-
i];
 
13072                                 for(i=0;i<
nHits;i++){
 
13073                                         ListHits[
i]=tmp[
i];
 
13079                 for (j = 0; j< 
nHits; j++){
 
13080                         V[j]=XY[j][1]/(XY[j][0]*XY[j][0]+XY[j][1]*XY[j][1]);
 
13084                 if((aaa<=-3.*b1 || aaa>=3.*b1)){  
 
13087                                 for(i=0;i<
nHits;i++){
 
13088                                         tmp[
i]=ListHits[nHits-1-
i];
 
13090                                 for(i=0;i<
nHits;i++){
 
13091                                         ListHits[
i]=tmp[
i];
 
13097                                 for(i=0;i<
nHits;i++){
 
13098                                         tmp[
i]=ListHits[nHits-1-
i];
 
13100                                 for(i=0;i<
nHits;i++){
 
13101                                         ListHits[
i]=tmp[
i];
 
13122                 Int_t *Minclinations,
 
13124                 bool *InclusionList,
 
13125                 Short_t *RConformalIndex,
 
13126                 Short_t *FiConformalIndex,
 
13127                 Short_t nBoxConformal[nRdivConformal][nFidivConformal],
 
13128                 Short_t HitsinBoxConformal[
MAXHITSINCELL][nRdivConformal][nFidivConformal],
 
13129                 Short_t nTracksFoundSoFar,
 
13130                 Short_t *nHitsinTrack,
 
13131                 Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
 
13133                 Double_t infoparalConformal[nmaxHits][5],
 
13142                 Double_t *Fi_initial_helix_referenceframe,
 
13143                 Double_t *Fi_final_helix_referenceframe,
 
13162                 ListHitsinTrackinWhichToSearch[
nmaxHits];
 
13174                 auxinfoparalConformal[nmaxHits+1][5];
 
13190         HitsinBoxConformal,
 
13191         &ListHitsinTrack[nTracksFoundSoFar][0]
 
13195 cout<<
"PndSttTrackFinderReal, evt. "<<
IVOLTE<<
 
13196 ", dopo PndSttFindTrackPatterninBoxConformal; nTracksFoundSoFar  " 
13197    <<nTracksFoundSoFar<<
", nHitsinTrack "<<
 
13198    nHitsinTrack[nTracksFoundSoFar]<<
", ;loro lista :\n";
 
13199 for(
int iz=0;iz<nHitsinTrack[nTracksFoundSoFar];iz++){
 
13200         cout<<
"\thit n. (parallel numbering) " 
13201         <<ListHitsinTrack[nTracksFoundSoFar][iz]
 
13208         nHitsinTrack[nTracksFoundSoFar]>nmaxHitsInTrack) {
 
13218  for(j=0, Nouter =0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
13219   if(info[
infoparal[ ListHitsinTrack[nTracksFoundSoFar][j] ]][0]*
 
13220         info[
infoparal[ ListHitsinTrack[nTracksFoundSoFar][j] ]][0]+
 
13221         info[
infoparal[ ListHitsinTrack[nTracksFoundSoFar][j] ]][1]*
 
13222         info[
infoparal[ ListHitsinTrack[nTracksFoundSoFar][j] ]][1]
 
13228         for(i=0; i< Nouter;i++){
 
13229           ListHitsinTrackinWhichToSearch[
i]=
 
13230                 ListHitsinTrack[nTracksFoundSoFar][
i];
 
13233         for(i=0; i< Nouter;i++){
 
13239                 ListHitsinTrackinWhichToSearch[i], 
 
13240                 ListHitsinTrackinWhichToSearch,
 
13246                 HitsinBoxConformal,
 
13247                 OutputListHitsinTrack);
 
13255            for(j=Nouter;j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
13256                 ListHitsinTrackinWhichToSearch[j-Nouter] =
 
13257                         ListHitsinTrack[nTracksFoundSoFar][j];
 
13262                 ListHitsinTrackinWhichToSearch[i],   
 
13263                 nHitsinTrack[nTracksFoundSoFar]-Nouter,
 
13264                 ListHitsinTrackinWhichToSearch,
 
13267                 OutputList2HitsinTrack
 
13271            nHitsinTrack[nTracksFoundSoFar]=Naux+Nbaux;
 
13273                 nHitsinTrack[nTracksFoundSoFar]<=nmaxHitsInTrack) {
 
13274                 for(j=0;j<Naux;j++){
 
13275                         ListHitsinTrack[nTracksFoundSoFar][j] =
 
13276                                 OutputListHitsinTrack[j];
 
13278                 for(j=0;j<Nbaux;j++){
 
13279                         ListHitsinTrack[nTracksFoundSoFar][Naux+j] =
 
13280                                 OutputList2HitsinTrack[j];
 
13292   nHitsinTrack[nTracksFoundSoFar]>nmaxHitsInTrack) {
 
13300  for(j=0, rotationcos=0., rotationsin=0.; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
13301         rotationcos += 
cos((0.5+
 
13302         FiConformalIndex[
infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]])
 
13303         *2.*
PI/nFidivConformal) ;
 
13305         rotationsin += 
sin((0.5+
 
13306         FiConformalIndex[
infoparal[ListHitsinTrack[nTracksFoundSoFar][j]]])
 
13307         *2.*
PI/nFidivConformal) ;
 
13309  rotationcos /=nHitsinTrack[nTracksFoundSoFar];
 
13310  rotationsin /=nHitsinTrack[nTracksFoundSoFar];
 
13311  rotationangle = 
atan2(rotationsin, rotationcos);
 
13328         Xconformal[1+nHitsinTrack[nTracksFoundSoFar]],
 
13329         Yconformal[1+nHitsinTrack[nTracksFoundSoFar]],
 
13330         DriftRadiusconformal[1+nHitsinTrack[nTracksFoundSoFar]],
 
13331         ErrorDriftRadiusconformal[1+nHitsinTrack[nTracksFoundSoFar]];
 
13334   aaa = posizSciTilx*posizSciTilx+posizSciTily*posizSciTily;
 
13335   Xconformal[0] =posizSciTilx/aaa;
 
13336   Yconformal[0] =posizSciTily/aaa;
 
13338   DriftRadiusconformal[0]=-1.;  
 
13342    nFitPoints = nHitsinTrack[nTracksFoundSoFar]+1;
 
13346    nFitPoints = nHitsinTrack[nTracksFoundSoFar];
 
13349   for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
13350     Xconformal[j+
offset] =infoparalConformal[ListHitsinTrack[nTracksFoundSoFar][j]][0];
 
13351     Yconformal[j+
offset] =infoparalConformal[ListHitsinTrack[nTracksFoundSoFar][j]][1];
 
13352     ErrorDriftRadiusconformal[j+
offset]=
 
13353                 infoparalConformal[ListHitsinTrack[nTracksFoundSoFar][j]][2];
 
13354     DriftRadiusconformal[j+
offset]=
 
13355                 infoparalConformal[ListHitsinTrack[nTracksFoundSoFar][j]][2];
 
13364 cout<<
"PndSttTrackFinderReal, in FindTrackInXYProjection,  evt. " 
13365 <<
IVOLTE<<
", nTracksFoundSoFar "<<
 
13366 nTracksFoundSoFar <<
" nHits "<<nHitsinTrack[nTracksFoundSoFar]
 
13367 <<
", iseed "<<iHit<<endl;
 
13368 cout<<
"\tLista Stt Hits :\n";
 
13369 for(
int iz=0;iz<nHitsinTrack[nTracksFoundSoFar];iz++){
 
13370         cout<<
"\tStt hit n. "<<ListHitsinTrack[nTracksFoundSoFar][iz]<<endl;
 
13372 cout<<
"\tLista info in Conformal :\n";
 
13374  if(iHit<0) { nummm=nHitsinTrack[nTracksFoundSoFar]+1;}
 
13375  else{nummm=nHitsinTrack[nTracksFoundSoFar];};
 
13376 for(
int iz=0;iz<nummm;iz++){
 
13377         cout<<
"\t"<<Xconformal[iz]<<
",  "<<
 
13378         Yconformal[iz]<<
",  "<<
 
13379         ErrorDriftRadiusconformal[iz]<<endl;
 
13390                 DriftRadiusconformal,
 
13391                 ErrorDriftRadiusconformal,
 
13397                 &
ALFA[nTracksFoundSoFar],
 
13398                 &
BETA[nTracksFoundSoFar],
 
13399                 &
GAMMA[nTracksFoundSoFar],
 
13403  if(status < 0  ) 
return false;
 
13407  Ox[nTracksFoundSoFar]= -0.5*
ALFA[nTracksFoundSoFar];
 
13408  Oy[nTracksFoundSoFar]= -0.5*
BETA[nTracksFoundSoFar];
 
13409  R[nTracksFoundSoFar]= Ox[nTracksFoundSoFar]*Ox[nTracksFoundSoFar]+
 
13410                 Oy[nTracksFoundSoFar]*Oy[nTracksFoundSoFar]-
 
13411                 GAMMA[nTracksFoundSoFar];
 
13414  if( R[nTracksFoundSoFar] < 0. )  
return false;
 
13415  R[nTracksFoundSoFar]= 
sqrt( R[nTracksFoundSoFar] );
 
13416  aaa = 
sqrt(Ox[nTracksFoundSoFar]*Ox[nTracksFoundSoFar]+
 
13417                 Oy[nTracksFoundSoFar]*Oy[nTracksFoundSoFar]);
 
13448         XintersectionList[2],
 
13449         YintersectionList[2];
 
13458                         Ox[nTracksFoundSoFar],
 
13459                         Oy[nTracksFoundSoFar],
 
13460                         R[nTracksFoundSoFar],
 
13486                 Ox[nTracksFoundSoFar],
 
13487                 Oy[nTracksFoundSoFar],
 
13488                 R[nTracksFoundSoFar],
 
13490                 &Fi_low_limit[nTracksFoundSoFar],
 
13491                 &Fi_up_limit[nTracksFoundSoFar],
 
13500                 Ox[nTracksFoundSoFar],
 
13501                 Oy[nTracksFoundSoFar],
 
13502                 R[nTracksFoundSoFar],
 
13504                 Fi_low_limit[nTracksFoundSoFar],
 
13505                 Fi_up_limit[nTracksFoundSoFar],
 
13517                 nHitsinTrack[nTracksFoundSoFar],
 
13518                 &ListHitsinTrack[nTracksFoundSoFar][0],
 
13520                 Ox[nTracksFoundSoFar],
 
13521                 Oy[nTracksFoundSoFar],
 
13522                 R[nTracksFoundSoFar],
 
13524                 infoparalConformal,
 
13528                 HitsinBoxConformal,
 
13533  if( NN < MINIMUMHITSPERTRACK || NN>nmaxHitsInTrack) 
return false;
 
13535  nHitsinTrack[nTracksFoundSoFar]=
NN;
 
13537  for(i=0; i<nHitsinTrack[nTracksFoundSoFar];i++){
 
13538         ListHitsinTrack[nTracksFoundSoFar][
i]=auxListHitsinTrack[
i];
 
13549                 X[nHitsinTrack[nTracksFoundSoFar]],
 
13550                 Y[nHitsinTrack[nTracksFoundSoFar]];
 
13552         for(i=0;i<nHitsinTrack[nTracksFoundSoFar];i++){
 
13553                 X[
i]=info[
infoparal[ListHitsinTrack[nTracksFoundSoFar][
i]]][0];
 
13554                 Y[
i]=info[
infoparal[ListHitsinTrack[nTracksFoundSoFar][
i]]][1];
 
13557                 Ox[nTracksFoundSoFar],
 
13558                 Oy[nTracksFoundSoFar],
 
13559                 nHitsinTrack[nTracksFoundSoFar],
 
13562                 &Charge[nTracksFoundSoFar]
 
13582                 Ox[nTracksFoundSoFar],
 
13583                 Oy[nTracksFoundSoFar],
 
13585                 nHitsinTrack[nTracksFoundSoFar],
 
13586                 &ListHitsinTrack[nTracksFoundSoFar][0],
 
13588                 Charge[nTracksFoundSoFar],
 
13589                 &Fi_initial_helix_referenceframe[nTracksFoundSoFar],
 
13590                 &Fi_final_helix_referenceframe[nTracksFoundSoFar],
 
13598                 Ox[nTracksFoundSoFar],
 
13599                 Oy[nTracksFoundSoFar],
 
13600                 R[nTracksFoundSoFar],
 
13601                 Charge[nTracksFoundSoFar],
 
13602                 &Fi_low_limit[nTracksFoundSoFar],
 
13603                 &Fi_up_limit[nTracksFoundSoFar],
 
13610         if( flagStt == -2 ) 
return false;       
 
13611         if( flagStt == -1 ) 
return false;       
 
13612         if( flagStt ==  1 ) 
return false;       
 
13621  for(j=0; j<nHitsinTrack[nTracksFoundSoFar]; j++){
 
13623       auxinfoparalConformal[j][
i] =
 
13624         infoparalConformal[ ListHitsinTrack[nTracksFoundSoFar][j]][
i];
 
13676         XintersectionList[2],
 
13677         YintersectionList[2];
 
13681  for(iScitHit=0; iScitHit<
nSciTilHits; iScitHit++){
 
13696                 List[igoodScit] = iScitHit;
 
13700                         esse[igoodScit] = 
atan2(YintersectionList[0]-Oyy,
 
13701                                 XintersectionList[0]-Oxx);
 
13704                         esse[igoodScit] = 
atan2( 0.5*(YintersectionList[0]+
 
13705                                         YintersectionList[1])-Oyy,
 
13706                                 0.5*(XintersectionList[0]+
 
13707                                         XintersectionList[1])-Oxx);
 
13709                 if ( esse[igoodScit]<0.) esse[igoodScit] += 2.*
PI;
 
13729                         Short_t * Nintersections,
 
13744         QQ = posizSciTilx*posizSciTilx+posizSciTily*posizSciTily;
 
13747         if( posizSciTily<0.)  SIGN=-1.;
 
13786         double  x1,x2,y1,y2,
L,
R,RR;
 
13792         R = 
sqrt(posx*posx+posy*posy);
 
13793         x1 = posx + posy*L/
R;
 
13794         x2 = posx - posy*L/
R;
 
13795         y1 = posy - posx*L/
R;
 
13796         y2 = posy + posx*L/
R;
 
13797    } 
else if (tipo==1) {
 
13803         RR = posx*posx+posy*posy;
 
13805         x1 = posx + posy*L/
R;
 
13807         x2 = posx - posy*L/
R;
 
13809         y1 = posy - posx*L/
R;
 
13811         y2 = posy + posx*L/
R;
 
13817         fprintf(MACRO,
"TLine *Tile%d = new TLine(%f,%f,%f,%f);\n",ScitilHit,x1,y1,x2,y2);
 
13818         fprintf(MACRO,
"Tile%d->SetLineColor(1);\n",ScitilHit);
 
13821                 fprintf(MACRO,
"Tile%d->SetLineWidth(2);\n",ScitilHit);
 
13822         } 
else if (tipo==1) {
 
13824                 fprintf(MACRO,
"Tile%d->SetLineWidth(3);\n",ScitilHit);
 
13827                 fprintf(MACRO,
"Tile%d->SetLineWidth(3);\n",ScitilHit);
 
13829         fprintf(MACRO,
"Tile%d->Draw();\n",ScitilHit);
 
13855        fprintf(MACRO,
"TGaxis *Assex = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
 
13856        fprintf(MACRO,
"Assex->SetTitle(\"X\");\n");
 
13857        fprintf(MACRO,
"Assex->SetTitleOffset(1.5);\n");
 
13858        fprintf(MACRO,
"Assex->Draw();\n");
 
13859        fprintf(MACRO,
"TGaxis *Assey = new  TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
 
13860        fprintf(MACRO,
"Assey->SetTitle(\"Y\");\n");
 
13861        fprintf(MACRO,
"Assey->SetTitleOffset(1.5);\n");
 
13862        fprintf(MACRO,
"Assey->Draw();\n");
 
Short_t IntersectionsWithClosedbiHexagonRight(Double_t vgap, Double_t Ox, Double_t Oy, Double_t R, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
friend F32vec4 acos(const F32vec4 &a)
void WriteMacroParallelAssociatedHitswithMC(Double_t Ox, Double_t Oy, Double_t R, Short_t TrackFoundaTrackMC, Short_t Nhits, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t info[][7], Short_t ifoundtrack, Int_t sequentialNTrack, Short_t nscitilhitsintrack, Short_t *listscitilhitsintrack, Short_t nParalCommon[MAXTRACKSPEREVENT], Short_t ParalCommonList[MAXTRACKSPEREVENT][nmaxHits], Short_t nSpuriParinTrack[MAXTRACKSPEREVENT], Short_t ParSpuriList[MAXTRACKSPEREVENT][nmaxHits], Short_t nMCParalAlone[MAXTRACKSPEREVENT], Short_t MCParalAloneList[MAXTRACKSPEREVENT][nmaxHits])
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
friend F32vec4 cos(const F32vec4 &a)
void SetRefIndex(TString branch, Int_t i)
static const Double_t KAPPAmax
TClonesArray * fSciTPointArray
TClonesArray * trackArray
Short_t AssociateSkewHitsToXYTrack(bool *ExclusionListSkew, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t inclination[][3], Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge, Double_t Fi_initial_helix_referenceframe, Double_t Fi_final_helix_referenceframe, Short_t SkewList[nmaxHits][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZRadiusafterTilt)
static const Double_t DELTA_FI0
Double_t CalculateArcLength(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2])
static const Double_t KAPPAmin
bool iscontiguous(int ncomponents, Short_t *vec1, Short_t *vec2)
TClonesArray * fTubeArray
Short_t FindTrackEntranceExitbiHexagonLeft(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
static const Short_t nbinCX
FairMCPoint * GetPointFromCollections(Int_t hitCounter)
static const Short_t nbinFi
virtual ~PndSttTrackFinderReal()
static const Double_t DELTA_KAPPA
friend F32vec4 sqrt(const F32vec4 &a)
void WriteMacroParallelHitsGeneral(bool *keepit, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t nTracksFoundSoFar)
bool IsInsideArc(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2], Double_t Spoint)
Double_t R_MC[MAXTRACKSPEREVENT]
friend F32vec4 sin(const F32vec4 &a)
void PndSttFindingParallelTrackAngularRange(Double_t oX, Double_t oY, Double_t r, Short_t Charge, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Short_t *status, Double_t Rmin, Double_t Rmax)
Short_t FindTrackEntranceExitbiHexagonRight(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
Double_t posizSciTil[nmaxSciTilHits][3]
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, Short_t NMAX, Double_t *m, Double_t *q, Double_t *ALFA, Double_t *BETA, Double_t *GAMMA, bool *TypeConf)
bool PndSttAcceptHitsConformal(Double_t distance, Double_t DriftConfR, Double_t StrawConfR)
static const Double_t StrawDriftError
TVector3 GetMomentum() const 
static const Double_t CYmax
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
static const Short_t NHITSINFIT
Short_t infoskew[nmaxHits]
static const Double_t RStrawDetectorMin
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
void PndSttFromXYtoConformal(Double_t trajectory_vertex[3], Double_t info[][7], Int_t Nparal, Double_t infoparalConformal[][5], Int_t *status)
void PndSttOrderingSkewandParallel(Short_t *Infoparal, Short_t *Infoskew, Double_t oX, Double_t oY, Double_t Rr, Short_t nSttSkewhit, Short_t *ListSkewHits, Double_t *SList, Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V, Short_t *BigList)
TVector3 GetPosition() const 
Short_t FindIntersectionsOuterCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t RMax, Double_t Xcross[2], Double_t Ycross[2])
void PndSttInfoXYZParal(Double_t info[][7], Short_t infopar, Double_t Ox, Double_t Oy, Double_t R, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
void FindCharge(Double_t oX, Double_t oY, Short_t nParallelHits, Double_t *X, Double_t *Y, Short_t *Charge)
void calculateintersections(Double_t Ox, Double_t Oy, Double_t R, Double_t C0x, Double_t C0y, Double_t C0z, Double_t r, Double_t vx, Double_t vy, Double_t vz, Int_t *STATUS, Double_t *POINTS)
static const Short_t MAXMCTRACKS
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
Short_t PndSttFindTrackPatterninBoxConformal(Short_t NRCELLDISTANCE, Short_t NFiCELLDISTANCE, Short_t Nparal, Short_t ihit, Short_t nRcell, Short_t nFicell, Double_t info[][7], bool Exclusion_List[nmaxHits], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *ListHitsinTrack)
static const Double_t SKEWinclination_DEGREES
virtual Int_t DoFind(TClonesArray *trackCandArray, TClonesArray *trackArray, TClonesArray *helixHitArray)
void plottamentiParalleleconMassimo(char *tipo, Int_t nMaxima, Int_t Nremaining, Float_t *RemainingR, Float_t *RemainingD, Float_t *RemainingFi, Float_t *RemainingCX, Float_t *RemainingCY, Double_t Rup, Double_t Rlow, Double_t Dup, Double_t Dlow, Double_t Fiup, Double_t Filow)
Double_t CxMC[MAXTRACKSPEREVENT]
static const Double_t Dmax
static const int nmassimo
static const Short_t nbinR
static const Double_t Dmin
void AssociateFoundTrackstoMCbis(bool *keepit, Double_t info[][7], Short_t nTracksFoundSoFar, Short_t nHitsinTrack[MAXTRACKSPEREVENT], Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nSttSkewhitinTrack[MAXTRACKSPEREVENT], Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT])
static const Double_t PMAX
static const Short_t nbinCY
Short_t MINIMUMOUTERHITSPERTRACK
void clustering2(Short_t vec1[2], int nListElements, Short_t List[][2], int &nClusterElementsFound, Short_t ClusterElementsFound[][2], int &nRemainingElements, Short_t RemainingElements[][2])
bool FindTrackInXYProjection(Short_t iHit, Short_t nRcell, Short_t nFicell, Int_t *Minclinations, Double_t info[nmaxHits][7], bool *ExclusionList, Short_t *RConformalIndex, Short_t *FiConformalIndex, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[MAXHITSINCELL][nRdivConformal][nFidivConformal], Short_t nTracksFoundSoFar, Short_t *nHitsinTrack, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t *trajectory_vertex, Double_t infoparalConformal[nmaxHits][5], Double_t posizSciTilx, Double_t posizSciTily, Double_t *S, Double_t *Ox, Double_t *Oy, Double_t *R, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_final_helix_referenceframe, Short_t *Charge, Double_t *U, Double_t *V)
Double_t GAMMA[MAXTRACKSPEREVENT]
void Initialization_ClassVariables()
Double_t ZCENTER_STRAIGHT
CalculatedCircles PndSttTrkFindCircles(Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t)
Short_t nSttSkewhitInMCTrack[MAXTRACKSPEREVENT]
static const Short_t nmaxinclinationversors
bool IntersectionCircle_Segment(Double_t a, Double_t b, Double_t c, Double_t P1x, Double_t P2x, Double_t P1y, Double_t P2y, Double_t Ox, Double_t Oy, Double_t R, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance)
static const Short_t MAXHITSINCELL
static const Short_t nbinD
void AddHit(UInt_t detId, UInt_t hitId, Double_t rho)
Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t *List, Double_t *esse)
void PndSttOrdering(Double_t oX, Double_t oY, Double_t info[][7], Short_t nParallelHits, Short_t *ListParallelHits, Short_t nSttSkewhit, Short_t *ListSkewHits, Double_t *S, Short_t *Infoparal, Short_t *Infoskew, Short_t *nTotal, Short_t *BigList, Short_t *Charge)
TClonesArray * fSciTHitArray
static const Short_t nmaxSciTilHits
static const Double_t CXmin
Double_t GetIsochrone() const 
void ChooseEntranceExitbis(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t FiStart, Short_t nIntersections, Double_t *XintersectionList, Double_t *YintersectionList, Double_t Xcross[2], Double_t Ycross[2])
Short_t FindTrackEntranceExitHexagonCircleRight(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2])
Bool_t fHelixHitProduction
Double_t SEMILENGTH_STRAIGHT
Short_t PndSttTrkAssociatedParallelHitsToHelixQuater(bool ExclusionList[nmaxHits], Double_t m, Double_t q, Short_t Status, Short_t nHitsinTrack, Short_t *ListHitsinTrack, Int_t NhitsParallel, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *RConformalIndex, Short_t *FiConformalIndex, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *auxListHitsinTrack)
Short_t nRdivConformalEffective
Double_t BETA[MAXTRACKSPEREVENT]
Short_t MINIMUMHITSPERTRACK
static const Short_t nFidivConformal
void OrderingUsingConformal(Double_t oX, Double_t oY, Int_t nHits, Double_t XY[][2], Int_t Charge, Short_t *ListHits)
Double_t S_SciTilHitsinTrack[MAXTRACKSPEREVENT][nmaxSciTilHits]
void PndSttInfoXYZSkew(Double_t Z, Double_t ZDrift, Double_t S, Double_t Ox, Double_t Oy, Double_t R, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
void PndSttOrderingParallel(Double_t oX, Double_t oY, Double_t info[][7], Short_t nParallelHits, Short_t *ListParallelHits, Short_t *Infoparal, Short_t Charge, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_final_helix_referenceframe, Double_t *U, Double_t *V)
static const Short_t MAXTRACKSPEREVENT
static const Double_t Rmin
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
TClonesArray * fSttHitArray
friend F32vec4 fabs(const F32vec4 &a)
static const Double_t Rmax
static const Short_t nmaxHits
void SeparateInnerOuterParallel(Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax, Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits, Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight, Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight)
TList fPointCollectionList
void AssociateFoundTrackstoMC(Double_t info[][7], Short_t nTracksFoundSoFar, Short_t *nHitsinTrack, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHits], Short_t *nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHits], Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT])
void clustering3(Short_t vec1[3], int nListElements, Short_t List[][3], int &nClusterElementsFound, Short_t ClusterElementsFound[][3], int &nRemainingElements, Short_t RemainingElements[][3])
Short_t FitSZspace(Short_t nSkewHitsinTrack, Double_t *S, Double_t *Z, Double_t *DriftRadius, Double_t *ErrorDriftRadius, Double_t FInot, Short_t NMAX, Double_t *emme)
Short_t FindTrackEntranceExitHexagonCircleLeft(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2])
Double_t veritaMC[nmaxHits][3]
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
bool IntersectionSciTil_Circle(Double_t posizSciTilx, Double_t posizSciTily, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2])
Short_t PndSttTrkAssociatedParallelHitsToHelix5(bool ExclusionList[nmaxHits], Int_t NhitsParallel, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t Fi_low, Double_t Fi_up, Short_t *auxListHitsinTrack)
static const Double_t STRAWRADIUS
void plottamentiParalleleGenerali(Int_t Nremaining, Float_t *RemainingR, Float_t *RemainingD, Float_t *RemainingFi, Float_t *RemainingCX, Float_t *RemainingCY, bool *Goodflag)
Double_t radiaConf[nRdivConformal]
static const Short_t nmaxHitsInTrack
void ChooseEntranceExit(Double_t Oxx, Double_t Oyy, Short_t flag, Short_t Charge, Double_t FiStart, Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2], Double_t Xcross[2], Double_t Ycross[2])
void disegnaSciTilHit(FILE *MACRO, int ScitilHit, double posx, double posy, int tipo)
Short_t PndSttTrkAssociatedParallelHitsToHelix(Double_t Ox, Double_t Oy, Double_t R, Int_t Nhits, Double_t info[][7], Short_t *auxListHitsinTrack)
static const Double_t CVEL
TClonesArray * fMCTrackArray
Short_t FindTrackEntranceExitbiHexagon(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
Short_t PndSttFitSZspacebis(Short_t nSttSkewhitinTrack, Double_t *S, Double_t *Z, Double_t *DriftRadius, Double_t FInot, Short_t NMAX, Double_t *m)
void Merge_Sort(Short_t n_ele, Double_t *array, Short_t *ind)
static const Double_t CXmax
PndSttHit * GetHitFromCollections(Int_t hitCounter)
Short_t nSciTilHitsinTrack[MAXTRACKSPEREVENT]
static const Double_t CYmin
void WriteMacroParallelHitsGeneralConformalwithMC(bool *keepit, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t nTracksFoundSoFar)
void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSttSkewhitinTrack, Double_t *S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge)
Short_t PndSttFindTrackPatterninBoxConformalSpecial(Short_t NRCELLDISTANCE, Short_t NFiCELLDISTANCE, Short_t Nparal, Short_t NparallelToSearch, Short_t iSeed, Short_t *ListHitsinTrackinWhichToSearch, Double_t info[][7], bool InclusionList[nmaxHits], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *OutputListHitsinTrack)
Double_t CyMC[MAXTRACKSPEREVENT]
void WriteMacroParallelHitsConformalwithMCspecial(Int_t Nhits, Double_t auxinfoparalConformal[][5], Short_t nTracksFoundSoFar, Short_t Status, Double_t *trajectory_vertex)
static const Short_t nbinKAPPA
Short_t IntersectionsWithClosedPolygon(Double_t Ox, Double_t Oy, Double_t R, Double_t Rmi, Double_t Rma, Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2])
void WriteMacroParallelHitswithRfromMC(Int_t Nhits, Double_t info[][7], Short_t nTracksFoundSoFar, Double_t *Ox, Double_t *Oy, Short_t *daParTrackFoundaTrackMC)
static const Short_t DELTAnR
static const Short_t nbinFI0
static const Double_t ApotemaMaxInnerParStraw
Short_t ListSciTilHitsinTrack[MAXTRACKSPEREVENT][nmaxSciTilHitsinTrack]
Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack, Short_t SkewList[nmaxHits][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZRadiusafterTilt, Double_t KAPPA, Double_t FI0, Short_t *tempore, Double_t *temporeS, Double_t *temporeZ, Double_t *temporeZDrift, Double_t *temporeZErrorafterTilt, Int_t *STATUS)
Short_t IntersectionsWithOpenPolygon(Double_t Ox, Double_t Oy, Double_t R, Short_t nSides, Double_t *a, Double_t *b, Double_t *c, Double_t *side_x, Double_t *side_y, Double_t *XintersectionList, Double_t *YintersectionList)
void WriteMacroSkewAssociatedHits(bool goodskewfit, Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t sequentialNTrack, Short_t nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nscitilhits, Double_t *ESSE, Double_t *ZETA)
bool TypeConf[MAXTRACKSPEREVENT]
Short_t IntersectionsWithGapSemicircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t gap, bool left, Double_t Rma, Double_t *XintersectionList, Double_t *YintersectionList)
Double_t ALFA[MAXTRACKSPEREVENT]
TVector3 GetStartVertex() const 
bool IsInternal(Double_t Px, Double_t Py, Double_t Xtraslation, Double_t Ytraslation, Double_t Theta)
static const Double_t BFIELD
void WriteMacroSkewAssociatedHitswithRfromMC(Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t nMaxima)
Short_t FindTrackEntranceExitHexagonCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
Short_t nHitsInMCTrack[MAXTRACKSPEREVENT]
void WriteMacroSkewAssociatedHitswithMC(bool goodskewfit, Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t sequentialNTrack, Short_t nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nSkewCommon, Short_t SkewCommonList[MAXTRACKSPEREVENT][nmaxHits], Short_t daTrackFoundaTrackMC, Short_t nMCSkewAlone[MAXTRACKSPEREVENT], Short_t MCSkewAloneList[MAXTRACKSPEREVENT][nmaxHits], Short_t nscitilhits, Double_t *ESSE, Double_t *ZETA)
bool InclusionListSciTil[nmaxSciTilHits]
void PndSttFromXYtoConformal2(Double_t trajectory_vertex[3], Short_t nHitsinTrack, Short_t iExclude, Short_t *ListHits, Double_t info[][7], Double_t auxinfoparalConformal[][5], Int_t *status)
Short_t infoparal[nmaxHits]
cout<<"the Event No is "<< i<< endl;{{if(hit_array->GetEntriesFast()!=mc_array->GetEntriesFast()) continue;PndSdsHit *hit=(PndSdsHit *) hit_array-> At(j)
static const Short_t nmaxSciTilHitsinTrack
void WriteMacroParallelAssociatedHits(Double_t Ox, Double_t Oy, Double_t R, Short_t Nhits, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t imaxima, Int_t sequencial, Short_t nscitilhitsintrack, Short_t *listscitilhitsintrack)
Short_t IntersectionsWithClosedbiHexagonLeft(Double_t vgap, Double_t Ox, Double_t Oy, Double_t R, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
static const Double_t RStrawDetectorMax
void PndSttBoxConformalFilling(bool ExclusionList[nmaxHits], Double_t infoparalConformal[][5], Int_t Nparal, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits])
TVector3 GetWireDirection()
static const Double_t DIMENSIONSCITIL
void Merge(Short_t nl, Double_t *left, Short_t *ind_left, Short_t nr, Double_t *right, Short_t *ind_right, Double_t *result, Short_t *ind)
static const Double_t ApotemaMaxSkewStraw
static const Double_t RMAXSCITIL
Short_t PndSttFindTrackStrictCollection(Short_t NFiCELLDISTANCE, Short_t iSeed, Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch, bool ExclusionList[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t *OutputListHitsinTrack)
static const Short_t nRdivConformal