ROOT logo
//*--- AUTHOR: Vladimir Pechenov
//*--- Modified: Vladimir Pechenov 05/04/2005

using namespace std;
#include "hmdcclusfit.h"
#include <iostream>
#include <iomanip>

#include "TBuffer.h"

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////////////
//
// HMdcClusFit
//
// Container class keep fit information for debuging.
//
// void setAddress(Char_t sc, Char_t sg, Char_t md)
// void setSec(Char_t sc)
//               Set sector.
// void setIOSeg(Char_t sg)
//               Set segment. It can be equal 0,1 (segment fit) or 3 sector fit.
// void setMod(Char_t m)
//               Set module. It can be equal 0,1,2,3 - one module fit,
//               or -1 - segment fit.
// void setFitAuthor(Char_t v)
//               Old name of function. Use setFitVersion(Char_t v) instead it.
// void setFitVersion(Char_t v)
//               Set fit version. =1 - old Alexander's fit version
// void setDistTimeVer(Char_t v)
//               Set distence=>drift_time calc. version
//               Now only one version exist (=1-by J.Market's func.)
// void setFitType(Char_t v)
//               Set fit type.
//               =0 - segment (or sector) fit, =1 - one mdc fit
// void setNParam(Char_t v)
//               Set number of parameters in fit.
// void setFunMin(Float_t v)
//               Set value of functional.
// void setNumOfWires(Int_t v)
//               Set number of wires passed fit.
// void setNumOfLayers(Int_t v)
//               Set number of layers.
// void setX1(Float_t v)
// void setY1(Float_t v)
// void setZ1(Float_t v)
// void setX2(Float_t v)
// void setY2(Float_t v)
// void setZ2(Float_t v)
//               Set track parameters. It is two point in sector coor.sys. [mm]
// void setNumIter(Short_t v)
//               Set number of iterations
// void setFirstWireFitInd(Int_t v)
//               Set index of the first HMdcWireFit object in catMdcWireFit
//               for this track.
// void setLastWireFitInd(Int_t v)
//               Set index of the last HMdcWireFit object in catMdcWireFit
//               for this track.
// void setClustIndex(Int_t v)
//               Set index of HMdcClus object in catMdcClus for this track.
// void setTimeOff(const Double_t* tos)
//               Set time offsets for each MDC in fit.
//  void seFitStatus(Bool_t stat)
//               Set fit status. kTRUE if fit result is accepted. kFALSE if not.
//
//
// void    getAddress(Int_t& sc, Int_t& sg, Int_t& md)
// Char_t  getSec(void)
//               Get sector.
// Char_t  getIOSeg(void)
//               Get segment. Return 0,1 for segment fit or 3 for sector fit.
// Char_t  getMod(void)
//               Get module. It can be equal 0,1,2,3 for one module fit,
//               or -1 - segment or sector fit.
// Char_t  getFitAuthor(void)
//               Old name of function. Use getFitVersion() instead it.
// Char_t  getFitVersion(void)
//               Get fit version. =1 - old Alexander's fit version
// Char_t  getDistTimeVer(void)
//               Get distence=>drift_time calc. version
//               Now only one version exist (=1-by J.Market's func.)
// Char_t  getFitType(void)
//               Get fit type.
//               =0 - segment (or sector) fit, =1 - one mdc fit
// Char_t  getNParam(Char_t v)
//               Get number of parameters in fit.
// Float_t getFunMin(void)
//               Get value of functional.
// Float_t getChi2(void)
//               Get chi2 per one deg. of freedom.
// Float_t getTimeOff(Int_t mod);
//               Old name of function. Use getTimeOffset(Int_t mod) instead it.
// Float_t getTimeOffset(Int_t mod)
//               Get time offset for module =mod.
//               return -1000. if mod is not valid (<0 or >3).
// Float_t getTimeOffsetMdc1(void)
//               Get time offset for module 1 (from 1)
// Float_t getTimeOffsetMdc2(void)
//               Get time offset for module 2 (from 1)
// Float_t getTimeOffsetMdc3(void)
//               Get time offset for module 3 (from 1)
// Float_t getTimeOffsetMdc4(void)
//               Get time offset for module 4 (from 1)
// Short_t getNumOfWires(void)
//               Get number of wires passed fit.
// Short_t getTotNumOfWires(void)
//               Get total number of wires in fit.
// Char_t  getNumOfLayers(void)
//               Get number of layers.
// Float_t getX1(void)
// Float_t getY1(void)
// Float_t getZ1(void)
// Float_t getX2(void)
// Float_t getY2(void)
// Float_t getZ2(void)
//               Get track parameters. It is two point in sector coor.sys. [mm]
// Float_t getPhi(void)
//               Get angle phi of track [rad]
// Float_t getTheta(void)
//               Get angle theta of track [rad]
// Short_t getNumIter(void)
//               Get number of iterations
// Int_t   getIndf(void)
//               Old name of function. Use getFirstWireFitInd() instead it.
// Int_t   getIndl(void)
//               Old name of function. Use getLastWireFitInd() instead it.
// Int_t   getFirstWireFitInd(void)
//               Get index of the first HMdcWireFit object in catMdcWireFit.
//               for this track.
// Int_t   getLastWireFitInd(void)
//               Get index of the last HMdcWireFit object in catMdcWireFit
//               for this track.
// void    getIndexis(Int_t &indexf,Int_t &indexl)
//               Get indexis of the first and last HMdcWireFit 
//               objects in catMdcWireFit.
// Int_t   getClustIndex(void)
//               Get index of HMdcClus object in catMdcClus for this track.
//               Index here is the third index in cluster location:
//               [sector][segment][index]
// void    getClustAddress(Int_t& sc, Int_t& sg, Int_t& ind)
//               Get location of cluster in 
// Int_t   getNextIndex(Int_t ind)
//               Get index of the next HMdcWireFit object for this track.
//               Using:
//               Int_t ind=-1;
//               while((ind=pHMdcClusFit->getNextIndex(ind)) >=0) {
//                 HMdcWireFit* pWireFit = 
//                           (HMdcWireFit*)pCatWireFit->getObect(ind);
//                 ... 
//               }
//  Bool_t  geFitStatus(void)
//               Return kTRUE if fit result was accepted, kFALSE if not.
//
// void print()
//              Print container.
// Bool_t isGeant()
//              Return kFALSE
//
//////////////////////////////////////////////////////////////////////////////

