FairRoot/PandaRoot
Public Member Functions | List of all members
PndTrkPlotMacros2 Class Reference

#include <PndTrkPlotMacros2.h>

Inheritance diagram for PndTrkPlotMacros2:

Public Member Functions

 PndTrkPlotMacros2 ()
 
 ~PndTrkPlotMacros2 ()
 
void disegnaAssiXY (FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
 
void disegnaSciTilHit (int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
 
void DrawBiHexagonInMacro (Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
 
void DrawHexagonCircleInMacro (Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
 
void SttInfoXYZParal (Vec< Double_t > *info, Short_t infopar, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
 
void WriteAllMacros (PndTrkPlotMacros2_InputData In_Put)
 
void WriteMacroAllHitsRestanti (Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Vec< bool > *InclusionListSciTil, Vec< bool > *InclusionListStt, Vec< Double_t > *info, int IVOLTE, Vec< bool > *keepit, Vec< Short_t > *ListTrackCandHit, Vec< Short_t > *ListTrackCandHitType, int MAXMVDPIXELHITS, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITS, int MAXMVDSTRIPHITSINTRACK, int MAXSCITILHITSINTRACK, int MAXSTTHITS, int MAXSTTHITSINTRACK, int MAXTRACKSPEREVENT, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHit, Short_t nSttHit, Short_t nSttParHit, Short_t nSttSkewHit, Short_t nSttTrackCand, Vec< Short_t > *nTrackCandHit, Vec< Double_t > *posizSciTil, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
 
void WriteMacroParallelHitsGeneral (Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
 
void WriteMacroParallelHitsGeneralConformalwithMC (Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
 
void WriteMacroParallel_MvdHitsGeneralConformalwithMC (Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
 
void WriteMacroSkewAssociatedHitswithMC (Double_t *ESSE, Double_t *ESSEalone, PndTrkPlotMacros2_InputData In_Put, int iNome, int iTrack)
 
void WriteMacroSkewAssociatedHitswithMC_Degree (Double_t *ESSE, Double_t *ESSEalone, PndTrkPlotMacros2_InputData In_Put, int iNome, int iTrack)
 
void WriteMacroSttParallelAssociatedHitsandMvdwithMC (PndTrkPlotMacros2_InputData In_Put, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t primoangolo, Double_t ultimoangolo, Short_t Nhits, int iTrack, int iNome, Short_t daSttTrackaMCTrack, Short_t nMvdPixelHitsAssociatedToSttTra, Short_t nMvdStripHitsAssociatedToSttTra, Short_t nSkewHitsinTrack)
 
void WriteMacroSttParallel (PndTrkPlotMacros2_InputData In_Put)
 
void WriteMacroSttParallelExternal (PndTrkPlotMacros2_InputData In_Put)
 
 ClassDef (PndTrkPlotMacros2, 1)
 

Detailed Description

Definition at line 139 of file PndTrkPlotMacros2.h.

Constructor & Destructor Documentation

PndTrkPlotMacros2::PndTrkPlotMacros2 ( )
inline

Default constructor

Definition at line 147 of file PndTrkPlotMacros2.h.

147 {};
PndTrkPlotMacros2::~PndTrkPlotMacros2 ( )
inline

Destructor

Definition at line 149 of file PndTrkPlotMacros2.h.

149 {};

Member Function Documentation

PndTrkPlotMacros2::ClassDef ( PndTrkPlotMacros2  ,
 
)
void PndTrkPlotMacros2::disegnaAssiXY ( FILE *  MACRO,
double  xmin,
double  xmax,
double  ymin,
double  ymax 
)

Definition at line 24 of file PndTrkPlotMacros2.cxx.

31 {
32 // fine cambio_in_perl ;
33 
34  fprintf(MACRO,"TGaxis *Assex = new TGaxis(%f,%f,%f,%f,%f,%f,505);\n",xmin,0.,xmax,0.,xmin,xmax);
35  fprintf(MACRO,"Assex->SetTitle(\"X\");\n");
36  fprintf(MACRO,"Assex->SetTitleOffset(1.5);\n");
37  fprintf(MACRO,"Assex->Draw();\n");
38  fprintf(MACRO,"TGaxis *Assey = new TGaxis(%f,%f,%f,%f,%f,%f,505);\n", 0.,ymin,0.,ymax,ymin,ymax);
39  fprintf(MACRO,"Assey->SetTitle(\"Y\");\n");
40  fprintf(MACRO,"Assey->SetTitleOffset(1.5);\n");
41  fprintf(MACRO,"Assey->Draw();\n");
42 
43 }
Double_t xmax
Double_t xmin
void PndTrkPlotMacros2::disegnaSciTilHit ( int  colorcode,
Double_t  DIMENSIONSCITIL,
FILE *  MACRO,
double  posx,
double  posy,
int  ScitilHit,
int  tipo 
)

Definition at line 52 of file PndTrkPlotMacros2.cxx.

References L, and sqrt().

62 {
63 // fine cambio_in_perl ;
64  double x1,x2,y1,y2,L,Rr, RR;
65 
66 
67  L=DIMENSIONSCITIL/2.;
68 
69 
70  if(tipo==0){ // SciTil disegnate in XY.
71  Rr = sqrt(posx*posx+posy*posy);
72  x1 = posx + posy*L/Rr;
73  x2 = posx - posy*L/Rr;
74  y1 = posy - posx*L/Rr;
75  y2 = posy + posx*L/Rr;
76  } else if (tipo==1) {// SciTil disegnate in SZ.
77  x1 = posx - L;
78  x2 = posx + L;
79  y1 = posy;
80  y2 = posy;
81  } else { // SciTil disegnate in UV.
82  RR = posx*posx+posy*posy;
83  Rr = sqrt(RR);
84  x1 = posx + posy*L/Rr;
85  x1 /= RR;
86  x2 = posx - posy*L/Rr;
87  x2 /= RR;
88  y1 = posy - posx*L/Rr;
89  y1 /= RR;
90  y2 = posy + posx*L/Rr;
91  y2 /= RR;
92 
93  }
94  fprintf(MACRO,"TLine *Tile%d = new TLine(%f,%f,%f,%f);\n",ScitilHit,x1,y1,x2,y2);
95  fprintf(MACRO,"Tile%d->SetLineColor(%d);\n",ScitilHit,colorcode);
96 
97 
98  if(tipo==0){
99  // disegna in XY.
100  fprintf(MACRO,"Tile%d->SetLineWidth(2);\n",ScitilHit);
101  } else if (tipo==1) {
102  // disegna in SZ.
103  fprintf(MACRO,"Tile%d->SetLineWidth(3);\n",ScitilHit);
104  } else {
105  // disegna in UV.
106  fprintf(MACRO,"Tile%d->SetLineWidth(3);\n",ScitilHit);
107  }
108 
109 
110  fprintf(MACRO,"Tile%d->Draw();\n",ScitilHit);
111 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::DrawBiHexagonInMacro ( Double_t  vgap,
FILE *  MACRO,
Double_t  Ami,
Double_t  Ama,
Short_t  color,
char *  name 
)

Definition at line 118 of file PndTrkPlotMacros2.cxx.

References Double_t, and sqrt().

126 {
127 // fine cambio_in_perl ;
128  Short_t iside;
129 
130  // these are the points defining the sides of the biexhagon on the left(inner).
131  Double_t
132  side_x[] = { -vgap/2., -Ama , -Ama, -vgap/2., -vgap/2., -Ami,
133  -Ami, -vgap/2., -vgap/2.},
134  side_y[] = {(-0.5*vgap+2.*Ama)/sqrt(3.), Ama/sqrt(3.), -Ama/sqrt(3.),
135  -(-0.5*vgap+2.*Ama)/sqrt(3.), -(-0.5*vgap+2.*Ami)/sqrt(3.),
136  -Ami/sqrt(3.), Ami/sqrt(3.), (-0.5*vgap+2.*Ami)/sqrt(3.),
137  (-0.5*vgap+2.*Ama)/sqrt(3.) };
138 
139  // Inner straws left
140  for(iside=0;iside<8;iside++){
141  fprintf(MACRO,
142  "TLine* %sL%d = new TLine(%f,%f,%f,%f);\n",name,
143  iside,side_x[iside],side_y[iside],side_x[iside+1],side_y[iside+1]);
144  fprintf(MACRO,"%sL%d->SetLineColor(%d);\n",name,iside,color);
145  fprintf(MACRO,"%sL%d->SetLineStyle(2);\n",name,iside);
146  fprintf(MACRO,"%sL%d->Draw();\n",name,iside);
147  }
148 
149  // Inner straws right
150  for(iside=0;iside<8;iside++){
151  fprintf(MACRO,
152  "TLine* %sR%d = new TLine(%f,%f,%f,%f);\n",name,
153  iside,-side_x[iside],side_y[iside],-side_x[iside+1],side_y[iside+1]);
154  fprintf(MACRO,"%sR%d->SetLineColor(%d);\n",name,iside,color);
155  fprintf(MACRO,"%sR%d->SetLineStyle(2);\n",name,iside);
156  fprintf(MACRO,"%sR%d->Draw();\n",name,iside);
157  }
158 
159 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Double_t
TString name
void PndTrkPlotMacros2::DrawHexagonCircleInMacro ( Double_t  GAP,
FILE *  MACRO,
Double_t  ApotemaMin,
Double_t  Rma,
Short_t  color,
char *  name 
)

Definition at line 165 of file PndTrkPlotMacros2.cxx.

References atan2(), Double_t, PI, and sqrt().

173 {
174 // fine cambio_in_perl ;
175  Short_t iside;
176 
177  Double_t angle1, angle2;
178 
179  const double PI=3.141592654;
180 
181  // these are the points defining the sides of the exhagon on the left(outer).
182  Double_t side_x[] = { -GAP/2., -GAP/2. , -ApotemaMin, -ApotemaMin, -GAP/2., -GAP/2. },
183  side_y[] = { sqrt(Rma*Rma-GAP*GAP/4.), (2.*ApotemaMin-0.5*GAP)/sqrt(3.),
184  ApotemaMin/sqrt(3.),
185  -ApotemaMin/sqrt(3.),
186  -(2.*ApotemaMin-0.5*GAP)/sqrt(3.), -sqrt(Rma*Rma-GAP*GAP/4.)};
187 
188 
189  // Outer straws left
190  for(iside=0;iside<5;iside++){
191  fprintf(MACRO,
192  "TLine* %sL%d = new TLine(%f,%f,%f,%f);\n",name,
193  iside,side_x[iside],side_y[iside],side_x[iside+1],side_y[iside+1]);
194  fprintf(MACRO,"%sL%d->SetLineColor(%d);\n",name,iside,color);
195  fprintf(MACRO,"%sL%d->SetLineStyle(2);\n",name,iside);
196  fprintf(MACRO,"%sL%d->Draw();\n",name,iside);
197  }
198 
199  // Outer straws right
200  for(iside=0;iside<5;iside++){
201  fprintf(MACRO,
202  "TLine* %sR%d = new TLine(%f,%f,%f,%f);\n",name,
203  iside,-side_x[iside],side_y[iside],-side_x[iside+1],side_y[iside+1]);
204  fprintf(MACRO,"%sR%d->SetLineColor(%d);\n",name,iside,color);
205  fprintf(MACRO,"%sR%d->SetLineStyle(2);\n",name,iside);
206  fprintf(MACRO,"%sR%d->Draw();\n",name,iside);
207  }
208 
209 
210  // drawing the left circle.
211  angle1 = atan2 ( side_y[0], side_x[0])*180./PI;
212  angle2 = 360. + atan2 ( side_y[4], side_x[4])*180./PI;
213  fprintf(MACRO,"TEllipse* %sCircleL = new TEllipse(0.,0.,%f,%f,%f,%f);\n",
214  name,Rma,Rma,angle1,angle2);
215  fprintf(MACRO,"%sCircleL->SetFillStyle(0);\n",name);
216  fprintf(MACRO,"%sCircleL->SetLineColor(%d);\n",name,color);
217  fprintf(MACRO,"%sCircleL->Draw(\"only\");\n",name);
218 
219 
220  // drawing the right circle.
221  angle2 = atan2 ( side_y[0], -side_x[0])*180./PI;
222  angle1 = atan2 ( side_y[4], -side_x[4])*180./PI;
223  fprintf(MACRO,"TEllipse* %sCircleR = new TEllipse(0.,0.,%f,%f,%f,%f);\n",
224  name,Rma,Rma,angle1,angle2);
225  fprintf(MACRO,"%sCircleR->SetFillStyle(0);\n",name);
226  fprintf(MACRO,"%sCircleR->SetLineColor(%d);\n",name,color);
227  fprintf(MACRO,"%sCircleR->Draw(\"only\");\n",name);
228 
229 
230 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
const Double_t PI
Double_t
TString name
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
void PndTrkPlotMacros2::SttInfoXYZParal ( Vec< Double_t > *  info,
Short_t  infopar,
Double_t  Oxx,
Double_t  Oyy,
Double_t  Rr,
Double_t  KAPPA,
Double_t  FI0,
Short_t  Charge,
Double_t Posiz 
)

Definition at line 238 of file PndTrkPlotMacros2.cxx.

References Vec< T >::at(), atan2(), Double_t, fabs(), fi, PI, and sqrt().

249 {
250 // fine cambio_in_perl ;
251 
252  Double_t const PI = 3.141592654;
253 
254  Double_t fi, norm, vers[2];
255 
256  vers[0] = Oxx - info->at(infopar*7+0);
257  vers[1] = Oyy - info->at(infopar*7+1);
258  norm = sqrt( vers[0]*vers[0] + vers[1]*vers[1] );
259 
260  if(norm < 1.e-20) {
261  Posiz[0] = -999999999.;
262  return;
263  }
264 
265  if( fabs( Rr - fabs( norm - info->at(infopar*7+3) ) ) // distance trajectory-drift radius
266  <
267  fabs( Rr - (norm + info->at(infopar*7+3)) ) ) {
268 
269  Posiz[0] = info->at(infopar*7+0) + info->at(infopar*7+3)*vers[0]/norm;
270  Posiz[1] = info->at(infopar*7+1) + info->at(infopar*7+3)*vers[1]/norm;
271 
272  } else {
273 
274  Posiz[0] = info->at(infopar*7+0) - info->at(infopar*7+3)*vers[0]/norm;
275  Posiz[1] = info->at(infopar*7+1) - info->at(infopar*7+3)*vers[1]/norm;
276 
277  } // end of if ( fabs( Rr - fabs( Distance - info->at(infopar*7+3) ) ).....
278 
279 
280 
281 
282 // Posiz[0] = info->at(infopar*7+0) + info->at(infopar*7+3)*vers[0]/norm;
283 // Posiz[1] = info->at(infopar*7+1) + info->at(infopar*7+3)*vers[1]/norm;
284 
285  if( fabs(KAPPA)<1.e-20 ){
286  Posiz[2] = -888888888.;
287  return;
288  }
289 
290 
291  fi = atan2(-vers[1],-vers[0]);
292  if(fi<0.) fi += 2.*PI;
293 
294  if ( Charge > 0){
295  if(fi > FI0 ) FI0 += 2.*PI;
296 // Posiz[2] = (FI0-fi)/KAPPA;
297  } else {
298  if(fi < FI0 ) fi += 2.*PI;
299  }
300  Posiz[2] = (fi-FI0)/KAPPA;
301 
302  return;
303 }
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
const Double_t PI
TFile * fi
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkPlotMacros2::WriteAllMacros ( PndTrkPlotMacros2_InputData  In_Put)

Definition at line 312 of file PndTrkPlotMacros2.cxx.

References PndTrkPlotMacros2_InputData::apotemamaxinnerparstraw, APOTEMAMAXINNERPARSTRAW, PndTrkPlotMacros2_InputData::apotemamaxskewstraw, APOTEMAMAXSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemaminouterparstraw, APOTEMAMINOUTERPARSTRAW, PndTrkPlotMacros2_InputData::apotemaminskewstraw, APOTEMAMINSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemastrawdetectormin, APOTEMASTRAWDETECTORMIN, Vec< T >::at(), atan2(), PndTrkPlotMacros2_InputData::bfield, BFIELD, PndTrkPlotMacros2_InputData::Charge, CVEL, PndTrkPlotMacros2_InputData::cvel, PndTrkPlotMacros2_InputData::daTrackFoundaTrackMC, PndTrkPlotMacros2_InputData::dimensionscitil, DIMENSIONSCITIL, PndTrkPlotMacros2_InputData::doMcComparison, Double_t, PndTrkPlotMacros2_InputData::FI0, PndTrkPlotMacros2_InputData::fMCTrackArray, PndTrkPlotMacros2_InputData::fSttPointArray, i, PndTrkPlotMacros2_InputData::InclusionListSciTil, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::info, PndTrkCTGeometryCalculations::IntersectionSciTil_Circle(), PndTrkPlotMacros2_InputData::IVOLTE, PndTrkPlotMacros2_InputData::KAPPA, PndTrkPlotMacros2_InputData::keepit, PndTrkPlotMacros2_InputData::ListMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::ListMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::ListSciTilHitsinTrack, PndTrkPlotMacros2_InputData::ListSttParHitsinTrack, PndTrkPlotMacros2_InputData::ListSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::ListTrackCandHit, PndTrkPlotMacros2_InputData::ListTrackCandHitType, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITS, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITSINTRACK, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITS, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSCITILHITS, PndTrkPlotMacros2_InputData::MAXSCITILHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSTTHITS, PndTrkPlotMacros2_InputData::maxstthitsintrack, MAXSTTHITSINTRACK, PndTrkPlotMacros2_InputData::MAXTRACKSPEREVENT, PndTrkPlotMacros2_InputData::MCMvdPixelAloneList, PndTrkPlotMacros2_InputData::MCMvdStripAloneList, PndTrkPlotMacros2_InputData::MCParalAloneList, PndTrkPlotMacros2_InputData::MCSciTilAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneX, PndTrkPlotMacros2_InputData::MCSkewAloneY, PndTrkPlotMacros2_InputData::MvdPixelCommonList, PndTrkPlotMacros2_InputData::MvdPixelSpuriList, PndTrkPlotMacros2_InputData::MvdStripCommonList, PndTrkPlotMacros2_InputData::MvdStripSpuriList, CAMath::Nint(), PndTrkPlotMacros2_InputData::nMCMvdPixelAlone, PndTrkPlotMacros2_InputData::nMCMvdStripAlone, PndTrkPlotMacros2_InputData::nMCParalAlone, PndTrkPlotMacros2_InputData::nMCSciTilAlone, PndTrkPlotMacros2_InputData::nMCSkewAlone, PndTrkPlotMacros2_InputData::nMCTracks, PndTrkPlotMacros2_InputData::nMvdPixelCommon, PndTrkPlotMacros2_InputData::nMvdPixelHit, PndTrkPlotMacros2_InputData::nMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::nMvdPixelSpuriinTrack, PndTrkPlotMacros2_InputData::nMvdStripCommon, PndTrkPlotMacros2_InputData::nMvdStripHit, PndTrkPlotMacros2_InputData::nMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::nMvdStripSpuriinTrack, PndTrkPlotMacros2_InputData::nParalCommon, PndTrkPlotMacros2_InputData::nSciTilHits, PndTrkPlotMacros2_InputData::nSciTilHitsinTrack, PndTrkPlotMacros2_InputData::nSkewCommon, PndTrkPlotMacros2_InputData::nSpuriParinTrack, PndTrkPlotMacros2_InputData::nSttHit, PndTrkPlotMacros2_InputData::nSttParHit, PndTrkPlotMacros2_InputData::nSttParHitsinTrack, PndTrkPlotMacros2_InputData::nSttSkewHit, PndTrkPlotMacros2_InputData::nSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::nTotalCandidates, PndTrkPlotMacros2_InputData::nTrackCandHit, PndTrkPlotMacros2_InputData::Ox, PndTrkPlotMacros2_InputData::Oy, PndTrkPlotMacros2_InputData::ParalCommonList, PndTrkPlotMacros2_InputData::ParSpuriList, PI, PndTrkPlotMacros2_InputData::posizSciTil, R, PndTrkPlotMacros2_InputData::R, PndTrkPlotMacros2_InputData::rstrawdetectormax, RSTRAWDETECTORMAX, PndTrkPlotMacros2_InputData::SchosenSkew, PndTrkPlotMacros2_InputData::sigmaXMvdPixel, PndTrkPlotMacros2_InputData::sigmaXMvdStrip, PndTrkPlotMacros2_InputData::sigmaYMvdPixel, PndTrkPlotMacros2_InputData::sigmaYMvdStrip, PndTrkPlotMacros2_InputData::SkewCommonList, VERTICALGAP, PndTrkPlotMacros2_InputData::verticalgap, PndTrkPlotMacros2_InputData::WDX, PndTrkPlotMacros2_InputData::WDY, PndTrkPlotMacros2_InputData::WDZ, PndTrkPlotMacros2_InputData::XMvdPixel, PndTrkPlotMacros2_InputData::XMvdStrip, PndTrkPlotMacros2_InputData::YMvdPixel, PndTrkPlotMacros2_InputData::YMvdStrip, PndTrkPlotMacros2_InputData::ZMvdPixel, and PndTrkPlotMacros2_InputData::ZMvdStrip.

Referenced by PndTrkTracking2::Exec().

316 {
317 
318 
319  bool
320  intersect;
321 
322  Short_t
323  Nint
324  ;
325 
326  int
327  i,
328  j,
329  k
330  ;
331 
332 
333  double const PI = 3.141592654;
334 
335  FairMCPoint *puntator;
336 
337 // marker1 per cambioperl;
338 
339 //--------------- trasformazione in variabili locali;
340  //int MAXMCTRACKS = In_Put.MAXMCTRACKS; //[R.K. 01/2017] unused variable?
341  int MAXMVDPIXELHITS = In_Put.MAXMVDPIXELHITS;
342  int MAXMVDPIXELHITSINTRACK = In_Put.MAXMVDPIXELHITSINTRACK;
343  int MAXMVDSTRIPHITS = In_Put.MAXMVDSTRIPHITS;
344  int MAXMVDSTRIPHITSINTRACK = In_Put.MAXMVDSTRIPHITSINTRACK;
345  //int MAXSCITILHITS = In_Put.MAXSCITILHITS; //[R.K. 01/2017] unused variable?
346  int MAXSCITILHITSINTRACK = In_Put.MAXSCITILHITSINTRACK;
347  int MAXSTTHITS = In_Put.MAXSTTHITS;
349  int MAXTRACKSPEREVENT = In_Put.MAXTRACKSPEREVENT;
350  int dime = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+
351  MAXMVDSTRIPHITSINTRACK+MAXSCITILHITSINTRACK;
352 
357  Double_t BFIELD = In_Put.bfield;
358 
359  Vec<Short_t> Charge(In_Put.Charge,In_Put.MAXTRACKSPEREVENT,"Charge") ;
360 
361  Double_t CVEL = In_Put.cvel;
362  Vec<Short_t> daTrackFoundaTrackMC(In_Put.daTrackFoundaTrackMC,In_Put.MAXTRACKSPEREVENT,"daTrackFoundaTrackMC") ;
363 
365  bool doMcComparison = In_Put.doMcComparison;
366  Vec<Double_t> FI0(In_Put.FI0,In_Put.MAXTRACKSPEREVENT,"FI0") ;
367 
368  TClonesArray *fMCTrackArray = In_Put.fMCTrackArray;
369  TClonesArray *fSttPointArray = In_Put.fSttPointArray;
370 
371  Vec<Double_t> info(In_Put.info,In_Put.MAXSTTHITS*7,"info") ;
372 
373  Vec<bool> InclusionListSciTil(In_Put.InclusionListSciTil,In_Put.MAXSCITILHITS,"InclusionListSciTil") ;
374  Vec<bool> InclusionListStt(In_Put.InclusionListStt,In_Put.MAXSTTHITS,"InclusionListStt") ;
375  int IVOLTE = In_Put.IVOLTE;
376  Vec<Double_t> KAPPA(In_Put.KAPPA,In_Put.MAXTRACKSPEREVENT,"KAPPA") ;
377  Vec<bool> keepit(In_Put.keepit,In_Put.MAXTRACKSPEREVENT,"keepit") ;
378  //int istampa = In_Put.istampa; //[R.K. 01/2017] unused variable?
379 
380  Vec<Short_t> ListMvdPixelHitsinTrack(In_Put.ListMvdPixelHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXMVDPIXELHITSINTRACK,"ListMvdPixelHitsinTrack") ;
381 
382 
383  Vec<Short_t> ListMvdStripHitsinTrack(In_Put.ListMvdStripHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXMVDSTRIPHITSINTRACK,"ListMvdStripHitsinTrack") ;
384 
385 
386  Vec<Short_t> ListSciTilHitsinTrack(In_Put.ListSciTilHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXSCITILHITSINTRACK,"ListSciTilHitsinTrack") ;
387 
388 
389  Vec<Short_t> ListSttParHitsinTrack(In_Put.ListSttParHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ListSttParHitsinTrack") ;
390 
391 
392  Vec<Short_t> ListSttSkewHitsinTrack(In_Put.ListSttSkewHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ListSttSkewHitsinTrack") ;
393 
394 
395  Vec<Short_t> ListTrackCandHit(In_Put.ListTrackCandHit,
396  In_Put.MAXTRACKSPEREVENT*(In_Put.maxstthitsintrack
398  In_Put.MAXSCITILHITSINTRACK), "ListTrackCandHit") ;
399 
400  Vec<Short_t> ListTrackCandHitType(In_Put.ListTrackCandHitType,
401  In_Put.MAXTRACKSPEREVENT*(In_Put.maxstthitsintrack
403  In_Put.MAXSCITILHITSINTRACK), "ListTrackCandHitType") ;
404 
405  Vec<Short_t> MCMvdPixelAloneList(In_Put.MCMvdPixelAloneList,In_Put.nTotalCandidates*In_Put.nMvdPixelHit,"MCMvdPixelAloneList") ;
406 
407 
408  Vec<Short_t> MCMvdStripAloneList(In_Put.MCMvdStripAloneList,In_Put.nTotalCandidates*In_Put.nMvdStripHit,"MCMvdStripAloneList") ;
409 
410 
411  Vec<Short_t> MCParalAloneList(In_Put.MCParalAloneList,In_Put.MAXTRACKSPEREVENT*In_Put.nSttHit,"MCParalAloneList") ;
412 
413 
414  Vec<Short_t> MCSkewAloneList(In_Put.MCSkewAloneList,In_Put.MAXTRACKSPEREVENT*In_Put.nSttHit,"MCSkewAloneList") ;
415 
416 
417  Vec<Double_t> MCSkewAloneX(In_Put.MCSkewAloneX,In_Put.MAXSTTHITS,"MCSkewAloneX") ;
418  Vec<Double_t> MCSkewAloneY(In_Put.MCSkewAloneY,In_Put.MAXSTTHITS,"MCSkewAloneY") ;
419 
420  Vec<Short_t> MvdPixelCommonList(In_Put.MvdPixelCommonList,In_Put.nTotalCandidates*In_Put.MAXMVDPIXELHITSINTRACK,"MvdPixelCommonList") ;
421 
422 
423  Vec<Short_t> MvdPixelSpuriList(In_Put.MvdPixelSpuriList,In_Put.nTotalCandidates*In_Put.MAXMVDPIXELHITSINTRACK,"MvdPixelSpuriList") ;
424 
425 
426  Vec<Short_t> MvdStripCommonList(In_Put.MvdStripCommonList,In_Put.nTotalCandidates*In_Put.MAXMVDSTRIPHITSINTRACK,"MvdStripCommonList") ;
427 
428 
429  Vec<Short_t> MvdStripSpuriList(In_Put.MvdStripSpuriList,In_Put.nTotalCandidates*In_Put.MAXMVDSTRIPHITSINTRACK,"MvdStripSpuriList") ;
430 
431 
432 
433  Vec<Short_t> nMCMvdPixelAlone(In_Put.nMCMvdPixelAlone,In_Put.nTotalCandidates,"nMCMvdPixelAlone") ;
434  Vec<Short_t> nMCMvdStripAlone(In_Put.nMCMvdStripAlone,In_Put.nTotalCandidates,"nMCMvdStripAlone") ;
435 
436  Vec<Short_t> nMCParalAlone(In_Put.nMCParalAlone,In_Put.MAXTRACKSPEREVENT,"nMCParalAlone") ;
437  Vec<Short_t> nMCSkewAlone(In_Put.nMCSkewAlone,In_Put.MAXTRACKSPEREVENT,"nMCSkewAlone") ;
438 
439  Short_t nMCTracks = In_Put.nMCTracks;
440 
441  Vec<Short_t> nMvdPixelCommon(In_Put.nMvdPixelCommon,In_Put.nTotalCandidates,"nMvdPixelCommon") ;
442  Short_t nMvdPixelHit = In_Put.nMvdPixelHit;
443  Vec<Short_t> nMvdPixelHitsinTrack(In_Put.nMvdPixelHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdPixelHitsinTrack") ;
444  Vec<Short_t> nMvdPixelSpuriinTrack(In_Put.nMvdPixelSpuriinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdPixelSpuriinTrack") ;
445 
446  Vec<Short_t> nMvdStripCommon(In_Put.nMvdStripCommon,In_Put.nTotalCandidates,"nMvdStripCommon") ;
447  Short_t nMvdStripHit = In_Put.nMvdStripHit;
448  Vec<Short_t> nMvdStripHitsinTrack(In_Put.nMvdStripHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdStripHitsinTrack") ;
449  Vec<Short_t> nMvdStripSpuriinTrack(In_Put.nMvdStripSpuriinTrack,In_Put.nTotalCandidates,"nMvdStripSpuriinTrack") ;
450 
451 
452  Vec<Short_t> nParalCommon(In_Put.nParalCommon,In_Put.MAXTRACKSPEREVENT,"nParalCommon") ;
453 
454  Short_t nSciTilHits = In_Put.nSciTilHits;
455 
456  Vec<Short_t> nSciTilHitsinTrack(In_Put.nSciTilHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSciTilHitsinTrack") ;
457 
458  Vec<Short_t> nSkewCommon(In_Put.nSkewCommon,In_Put.MAXTRACKSPEREVENT,"nSkewCommon") ;
459 
460  Vec<Short_t> nSpuriParinTrack(In_Put.nSpuriParinTrack,In_Put.MAXTRACKSPEREVENT,"nSpuriParinTrack") ;
461 
462  Int_t nSttHit = In_Put.nSttHit;
463  Int_t nSttParHit = In_Put.nSttParHit;
464  Vec<Short_t> nSttParHitsinTrack(In_Put.nSttParHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSttParHitsinTrack") ;
465  Int_t nSttSkewHit = In_Put.nSttSkewHit;
466  Vec<Short_t> nSttSkewHitsinTrack(In_Put.nSttSkewHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSttSkewHitsinTrack") ;
467 
468  Short_t nTotalCandidates = In_Put.nTotalCandidates;
469  Vec<Short_t> nTrackCandHit(In_Put.nTrackCandHit,In_Put.MAXTRACKSPEREVENT,"nTrackCandHit") ;
470 
471  Vec<Double_t> Ox(In_Put.Ox,In_Put.MAXTRACKSPEREVENT,"Ox") ;
472  Vec<Double_t> Oy(In_Put.Oy,In_Put.MAXTRACKSPEREVENT,"Oy") ;
473 
474  Vec<Short_t> ParalCommonList(In_Put.ParalCommonList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ParalCommonList") ;
475 
476 
477  Vec<Short_t> ParSpuriList(In_Put.ParSpuriList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ParSpuriList") ;
478 
479 
480  Vec<Double_t> posizSciTil(In_Put.posizSciTil,In_Put.MAXSCITILHITS*3,"posizSciTil") ;
481 
482 
483  Vec<Double_t> R(In_Put.R,In_Put.MAXTRACKSPEREVENT,"R") ;
484 
487 
488  Vec<Double_t> sigmaXMvdPixel(In_Put.sigmaXMvdPixel,In_Put.MAXMVDPIXELHITS,"sigmaXMvdPixel") ;
489  Vec<Double_t> sigmaXMvdStrip(In_Put.sigmaXMvdStrip,In_Put.MAXMVDSTRIPHITS,"sigmaXMvdStrip") ;
490  Vec<Double_t> sigmaYMvdPixel(In_Put.sigmaYMvdPixel,In_Put.MAXMVDPIXELHITS,"sigmaYMvdPixel") ;
491  Vec<Double_t> sigmaYMvdStrip(In_Put.sigmaYMvdStrip,In_Put.MAXMVDSTRIPHITS,"sigmaYMvdStrip") ;
492 
493  Vec<Double_t> SchosenSkew(In_Put.SchosenSkew,In_Put.MAXTRACKSPEREVENT*In_Put.MAXSTTHITS,"SchosenSkew") ;
494 
495  Vec<Short_t> SkewCommonList(In_Put.SkewCommonList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"SkewCommonList") ;
496 
497 
499  Vec<Double_t> XMvdPixel(In_Put.XMvdPixel,In_Put.MAXMVDPIXELHITS,"XMvdPixel") ;
500  Vec<Double_t> XMvdStrip(In_Put.XMvdStrip,In_Put.MAXMVDSTRIPHITS,"XMvdStrip") ;
501  Vec<Double_t> YMvdPixel(In_Put.YMvdPixel,In_Put.MAXMVDPIXELHITS,"YMvdPixel") ;
502  Vec<Double_t> YMvdStrip(In_Put.YMvdStrip,In_Put.MAXMVDSTRIPHITS,"YMvdStrip") ;
503  Vec<Double_t> WDX(In_Put.WDX,In_Put.MAXSTTHITS,"WDX") ;
504  Vec<Double_t> WDY(In_Put.WDY,In_Put.MAXSTTHITS,"WDY") ;
505  Vec<Double_t> WDZ(In_Put.WDZ,In_Put.MAXSTTHITS,"WDZ") ;
506  Vec<Double_t> ZMvdPixel(In_Put.ZMvdPixel,In_Put.MAXMVDPIXELHITS,"ZMvdPixel") ;
507  Vec<Double_t> ZMvdStrip(In_Put.ZMvdStrip,In_Put.MAXMVDSTRIPHITS,"ZMvdStrip") ;
508 
509 //----------------------------
510 
511 // marker2 per cambioperl;
512  Double_t ultimoang[nTotalCandidates];
513  Double_t primoang[nTotalCandidates];
514  Double_t Posiz1[3];
515  Double_t XintersectionList[2];
516  Double_t YintersectionList[2];
517 
518  Vec<Double_t> ultimoangolo(ultimoang,nTotalCandidates,"ultimoangolo");
519  Vec<Double_t> primoangolo(primoang,nTotalCandidates,"primoangolo");
520 
521 
522 
523 // marker2 per cambioperl;
524 
525 
526 // plotta 1 volta sola la macro di tutti i Stt axial Tubes esterni;
527  if(IVOLTE==0) {
529  WriteMacroSttParallel(In_Put);
530 };
531 
532 
533 // calcolo di S degli eventuali hits SciTil presenti nelle tracce trovate.
534 
535  PndTrkCTGeometryCalculations GeometryCalculator;
536 
537  for( i= 0, k=-1; i< nTotalCandidates; i++){
538  Double_t esseSciTil[nSciTilHitsinTrack.at(i)];
539  if(!keepit.at(i)) continue;
540  for(j=0;j< nSciTilHitsinTrack.at(i);j++){
541 
542  intersect=GeometryCalculator.IntersectionSciTil_Circle(
543  posizSciTil.at(ListSciTilHitsinTrack.at(i*MAXSCITILHITSINTRACK+j)*3+0),
544  posizSciTil.at(ListSciTilHitsinTrack.at(i*MAXSCITILHITSINTRACK+j)*3+1),
545  Ox.at(i), // center of circle.
546  Oy.at(i),
547  R.at(i), // Radius of circle.
548  &Nint,
549  XintersectionList,
550  YintersectionList
551  );
552 
553 // reject case with no intersection of the SciTil with the circle trajectory.
554  if(intersect){
555  // calculate S on the lateral face of the Helix.
556  if ( Nint==1){ // the majority of the cases
557  esseSciTil[j] = atan2(YintersectionList[0]-Oy.at(i),
558  XintersectionList[0]-Ox.at(i));
559  } else { // in this case Nint=2 (it should be a very rare case).
560  // do an average of the two positions.
561  esseSciTil[j] = atan2( 0.5*(YintersectionList[0]+YintersectionList[1])
562  -Oy.at(i),0.5*(XintersectionList[0]+XintersectionList[1])-Ox.at(i));
563  } // end of if ( Nint==1)
564  if ( esseSciTil[j]<0.) esseSciTil[j] += 2.*PI;
565 
566  } // continuation of if(intersect)
567 
568  } // end of for(j....
569 
570 
571 
572  Double_t esseSciTilAlone[ In_Put.nMCSciTilAlone[i] ];
573  if(!keepit.at(i)) continue;
574 
575 
576  for(j=0;j< In_Put.nMCSciTilAlone[i];j++){
577  intersect=GeometryCalculator.IntersectionSciTil_Circle(
578  posizSciTil.at(In_Put.MCSciTilAloneList[i*nSciTilHits+j]*3+0),
579  posizSciTil.at(In_Put.MCSciTilAloneList[i*nSciTilHits+j]*3+1),
580  Ox.at(i), // center of circle.
581  Oy.at(i),
582  R.at(i), // Radius of circle.
583  &Nint,
584  XintersectionList,
585  YintersectionList
586  );
587  // calculate S on the lateral face of the Helix.
588  esseSciTilAlone[j] =
589  atan2(posizSciTil.at(In_Put.MCSciTilAloneList[i*nSciTilHits+j]*3+1)-Oy.at(i),
590  posizSciTil.at(In_Put.MCSciTilAloneList[i*nSciTilHits+j]*3+0)-Ox.at(i));
591  if ( esseSciTilAlone[j]<0.) esseSciTilAlone[j] += 2.*PI;
592 
593  } // end of for(j....
594 
595 
596 // } // end of for( i= 0; i< nTotalCandidates; i++)
597 // for( i= 0, k=-1; i< nTotalCandidates; i++){
598 // if(!keepit.at(i)) continue;
599 
600  k++;
601  int npunti=-1+nSttParHitsinTrack.at(i)+nSttSkewHitsinTrack.at(i)+
602  nMvdPixelHitsinTrack.at(i)+nMvdStripHitsinTrack.at(i)+nSciTilHitsinTrack.at(i);
603 
604  if (ListTrackCandHitType.at(i*dime+npunti) == 0){ // Mvd Pixel
605  ultimoangolo[i] = atan2( YMvdPixel.at( ListTrackCandHit.at(i*dime+npunti) )-Oy.at(i),
606  XMvdPixel.at( ListTrackCandHit.at(i*dime+npunti) )-Ox.at(i));
607  } else if (ListTrackCandHitType.at(i*dime+npunti) == 1){ // Mvd Strip
608  ultimoangolo[i] = atan2( YMvdStrip.at( ListTrackCandHit.at(i*dime+npunti) )-Oy.at(i),
609  XMvdStrip.at( ListTrackCandHit.at(i*dime+npunti) )-Ox.at(i));
610  } else if( ListTrackCandHitType.at(i*dime+npunti) == 2 ){ // it is a parallel straw hit
611 
612 
614  &info,
615  ListTrackCandHit.at(i*dime+npunti),
616  Ox.at(i),
617  Oy.at(i),
618  R.at(i),
619  KAPPA.at(i),
620  FI0.at(i),
621  Charge.at(i),
622  Posiz1
623  );
624 
625 
626 
627  ultimoangolo[i] = atan2( Posiz1[1]-Oy.at(i),Posiz1[0]-Ox.at(i));
628 
629  } else if ( ListTrackCandHitType.at(i*dime+npunti) == 3 ){ // it is a skew straw hit
630 
631  ultimoangolo[i] =
632  SchosenSkew.at(i*MAXSTTHITS +ListTrackCandHit.at(i*dime+npunti) );
633  } else if ( ListTrackCandHitType.at(i*dime+npunti) == 1001){ // SciTil hit.
634  ultimoangolo[i] =
635  atan2(posizSciTil.at(ListTrackCandHit.at(i*dime+npunti)*3+1)-Oy.at(i),
636  posizSciTil.at(ListTrackCandHit.at(i*dime+npunti)*3+0)-Ox.at(i));
637  }
638  if( ultimoangolo[i]<0.) ultimoangolo[i]+= 2.*PI;
639 
640 
641 
642  double primo;
643  primoangolo[i] = fmod(FI0.at(i),2.*PI);
644  if(Charge.at(i)>0.){
645  if( ultimoangolo[i]> primoangolo[i]) ultimoangolo[i]-=2.*PI;
646  primo=ultimoangolo[i]*180./PI;
647  ultimoangolo[i]=primoangolo[i]*180./PI;
648  primoangolo[i]=primo;
649 
650  }else{
651  if( ultimoangolo[i]<primoangolo[i]) ultimoangolo[i]+=2.*PI;
652  ultimoangolo[i]=ultimoangolo[i]*180./PI;
653  primoangolo[i]=primoangolo[i]*180./PI;
654  }
655 
656 
657  if( nSttParHitsinTrack.at(i)+nMvdPixelHitsinTrack.at(i)+
658  nMvdStripHitsinTrack.at(i)>0 && doMcComparison) {
659 
660  for( j=0;j<nMCSkewAlone.at(i);j++){
661  puntator = (FairMCPoint*) fSttPointArray->At(MCSkewAloneList.at(i*nSttHit+j));
662  MCSkewAloneX.at( MCSkewAloneList.at(i*nSttHit+j) )=puntator->GetX();
663  MCSkewAloneY.at( MCSkewAloneList.at(i*nSttHit+j) )=puntator->GetY();
664  }
665 
666 
668  In_Put,
669  Ox.at(i),
670  Oy.at(i),
671  R.at(i),
672  primoangolo[i],
673  ultimoangolo[i],
674  nSttParHitsinTrack.at(i),
675  i,
676  k, // questo si usa solo per il nome della Macro.
677  daTrackFoundaTrackMC.at(i),
678  nMvdPixelHitsinTrack.at(i),
679  nMvdStripHitsinTrack.at(i),
680  nSttSkewHitsinTrack.at(i)
681  );
682 // fine cambio_in_perl ;
683 
684  } // end of if( nSttParHitsinTrack.at(i)+nMvdPixelHitsinTrack.at(i)+
685  // nMvdStripHitsinTrack.at(i)>0 && doMcComparison)
686 
687  if( nSttSkewHitsinTrack.at(i)+nMvdPixelHitsinTrack.at(i)+
688  nMvdStripHitsinTrack.at(i)>0 && doMcComparison){
690  esseSciTil,
691  esseSciTilAlone,
692  In_Put,
693  k, // questo si usa solo per il nome della Macro.
694  i
695  );
696 
698  esseSciTil,
699  esseSciTilAlone,
700  In_Put,
701  k, // questo si usa solo per il nome della Macro.
702  i
703  );
704 
705 
706  } // end of if( nSttSkewHitsinTrack.at(i)+nMvdPixelHitsinTrack.at(i)+
707  // nMvdStripHitsinTrack.at(i)>0 && doMcComparison)
708  } // end of for( i= 0; i< nSttTrackCand; i++)
709 
710 
711 // inizio cambio_in_perl ;
713  APOTEMAMAXINNERPARSTRAW,
714  APOTEMAMAXSKEWSTRAW,
715  APOTEMAMINOUTERPARSTRAW,
716  APOTEMAMINSKEWSTRAW,
717  BFIELD,
718  CVEL,
719  DIMENSIONSCITIL,
720  doMcComparison,
721  fMCTrackArray,
722  nSttHit,
723  &info,
724  In_Put,
725  IVOLTE,
726  nMCTracks,
727  nMvdPixelHit,
728  nMvdStripHit,
729  nSciTilHits,
730  nTotalCandidates,
731  &keepit,
732  &FI0,
733  &Ox,
734  &Oy,
735  &posizSciTil,
736  &primoangolo,
737  &R,
738  RSTRAWDETECTORMAX,
739  APOTEMASTRAWDETECTORMIN,
740  &sigmaXMvdPixel,
741  &sigmaXMvdStrip,
742  &sigmaYMvdPixel,
743  &sigmaYMvdStrip,
744  &ultimoangolo,
745  VERTICALGAP,
746  &XMvdPixel,
747  &XMvdStrip,
748  &YMvdPixel,
749  &YMvdStrip
750  );
751 
752  // Macro nel piano conforme, senza gli hits Mvd;
753 
755  APOTEMAMAXINNERPARSTRAW,
756  APOTEMAMAXSKEWSTRAW,
757  APOTEMAMINOUTERPARSTRAW,
758  APOTEMAMINSKEWSTRAW,
759  BFIELD,
760  CVEL,
761  DIMENSIONSCITIL,
762  doMcComparison,
763  fMCTrackArray,
764  nSttHit,
765  &info,
766  In_Put,
767  IVOLTE,
768  nMCTracks,
769  nMvdPixelHit,
770  nMvdStripHit,
771  nSciTilHits,
772  nTotalCandidates,
773  &keepit,
774  &FI0,
775  &Ox,
776  &Oy,
777  &posizSciTil,
778  &primoangolo,
779  &R,
780  RSTRAWDETECTORMAX,
781  APOTEMASTRAWDETECTORMIN,
782  &sigmaXMvdPixel,
783  &sigmaXMvdStrip,
784  &sigmaYMvdPixel,
785  &sigmaYMvdStrip,
786  &ultimoangolo,
787  VERTICALGAP,
788  &XMvdPixel,
789  &XMvdStrip,
790  &YMvdPixel,
791  &YMvdStrip
792  );
793 
794 
795  // Macro nel piano conforme, con anche gli hits Mvd;
796 
798  APOTEMAMAXINNERPARSTRAW,
799  APOTEMAMAXSKEWSTRAW,
800  APOTEMAMINOUTERPARSTRAW,
801  APOTEMAMINSKEWSTRAW,
802  BFIELD,
803  CVEL,
804  DIMENSIONSCITIL,
805  doMcComparison,
806  fMCTrackArray,
807  nSttHit,
808  &info,
809  In_Put,
810  IVOLTE,
811  nMCTracks,
812  nMvdPixelHit,
813  nMvdStripHit,
814  nSciTilHits,
815  nTotalCandidates,
816  &keepit,
817  &FI0,
818  &Ox,
819  &Oy,
820  &posizSciTil,
821  &primoangolo,
822  &R,
823  RSTRAWDETECTORMAX,
824  APOTEMASTRAWDETECTORMIN,
825  &sigmaXMvdPixel,
826  &sigmaXMvdStrip,
827  &sigmaYMvdPixel,
828  &sigmaYMvdStrip,
829  &ultimoangolo,
830  VERTICALGAP,
831  &XMvdPixel,
832  &XMvdStrip,
833  &YMvdPixel,
834  &YMvdStrip
835  );
836 
837 
838 // la seguente e' da modificare per includere eventuali hits SciTil mai usati.
840  APOTEMAMAXINNERPARSTRAW,
841  APOTEMAMAXSKEWSTRAW,
842  APOTEMAMINOUTERPARSTRAW,
843  APOTEMAMINSKEWSTRAW,
844  &InclusionListSciTil,
845  &InclusionListStt,
846  &info,
847  IVOLTE,
848  &keepit,
849  &ListTrackCandHit,
850  &ListTrackCandHitType,
851  MAXMVDPIXELHITS,
852  MAXMVDPIXELHITSINTRACK,
853  MAXMVDSTRIPHITS,
854  MAXMVDSTRIPHITSINTRACK,
855  MAXSCITILHITSINTRACK,
856  MAXSTTHITS,
857  MAXSTTHITSINTRACK,
858  MAXTRACKSPEREVENT,
859  nMvdPixelHit,
860  nMvdStripHit,
861  nSciTilHits,
862  nSttHit,
863  nSttParHit,
864  nSttSkewHit,
865  nTotalCandidates,
866  &nTrackCandHit,
867  &posizSciTil,
868  RSTRAWDETECTORMAX,
869  APOTEMASTRAWDETECTORMIN,
870  VERTICALGAP,
871  &XMvdPixel,
872  &XMvdStrip,
873  &YMvdPixel,
874  &YMvdStrip
875  );
876 
877 // fine cambio_in_perl ;
878 
879 
880 //--------------------- fine plottamenti --------------------------------------------
881 
882 
883  return;
884 }
const Double_t RSTRAWDETECTORMAX
void WriteMacroSkewAssociatedHitswithMC(Double_t *ESSE, Double_t *ESSEalone, PndTrkPlotMacros2_InputData In_Put, int iNome, int iTrack)
Int_t i
Definition: run_full.C:25
const Double_t APOTEMAMINSKEWSTRAW
const Double_t BFIELD
const Double_t PI
void WriteMacroParallelHitsGeneral(Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
Double_t
void WriteMacroParallel_MvdHitsGeneralConformalwithMC(Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
void WriteMacroSttParallel(PndTrkPlotMacros2_InputData In_Put)
const Double_t APOTEMAMINOUTERPARSTRAW
void SttInfoXYZParal(Vec< Double_t > *info, Short_t infopar, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
void WriteMacroSkewAssociatedHitswithMC_Degree(Double_t *ESSE, Double_t *ESSEalone, PndTrkPlotMacros2_InputData In_Put, int iNome, int iTrack)
void WriteMacroParallelHitsGeneralConformalwithMC(Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Double_t BFIELD, Double_t CVEL, Double_t DIMENSIONSCITIL, bool doMcComparison, TClonesArray *fMCTrackArray, Int_t Nhits, Vec< Double_t > *info, PndTrkPlotMacros2_InputData In_Put, int IVOLTE, Short_t nMCTracks, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHits, Short_t nTracksFoundSoFar, Vec< bool > *keepit, Vec< Double_t > *FI0, Vec< Double_t > *Ox, Vec< Double_t > *Oy, Vec< Double_t > *posizSciTil, Vec< Double_t > *primoangolo, Vec< Double_t > *R, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Vec< Double_t > *sigmaXMvdPixel, Vec< Double_t > *sigmaXMvdStrip, Vec< Double_t > *sigmaYMvdPixel, Vec< Double_t > *sigmaYMvdStrip, Vec< Double_t > *ultimoangolo, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
const Double_t VERTICALGAP
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
const Double_t APOTEMAMAXINNERPARSTRAW
const int MAXSTTHITSINTRACK
const Double_t CVEL
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])
void WriteMacroAllHitsRestanti(Double_t APOTEMAMAXINNERPARSTRAW, Double_t APOTEMAMAXSKEWSTRAW, Double_t APOTEMAMINOUTERPARSTRAW, Double_t APOTEMAMINSKEWSTRAW, Vec< bool > *InclusionListSciTil, Vec< bool > *InclusionListStt, Vec< Double_t > *info, int IVOLTE, Vec< bool > *keepit, Vec< Short_t > *ListTrackCandHit, Vec< Short_t > *ListTrackCandHitType, int MAXMVDPIXELHITS, int MAXMVDPIXELHITSINTRACK, int MAXMVDSTRIPHITS, int MAXMVDSTRIPHITSINTRACK, int MAXSCITILHITSINTRACK, int MAXSTTHITS, int MAXSTTHITSINTRACK, int MAXTRACKSPEREVENT, Short_t nMvdPixelHit, Short_t nMvdStripHit, Short_t nSciTilHit, Short_t nSttHit, Short_t nSttParHit, Short_t nSttSkewHit, Short_t nSttTrackCand, Vec< Short_t > *nTrackCandHit, Vec< Double_t > *posizSciTil, Double_t RSTRAWDETECTORMAX, Double_t APOTEMASTRAWDETECTORMIN, Double_t VERTICALGAP, Vec< Double_t > *XMvdPixel, Vec< Double_t > *XMvdStrip, Vec< Double_t > *YMvdPixel, Vec< Double_t > *YMvdStrip)
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN
void WriteMacroSttParallelExternal(PndTrkPlotMacros2_InputData In_Put)
Double_t R
Definition: checkhelixhit.C:61
int Nint(float x)
Definition: PndCAMath.h:117
void WriteMacroSttParallelAssociatedHitsandMvdwithMC(PndTrkPlotMacros2_InputData In_Put, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t primoangolo, Double_t ultimoangolo, Short_t Nhits, int iTrack, int iNome, Short_t daSttTrackaMCTrack, Short_t nMvdPixelHitsAssociatedToSttTra, Short_t nMvdStripHitsAssociatedToSttTra, Short_t nSkewHitsinTrack)
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::WriteMacroAllHitsRestanti ( Double_t  APOTEMAMAXINNERPARSTRAW,
Double_t  APOTEMAMAXSKEWSTRAW,
Double_t  APOTEMAMINOUTERPARSTRAW,
Double_t  APOTEMAMINSKEWSTRAW,
Vec< bool > *  InclusionListSciTil,
Vec< bool > *  InclusionListStt,
Vec< Double_t > *  info,
int  IVOLTE,
Vec< bool > *  keepit,
Vec< Short_t > *  ListTrackCandHit,
Vec< Short_t > *  ListTrackCandHitType,
int  MAXMVDPIXELHITS,
int  MAXMVDPIXELHITSINTRACK,
int  MAXMVDSTRIPHITS,
int  MAXMVDSTRIPHITSINTRACK,
int  MAXSCITILHITSINTRACK,
int  MAXSTTHITS,
int  MAXSTTHITSINTRACK,
int  MAXTRACKSPEREVENT,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Short_t  nSciTilHit,
Short_t  nSttHit,
Short_t  nSttParHit,
Short_t  nSttSkewHit,
Short_t  nSttTrackCand,
Vec< Short_t > *  nTrackCandHit,
Vec< Double_t > *  posizSciTil,
Double_t  RSTRAWDETECTORMAX,
Double_t  APOTEMASTRAWDETECTORMIN,
Double_t  VERTICALGAP,
Vec< Double_t > *  XMvdPixel,
Vec< Double_t > *  XMvdStrip,
Vec< Double_t > *  YMvdPixel,
Vec< Double_t > *  YMvdStrip 
)

Definition at line 896 of file PndTrkPlotMacros2.cxx.

References Vec< T >::at(), Double_t, i, RSTRAWDETECTORMAX, xmax, and xmin.

934  {
935 
936 // fine cambio_in_perl ;
937 
938 // nSttHit = parallel+skew.
939 
940  bool exclusionStt[MAXSTTHITS],
941  exclusionPixel[MAXMVDPIXELHITS],
942  exclusionStrip[MAXMVDSTRIPHITS];
943 
944  char nome[300],
945  nome2[300];
946 
947  int i,j;//,k; //[R.K. 01/2017] unused variable?
948 
949 
950  Double_t //delta, //[R.K. 01/2017] unused variable?
951  //deltax, //[R.K. 01/2017] unused variable?
952  //deltay, //[R.K. 01/2017] unused variable?
953  xmin,
954  xmax,
955  ymin,
956  ymax;
957 
958  // trasformazioni in variabili locali;
959  int dime = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+
960  MAXMVDSTRIPHITSINTRACK+MAXSCITILHITSINTRACK;
961 
962 
963 
964  for(i=0;i<nSttHit;i++){
965  exclusionStt[i]=false;
966  }
967  for(i=0;i<nMvdPixelHit;i++){
968  exclusionPixel[i]=false;
969  }
970  for(i=0;i<nMvdStripHit;i++){
971  exclusionStrip[i]=false;
972  }
973 
974 
975 
976  for(i=0;i<nSttTrackCand;i++){
977  if(!keepit->at(i)) continue;
978 
979  for(j=0;j<nTrackCandHit->at(i);j++){
980 
981  switch (ListTrackCandHitType->at(i*dime+j)){
982  case 0:
983  exclusionPixel[ ListTrackCandHit->at(i*dime+j) ] = true;
984  break;
985  case 1:
986  exclusionStrip[ ListTrackCandHit->at(i*dime+j) ] = true;
987  break;
988  default:
989  exclusionStt[ ListTrackCandHit->at(i*dime+j) ] = true;
990  break;
991  }
992  } // end of for(j=0;j<nTrackCandHit->at(i);j++)
993  } // end of for(i=0;i<nSttTrackCand;i++)
994 
995 
996 
997 
998 
999  xmin=-1.3*RSTRAWDETECTORMAX;
1000  xmax=1.3*RSTRAWDETECTORMAX;
1001  ymin=-1.3*RSTRAWDETECTORMAX;
1002  ymax=1.3*RSTRAWDETECTORMAX;
1003 
1004  sprintf(nome,"MacroSttMvdHitsRestantiEvent%d", IVOLTE);
1005  sprintf(nome2,"%s.C",nome);
1006  FILE * MACRO = fopen(nome2,"w");
1007  fprintf(MACRO,"void %s()\n{\n",nome);
1008  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
1009 
1010 
1011  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
1012 
1013 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
1014  char myname[100];
1015 
1016  sprintf(myname,"InnerPar");
1018  VERTICALGAP,
1019  MACRO,
1022  4, // color code, 4= blue.
1023  myname
1024  );
1025 //--------------
1026 // disegna il BiHexagon destro e sinistro delle skew straws.
1027  sprintf(myname,"Skew");
1029  VERTICALGAP,
1030  MACRO,
1033  2, // color code.
1034  myname
1035  );
1036 //--------------
1037 // disegna il BiHexagon destro e sinistro delle skew straws.
1038  sprintf(myname,"OuterPar");
1040  VERTICALGAP,
1041  MACRO,
1044  4, // color code.
1045  myname
1046  );
1047 //--------------
1048 
1049  for( i=0; i< nSttHit; i++) {
1050  if( (!exclusionStt[i]) && InclusionListStt->at(i) ) { // all straws
1051  if( info->at(i*7+5) == 1 ) { // parallel straws
1052  fprintf(MACRO,"TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
1053  i,info->at(i*7+0),info->at(i*7+1),info->at(i*7+3),info->at(i*7+3),i,i);
1054  } else { // skew straws.
1055  fprintf(MACRO,"TMarker* SS%d = new TMarker(%f,%f,%d);\nSS%d->SetMarkerColor(1);\nSS%d->Draw();\n",
1056  i,info->at(i*7+0),info->at(i*7+1),28,i,i);
1057  }
1058  }
1059  }
1060  for( i=0; i< nMvdPixelHit; i++) {
1061  if( !exclusionPixel[i]) { // all Pixels
1062  fprintf(MACRO,
1063 "TMarker* Pixel%d = new TMarker(%f,%f,%d);\nPixel%d->SetMarkerColor(1);\nPixel%d->Draw();\n",
1064  i,XMvdPixel->at(i),YMvdPixel->at(i),26,i,i);
1065  }
1066  }
1067  for( i=0; i< nMvdStripHit; i++) {
1068  if( !exclusionStrip[i]) { // all Pixels
1069  fprintf(MACRO,
1070 "TMarker* Strip%d = new TMarker(%f,%f,%d);\nStrip%d->SetMarkerColor(1);\nStrip%d->Draw();\n",
1071  i,XMvdStrip->at(i),YMvdStrip->at(i),25,i,i);
1072  }
1073  }
1074 
1075  for( i=0; i< nSciTilHits; i++) {
1076  if( InclusionListSciTil->at(i)) { // all SciTil hit never used.
1077  fprintf(MACRO,
1078 "TMarker* SciT%d = new TMarker(%f,%f,%d);\nSciT%d->SetMarkerColor(1);\nSciT%d->Draw();\n",
1079  i,posizSciTil->at(i*3+0),posizSciTil->at(i*3+1),30,i,i);
1080  }
1081  }
1082  fprintf(MACRO,"}\n");
1083  fclose(MACRO);
1084 
1085 
1086 
1087  return;
1088  }
const Double_t RSTRAWDETECTORMAX
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
Int_t i
Definition: run_full.C:25
Double_t xmax
const Double_t APOTEMAMINSKEWSTRAW
Double_t
const Double_t APOTEMAMINOUTERPARSTRAW
void DrawBiHexagonInMacro(Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
const Double_t VERTICALGAP
const Double_t APOTEMAMAXINNERPARSTRAW
const int MAXSTTHITSINTRACK
Double_t xmin
void DrawHexagonCircleInMacro(Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkPlotMacros2::WriteMacroParallel_MvdHitsGeneralConformalwithMC ( Double_t  APOTEMAMAXINNERPARSTRAW,
Double_t  APOTEMAMAXSKEWSTRAW,
Double_t  APOTEMAMINOUTERPARSTRAW,
Double_t  APOTEMAMINSKEWSTRAW,
Double_t  BFIELD,
Double_t  CVEL,
Double_t  DIMENSIONSCITIL,
bool  doMcComparison,
TClonesArray *  fMCTrackArray,
Int_t  Nhits,
Vec< Double_t > *  info,
PndTrkPlotMacros2_InputData  In_Put,
int  IVOLTE,
Short_t  nMCTracks,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Short_t  nSciTilHits,
Short_t  nTracksFoundSoFar,
Vec< bool > *  keepit,
Vec< Double_t > *  FI0,
Vec< Double_t > *  Ox,
Vec< Double_t > *  Oy,
Vec< Double_t > *  posizSciTil,
Vec< Double_t > *  primoangolo,
Vec< Double_t > *  R,
Double_t  RSTRAWDETECTORMAX,
Double_t  APOTEMASTRAWDETECTORMIN,
Vec< Double_t > *  sigmaXMvdPixel,
Vec< Double_t > *  sigmaXMvdStrip,
Vec< Double_t > *  sigmaYMvdPixel,
Vec< Double_t > *  sigmaYMvdStrip,
Vec< Double_t > *  ultimoangolo,
Double_t  VERTICALGAP,
Vec< Double_t > *  XMvdPixel,
Vec< Double_t > *  XMvdStrip,
Vec< Double_t > *  YMvdPixel,
Vec< Double_t > *  YMvdStrip 
)

Definition at line 1931 of file PndTrkPlotMacros2.cxx.

References APOTEMASTRAWDETECTORMIN, Vec< T >::at(), cos(), CVEL, PndTrkPlotMacros2_InputData::dimensionscitil, Double_t, fabs(), PndTrkPlotMacros2_InputData::fMCTrackArray, fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), i, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::NFIDIVCONFORMAL, PndTrkPlotMacros2_InputData::NRDIVCONFORMAL, PI, PndTrkPlotMacros2_InputData::radiaConf, RSTRAWDETECTORMAX, sin(), sqrt(), xmax, and xmin.

1971 {
1972 // fine cambio_in_perl ;
1973 
1974  Int_t i; //, j, i1, ii, index, Kincl, nlow, nup, STATUS; //[R.K. 01/2017] unused variable?
1975 
1976  Double_t xmin , xmax, ymin, ymax, xl, xu, yl, yu,
1977  gamma,
1978  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
1979  delta, deltax, deltay,// deltaz, deltaS, //[R.K. 01/2017] unused variable?
1980  ff,//factor, //[R.K. 01/2017] unused variable?
1981  //zmin, zmax, Smin, Smax, S1, S2, //[R.K. 01/2017] unused variable?
1982  y1, y2,x1,x2,//z1, z2, //[R.K. 01/2017] unused variable?
1983  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
1984  aaa, bbb, rrr; //ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
1985  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
1986  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
1987  //fmin, fmax, offset, step, //[R.K. 01/2017] unused variable?
1988  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
1989  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
1990  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
1991  //POINTS1[6]; //[R.K. 01/2017] unused variable?
1992 
1993  char nome[300], nome2[300];
1994 
1995  const double PI = 3.141592654;
1996 
1997  Double_t USciT[nSciTilHits];
1998  Vec <Double_t> USciTil(USciT,nSciTilHits,"USciTil");
1999 
2000  Double_t VSciT[nSciTilHits];
2001  Vec <Double_t> VSciTil(VSciT,nSciTilHits,"VSciTil");
2002 
2003  Double_t oX[Nhits], oY[Nhits], Radi[Nhits];
2004  Vec <Double_t> Ox(oX,Nhits,"Ox");
2005  Vec <Double_t> Oy(oY,Nhits,"Oy");
2006  Vec <Double_t> Radius(Radi,Nhits,"Radius");
2007 
2008 
2009  Double_t UPixel[nMvdPixelHit],
2010  VPixel[nMvdPixelHit],
2011  PRadius[nMvdPixelHit],
2012  UStrip[nMvdStripHit],
2013  VStrip[nMvdStripHit],
2014  SRadius[nMvdStripHit];
2015  Vec <Double_t> PixelU(UPixel,nMvdPixelHit,"PixelU");
2016  Vec <Double_t> PixelV(VPixel,nMvdPixelHit,"PixelV");
2017  Vec <Double_t> RadiusP(PRadius,nMvdPixelHit,"RadiusP");
2018  Vec <Double_t> StripU(UStrip,nMvdStripHit,"StripU");
2019  Vec <Double_t> StripV(VStrip,nMvdStripHit,"StripV");
2020  Vec <Double_t> RadiusS(SRadius,nMvdStripHit,"RadiusS");
2021 
2022 
2023 
2024 
2025  Double_t ALF[nTracksFoundSoFar],BET[nTracksFoundSoFar],
2026  GAMM[nTracksFoundSoFar];
2027  Vec <Double_t> ALFA(ALF,nTracksFoundSoFar,"ALFA");
2028  Vec <Double_t> BETA(BET,nTracksFoundSoFar,"BETA");
2029  Vec <Double_t> GAMMA(GAMM,nTracksFoundSoFar,"GAMMA");
2030 
2031 //---------- parallel straws Macro now con anche le tracce MC
2032 
2033 
2034  sprintf(nome,"MacroSttMvdAllHitsConformalwithMCEvent%d", IVOLTE);
2035  sprintf(nome2,"%s.C",nome);
2036  FILE * MACRO = fopen(nome2,"w");
2037  fprintf(MACRO,"void %s()\n{\n",nome);
2038 
2039  xmin=1.e20;
2040  xmax=-1.e20;
2041  ymin=1.e20;
2042  ymax=-1.e20;
2043 
2044 
2045 
2046 //--- SciTil info
2047  for( i=0; i< nSciTilHits; i++) {
2048  Double_t erre = posizSciTil->at(i*3+0)*posizSciTil->at(i*3+0)+
2049  posizSciTil->at(i*3+1)*posizSciTil->at(i*3+1);
2050  USciTil[i] = posizSciTil->at(i*3+0)/erre;
2051  VSciTil[i] = posizSciTil->at(i*3+1)/erre;
2052  if (USciTil[i] < xmin) xmin = USciTil[i];
2053  if (USciTil[i] > xmax) xmax = USciTil[i];
2054  if (VSciTil[i] < ymin) ymin = VSciTil[i];
2055  if (VSciTil[i] > ymax) ymax = VSciTil[i];
2056  }
2057 //------
2058 
2059 
2060  for( i=0; i< Nhits; i++) {
2061  if(!In_Put.InclusionListStt[i]) continue;
2062  if( info->at(i*7+5) == 1 ) { // parallel straws
2063 // centro sfera in sistema conforme
2064  gamma = info->at(i*7+0)*info->at(i*7+0) +
2065  info->at(i*7+1)*info->at(i*7+1) - info->at(i*7+3)*info->at(i*7+3);
2066  Ox[i] = info->at(i*7+0) / gamma;
2067  Oy[i] = info->at(i*7+1) / gamma;
2068  Radius[i] = info->at(i*7+3)/gamma;
2069  if (Ox[i]-Radius[i] < xmin) xmin = Ox[i]-Radius[i];
2070  if (Ox[i]+Radius[i] > xmax) xmax = Ox[i]+Radius[i];
2071  if (Oy[i]-Radius[i] < ymin) ymin = Oy[i]-Radius[i];
2072  if (Oy[i]+Radius[i] > ymax) ymax = Oy[i]+Radius[i];
2073  }
2074  }
2075 
2076 
2077 // Mvd hits;
2078 
2079  double CC,
2080  pseudoRadius = 0.01 ; // 'raggio' di Pixel e Strip;
2081  // Pixel
2082  for( i=0; i< nMvdPixelHit; i++) {
2083  // here, for the boundary calculation, it is enough to approximate the
2084  // rectangular sensor in a circle of radius 0.01 in XY space;
2085 
2086  CC = XMvdPixel->at(i)*XMvdPixel->at(i) + YMvdPixel->at(i)*YMvdPixel->at(i);
2087  // assumo un raggio del circolo che ingloba il sensore di 0.01 cm;
2088  gamma = CC - pseudoRadius*pseudoRadius;
2089  PixelU[i] = XMvdPixel->at(i) / gamma;
2090  PixelV[i] = YMvdPixel->at(i) / gamma;
2091  RadiusP[i] = pseudoRadius/gamma;
2092  if (PixelU[i]-RadiusP[i] < xmin) xmin = PixelU[i]-RadiusP[i];
2093  if (PixelU[i]+RadiusP[i] > xmax) xmax = PixelU[i]+RadiusP[i];
2094  if (PixelV[i]-RadiusP[i] < ymin) ymin = PixelV[i]-RadiusP[i];
2095  if (PixelV[i]+RadiusP[i] > ymax) ymax = PixelV[i]+RadiusP[i];
2096 
2097  } // end of for( i=0; i< nMvdPixelHit; i++)
2098 
2099  // Strip
2100  for( i=0; i< nMvdStripHit; i++) {
2101  // here, for the boundary calculation, it is enough to approximate the
2102  // rectangular sensor in a circle of radius 0.01 in XY space;
2103 
2104  CC = XMvdStrip->at(i)*XMvdStrip->at(i) + YMvdStrip->at(i)*YMvdStrip->at(i);
2105  // assumo un raggio del circolo che ingloba il sensore di 0.01 cm;
2106  gamma = CC - pseudoRadius*pseudoRadius;
2107  StripU[i] = XMvdStrip->at(i) / gamma;
2108  StripV[i] = YMvdStrip->at(i) / gamma;
2109  RadiusS[i] = pseudoRadius/gamma;
2110 
2111  if (StripU[i]-RadiusS[i] < xmin) xmin = StripU[i]-RadiusS[i];
2112  if (StripU[i]+RadiusS[i] > xmax) xmax = StripU[i]+RadiusS[i];
2113  if (StripV[i]-RadiusS[i] < ymin) ymin = StripV[i]-RadiusS[i];
2114  if (StripV[i]+RadiusS[i] > ymax) ymax = StripV[i]+RadiusS[i];
2115 
2116  } // end of for( i=0; i< nMvdStripHit; i++)
2117 
2118 
2119 
2120  if( xmin > 0. ) xmin = 0.;
2121  if( xmax < 0.) xmax = 0.;
2122  if( ymin > 0. ) ymin = 0.;
2123  if( ymax < 0.) ymax = 0.;
2124 
2125  deltax = xmax-xmin;
2126  deltay = ymax - ymin;
2127 
2128  if( deltax > deltay) {
2129  ymin -= 0.5*(deltax-deltay);
2130  ymax = ymin+ deltax;
2131  delta = deltax;
2132  } else {
2133  xmin -= 0.5*(deltay-deltax);
2134  xmax = xmin+ deltay;
2135  delta= deltay;
2136  }
2137 
2138  xmax = xmax + delta*0.15;
2139  xmin = xmin - delta*0.15;
2140 
2141  ymax = ymax + delta*0.15;
2142  ymin = ymin - delta*0.15;
2143 
2144 
2145 
2146  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
2147  xmin,ymin,xmax,ymax);
2148 
2149 // ora la grigliatura con i cerchi
2150 
2151  fprintf(MACRO,
2152  "TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
2154  In_Put.NRDIVCONFORMAL,In_Put.NRDIVCONFORMAL);
2155 
2156  for( i=In_Put.NRDIVCONFORMAL-1; i>=0 ; i--) {
2157  fprintf(MACRO,
2158  "TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
2159  i,In_Put.radiaConf[i],In_Put.radiaConf[i],i,i);
2160  }
2161 //---------------------
2162 // ora la grigliatura con i segmenti blu per delimitare la zona degli Stt.
2163 
2164  for(i=0; i<In_Put.NFIDIVCONFORMAL; i++) {
2165  ff = i*2.*PI/In_Put.NFIDIVCONFORMAL;
2166  x1=cos(ff)/RSTRAWDETECTORMAX;
2167  y1=sin(ff)/RSTRAWDETECTORMAX;
2170  fprintf(MACRO,
2171 "TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(4);\nSeg%d->Draw();\n",
2172  i,x1,y1,x2,y2,i,i);
2173  }
2174 //---------------------
2175 // ora la grigliatura con i segmenti magenta per comprendere la zona degli SciTil.
2176 
2177  double RMAXSCITIL=50.; //cm
2178  for(i=0; i<In_Put.NFIDIVCONFORMAL; i++) {
2179  ff = i*2.*PI/In_Put.NFIDIVCONFORMAL;
2180  x1=cos(ff)/RMAXSCITIL;
2181  y1=sin(ff)/RMAXSCITIL;
2182  x2=cos(ff)/RSTRAWDETECTORMAX;
2183  y2=sin(ff)/RSTRAWDETECTORMAX;
2184  fprintf(MACRO,"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(6);\nSeg%d->Draw();\n",
2185  i,x1,y1,x2,y2,i,i);
2186  }
2187 //---------------------
2188 
2189  fprintf(MACRO,"TGaxis *Assex = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
2190  fprintf(MACRO,"Assex->SetTitle(\"U \");\n");
2191  fprintf(MACRO,"Assex->SetTitleOffset(1.5);\n");
2192  fprintf(MACRO,"Assex->Draw();\n");
2193  fprintf(MACRO,"TGaxis *Assey = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
2194  fprintf(MACRO,"Assey->SetTitle(\"V \");\n");
2195  fprintf(MACRO,"Assey->SetTitleOffset(1.5);\n");
2196  fprintf(MACRO,"Assey->Draw();\n");
2197 
2198 
2199 // plot degli Hits Stt.
2200  for( i=0; i< Nhits; i++) {
2201  if(!In_Put.InclusionListStt[i]) continue;
2202  if( info->at(i*7+5) == 1 ) { // parallel straws
2203  fprintf(MACRO,
2204 "TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
2205  i,Ox[i],Oy[i],Radius[i],Radius[i],i,i);
2206  }
2207  }
2208 
2209 
2210 
2211 // plot degli Hits Pixel Mvd.
2212  for( i=0; i< nMvdPixelHit; i++) {
2213  fprintf(MACRO,
2214 "TMarker* Pixel%d = new TMarker(%f,%f,%d);\nPixel%d->SetMarkerColor(1);\nPixel%d->Draw();\n",
2215  i,PixelU[i],PixelV[i],26,i,i);
2216 //"TEllipse* Pixel%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nPixel%d->SetFillStyle(0);\nPixel%d->Draw();\n",
2217 // i,PixelU[i],PixelV[i],RadiusP[i],RadiusP[i],i,i);
2218  }
2219 //-----------
2220 
2221 
2222 
2223 // plot degli Hits Strip Mvd.
2224  for( i=0; i< nMvdStripHit; i++) {
2225  fprintf(MACRO,
2226 "TMarker* Strip%d = new TMarker(%f,%f,%d);\nStrip%d->SetMarkerColor(1);\nStrip%d->Draw();\n",
2227  i,StripU[i],StripV[i],25,i,i);
2228 // "TEllipse* Strip%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nStrip%d->SetFillStyle(0);\nStrip%d->Draw();\n",
2229 // i,StripU[i],StripV[i],RadiusS[i],RadiusS[i],i,i);
2230  }
2231 //-----------
2232 // plot degli Hit SciTil
2233  for( i=0; i< nSciTilHits; i++) {
2234 
2235 
2237  1, // goes in the SetColor function of root;
2238  In_Put.dimensionscitil,
2239  MACRO,
2240  posizSciTil->at(i*3+0),
2241  posizSciTil->at(i*3+1),
2242  i,
2243  2 // 2--> disegno SciTil in conforme.
2244  );
2245  }
2246 
2247 
2248 
2249 
2250 //------------------ plotting all the tracks found
2251 
2252 
2253  for(i=0; i<nTracksFoundSoFar; i++){
2254  if(!keepit->at(i)) continue;
2255 
2256  ALFA[i] = -2.*Oxxx->at(i);
2257  BETA[i] = -2.*Oyyy->at(i);
2258  GAMMA[i]= Oxxx->at(i)*Oxxx->at(i)+Oyyy->at(i)*Oyyy->at(i)
2259  - R->at(i) * R->at(i);
2260  if( fabs(GAMMA[i]) > 1.e-10) {
2261  aaa = -0.5*ALFA[i]/GAMMA[i];
2262  bbb = -0.5*BETA[i]/GAMMA[i];
2263  rrr = sqrt( aaa*aaa+bbb*bbb-1./GAMMA[i]);
2264  if( fabs(rrr/GAMMA[i]) < 30.) {
2265  fprintf(MACRO,
2266 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
2267  i,aaa,bbb,rrr,rrr,i,i,i);
2268  } else{
2269 
2270 
2271  yl = -xmin*ALFA[i]/BETA[i] - 1./BETA[i];
2272  yu = -xmax*ALFA[i]/BETA[i] - 1./BETA[i];
2273  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
2274  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
2275  fprintf(MACRO,"ris%d->Draw();\n",i);
2276 
2277 
2278 
2279  }
2280  } else {
2281 
2282  if(fabs(BETA[i]) < 1.e-10){
2283  if(fabs(ALFA[i])<1.e-10) {
2284  continue;
2285  } else {
2286  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n"
2287  ,i,-1./ALFA[i],ymin,- 1./ALFA[i],ymax);
2288  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
2289  fprintf(MACRO,"ris%d->Draw();\n",i);
2290  }
2291  } else {
2292  yl = -xmin*ALFA[i]/BETA[i] - 1./BETA[i];
2293  yu = -xmax*ALFA[i]/BETA[i] - 1./BETA[i];
2294  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
2295  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
2296  fprintf(MACRO,"ris%d->Draw();\n",i);
2297  }
2298 
2299  }
2300 
2301  } // end of for(i=0; i<nTracksFoundSoFar; i++)
2302 
2303 // ------------------------------
2304 
2305 
2306 // plotting all the tracks MC generated
2307  if(doMcComparison){
2308  Int_t icode;
2309  Double_t Rr, Oxx, Oyy, Cx, Cy, Px, Py, carica ;// Dd, Fifi, //[R.K. 01/2017] unused variable?
2310  PndMCTrack* pMC;
2311  for(i=0;i<nMCTracks; i++){
2312  pMC = (PndMCTrack*) In_Put.fMCTrackArray->At(i);
2313  if ( ! pMC ) continue;
2314  icode = pMC->GetPdgCode() ; // PDG code of track
2315  Oxx = pMC->GetStartVertex().X(); // X of starting point track
2316  Oyy = pMC->GetStartVertex().Y(); // Y of starting point track
2317  Px = pMC->GetMomentum().X();
2318  Py = pMC->GetMomentum().Y();
2319  aaa = sqrt( Px*Px + Py*Py);
2320  Rr = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
2321  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
2322  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
2323  if (icode>1000000000) carica = 1.;
2324  else carica = fParticle->Charge()/3. ; // charge of track
2325  if (fabs(carica)<0.1 ) continue;
2326  Cx = Oxx + Py*1000./(BFIELD*CVEL*carica);
2327  Cy = Oyy - Px*1000./(BFIELD*CVEL*carica);
2328  gamma = -Rr*Rr + Cx*Cx+Cy*Cy;
2329  if(fabs(gamma)< 0.001) {
2330  if(Cy != 0.) {
2331  yl = xmin*(-Cx/Cy) + 0.5/Cy;
2332  yu = xmax*(-Cx/Cy) + 0.5/Cy;
2333  xl = xmin;
2334  xu = xmax;
2335  } else {
2336  yl = ymin;
2337  yu = ymax;
2338  xu=xl = 0.5/Cx;
2339  }
2340  fprintf(MACRO,"TLine* MCris%d = new TLine(%f,%f,%f,%f);\n",i,xl,yl,xu,yu);
2341  fprintf(MACRO,"MCris%d->SetLineStyle(2);\n",i);
2342  fprintf(MACRO,"MCris%d->SetLineColor(3);\n",i);
2343  fprintf(MACRO,"MCris%d->SetLineWidth(1);\n",i);
2344  fprintf(MACRO,"MCris%d->Draw();\n",i);
2345 
2346  } else {
2347  if(fabs(Rr/gamma) > 1.) {
2348  if(fabs(Cy)>0.001 ) {
2349  yl = -xmin*Cx/Cy+0.5/Cy;
2350  yu = -xmax*Cx/Cy+0.5/Cy;
2351  fprintf(MACRO,"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
2352  fprintf(MACRO,"MCline%d->SetLineColor(3);\n",i);
2353  fprintf(MACRO,"MCline%d->Draw();\n",i);
2354  } else {
2355  fprintf(MACRO,"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n"
2356  ,i,2.*Cx,ymin,2.*Cx,ymax);
2357  fprintf(MACRO,"MCline%d->SetLineColor(2);\n",i);
2358  fprintf(MACRO,"MCline%d->Draw();\n",i);
2359  }
2360  } else {
2361  fprintf(MACRO, "TEllipse* MCcerchio%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMCcerchio%d->SetLineColor(3);\n",
2362  i,Cx/gamma,Cy/gamma,Rr/fabs(gamma),Rr/fabs(gamma),i);
2363 
2364  fprintf(MACRO,"MCcerchio%d->SetFillStyle(0);\nMCcerchio%d->SetLineStyle(2);\nMCcerchio%d->SetLineWidth(1);\nMCcerchio%d->Draw();\n",
2365  i,i,i,i);
2366  }
2367  }
2368  } // end of for(i=0;i<nMCTracks; i++)
2369 
2370  } // end of if(doMcComparison)
2371 
2372 
2373  fprintf(MACRO,"}\n");
2374  fclose(MACRO);
2375 
2376 
2377 
2378 
2379 
2380 
2381  return ;
2382 
2383 }
const Double_t RSTRAWDETECTORMAX
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t xmax
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
const Double_t CVEL
Double_t xmin
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t APOTEMASTRAWDETECTORMIN
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkPlotMacros2::WriteMacroParallelHitsGeneral ( Double_t  APOTEMAMAXINNERPARSTRAW,
Double_t  APOTEMAMAXSKEWSTRAW,
Double_t  APOTEMAMINOUTERPARSTRAW,
Double_t  APOTEMAMINSKEWSTRAW,
Double_t  BFIELD,
Double_t  CVEL,
Double_t  DIMENSIONSCITIL,
bool  doMcComparison,
TClonesArray *  fMCTrackArray,
Int_t  Nhits,
Vec< Double_t > *  info,
PndTrkPlotMacros2_InputData  In_Put,
int  IVOLTE,
Short_t  nMCTracks,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Short_t  nSciTilHits,
Short_t  nTracksFoundSoFar,
Vec< bool > *  keepit,
Vec< Double_t > *  FI0,
Vec< Double_t > *  Ox,
Vec< Double_t > *  Oy,
Vec< Double_t > *  posizSciTil,
Vec< Double_t > *  primoangolo,
Vec< Double_t > *  R,
Double_t  RSTRAWDETECTORMAX,
Double_t  APOTEMASTRAWDETECTORMIN,
Vec< Double_t > *  sigmaXMvdPixel,
Vec< Double_t > *  sigmaXMvdStrip,
Vec< Double_t > *  sigmaYMvdPixel,
Vec< Double_t > *  sigmaYMvdStrip,
Vec< Double_t > *  ultimoangolo,
Double_t  VERTICALGAP,
Vec< Double_t > *  XMvdPixel,
Vec< Double_t > *  XMvdStrip,
Vec< Double_t > *  YMvdPixel,
Vec< Double_t > *  YMvdStrip 
)

Definition at line 1098 of file PndTrkPlotMacros2.cxx.

References Vec< T >::at(), atan2(), cos(), CVEL, Double_t, fabs(), fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), i, PndTrkPlotMacros2_InputData::InclusionListStt, PI, RSTRAWDETECTORMAX, sin(), sqrt(), xmax, and xmin.

1139 {
1140 // fine cambio_in_perl ;
1141 
1142  Int_t i, j, ii;//, i1, index, Kincl, nlow, nup, STATUS; //[R.K. 01/2017] unused variable?
1143 
1144  Double_t xmin , xmax, ymin, ymax, //xl, xu, yl, yu, //[R.K. 01/2017] unused variable?
1145  //gamma, //[R.K. 01/2017] unused variable?
1146  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
1147  //delta, deltax, deltay, deltaz, deltaS, //[R.K. 01/2017] unused variable?
1148  //factor,ff, //[R.K. 01/2017] unused variable?
1149  //zmin, zmax, Smin, Smax, S1, S2, //[R.K. 01/2017] unused variable?
1150  x2, y2,//y1,x1,z1, z2, //[R.K. 01/2017] unused variable?
1151  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
1152  aaa, bbb, rrr; //ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
1153  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
1154  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
1155  //fmin, fmax, offset, step, //[R.K. 01/2017] unused variable?
1156  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
1157  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
1158  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
1159  //POINTS1[6]; //[R.K. 01/2017] unused variable?
1160 
1161  char nome[300], nome2[300];
1162 
1163  const double PI = 3.141592654;
1164 
1165 
1166 
1167 
1168 //---------- parallel straws Macro now
1169  sprintf(nome,"MacroSttMvdAllHitsEvent%d", IVOLTE);
1170  sprintf(nome2,"%s.C",nome);
1171  FILE * MACRO = fopen(nome2,"w");
1172  fprintf(MACRO,"void %s()\n{\n",nome);
1173 
1174 
1175  xmin=-1.3*RSTRAWDETECTORMAX;
1176  xmax=1.3*RSTRAWDETECTORMAX;
1177  ymin=-1.3*RSTRAWDETECTORMAX;
1178  ymax=1.3*RSTRAWDETECTORMAX;
1179 
1180 
1181  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
1182 
1183  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
1184 
1185 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
1186  char myname[100];
1187 
1188  sprintf(myname,"InnerPar");
1190  VERTICALGAP,
1191  MACRO,
1194  4, // color code, 4= blue.
1195  myname
1196  );
1197 //--------------
1198 // disegna il BiHexagon destro e sinistro delle skew straws.
1199  sprintf(myname,"Skew");
1201  VERTICALGAP,
1202  MACRO,
1205  2, // color code.
1206  myname
1207  );
1208 //--------------
1209 // disegna il BiHexagon destro e sinistro delle skew straws.
1210  sprintf(myname,"OuterPar");
1212  VERTICALGAP,
1213  MACRO,
1216  4, // color code.
1217  myname
1218  );
1219 //--------------
1220 
1221  for( i=0; i< Nhits; i++) {
1222  if(!In_Put.InclusionListStt[i]) continue;
1223  if( info->at(i*7+5) == 1 ) { // parallel straws
1224 fprintf(MACRO,"TEllipse* Paral%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nParal%d->SetFillStyle(0);\nParal%d->Draw();\n",
1225  i,info->at(i*7+0),info->at(i*7+1),info->at(i*7+3),info->at(i*7+3),i,i);
1226  } else { // skew straws.
1227 fprintf(MACRO,"TMarker* Skew%d = new TMarker(%f,%f,%d);\nSkew%d->SetMarkerColor(1);\nSkew%d->Draw();\n",
1228  i,info->at(i*7+0),info->at(i*7+1),28,i,i);
1229  }
1230  }
1231 
1232  for( ii=0; ii< nMvdStripHit; ii++) {
1233  //x1= XMvdStrip->at(ii)-sigmaXMvdStrip->at(ii); //[R.K. 9/2018] unused
1234  x2= XMvdStrip->at(ii)+sigmaXMvdStrip->at(ii);
1235  //y1= YMvdStrip->at(ii)-sigmaYMvdStrip->at(ii); //[R.K. 9/2018] unused
1236  y2= YMvdStrip->at(ii)+sigmaYMvdStrip->at(ii);
1237 fprintf(MACRO,
1238  "TMarker* Strip%d = new TMarker(%f,%f,%d);\nStrip%d->SetMarkerColor(1);\nStrip%d->Draw();\n",
1239  ii,XMvdStrip->at(ii),YMvdStrip->at(ii),25,ii,ii);
1240 
1241 
1242  }
1243  for( ii=0; ii< nMvdPixelHit; ii++) {
1244  //x1= XMvdPixel->at(ii)-sigmaXMvdPixel->at(ii); //[R.K. 9/2018] unused
1245  x2= XMvdPixel->at(ii)+sigmaXMvdPixel->at(ii);
1246  //y1= YMvdPixel->at(ii)-sigmaYMvdPixel->at(ii); //[R.K. 9/2018] unused
1247  y2= YMvdPixel->at(ii)+sigmaYMvdPixel->at(ii);
1248 fprintf(MACRO,
1249 "TMarker* Pixel%d = new TMarker(%f,%f,%d);\nPixel%d->SetMarkerColor(1);\nPixel%d->Draw();\n",
1250  ii,XMvdPixel->at(ii),YMvdPixel->at(ii),26,ii,ii);
1251  }
1252 
1253 
1254 //---- disegna gli Scitil.
1255 
1256 
1257  for( i=0; i< nSciTilHits; i++) {
1259  1, // color code (the same as in SetColor of root);
1261  MACRO,
1262  posizSciTil->at(i*3+0),
1263  posizSciTil->at(i*3+1),
1264  i,
1265  0// if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
1266  // SciTil draw in UV.
1267  );
1268  }
1269 //------------------------
1270 
1271 //------------------------------- plotting all the tracks found
1272 
1273  for(i=0, ii=0; i<nTracksFoundSoFar; i++){
1274 
1275  if(!keepit->at(i)) continue;
1276  ii++;
1277  aaa = Ox->at(i);
1278  bbb = Oy->at(i);
1279  rrr = R->at(i);
1280  fprintf(MACRO,
1281 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,%f,%f);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw(\"only\");\n",
1282  ii,aaa,bbb,rrr,rrr,primoangolo->at(i),ultimoangolo->at(i),ii,ii,ii);
1283 
1284 
1285  }
1286 
1287 // -----------
1288 
1289 
1290  fprintf(MACRO,"}\n");
1291  fclose(MACRO);
1292 
1293 //------------------------------------------------------------------------------------------------------------
1294 
1295  if(!doMcComparison) return;
1296 
1297 //---------- parallel straws Macro now con anche le tracce MC
1298 
1299  sprintf(nome,"MacroSttMvdAllHitswithMCEvent%d", IVOLTE);
1300  sprintf(nome2,"%s.C",nome);
1301  MACRO = fopen(nome2,"w");
1302  fprintf(MACRO,"void %s()\n{\n",nome);
1303 
1304 
1305  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",xmin,ymin,xmax,ymax);
1306 
1307 
1308  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
1309 
1310 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
1311  sprintf(myname,"InnerPar");
1313  VERTICALGAP,
1314  MACRO,
1317  4, // color code, 4= blue.
1318  myname
1319  );
1320 //--------------
1321 // disegna il BiHexagon destro e sinistro delle skew straws.
1322  sprintf(myname,"Skew");
1324  VERTICALGAP,
1325  MACRO,
1328  2, // color code.
1329  myname
1330  );
1331 //--------------
1332 // disegna il BiHexagon destro e sinistro delle skew straws.
1333  sprintf(myname,"OuterPar");
1335  VERTICALGAP,
1336  MACRO,
1339  4, // color code.
1340  myname
1341  );
1342 //--------------
1343 
1344  for( i=0; i< Nhits; i++) {
1345 
1346 
1347  if( ! In_Put.InclusionListStt[i] ) continue;
1348  if( info->at(i*7+5) == 1 ) { // parallel straws
1349 fprintf(MACRO,"TEllipse* Paral%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nParal%d->SetFillStyle(0);\nParal%d->Draw();\n",
1350  i,info->at(i*7+0),info->at(i*7+1),info->at(i*7+3),info->at(i*7+3),i,i);
1351  } else { // skew straws.
1352 fprintf(MACRO,"TMarker* Skew%d = new TMarker(%f,%f,%d);\nSkew%d->SetMarkerColor(1);\nSkew%d->Draw();\n",
1353  i,info->at(i*7+0),info->at(i*7+1),28,i,i);
1354  }
1355  }
1356 
1357  for( ii=0; ii< nMvdStripHit; ii++) {
1358  //x1= XMvdStrip->at(ii)-sigmaXMvdStrip->at(ii); //[R.K. 9/2018] unused
1359  x2= XMvdStrip->at(ii)+sigmaXMvdStrip->at(ii);
1360  //y1= YMvdStrip->at(ii)-sigmaYMvdStrip->at(ii); //[R.K. 9/2018] unused
1361  y2= YMvdStrip->at(ii)+sigmaYMvdStrip->at(ii);
1362 fprintf(MACRO,
1363  "TMarker* Strip%d = new TMarker(%f,%f,%d);\nStrip%d->SetMarkerColor(1);\nStrip%d->Draw();\n",
1364  ii,XMvdStrip->at(ii),YMvdStrip->at(ii),25,ii,ii);
1365 
1366 
1367  }
1368  for( ii=0; ii< nMvdPixelHit; ii++) {
1369  //x1= XMvdPixel->at(ii)-sigmaXMvdPixel->at(ii); //[R.K. 9/2018] unused
1370  x2= XMvdPixel->at(ii)+sigmaXMvdPixel->at(ii);
1371  //y1= YMvdPixel->at(ii)-sigmaYMvdPixel->at(ii); //[R.K. 9/2018] unused
1372  y2= YMvdPixel->at(ii)+sigmaYMvdPixel->at(ii);
1373 fprintf(MACRO,
1374 "TMarker* Pixel%d = new TMarker(%f,%f,%d);\nPixel%d->SetMarkerColor(1);\nPixel%d->Draw();\n",
1375  ii,XMvdPixel->at(ii),YMvdPixel->at(ii),26,ii,ii);
1376  }
1377 
1378 //---- disegna gli Scitil.
1379 
1380  for( i=0; i< nSciTilHits; i++) {
1381 //inizio cambio_in_perl
1382 
1384  1, // color code, the same as in SetColor of root;
1386  MACRO,
1387  posizSciTil->at(i*3+0),
1388  posizSciTil->at(i*3+1),
1389  i,
1390  0// if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ;
1391  // else SciTil draw in UV.
1392  );
1393  }
1394 
1395 //fine cambio_in_perl
1396 
1397 //------------------------
1398 
1399 
1400 
1401 
1402 //------------------------------- plotting all the tracks found
1403  for(i=0, ii=0; i<nTracksFoundSoFar; i++){
1404 
1405  if(!keepit->at(i)) continue;
1406  ii++;
1407  aaa = Ox->at(i);
1408  bbb = Oy->at(i);
1409  rrr = R->at(i);
1410  fprintf(MACRO,
1411 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,%f,%f);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw(\"only\");\n",
1412  ii,aaa,bbb,rrr,rrr,primoangolo->at(i),ultimoangolo->at(i),ii,ii,ii);
1413 
1414 
1415  }
1416 
1417 //----------------- ora le traccia MC
1418  for(i=0; i<nMCTracks;i++) {
1419  Int_t icode;
1420  Double_t alfa0, newalfa, newx, newy,primo, ultimo ;
1421  Double_t Rr, Oxx, Oyy, Cx, Cy, Px, Py, carica ;// Dd, Fifi, //[R.K. 01/2017] unused variable?
1422  PndMCTrack* pMC;
1423  pMC = (PndMCTrack*) fMCTrackArray->At(i);
1424  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1425  if ( pMC ) {
1426  icode = pMC->GetPdgCode() ; // PDG code of track
1427  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
1428  if (icode>1000000000) carica = 1.;
1429  else carica = fParticle->Charge()/3. ; // charge of track
1430  Oxx = pMC->GetStartVertex().X(); // X of starting point track
1431  Oyy = pMC->GetStartVertex().Y(); // Y of starting point track
1432  Px = pMC->GetMomentum().X();
1433  Py = pMC->GetMomentum().Y();
1434  aaa = sqrt( Px*Px + Py*Py);
1435  if( fabs(carica) > 0.1 ){
1436  Rr = aaa*1000./(BFIELD*CVEL); //R(cm) of Helix of track projected in XY plane;
1437  // B = 2 Tesla
1438  Cx = Oxx + Py*1000./(BFIELD*CVEL*carica);
1439  Cy = Oyy - Px*1000./(BFIELD*CVEL*carica);
1440 
1441  // calcolo per plottare solo la parte rilevante della traccia MC.
1442  primo=alfa0 = atan2(Oyy-Cy, Oxx-Cx);
1443  bool flaggo=true;
1444  for(j=0;j<90;j++){
1445  newalfa = alfa0 - carica*j*PI/45;
1446  newx = Cx + Rr*cos(newalfa);
1447  newy = Cy + Rr*sin(newalfa);
1448  if(newx > xmax || newx < xmin || newy>ymax||newy<ymin){
1449  ultimo = newalfa;
1450  if(primo > ultimo ) { primo = ultimo; ultimo = alfa0;};
1451  flaggo=false;
1452  break;
1453  }
1454  }
1455  if(flaggo){
1456  primo = 0.;
1457  ultimo = 2.*PI;
1458  }
1459 
1460  fprintf(MACRO,
1461 "TEllipse* MC%d = new TEllipse(%f,%f,%f,%f,%f,%f);\nMC%d->SetFillStyle(0);\nMC%d->SetLineColor(3);\nMC%d->Draw(\"only\");\n",
1462  i,Cx,Cy,Rr,Rr,primo*180./PI,ultimo*180./PI,i,i,i);
1463 
1464 
1465  } else { // continuation of if( fabs(carica) > 0.1 )
1466  continue; // per ora non plotto le neutre.
1467  // this is a neutral particle (green dashed straight line).
1468  if( Oxx < xmin || Oxx > xmax || Oyy < ymin || Oyy > ymax) continue;
1469  double time, time1, time2;
1470  if(fabs(Px) >1.e-10 ){
1471  time2 = (xmax-Oxx)/Px;
1472  time1 = (xmin-Oxx)/Px;
1473  if(time1<0. && time2<0.) {
1474  continue;
1475  }else if(time2>0.&&time1<0.){
1476  time = time2;
1477  x2 = xmax;
1478  }else if (time1>0. && time2<0.) {
1479  time = time1;
1480  x2 = xmin;
1481  } else{
1482  if( time2>time1 ) {
1483  time=time2;
1484  x2 = xmax;
1485  } else {
1486  time=time1;
1487  x2 = xmin;
1488  }
1489  }
1490  y2 = time*Py + Oyy;
1491  fprintf(MACRO,"TLine* MCneut%d = new TLine(%f,%f,%f,%f);\n",
1492  i,Oxx,Oyy,x2,y2);
1493  fprintf(MACRO,"MCneut%d->SetLineStyle(2);\n",i);
1494  fprintf(MACRO,"MCneut%d->SetLineColor(3);\nMCneut%d->Draw(\"only\");\n"
1495  ,i,i);
1496  } else if( fabs(Px) >1.e-10 ) {
1497  if( fabs(Py) >1.e-10 ) continue;
1498  time2 = (ymax-Oyy)/Py;
1499  time1 = (ymin-Oyy)/Py;
1500  if(time1<0. && time2<0.) {
1501  continue;
1502  }else if(time2>0.&&time1<0.){
1503  y2 = ymax;
1504  }else if (time1>0. && time2<0.) {
1505  y2 = ymin;
1506  } else{
1507  y2= time2>time1 ? ymax : ymin ;
1508  }
1509  fprintf(MACRO,"TLine* MCneut%d = new TLine(%f,%f,%f,%f);\n",
1510  i,Oxx,Oyy,Oxx,y2);
1511  fprintf(MACRO,"MCneut%d->SetLineStyle(2);\n",i);
1512  fprintf(MACRO,"MCneut%d->SetLineColor(3);\nMCneut%d->Draw(\"only\");\n"
1513  ,i,i);
1514  }
1515 
1516 
1517  } // end of if( fabs(carica) > 0.1 )
1518 
1519 
1520 
1521 
1522  } // end of if ( pMC )
1523 
1524 
1525 
1526  } // end of for(i=0; i<nMCTracks;i++)
1527 //----------- fine parte del MC
1528 
1529  fprintf(MACRO,"}\n");
1530  fclose(MACRO);
1531 
1532 //------------------------------------------------------------------------------------------------------------
1533 
1534 
1535 
1536 
1537  return ;
1538 
1539 }
const Double_t RSTRAWDETECTORMAX
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t xmax
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t APOTEMAMINSKEWSTRAW
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
const Double_t APOTEMAMINOUTERPARSTRAW
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void DrawBiHexagonInMacro(Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
const Double_t VERTICALGAP
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
const Double_t APOTEMAMAXINNERPARSTRAW
const Double_t CVEL
Double_t xmin
void DrawHexagonCircleInMacro(Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN
T & at(int index)
Definition: PndTrkVectors.h:54
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::WriteMacroParallelHitsGeneralConformalwithMC ( Double_t  APOTEMAMAXINNERPARSTRAW,
Double_t  APOTEMAMAXSKEWSTRAW,
Double_t  APOTEMAMINOUTERPARSTRAW,
Double_t  APOTEMAMINSKEWSTRAW,
Double_t  BFIELD,
Double_t  CVEL,
Double_t  DIMENSIONSCITIL,
bool  doMcComparison,
TClonesArray *  fMCTrackArray,
Int_t  Nhits,
Vec< Double_t > *  info,
PndTrkPlotMacros2_InputData  In_Put,
int  IVOLTE,
Short_t  nMCTracks,
Short_t  nMvdPixelHit,
Short_t  nMvdStripHit,
Short_t  nSciTilHits,
Short_t  nTracksFoundSoFar,
Vec< bool > *  keepit,
Vec< Double_t > *  FI0,
Vec< Double_t > *  Ox,
Vec< Double_t > *  Oy,
Vec< Double_t > *  posizSciTil,
Vec< Double_t > *  primoangolo,
Vec< Double_t > *  R,
Double_t  RSTRAWDETECTORMAX,
Double_t  APOTEMASTRAWDETECTORMIN,
Vec< Double_t > *  sigmaXMvdPixel,
Vec< Double_t > *  sigmaXMvdStrip,
Vec< Double_t > *  sigmaYMvdPixel,
Vec< Double_t > *  sigmaYMvdStrip,
Vec< Double_t > *  ultimoangolo,
Double_t  VERTICALGAP,
Vec< Double_t > *  XMvdPixel,
Vec< Double_t > *  XMvdStrip,
Vec< Double_t > *  YMvdPixel,
Vec< Double_t > *  YMvdStrip 
)

Definition at line 1551 of file PndTrkPlotMacros2.cxx.

References APOTEMASTRAWDETECTORMIN, Vec< T >::at(), cos(), CVEL, PndTrkPlotMacros2_InputData::dimensionscitil, Double_t, fabs(), PndTrkPlotMacros2_InputData::fMCTrackArray, fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), i, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::NFIDIVCONFORMAL, PndTrkPlotMacros2_InputData::NRDIVCONFORMAL, PI, PndTrkPlotMacros2_InputData::radiaConf, RSTRAWDETECTORMAX, sin(), sqrt(), xmax, and xmin.

1591 {
1592 // fine cambio_in_perl ;
1593 
1594  Int_t i; //, j, i1, ii, index, Kincl, nlow, nup, STATUS; //[R.K. 01/2017] unused variable?
1595 
1596  Double_t xmin , xmax, ymin, ymax, xl, xu, yl, yu,
1597  gamma,
1598  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
1599  delta, deltax, deltay, //deltaz, deltaS, //[R.K. 01/2017] unused variable?
1600  ff,//factor, //[R.K. 01/2017] unused variable?
1601  //zmin, zmax, Smin, Smax, S1, S2, //[R.K. 01/2017] unused variable?
1602  y1, y2,x1,x2,// z1, z2, //[R.K. 01/2017] unused variable?
1603  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
1604  aaa, bbb, rrr; //ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
1605  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
1606  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
1607  //fmin, fmax, offset, step, //[R.K. 01/2017] unused variable?
1608  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
1609  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
1610  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
1611  //POINTS1[6]; //[R.K. 01/2017] unused variable?
1612 
1613  char nome[300], nome2[300];
1614 
1615  const double PI = 3.141592654;
1616 
1617  Double_t USciT[nSciTilHits];
1618  Vec <Double_t> USciTil(USciT,nSciTilHits,"USciTil");
1619 
1620  Double_t VSciT[nSciTilHits];
1621  Vec <Double_t> VSciTil(VSciT,nSciTilHits,"VSciTil");
1622 
1623  Double_t oX[Nhits], oY[Nhits], Radi[Nhits];
1624  Vec <Double_t> Ox(oX,Nhits,"Ox");
1625  Vec <Double_t> Oy(oY,Nhits,"Oy");
1626  Vec <Double_t> Radius(Radi,Nhits,"Radius");
1627 
1628  Double_t ALF[nTracksFoundSoFar],BET[nTracksFoundSoFar],
1629  GAMM[nTracksFoundSoFar];
1630  Vec <Double_t> ALFA(ALF,nTracksFoundSoFar,"ALFA");
1631  Vec <Double_t> BETA(BET,nTracksFoundSoFar,"BETA");
1632  Vec <Double_t> GAMMA(GAMM,nTracksFoundSoFar,"GAMMA");
1633 
1634 //---------- parallel straws Macro now con anche le tracce MC
1635 
1636 
1637  sprintf(nome,"MacroSttAllHitsConformalwithMCEvent%d", IVOLTE);
1638  sprintf(nome2,"%s.C",nome);
1639  FILE * MACRO = fopen(nome2,"w");
1640  fprintf(MACRO,"void %s()\n{\n",nome);
1641 
1642  xmin=1.e20;
1643  xmax=-1.e20;
1644  ymin=1.e20;
1645  ymax=-1.e20;
1646 
1647 
1648 
1649 //--- SciTil info
1650  for( i=0; i< nSciTilHits; i++) {
1651  Double_t erre = posizSciTil->at(i*3+0)*posizSciTil->at(i*3+0)+
1652  posizSciTil->at(i*3+1)*posizSciTil->at(i*3+1);
1653  USciTil[i] = posizSciTil->at(i*3+0)/erre;
1654  VSciTil[i] = posizSciTil->at(i*3+1)/erre;
1655  if (USciTil[i] < xmin) xmin = USciTil[i];
1656  if (USciTil[i] > xmax) xmax = USciTil[i];
1657  if (VSciTil[i] < ymin) ymin = VSciTil[i];
1658  if (VSciTil[i] > ymax) ymax = VSciTil[i];
1659  }
1660 //------
1661 
1662 
1663  for( i=0; i< Nhits; i++) {
1664  if(!In_Put.InclusionListStt[i]) continue;
1665  if( info->at(i*7+5) == 1 ) { // parallel straws
1666 // centro sfera in sistema conforme
1667  gamma = info->at(i*7+0)*info->at(i*7+0) +
1668  info->at(i*7+1)*info->at(i*7+1) - info->at(i*7+3)*info->at(i*7+3);
1669  Ox[i] = info->at(i*7+0) / gamma;
1670  Oy[i] = info->at(i*7+1) / gamma;
1671  Radius[i] = info->at(i*7+3)/gamma;
1672  if (Ox[i]-Radius[i] < xmin) xmin = Ox[i]-Radius[i];
1673  if (Ox[i]+Radius[i] > xmax) xmax = Ox[i]+Radius[i];
1674  if (Oy[i]-Radius[i] < ymin) ymin = Oy[i]-Radius[i];
1675  if (Oy[i]+Radius[i] > ymax) ymax = Oy[i]+Radius[i];
1676  }
1677  }
1678 
1679  if( xmin > 0. ) xmin = 0.;
1680  if( xmax < 0.) xmax = 0.;
1681  if( ymin > 0. ) ymin = 0.;
1682  if( ymax < 0.) ymax = 0.;
1683 
1684  deltax = xmax-xmin;
1685  deltay = ymax - ymin;
1686 
1687  if( deltax > deltay) {
1688  ymin -= 0.5*(deltax-deltay);
1689  ymax = ymin+ deltax;
1690  delta = deltax;
1691  } else {
1692  xmin -= 0.5*(deltay-deltax);
1693  xmax = xmin+ deltay;
1694  delta= deltay;
1695  }
1696 
1697  xmax = xmax + delta*0.15;
1698  xmin = xmin - delta*0.15;
1699 
1700  ymax = ymax + delta*0.15;
1701  ymin = ymin - delta*0.15;
1702 
1703 
1704 
1705  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
1706  xmin,ymin,xmax,ymax);
1707 
1708 // ora la grigliatura con i cerchi
1709 
1710  fprintf(MACRO,
1711  "TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
1713  In_Put.NRDIVCONFORMAL,In_Put.NRDIVCONFORMAL);
1714 
1715  for( i=In_Put.NRDIVCONFORMAL-1; i>=0 ; i--) {
1716  fprintf(MACRO,
1717  "TEllipse* Griglia%d = new TEllipse(0.,0.,%f,%f,0.,360.);\nGriglia%d->SetLineColor(4);\nGriglia%d->Draw();\n",
1718  i,In_Put.radiaConf[i],In_Put.radiaConf[i],i,i);
1719  }
1720 //---------------------
1721 // ora la grigliatura con i segmenti blu per delimitare la zona degli Stt.
1722 
1723  for(i=0; i<In_Put.NFIDIVCONFORMAL; i++) {
1724  ff = i*2.*PI/In_Put.NFIDIVCONFORMAL;
1725  x1=cos(ff)/RSTRAWDETECTORMAX;
1726  y1=sin(ff)/RSTRAWDETECTORMAX;
1729  fprintf(MACRO,
1730 "TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(4);\nSeg%d->Draw();\n",
1731  i,x1,y1,x2,y2,i,i);
1732  }
1733 //---------------------
1734 // ora la grigliatura con i segmenti magenta per comprendere la zona degli SciTil.
1735 
1736  double RMAXSCITIL=50.; //cm
1737  for(i=0; i<In_Put.NFIDIVCONFORMAL; i++) {
1738  ff = i*2.*PI/In_Put.NFIDIVCONFORMAL;
1739  x1=cos(ff)/RMAXSCITIL;
1740  y1=sin(ff)/RMAXSCITIL;
1741  x2=cos(ff)/RSTRAWDETECTORMAX;
1742  y2=sin(ff)/RSTRAWDETECTORMAX;
1743  fprintf(MACRO,"TLine* Seg%d = new TLine(%f,%f,%f,%f);\nSeg%d->SetLineColor(6);\nSeg%d->Draw();\n",
1744  i,x1,y1,x2,y2,i,i);
1745  }
1746 //---------------------
1747 
1748  fprintf(MACRO,"TGaxis *Assex = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",xmin,0.,xmax,0.,xmin,xmax);
1749  fprintf(MACRO,"Assex->SetTitle(\"U \");\n");
1750  fprintf(MACRO,"Assex->SetTitleOffset(1.5);\n");
1751  fprintf(MACRO,"Assex->Draw();\n");
1752  fprintf(MACRO,"TGaxis *Assey = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n", 0.,ymin,0.,ymax,ymin,ymax);
1753  fprintf(MACRO,"Assey->SetTitle(\"V \");\n");
1754  fprintf(MACRO,"Assey->SetTitleOffset(1.5);\n");
1755  fprintf(MACRO,"Assey->Draw();\n");
1756 
1757 
1758 // plot degli Hits Stt.
1759  for( i=0; i< Nhits; i++) {
1760  if(!In_Put.InclusionListStt[i]) continue;
1761  if( info->at(i*7+5) == 1 ) { // parallel straws
1762  fprintf(MACRO,
1763 "TEllipse* E%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nE%d->SetFillStyle(0);\nE%d->Draw();\n",
1764  i,Ox[i],Oy[i],Radius[i],Radius[i],i,i);
1765  }
1766  }
1767 
1768 
1769 
1770 // plot degli Hit SciTil
1771  for( i=0; i< nSciTilHits; i++) {
1772 
1773 
1775  1, // goes in the SetColor function of root;
1776  In_Put.dimensionscitil,
1777  MACRO,
1778  posizSciTil->at(i*3+0),
1779  posizSciTil->at(i*3+1),
1780  i,
1781  2 // 2--> disegno SciTil in conforme.
1782  );
1783  }
1784 
1785 
1786 
1787 
1788 //------------------ plotting all the tracks found
1789 
1790 
1791  for(i=0; i<nTracksFoundSoFar; i++){
1792  if(!keepit->at(i)) continue;
1793 
1794  ALFA[i] = -2.*Oxxx->at(i);
1795  BETA[i] = -2.*Oyyy->at(i);
1796  GAMMA[i]= Oxxx->at(i)*Oxxx->at(i)+Oyyy->at(i)*Oyyy->at(i)
1797  - R->at(i) * R->at(i);
1798  if( fabs(GAMMA[i]) > 1.e-10) {
1799  aaa = -0.5*ALFA[i]/GAMMA[i];
1800  bbb = -0.5*BETA[i]/GAMMA[i];
1801  rrr = sqrt( aaa*aaa+bbb*bbb-1./GAMMA[i]);
1802  if( fabs(rrr/GAMMA[i]) < 30.) {
1803  fprintf(MACRO,
1804 "TEllipse* ris%d=new TEllipse(%f,%f,%f,%f,0.,360.);\nris%d->SetFillStyle(0);\nris%d->SetLineColor(2);\nris%d->Draw();\n",
1805  i,aaa,bbb,rrr,rrr,i,i,i);
1806  } else{
1807 
1808 
1809  yl = -xmin*ALFA[i]/BETA[i] - 1./BETA[i];
1810  yu = -xmax*ALFA[i]/BETA[i] - 1./BETA[i];
1811  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
1812  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
1813  fprintf(MACRO,"ris%d->Draw();\n",i);
1814 
1815 
1816 
1817  }
1818  } else {
1819 
1820  if(fabs(BETA[i]) < 1.e-10){
1821  if(fabs(ALFA[i])<1.e-10) {
1822  continue;
1823  } else {
1824  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n"
1825  ,i,-1./ALFA[i],ymin,- 1./ALFA[i],ymax);
1826  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
1827  fprintf(MACRO,"ris%d->Draw();\n",i);
1828  }
1829  } else {
1830  yl = -xmin*ALFA[i]/BETA[i] - 1./BETA[i];
1831  yu = -xmax*ALFA[i]/BETA[i] - 1./BETA[i];
1832  fprintf(MACRO,"TLine* ris%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
1833  fprintf(MACRO,"ris%d->SetLineColor(2);\n",i);
1834  fprintf(MACRO,"ris%d->Draw();\n",i);
1835  }
1836 
1837  }
1838 
1839  } // end of for(i=0; i<nTracksFoundSoFar; i++)
1840 
1841 // ------------------------------
1842 
1843 
1844 // plotting all the tracks MC generated
1845  if(doMcComparison){
1846  Int_t icode;
1847  Double_t Rr, Oxx, Oyy, Cx, Cy, Px, Py, carica ;// Dd, Fifi, //[R.K. 01/2017] unused variable?
1848  PndMCTrack* pMC;
1849  for(i=0;i<nMCTracks; i++){
1850  pMC = (PndMCTrack*) In_Put.fMCTrackArray->At(i);
1851  if ( ! pMC ) continue;
1852  icode = pMC->GetPdgCode() ; // PDG code of track
1853  Oxx = pMC->GetStartVertex().X(); // X of starting point track
1854  Oyy = pMC->GetStartVertex().Y(); // Y of starting point track
1855  Px = pMC->GetMomentum().X();
1856  Py = pMC->GetMomentum().Y();
1857  aaa = sqrt( Px*Px + Py*Py);
1858  Rr = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
1859  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
1860  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
1861  if (icode>1000000000) carica = 1.;
1862  else carica = fParticle->Charge()/3. ; // charge of track
1863  if (fabs(carica)<0.1 ) continue;
1864  Cx = Oxx + Py*1000./(BFIELD*CVEL*carica);
1865  Cy = Oyy - Px*1000./(BFIELD*CVEL*carica);
1866  gamma = -Rr*Rr + Cx*Cx+Cy*Cy;
1867  if(fabs(gamma)< 0.001) {
1868  if(Cy != 0.) {
1869  yl = xmin*(-Cx/Cy) + 0.5/Cy;
1870  yu = xmax*(-Cx/Cy) + 0.5/Cy;
1871  xl = xmin;
1872  xu = xmax;
1873  } else {
1874  yl = ymin;
1875  yu = ymax;
1876  xu=xl = 0.5/Cx;
1877  }
1878  fprintf(MACRO,"TLine* MCris%d = new TLine(%f,%f,%f,%f);\n",i,xl,yl,xu,yu);
1879  fprintf(MACRO,"MCris%d->SetLineStyle(2);\n",i);
1880  fprintf(MACRO,"MCris%d->SetLineColor(3);\n",i);
1881  fprintf(MACRO,"MCris%d->SetLineWidth(1);\n",i);
1882  fprintf(MACRO,"MCris%d->Draw();\n",i);
1883 
1884  } else {
1885  if(fabs(Rr/gamma) > 1.) {
1886  if(fabs(Cy)>0.001 ) {
1887  yl = -xmin*Cx/Cy+0.5/Cy;
1888  yu = -xmax*Cx/Cy+0.5/Cy;
1889  fprintf(MACRO,"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n",i,xmin,yl,xmax,yu);
1890  fprintf(MACRO,"MCline%d->SetLineColor(3);\n",i);
1891  fprintf(MACRO,"MCline%d->Draw();\n",i);
1892  } else {
1893  fprintf(MACRO,"TLine* MCline%d = new TLine(%f,%f,%f,%f);\n"
1894  ,i,2.*Cx,ymin,2.*Cx,ymax);
1895  fprintf(MACRO,"MCline%d->SetLineColor(2);\n",i);
1896  fprintf(MACRO,"MCline%d->Draw();\n",i);
1897  }
1898  } else {
1899  fprintf(MACRO, "TEllipse* MCcerchio%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nMCcerchio%d->SetLineColor(3);\n",
1900  i,Cx/gamma,Cy/gamma,Rr/fabs(gamma),Rr/fabs(gamma),i);
1901 
1902  fprintf(MACRO,"MCcerchio%d->SetFillStyle(0);\nMCcerchio%d->SetLineStyle(2);\nMCcerchio%d->SetLineWidth(1);\nMCcerchio%d->Draw();\n",
1903  i,i,i,i);
1904  }
1905  }
1906  } // end of for(i=0;i<nMCTracks; i++)
1907 
1908  } // end of if(doMcComparison)
1909 
1910 
1911  fprintf(MACRO,"}\n");
1912  fclose(MACRO);
1913 
1914 
1915 
1916 
1917 
1918 
1919  return ;
1920 
1921 }
const Double_t RSTRAWDETECTORMAX
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t xmax
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
const Double_t CVEL
Double_t xmin
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t APOTEMASTRAWDETECTORMIN
T & at(int index)
Definition: PndTrkVectors.h:54
void PndTrkPlotMacros2::WriteMacroSkewAssociatedHitswithMC ( Double_t ESSE,
Double_t ESSEalone,
PndTrkPlotMacros2_InputData  In_Put,
int  iNome,
int  iTrack 
)

Definition at line 2393 of file PndTrkPlotMacros2.cxx.

References atan2(), PndTrkPlotMacros2_InputData::bfield, BFIELD, PndTrkCTGeometryCalculations::CalculateSandZ2(), PndTrkPlotMacros2_InputData::Charge, CVEL, PndTrkPlotMacros2_InputData::cvel, PndTrkPlotMacros2_InputData::daTrackFoundaTrackMC, PndTrkPlotMacros2_InputData::dimensionscitil, DIMENSIONSCITIL, Double_t, fabs(), PndTrkPlotMacros2_InputData::FI0, PndTrkPlotMacros2_InputData::fMCTrackArray, fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), h, i, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::info, PndTrkPlotMacros2_InputData::IVOLTE, PndTrkPlotMacros2_InputData::KAPPA, PndTrkPlotMacros2_InputData::ListMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::ListMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::ListSciTilHitsinTrack, PndTrkPlotMacros2_InputData::ListSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITSINTRACK, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSCITILHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSTTHITS, PndTrkPlotMacros2_InputData::maxstthitsintrack, MAXSTTHITSINTRACK, PndTrkPlotMacros2_InputData::MCMvdPixelAloneList, PndTrkPlotMacros2_InputData::MCMvdStripAloneList, PndTrkPlotMacros2_InputData::MCSciTilAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneList, PndTrkPlotMacros2_InputData::MvdPixelCommonList, PndTrkPlotMacros2_InputData::MvdStripCommonList, PndTrkPlotMacros2_InputData::nMCMvdPixelAlone, PndTrkPlotMacros2_InputData::nMCMvdStripAlone, PndTrkPlotMacros2_InputData::nMCSciTilAlone, PndTrkPlotMacros2_InputData::nMCSkewAlone, PndTrkPlotMacros2_InputData::nMvdPixelCommon, PndTrkPlotMacros2_InputData::nMvdPixelHit, PndTrkPlotMacros2_InputData::nMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::nMvdStripCommon, PndTrkPlotMacros2_InputData::nMvdStripHit, PndTrkPlotMacros2_InputData::nMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::nSciTilCommon, PndTrkPlotMacros2_InputData::nSciTilHits, PndTrkPlotMacros2_InputData::nSciTilHitsinTrack, PndTrkPlotMacros2_InputData::nSkewCommon, PndTrkPlotMacros2_InputData::nSttHit, PndTrkPlotMacros2_InputData::nSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::Ox, PndTrkPlotMacros2_InputData::Oy, PI, PndTrkPlotMacros2_InputData::posizSciTil, PndTrkPlotMacros2_InputData::R, PndTrkPlotMacros2_InputData::SciTilCommonList, PndTrkPlotMacros2_InputData::SkewCommonList, sqrt(), PndTrkPlotMacros2_InputData::WDX, PndTrkPlotMacros2_InputData::WDY, PndTrkPlotMacros2_InputData::WDZ, PndTrkPlotMacros2_InputData::XMvdPixel, PndTrkPlotMacros2_InputData::XMvdStrip, PndTrkPlotMacros2_InputData::YMvdPixel, PndTrkPlotMacros2_InputData::YMvdStrip, PndTrkPlotMacros2_InputData::ZMvdPixel, and PndTrkPlotMacros2_InputData::ZMvdStrip.

2400  {
2401 
2402 
2403  int MAXMVDPIXELHITSINTRACK = In_Put.MAXMVDPIXELHITSINTRACK;
2404  int MAXSCITILHITSINTRACK = In_Put.MAXSCITILHITSINTRACK;
2405  int MAXMVDSTRIPHITSINTRACK = In_Put.MAXMVDSTRIPHITSINTRACK;
2406  int MAXSTTHITSINTRACK = In_Put.maxstthitsintrack;
2407 
2408  Double_t BFIELD = In_Put.bfield;
2409  Double_t CVEL = In_Put.cvel;
2410  Short_t charge = In_Put.Charge[iTrack] ;
2411  Short_t daTrackFoundaTrackMC = In_Put.daTrackFoundaTrackMC[iTrack] ;
2413  Double_t FI0 = In_Put.FI0[iTrack] ;
2414  TClonesArray *fMCTrackArray = In_Put.fMCTrackArray;
2415 
2416  Double_t *info = In_Put.info ;
2417  int IVOLTE = In_Put.IVOLTE ;
2418  Double_t KAPPA = In_Put.KAPPA[iTrack] ;
2419 
2420  Short_t *ListPixelHitsinTrack = In_Put.ListMvdPixelHitsinTrack ;
2421  Short_t *ListSciTilHitsinTrack = In_Put.ListSciTilHitsinTrack;
2422  Short_t *ListSkewHitsinTrack = In_Put.ListSttSkewHitsinTrack ;
2423  Short_t *ListStripHitsinTrack = In_Put.ListMvdStripHitsinTrack ; // output
2424  Short_t *MCMvdPixelAloneList = In_Put.MCMvdPixelAloneList ;
2425  Short_t *MCMvdStripAloneList = In_Put.MCMvdStripAloneList ;
2426  Short_t *MCSkewAloneList = In_Put.MCSkewAloneList ;
2427  Short_t *MvdPixelCommonList = In_Put.MvdPixelCommonList;
2428  //Short_t *MvdPixelSpuriList = In_Put.MvdPixelSpuriList; //[R.K. 01/2017] unused variable?
2429  Short_t *MvdStripCommonList = In_Put.MvdStripCommonList;
2430 
2431  Short_t nMCMvdPixelAlone = In_Put.nMCMvdPixelAlone[iTrack] ;
2432  Short_t nMCMvdStripAlone = In_Put.nMCMvdStripAlone[iTrack] ;
2433  Short_t nMCSkewAlone = In_Put.nMCSkewAlone[iTrack] ;
2434  Short_t nMvdPixelCommon = In_Put.nMvdPixelCommon[iTrack] ;
2435  //Short_t nMvdPixelSpuriinTrack = In_Put.nMvdPixelSpuriinTrack[iTrack] ; //[R.K. 01/2017] unused variable?
2436  Short_t nMvdStripCommon = In_Put.nMvdStripCommon[iTrack] ;
2437  //Short_t nMvdStripSpuriinTrack = In_Put.nMvdStripSpuriinTrack[iTrack] ; //[R.K. 01/2017] unused variable?
2438 
2439  Short_t *nPixelHitsinTrack = In_Put.nMvdPixelHitsinTrack ;
2440  Short_t *nSciTilHitsinTrack = In_Put.nSciTilHitsinTrack;
2441  Short_t nSkewCommon = In_Put.nSkewCommon[iTrack] ;
2442  Short_t *nSkewHitsinTrack = In_Put.nSttSkewHitsinTrack ;
2443  Short_t *nStripHitsinTrack = In_Put.nMvdStripHitsinTrack ; // output
2444  Double_t Oxx = In_Put.Ox[iTrack] ;
2445  Double_t Oyy = In_Put.Oy[iTrack] ;
2446 
2447  Double_t *posizSciTil = In_Put.posizSciTil;
2448 
2449  Double_t Rr = In_Put.R[iTrack] ;
2450  Short_t *SkewCommonList = In_Put.SkewCommonList ;
2451  Double_t *XMvdPixel = In_Put.XMvdPixel;
2452  Double_t *XMvdStrip = In_Put.XMvdStrip;
2453  Double_t *YMvdPixel = In_Put.YMvdPixel;
2454  Double_t *YMvdStrip = In_Put.YMvdStrip;
2455  Double_t *WDX = In_Put.WDX ;
2456  Double_t *WDY = In_Put.WDY ;
2457  Double_t *WDZ = In_Put.WDZ ;
2458  Double_t *ZMvdPixel = In_Put.ZMvdPixel;
2459  Double_t *ZMvdStrip = In_Put.ZMvdStrip;
2460 
2461 //-----------------------------------------
2462 
2463  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
2464 
2465 
2466  int icolore;
2467 
2468  Int_t i, j, i1, ii, iii, imc, Nmin, Nmax;// index, Kincl, nlow, nup, STATUS, //[R.K. 01/2017] unused variable?
2469 
2470  Double_t //xmin , xmax, ymin, ymax, //[R.K. 01/2017] unused variable?
2471  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
2472  deltaz, deltaS,//delta, deltax, deltay, //[R.K. 01/2017] unused variable?
2473  esse,//factor, //[R.K. 01/2017] unused variable?
2474  zmin, zmax, zmin2, zmax2, Smin, Smax, //S1, S2, //[R.K. 01/2017] unused variable?
2475  z1, z2, //y1, y2, //[R.K. 01/2017] unused variable?
2476  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
2477  aaa, dis, //bbb, ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
2478  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
2479  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
2480  fmin, fmax; //step, offset, //[R.K. 01/2017] unused variable?
2481  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
2482  //dist[2], //[R.K. 01/2017] unused variable?
2483  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
2484  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
2485  //POINTS1[6]; //[R.K. 01/2017] unused variable?
2486 
2487  const Double_t PI=3.141592654;
2488 
2489  PndTrkCTGeometryCalculations GeoCalculator;
2490 
2491 
2492 
2493 //------------------- skew straws hits Macro now
2494 
2495  char nome2[300],nome[300];
2496  FILE *MACRO;
2497  sprintf(nome, "MacroSttMvdSZwithMCEvent%dT%d", IVOLTE,iNome);
2498  sprintf(nome2, "%s.C",nome);
2499  MACRO = fopen(nome2,"w");
2500  fprintf(MACRO,"{\n");
2501 
2502 
2503 //--------------- ricerca del minimo e massimo.
2504 
2505  if( nSciTilHitsinTrack[iTrack]+nSkewHitsinTrack[iTrack]+
2506  nPixelHitsinTrack[iTrack]+
2507  nStripHitsinTrack[iTrack] == 1) // solo 1 punto da disegnare, in questo caso aggiunge
2508  { // un punto finto in (0, FI0 ).
2509  Smax=Smin= FI0;
2510  zmax =zmin =0.;
2511  } else {
2512  Smin=zmin = 1.e10;
2513  Smax=zmax = -zmin;
2514  }
2515 
2516 
2517 
2518 // prima lo (gli) hits SciTil associati alla traccia;
2519 
2520  for(i=0; i<nSciTilHitsinTrack[iTrack];i++){
2521  j=ListSciTilHitsinTrack[iTrack*MAXSCITILHITSINTRACK+i];
2522  if( ESSE[i]>Smax ) Smax=ESSE[i];
2523  if( ESSE[i]<Smin ) Smin=ESSE[i];
2524  if( posizSciTil[j*3+2]>zmax ) zmax=posizSciTil[j*3+2];
2525  if( posizSciTil[j*3+2]<zmin ) zmin=posizSciTil[j*3+2];
2526  }
2527 
2528 // poi lo (gli) hits SciTil 'Alone' della traccia;
2529 
2530  for(i=0; i<In_Put.nMCSciTilAlone[iTrack];i++){
2531  j=In_Put.MCSciTilAloneList[iTrack*In_Put.nSciTilHits+i];
2532  if( ESSEalone[i]>Smax ) Smax=ESSEalone[i];
2533  if( ESSEalone[i]<Smin ) Smin=ESSEalone[i];
2534  if( posizSciTil[j*3+2]>zmax ) zmax=posizSciTil[j*3+2];
2535  if( posizSciTil[j*3+2]<zmin ) zmin=posizSciTil[j*3+2];
2536  }
2537 
2538 //-------------------------
2539 
2540 // Skew hits;
2541 
2542  Double_t
2543  auxS[2], // output;
2544  auxSDrift[2], // output; drift radius projected onto the Helix along the S direction.
2545  auxZ[2], // output, Zcoordinate of the central wire.
2546  auxZDrift[2], // output, drift radius projected onto the Helix along the Z direction.
2547  auxZErrorafterTilt[2]; // output, 150 micron projected onto the Helix.
2548  //res = 0.015; //[R.K. 01/2017] unused variable?
2549  Double_t auxInfo[ In_Put.MAXSTTHITS ][7];
2550  for(i=0;i<In_Put.MAXSTTHITS;i++){
2551  for(j=0;j<7;j++){
2552  auxInfo[i][j] = info[i*7+j];
2553  }
2554  }
2555 
2556 // skew hits in track;
2557  for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++) {
2558  i = ListSkewHitsinTrack[iTrack*MAXSTTHITSINTRACK+iii];
2559  if(!In_Put.InclusionListStt[i]) continue;
2560  GeoCalculator.CalculateSandZ2(
2561  Oxx, // input;
2562  Oyy, // input;
2563  Rr, // input;
2564  i, // input, skew straw original hit number;
2565  auxInfo, // input;
2566  WDX, // input;
2567  WDY, // input;
2568  WDZ, // input;
2569  auxS, // output;
2570  auxSDrift, // output; drift radius projected onto the Helix S direction;
2571  auxZ, // output, Zcoordinate of the central wire.
2572  auxZDrift, // output, drift radius projected onto the Helix Z direction;
2573  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
2574  );
2575 
2576  for( ii=0; ii<2; ii++){
2577  if( auxZ[ii] < 999998.){
2578  if(zmin>auxZ[ii]-auxZDrift[ii]) zmin=auxZ[ii]-auxZDrift[ii];
2579  if(zmax<auxZ[ii]+auxZDrift[ii]) zmax=auxZ[ii]+auxZDrift[ii];
2580 
2581  if(Smin>auxS[ii]-auxSDrift[ii]) Smin=auxS[ii]-auxSDrift[ii];
2582  if(Smax<auxS[ii]+auxSDrift[ii]) Smax=auxS[ii]+auxSDrift[ii];
2583  } // end of if( auxZ[ii] < 999998.)
2584 
2585  } // end of for( ii=0; ii<2; ii++)
2586 
2587  } // end of for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++)
2588 
2589 //------ aggiungo in blu eventuali punti della traccia MC che sono non mecciati
2590 
2591  for( iii=0; iii< nMCSkewAlone; iii++) {
2592 
2593  GeoCalculator.CalculateSandZ2(
2594  Oxx, // input;
2595  Oyy, // input;
2596  Rr, // input;
2597  MCSkewAloneList[iTrack*In_Put.nSttHit+iii], // input, skew straw original hit number;
2598  auxInfo, // input;
2599  WDX, // input;
2600  WDY, // input;
2601  WDZ, // input;
2602  auxS, // output;
2603  auxSDrift, // output; drift radius projected onto the Helix S direction;
2604  auxZ, // output, Zcoordinate of the central wire.
2605  auxZDrift, // output, drift radius projected onto the Helix Z direction;
2606  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
2607  );
2608 
2609 
2610  // faccio un trattamento speciale poiche' questi sono hit MC truth e quindi UNO dei due deve
2611  // essere vero ma puo' darsi che sia a distanza non fisica perche' i parametri dell'elica
2612  // (raggio, centro) sono un po' sbagliati (vengono dal Pattern Recognition!!)
2613 
2614  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
2615  if(auxZ[0] <999998. ) { ii = 0; dis =auxZ[0]; }
2616  else if (auxZ[1] <999998. ) { ii = 1;dis =auxZ[1];}
2617  else if (auxZ[0] > 999999.5 && auxZ[1]>999999.5) // questo e' il caso in cui gli auxZ[] NON sono 999999. (che significherebbe
2618  // che e' successo che bbb< 1.e-10 oppure sinTheta < 1.e-10 cioe' QUALCHE CASINO
2619  // DI CALCOLO nella CalculateSandZ2) MA BENSI' SONO > 1000000. che e' il caso in cui
2620  // le distanze sono unphysical. Tali distanze si ottengono : dis = auxZ[] - 1000000.
2621  {
2622  // since these are MC hits, it would be WRONG to check if they are within the length of the wire;
2623  // in fact that length could be calculated wrongly due to the non perfect radius and center
2624  // of the Trajectory Helix found by the Pattern Recognition!
2625  // So, ONE of the two solutions is right no matter what; choose the one closer;
2626 
2627  if(auxZ[0]<auxZ[1]) { ii=0 ; dis=auxZ[0]-1000000.;} else { ii=1; dis = auxZ[1]-1000000.;}
2628 
2629  } else if (auxZ[0] > 999999.5) { // caso in cui la soluzione 0 e' unphysical mentre la 1 ha avuto casini di calcolo;
2630  ii =0;
2631  dis=auxZ[0]-1000000.;
2632  } else if (auxZ[1] > 999999.5) { // caso in cui la soluzione 1 e' unphysical mentre la 0 ha avuto casini di calcolo;
2633  ii =0;
2634  dis=auxZ[0]-1000000.;
2635  } else { // caso in cui entrambe le soluzioni hanno avuto un casino di calcolo;
2636  continue;
2637  }
2638 
2639  if(zmin>dis-auxZDrift[ii]) zmin=dis-auxZDrift[ii];
2640  if(zmax<dis+auxZDrift[ii]) zmax=dis+auxZDrift[ii];
2641 
2642 
2643 
2644 
2645  } // end of for( iii=0; iii< nMCSkewAlone[imaxima]; iii++)
2646 
2647 //-------------------------------
2648 //------ fine aggiunta in blu eventuali punti della traccia MC che sono non mecciati
2649 
2650 // ora la parte delle Mvd
2651 
2652 // prima i pixel
2653 
2654  for(i=0; i<nPixelHitsinTrack[iTrack];i++){
2655  ii=ListPixelHitsinTrack[iTrack*MAXMVDPIXELHITSINTRACK+i];
2656 
2657  if( zmin > ZMvdPixel[ ii ] )
2658  zmin = ZMvdPixel[ ii ];
2659  if( zmax < ZMvdPixel[ii ] )
2660  zmax = ZMvdPixel[ii ];
2661 
2662  esse = atan2( YMvdPixel[ ii ]-Oyy,
2663  XMvdPixel[ ii ]-Oxx);
2664  if(esse<0.) esse +=2.*PI;
2665 
2666 
2667 
2668  if( Smin > esse ) Smin = esse;
2669  if( Smax < esse ) Smax = esse;
2670  }
2671 
2672 // poi le strip
2673 
2674  for(i=0; i<nStripHitsinTrack[iTrack];i++){
2675  ii=ListStripHitsinTrack[iTrack*MAXMVDSTRIPHITSINTRACK+i];
2676  if( zmin > ZMvdStrip[ ii ] )
2677  zmin = ZMvdStrip[ ii ];
2678  if( zmax < ZMvdStrip[ii ] )
2679  zmax = ZMvdStrip[ii ];
2680 
2681  esse = atan2( YMvdStrip[ ii ]-Oyy,
2682  XMvdStrip[ ii ]-Oxx);
2683  if(esse<0.) esse +=2.*PI;
2684 
2685 
2686 
2687  if( Smin > esse ) Smin = esse;
2688  if( Smax < esse ) Smax = esse;
2689  }
2690 
2691 
2692 // ora i pixel 'Alone'
2693  for(i=0; i<nMCMvdPixelAlone;i++){
2694 
2695  ii=MCMvdPixelAloneList[iTrack*In_Put.nMvdPixelHit+i];
2696  if( zmin > ZMvdPixel[ ii ] )
2697  zmin = ZMvdPixel[ ii ];
2698  if( zmax < ZMvdPixel[ii ] )
2699  zmax = ZMvdPixel[ii ];
2700 
2701  esse = atan2( YMvdPixel[ ii ]-Oyy,
2702  XMvdPixel[ ii ]-Oxx);
2703  if(esse<0.) esse +=2.*PI;
2704  if( Smin > esse ) Smin = esse;
2705  if( Smax < esse ) Smax = esse;
2706  }
2707 
2708 
2709 // ora le strip 'Alone'
2710 
2711  for(i=0; i<nMCMvdStripAlone;i++){
2712  ii=MCMvdStripAloneList[iTrack*In_Put.nMvdStripHit+i];
2713  if( zmin > ZMvdStrip[ ii ] )
2714  zmin = ZMvdStrip[ ii ];
2715  if( zmax < ZMvdStrip[ii ] )
2716  zmax = ZMvdStrip[ii ];
2717 
2718  esse = atan2( YMvdStrip[ ii ]-Oyy,
2719  XMvdStrip[ ii ]-Oxx);
2720  if(esse<0.) esse +=2.*PI;
2721  if( Smin > esse ) Smin = esse;
2722  if( Smax < esse ) Smax = esse;
2723  }
2724 
2725 
2726  if( zmax >= zmin && Smax >= Smin ) {
2727 
2728 
2729 
2730  aaa = Smax-Smin;
2731  Smin -= aaa*0.2;
2732  Smax += aaa*0.2;
2733 
2734  aaa = zmax-zmin;
2735  zmin -= aaa*0.05;
2736  zmax += aaa*0.05;
2737 
2738  if(Smax > 2.*PI) Smax = 2.*PI;
2739  if( Smin < 0.) Smin = 0.;
2740 
2741 
2742  deltaz = zmax-zmin;
2743  deltaS = Smax-Smin;
2744 
2745 
2746  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
2747  zmin-0.1*deltaz,Rr*(Smin-.1*deltaS),zmax+0.1*deltaz,Rr*(Smax+0.1*deltaS));
2748  fprintf(MACRO,"TGaxis *Assex = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
2749  zmin-0.01*deltaz,Rr*(Smin+0.05*deltaS),zmax+0.01*deltaz,Rr*(Smin+0.05*deltaS),
2750  zmin-0.01*deltaz,zmax+0.01*deltaz);
2751  fprintf(MACRO,"Assex->SetTitle(\"Z (cm)\");\n");
2752  fprintf(MACRO,"Assex->Draw();\n");
2753  fprintf(MACRO,"TGaxis *Assey = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
2754  zmin+0.05*deltaz,Rr*(Smin-0.01*deltaS),zmin+0.05*deltaz,Rr*(Smax+0.01*deltaS),
2755  Rr*(Smin-0.01*deltaS),Rr*(Smax+0.01*deltaS));
2756  fprintf(MACRO,"Assey->SetTitle(\"Helix crf (cm)\");\n");
2757  fprintf(MACRO,"Assey->Draw();\n");
2758 
2759 
2760 //------------
2761 // plot di eventuali hits SciTil;
2762  // prima la lista di SciTil 'common' e spuri :
2763  for(i=0;i<nSciTilHitsinTrack[iTrack];i++){
2764  j=ListSciTilHitsinTrack[iTrack*MAXSCITILHITSINTRACK+i];
2765  // controlla se sono hit 'common' o spuri;
2766  icolore=2; // colore rosso, assegnato agli spuri;
2767  for(int h=0;h<In_Put.nSciTilCommon[iTrack];h++){
2768  if(j == In_Put.SciTilCommonList[iTrack*MAXSCITILHITSINTRACK+h]){
2769  icolore=1; // colore nero, usato per gli hits 'common';
2770  break;
2771  }
2772  }
2773 
2775  icolore, // color code; the same as in SetColor of root;
2776  DIMENSIONSCITIL,
2777  MACRO,
2778  posizSciTil[j*3+2],
2779  ESSE[i]*Rr,
2780  j,
2781  1 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
2782  // SciTil draw in UV.
2783  );
2784  }
2785  // poi la lista di SciTil 'alone' :
2786  for(i=0;i<In_Put.nMCSciTilAlone[iTrack];i++){
2787  j=In_Put.MCSciTilAloneList[iTrack*In_Put.nSciTilHits+i];
2789  4, // color code; the same as in SetColor of root;
2790  DIMENSIONSCITIL,
2791  MACRO,
2792  posizSciTil[j*3+2],
2793  ESSEalone[i]*Rr,
2794  j,
2795  1 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
2796  // SciTil draw in UV.
2797  );
2798  }
2799 
2800 // --------------------------------
2801  // plot degli Skew hits;
2802 
2803  for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++) {
2804  i = ListSkewHitsinTrack[iTrack*MAXSTTHITSINTRACK+iii] ;
2805  if(!In_Put.InclusionListStt[i]) continue;
2806 
2807 
2808  GeoCalculator.CalculateSandZ2(
2809  Oxx, // input;
2810  Oyy, // input;
2811  Rr, // input;
2812  i, // input, skew straw original hit number;
2813  auxInfo, // input;
2814  WDX, // input;
2815  WDY, // input;
2816  WDZ, // input;
2817  auxS, // output;
2818  auxSDrift, // output; drift radius projected onto the Helix S direction;
2819  auxZ, // output, Zcoordinate of the central wire.
2820  auxZDrift, // output, drift radius projected onto the Helix Z direction;
2821  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
2822  );
2823 
2824  for( ii=0; ii<2; ii++){
2825  if( auxZ[ii] > 999998.) continue; // this solution was not physical;
2826 
2827  // ------ se lo hit e' spurio marcalo in rosso
2828  bool flaggo=true;
2829  for( i1=0; i1<nSkewCommon; i1++){
2830  if ( SkewCommonList[iTrack*MAXSTTHITSINTRACK +i1] == i ){
2831  flaggo=false;
2832  break;
2833  }
2834  }
2835  if(flaggo){
2836  fprintf(MACRO,
2837  "TEllipse* spurioSkew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nspurioSkew%d_%d->SetFillStyle(0);\n",
2838  i,ii,auxZ[ii],Rr*auxS[ii],auxZDrift[ii],Rr*auxSDrift[ii],0.,i,ii);
2839  fprintf(MACRO,"spurioSkew%d_%d->SetLineColor(2);\n",i,ii);
2840  fprintf(MACRO,"spurioSkew%d_%d->Draw();\n",i,ii);
2841  }else {
2842  fprintf(MACRO,"TEllipse* Skew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nSkew%d_%d->SetFillStyle(0);\n",
2843  i,ii,auxZ[ii],Rr*auxS[ii],auxZDrift[ii],Rr*auxSDrift[ii],0.,i,ii);
2844  fprintf(MACRO,"Skew%d_%d->Draw();\n",i,ii);
2845  }
2846 
2847 
2848  } // end of for( ii=0; ii<2; ii++)
2849 
2850  } // end of for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++)
2851 
2852 
2853 
2854 //------ aggiungo in blu eventuali punti della traccia MC che sono non mecciati
2855 
2856  for( iii=0; iii< nMCSkewAlone; iii++) {
2857  i = MCSkewAloneList[iTrack*In_Put.nSttHit+iii];
2858  if(!In_Put.InclusionListStt[i]) continue;
2859 
2860  GeoCalculator.CalculateSandZ2(
2861  Oxx, // input;
2862  Oyy, // input;
2863  Rr, // input;
2864  i, // input, skew straw original hit number;
2865  auxInfo, // input;
2866  WDX, // input;
2867  WDY, // input;
2868  WDZ, // input;
2869  auxS, // output;
2870  auxSDrift, // output; drift radius projected onto the Helix S direction;
2871  auxZ, // output, Zcoordinate of the central wire.
2872  auxZDrift, // output, drift radius projected onto the Helix Z direction;
2873  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
2874  );
2875 
2876 
2877 
2878 
2879  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
2880 
2881 
2882  // ripeto il trattamento speciale poiche' questi sono hit MC truth e quindi UNO dei due deve
2883  // essere vero ma puo' darsi che sia a distanza non fisica perche' i parametri dell'elica
2884  // (raggio, centro) sono un po' sbagliati (vengono dal Pattern Recognition!!)
2885 
2886  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
2887  if(auxZ[0] <999998. ) { ii = 0; dis =auxZ[0]; }
2888  else if (auxZ[1] <999998. ) { ii = 1;dis =auxZ[1];}
2889  else if (auxZ[0] > 999999.5 && auxZ[1]>999999.5) // questo e' il caso in cui gli auxZ[] NON sono 999999. (che significherebbe
2890  // che e' successo che bbb< 1.e-10 oppure sinTheta < 1.e-10 cioe' QUALCHE CASINO
2891  // DI CALCOLO nella CalculateSandZ2) MA BENSI' SONO > 1000000. che e' il caso in cui
2892  // le distanze sono unphysical. Tali distanze si ottengono : dis = auxZ[] - 1000000.
2893  {
2894  // since these are MC hits, it would be WRONG to check if they are within the length of the wire;
2895  // in fact that length could be calculated wrongly due to the non perfect radius and center
2896  // of the Trajectory Helix found by the Pattern Recognition!
2897  // So, ONE of the two solutions is right no matter what; choose the one closer;
2898 
2899  if(auxZ[0]<auxZ[1]) { ii=0 ; dis=auxZ[0]-1000000.;} else { ii=1; dis = auxZ[1]-1000000.;}
2900 
2901  } else if (auxZ[0] > 999999.5) { // caso in cui la soluzione 0 e' unphysical mentre la 1 ha avuto casini di calcolo;
2902  ii =0;
2903  dis=auxZ[0]-1000000.;
2904  } else if (auxZ[1] > 999999.5) { // caso in cui la soluzione 1 e' unphysical mentre la 0 ha avuto casini di calcolo;
2905  ii =0;
2906  dis=auxZ[0]-1000000.;
2907  } else { // caso in cui entrambe le soluzioni hanno avuto un casino di calcolo;
2908  continue;
2909  }
2910 
2911 
2912 
2913  fprintf(MACRO,"TEllipse* AloneSkew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nAloneSkew%d_%d->SetFillStyle(0);\n",
2914  i,ii,dis,Rr*auxS[ii],auxZDrift[ii],Rr*auxSDrift[ii],0.,i,ii);
2915 // i,ii,auxZ[ii],Rr*auxS[ii],auxZDrift[ii],Rr*auxSDrift[ii],0.,i,ii);
2916 
2917 // ------ marca lo hit in blu
2918  fprintf(MACRO,"AloneSkew%d_%d->SetLineColor(4);\n",i,ii);
2919  fprintf(MACRO,"AloneSkew%d_%d->Draw();\n",i,ii);
2920 
2921 
2922 
2923  } // end of for( iii=0; iii< nMCSkewAlone; iii++)
2924 
2925 //-------------------------------
2926 //------ fine aggiunta in blu eventuali punti della traccia MC che sono non mecciati
2927 
2928 // ora la parte delle Mvd
2929 
2930 // prima i pixel
2931 
2932  for(i=0; i<nPixelHitsinTrack[iTrack];i++){
2933  ii=ListPixelHitsinTrack[iTrack*MAXMVDPIXELHITSINTRACK+i];
2934  if( zmin > ZMvdPixel[ ii ] )
2935  zmin = ZMvdPixel[ ii ];
2936  if( zmax < ZMvdPixel[ii ] )
2937  zmax = ZMvdPixel[ii ];
2938 
2939  esse = atan2( YMvdPixel[ ii ]-Oyy,
2940  XMvdPixel[ ii ]-Oxx);
2941  if(esse<0.) esse +=2.*PI;
2942 
2943 
2944 
2945  if( Smin > esse ) Smin = esse;
2946  if( Smax < esse ) Smax = esse;
2947 
2948 
2949  bool flaggo=true;
2950  for( int k=0; k<nMvdPixelCommon;k++){
2951  if( MvdPixelCommonList[iTrack*MAXMVDPIXELHITSINTRACK+k]== ii){
2952  fprintf(MACRO,
2953  "TMarker* CommonPixel%d = new TMarker(%f,%f,%d);\nCommonPixel%d->SetMarkerColor(1);\n",
2954  ii,ZMvdPixel[ii],Rr*esse,26,ii);
2955  fprintf(MACRO,"CommonPixel%d->Draw();\n",ii);
2956  flaggo=false;
2957  break;
2958  }
2959  }
2960  if(flaggo){
2961  fprintf(MACRO,"TMarker* SpuriousPixel%d = new TMarker(%f,%f,%d);\nSpuriousPixel%d->SetMarkerColor(2);\n",
2962  ii,ZMvdPixel[ii],Rr*esse,26,ii);
2963  fprintf(MACRO,"SpuriousPixel%d->Draw();\n",ii);
2964  }
2965  }
2966 // poi le strip
2967 
2968  for(i=0; i<nStripHitsinTrack[iTrack];i++){
2969  ii=ListStripHitsinTrack[iTrack*MAXMVDSTRIPHITSINTRACK+i];
2970  if( zmin > ZMvdStrip[ ii ] )
2971  zmin = ZMvdStrip[ ii ];
2972  if( zmax < ZMvdStrip[ii ] )
2973  zmax = ZMvdStrip[ii ];
2974 
2975  esse = atan2( YMvdStrip[ ii ]-Oyy,
2976  XMvdStrip[ ii ]-Oxx);
2977  if(esse<0.) esse +=2.*PI;
2978 
2979 
2980 
2981  if( Smin > esse ) Smin = esse;
2982  if( Smax < esse ) Smax = esse;
2983 
2984  bool flaggo=true;
2985  for( int k=0; k<nMvdStripCommon;k++){
2986  if( MvdStripCommonList[iTrack*MAXMVDSTRIPHITSINTRACK+k]== ii){
2987  fprintf(MACRO,"TMarker* CommonStrip%d = new TMarker(%f,%f,%d);\nCommonStrip%d->SetMarkerColor(1);\n",
2988  ii,ZMvdStrip[ii],Rr*esse,25,ii);
2989  fprintf(MACRO,"CommonStrip%d->Draw();\n",ii);
2990  flaggo=false;
2991  break;
2992  }
2993  }
2994  if(flaggo){
2995  fprintf(MACRO,"TMarker* SpuriousStrip%d = new TMarker(%f,%f,%d);\nSpuriousStrip%d->SetMarkerColor(2);\n",
2996  ii,ZMvdStrip[ii],Rr*esse,25,ii);
2997  fprintf(MACRO,"SpuriousStrip%d->Draw();\n",ii);
2998  }
2999 
3000 
3001  }
3002 
3003 
3004 // ora i pixel 'Alone'
3005  for(i=0; i<nMCMvdPixelAlone;i++){
3006 
3007  ii=MCMvdPixelAloneList[iTrack*In_Put.nMvdPixelHit+i];
3008  if( zmin > ZMvdPixel[ ii ] )
3009  zmin = ZMvdPixel[ ii ];
3010  if( zmax < ZMvdPixel[ii ] )
3011  zmax = ZMvdPixel[ii ];
3012 
3013  esse = atan2( YMvdPixel[ ii ]-Oyy,
3014  XMvdPixel[ ii ]-Oxx);
3015  if(esse<0.) esse +=2.*PI;
3016  if( Smin > esse ) Smin = esse;
3017  if( Smax < esse ) Smax = esse;
3018  fprintf(MACRO,"TMarker* AlonePixel%d = new TMarker(%f,%f,%d);\nAlonePixel%d->SetMarkerColor(4);\n",
3019  ii,ZMvdPixel[ii],Rr*esse,26,ii);
3020  fprintf(MACRO,"AlonePixel%d->Draw();\n",ii);
3021  }
3022 
3023 
3024 // ora le strip 'Alone'
3025 
3026  for(i=0; i<nMCMvdStripAlone;i++){
3027  ii=MCMvdStripAloneList[iTrack*In_Put.nMvdStripHit+i];
3028  if( zmin > ZMvdStrip[ ii ] )
3029  zmin = ZMvdStrip[ ii ];
3030  if( zmax < ZMvdStrip[ii ] )
3031  zmax = ZMvdStrip[ii ];
3032 
3033  esse = atan2( YMvdStrip[ ii ]-Oyy,
3034  XMvdStrip[ ii ]-Oxx);
3035  if(esse<0.) esse +=2.*PI;
3036  if( Smin > esse ) Smin = esse;
3037  if( Smax < esse ) Smax = esse;
3038 
3039  fprintf(MACRO,"TMarker* AloneStrip%d = new TMarker(%f,%f,%d);\nAloneStrip%d->SetMarkerColor(4);\n",
3040  ii,ZMvdStrip[ii],Rr*esse,25,ii);
3041  fprintf(MACRO,"AloneStrip%d->Draw();\n",ii);
3042 
3043  }
3044 
3045 
3046 
3047 
3048 // plot della traccia trovata dal finder
3049 
3050 
3051  zmin2=zmin;
3052  zmax2=zmax;
3053 
3054  bool flaggo=true;
3055  if( -KAPPA*charge>0.) { // Pz>0.
3056  if( zmax <0.) {
3057  cout<<"da WriteMacroSkewAssociatedHitswithMC, questa traccia"
3058  <<" e' inconsistente col proprio Pz, non plottata!\n";
3059  flaggo=false;
3060  } else {
3061  zmin = 0.;
3062  }
3063  } else { // Pz<0.
3064  if( zmin >0.) {
3065  cout<<"da WriteMacroSkewAssociatedHitswithMC, questa traccia"
3066  <<" e' inconsistente col proprio Pz, non plottata!\n";
3067  flaggo=false;
3068  } else{
3069  zmax = 0.;
3070  }
3071 
3072  }
3073 
3074  if(flaggo){
3075 
3076  if ( KAPPA >= 0.) {
3077  fmin = KAPPA*zmin + FI0;
3078  fmax = KAPPA*zmax + FI0;
3079  } else {
3080  fmax = KAPPA*zmin + FI0;
3081  fmin = KAPPA*zmax + FI0;
3082  }
3083  if( fmax>=0.) {
3084  Nmax = (int) (0.5*fmax/ PI);
3085  } else {
3086  Nmax = ( (int) (0.5*fmax/ PI) ) -1;
3087  }
3088  if( fmin>=0.) {
3089  Nmin = (int) (0.5*fmin/ PI);
3090  } else {
3091  Nmin = ((int) (0.5*fmin/ PI) )-1;
3092  }
3093  if(fabs(KAPPA)<1.e-10) {
3094  cout<<"da WriteMacroSkewAssociatedHitswithMC, questa traccia Found da PR non plottata"
3095  <<" perche' ha fabs(KAPPA)<1.e-10.\n";
3096  } else {
3097  for(i=Nmin; i<= Nmax;i++){
3098  //offset = 2.*PI*i; //[R.K. 9/2018] unused
3099  z1 = (i*2.*PI-FI0)/KAPPA;
3100  z2 = ((i+1)*2.*PI-FI0)/KAPPA;
3101  fprintf(MACRO,
3102 "TLine* FOUND%d = new TLine(%f,%f,%f,%f);\nFOUND%d->SetLineColor(2);\nFOUND%d->Draw();\n",
3103  i-Nmin,z1,0.,z2, Rr*2.*PI,i-Nmin,i-Nmin);
3104 
3105  } // end of for(i=Nmin; i<= Nmax;++)
3106  } // end of if(fabs(KAPPA)<1.e-10)
3107 
3108  } // end of if(flaggo)
3109 
3110 
3111  zmin=zmin2;
3112  zmax=zmax2;
3113 
3114 
3115 //----------------- ora la traccia MC corrispondente a questa traccia Stt
3116 
3117 // for(imc=0; imc<nMCTracks ; imc++){
3118 // if(imc != daTrackFoundaTrackMC[ iTrack ]) continue;
3119  imc= daTrackFoundaTrackMC ;
3120 
3121  if( imc>-1 ) {
3122  Int_t icode ;
3123  Double_t Fifi, Kakka, o_x, o_y, Cx, Cy, Px, Py, carica ;// r_r,Dd, //[R.K. 01/2017] unused variable?
3124  PndMCTrack* pMC;
3125  pMC = (PndMCTrack*) fMCTrackArray->At(imc);
3126  if ( pMC ) {
3127  icode = pMC->GetPdgCode() ; // PDG code of track
3128  o_x = pMC->GetStartVertex().X(); // X of starting point track
3129  o_y = pMC->GetStartVertex().Y(); // Y of starting point track
3130  Px = pMC->GetMomentum().X();
3131  Py = pMC->GetMomentum().Y();
3132  aaa = sqrt( Px*Px + Py*Py);
3133  //r_r = aaa*1000./(BFIELD*CVEL); //[R.K. 9/2018] unused // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
3134  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
3135  if (icode>1000000000) carica = 1.;
3136  else carica = fParticle->Charge()/3. ; // charge of track
3137  if (fabs(carica)>=0.1 ){
3138  Cx = o_x + Py*1000./(BFIELD*CVEL*carica);
3139  Cy = o_y - Px*1000./(BFIELD*CVEL*carica);
3140  Fifi = atan2(Cy, Cx); // MC truth Fifi angle of circle of Helix trajectory
3141  if(Fifi<0.) Fifi += 2.*PI;
3142  if( fabs( pMC->GetMomentum().Z() )< 1.e-20) Kakka = 99999999.;
3143  else Kakka = -carica*0.001*BFIELD*CVEL/pMC->GetMomentum().Z();
3144  KAPPA=Kakka;
3145  FI0 = fmod(Fifi+ PI, 2.*PI);
3146  if ( KAPPA >= 0.) {
3147  fmin = KAPPA*zmin + FI0;
3148  fmax = KAPPA*zmax + FI0;
3149  } else {
3150  fmax = KAPPA*zmin + FI0;
3151  fmin = KAPPA*zmax + FI0;
3152  }
3153  if( fmax>=0.) {
3154  Nmax = (int) (0.5*fmax/ PI);
3155  } else {
3156  Nmax = ( (int) (0.5*fmax/ PI) ) -1;
3157  }
3158  if( fmin>=0.) {
3159  Nmin = (int) (0.5*fmin/ PI);
3160  } else {
3161  Nmin = ((int) (0.5*fmin/ PI) )-1;
3162  }
3163 
3164  for(i=Nmin; i<= Nmax;i++){
3165  //offset = 2.*PI*i; //[R.K. 9/2018] unused
3166  z1 = (i*2.*PI-FI0)/KAPPA;
3167  z2 = ((i+1)*2.*PI-FI0)/KAPPA;
3168  fprintf(MACRO,"TLine* MC%d_%d = new TLine(%f,%f,%f,%f);\nMC%d_%d->SetLineColor(3);\nMC%d_%d->Draw();\n",
3169  imc,i-Nmin,z1,0.,z2,Rr* 2.*PI,imc,i-Nmin,imc,i-Nmin);
3170  } // end of for(i=Nmin; i<= Nmax;++)
3171 
3172  } // end of if (fabs(carica)>=0.1 )
3173  } // end of if ( pMC )
3174  } // end of if( imc>-1 )
3175 
3176 
3177 
3178  } // end of if( zmax >= zmin && Smax >= Smin )
3179 
3180  fprintf(MACRO,"}\n");
3181  fclose(MACRO);
3182 
3183  }
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void CalculateSandZ2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Sdrift[2], Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2])
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
const int MAXSTTHITSINTRACK
const Double_t CVEL
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::WriteMacroSkewAssociatedHitswithMC_Degree ( Double_t ESSE,
Double_t ESSEalone,
PndTrkPlotMacros2_InputData  In_Put,
int  iNome,
int  iTrack 
)

