ROOT logo
#ifndef HMDCALIGNERPARAM_H
#define HMDCALIGNERPARAM_H

#include "TObject.h"
#include "hmdcsizescells.h"

class HMdcLookUpTb;
class HGeomTransform;

class HMdcAlignerParam : public TObject {

  protected:
   
   Int_t alignSec;                     // sector to align
   
   Bool_t firstFile;                   // flag to avoid reinizalisation of original transform

   Bool_t cluster;                     // flag to make alignment by cluster
   
   Bool_t scan   ;                     // flag to choose fitter with or without target scan
   
   Int_t offset;                       // flag to switch between chamber alignment layer offsets and layer orientation
   
   Int_t nMinParams;                   // number of parameters to iterate
   
   TString rootFile;                   // name of root file to keep monitor NTuple
   
   Double_t alignParams[24];           // alignmet parameters:  additional 3 transition and 3 rotation to initial
                                       // transform matrix of each 4 module in sector
   Double_t steps[24];                 // iteration step for each parameter
   
   Double_t flags[24];                 // flag for each parameter: 0 - module don't included to alignment;
                                       // 1 - module included in alignment but parameter doesn't iterate        
                                       // 2 - module included in alignment and parameter willl be iterate
   Double_t minParams[24];             // parameters to iterate
   Double_t minSteps[24];              // steps of parameters to iterate
   Int_t minIndex[24];              // indexes of parameters tp iterate

   HMdcLookUpTb  * fLookUpTb;      // clus. finder for MDC1&2 (and 3&4 for type=1)


  protected:
   
   HMdcSizesCellsMod* fSizesCellsFirstMod;    // pointer to middle plane of first aligned mdc 
   HMdcSizesCellsMod* fSizesCellsLastMod;     // pointer to middle plane of last aligned mdc 
   Int_t firstMod;                            // first module
   Int_t lastMod;                             // last module

  protected:

   HGeomTransform sysRSecOrg[4];
   
   HGeomTransform sysRSec[4];

   const Double_t * tfSysRSec[4];
   
  public:
   
   HMdcAlignerParam(void);
   HMdcAlignerParam(Int_t alignSec, Double_t * params, Double_t * steps, Int_t * flags, HMdcLookUpTb * fLookUpTb);
   HMdcAlignerParam(const HMdcAlignerParam& tp);
   ~HMdcAlignerParam(void) {}
   void init(void);

  public:
   
   Int_t getNMinParams() { return nMinParams; }
   Double_t * getMinParams() { return minParams; }
   Double_t * getMinSteps() { return minSteps; }
   void setNewPosition(Double_t * minParams = 0, Int_t offset = 0);
   Bool_t setPlanes(void);
   void printTransforms(Double_t * targetParams = 0);
   void setRootFile(TString file) { rootFile = file; }
   TString getRootFile(void) { return rootFile; }
   void setAlignSec(Int_t aSec) { alignSec = aSec; }
   Int_t getAlignSec(void) { return alignSec; }
   void setCluster(Bool_t clus) { cluster = clus; }
   void setScan(Bool_t scn) { scan = scn; }
   void setOffset(Int_t off) { offset = off; }
   Bool_t getCluster(void) { return cluster; }
   Bool_t getScan(void) { return scan; }
   Int_t getOffset(void) { return offset; }
   const Double_t * getTfSysRSec(Int_t mod) {return tfSysRSec[mod];}
   Int_t getFirstMod(void) const {return firstMod;}
   Int_t getLastMod(void) const  {return lastMod;}

  public:
   
   inline void copyPlanes(const HMdcAlignerParam& ap);
   inline void copyAlignParams(const HMdcAlignerParam& ap);
   inline void setAlignParams(Double_t * par);
   inline void setNewAlignParams(Double_t * minPar);
   inline void copySteps(const HMdcAlignerParam& ap);
   inline void setSteps(Double_t * st);
   inline void copyFlags(const HMdcAlignerParam& ap);
   inline void setFlags(Int_t * fl);
   inline void copyMinParams(const HMdcAlignerParam& ap);
   inline void setMinParams(void);
   inline void copyMinSteps(const HMdcAlignerParam& ap);
   inline void setOriginalTransforms(void);
   inline void setActualTransforms(void);
   inline void copy(const HMdcAlignerParam& ap);
   inline void getSecTrackParams(Double_t & x1, Double_t & y1, Double_t & z1,
	              	   Double_t & x2, Double_t & y2, Double_t & z2);
   inline void getModTrackParams(Double_t x1, Double_t y1, Double_t z1,
						   Double_t x2, Double_t y2, Double_t z2,
						   Double_t & xFirstMod, Double_t & yFirstMod, 
						   Double_t & xLastMod,  Double_t & yLastMod);
   inline void print(TString header);
   