ClassImp(HMdcClusFit)

void HMdcClusFit::print(void) const {
  // Printing of container.
  printf("-HMdcClusFit- Sec.%i",sec+1);
  if(mod<0) printf(" Seg.%i:",seg+1);
  else printf(" Mod.%i:",mod+1);
  printf("    Ver.%i, dist-time ver.%i, fit type %i, num.of param.=%i\n",
      fitAuthor,distTimeVer,fitType,nParam);
  printf(" Fun.=%5.1f Nwires=%2i Nw(WT>0)=%2i Nlay.(WT>0)=%2i Chi2=%5.2f",
      functional,indl-indf+1,numOfWires,numOfLayers,getChi2());
  printf(" Niter.=%i TOF=%.1f|%.1f|%.1f|%.1f\n",numIter,
      timeOffMdc1,timeOffMdc2,timeOffMdc3,timeOffMdc4);
  printf(" Track line:          (%8.2f,%8.2f,%7.2f) - (%8.2f,%8.2f,%8.2f)\n",
      x1,y1,z1,x2,y2,z2);
}

void HMdcClusFit::setTimeOff(const Double_t* tos) {
  // Set time offset for MDC modules
  timeOffMdc1=tos[0];
  timeOffMdc2=tos[1];
  timeOffMdc3=tos[2];
  timeOffMdc4=tos[3];
}