Definition at line 3195 of file PndTrkPlotMacros2.cxx.

References atan2(), PndTrkPlotMacros2_InputData::bfield, BFIELD, PndTrkCTGeometryCalculations::CalculateSandZ2(), PndTrkPlotMacros2_InputData::Charge, CVEL, PndTrkPlotMacros2_InputData::cvel, PndTrkPlotMacros2_InputData::daTrackFoundaTrackMC, PndTrkPlotMacros2_InputData::dimensionscitil, DIMENSIONSCITIL, Double_t, fabs(), PndTrkPlotMacros2_InputData::FI0, PndTrkPlotMacros2_InputData::fMCTrackArray, fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), h, i, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::info, PndTrkPlotMacros2_InputData::IVOLTE, PndTrkPlotMacros2_InputData::KAPPA, PndTrkPlotMacros2_InputData::ListMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::ListMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::ListSciTilHitsinTrack, PndTrkPlotMacros2_InputData::ListSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITSINTRACK, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSCITILHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSTTHITS, PndTrkPlotMacros2_InputData::maxstthitsintrack, MAXSTTHITSINTRACK, PndTrkPlotMacros2_InputData::MCMvdPixelAloneList, PndTrkPlotMacros2_InputData::MCMvdStripAloneList, PndTrkPlotMacros2_InputData::MCSciTilAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneList, PndTrkPlotMacros2_InputData::MvdPixelCommonList, PndTrkPlotMacros2_InputData::MvdStripCommonList, PndTrkPlotMacros2_InputData::nMCMvdPixelAlone, PndTrkPlotMacros2_InputData::nMCMvdStripAlone, PndTrkPlotMacros2_InputData::nMCSciTilAlone, PndTrkPlotMacros2_InputData::nMCSkewAlone, PndTrkPlotMacros2_InputData::nMvdPixelCommon, PndTrkPlotMacros2_InputData::nMvdPixelHit, PndTrkPlotMacros2_InputData::nMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::nMvdStripCommon, PndTrkPlotMacros2_InputData::nMvdStripHit, PndTrkPlotMacros2_InputData::nMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::nSciTilCommon, PndTrkPlotMacros2_InputData::nSciTilHits, PndTrkPlotMacros2_InputData::nSciTilHitsinTrack, PndTrkPlotMacros2_InputData::nSkewCommon, PndTrkPlotMacros2_InputData::nSttHit, PndTrkPlotMacros2_InputData::nSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::Ox, PndTrkPlotMacros2_InputData::Oy, PI, PndTrkPlotMacros2_InputData::posizSciTil, PndTrkPlotMacros2_InputData::R, PndTrkPlotMacros2_InputData::SciTilCommonList, PndTrkPlotMacros2_InputData::SkewCommonList, sqrt(), PndTrkPlotMacros2_InputData::WDX, PndTrkPlotMacros2_InputData::WDY, PndTrkPlotMacros2_InputData::WDZ, PndTrkPlotMacros2_InputData::XMvdPixel, PndTrkPlotMacros2_InputData::XMvdStrip, PndTrkPlotMacros2_InputData::YMvdPixel, PndTrkPlotMacros2_InputData::YMvdStrip, PndTrkPlotMacros2_InputData::ZMvdPixel, and PndTrkPlotMacros2_InputData::ZMvdStrip.