   ClassDef(HMdcAlignerParam,0)
};

inline void HMdcAlignerParam::copyPlanes(const HMdcAlignerParam& ap) { 
  fSizesCellsFirstMod=ap.fSizesCellsFirstMod;
  fSizesCellsLastMod=ap.fSizesCellsLastMod;
  firstMod = ap.firstMod;
  lastMod =  ap.lastMod;
}

inline void HMdcAlignerParam::copyAlignParams(const HMdcAlignerParam& ap) {
  for(Int_t i=0; i<24; i++) alignParams[i] = ap.alignParams[i];
}

inline void HMdcAlignerParam::setAlignParams(Double_t * par) {
  for(Int_t i=0; i<24; i++) alignParams[i] = par[i];
}

inline void HMdcAlignerParam::setNewAlignParams(Double_t * minPar) {
  for(Int_t i=0; i<nMinParams; i++) {
     minParams[i] = minPar[i];
     alignParams[minIndex[i]] = minPar[i];
  }
}

inline void HMdcAlignerParam::copySteps(const HMdcAlignerParam& ap) {
  for(Int_t i=0; i<24; i++) steps[i] = ap.steps[i];
}

inline void HMdcAlignerParam::setSteps(Double_t * st) {
  for(Int_t i=0; i<24; i++) steps[i] = st[i];
}

inline void HMdcAlignerParam::copyFlags(const HMdcAlignerParam& ap) {
  for(Int_t i=0; i<24; i++) flags[i] = ap.flags[i];
}

inline void HMdcAlignerParam::setFlags(Int_t * fl) {
  for(Int_t i=0; i<24; i++) flags[i] = fl[i];
}

inline void HMdcAlignerParam::copyMinParams(const HMdcAlignerParam& ap) {
  for(Int_t i=0; i<nMinParams; i++) minParams[i] = ap.alignParams[i];
}

inline void HMdcAlignerParam::setMinParams(void) {
  nMinParams = 0;
  for(Int_t i=0; i<24; i++) {
     if(flags[i] == 2) {
	minParams[nMinParams] = alignParams[i];
	minSteps[nMinParams] = steps[i];
	minIndex[nMinParams] = i;
	nMinParams++;
     }
  }
}

inline void HMdcAlignerParam::copyMinSteps(const HMdcAlignerParam& ap) {
  for(Int_t i=0; i<nMinParams; i++) minSteps[i] = ap.minSteps[i];
}

inline void HMdcAlignerParam::setOriginalTransforms(void) {
   
   HMdcSizesCells* fSizesCells   =  HMdcSizesCells::getObject();
   
   HMdcSizesCellsSec& fSCSec = (*fSizesCells)[alignSec];

   for(Int_t modNum=0; modNum<4; modNum++) 
      if(fSCSec.modStatus(modNum)) sysRSecOrg[modNum] = *(fSCSec[modNum].getSecTrans());
  
}

inline void HMdcAlignerParam::setActualTransforms(void) {
   
   HMdcSizesCells* fSizesCells   =  HMdcSizesCells::getObject();
   
   HMdcSizesCellsSec& fSCSec = (*fSizesCells)[alignSec];

   for(Int_t modNum=0; modNum<4; modNum++) 
      if(fSCSec.modStatus(modNum)) {
	 sysRSec[modNum] = *(fSCSec[modNum].getSecTrans());
	 tfSysRSec[modNum] = fSCSec[modNum].getTfSysRSec();
      }
  
}

inline void HMdcAlignerParam::copy(const HMdcAlignerParam& ap) { 
  copyAlignParams(ap);
  copySteps(ap);
  copyFlags(ap);
  copyMinParams(ap);
  copyMinSteps(ap);
  copyPlanes(ap);
  nMinParams = ap.nMinParams;
  fLookUpTb = ap.fLookUpTb;
  cluster = ap.cluster;
}

inline void HMdcAlignerParam::getSecTrackParams(Double_t & x1, Double_t & y1, Double_t & z1,
						Double_t & x2, Double_t & y2, Double_t & z2) {

   fSizesCellsFirstMod->transFrom(x1, y1, z1); 
   fSizesCellsLastMod->transFrom(x2, y2, z2); 

}

inline void HMdcAlignerParam::getModTrackParams(Double_t x1, Double_t y1, Double_t z1,
						Double_t x2, Double_t y2, Double_t z2,
						Double_t & xFirstMod, Double_t & yFirstMod, 
						Double_t & xLastMod,  Double_t & yLastMod) {

   fSizesCellsFirstMod->calcInterTrMod(x1, y1, z1, x2, y2, z2, xFirstMod, yFirstMod);
   fSizesCellsLastMod->calcInterTrMod (x1, y1, z1, x2, y2, z2, xLastMod,  yLastMod );
 
}