Float_t HMdcClusFit::getTimeOff(Int_t mod) const {
  // Return time offset for MDC module number "mod"
  if(mod==0) return timeOffMdc1;
  if(mod==1) return timeOffMdc2;
  if(mod==2) return timeOffMdc3;
  if(mod==3) return timeOffMdc4;
  return -1000.;
}

void HMdcClusFit::calcRZtoLineXY(Float_t &zm, Float_t &r0,
    Float_t x1, Float_t y1, Float_t z1, Float_t x2, Float_t y2, Float_t z2, 
    Float_t xBm, Float_t yBm) const {
  // zm= z1 - cos(theta)/sin(theta) * ((x1-xBm)*cos(phi)+(y1-yBm)*sin(phi))
  // r0=(y1-yBm)*cos(phi)-(x1-xBm)*sin(phi)
  //
  // If (x1,y1,z1)=(x2,y2,z2) dZ will eq.1.! 
  Float_t dX=x2-x1;
  Float_t dY=y2-y1;
  Float_t dZ=z2-z1;
  Float_t lenXY2=dX*dX+dY*dY;
  Float_t lenXY=sqrt(lenXY2);
  if(lenXY<2.E-5) {
    dX =x2 * 1.E-5/sqrt(x2*x2+y2*y2);
    dY =y2 * 1.E-5/sqrt(x2*x2+y2*y2);
    lenXY=1.E-5;            //dX*dX+dY*dY;
    lenXY2=lenXY*lenXY;
    dZ=1.;
  }
  x1-=xBm;  // Shifting to the line (xBm,yBm)
  y1-=yBm;  // Shifting to the line (xBm,yBm)
  
  zm=z1-dZ*(x1*dX+y1*dY)/lenXY2;
  r0=(y1*dX-x1*dY)/lenXY;
}