3202  {
3203 
3204 
3205  int MAXMVDPIXELHITSINTRACK = In_Put.MAXMVDPIXELHITSINTRACK;
3206  int MAXSCITILHITSINTRACK = In_Put.MAXSCITILHITSINTRACK;
3207  int MAXMVDSTRIPHITSINTRACK = In_Put.MAXMVDSTRIPHITSINTRACK;
3208  int MAXSTTHITSINTRACK = In_Put.maxstthitsintrack;
3209 
3210  Double_t BFIELD = In_Put.bfield;
3211  Double_t CVEL = In_Put.cvel;
3212  Short_t charge = In_Put.Charge[iTrack] ;
3213  Short_t daTrackFoundaTrackMC = In_Put.daTrackFoundaTrackMC[iTrack] ;
3215  Double_t FI0 = In_Put.FI0[iTrack] ;
3216  TClonesArray *fMCTrackArray = In_Put.fMCTrackArray;
3217 
3218  Double_t *info = In_Put.info ;
3219  int IVOLTE = In_Put.IVOLTE ;
3220  Double_t KAPPA = In_Put.KAPPA[iTrack] ;
3221 
3222  Short_t *ListPixelHitsinTrack = In_Put.ListMvdPixelHitsinTrack ;
3223  Short_t *ListSciTilHitsinTrack = In_Put.ListSciTilHitsinTrack;
3224  Short_t *ListSkewHitsinTrack = In_Put.ListSttSkewHitsinTrack ;
3225  Short_t *ListStripHitsinTrack = In_Put.ListMvdStripHitsinTrack ; // output
3226  Short_t *MCMvdPixelAloneList = In_Put.MCMvdPixelAloneList ;
3227  Short_t *MCMvdStripAloneList = In_Put.MCMvdStripAloneList ;
3228  Short_t *MCSkewAloneList = In_Put.MCSkewAloneList ;
3229  Short_t *MvdPixelCommonList = In_Put.MvdPixelCommonList;
3230  //Short_t *MvdPixelSpuriList = In_Put.MvdPixelSpuriList; //[R.K. 01/2017] unused variable?
3231  Short_t *MvdStripCommonList = In_Put.MvdStripCommonList;
3232 
3233  Short_t nMCMvdPixelAlone = In_Put.nMCMvdPixelAlone[iTrack] ;
3234  Short_t nMCMvdStripAlone = In_Put.nMCMvdStripAlone[iTrack] ;
3235  Short_t nMCSkewAlone = In_Put.nMCSkewAlone[iTrack] ;
3236  Short_t nMvdPixelCommon = In_Put.nMvdPixelCommon[iTrack] ;
3237  //Short_t nMvdPixelSpuriinTrack = In_Put.nMvdPixelSpuriinTrack[iTrack] ; //[R.K. 01/2017] unused variable?
3238  Short_t nMvdStripCommon = In_Put.nMvdStripCommon[iTrack] ;
3239  //Short_t nMvdStripSpuriinTrack = In_Put.nMvdStripSpuriinTrack[iTrack] ; //[R.K. 01/2017] unused variable?
3240 
3241  Short_t *nPixelHitsinTrack = In_Put.nMvdPixelHitsinTrack ;
3242  Short_t *nSciTilHitsinTrack = In_Put.nSciTilHitsinTrack;
3243  Short_t nSkewCommon = In_Put.nSkewCommon[iTrack] ;
3244  Short_t *nSkewHitsinTrack = In_Put.nSttSkewHitsinTrack ;
3245  Short_t *nStripHitsinTrack = In_Put.nMvdStripHitsinTrack ; // output
3246  Double_t Oxx = In_Put.Ox[iTrack] ;
3247  Double_t Oyy = In_Put.Oy[iTrack] ;
3248 
3249  Double_t *posizSciTil = In_Put.posizSciTil;
3250 
3251  Double_t Rr = In_Put.R[iTrack] ;
3252  Short_t *SkewCommonList = In_Put.SkewCommonList ;
3253  Double_t *XMvdPixel = In_Put.XMvdPixel;
3254  Double_t *XMvdStrip = In_Put.XMvdStrip;
3255  Double_t *YMvdPixel = In_Put.YMvdPixel;
3256  Double_t *YMvdStrip = In_Put.YMvdStrip;
3257  Double_t *WDX = In_Put.WDX ;
3258  Double_t *WDY = In_Put.WDY ;
3259  Double_t *WDZ = In_Put.WDZ ;
3260  Double_t *ZMvdPixel = In_Put.ZMvdPixel;
3261  Double_t *ZMvdStrip = In_Put.ZMvdStrip;
3262 
3263 //-----------------------------------------
3264 
3265  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
3266 
3267 
3268  int icolore;
3269 
3270  Int_t i, j, i1, ii, iii, imc, Nmin, Nmax; //index, Kincl, nlow, nup, STATUS //[R.K. 01/2017] unused variable?
3271 
3272  Double_t //xmin , xmax, ymin, ymax, //[R.K. 01/2017] unused variable?
3273  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
3274  deltaz, deltaS,//delta, deltax, deltay, //[R.K. 01/2017] unused variable?
3275  esse,//factor, //[R.K. 01/2017] unused variable?
3276  zmin, zmax, zmin2, zmax2, Smin, Smax, //S1, S2, //[R.K. 01/2017] unused variable?
3277  z1, z2, //y1, y2, //[R.K. 01/2017] unused variable?
3278  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
3279  aaa, dis, //bbb, ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
3280  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
3281  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
3282  fmin, fmax; //step, offset, //[R.K. 01/2017] unused variable?
3283  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
3284  //dist[2], //[R.K. 01/2017] unused variable?
3285  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
3286  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
3287  //POINTS1[6]; //[R.K. 01/2017] unused variable?
3288 
3289  const Double_t PI=3.141592654;
3290 
3291  PndTrkCTGeometryCalculations GeoCalculator;
3292 
3293 
3294 
3295 //------------------- skew straws hits Macro now
3296 
3297  char nome2[300],nome[300];
3298  FILE *MACRO;
3299  sprintf(nome, "MacroSttMvdSZDegreewithMCEvent%dT%d", IVOLTE,iNome);
3300  sprintf(nome2, "%s.C",nome);
3301  MACRO = fopen(nome2,"w");
3302  fprintf(MACRO,"{\n");
3303 
3304 
3305 //--------------- ricerca del minimo e massimo.
3306 
3307  if( nSciTilHitsinTrack[iTrack]+nSkewHitsinTrack[iTrack]+
3308  nPixelHitsinTrack[iTrack]+
3309  nStripHitsinTrack[iTrack] == 1) // solo 1 punto da disegnare, in questo caso aggiunge
3310  { // un punto finto in (0, FI0 ).
3311  Smax=Smin= FI0;
3312  zmax =zmin =0.;
3313  } else {
3314  Smin=zmin = 1.e10;
3315  Smax=zmax = -zmin;
3316  }
3317 
3318 
3319 
3320 // prima lo (gli) hits SciTil associati alla traccia;
3321 
3322  for(i=0; i<nSciTilHitsinTrack[iTrack];i++){
3323  j=ListSciTilHitsinTrack[iTrack*MAXSCITILHITSINTRACK+i];
3324  if( ESSE[i]>Smax ) Smax=ESSE[i];
3325  if( ESSE[i]<Smin ) Smin=ESSE[i];
3326  if( posizSciTil[j*3+2]>zmax ) zmax=posizSciTil[j*3+2];
3327  if( posizSciTil[j*3+2]<zmin ) zmin=posizSciTil[j*3+2];
3328  }
3329 
3330 // poi lo (gli) hits SciTil 'Alone' della traccia;
3331 
3332  for(i=0; i<In_Put.nMCSciTilAlone[iTrack];i++){
3333  j=In_Put.MCSciTilAloneList[iTrack*In_Put.nSciTilHits+i];
3334  if( ESSEalone[i]>Smax ) Smax=ESSEalone[i];
3335  if( ESSEalone[i]<Smin ) Smin=ESSEalone[i];
3336  if( posizSciTil[j*3+2]>zmax ) zmax=posizSciTil[j*3+2];
3337  if( posizSciTil[j*3+2]<zmin ) zmin=posizSciTil[j*3+2];
3338  }
3339 
3340 //-------------------------
3341 
3342 // Skew hits;
3343 
3344  Double_t
3345  auxS[2], // output;
3346  auxSDrift[2], // output; drift radius projected onto the Helix along the S direction.
3347  auxZ[2], // output, Zcoordinate of the central wire.
3348  auxZDrift[2], // output, drift radius projected onto the Helix along the Z direction.
3349  auxZErrorafterTilt[2]; // output, 150 micron projected onto the Helix.
3350  //res = 0.015; //[R.K. 01/2017] unused variable?
3351  Double_t auxInfo[ In_Put.MAXSTTHITS ][7];
3352  for(i=0;i<In_Put.MAXSTTHITS;i++){
3353  for(j=0;j<7;j++){
3354  auxInfo[i][j] = info[i*7+j];
3355  }
3356  }
3357 
3358 // skew hits in track;
3359  for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++) {
3360  i = ListSkewHitsinTrack[iTrack*MAXSTTHITSINTRACK+iii];
3361  if(!In_Put.InclusionListStt[i]) continue;
3362  GeoCalculator.CalculateSandZ2(
3363  Oxx, // input;
3364  Oyy, // input;
3365  Rr, // input;
3366  i, // input, skew straw original hit number;
3367  auxInfo, // input;
3368  WDX, // input;
3369  WDY, // input;
3370  WDZ, // input;
3371  auxS, // output;
3372  auxSDrift, // output; drift radius projected onto the Helix S direction;
3373  auxZ, // output, Zcoordinate of the central wire.
3374  auxZDrift, // output, drift radius projected onto the Helix Z direction;
3375  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
3376  );
3377 
3378  for( ii=0; ii<2; ii++){
3379  if( auxZ[ii] < 999998.){
3380  if(zmin>auxZ[ii]-auxZDrift[ii]) zmin=auxZ[ii]-auxZDrift[ii];
3381  if(zmax<auxZ[ii]+auxZDrift[ii]) zmax=auxZ[ii]+auxZDrift[ii];
3382 
3383  if(Smin>auxS[ii]-auxSDrift[ii]) Smin=auxS[ii]-auxSDrift[ii];
3384  if(Smax<auxS[ii]+auxSDrift[ii]) Smax=auxS[ii]+auxSDrift[ii];
3385  } // end of if( auxZ[ii] < 999998.)
3386 
3387 
3388 
3389 
3390 
3391  } // end of for( ii=0; ii<2; ii++)
3392 
3393  } // end of for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++)
3394 
3395 //------ aggiungo in blu eventuali punti della traccia MC che sono non mecciati
3396 
3397  for( iii=0; iii< nMCSkewAlone; iii++) {
3398  GeoCalculator.CalculateSandZ2(
3399  Oxx, // input;
3400  Oyy, // input;
3401  Rr, // input;
3402  MCSkewAloneList[iTrack*In_Put.nSttHit+iii], // input, skew straw original hit number;
3403  auxInfo, // input;
3404  WDX, // input;
3405  WDY, // input;
3406  WDZ, // input;
3407  auxS, // output;
3408  auxSDrift, // output; drift radius projected onto the Helix S direction;
3409  auxZ, // output, Zcoordinate of the central wire.
3410  auxZDrift, // output, drift radius projected onto the Helix Z direction;
3411  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
3412  );
3413 
3414 
3415  // faccio un trattamento speciale poiche' questi sono hit MC truth e quindi UNO dei due deve
3416  // essere vero ma puo' darsi che sia a distanza non fisica perche' i parametri dell'elica
3417  // (raggio, centro) sono un po' sbagliati (vengono dal Pattern Recognition!!)
3418 
3419  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
3420  if(auxZ[0] <999998. ) { ii = 0; dis =auxZ[0]; }
3421  else if (auxZ[1] <999998. ) { ii = 1;dis =auxZ[1];}
3422  else if (auxZ[0] > 999999.5 && auxZ[1]>999999.5) // questo e' il caso in cui gli auxZ[] NON sono 999999. (che significherebbe
3423  // che e' successo che bbb< 1.e-10 oppure sinTheta < 1.e-10 cioe' QUALCHE CASINO
3424  // DI CALCOLO nella CalculateSandZ2) MA BENSI' SONO > 1000000. che e' il caso in cui
3425  // le distanze sono unphysical. Tali distanze si ottengono : dis = auxZ[] - 1000000.
3426  {
3427  // since these are MC hits, it would be WRONG to check if they are within the length of the wire;
3428  // in fact that length could be calculated wrongly due to the non perfect radius and center
3429  // of the Trajectory Helix found by the Pattern Recognition!
3430  // So, ONE of the two solutions is right no matter what; choose the one closer;
3431 
3432  if(auxZ[0]<auxZ[1]) { ii=0 ; dis=auxZ[0]-1000000.;} else { ii=1; dis = auxZ[1]-1000000.;}
3433 
3434  } else if (auxZ[0] > 999999.5) { // caso in cui la soluzione 0 e' unphysical mentre la 1 ha avuto casini di calcolo;
3435  ii =0;
3436  dis=auxZ[0]-1000000.;
3437  } else if (auxZ[1] > 999999.5) { // caso in cui la soluzione 1 e' unphysical mentre la 0 ha avuto casini di calcolo;
3438  ii =0;
3439  dis=auxZ[0]-1000000.;
3440  } else { // caso in cui entrambe le soluzioni hanno avuto un casino di calcolo;
3441  continue;
3442  }
3443 
3444  if(zmin>dis-auxZDrift[ii]) zmin=dis-auxZDrift[ii];
3445  if(zmax<dis+auxZDrift[ii]) zmax=dis+auxZDrift[ii];
3446 
3447  if(Smin>auxS[ii]-auxSDrift[ii]) Smin=auxS[ii]-auxSDrift[ii];
3448  if(Smax<auxS[ii]+auxSDrift[ii]) Smax=auxS[ii]+auxSDrift[ii];
3449 
3450  } // end of for( iii=0; iii< nMCSkewAlone[imaxima]; iii++)
3451 
3452 //-------------------------------
3453 //------ fine aggiunta in blu eventuali punti della traccia MC che sono non mecciati
3454 
3455 // ora la parte delle Mvd
3456 
3457 // prima i pixel
3458 
3459  for(i=0; i<nPixelHitsinTrack[iTrack];i++){
3460  ii=ListPixelHitsinTrack[iTrack*MAXMVDPIXELHITSINTRACK+i];
3461 
3462  if( zmin > ZMvdPixel[ ii ] )
3463  zmin = ZMvdPixel[ ii ];
3464  if( zmax < ZMvdPixel[ii ] )
3465  zmax = ZMvdPixel[ii ];
3466 
3467  esse = atan2( YMvdPixel[ ii ]-Oyy,
3468  XMvdPixel[ ii ]-Oxx);
3469  if(esse<0.) esse +=2.*PI;
3470 
3471 
3472 
3473  if( Smin > esse ) Smin = esse;
3474  if( Smax < esse ) Smax = esse;
3475  }
3476 
3477 // poi le strip
3478 
3479  for(i=0; i<nStripHitsinTrack[iTrack];i++){
3480  ii=ListStripHitsinTrack[iTrack*MAXMVDSTRIPHITSINTRACK+i];
3481  if( zmin > ZMvdStrip[ ii ] )
3482  zmin = ZMvdStrip[ ii ];
3483  if( zmax < ZMvdStrip[ii ] )
3484  zmax = ZMvdStrip[ii ];
3485 
3486  esse = atan2( YMvdStrip[ ii ]-Oyy,
3487  XMvdStrip[ ii ]-Oxx);
3488  if(esse<0.) esse +=2.*PI;
3489 
3490 
3491 
3492  if( Smin > esse ) Smin = esse;
3493  if( Smax < esse ) Smax = esse;
3494  }
3495 
3496 
3497 // ora i pixel 'Alone'
3498  for(i=0; i<nMCMvdPixelAlone;i++){
3499 
3500  ii=MCMvdPixelAloneList[iTrack*In_Put.nMvdPixelHit+i];
3501  if( zmin > ZMvdPixel[ ii ] )
3502  zmin = ZMvdPixel[ ii ];
3503  if( zmax < ZMvdPixel[ii ] )
3504  zmax = ZMvdPixel[ii ];
3505 
3506  esse = atan2( YMvdPixel[ ii ]-Oyy,
3507  XMvdPixel[ ii ]-Oxx);
3508  if(esse<0.) esse +=2.*PI;
3509  if( Smin > esse ) Smin = esse;
3510  if( Smax < esse ) Smax = esse;
3511  }
3512 
3513 
3514 // ora le strip 'Alone'
3515 
3516  for(i=0; i<nMCMvdStripAlone;i++){
3517  ii=MCMvdStripAloneList[iTrack*In_Put.nMvdStripHit+i];
3518  if( zmin > ZMvdStrip[ ii ] )
3519  zmin = ZMvdStrip[ ii ];
3520  if( zmax < ZMvdStrip[ii ] )
3521  zmax = ZMvdStrip[ii ];
3522 
3523  esse = atan2( YMvdStrip[ ii ]-Oyy,
3524  XMvdStrip[ ii ]-Oxx);
3525  if(esse<0.) esse +=2.*PI;
3526  if( Smin > esse ) Smin = esse;
3527  if( Smax < esse ) Smax = esse;
3528  }
3529 
3530 
3531  if( zmax >= zmin && Smax >= Smin ) {
3532 
3533 
3534 
3535  aaa = Smax-Smin;
3536  Smin -= aaa*0.2;
3537  Smax += aaa*0.2;
3538 
3539  aaa = zmax-zmin;
3540  zmin -= aaa*0.05;
3541  zmax += aaa*0.05;
3542 
3543  if(Smax > 2.*PI) Smax = 2.*PI;
3544  if( Smin < 0.) Smin = 0.;
3545 
3546 
3547  deltaz = zmax-zmin;
3548  deltaS = Smax-Smin;
3549 
3550  // al momento del plot, tutte gli angoli sono trasformati da radianti a gradi;
3551  double TRA = 180./PI;
3552 
3553  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
3554  zmin-0.2*deltaz,TRA*(Smin-.1*deltaS),zmax+0.1*deltaz,TRA*(Smax+0.1*deltaS));
3555  fprintf(MACRO,"TGaxis *Assex = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
3556  zmin-0.01*deltaz,TRA*(Smin+0.05*deltaS),zmax+0.01*deltaz,TRA*(Smin+0.05*deltaS),
3557  zmin-0.01*deltaz,zmax+0.01*deltaz);
3558  fprintf(MACRO,"Assex->SetTitle(\"Z (cm)\");\n");
3559  fprintf(MACRO,"Assex->Draw();\n");
3560  fprintf(MACRO,"TGaxis *Assey = new TGaxis(%f,%f,%f,%f,%f,%f,510);\n",
3561  zmin+0.05*deltaz,TRA*(Smin-0.01*deltaS),zmin+0.05*deltaz,TRA*(Smax+0.01*deltaS),
3562  TRA*(Smin-0.01*deltaS),TRA*(Smax+0.01*deltaS));
3563 // fprintf(MACRO,"Assey->SetTitle(\"#phi (radians)\");\n");
3564  fprintf(MACRO,"Assey->SetTitle(\"#phi (degrees)\");\n");
3565  fprintf(MACRO,"Assey->Draw();\n");
3566  fprintf(MACRO,"Assey->SetTitleOffset(1.5);\n");
3567 
3568 
3569 //------------
3570 // plot di eventuali hits SciTil;
3571  // prima la lista di SciTil 'common' e spuri :
3572  for(i=0;i<nSciTilHitsinTrack[iTrack];i++){
3573  j=ListSciTilHitsinTrack[iTrack*MAXSCITILHITSINTRACK+i];
3574  // controlla se sono hit 'common' o spuri;
3575  icolore=2; // colore rosso, assegnato agli spuri;
3576  for(int h=0;h<In_Put.nSciTilCommon[iTrack];h++){
3577  if(j == In_Put.SciTilCommonList[iTrack*MAXSCITILHITSINTRACK+h]){
3578  icolore=1; // colore nero, usato per gli hits 'common';
3579  break;
3580  }
3581  }
3582 
3584  icolore, // color code; the same as in SetColor of root;
3585  DIMENSIONSCITIL,
3586  MACRO,
3587  posizSciTil[j*3+2],
3588  TRA*ESSE[i],
3589  j,
3590  1 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
3591  // SciTil draw in UV.
3592  );
3593  }
3594  // poi la lista di SciTil 'alone' :
3595  for(i=0;i<In_Put.nMCSciTilAlone[iTrack];i++){
3596  j=In_Put.MCSciTilAloneList[iTrack*In_Put.nSciTilHits+i];
3598  4, // color code; the same as in SetColor of root;
3599  DIMENSIONSCITIL,
3600  MACRO,
3601  posizSciTil[j*3+2],
3602  TRA*ESSEalone[i],
3603  j,
3604  1 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
3605  // SciTil draw in UV.
3606  );
3607  }
3608 
3609 // --------------------------------
3610  // plot degli Skew hits;
3611 
3612  for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++) {
3613  i = ListSkewHitsinTrack[iTrack*MAXSTTHITSINTRACK+iii] ;
3614  if(!In_Put.InclusionListStt[i]) continue;
3615 
3616 
3617  GeoCalculator.CalculateSandZ2(
3618  Oxx, // input;
3619  Oyy, // input;
3620  Rr, // input;
3621  i, // input, skew straw original hit number;
3622  auxInfo, // input;
3623  WDX, // input;
3624  WDY, // input;
3625  WDZ, // input;
3626  auxS, // output;
3627  auxSDrift, // output; drift radius projected onto the Helix S direction;
3628  auxZ, // output, Zcoordinate of the central wire.
3629  auxZDrift, // output, drift radius projected onto the Helix Z direction;
3630  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
3631  );
3632 
3633  for( ii=0; ii<2; ii++){
3634  if( auxZ[ii] > 999998.) continue; // this solution was not physical;
3635 
3636  // ------ se lo hit e' spurio marcalo in rosso
3637  bool flaggo=true;
3638  for( i1=0; i1<nSkewCommon; i1++){
3639  if ( SkewCommonList[iTrack*MAXSTTHITSINTRACK +i1] == i ){
3640  flaggo=false;
3641  break;
3642  }
3643  }
3644  if(flaggo){
3645  fprintf(MACRO,
3646  "TEllipse* spurioSkew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nspurioSkew%d_%d->SetFillStyle(0);\n",
3647  i,ii,auxZ[ii],TRA*auxS[ii],auxZDrift[ii],TRA*auxSDrift[ii],0.,i,ii);
3648  fprintf(MACRO,"spurioSkew%d_%d->SetLineColor(2);\n",i,ii);
3649  fprintf(MACRO,"spurioSkew%d_%d->Draw();\n",i,ii);
3650  }else {
3651  fprintf(MACRO,"TEllipse* Skew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nSkew%d_%d->SetFillStyle(0);\n",
3652  i,ii,auxZ[ii],TRA*auxS[ii],auxZDrift[ii],TRA*auxSDrift[ii],0.,i,ii);
3653  fprintf(MACRO,"Skew%d_%d->Draw();\n",i,ii);
3654  }
3655 
3656 
3657  } // end of for( ii=0; ii<2; ii++)
3658 
3659  } // end of for( iii=0; iii< nSkewHitsinTrack[iTrack]; iii++)
3660 
3661 
3662 
3663 //------ aggiungo in blu eventuali punti della traccia MC che sono non mecciati
3664 
3665  for( iii=0; iii< nMCSkewAlone; iii++) {
3666  i = MCSkewAloneList[iTrack*In_Put.nSttHit+iii];
3667 
3668  if(!In_Put.InclusionListStt[i]) continue;
3669 
3670  GeoCalculator.CalculateSandZ2(
3671  Oxx, // input;
3672  Oyy, // input;
3673  Rr, // input;
3674  i, // input, skew straw original hit number;
3675  auxInfo, // input;
3676  WDX, // input;
3677  WDY, // input;
3678  WDZ, // input;
3679  auxS, // output;
3680  auxSDrift, // output; drift radius projected onto the Helix S direction;
3681  auxZ, // output, Zcoordinate of the central wire of the skew straw projected;
3682  // if it is > 1000000. then it means unphysical intersection; in that case
3683  // the unphysical distance is found by : dist = auxZ[] - 1000000. ;
3684  auxZDrift, // output, drift radius projected onto the Helix Z direction;
3685  auxZErrorafterTilt // output, 150 micron projected onto the Helix.
3686  );
3687 
3688 
3689  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
3690 
3691 
3692  // ripeto il trattamento speciale poiche' questi sono hit MC truth e quindi UNO dei due deve
3693  // essere vero ma puo' darsi che sia a distanza non fisica perche' i parametri dell'elica
3694  // (raggio, centro) sono un po' sbagliati (vengono dal Pattern Recognition!!)
3695 
3696  // assume that it is impossible to have both solutions acceptable (i.e. with auxZ[*] <999998.);
3697  if(auxZ[0] <999998. ) { ii = 0; dis =auxZ[0]; }
3698  else if (auxZ[1] <999998. ) { ii = 1;dis =auxZ[1];}
3699  else if (auxZ[0] > 999999.5 && auxZ[1]>999999.5) // questo e' il caso in cui gli auxZ[] NON sono 999999. (che significherebbe
3700  // che e' successo che bbb< 1.e-10 oppure sinTheta < 1.e-10 cioe' QUALCHE CASINO
3701  // DI CALCOLO nella CalculateSandZ2) MA BENSI' SONO > 1000000. che e' il caso in cui
3702  // le distanze sono unphysical. Tali distanze si ottengono : dis = auxZ[] - 1000000.
3703  {
3704  // since these are MC hits, it would be WRONG to check if they are within the length of the wire;
3705  // in fact that length could be calculated wrongly due to the non perfect radius and center
3706  // of the Trajectory Helix found by the Pattern Recognition!
3707  // So, ONE of the two solutions is right no matter what; choose the one closer;
3708 
3709  if(auxZ[0]<auxZ[1]) { ii=0 ; dis=auxZ[0]-1000000.;} else { ii=1; dis = auxZ[1]-1000000.;}
3710 
3711  } else if (auxZ[0] > 999999.5) { // caso in cui la soluzione 0 e' unphysical mentre la 1 ha avuto casini di calcolo;
3712  ii =0;
3713  dis=auxZ[0]-1000000.;
3714  } else if (auxZ[1] > 999999.5) { // caso in cui la soluzione 1 e' unphysical mentre la 0 ha avuto casini di calcolo;
3715  ii =0;
3716  dis=auxZ[0]-1000000.;
3717  } else { // caso in cui entrambe le soluzioni hanno avuto un casino di calcolo;
3718  continue;
3719  }
3720 
3721 
3722  fprintf(MACRO,"TEllipse* AloneSkew%d_%d = new TEllipse(%f,%f,%f,%f,0.,360.,%f);\nAloneSkew%d_%d->SetFillStyle(0);\n",
3723  i,ii,dis,TRA*auxS[ii],auxZDrift[ii],TRA*auxSDrift[ii],0.,i,ii);
3724 // i,ii,auxZ[ii],TRA*auxS[ii],auxZDrift[ii],TRA*auxSDrift[ii],0.,i,ii);
3725 
3726 // ------ marca lo hit in blu
3727  fprintf(MACRO,"AloneSkew%d_%d->SetLineColor(4);\n",i,ii);
3728  fprintf(MACRO,"AloneSkew%d_%d->Draw();\n",i,ii);
3729 
3730 
3731 
3732  } // end of for( iii=0; iii< nMCSkewAlone; iii++)
3733 
3734 //-------------------------------
3735 //------ fine aggiunta in blu eventuali punti della traccia MC che sono non mecciati
3736 
3737 // ora la parte delle Mvd
3738 
3739 // prima i pixel
3740 
3741  for(i=0; i<nPixelHitsinTrack[iTrack];i++){
3742  ii=ListPixelHitsinTrack[iTrack*MAXMVDPIXELHITSINTRACK+i];
3743  if( zmin > ZMvdPixel[ ii ] )
3744  zmin = ZMvdPixel[ ii ];
3745  if( zmax < ZMvdPixel[ii ] )
3746  zmax = ZMvdPixel[ii ];
3747 
3748  esse = atan2( YMvdPixel[ ii ]-Oyy,
3749  XMvdPixel[ ii ]-Oxx);
3750  if(esse<0.) esse +=2.*PI;
3751 
3752 
3753 
3754  if( Smin > esse ) Smin = esse;
3755  if( Smax < esse ) Smax = esse;
3756 
3757 
3758  bool flaggo=true;
3759  for( int k=0; k<nMvdPixelCommon;k++){
3760  if( MvdPixelCommonList[iTrack*MAXMVDPIXELHITSINTRACK+k]== ii){
3761  fprintf(MACRO,
3762  "TMarker* CommonPixel%d = new TMarker(%f,%f,%d);\nCommonPixel%d->SetMarkerColor(1);\n",
3763  ii,ZMvdPixel[ii],TRA*esse,26,ii);
3764  fprintf(MACRO,"CommonPixel%d->Draw();\n",ii);
3765  flaggo=false;
3766  break;
3767  }
3768  }
3769  if(flaggo){
3770  fprintf(MACRO,"TMarker* SpuriousPixel%d = new TMarker(%f,%f,%d);\nSpuriousPixel%d->SetMarkerColor(2);\n",
3771  ii,ZMvdPixel[ii],TRA*esse,26,ii);
3772  fprintf(MACRO,"SpuriousPixel%d->Draw();\n",ii);
3773  }
3774  }
3775 // poi le strip
3776 
3777  for(i=0; i<nStripHitsinTrack[iTrack];i++){
3778  ii=ListStripHitsinTrack[iTrack*MAXMVDSTRIPHITSINTRACK+i];
3779  if( zmin > ZMvdStrip[ ii ] )
3780  zmin = ZMvdStrip[ ii ];
3781  if( zmax < ZMvdStrip[ii ] )
3782  zmax = ZMvdStrip[ii ];
3783 
3784  esse = atan2( YMvdStrip[ ii ]-Oyy,
3785  XMvdStrip[ ii ]-Oxx);
3786  if(esse<0.) esse +=2.*PI;
3787 
3788 
3789 
3790  if( Smin > esse ) Smin = esse;
3791  if( Smax < esse ) Smax = esse;
3792 
3793  bool flaggo=true;
3794  for( int k=0; k<nMvdStripCommon;k++){
3795  if( MvdStripCommonList[iTrack*MAXMVDSTRIPHITSINTRACK+k]== ii){
3796  fprintf(MACRO,"TMarker* CommonStrip%d = new TMarker(%f,%f,%d);\nCommonStrip%d->SetMarkerColor(1);\n",
3797  ii,ZMvdStrip[ii],TRA*esse,25,ii);
3798  fprintf(MACRO,"CommonStrip%d->Draw();\n",ii);
3799  flaggo=false;
3800  break;
3801  }
3802  }
3803  if(flaggo){
3804  fprintf(MACRO,"TMarker* SpuriousStrip%d = new TMarker(%f,%f,%d);\nSpuriousStrip%d->SetMarkerColor(2);\n",
3805  ii,ZMvdStrip[ii],TRA*esse,25,ii);
3806  fprintf(MACRO,"SpuriousStrip%d->Draw();\n",ii);
3807  }
3808 
3809 
3810  }
3811 
3812 
3813 // ora i pixel 'Alone'
3814  for(i=0; i<nMCMvdPixelAlone;i++){
3815 
3816  ii=MCMvdPixelAloneList[iTrack*In_Put.nMvdPixelHit+i];
3817  if( zmin > ZMvdPixel[ ii ] )
3818  zmin = ZMvdPixel[ ii ];
3819  if( zmax < ZMvdPixel[ii ] )
3820  zmax = ZMvdPixel[ii ];
3821 
3822  esse = atan2( YMvdPixel[ ii ]-Oyy,
3823  XMvdPixel[ ii ]-Oxx);
3824  if(esse<0.) esse +=2.*PI;
3825  if( Smin > esse ) Smin = esse;
3826  if( Smax < esse ) Smax = esse;
3827  fprintf(MACRO,"TMarker* AlonePixel%d = new TMarker(%f,%f,%d);\nAlonePixel%d->SetMarkerColor(4);\n",
3828  ii,ZMvdPixel[ii],TRA*esse,26,ii);
3829  fprintf(MACRO,"AlonePixel%d->Draw();\n",ii);
3830  }
3831 
3832 
3833 // ora le strip 'Alone'
3834 
3835  for(i=0; i<nMCMvdStripAlone;i++){
3836  ii=MCMvdStripAloneList[iTrack*In_Put.nMvdStripHit+i];
3837  if( zmin > ZMvdStrip[ ii ] )
3838  zmin = ZMvdStrip[ ii ];
3839  if( zmax < ZMvdStrip[ii ] )
3840  zmax = ZMvdStrip[ii ];
3841 
3842  esse = atan2( YMvdStrip[ ii ]-Oyy,
3843  XMvdStrip[ ii ]-Oxx);
3844  if(esse<0.) esse +=2.*PI;
3845  if( Smin > esse ) Smin = esse;
3846  if( Smax < esse ) Smax = esse;
3847 
3848  fprintf(MACRO,"TMarker* AloneStrip%d = new TMarker(%f,%f,%d);\nAloneStrip%d->SetMarkerColor(4);\n",
3849  ii,ZMvdStrip[ii],TRA*esse,25,ii);
3850  fprintf(MACRO,"AloneStrip%d->Draw();\n",ii);
3851 
3852  }
3853 
3854 
3855 
3856 
3857 // plot della traccia trovata dal finder
3858 
3859 
3860  zmin2=zmin;
3861  zmax2=zmax;
3862 
3863  bool flaggo=true;
3864  if( -KAPPA*charge>0.) { // Pz>0.
3865  if( zmax <0.) {
3866  cout<<"da WriteMacroSkewAssociatedHitswithMC_Degree, questa traccia"
3867  <<" e' inconsistente col proprio Pz, non plottata!\n";
3868  flaggo=false;
3869  } else {
3870  zmin = 0.;
3871  }
3872  } else { // Pz<0.
3873  if( zmin >0.) {
3874  cout<<"da WriteMacroSkewAssociatedHitswithMC_Degree, questa traccia"
3875  <<" e' inconsistente col proprio Pz, non plottata!\n";
3876  flaggo=false;
3877  } else{
3878  zmax = 0.;
3879  }
3880 
3881  }
3882 
3883  if(flaggo){
3884 
3885  if ( KAPPA >= 0.) {
3886  fmin = KAPPA*zmin + FI0;
3887  fmax = KAPPA*zmax + FI0;
3888  } else {
3889  fmax = KAPPA*zmin + FI0;
3890  fmin = KAPPA*zmax + FI0;
3891  }
3892  if( fmax>=0.) {
3893  Nmax = (int) (0.5*fmax/ PI);
3894  } else {
3895  Nmax = ( (int) (0.5*fmax/ PI) ) -1;
3896  }
3897  if( fmin>=0.) {
3898  Nmin = (int) (0.5*fmin/ PI);
3899  } else {
3900  Nmin = ((int) (0.5*fmin/ PI) )-1;
3901  }
3902  if(fabs(KAPPA)<1.e-10) {
3903  cout<<"da WriteMacroSkewAssociatedHitswithMC_Degree, questa traccia Found da PR non plottata"
3904  <<" perche' ha fabs(KAPPA)<1.e-10.\n";
3905  } else {
3906  for(i=Nmin; i<= Nmax;i++){
3907  //offset = 2.*PI*i; //[R.K. 9/2018] unused
3908  z1 = (i*2.*PI-FI0)/KAPPA;
3909  z2 = ((i+1)*2.*PI-FI0)/KAPPA;
3910  fprintf(MACRO,
3911 "TLine* FOUND%d = new TLine(%f,%f,%f,%f);\nFOUND%d->SetLineColor(2);\nFOUND%d->Draw();\n",
3912  i-Nmin,z1,0.,z2, TRA*2.*PI,i-Nmin,i-Nmin);
3913 
3914  } // end of for(i=Nmin; i<= Nmax;++)
3915  } // end of if(fabs(KAPPA)<1.e-10)
3916 
3917  } // end of if(flaggo)
3918 
3919 
3920  zmin=zmin2;
3921  zmax=zmax2;
3922 
3923 
3924 //----------------- ora la traccia MC corrispondente a questa traccia Stt
3925 
3926 // for(imc=0; imc<nMCTracks ; imc++){
3927 // if(imc != daTrackFoundaTrackMC[ iTrack ]) continue;
3928  imc= daTrackFoundaTrackMC ;
3929 
3930  if( imc>-1 ) {
3931  Int_t icode ;
3932  Double_t Fifi, Kakka, o_x, o_y, Cx, Cy, Px, Py, carica ;// Dd,r_r, //[R.K. 01/2017] unused variable?
3933  PndMCTrack* pMC;
3934  pMC = (PndMCTrack*) fMCTrackArray->At(imc);
3935  if ( pMC ) {
3936  icode = pMC->GetPdgCode() ; // PDG code of track
3937  o_x = pMC->GetStartVertex().X(); // X of starting point track
3938  o_y = pMC->GetStartVertex().Y(); // Y of starting point track
3939  Px = pMC->GetMomentum().X();
3940  Py = pMC->GetMomentum().Y();
3941  aaa = sqrt( Px*Px + Py*Py);
3942  //r_r = aaa*1000./(BFIELD*CVEL); //[R.K. 9/2018] unused // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
3943  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
3944  if (icode>1000000000) carica = 1.;
3945  else carica = fParticle->Charge()/3. ; // charge of track
3946  if (fabs(carica)>=0.1 ){
3947  Cx = o_x + Py*1000./(BFIELD*CVEL*carica);
3948  Cy = o_y - Px*1000./(BFIELD*CVEL*carica);
3949  Fifi = atan2(Cy, Cx); // MC truth Fifi angle of circle of Helix trajectory
3950  if(Fifi<0.) Fifi += 2.*PI;
3951  if( fabs( pMC->GetMomentum().Z() )< 1.e-20) Kakka = 99999999.;
3952  else Kakka = -carica*0.001*BFIELD*CVEL/pMC->GetMomentum().Z();
3953  KAPPA=Kakka;
3954  FI0 = fmod(Fifi+ PI, 2.*PI);
3955  if ( KAPPA >= 0.) {
3956  fmin = KAPPA*zmin + FI0;
3957  fmax = KAPPA*zmax + FI0;
3958  } else {
3959  fmax = KAPPA*zmin + FI0;
3960  fmin = KAPPA*zmax + FI0;
3961  }
3962  if( fmax>=0.) {
3963  Nmax = (int) (0.5*fmax/ PI);
3964  } else {
3965  Nmax = ( (int) (0.5*fmax/ PI) ) -1;
3966  }
3967  if( fmin>=0.) {
3968  Nmin = (int) (0.5*fmin/ PI);
3969  } else {
3970  Nmin = ((int) (0.5*fmin/ PI) )-1;
3971  }
3972 
3973  for(i=Nmin; i<= Nmax;i++){
3974  //offset = 2.*PI*i; //[R.K. 9/2018] unused
3975  z1 = (i*2.*PI-FI0)/KAPPA;
3976  z2 = ((i+1)*2.*PI-FI0)/KAPPA;
3977  fprintf(MACRO,"TLine* MC%d_%d = new TLine(%f,%f,%f,%f);\nMC%d_%d->SetLineColor(3);\nMC%d_%d->Draw();\n",
3978  imc,i-Nmin,z1,0.,z2, TRA*2.*PI,imc,i-Nmin,imc,i-Nmin);
3979  } // end of for(i=Nmin; i<= Nmax;++)
3980 
3981  } // end of if (fabs(carica)>=0.1 )
3982  } // end of if ( pMC )
3983  } // end of if( imc>-1 )
3984 
3985 
3986 
3987  } // end of if( zmax >= zmin && Smax >= Smin )
3988 
3989  fprintf(MACRO,"}\n");
3990  fclose(MACRO);
3991 
3992  }
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
const Double_t PI
Double_t
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void CalculateSandZ2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Sdrift[2], Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2])
friend F32vec4 atan2(const F32vec4 &y, const F32vec4 &x)
Definition: P4_F32vec4.h:117
const int MAXSTTHITSINTRACK
const Double_t CVEL
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::WriteMacroSttParallel ( PndTrkPlotMacros2_InputData  In_Put)