inline void HMdcAlignerParam::print(TString header) {

   cout << header << " " ;
   for(Int_t i=0; i<nMinParams; i++) cout << minParams[i] << " " ;

}

#endif
 hmdcalignerparam.h:1
 hmdcalignerparam.h:2
 hmdcalignerparam.h:3
 hmdcalignerparam.h:4
 hmdcalignerparam.h:5
 hmdcalignerparam.h:6
 hmdcalignerparam.h:7
 hmdcalignerparam.h:8
 hmdcalignerparam.h:9
 hmdcalignerparam.h:10
 hmdcalignerparam.h:11
 hmdcalignerparam.h:12
 hmdcalignerparam.h:13
 hmdcalignerparam.h:14
 hmdcalignerparam.h:15
 hmdcalignerparam.h:16
 hmdcalignerparam.h:17
 hmdcalignerparam.h:18
 hmdcalignerparam.h:19
 hmdcalignerparam.h:20
 hmdcalignerparam.h:21
 hmdcalignerparam.h:22
 hmdcalignerparam.h:23
 hmdcalignerparam.h:24
 hmdcalignerparam.h:25
 hmdcalignerparam.h:26
 hmdcalignerparam.h:27
 hmdcalignerparam.h:28
 hmdcalignerparam.h:29
 hmdcalignerparam.h:30
 hmdcalignerparam.h:31
 hmdcalignerparam.h:32
 hmdcalignerparam.h:33
 hmdcalignerparam.h:34
 hmdcalignerparam.h:35
 hmdcalignerparam.h:36
 hmdcalignerparam.h:37
 hmdcalignerparam.h:38
 hmdcalignerparam.h:39
 hmdcalignerparam.h:40
 hmdcalignerparam.h:41
 hmdcalignerparam.h:42
 hmdcalignerparam.h:43
 hmdcalignerparam.h:44
 hmdcalignerparam.h:45
 hmdcalignerparam.h:46
 hmdcalignerparam.h:47
 hmdcalignerparam.h:48
 hmdcalignerparam.h:49
 hmdcalignerparam.h:50
 hmdcalignerparam.h:51
 hmdcalignerparam.h:52
 hmdcalignerparam.h:53
 hmdcalignerparam.h:54
 hmdcalignerparam.h:55
 hmdcalignerparam.h:56
 hmdcalignerparam.h:57
 hmdcalignerparam.h:58
 hmdcalignerparam.h:59
 hmdcalignerparam.h:60
 hmdcalignerparam.h:61
 hmdcalignerparam.h:62
 hmdcalignerparam.h:63
 hmdcalignerparam.h:64
 hmdcalignerparam.h:65
 hmdcalignerparam.h:66
 hmdcalignerparam.h:67
 hmdcalignerparam.h:68
 hmdcalignerparam.h:69
 hmdcalignerparam.h:70
 hmdcalignerparam.h:71
 hmdcalignerparam.h:72
 hmdcalignerparam.h:73
 hmdcalignerparam.h:74
 hmdcalignerparam.h:75
 hmdcalignerparam.h:76
 hmdcalignerparam.h:77
 hmdcalignerparam.h:78
 hmdcalignerparam.h:79
 hmdcalignerparam.h:80
 hmdcalignerparam.h:81
 hmdcalignerparam.h:82
 hmdcalignerparam.h:83
 hmdcalignerparam.h:84
 hmdcalignerparam.h:85
 hmdcalignerparam.h:86
 hmdcalignerparam.h:87
 hmdcalignerparam.h:88
 hmdcalignerparam.h:89
 hmdcalignerparam.h:90
 hmdcalignerparam.h:91
 hmdcalignerparam.h:92
 hmdcalignerparam.h:93
 hmdcalignerparam.h:94
 hmdcalignerparam.h:95
 hmdcalignerparam.h:96
 hmdcalignerparam.h:97
 hmdcalignerparam.h:98
 hmdcalignerparam.h:99
 hmdcalignerparam.h:100
 hmdcalignerparam.h:101
 hmdcalignerparam.h:102
 hmdcalignerparam.h:103
 hmdcalignerparam.h:104
 hmdcalignerparam.h:105
 hmdcalignerparam.h:106
 hmdcalignerparam.h:107
 hmdcalignerparam.h:108
 hmdcalignerparam.h:109
 hmdcalignerparam.h:110
 hmdcalignerparam.h:111
 hmdcalignerparam.h:112
 hmdcalignerparam.h:113
 hmdcalignerparam.h:114
 hmdcalignerparam.h:115
 hmdcalignerparam.h:116
 hmdcalignerparam.h:117
 hmdcalignerparam.h:118
 hmdcalignerparam.h:119
 hmdcalignerparam.h:120
 hmdcalignerparam.h:121
 hmdcalignerparam.h:122
 hmdcalignerparam.h:123
 hmdcalignerparam.h:124
 hmdcalignerparam.h:125
 hmdcalignerparam.h:126
 hmdcalignerparam.h:127
 hmdcalignerparam.h:128
 hmdcalignerparam.h:129
 hmdcalignerparam.h:130
 hmdcalignerparam.h:131
 hmdcalignerparam.h:132
 hmdcalignerparam.h:133
 hmdcalignerparam.h:134
 hmdcalignerparam.h:135
 hmdcalignerparam.h:136
 hmdcalignerparam.h:137
 hmdcalignerparam.h:138
 hmdcalignerparam.h:139
 hmdcalignerparam.h:140
 hmdcalignerparam.h:141
 hmdcalignerparam.h:142
 hmdcalignerparam.h:143
 hmdcalignerparam.h:144
 hmdcalignerparam.h:145
 hmdcalignerparam.h:146
 hmdcalignerparam.h:147
 hmdcalignerparam.h:148
 hmdcalignerparam.h:149
 hmdcalignerparam.h:150
 hmdcalignerparam.h:151
 hmdcalignerparam.h:152
 hmdcalignerparam.h:153
 hmdcalignerparam.h:154
 hmdcalignerparam.h:155
 hmdcalignerparam.h:156
 hmdcalignerparam.h:157
 hmdcalignerparam.h:158
 hmdcalignerparam.h:159
 hmdcalignerparam.h:160
 hmdcalignerparam.h:161
 hmdcalignerparam.h:162
 hmdcalignerparam.h:163
 hmdcalignerparam.h:164
 hmdcalignerparam.h:165
 hmdcalignerparam.h:166
 hmdcalignerparam.h:167
 hmdcalignerparam.h:168
 hmdcalignerparam.h:169
 hmdcalignerparam.h:170
 hmdcalignerparam.h:171
 hmdcalignerparam.h:172
 hmdcalignerparam.h:173
 hmdcalignerparam.h:174
 hmdcalignerparam.h:175
 hmdcalignerparam.h:176
 hmdcalignerparam.h:177
 hmdcalignerparam.h:178
 hmdcalignerparam.h:179
 hmdcalignerparam.h:180
 hmdcalignerparam.h:181
 hmdcalignerparam.h:182
 hmdcalignerparam.h:183
 hmdcalignerparam.h:184
 hmdcalignerparam.h:185
 hmdcalignerparam.h:186
 hmdcalignerparam.h:187
 hmdcalignerparam.h:188
 hmdcalignerparam.h:189
 hmdcalignerparam.h:190
 hmdcalignerparam.h:191
 hmdcalignerparam.h:192
 hmdcalignerparam.h:193
 hmdcalignerparam.h:194
 hmdcalignerparam.h:195
 hmdcalignerparam.h:196
 hmdcalignerparam.h:197
 hmdcalignerparam.h:198
 hmdcalignerparam.h:199
 hmdcalignerparam.h:200
 hmdcalignerparam.h:201
 hmdcalignerparam.h:202
 hmdcalignerparam.h:203
 hmdcalignerparam.h:204
 hmdcalignerparam.h:205
 hmdcalignerparam.h:206
 hmdcalignerparam.h:207
 hmdcalignerparam.h:208
 hmdcalignerparam.h:209
 hmdcalignerparam.h:210
 hmdcalignerparam.h:211
 hmdcalignerparam.h:212
 hmdcalignerparam.h:213
 hmdcalignerparam.h:214
 hmdcalignerparam.h:215
 hmdcalignerparam.h:216
 hmdcalignerparam.h:217
 hmdcalignerparam.h:218
 hmdcalignerparam.h:219
 hmdcalignerparam.h:220
 hmdcalignerparam.h:221
 hmdcalignerparam.h:222
 hmdcalignerparam.h:223
 hmdcalignerparam.h:224
 hmdcalignerparam.h:225
 hmdcalignerparam.h:226
 hmdcalignerparam.h:227
 hmdcalignerparam.h:228
 hmdcalignerparam.h:229
 hmdcalignerparam.h:230
 hmdcalignerparam.h:231
 hmdcalignerparam.h:232
 hmdcalignerparam.h:233
 hmdcalignerparam.h:234
 hmdcalignerparam.h:235