void HMdcClusFit::Streamer(TBuffer &R__b)
{
   // Stream an object of class HMdcClusFit.

   UInt_t R__s, R__c;
   if (R__b.IsReading()) {
      Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
      TObject::Streamer(R__b);
      R__b >> sec;
      R__b >> seg;
      R__b >> mod;
      R__b >> fitAuthor;
      R__b >> distTimeVer;
      R__b >> fitType;
      R__b >> nParam;
      R__b >> functional;
      R__b >> timeOffMdc1;
      R__b >> timeOffMdc2;
      R__b >> timeOffMdc3;
      R__b >> timeOffMdc4;
      R__b >> numOfWires;
      R__b >> numOfLayers;
      R__b >> x1;
      R__b >> y1;
      R__b >> z1;
      R__b >> x2;
      R__b >> y2;
      R__b >> z2;
      R__b >> numIter;
      R__b >> indf;
      R__b >> indl;
      R__b >> clustIndex;
      R__b >> exitFlag;
      R__b >> sigmaChi2;
      R__b >> fitStatus;
      if(R__v > 1) {
        R__b >> dx1;
        R__b >> dy1;
        R__b >> dx2;
        R__b >> dy2;
      } else {
        dx1 = -1.;
        dy1 = -1.;
        dx2 = -1.;
        dy2 = -1.;
      }
      R__b.CheckByteCount(R__s, R__c, HMdcClusFit::IsA());
   } else {
      R__c = R__b.WriteVersion(HMdcClusFit::IsA(), kTRUE);
      TObject::Streamer(R__b);
      R__b << sec;
      R__b << seg;
      R__b << mod;
      R__b << fitAuthor;
      R__b << distTimeVer;
      R__b << fitType;
      R__b << nParam;
      R__b << functional;
      R__b << timeOffMdc1;
      R__b << timeOffMdc2;
      R__b << timeOffMdc3;
      R__b << timeOffMdc4;
      R__b << numOfWires;
      R__b << numOfLayers;
      R__b << x1;
      R__b << y1;
      R__b << z1;
      R__b << x2;
      R__b << y2;
      R__b << z2;
      R__b << numIter;
      R__b << indf;
      R__b << indl;
      R__b << clustIndex;
      R__b << exitFlag;
      R__b << sigmaChi2;
      R__b << fitStatus;
      R__b << dx1;
      R__b << dy1;
      R__b << dx2;
      R__b << dy2;
      R__b.SetByteCount(R__c, kTRUE);
   }
}
 hmdcclusfit.cc:1
 hmdcclusfit.cc:2
 hmdcclusfit.cc:3
 hmdcclusfit.cc:4
 hmdcclusfit.cc:5
 hmdcclusfit.cc:6
 hmdcclusfit.cc:7
 hmdcclusfit.cc:8
 hmdcclusfit.cc:9
 hmdcclusfit.cc:10
 hmdcclusfit.cc:11
 hmdcclusfit.cc:12
 hmdcclusfit.cc:13
 hmdcclusfit.cc:14
 hmdcclusfit.cc:15
 hmdcclusfit.cc:16
 hmdcclusfit.cc:17
 hmdcclusfit.cc:18
 hmdcclusfit.cc:19
 hmdcclusfit.cc:20
 hmdcclusfit.cc:21
 hmdcclusfit.cc:22
 hmdcclusfit.cc:23
 hmdcclusfit.cc:24
 hmdcclusfit.cc:25
 hmdcclusfit.cc:26
 hmdcclusfit.cc:27
 hmdcclusfit.cc:28
 hmdcclusfit.cc:29
 hmdcclusfit.cc:30
 hmdcclusfit.cc:31
 hmdcclusfit.cc:32
 hmdcclusfit.cc:33
 hmdcclusfit.cc:34
 hmdcclusfit.cc:35
 hmdcclusfit.cc:36
 hmdcclusfit.cc:37
 hmdcclusfit.cc:38
 hmdcclusfit.cc:39
 hmdcclusfit.cc:40
 hmdcclusfit.cc:41
 hmdcclusfit.cc:42
 hmdcclusfit.cc:43
 hmdcclusfit.cc:44
 hmdcclusfit.cc:45
 hmdcclusfit.cc:46
 hmdcclusfit.cc:47
 hmdcclusfit.cc:48
 hmdcclusfit.cc:49
 hmdcclusfit.cc:50
 hmdcclusfit.cc:51
 hmdcclusfit.cc:52
 hmdcclusfit.cc:53
 hmdcclusfit.cc:54
 hmdcclusfit.cc:55
 hmdcclusfit.cc:56
 hmdcclusfit.cc:57
 hmdcclusfit.cc:58
 hmdcclusfit.cc:59
 hmdcclusfit.cc:60
 hmdcclusfit.cc:61
 hmdcclusfit.cc:62
 hmdcclusfit.cc:63
 hmdcclusfit.cc:64
 hmdcclusfit.cc:65
 hmdcclusfit.cc:66
 hmdcclusfit.cc:67
 hmdcclusfit.cc:68
 hmdcclusfit.cc:69
 hmdcclusfit.cc:70
 hmdcclusfit.cc:71
 hmdcclusfit.cc:72
 hmdcclusfit.cc:73
 hmdcclusfit.cc:74
 hmdcclusfit.cc:75
 hmdcclusfit.cc:76
 hmdcclusfit.cc:77
 hmdcclusfit.cc:78
 hmdcclusfit.cc:79
 hmdcclusfit.cc:80
 hmdcclusfit.cc:81
 hmdcclusfit.cc:82
 hmdcclusfit.cc:83
 hmdcclusfit.cc:84
 hmdcclusfit.cc:85
 hmdcclusfit.cc:86
 hmdcclusfit.cc:87
 hmdcclusfit.cc:88
 hmdcclusfit.cc:89
 hmdcclusfit.cc:90
 hmdcclusfit.cc:91
 hmdcclusfit.cc:92
 hmdcclusfit.cc:93
 hmdcclusfit.cc:94
 hmdcclusfit.cc:95
 hmdcclusfit.cc:96
 hmdcclusfit.cc:97
 hmdcclusfit.cc:98
 hmdcclusfit.cc:99
 hmdcclusfit.cc:100
 hmdcclusfit.cc:101
 hmdcclusfit.cc:102
 hmdcclusfit.cc:103
 hmdcclusfit.cc:104
 hmdcclusfit.cc:105
 hmdcclusfit.cc:106
 hmdcclusfit.cc:107
 hmdcclusfit.cc:108
 hmdcclusfit.cc:109
 hmdcclusfit.cc:110
 hmdcclusfit.cc:111
 hmdcclusfit.cc:112
 hmdcclusfit.cc:113
 hmdcclusfit.cc:114
 hmdcclusfit.cc:115
 hmdcclusfit.cc:116
 hmdcclusfit.cc:117
 hmdcclusfit.cc:118
 hmdcclusfit.cc:119
 hmdcclusfit.cc:120
 hmdcclusfit.cc:121
 hmdcclusfit.cc:122
 hmdcclusfit.cc:123
 hmdcclusfit.cc:124
 hmdcclusfit.cc:125
 hmdcclusfit.cc:126
 hmdcclusfit.cc:127
 hmdcclusfit.cc:128
 hmdcclusfit.cc:129
 hmdcclusfit.cc:130
 hmdcclusfit.cc:131
 hmdcclusfit.cc:132
 hmdcclusfit.cc:133
 hmdcclusfit.cc:134
 hmdcclusfit.cc:135
 hmdcclusfit.cc:136
 hmdcclusfit.cc:137
 hmdcclusfit.cc:138
 hmdcclusfit.cc:139
 hmdcclusfit.cc:140
 hmdcclusfit.cc:141
 hmdcclusfit.cc:142
 hmdcclusfit.cc:143
 hmdcclusfit.cc:144
 hmdcclusfit.cc:145
 hmdcclusfit.cc:146
 hmdcclusfit.cc:147
 hmdcclusfit.cc:148
 hmdcclusfit.cc:149
 hmdcclusfit.cc:150
 hmdcclusfit.cc:151
 hmdcclusfit.cc:152
 hmdcclusfit.cc:153
 hmdcclusfit.cc:154
 hmdcclusfit.cc:155
 hmdcclusfit.cc:156
 hmdcclusfit.cc:157
 hmdcclusfit.cc:158
 hmdcclusfit.cc:159
 hmdcclusfit.cc:160
 hmdcclusfit.cc:161
 hmdcclusfit.cc:162
 hmdcclusfit.cc:163
 hmdcclusfit.cc:164
 hmdcclusfit.cc:165
 hmdcclusfit.cc:166
 hmdcclusfit.cc:167
 hmdcclusfit.cc:168
 hmdcclusfit.cc:169
 hmdcclusfit.cc:170
 hmdcclusfit.cc:171
 hmdcclusfit.cc:172
 hmdcclusfit.cc:173
 hmdcclusfit.cc:174
 hmdcclusfit.cc:175
 hmdcclusfit.cc:176
 hmdcclusfit.cc:177
 hmdcclusfit.cc:178
 hmdcclusfit.cc:179
 hmdcclusfit.cc:180
 hmdcclusfit.cc:181
 hmdcclusfit.cc:182
 hmdcclusfit.cc:183
 hmdcclusfit.cc:184
 hmdcclusfit.cc:185
 hmdcclusfit.cc:186
 hmdcclusfit.cc:187
 hmdcclusfit.cc:188
 hmdcclusfit.cc:189
 hmdcclusfit.cc:190
 hmdcclusfit.cc:191
 hmdcclusfit.cc:192
 hmdcclusfit.cc:193
 hmdcclusfit.cc:194
 hmdcclusfit.cc:195
 hmdcclusfit.cc:196
 hmdcclusfit.cc:197
 hmdcclusfit.cc:198
 hmdcclusfit.cc:199
 hmdcclusfit.cc:200
 hmdcclusfit.cc:201
 hmdcclusfit.cc:202
 hmdcclusfit.cc:203
 hmdcclusfit.cc:204
 hmdcclusfit.cc:205
 hmdcclusfit.cc:206
 hmdcclusfit.cc:207
 hmdcclusfit.cc:208
 hmdcclusfit.cc:209
 hmdcclusfit.cc:210
 hmdcclusfit.cc:211
 hmdcclusfit.cc:212
 hmdcclusfit.cc:213
 hmdcclusfit.cc:214
 hmdcclusfit.cc:215
 hmdcclusfit.cc:216
 hmdcclusfit.cc:217
 hmdcclusfit.cc:218
 hmdcclusfit.cc:219
 hmdcclusfit.cc:220
 hmdcclusfit.cc:221
 hmdcclusfit.cc:222
 hmdcclusfit.cc:223
 hmdcclusfit.cc:224
 hmdcclusfit.cc:225
 hmdcclusfit.cc:226
 hmdcclusfit.cc:227
 hmdcclusfit.cc:228
 hmdcclusfit.cc:229
 hmdcclusfit.cc:230
 hmdcclusfit.cc:231
 hmdcclusfit.cc:232
 hmdcclusfit.cc:233
 hmdcclusfit.cc:234
 hmdcclusfit.cc:235
 hmdcclusfit.cc:236
 hmdcclusfit.cc:237
 hmdcclusfit.cc:238
 hmdcclusfit.cc:239
 hmdcclusfit.cc:240
 hmdcclusfit.cc:241
 hmdcclusfit.cc:242
 hmdcclusfit.cc:243
 hmdcclusfit.cc:244
 hmdcclusfit.cc:245
 hmdcclusfit.cc:246
 hmdcclusfit.cc:247
 hmdcclusfit.cc:248
 hmdcclusfit.cc:249
 hmdcclusfit.cc:250
 hmdcclusfit.cc:251
 hmdcclusfit.cc:252
 hmdcclusfit.cc:253
 hmdcclusfit.cc:254
 hmdcclusfit.cc:255
 hmdcclusfit.cc:256
 hmdcclusfit.cc:257
 hmdcclusfit.cc:258
 hmdcclusfit.cc:259
 hmdcclusfit.cc:260
 hmdcclusfit.cc:261
 hmdcclusfit.cc:262
 hmdcclusfit.cc:263
 hmdcclusfit.cc:264
 hmdcclusfit.cc:265
 hmdcclusfit.cc:266
 hmdcclusfit.cc:267
 hmdcclusfit.cc:268
 hmdcclusfit.cc:269
 hmdcclusfit.cc:270
 hmdcclusfit.cc:271
 hmdcclusfit.cc:272
 hmdcclusfit.cc:273
 hmdcclusfit.cc:274
 hmdcclusfit.cc:275
 hmdcclusfit.cc:276
 hmdcclusfit.cc:277
 hmdcclusfit.cc:278
 hmdcclusfit.cc:279
 hmdcclusfit.cc:280
 hmdcclusfit.cc:281
 hmdcclusfit.cc:282
 hmdcclusfit.cc:283
 hmdcclusfit.cc:284
 hmdcclusfit.cc:285
 hmdcclusfit.cc:286
 hmdcclusfit.cc:287
 hmdcclusfit.cc:288
 hmdcclusfit.cc:289
 hmdcclusfit.cc:290
 hmdcclusfit.cc:291
 hmdcclusfit.cc:292
 hmdcclusfit.cc:293
 hmdcclusfit.cc:294
 hmdcclusfit.cc:295
 hmdcclusfit.cc:296
 hmdcclusfit.cc:297
 hmdcclusfit.cc:298
 hmdcclusfit.cc:299
 hmdcclusfit.cc:300
 hmdcclusfit.cc:301
 hmdcclusfit.cc:302
 hmdcclusfit.cc:303
 hmdcclusfit.cc:304