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