Definition at line 4503 of file PndTrkPlotMacros2.cxx.

References PndTrkPlotMacros2_InputData::apotemamaxinnerparstraw, APOTEMAMAXINNERPARSTRAW, PndTrkPlotMacros2_InputData::apotemamaxskewstraw, APOTEMAMAXSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemaminouterparstraw, APOTEMAMINOUTERPARSTRAW, PndTrkPlotMacros2_InputData::apotemaminskewstraw, APOTEMAMINSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemastrawdetectormin, APOTEMASTRAWDETECTORMIN, Double_t, fabs(), PndSttTube::GetPosition(), PndSttTube::GetWireDirection(), i, PndTrkPlotMacros2_InputData::number_straws, PndTrkPlotMacros2_InputData::rstrawdetectormax, RSTRAWDETECTORMAX, PndTrkPlotMacros2_InputData::SttTubeArray, VERTICALGAP, PndTrkPlotMacros2_InputData::verticalgap, xmax, and xmin.

4505  {
4506 //---------- parallel straws Macro now
4507  char nome[300], nome2[300];
4508  sprintf(nome,"MacroSttParallel");
4509  sprintf(nome2,"%s.C",nome);
4510  FILE * MACRO = fopen(nome2,"w");
4511  fprintf(MACRO,"{\n");
4512 
4515  VERTICALGAP = In_Put.verticalgap,
4520 
4521 
4522 
4523  double xmin=-1.3*RSTRAWDETECTORMAX;
4524  double xmax=1.3*RSTRAWDETECTORMAX;
4525  double ymin=-1.3*RSTRAWDETECTORMAX;
4526  double ymax=1.3*RSTRAWDETECTORMAX;
4527 
4528 
4529  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
4530  xmin,ymin,xmax,ymax);
4531 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
4532 
4533  char myname[100];
4534 
4535  sprintf(myname, "InnerPar");
4537  VERTICALGAP,
4538  MACRO,
4541  4, // color code, 4= blue.
4542  myname
4543  );
4544 //--------------
4545 // disegna il BiHexagon destro e sinistro delle skew straws.
4546  sprintf(myname, "Skew");
4548  VERTICALGAP,
4549  MACRO,
4552  2, // color code.
4553  myname
4554  );
4555 //--------------
4556 // disegna il BiHexagon destro e sinistro delle outer parallel.
4557  sprintf(myname, "OuterPar");
4559  VERTICALGAP,
4560  MACRO,
4562  RSTRAWDETECTORMAX,
4563  4, // color code.
4564  myname
4565  );
4566 //--------------
4567 
4568  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
4569 
4570 //------------- disegna tutti gli hit paralleli della corteccia esterna;
4571  for( int i=0; i< In_Put.number_straws ; i++) {
4572  PndSttTube* pSttTube = (PndSttTube*) In_Put.SttTubeArray->At(i+1);
4573  TVector3 center = pSttTube->GetPosition();
4574  TVector3 wiredirection = pSttTube->GetWireDirection();
4575  // solo STT parallel;
4576  if(!(fabs( wiredirection.X() )< 0.00001 && fabs( wiredirection.Y() )< 0.00001))continue;
4577 
4578  fprintf(MACRO,
4579  "TEllipse* ParalTube%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nParalTube%d->SetFillStyle(0);\nParalTube%d->Draw();\n",
4580  i+1,center.X(),center.Y(),0.5,0.5,i+1,i+1);
4581  }
4582 //------------- hits paralleli spuri
4583 
4584  fprintf(MACRO,"}\n");
4585 
4586 
4587 
4588 
4589 }
const Double_t RSTRAWDETECTORMAX
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
Int_t i
Definition: run_full.C:25
Double_t xmax
const Double_t APOTEMAMINSKEWSTRAW
Double_t
TVector3 GetPosition()
Definition: PndSttTube.cxx:87
const Double_t APOTEMAMINOUTERPARSTRAW
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void DrawBiHexagonInMacro(Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
const Double_t VERTICALGAP
const Double_t APOTEMAMAXINNERPARSTRAW
Double_t xmin
void DrawHexagonCircleInMacro(Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN
TVector3 GetWireDirection()
Definition: PndSttTube.cxx:107
void PndTrkPlotMacros2::WriteMacroSttParallelAssociatedHitsandMvdwithMC ( PndTrkPlotMacros2_InputData  In_Put,
Double_t  Oxx,
Double_t  Oyy,
Double_t  Rr,
Double_t  primoangolo,
Double_t  ultimoangolo,
Short_t  Nhits,
int  iTrack,
int  iNome,
Short_t  daSttTrackaMCTrack,
Short_t  nMvdPixelHitsAssociatedToSttTra,
Short_t  nMvdStripHitsAssociatedToSttTra,
Short_t  nSkewHitsinTrack 
)

Definition at line 4005 of file PndTrkPlotMacros2.cxx.

References PndTrkPlotMacros2_InputData::apotemamaxinnerparstraw, APOTEMAMAXINNERPARSTRAW, PndTrkPlotMacros2_InputData::apotemamaxskewstraw, APOTEMAMAXSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemaminouterparstraw, APOTEMAMINOUTERPARSTRAW, PndTrkPlotMacros2_InputData::apotemaminskewstraw, APOTEMAMINSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemastrawdetectormin, APOTEMASTRAWDETECTORMIN, Vec< T >::at(), PndTrkPlotMacros2_InputData::bfield, BFIELD, PndTrkPlotMacros2_InputData::Charge, cos(), CVEL, PndTrkPlotMacros2_InputData::cvel, PndTrkPlotMacros2_InputData::daTrackFoundaTrackMC, PndTrkPlotMacros2_InputData::dimensionscitil, DIMENSIONSCITIL, Double_t, fabs(), PndTrkPlotMacros2_InputData::FI0, PndTrkPlotMacros2_InputData::fMCTrackArray, fParticle, PndMCTrack::GetMomentum(), PndMCTrack::GetPdgCode(), PndMCTrack::GetStartVertex(), i, PndTrkPlotMacros2_InputData::InclusionListSciTil, PndTrkPlotMacros2_InputData::InclusionListStt, PndTrkPlotMacros2_InputData::info, PndTrkPlotMacros2_InputData::IVOLTE, PndTrkPlotMacros2_InputData::KAPPA, PndTrkPlotMacros2_InputData::keepit, PndTrkPlotMacros2_InputData::ListMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::ListMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::ListSciTilHitsinTrack, PndTrkPlotMacros2_InputData::ListSttParHitsinTrack, PndTrkPlotMacros2_InputData::ListSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::ListTrackCandHit, PndTrkPlotMacros2_InputData::ListTrackCandHitType, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITS, PndTrkPlotMacros2_InputData::MAXMVDPIXELHITSINTRACK, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITS, PndTrkPlotMacros2_InputData::MAXMVDSTRIPHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSCITILHITS, PndTrkPlotMacros2_InputData::MAXSCITILHITSINTRACK, PndTrkPlotMacros2_InputData::MAXSTTHITS, PndTrkPlotMacros2_InputData::maxstthitsintrack, MAXSTTHITSINTRACK, PndTrkPlotMacros2_InputData::MAXTRACKSPEREVENT, PndTrkPlotMacros2_InputData::MCMvdPixelAloneList, PndTrkPlotMacros2_InputData::MCMvdStripAloneList, PndTrkPlotMacros2_InputData::MCParalAloneList, PndTrkPlotMacros2_InputData::MCSciTilAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneList, PndTrkPlotMacros2_InputData::MCSkewAloneX, PndTrkPlotMacros2_InputData::MCSkewAloneY, PndTrkPlotMacros2_InputData::MvdPixelCommonList, PndTrkPlotMacros2_InputData::MvdPixelSpuriList, PndTrkPlotMacros2_InputData::MvdStripCommonList, PndTrkPlotMacros2_InputData::MvdStripSpuriList, PndTrkPlotMacros2_InputData::nMCMvdPixelAlone, PndTrkPlotMacros2_InputData::nMCMvdStripAlone, PndTrkPlotMacros2_InputData::nMCParalAlone, PndTrkPlotMacros2_InputData::nMCSciTilAlone, PndTrkPlotMacros2_InputData::nMCSkewAlone, PndTrkPlotMacros2_InputData::nMvdPixelCommon, PndTrkPlotMacros2_InputData::nMvdPixelHit, PndTrkPlotMacros2_InputData::nMvdPixelHitsinTrack, PndTrkPlotMacros2_InputData::nMvdPixelSpuriinTrack, PndTrkPlotMacros2_InputData::nMvdStripCommon, PndTrkPlotMacros2_InputData::nMvdStripHit, PndTrkPlotMacros2_InputData::nMvdStripHitsinTrack, PndTrkPlotMacros2_InputData::nMvdStripSpuriinTrack, PndTrkPlotMacros2_InputData::nParalCommon, PndTrkPlotMacros2_InputData::nSciTilCommon, PndTrkPlotMacros2_InputData::nSciTilHits, PndTrkPlotMacros2_InputData::nSciTilHitsinTrack, PndTrkPlotMacros2_InputData::nSciTilSpuriinTrack, PndTrkPlotMacros2_InputData::nSkewCommon, PndTrkPlotMacros2_InputData::nSpuriParinTrack, PndTrkPlotMacros2_InputData::nSttHit, PndTrkPlotMacros2_InputData::nSttParHitsinTrack, PndTrkPlotMacros2_InputData::nSttSkewHitsinTrack, PndTrkPlotMacros2_InputData::nTotalCandidates, PndTrkPlotMacros2_InputData::nTrackCandHit, PndTrkPlotMacros2_InputData::Ox, PndTrkPlotMacros2_InputData::Oy, PndTrkPlotMacros2_InputData::ParalCommonList, PndTrkPlotMacros2_InputData::ParSpuriList, PndTrkPlotMacros2_InputData::posizSciTil, R, PndTrkPlotMacros2_InputData::R, PndTrkPlotMacros2_InputData::rstrawdetectormax, RSTRAWDETECTORMAX, PndTrkPlotMacros2_InputData::SchosenSkew, PndTrkPlotMacros2_InputData::SciTilCommonList, PndTrkPlotMacros2_InputData::SciTilSpuriList, PndTrkPlotMacros2_InputData::sigmaXMvdPixel, PndTrkPlotMacros2_InputData::sigmaXMvdStrip, PndTrkPlotMacros2_InputData::sigmaYMvdPixel, PndTrkPlotMacros2_InputData::sigmaYMvdStrip, sin(), PndTrkPlotMacros2_InputData::SkewCommonList, sqrt(), VERTICALGAP, PndTrkPlotMacros2_InputData::verticalgap, PndTrkPlotMacros2_InputData::WDX, PndTrkPlotMacros2_InputData::WDY, PndTrkPlotMacros2_InputData::WDZ, xmax, xmin, PndTrkPlotMacros2_InputData::XMvdPixel, PndTrkPlotMacros2_InputData::XMvdStrip, PndTrkPlotMacros2_InputData::YMvdPixel, PndTrkPlotMacros2_InputData::YMvdStrip, PndTrkPlotMacros2_InputData::ZMvdPixel, and PndTrkPlotMacros2_InputData::ZMvdStrip.

4020 {
4021 // fine cambio_in_perl;
4022 
4023  Int_t i, j, ii; //i1, index, Kincl, nlow, nup, STATUS; //[R.K. 01/2017] unused variable?
4024 
4025  Double_t xmin , xmax, ymin, ymax,
4026  //dx, dy, diff, d1, d2, //[R.K. 01/2017] unused variable?
4027  //delta, deltax, deltay, deltaz, deltaS, //[R.K. 01/2017] unused variable?
4028  //factor, //[R.K. 01/2017] unused variable?
4029  //zmin, zmax, Smin, Smax, S1, S2, //[R.K. 01/2017] unused variable?
4030  //y1, y2,x1,x2, //z1, z2, //[R.K. 01/2017] unused variable?
4031  //vx1, vy1, vz1, C0x1, C0y1, C0z1, //[R.K. 01/2017] unused variable?
4032  aaa, bbb; //ccc, angle, minor, major, //[R.K. 01/2017] unused variable?
4033  //distance, Rx, Ry, LL, //[R.K. 01/2017] unused variable?
4034  //Aellipsis1, Bellipsis1,fi1, //[R.K. 01/2017] unused variable?
4035  //fmin, fmax, offset, step, //[R.K. 01/2017] unused variable?
4036  //zpos, zpos1, zpos2, //[R.K. 01/2017] unused variable?
4037  //Tiltdirection1[2], //[R.K. 01/2017] unused variable?
4038  //zl[200],zu[200], //[R.K. 01/2017] unused variable?
4039  //POINTS1[6]; //[R.K. 01/2017] unused variable?
4040 
4041 // istruzione per perl : da qui non usare cambia_cxx ;
4042 
4043 // conversioni in variabili locali;
4044 
4045  //int MAXMCTRACKS = In_Put.MAXMCTRACKS; //[R.K. 01/2017] unused variable?
4046  //int MAXMVDPIXELHITS = In_Put.MAXMVDPIXELHITS; //[R.K. 01/2017] unused variable?
4047  int MAXMVDPIXELHITSINTRACK = In_Put.MAXMVDPIXELHITSINTRACK;
4048  //int MAXMVDSTRIPHITS = In_Put.MAXMVDSTRIPHITS; //[R.K. 01/2017] unused variable?
4049  //int MAXMVDSTRIPHITSINTRACK = In_Put.MAXMVDSTRIPHITSINTRACK; //[R.K. 01/2017] unused variable?
4050  //int MAXSCITILHITS = In_Put.MAXSCITILHITS; //[R.K. 01/2017] unused variable?
4051  int MAXSCITILHITSINTRACK = In_Put.MAXSCITILHITSINTRACK;
4052  int MAXSTTHITS = In_Put.MAXSTTHITS;
4053  int MAXSTTHITSINTRACK = In_Put.maxstthitsintrack;
4054  //int MAXTRACKSPEREVENT = In_Put.MAXTRACKSPEREVENT; //[R.K. 01/2017] unused variable?
4055  //int dime = MAXSTTHITSINTRACK+MAXMVDPIXELHITSINTRACK+
4056  //MAXMVDSTRIPHITSINTRACK+MAXSCITILHITSINTRACK; //[R.K. 01/2017] unused variable?
4057 
4062  Double_t BFIELD = In_Put.bfield;
4063 
4064  Vec<Short_t> Charge(In_Put.Charge,In_Put.MAXTRACKSPEREVENT,"Charge");
4065 
4066  Double_t CVEL = In_Put.cvel;
4067  Vec<Short_t> daTrackFoundaTrackMC(In_Put.daTrackFoundaTrackMC,In_Put.MAXTRACKSPEREVENT,
4068  "daTrackFoundaTrackMC") ;
4070  //bool doMcComparison = In_Put.doMcComparison; //[R.K. 01/2017] unused variable?
4071  Vec<Double_t> FI0(In_Put.FI0,In_Put.MAXTRACKSPEREVENT,"FI0") ;
4072  TClonesArray *fMCTrackArray = In_Put.fMCTrackArray;
4073  //TClonesArray *fSttPointArray = In_Put.fSttPointArray; //[R.K. 01/2017] unused variable?
4074 
4075  Vec<Double_t> info(In_Put.info,In_Put.MAXSTTHITS*7,"info") ; // dimensione originale : [MAXSTTHITS][7];
4076 
4077  Vec<bool> InclusionListSciTil(In_Put.InclusionListSciTil,In_Put.MAXSCITILHITS,"InclusionListSciTil") ;
4078  Vec<bool> InclusionListStt(In_Put.InclusionListStt,In_Put.MAXSTTHITS,"InclusionListStt") ;
4079  int IVOLTE = In_Put.IVOLTE;
4080  Vec<Double_t> KAPPA(In_Put.KAPPA,In_Put.MAXTRACKSPEREVENT,"KAPPA") ;
4081  Vec<bool> keepit(In_Put.keepit,In_Put.MAXTRACKSPEREVENT,"keepit") ;
4082  //int istampa = In_Put.istampa; //[R.K. 01/2017] unused variable?
4083 
4084  Vec<Short_t> ListMvdPixelHitsinTrack(In_Put.ListMvdPixelHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXMVDPIXELHITSINTRACK,"ListMvdPixelHitsinTrack") ;
4085 
4086 
4087  Vec<Short_t> ListMvdStripHitsinTrack(In_Put.ListMvdStripHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXMVDSTRIPHITSINTRACK,"ListMvdStripHitsinTrack") ;
4088 
4089 
4090  Vec<Short_t> ListSciTilHitsinTrack(In_Put.ListSciTilHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.MAXSCITILHITSINTRACK,"ListSciTilHitsinTrack") ;
4091 
4092 
4093  Vec<Short_t> ListSttParHitsinTrack(In_Put.ListSttParHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ListSttParHitsinTrack") ;
4094 
4095 
4096  Vec<Short_t> ListSttSkewHitsinTrack(In_Put.ListSttSkewHitsinTrack,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ListSttSkewHitsinTrack") ;
4097 
4098 
4099  Vec<Short_t> ListTrackCandHit(In_Put.ListTrackCandHit,
4100  In_Put.MAXTRACKSPEREVENT + In_Put.maxstthitsintrack
4102  In_Put.MAXSCITILHITSINTRACK,"ListTrackCandHit") ;
4103 
4104  Vec<Short_t>ListTrackCandHitType(In_Put.ListTrackCandHitType,
4105  In_Put.MAXTRACKSPEREVENT + In_Put.maxstthitsintrack
4107  In_Put.MAXSCITILHITSINTRACK,"ListTrackCandHitType") ;
4108 
4109 
4110  Vec<Short_t> MCMvdPixelAloneList(In_Put.MCMvdPixelAloneList,In_Put.nTotalCandidates*In_Put.nMvdPixelHit,"MCMvdPixelAloneList") ;
4111 
4112 
4113  Vec<Short_t> MCMvdStripAloneList(In_Put.MCMvdStripAloneList,In_Put.nTotalCandidates*In_Put.nMvdStripHit,"MCMvdStripAloneList") ;
4114 
4115 
4116  Vec<Short_t> MCParalAloneList(In_Put.MCParalAloneList,In_Put.MAXTRACKSPEREVENT*In_Put.nSttHit,"MCParalAloneList") ;
4117 
4118 
4119  Vec<Short_t> MCSkewAloneList(In_Put.MCSkewAloneList,In_Put.MAXTRACKSPEREVENT*In_Put.nSttHit,"MCSkewAloneList") ;
4120 
4121 
4122  Vec<Double_t> MCSkewAloneX(In_Put.MCSkewAloneX,In_Put.MAXSTTHITS,"MCSkewAloneX") ;
4123  Vec<Double_t> MCSkewAloneY(In_Put.MCSkewAloneY,In_Put.MAXSTTHITS,"MCSkewAloneY") ;
4124 
4125  Vec<Short_t> MvdPixelCommonList(In_Put.MvdPixelCommonList,In_Put.nTotalCandidates*In_Put.MAXMVDPIXELHITSINTRACK,"MvdPixelCommonList") ;
4126 
4127 
4128  Vec<Short_t> MvdPixelSpuriList(In_Put.MvdPixelSpuriList,In_Put.nTotalCandidates*In_Put.MAXMVDPIXELHITSINTRACK,"MvdPixelSpuriList") ;
4129 
4130 
4131  Vec<Short_t> MvdStripCommonList(In_Put.MvdStripCommonList,In_Put.nTotalCandidates*In_Put.MAXMVDSTRIPHITSINTRACK,"MvdStripCommonList") ;
4132 
4133 
4134  Vec<Short_t> MvdStripSpuriList(In_Put.MvdStripSpuriList,In_Put.nTotalCandidates*In_Put.MAXMVDSTRIPHITSINTRACK,"MvdStripSpuriList") ;
4135 
4136  Vec<Short_t> nMCMvdPixelAlone(In_Put.nMCMvdPixelAlone,In_Put.nTotalCandidates,"nMCMvdPixelAlone") ;
4137  Vec<Short_t> nMCMvdStripAlone(In_Put.nMCMvdStripAlone,In_Put.nTotalCandidates,"nMCMvdStripAlone") ;
4138 
4139  Vec<Short_t> nMCParalAlone(In_Put.nMCParalAlone,In_Put.MAXTRACKSPEREVENT,"nMCParalAlone") ;
4140  Vec<Short_t> nMCSkewAlone(In_Put.nMCSkewAlone,In_Put.MAXTRACKSPEREVENT,"nMCSkewAlone") ;
4141 
4142  //Short_t nMCTracks = In_Put.nMCTracks; //[R.K. 01/2017] unused variable?
4143 
4144  Vec<Short_t> nMvdPixelCommon(In_Put.nMvdPixelCommon,In_Put.nTotalCandidates,"nMvdPixelCommon") ;
4145  //Short_t nMvdPixelHit = In_Put.nMvdPixelHit; //[R.K. 01/2017] unused variable?
4146  Vec<Short_t> nMvdPixelHitsinTrack(In_Put.nMvdPixelHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdPixelHitsinTrack") ;
4147  Vec<Short_t> nMvdPixelSpuriinTrack(In_Put.nMvdPixelSpuriinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdPixelSpuriinTrack") ;
4148 
4149  Vec<Short_t> nMvdStripCommon(In_Put.nMvdStripCommon,In_Put.nTotalCandidates,"nMvdStripCommon") ;
4150  //Short_t nMvdStripHit = In_Put.nMvdStripHit; //[R.K. 01/2017] unused variable?
4151  Vec<Short_t> nMvdStripHitsinTrack(In_Put.nMvdStripHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nMvdStripHitsinTrack") ;
4152  Vec<Short_t> nMvdStripSpuriinTrack(In_Put.nMvdStripSpuriinTrack,In_Put.nTotalCandidates,"nMvdStripSpuriinTrack") ;
4153 
4154 
4155  Vec<Short_t> nParalCommon(In_Put.nParalCommon,In_Put.MAXTRACKSPEREVENT,"nParalCommon") ;
4156 
4157  //Short_t nSciTilHits = In_Put.nSciTilHits; //[R.K. 01/2017] unused variable?
4158 
4159  Vec<Short_t> nSciTilHitsinTrack(In_Put.nSciTilHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSciTilHitsinTrack") ;
4160 
4161  Vec<Short_t> nSkewCommon(In_Put.nSkewCommon,In_Put.MAXTRACKSPEREVENT,"nSkewCommon") ;
4162 
4163  Vec<Short_t> nSpuriParinTrack(In_Put.nSpuriParinTrack,In_Put.MAXTRACKSPEREVENT,"nSpuriParinTrack") ;
4164 
4165  //Int_t nSttHit = In_Put.nSttHit; //[R.K. 01/2017] unused variable?
4166  //Int_t nSttParHit = In_Put.nSttParHit; //[R.K. 01/2017] unused variable?
4167  Vec<Short_t> nSttParHitsinTrack(In_Put.nSttParHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSttParHitsinTrack") ;
4168  //Int_t nSttSkewHit = In_Put.nSttSkewHit; //[R.K. 01/2017] unused variable?
4169  Vec<Short_t> nSttSkewHitsinTrack(In_Put.nSttSkewHitsinTrack,In_Put.MAXTRACKSPEREVENT,"nSttSkewHitsinTrack") ;
4170 
4171  //Short_t nTotalCandidates = In_Put.nTotalCandidates; //[R.K. 01/2017] unused variable?
4172  Vec<Short_t> nTrackCandHit(In_Put.nTrackCandHit,In_Put.MAXTRACKSPEREVENT,"nTrackCandHit") ;
4173 
4174  Vec<Double_t> Ox(In_Put.Ox,In_Put.MAXTRACKSPEREVENT,"Ox") ;
4175  Vec<Double_t> Oy(In_Put.Oy,In_Put.MAXTRACKSPEREVENT,"Oy") ;
4176 
4177  Vec<Short_t> ParalCommonList(In_Put.ParalCommonList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ParalCommonList") ;
4178 
4179 
4180  Vec<Short_t> ParSpuriList(In_Put.ParSpuriList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"ParSpuriList") ;
4181 
4182 
4183  // dimensione originale : [MAXSCITILHITS][3];
4184  Vec<Double_t> posizSciTil(In_Put.posizSciTil,In_Put.MAXSCITILHITS*3,"posizSciTil") ;
4185 
4186 
4187  Vec<Double_t> R(In_Put.R,In_Put.MAXTRACKSPEREVENT,"R") ;
4188 
4191 
4192  Vec<Double_t> sigmaXMvdPixel(In_Put.sigmaXMvdPixel,In_Put.MAXMVDPIXELHITS,"sigmaXMvdPixel") ;
4193  Vec<Double_t> sigmaXMvdStrip(In_Put.sigmaXMvdStrip,In_Put.MAXMVDSTRIPHITS,"sigmaXMvdStrip") ;
4194  Vec<Double_t> sigmaYMvdPixel(In_Put.sigmaYMvdPixel,In_Put.MAXMVDPIXELHITS,"sigmaYMvdPixel") ;
4195  Vec<Double_t> sigmaYMvdStrip(In_Put.sigmaYMvdStrip,In_Put.MAXMVDSTRIPHITS,"sigmaYMvdStrip") ;
4196 
4197  Vec<Double_t> SchosenSkew(In_Put.SchosenSkew,In_Put.MAXTRACKSPEREVENT*In_Put.MAXSTTHITS,"SchosenSkew") ;
4198 
4199  Vec<Short_t> SkewCommonList(In_Put.SkewCommonList,In_Put.MAXTRACKSPEREVENT*In_Put.maxstthitsintrack,"SkewCommonList") ;
4200 
4201  Double_t VERTICALGAP = In_Put.verticalgap;
4202  Vec<Double_t> XMvdPixel(In_Put.XMvdPixel,In_Put.MAXMVDPIXELHITS,"XMvdPixel") ;
4203  Vec<Double_t> XMvdStrip(In_Put.XMvdStrip,In_Put.MAXMVDSTRIPHITS,"XMvdStrip") ;
4204  Vec<Double_t> YMvdPixel(In_Put.YMvdPixel,In_Put.MAXMVDPIXELHITS,"YMvdPixel") ;
4205  Vec<Double_t> YMvdStrip(In_Put.YMvdStrip,In_Put.MAXMVDSTRIPHITS,"YMvdStrip") ;
4206  Vec<Double_t> WDX(In_Put.WDX,In_Put.MAXSTTHITS,"WDX") ;
4207  Vec<Double_t> WDY(In_Put.WDY,In_Put.MAXSTTHITS,"WDY") ;
4208  Vec<Double_t> WDZ(In_Put.WDZ,In_Put.MAXSTTHITS,"WDZ") ;
4209  Vec<Double_t> ZMvdPixel(In_Put.ZMvdPixel,In_Put.MAXMVDPIXELHITS,"ZMvdPixel") ;
4210  Vec<Double_t> ZMvdStrip(In_Put.ZMvdStrip,In_Put.MAXMVDSTRIPHITS,"ZMvdStrip") ;
4211 
4212 // istruzione per perl : da qui usa cambia_cxx ;
4213 
4214 //---------- parallel straws Macro now
4215  char nome[300], nome2[300];
4216  sprintf(nome,"MacroSttMvdXYwithMCEvent%dT%d", IVOLTE,iNome);
4217  sprintf(nome2,"%s.C",nome);
4218  FILE * MACRO = fopen(nome2,"w");
4219  fprintf(MACRO,"{\n");
4220 
4221 
4222  xmin=-1.3*RSTRAWDETECTORMAX;
4223  xmax=1.3*RSTRAWDETECTORMAX;
4224  ymin=-1.3*RSTRAWDETECTORMAX;
4225  ymax=1.3*RSTRAWDETECTORMAX;
4226 
4227 
4228 
4229  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
4230  xmin,ymin,xmax,ymax);
4231 
4232 
4233 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
4234 
4235  char myname[100];
4236 
4237  sprintf(myname, "InnerPar");
4239  VERTICALGAP,
4240  MACRO,
4241  APOTEMASTRAWDETECTORMIN,
4242  APOTEMAMAXINNERPARSTRAW,
4243  4, // color code, 4= blue.
4244  myname
4245  );
4246 //--------------
4247 // disegna il BiHexagon destro e sinistro delle skew straws.
4248  sprintf(myname, "Skew");
4250  VERTICALGAP,
4251  MACRO,
4252  APOTEMAMINSKEWSTRAW,
4253  APOTEMAMAXSKEWSTRAW,
4254  2, // color code.
4255  myname
4256  );
4257 //--------------
4258 // disegna il BiHexagon destro e sinistro delle outer parallel.
4259  sprintf(myname, "OuterPar");
4261  VERTICALGAP,
4262  MACRO,
4263  APOTEMAMINOUTERPARSTRAW,
4264  RSTRAWDETECTORMAX,
4265  4, // color code.
4266  myname
4267  );
4268 //--------------
4269 
4270 //---- disegna gli Scitil.
4271 
4272  // prima la lista di SciTil 'common' :
4273  for(i=0;i<In_Put.nSciTilCommon[iTrack];i++){
4274  j=In_Put.SciTilCommonList[iTrack*MAXSCITILHITSINTRACK+i];
4276  1, // color code; the same as in SetColor of root;
4277  DIMENSIONSCITIL,
4278  MACRO,
4279  posizSciTil.at(j*3+0),
4280  posizSciTil.at(j*3+1),
4281  j,
4282  0 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
4283  // SciTil draw in UV.
4284  );
4285  }
4286  // poi la lista di SciTil 'spuri' :
4287  for(i=0;i<In_Put.nSciTilSpuriinTrack[iTrack];i++){
4288  j=In_Put.SciTilSpuriList[iTrack*MAXSCITILHITSINTRACK+i];
4290  2, // color code; the same as in SetColor of root;
4291  DIMENSIONSCITIL,
4292  MACRO,
4293  posizSciTil.at(j*3+0),
4294  posizSciTil.at(j*3+1),
4295  j,
4296  0 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
4297  // SciTil draw in UV.
4298  );
4299  }
4300  // poi la lista di SciTil 'alone' :
4301  for(i=0;i<In_Put.nMCSciTilAlone[iTrack];i++){
4302  j=In_Put.MCSciTilAloneList[iTrack*In_Put.nSciTilHits+i];
4304  4, // color code; the same as in SetColor of root;
4305  DIMENSIONSCITIL,
4306  MACRO,
4307  posizSciTil.at(j*3+0),
4308  posizSciTil.at(j*3+1),
4309  j,
4310  0 // if 0 then SciTil draw in XY; if 1 then SciTil draw in SZ; else
4311  // SciTil draw in UV.
4312  );
4313  }
4314 
4315 // --------------------------------
4316 
4317 
4318 
4319  fprintf(MACRO,"TEllipse* FoundTrack = new TEllipse(%f,%f,%f,%f,%f,%f);\n"
4320  ,Oxx,Oyy,Rr,Rr,primoangolo,ultimoangolo);
4321 
4322  fprintf(MACRO,
4323  "FoundTrack->SetLineColor(2);\nFoundTrack->SetFillStyle(0);\nFoundTrack->Draw(\"only\");\n");
4324 
4325 
4326  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
4327 
4328 
4329 
4330 
4331 //------------- hits paralleli in comune con traccia MC
4332  for( ii=0; ii< nParalCommon.at(iTrack); ii++) {
4333  i = ParalCommonList.at(iTrack*MAXSTTHITSINTRACK+ii) ;
4334  fprintf(MACRO,
4335  "TEllipse* CommonParalHit%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nCommonParalHit%d->SetFillStyle(0);\nCommonParalHit%d->Draw();\n",
4336  i,info[i*7+0],info.at(i*7+1),info.at(i*7+3),info.at(i*7+3),i,i);
4337  }
4338 //------------- hits paralleli spuri
4339  for( ii=0; ii< nSpuriParinTrack.at(iTrack); ii++) {
4340  i = ParSpuriList.at(iTrack*MAXSTTHITSINTRACK+ii) ;
4341  fprintf(MACRO,
4342  "TEllipse* SpurParalHit%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nSpurParalHit%d->SetFillStyle(0);\nSpurParalHit%d->SetLineColor(2);\nSpurParalHit%d->Draw();\n",
4343  i,info[i*7+0],info.at(i*7+1),info.at(i*7+3),info.at(i*7+3),i,i,i);
4344  }
4345 //------------- hits paralleli MC 'alone'
4346  for( ii=0; ii< nMCParalAlone.at(iTrack); ii++) {
4347  i = MCParalAloneList.at(iTrack*In_Put.nSttHit+ii) ;
4348  fprintf(MACRO,
4349  "TEllipse* AloneParalHit%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nAloneParalHit%d->SetFillStyle(0);\nAloneParalHit%d->SetLineColor(4);\nAloneParalHit%d->Draw();\n",
4350  i,info[i*7+0],info.at(i*7+1),info.at(i*7+3),info.at(i*7+3),i,i,i);
4351  }
4352 
4353 //-------------
4354 //------------- hits skew in comune e spuri di traccia MC
4355 
4356  for( i=0; i< nSkewHitsinTrack; i++) {
4357  ii = ListSttSkewHitsinTrack.at(iTrack*MAXSTTHITSINTRACK+i);
4358  aaa=Oxx+Rr*cos(SchosenSkew.at(iTrack*MAXSTTHITS+ii));
4359  bbb=Oyy+Rr*sin(SchosenSkew.at(iTrack*MAXSTTHITS+ii));
4360  bool flaggo = true;
4361  for( int k=0; k<nSkewCommon.at(iTrack);k++){
4362  if( SkewCommonList.at(iTrack*MAXSTTHITSINTRACK+k)== ii){
4363  fprintf(MACRO,"TMarker* CommonSkewHit%d = new TMarker(%f,%f,%d);\n",
4364  ii,aaa,bbb,28);
4365  fprintf(MACRO,"CommonSkewHit%d->SetMarkerColor(1);\nCommonSkewHit%d->Draw();\n"
4366  ,ii,ii);
4367  flaggo = false;
4368  break;
4369  }
4370  }
4371  if(flaggo){
4372  fprintf(MACRO,"TMarker* SpurSkewHit%d = new TMarker(%f,%f,%d);\n",
4373  ii,aaa,bbb,28);
4374  fprintf(MACRO,"SpurSkewHit%d->SetMarkerColor(2);\nSpurSkewHit%d->Draw();\n",ii,ii);
4375  }
4376 
4377  }
4378 //------------- hits skew MC 'alone'
4379  for( ii=0; ii< nMCSkewAlone.at(iTrack); ii++) {
4380  i = MCSkewAloneList.at(iTrack*In_Put.nSttHit+ii) ;
4381  fprintf(MACRO,
4382  "TMarker* AloneSkewHit%d = new TMarker(%f,%f,%d);\nAloneSkewHit%d->SetMarkerColor(4);\nAloneSkewHit%d->Draw();\n",
4383  i,MCSkewAloneX.at(i),MCSkewAloneY.at(i),28,i,i);
4384  }
4385 
4386 //------------- now the Strips
4387 
4388  for( i=0; i< nMvdStripHitsAssociatedToSttTra; i++) {
4389  ii = ListMvdStripHitsinTrack.at(iTrack*In_Put.MAXMVDSTRIPHITSINTRACK+i);
4390  //x1= XMvdStrip.at(ii)-sigmaXMvdStrip.at(ii); //[R.K. 9/2018] unused
4391  //x2= XMvdStrip.at(ii)+sigmaXMvdStrip.at(ii); //[R.K. 9/2018] unused
4392  //y1= YMvdStrip.at(ii)-sigmaYMvdStrip.at(ii); //[R.K. 9/2018] unused
4393  //y2= YMvdStrip.at(ii)+sigmaYMvdStrip.at(ii); //[R.K. 9/2018] unused
4394 
4395  bool flaggo=true;
4396  for( int k=0; k<nMvdStripCommon.at(iTrack);k++){
4397  if( MvdStripCommonList.at(iTrack*In_Put.MAXMVDSTRIPHITSINTRACK+k)== ii){
4398  fprintf(MACRO,"TMarker* CommonMvdStrip%d = new TMarker(%f,%f,%d);\n",
4399  ii,XMvdStrip.at(ii),YMvdStrip.at(ii),25);
4400  fprintf(MACRO,"CommonMvdStrip%d->SetMarkerColor(1);\nCommonMvdStrip%d->Draw();\n",
4401  ii,ii);
4402  flaggo=false;
4403  break;
4404  }
4405  }
4406  if(flaggo){
4407  fprintf(MACRO,"TMarker* SpurMvdStrip%d = new TMarker(%f,%f,%d);\n",
4408  ii,XMvdStrip.at(ii),YMvdStrip.at(ii),25);
4409  fprintf(MACRO,"SpurMvdStrip%d->SetMarkerColor(2);\nSpurMvdStrip%d->Draw();\n",ii,ii);
4410  }
4411 
4412 
4413  }
4414 
4415 //-------------- hit Mvd Strips 'Alone'
4416  for( ii=0; ii< nMCMvdStripAlone.at(iTrack); ii++) {
4417  i = MCMvdStripAloneList.at(iTrack*In_Put.nMvdStripHit+ii) ;
4418  fprintf(MACRO,
4419  "TMarker* AloneMvdStrip%d = new TMarker(%f,%f,%d);\nAloneMvdStrip%d->SetMarkerColor(4);\nAloneMvdStrip%d->Draw();\n",
4420  i,XMvdStrip.at(i),YMvdStrip.at(i),25,i,i);
4421  }
4422 //-------------
4423 
4424  for( i=0; i< nMvdPixelHitsAssociatedToSttTra; i++) {
4425  ii = ListMvdPixelHitsinTrack.at(iTrack*MAXMVDPIXELHITSINTRACK+i);
4426  //x1= XMvdPixel.at(ii)-sigmaXMvdPixel.at(ii); //[R.K. 9/2018] unused
4427  //x2= XMvdPixel.at(ii)+sigmaXMvdPixel.at(ii); //[R.K. 9/2018] unused
4428  //y1= YMvdPixel.at(ii)-sigmaYMvdPixel.at(ii); //[R.K. 9/2018] unused
4429  //y2= YMvdPixel.at(ii)+sigmaYMvdPixel.at(ii); //[R.K. 9/2018] unused
4430 
4431  bool flaggo=true;
4432  for( int k=0; k<nMvdPixelCommon.at(iTrack);k++){
4433 if( MvdPixelCommonList.at(iTrack*In_Put.MAXMVDPIXELHITSINTRACK+k)== ii){
4434  fprintf(MACRO,"TMarker* CommonMvdPixel%d = new TMarker(%f,%f,%d);\n",
4435  ii,XMvdPixel.at(ii),YMvdPixel.at(ii),26);
4436  fprintf(MACRO,"CommonMvdPixel%d->SetMarkerColor(1);\nCommonMvdPixel%d->Draw();\n",
4437  ii,ii);
4438  flaggo=false;
4439  break;
4440  }
4441  }
4442  if(flaggo){
4443  fprintf(MACRO,"TMarker* SpurMvdPixel%d = new TMarker(%f,%f,%d);\n",
4444  ii,XMvdPixel.at(ii),YMvdPixel.at(ii),26);
4445  fprintf(MACRO,"SpurMvdPixel%d->SetMarkerColor(2);\nSpurMvdPixel%d->Draw();\n",ii,ii);
4446  }
4447 
4448 
4449  }
4450 
4451 //-------------- hit Mvd Pixel 'Alone'
4452  for( ii=0; ii< nMCMvdPixelAlone.at(iTrack); ii++) {
4453  i = MCMvdPixelAloneList.at(iTrack*In_Put.nMvdPixelHit+ii) ;
4454  fprintf(MACRO,
4455  "TMarker* AloneMvdPixel%d = new TMarker(%f,%f,%d);\nAloneMvdPixel%d->SetMarkerColor(4);\nAloneMvdPixel%d->Draw();\n",
4456  i,XMvdPixel.at(i),YMvdPixel.at(i),26,i,i);
4457  }
4458 //-------------
4459 //----------------- ora la traccia MC corrispondente a questa traccia Stt
4460  if( daSttTrackaMCTrack>-1 ) {
4461  Int_t icode, im;
4462  Double_t r_r, o_x, o_y, Cx, Cy, Px, Py, carica ;// Dd, Fifi //[R.K. 01/2017] unused variable?
4463  PndMCTrack* pMC;
4464  im=daSttTrackaMCTrack;
4465  pMC = (PndMCTrack*) fMCTrackArray->At(im);
4466  if ( pMC ) {
4467  icode = pMC->GetPdgCode() ; // PDG code of track
4468  o_x = pMC->GetStartVertex().X(); // X of starting point track
4469  o_y = pMC->GetStartVertex().Y(); // Y of starting point track
4470  Px = pMC->GetMomentum().X();
4471  Py = pMC->GetMomentum().Y();
4472  aaa = sqrt( Px*Px + Py*Py);
4473  r_r = aaa*1000./(BFIELD*CVEL); // R (cm) of Helix of track projected in XY plane; B = 2 Tesla
4474  TDatabasePDG *fdbPDG= TDatabasePDG::Instance();
4475  TParticlePDG *fParticle= fdbPDG->GetParticle(icode);
4476  if (icode>1000000000) carica = 1.;
4477  else carica = fParticle->Charge()/3. ; // charge of track
4478  if (fabs(carica)>=0.1 ){
4479  Cx = o_x + Py*1000./(BFIELD*CVEL*carica);
4480  Cy = o_y - Px*1000./(BFIELD*CVEL*carica);
4481  fprintf(MACRO,
4482 "TEllipse* MC%d = new TEllipse(%f,%f,%f,%f,%f,%f);\nMC%d->SetFillStyle(0);\nMC%d->SetLineColor(3);\nMC%d->Draw(\"only\");\n",
4483  im,Cx,Cy,r_r,r_r,0.,360.,im,im,im);
4484  } // end of if (fabs(carica)>=0.1 )
4485  } // end if ( pMC )
4486  };// end of if( daSttTrackaMCTrack>-1
4487 //----------- fine parte del MC
4488  fprintf(MACRO,"}\n");
4489  fclose(MACRO);
4490 
4491 
4492  return ;
4493 
4494 }
const Double_t RSTRAWDETECTORMAX
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
void disegnaSciTilHit(int colorcode, Double_t DIMENSIONSCITIL, FILE *MACRO, double posx, double posy, int ScitilHit, int tipo)
Int_t i
Definition: run_full.C:25
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Double_t xmax
TVector3 GetMomentum() const
Definition: PndMCTrack.h:78
const Double_t APOTEMAMINSKEWSTRAW
const Double_t BFIELD
Int_t * fParticle
Definition: run_full.C:24
Double_t
const Double_t APOTEMAMINOUTERPARSTRAW
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
void DrawBiHexagonInMacro(Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
const Double_t VERTICALGAP
const Double_t APOTEMAMAXINNERPARSTRAW
const int MAXSTTHITSINTRACK
const Double_t CVEL
Double_t xmin
void DrawHexagonCircleInMacro(Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
TVector3 GetStartVertex() const
Definition: PndMCTrack.h:76
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN
Double_t R
Definition: checkhelixhit.C:61
const Double_t DIMENSIONSCITIL
void PndTrkPlotMacros2::WriteMacroSttParallelExternal ( PndTrkPlotMacros2_InputData  In_Put)

Definition at line 4595 of file PndTrkPlotMacros2.cxx.

References PndTrkPlotMacros2_InputData::apotemamaxinnerparstraw, APOTEMAMAXINNERPARSTRAW, PndTrkPlotMacros2_InputData::apotemamaxskewstraw, APOTEMAMAXSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemaminouterparstraw, APOTEMAMINOUTERPARSTRAW, PndTrkPlotMacros2_InputData::apotemaminskewstraw, APOTEMAMINSKEWSTRAW, PndTrkPlotMacros2_InputData::apotemastrawdetectormin, APOTEMASTRAWDETECTORMIN, Double_t, PndSttTube::GetPosition(), i, PndTrkPlotMacros2_InputData::number_straws, PndTrkPlotMacros2_InputData::rstrawdetectormax, RSTRAWDETECTORMAX, PndTrkPlotMacros2_InputData::StrawCode, PndTrkPlotMacros2_InputData::StrawCode2, PndTrkPlotMacros2_InputData::SttTubeArray, VERTICALGAP, PndTrkPlotMacros2_InputData::verticalgap, xmax, and xmin.

4597  {
4598 //---------- parallel straws Macro now
4599  char nome[300], nome2[300];
4600  sprintf(nome,"MacroSttParallelExternal");
4601  sprintf(nome2,"%s.C",nome);
4602  FILE * MACRO = fopen(nome2,"w");
4603  fprintf(MACRO,"{\n");
4604 
4607  VERTICALGAP = In_Put.verticalgap,
4612 
4613 
4614 
4615  double xmin=-1.3*RSTRAWDETECTORMAX;
4616  double xmax=1.3*RSTRAWDETECTORMAX;
4617  double ymin=-1.3*RSTRAWDETECTORMAX;
4618  double ymax=1.3*RSTRAWDETECTORMAX;
4619 
4620 
4621  fprintf(MACRO,"TCanvas* my= new TCanvas();\nmy->Range(%f,%f,%f,%f);\n",
4622  xmin,ymin,xmax,ymax);
4623 // disegna il BiHexagon destro e sinistro delle inner parallel straws.
4624 
4625  char myname[100];
4626 
4627  sprintf(myname, "InnerPar");
4629  VERTICALGAP,
4630  MACRO,
4633  4, // color code, 4= blue.
4634  myname
4635  );
4636 //--------------
4637 // disegna il BiHexagon destro e sinistro delle skew straws.
4638  sprintf(myname, "Skew");
4640  VERTICALGAP,
4641  MACRO,
4644  2, // color code.
4645  myname
4646  );
4647 //--------------
4648 // disegna il BiHexagon destro e sinistro delle outer parallel.
4649  sprintf(myname, "OuterPar");
4651  VERTICALGAP,
4652  MACRO,
4654  RSTRAWDETECTORMAX,
4655  4, // color code.
4656  myname
4657  );
4658 //--------------
4659 
4660  disegnaAssiXY(MACRO,xmin,xmax,ymin,ymax);
4661 
4662 //------------- disegna tutti gli hit paralleli della corteccia esterna;
4663  for( int i=0; i< In_Put.number_straws ; i++) {
4664  if( In_Put.StrawCode[i] == 13 || In_Put.StrawCode[i] == 23 || In_Put.StrawCode2[i] == 13 || In_Put.StrawCode2[i] == 23 ) {
4665  PndSttTube* pSttTube = (PndSttTube*) In_Put.SttTubeArray->At(i+1);
4666  TVector3 center = pSttTube->GetPosition();
4667 
4668  fprintf(MACRO,
4669  "TEllipse* ParalTube%d = new TEllipse(%f,%f,%f,%f,0.,360.);\nParalTube%d->SetFillStyle(0);\nParalTube%d->Draw();\n",
4670  i+1,center.X(),center.Y(),0.5,0.5,i+1,i+1);
4671  }
4672  }
4673 //------------- hits paralleli spuri
4674 
4675  fprintf(MACRO,"}\n");
4676 
4677 
4678 
4679 
4680 }
const Double_t RSTRAWDETECTORMAX
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
Int_t i
Definition: run_full.C:25
Double_t xmax
const Double_t APOTEMAMINSKEWSTRAW
Double_t
TVector3 GetPosition()
Definition: PndSttTube.cxx:87
const Double_t APOTEMAMINOUTERPARSTRAW
void DrawBiHexagonInMacro(Double_t vgap, FILE *MACRO, Double_t Ami, Double_t Ama, Short_t color, char *name)
const Double_t VERTICALGAP
const Double_t APOTEMAMAXINNERPARSTRAW
Double_t xmin
void DrawHexagonCircleInMacro(Double_t GAP, FILE *MACRO, Double_t ApotemaMin, Double_t Rma, Short_t color, char *name)
const Double_t APOTEMAMAXSKEWSTRAW
const Double_t APOTEMASTRAWDETECTORMIN

The documentation for this class was generated from the following files: