KaliVeda
Toolkit for HIC analysis
KVIDGCsI.cpp
1 #include "KVIDGCsI.h"
2 #include "KVIDCutLine.h"
3 #include "KVIDCsIRLLine.h"
4 #include "KVIdentificationResult.h"
5 
7 
8 
9 
13 {
14  //Default constructor
15  IMFLine = 0;
16  GammaLine = 0;
17 }
18 
19 
20 
23 
25 {
26  //Copy constructor
27  IMFLine = 0;
28  GammaLine = 0;
29 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
30  grid.Copy(*this);
31 #else
32  ((KVIDGCsI&) grid).Copy(*this);
33 #endif
34 }
35 
36 
37 
38 
41 
42 KVIDGCsI::~KVIDGCsI()
43 {
44  //Dtor.
45 }
46 
47 
48 
49 
52 
54 {
55  // \returns true for points below the 'gamma_line' cut in grid
56 
57  if (!GammaLine) return kFALSE;
58  else if ((x < GammaLine->GetX()[0]) && (x < GammaLine->GetX()[GammaLine->GetN() - 1])) return kFALSE;
59  else if (GammaLine->WhereAmI(x, y, "above")) return kFALSE;
60  return kTRUE;
61 }
62 
63 
64 
65 // small utility class which adds the IMF line to the identifier list when constructed,
66 // and removes it when it goes out of scope i.e. whenever the program leaves the Identify method
67 
69 
73  add_remove_imf_line(const KVList& l, KVIDLine* i) : idlines(const_cast<KVList*>(&l)), imfline(i)
74  {
76  }
78  {
80  }
81 };
82 
83 
84 
96 
98 {
99  // Set Z and A of nucleus based on position in R-L grid
100  // The identification of gammas (kICODE10) and charged particles is performed
101  //
102  // ### Note
103  // for isotopically identified particles, the integer A (KVNucleus::GetA) is the mass assigned to the closest line
104  // [unless the closest line is the IMF line, in which case we use the closest identifier line],
105  // whereas the floating-point A (KVReconstructedNucleus::GetRealA) is calculated by interpolation.
106  // the integer A is not necessarily = nint(floating-point A): for example, if no 5He line is drawn in the grid
107  // (which is usually the case), there will be no isotopically-identified particle with GetA()=5, although
108  // there may be particles with GetRealA() between 4.5 and 5.5
109 
110  if(is_a_gamma(x,y))
111  {
112  const_cast < KVIDGCsI* >(this)->fICode = kICODE10; // Z indetermine ou (x,y) hors limites
113  idr->IDquality = fICode;
114  idr->Z = 0;
115  idr->A = 0;
116  idr->PID = 0;
117  idr->SetComment("gamma");
118  idr->IDOK = kTRUE;
119  idr->Zident = kTRUE;
120  idr->Aident = kTRUE;
121  return;
122  }
123 
125 
126  SetInfos(x, y, idr);
127 
128  if (!const_cast<KVIDGCsI*>(this)->FindFourEmbracingLines(x, y, "above")) {
129  //no lines corresponding to point were found
130  const_cast < KVIDGCsI* >(this)->fICode = kICODE8; // Z indetermine ou (x,y) hors limites
131  idr->IDquality = fICode;
132  idr->SetComment("no identification: (x,y) out of range covered by grid");
133  return;
134  }
135  Int_t Z;
136  Double_t A;
137  const_cast < KVIDGCsI* >(this)->IdentZA(x, y, Z, A);
138  idr->Z = Z;
139  idr->A = Aint;
140  idr->PID = A;
141  idr->IDquality = fICode;
142  switch (fICode) {
143 
144  case kICODE0:
145  idr->SetComment("ok");
146  break;
147  case kICODE1:
148  idr->SetComment("Z ok, mass may be greater than A");
149  break;
150  case kICODE2:
151  idr->SetComment("Z ok, mass may be smaller than A");
152  break;
153  case kICODE3:
154  idr->SetComment("Z ok, mass may be greater or smaller than A");
155  break;
156  case kICODE4:
157  idr->SetComment("Z ok, mass out of range, >=A");
158  break;
159  case kICODE5:
160  idr->SetComment("Z ok, mass out of range, <=A");
161  break;
162  case kICODE6:
163  idr->SetComment("point above IMF line, Z is a minimum value");
164  break;
165  case kICODE7:
166  idr->SetComment("point is left of IMF line, Z is the most probable lower limit");
167  break;
168  case kICODE8:
169  idr->SetComment("no identification: (x,y) out of range covered by grid");
170  break;
171  case kICODE9:
172  idr->SetComment("no identification for this module");
173  break;
174  default:
175  idr->SetComment("no identification: (x,y) out of range covered by grid");
176  }
177 
178  if (fICode < kICODE4) {
179  idr->IDOK = kTRUE;
180  idr->Zident = kTRUE;
181  idr->Aident = kTRUE;
182  }
183 }
184 
185 
186 
187 
193 
195 {
196  //Returns first ID line in sorted list for which GetZ() returns 'z'.
197  //index=index of line found in fIDLines list (-1 if not found).
198  //This is done by looping over all the lines in the list, not by dichotomy as in base class KVIDZAGrid,
199  //because of the 8Be line being in between 6He and 6Li.
200 
201  index = 0;
202  Int_t nlines = GetNumberOfIdentifiers();
203  while ((dynamic_cast < KVIDZALine* >(GetIdentifiers()->At(index))->GetZ() != z)
204  && (index < (nlines - 1)))
205  index++;
206  KVIDZALine* line = dynamic_cast < KVIDZALine* >(GetIdentifiers()->At(index));
207  if (line->GetZ() != z) {
208  index = -1;
209  return 0;
210  }
211  return line;
212 }
213 
214 
215 
216 
221 
223 {
224  //Returns ID line corresponding to nucleus (Z,A) and its index in fIDLines.
225  //This is done by looping over all the lines in the list, not as in base class KVIDZAGrid,
226  //because of the 8Be line being in between 6He and 6Li.
227 
228  index = 0;
229  Int_t nlines = GetNumberOfIdentifiers();
230  KVIDZALine* line = dynamic_cast < KVIDZALine* >(GetIdentifiers()->At(index));
231  while ((line->GetZ() != z || line->GetA() != a)
232  && (index < (nlines - 1))) {
233  line = dynamic_cast < KVIDZALine* >(GetIdentifiers()->At(++index));
234  }
235  if (line->GetZ() != z || line->GetA() != a) {
236  index = -1;
237  return 0;
238  }
239  return line;
240 }
241 
242 
243 
244 
250 
252 {
253  //Finds Z, A and 'real A' for point (x,y) once closest lines to point have been found.
254  // Double_t A = mass calculated by interpolation
255  //This is a line-for-line copy of the latter part of IdnCsOr, even the same
256  //variable names and comments have been used (as much as possible).
257 
258  fICode = kICODE0;
259  A = -1.;
260  Aint = 0;
261 
262 // if(fIdxClosest==ksups) cout << "*** ";
263 // cout << "ksups = " << ksups << " Zsups = " << Zsups << " Asups = " << Asups << " wsups = " << wsups << " dsups = " << dsups << endl;
264 // if(fIdxClosest==ksup) cout << "*** ";
265 // cout << "ksup = " << ksup << " Zsup = " << Zsup << " Asup = " << Asup << " wsup = " << wsup << " dsup = " << dsup << endl;
266 // if(fIdxClosest==kinf) cout << "*** ";
267 // cout << "kinf = " << kinf << " Zinf = " << Zinf << " Ainf = " << Ainf << " winf = " << winf << " dinf = " << dinf << endl;
268 // if(fIdxClosest==kinfi) cout << "*** ";
269 // cout << "kinfi = " << kinfi << " Zinfi = " << Zinfi << " Ainfi = " << Ainfi << " winfi = " << winfi << " dinfi = " << dinfi << endl;
270  Int_t ibif = 0;
271  Int_t k = -1;
272  Double_t yy, y1, y2;
273  Int_t ix1, ix2;
274  yy = y1 = y2 = 0;
275  ix1 = ix2 = 0;
276  if (ksup > -1) {
277  if (kinf > -1) {
278  //cout << " /******************* 2 lignes encadrant le point ont ete trouvees ************************/" << endl;
279  Double_t dt = dinf + dsup; //distance between the 2 lines
280  if (Zinf == Zsup) {
281  // cout << " /****************meme Z**************/" << endl;
282  Z = Zinf;
283  Int_t dA = Asup - Ainf;
284  Double_t dist = dt / dA; //distance between the 2 lines normalised to difference in A of lines
285  /*** A = Asup ***/
286  if (dinf > dsup) { //point is closest to upper line, 'sup' line
287  ibif = 1;
288  k = ksup;
289  yy = -dsup;
290  A = Asup;
291  Aint = Asup;
292  if (ksups > -1) { // there is a 'sups' line above the 2 which encadrent le point
293  y2 = dsups - dsup;
294  if (Zsups == Zsup) {
295  ibif = 0;
296  y2 /= 2.;
297  ix2 = Asups - Asup;
298  }
299  else {
300  if (Zsups > 0)
301  y2 /= 2.; // 'sups' line is not IMF line
302  Double_t x2 = wsup;
303  x2 = 0.5 * TMath::Max(x2, dist);
304  y2 = TMath::Min(y2, x2);
305  ix2 = 1;
306  }
307  }
308  else { // ksups == -1 i.e. no 'sups' line
309  y2 = wsup;
310  y2 = 0.5 * TMath::Max(y2, dist);
311  ix2 = 1;
312  }
313  y1 = -dt / 2.;
314  ix1 = -dA;
315  }
316  /*** A = Ainf ***/
317  else { //point is closest to lower line, 'inf' line
318  ibif = 2;
319  k = kinf;
320  yy = dinf;
321  A = Ainf;
322  Aint = Ainf;
323  if (kinfi > -1) { // there is a 'infi' line below the 2 which encadrent le point
324  y1 = 0.5 * (dinfi - dinf);
325  if (Zinfi == Zinf) {
326  ibif = 0;
327  ix1 = Ainfi - Ainf;
328  y1 = -y1;
329  }
330  else {
331  Double_t x1 = winf;
332  x1 = 0.5 * TMath::Max(x1, dist);
333  y1 = -TMath::Min(y1, x1);
334  ix1 = -1;
335  }
336  }
337  else { // kinfi = -1 i.e. no 'infi' line
338  y1 = winf;
339  y1 = -0.5 * TMath::Max(y1, dist);
340  ix1 = -1;
341  }
342  y2 = dt / 2.;
343  ix2 = dA;
344  }
345  }
346  else {
347  //cout << " /****************Z differents**************/ " << endl;
348  if (Zsup == -1) { //'sup' is the IMF line
349  dt *= 2.;
350  dsup = dt - dinf;
351  }
352  /*** Z = Zsup ***/
353  ibif = 3;
354  if (dinf > dsup) { // closest to upper 'sup' line
355  k = ksup;
356  yy = -dsup;
357  Z = Zsup;
358  A = Asup;
359  Aint = Asup;
360  y1 = 0.5 * wsup;
361  if (ksups > -1) { // there is a 'sups' line above the 2 which encadrent the point
362  y2 = dsups - dsup;
363  if (Zsups == Zsup) {
364  ibif = 2;
365  ix2 = Asups - Asup;
366  Double_t x1 = y2 / ix2 / 2.;
367  y1 = TMath::Max(y1, x1);
368  y1 = -TMath::Min(y1, dt / 2.);
369  ix1 = -1;
370  y2 /= 2.;
371  }
372  else {
373  if (Zsups > 0)
374  y2 /= 2.; // 'sups" is not IMF line
375  y2 = TMath::Min(y1, y2);
376  ix2 = 1;
377  y1 = -TMath::Min(y1, dt / 2.);
378  ix1 = -1;
379  }
380  }
381  else { // ksups == -1, i.e. no 'sups' line
382  fICode = kICODE7; //a gauche de la ligne fragment, Z est alors un Zmin et le plus probable
383  y2 = y1;
384  ix2 = 1;
385  y1 = -TMath::Min(y1, dt / 2.);
386  ix1 = -1;
387  }
388  }
389  /*** Z = Zinf ***/
390  else { // closest to lower 'inf' line
391  k = kinf;
392  yy = dinf;
393  Z = Zinf;
394  A = Ainf;
395  Aint = Ainf;
396  y2 = 0.5 * winf;
397  if (kinfi > -1) { // there is a 'infi' line below the 2 which encadrent the point
398  y1 = dinfi - dinf;
399  if (Zinfi == Zinf) {
400  ibif = 1;
401  ix1 = Ainfi - Ainf;
402  Double_t x2 = -y1 / ix1 / 2.;
403  y2 = TMath::Max(y2, x2);
404  y2 = TMath::Min(y2, dt / 2.);
405  ix2 = 1;
406  y1 /= -2.;
407  }
408  else {
409  y1 = -TMath::Min(y2, y1 / 2.);
410  ix1 = -1;
411  y2 = TMath::Min(y2, dt / 2.);
412  ix2 = 1;
413  }
414  }
415  else { // no kinfi line, kinfi==-1
416  y1 = -y2;
417  ix1 = -1;
418  y2 = TMath::Min(y2, dt / 2.);
419  ix1 = 1;
420  }
421  }
422  }
423  }//if(kinf>-1)...
424  else if (Zsup > 0) { // 'sup' is not IMF line
425  //cout<<" /****************** Seule une ligne superieure a ete trouvee *********************/" << endl;
426  ibif = 3;
427  k = ksup;
428  yy = -dsup;
429  Z = Zsup;
430  A = Asup;
431  Aint = Asup;
432  y1 = 0.5 * wsup;
433  if (ksups > -1) { // there is a 'sups' line above the closest line to the point
434  y2 = dsups - dsup;
435  if (Zsups == Zsup) {
436  ibif = 2;
437  ix2 = Asups - Asup;
438  Double_t x1 = y2 / ix2 / 2.;
439  y1 = -TMath::Max(y1, x1);
440  ix1 = -1;
441  y2 /= 2.;
442  }
443  else {
444  if (Zsups > 0)
445  y2 /= 2.; // 'sups' is not IMF line
446  y2 = TMath::Min(y1, y2);
447  ix2 = 1;
448  y1 = -y1;
449  ix1 = -1;
450  }
451  }
452  else { // no 'sups' line above closest line
453  fICode = kICODE7; //a gauche de la ligne fragment, Z est alors un Zmin et le plus probable
454  y2 = y1;
455  ix2 = 1;
456  y1 = -y1;
457  ix1 = -1;
458  }
459  }
460  else {
461  fICode = kICODE8; // Z indetermine ou (x,y) hors limites
462  }
463  }
464  else if (kinf > -1) {
465  //cout <<"/****************** Seule une ligne inferieure a ete trouvee ***********************/" << endl;
466  /*** Sep. fragment ***/
467  if (Zinf == -1) { // 'inf' is IMF line
468  //point is above IMF line. Z = Z of last line in grid, A = -1
469  k = -1;
470  Z = GetZmax();
471  A = -1;
472  Aint = 0;
473  fICode = kICODE6; // au-dessus de la ligne fragment, Z est alors un Zmin
474  }
475  /*** Ligne de crete (Z,A line)***/
476  else {
477  ibif = 3;
478  k = kinf;
479  Z = Zinf;
480  A = Ainf;
481  Aint = Ainf;
482  yy = dinf;
483  y2 = 0.5 * winf;
484  if (kinfi > -1) {
485  y1 = dinfi - dinf;
486  if (Zinfi == Zinf) {
487  ibif = 1;
488  ix1 = Ainfi - Ainf;
489  Double_t x2 = -y1 / ix1 / 2.;
490  y2 = TMath::Max(y2, x2);
491  ix2 = 1;
492  y1 /= -2.;
493  }
494  else {
495  y1 = -TMath::Min(y2, y1 / 2.);
496  ix1 = -1;
497  ix2 = 1;
498  }
499  }
500  else {
501  y1 = -y2;
502  ix1 = -1;
503  ix2 = 1;
504  }
505  fICode = kICODE7; // a gauche de la ligne fragment, Z est alors un Zmin et le plus probable
506  }
507  }
508  /*****************Aucune ligne n'a ete trouvee*********************************/
509  else {
510  fICode = kICODE8; // Z indetermine ou (x,y) hors limites
511  }
512  /****************Test des bornes********************************************/
513  if (k > -1 && fICode == kICODE0) {
514  if (yy > y2)
515  fICode = kICODE4; // Z ok, masse hors limite superieure ou egale a A
516  }
517  if (k > -1 && (fICode == kICODE0 || fICode == kICODE7)) {
518  if (yy < y1)
519  fICode = kICODE5; // Z ok, masse hors limite inferieure ou egale a A
520  }
521  if (fICode == kICODE4 || fICode == kICODE5) {
522  A = -1;
523  Aint = 0;
524  }
525 
526  /****************Interpolation de la masse: da = f*log(1+b*dy)********************/
527  if (fICode == kICODE0 || (fICode == kICODE7 && yy <= y2)) {
528  Double_t deltaA = 0.;
529  Bool_t i = kFALSE;
530  Double_t dt, dist = y1 * y2;
531  dt = 0.;
532  if (ix2 == -ix1) { //dA1 = dA2
533  if (dist != 0) {
534  dt = -(y1 + y2) / dist;
535  i = kTRUE;
536  }
537  /*else
538  Warning("IdentZA","%s : cannot calculate interpolated mass (dist=%f), Areal will equal Aint (Z=%d Aint=%d fICode=%d)",
539  GetName(), dist, Z, Aint, fICode);*/
540  }
541  else if (ix2 == -ix1 * 2) { // dA2 = 2*dA1
542  Double_t tmp = y1 * y1 - 4. * dist;
543  if (tmp > 0. && dist != 0) {
544  dt = -(y1 + 2. * y2 -
545  TMath::Sqrt(tmp)) / dist / 2.;
546  i = kTRUE;
547  }
548  /*else
549  Warning("IdentZA","%s : cannot calculate interpolated mass (y1*y1-4*dist=%f), Areal will equal Aint (Z=%d Aint=%d fICode=%d)",
550  GetName(), tmp, Z, Aint, fICode);*/
551  }
552  else if (ix1 == -ix2 * 2) { // dA1 = 2*dA2
553  Double_t tmp = y2 * y2 - 4. * dist;
554  if (tmp > 0. && dist != 0) {
555  dt = -(y2 + 2. * y1 +
556  TMath::Sqrt(tmp)) / dist / 2.;
557  i = kTRUE;
558  }
559  /*else
560  Warning("IdentZA","%s : cannot calculate interpolated mass (y2*y2-4*dist=%f), Areal will equal Aint (Z=%d Aint=%d fICode=%d)",
561  GetName(), tmp, Z, Aint, fICode);*/
562  }
563  if (i) {
564  dist = dt * y2;
565  if (TMath::Abs(dist) < 0.001) {
566  if (y2 != 0)
567  deltaA = yy * ix2 / y2 / 2.;
568  /*else
569  Warning("IdentZA","%s : cannot calculate interpolated mass (y2=%f), Areal will equal Aint (Z=%d Aint=%d fICode=%d)",
570  GetName(), y2, Z, Aint, fICode);*/
571  }
572  else {
573  if (dist > -1. && dt * yy > -1.)
574  deltaA = ix2 / 2. / TMath::Log(1. + dist) * TMath::Log(1. + dt * yy);
575  /*else
576  Warning("IdentZA","%s : cannot calculate interpolated mass (dist=%f dt*yy=%f), Areal will equal Aint (Z=%d Aint=%d fICode=%d)",
577  GetName(), dist, dt*yy, Z, Aint, fICode);*/
578  }
579  A += deltaA;
580  }
581  }
582  /***************D'autres masses sont-elles possibles ?*************************/
583  if (fICode == kICODE0) {
584  //cout << "icode = 0, ibif = " << ibif << endl;
585  /***Masse superieure***/
586  if (ibif == 1 || ibif == 3) {
587  //We look at next line in the complete list of lines, after the closest line.
588  //If it has the same Z as the closest line, but was excluded from research for closest line
589  //because the point lies outside the endpoints, there remains a doubt about the mass:
590  //on rajoute 1 a fICode, effectivement on le met = kICODE1
591  Int_t idx = fIdxClosest;
592  if (idx > -1 && ++idx < GetNumberOfIdentifiers()) {
593  KVIDCsIRLLine* nextline =
595  if (nextline->GetZ() == Z
596  && !nextline->IsBetweenEndPoints(x, y, "x")) {
597  fICode++; // Z ok, mais les masses superieures a A sont possibles
598  //cout <<"//on rajoute 1 a fICode, effectivement on le met = kICODE1" << endl;
599  }
600  }
601  }
602  /***Masse inferieure***/
603  if (ibif == 2 || ibif == 3) {
604  //We look at line below the closest line in the complete list of lines.
605  //If it has the same Z as the closest line, but was excluded from research for closest line
606  //because the point lies outside the endpoints, there remains a doubt about the mass:
607  //on rajoute 2 a fICode, so it can be = kICODE2 or kICODE3
608  Int_t idx = fIdxClosest;
609  if (idx > -1 && --idx >= 0) {
610  KVIDCsIRLLine* nextline =
612  if (nextline->GetZ() == Z
613  && !nextline->IsBetweenEndPoints(x, y, "x")) {
614  fICode += 2;
615  //cout << "//on rajoute 2 a fICode, so it can be = kICODE2 or kICODE3" << endl;
616  }
617  }
618  }
619  }
620 
621  // cout << "Z = " << Z << " A = " << A << " icode = " << fICode << endl;
622 }
623 
624 
625 
626 
635 
637 {
638  // General initialisation method for CsI R-L identification grid.
639  // This method MUST be called once before using the grid for identifications.
640  // The ID lines are sorted.
641  // The natural line widths of all ID lines are calculated.
642  // The line with the largest Z (Zmax line) is found.
643  // IMF & Gamma line pointers are initialised
644 
645  // if grid has already been used for identification, IMF_line will be in identifiers list.
646  TObject* imfline = fIdentifiers.FindObject("IMF_line");
647  if (imfline) fIdentifiers.Remove(imfline); // remove to avoid problems with CalculateLineWidths
649  GammaLine = (KVIDLine*)GetCut("gamma_line");
650  if (!GammaLine) {
651  GetName();
652  Error("Initialize", "%s: Cut 'gamma_line' not found in grid. Not a valid CsI R-L grid. Listing existing cuts:",
653  GetName());
654  GetCuts()->ls();
655  }
656  IMFLine = (KVIDLine*)GetCut("IMF_line");
657  if (!IMFLine) {
658  Error("Initialize", "%s: Cut 'IMF_line' not found in grid. Not a valid CsI R-L grid. Listing existing cuts:",
659  GetName());
660  GetCuts()->ls();
661  }
662 }
663 
664 
665 
666 
678 
680 {
681  // Called after reading a grid from an ascii file.
682  // Tries to convert information written by an old version of the class:
683  //
684  //<PARAMETER> Ring min=... ----> <PARAMETER> IDTelescopes=...
685  //<PARAMETER> Ring max=...
686  //<PARAMETER> Mod min=...
687  //<PARAMETER> Mod max=...
688  //
689  // This will fail. The fix is no longer supported. Such files should
690  // no longer exist.
691 
693  if (GetParameters()->HasParameter("IDTelescopes")) return;
694 
695  Fatal("BackwardsCompatibilityFix",
696  "This fix no longer works. There will be problems.");
697  GammaLine = (KVIDLine*)GetCut("gamma_line");
698  IMFLine = (KVIDLine*)GetCut("IMF_line");
699  if (GammaLine)((KVIDCutLine*)GammaLine)->SetAcceptedDirection("above");
700  if (IMFLine)((KVIDCutLine*)IMFLine)->SetAcceptedDirection("below");
701  SetVarY("CSI-R");
702  SetVarX("CSI-L");
703 }
704 
705 
int Int_t
bool Bool_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char y1
Base class for CsI R-L identification lines (A and Z identification).
Definition: KVIDCsIRLLine.h:27
Line in ID grid used to delimit regions where no identification is possible.
Definition: KVIDCutLine.h:23
Identification grids for CsI R-L (fast-slow) matrices.
Definition: KVIDGCsI.h:42
KVIDLine * GammaLine
Definition: KVIDGCsI.h:45
virtual void Identify(Double_t x, Double_t y, KVIdentificationResult *) const override
Definition: KVIDGCsI.cpp:97
KVIDZALine * GetZALine(Int_t z, Int_t a, Int_t &) const override
Definition: KVIDGCsI.cpp:222
Bool_t is_a_gamma(Double_t x, Double_t y) const
Definition: KVIDGCsI.cpp:53
KVIDLine * IMFLine
Definition: KVIDGCsI.h:44
KVIDZALine * GetZLine(Int_t z, Int_t &) const override
Definition: KVIDGCsI.cpp:194
void Initialize() override
Definition: KVIDGCsI.cpp:636
void BackwardsCompatibilityFix() override
Definition: KVIDGCsI.cpp:679
KVIDGCsI()
Default constructor.
Definition: KVIDGCsI.cpp:12
void IdentZA(Double_t x, Double_t y, Int_t &Z, Double_t &A) override
Definition: KVIDGCsI.cpp:251
KVList fIdentifiers
list of identification objects
Definition: KVIDGraph.h:40
void SetVarY(const char *v) override
Definition: KVIDGraph.h:566
Int_t GetNumberOfIdentifiers() const
Definition: KVIDGraph.h:364
KVIDentifier * GetCut(const Char_t *name) const
Definition: KVIDGraph.h:316
const KVList * GetCuts() const
Definition: KVIDGraph.h:344
void SetVarX(const char *v) override
Definition: KVIDGraph.h:562
const Char_t * GetName() const override
Definition: KVIDGraph.cpp:1339
KVIDentifier * GetIdentifierAt(Int_t index) const
Definition: KVIDGraph.h:307
const KVNameValueList * GetParameters() const
Definition: KVIDGraph.h:324
virtual void BackwardsCompatibilityFix()
Definition: KVIDGraph.cpp:1368
virtual void SetInfos(Double_t, Double_t, KVIdentificationResult *) const
loop over KVIDGraph::fInfoZones to set flags in KVIdentificationResult
Definition: KVIDGraph.cpp:1304
const KVList * GetIdentifiers() const
Definition: KVIDGraph.h:334
Base class for lines/cuts used for particle identification in 2D data maps.
Definition: KVIDLine.h:143
Bool_t WhereAmI(Double_t px, Double_t py, Option_t *opt)
Bool_t IsBetweenEndPoints(Double_t x, Double_t y, const Char_t *axis="") const
Identification grid with lines corresponding to different nuclear isotopes (KVIDZALine)
Definition: KVIDZAGrid.h:66
Double_t dsups
Definition: KVIDZAGrid.h:88
Int_t Zsups
Definition: KVIDZAGrid.h:90
Double_t wsup
Definition: KVIDZAGrid.h:89
Int_t Zinf
Definition: KVIDZAGrid.h:90
Int_t Ainfi
Definition: KVIDZAGrid.h:91
Int_t Ainf
Definition: KVIDZAGrid.h:91
Int_t Zsup
Definition: KVIDZAGrid.h:90
Int_t Asups
Definition: KVIDZAGrid.h:91
Int_t kinfi
Definition: KVIDZAGrid.h:87
Int_t Asup
Definition: KVIDZAGrid.h:91
void Copy(TObject &) const override
Copy this to 'obj'.
Definition: KVIDZAGrid.cpp:66
Int_t ksup
Definition: KVIDZAGrid.h:87
Int_t ksups
used by IdentZA and IdentZ
Definition: KVIDZAGrid.h:87
Int_t GetZmax() const
Definition: KVIDZAGrid.h:134
Double_t winf
Definition: KVIDZAGrid.h:89
Double_t dinf
Definition: KVIDZAGrid.h:88
Int_t kinf
Definition: KVIDZAGrid.h:87
Double_t dsup
Definition: KVIDZAGrid.h:88
Int_t fIdxClosest
index of closest line in main list fIdentifiers
Definition: KVIDZAGrid.h:84
Int_t Zinfi
Definition: KVIDZAGrid.h:90
Int_t fICode
code de retour
Definition: KVIDZAGrid.h:85
Double_t dinfi
Definition: KVIDZAGrid.h:88
void Initialize() override
virtual Bool_t FindFourEmbracingLines(Double_t x, Double_t y, const Char_t *position)
Definition: KVIDZAGrid.cpp:519
Int_t Aint
mass of line used to identify particle
Definition: KVIDZAGrid.h:93
Base class for identification ridge lines corresponding to different nuclear species.
Definition: KVIDZALine.h:33
virtual Int_t GetZ() const
Definition: KVIDentifier.h:80
Full result of one attempted particle identification.
Bool_t IDOK
general quality of identification, =kTRUE if acceptable identification made
void SetComment(const Char_t *c)
Bool_t Aident
= kTRUE if A of particle established
Double_t PID
= "real" Z if Zident==kTRUE and Aident==kFALSE, "real" A if Zident==Aident==kTRUE
Int_t A
A of particle found (if Aident==kTRUE)
Int_t Z
Z of particle found (if Zident==kTRUE)
Int_t IDquality
specific quality code returned by identification procedure
Bool_t Zident
=kTRUE if Z of particle established
Extended TList class which owns its objects by default.
Definition: KVList.h:22
TObject * Remove(TObject *obj) override
Remove object from list.
TObject * FindObject(const char *name) const override
void AddLast(TObject *obj) override
TObject * At(Int_t idx) const override
void ls(Option_t *option="") const override
Int_t GetN() const
Double_t * GetX() const
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Fatal(const char *method, const char *msgfmt,...) const
TLine * line
Double_t y[n]
Double_t x[n]
double dist(AxisAngle const &r1, AxisAngle const &r2)
Double_t Min(Double_t a, Double_t b)
Double_t Log(Double_t x)
Double_t Sqrt(Double_t x)
Double_t Abs(Double_t d)
Double_t Max(Double_t a, Double_t b)
KVIDLine * imfline
Definition: KVIDGCsI.cpp:72
add_remove_imf_line(const KVList &l, KVIDLine *i)
Definition: KVIDGCsI.cpp:73
TLine l
TArc a
ClassImp(TPyArg)