# ifndef HMDCALIGNER_H
# define HMDCALIGNER_H
# include "hreconstructor.h"
# include "hmdcgeompar.h"
# include "hcategory.h"
# include "hiterator.h"
# include "hgeomrotation.h"
# include "hgeomvector.h"
# include "hgeomvertexfit.h"
# include "TH1.h"
# include "TGraph.h"
# include "TH2.h"
# include "TNtuple.h"
# include "TMinuit.h"
# include "TFile.h"
# include "TString.h"
# include "hlocation.h"
# include "hmdchit.h"
class TFile;
void fcnalign(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
void fcnalign34(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
void fcnRot(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag);
class HMdcAligner : public HReconstructor {
protected:
HMdcGeomPar* fMdcGeomPar;
TString fNameAscii;
TString fNameRoot;
HCategory* fHitCat;
HIterator* fIter1;
HIterator* fIter2;
HIterator* fIter3;
HIterator* fIter4;
TClonesArray* fHits;
HLocation fLoc;
HGeomRotation* fRotMat;
HGeomVector* fTranslation;
HGeomVector* fEuler;
Double_t* fError;
HGeomVector fTargetPos;
HGeomVector theLocalTarget;
Float_t fXArea;
Float_t fYArea;
Float_t fSArea;
Int_t* fDiscart;
Int_t* fHitsMdc;
Int_t* fHitsFoundInWindow;
Int_t* fHitsFoundAndUnique;
Float_t* zones_X;
Float_t* zones_Y;
Float_t* zones_DX;
Float_t* zones_DY;
Float_t* resZon_X;
Float_t* resZon_Y;
Int_t fNEntries;
Int_t fCount;
Int_t fCountCut;
Bool_t fManual;
Bool_t fAuto;
Bool_t fHistoOff;
Int_t fMin;
Float_t fIterCriteria;
Int_t fNumMods;
Int_t fHistNum;
Int_t fHistZonNum;
Bool_t fUseCut;
Bool_t fUseCutRot;
Bool_t fUseCutRotZ;
Bool_t fUseSlopeCut;
Bool_t fUseTarget;
Bool_t fUseZones;
Float_t fSlopeCut;
Float_t fSigmaX;
Float_t fSigmaY;
Float_t fSigmaS0;
Float_t fSigmaS1;
Float_t fRhoxSx;
Float_t fRhoySy;
Float_t fRhoxSy;
Float_t fXSigmas;
Float_t fYSigmas;
Float_t fS0Sigmas;
Float_t fS1Sigmas;
Float_t fConstTukey;
Int_t fFix;
Bool_t fUseUnitErrors;
Bool_t fUseModErrors;
Bool_t fDoNotUseCov;
Bool_t fUseSharpCut;
Int_t fMinFlag;
Bool_t fSetHomogeneousDistribution;
Bool_t fCloseToSolution;
Int_t fMaxEntriesPerZone;
Int_t* fEntriesPerZone;
Double_t fFunctionMin;
Float_t* fPosError;
public:
TH1F* AvsCinCCS_Polar_Stripe1;
TH1F* AvsCinCCS_Polar_Stripe2;
TH1F* AvsCinCCS_Polar_Stripe3;
TH1F* AvsCinCCS_Polar_Stripe4;
TH1F* AvsCinCCS_Polar_Stripe5;
TH1F* BvsCinCCS_Polar_Stripe1;
TH1F* BvsCinCCS_Polar_Stripe2;
TH1F* BvsCinCCS_Polar_Stripe3;
TH1F* BvsCinCCS_Polar_Stripe4;
TH1F* BvsCinCCS_Polar_Stripe5;
TH1F** CvsDinDCS_X;
TH1F** CvsDinDCS_Y;
TH1F** CvsDinDCS_XSlope;
TH1F** CvsDinDCS_YSlope;
TH1F** BvsDinDCS_X;
TH1F** BvsDinDCS_Y;
TH1F** BvsDinDCS_XSlope;
TH1F** BvsDinDCS_YSlope;
TH1F** AvsDinDCS_X;
TH1F** AvsDinDCS_Y;
TH1F** AvsDinDCS_XSlope;
TH1F** AvsDinDCS_YSlope;
TH1F** DvsCinCCS_X;
TH1F** DvsCinCCS_Y;
TH1F** DvsCinCCS_XSlope;
TH1F** DvsCinCCS_YSlope;
TH1F** BvsCinCCS_X;
TH1F** BvsCinCCS_Y;
TH1F** BvsCinCCS_XSlope;
TH1F** BvsCinCCS_YSlope;
TH1F** AvsCinCCS_X;
TH1F** AvsCinCCS_Y;
TH1F** AvsCinCCS_XSlope;
TH1F** AvsCinCCS_YSlope;
TH1F** DvsBinBCS_X;
TH1F** DvsBinBCS_Y;
TH1F** DvsBinBCS_XSlope;
TH1F** DvsBinBCS_YSlope;
TH1F** CvsBinBCS_X;
TH1F** CvsBinBCS_Y;
TH1F** CvsBinBCS_XSlope;
TH1F** CvsBinBCS_YSlope;
TH1F** AvsBinBCS_X;
TH1F** AvsBinBCS_Y;
TH1F** AvsBinBCS_XSlope;
TH1F** AvsBinBCS_YSlope;
TH1F** DvsAinACS_X;
TH1F** DvsAinACS_Y;
TH1F** DvsAinACS_XSlope;
TH1F** DvsAinACS_YSlope;
TH1F** CvsAinACS_X;
TH1F** CvsAinACS_Y;
TH1F** CvsAinACS_XSlope;
TH1F** CvsAinACS_YSlope;
TH1F** BvsAinACS_X;
TH1F** BvsAinACS_Y;
TH1F** BvsAinACS_XSlope;
TH1F** BvsAinACS_YSlope;
TH1F** BCvsAinACS_X;
TH1F** BCvsAinACS_Y;
TH1F** BCvsACinACS_XSlope;
TH1F** BCvsACinACS_YSlope;
TH1F** ABvsCinCCS_X;
TH1F** ABvsCinCCS_Y;
TH1F** ABvsCinCCS_XSlope;
TH1F** ABvsCinCCS_YSlope;
TH1F** ACvsBinBCS_X;
TH1F** ACvsBinBCS_Y;
TH1F** ACvsBinBCS_XSlope;
TH1F** ACvsBinBCS_YSlope;
TH1F** XChi2Hist;
TH1F** YChi2Hist;
TH1F** TotalChi2;
TH1F** SqrDistToA;
TH1F** SqrDistToB;
TH1F** SqrDistToC;
TH1F** SqrDistToD;
TH1F** SqrDist;
TH1F* fResX;
TH1F* fResY;
TH1F* fResS0;
TH1F* fResS1;
TH1F** BvsAinACS_X_Zone;
TH1F** BvsAinACS_Y_Zone;
TH2F** BvsAinACS_Zon;
TH1F* hisrotZ;
TH1F* hisrotZZon;
TH1F* hisrotY;
TH1F* hisrotYZon;
TH1F* hisrotX;
TH1F* hisrotXZon;
TH1F* hisrotYPos;
TH1F* hisrotXPos;
TH1F* hisrotYNeg;
TH1F* hisrotXNeg;
TH1F* hisrotYZonPos;
TH1F* hisrotXZonPos;
TH1F* hisrotYZonNeg;
TH1F* hisrotXZonNeg;
TGraph* graphXchi2X;
TGraph* graphXchi2Y;
TGraph* graphXchi2;
TGraph* graphYchi2X;
TGraph* graphYchi2Y;
TGraph* graphYchi2;
TGraph* graphCont;
TH1F* DiffACvsAinACS_YSlope_Stripe1;
TH1F* DiffACvsAinACS_YSlope_Stripe2;
TH1F* DiffACvsAinACS_YSlope_Stripe3;
TH1F* DiffACvsAinACS_YSlope_Stripe4;
TH1F* DiffACvsAinACS_YSlope_Stripe5;
TH1F* DiffACvsBinACS_YSlope_Stripe1;
TH1F* DiffACvsBinACS_YSlope_Stripe2;
TH1F* DiffACvsBinACS_YSlope_Stripe3;
TH1F* DiffACvsBinACS_YSlope_Stripe4;
TH1F* DiffACvsBinACS_YSlope_Stripe5;
TH1F* DiffACvsCinACS_YSlope_Stripe1;
TH1F* DiffACvsCinACS_YSlope_Stripe2;
TH1F* DiffACvsCinACS_YSlope_Stripe3;
TH1F* DiffACvsCinACS_YSlope_Stripe4;
TH1F* DiffACvsCinACS_YSlope_Stripe5;
TH1F** DiffBCvsAinACS_XSlope;
TH1F** DiffBCvsAinACS_YSlope;
TH1F** DiffBCvsBinACS_XSlope;
TH1F** DiffBCvsBinACS_YSlope;
TH1F** DiffBCvsCinACS_XSlope;
TH1F** DiffBCvsCinACS_YSlope;
TH1F** DiffACvsAinACS_XSlope;
TH1F** DiffACvsAinACS_YSlope;
TH1F** DiffACvsBinACS_XSlope;
TH1F** DiffACvsBinACS_YSlope;
TH1F** DiffACvsCinACS_XSlope;
TH1F** DiffACvsCinACS_YSlope;
TH1F** DiffBCvsAinACS_XSlopeLow;
TH1F** DiffBCvsAinACS_YSlopeLow;
TH1F** DiffBCvsBinACS_XSlopeLow;
TH1F** DiffBCvsBinACS_YSlopeLow;
TH1F** DiffBCvsCinACS_XSlopeLow;
TH1F** DiffBCvsCinACS_YSlopeLow;
TH1F** DiffACvsAinACS_XSlopeLow;
TH1F** DiffACvsAinACS_YSlopeLow;
TH1F** DiffACvsBinACS_XSlopeLow;
TH1F** DiffACvsBinACS_YSlopeLow;
TH1F** DiffACvsCinACS_XSlopeLow;
TH1F** DiffACvsCinACS_YSlopeLow;
TH1F** DiffBCvsAinACS_XSlopeUp;
TH1F** DiffBCvsAinACS_YSlopeUp;
TH1F** DiffBCvsBinACS_XSlopeUp;
TH1F** DiffBCvsBinACS_YSlopeUp;
TH1F** DiffBCvsCinACS_XSlopeUp;
TH1F** DiffBCvsCinACS_YSlopeUp;
TH1F** DiffACvsAinACS_XSlopeUp;
TH1F** DiffACvsAinACS_YSlopeUp;
TH1F** DiffACvsBinACS_XSlopeUp;
TH1F** DiffACvsBinACS_YSlopeUp;
TH1F** DiffACvsCinACS_XSlopeUp;
TH1F** DiffACvsCinACS_YSlopeUp;
TH1F* AvsCinCCS_Polar;
TH1F* BvsCinCCS_Polar;
TTree* fAlignAll;
TTree* fAlignAllCut;
static Int_t fRecCount;
static TFile *fOutRoot;
Float_t* fWeights;
Float_t* fSteps;
Float_t* fLimits;
public:
HMdcAligner(void);
HMdcAligner(Int_t sector, Int_t modA, Int_t modB);
HMdcAligner(const Text_t* name,const Text_t* title, Int_t sector,
Int_t modA, Int_t modB, Int_t modC=-1, Int_t modD=-1);
HMdcAligner(const Text_t* name,const Text_t* title, Int_t sector, Int_t modA);
~HMdcAligner(void);
Bool_t init(void);
Bool_t reinit(void);
Bool_t finalize(void);
Int_t execute(void);
void execute4(void);
void execute3(void);
void execute2(void);
void execute1(void);
void initDefaults();
void initMinimization();
HGeomVector findEulerAngles(HGeomRotation rot);
void setParContainers();
void setGeomAuxPar();
void setGeomAuxParSim(Int_t ind, Float_t eu1, Float_t eu2, Float_t eu3,
Float_t tr1, Float_t tr2, Float_t tr3);
void setHistograms(void);
void setTree(void);
void setEulerAngles(Int_t ind,Float_t f, Float_t s, Float_t t);
TTree* getTree(void){if(fUseCut) return fAlignAllCut;
return fAlignAll;}
void setRotMatrix(Int_t ind,HGeomRotation newRot){fRotMat[ind]=newRot;}
void setMinFlag(Int_t flag){fMinFlag=flag;}
Int_t getMinFlag(void){return fMinFlag;}
HGeomRotation getRotMatrix(Int_t i){return fRotMat[i];}
HGeomVector getTranslation(Int_t i){return fTranslation[i];}
Int_t getStrategy(void){return fMin;}
Float_t* getZonesX(void){return zones_X;}
Float_t* getZonesY(void){return zones_Y;}
Float_t* getResZonX(void){return resZon_X;}
Float_t* getResZonY(void){return resZon_Y;}
HGeomVector getLocalTarget(HGeomRotation rot,HGeomVector tran);
TClonesArray* getHits(void){return fHits;}
Float_t* getWeights(void){return fWeights;}
Float_t* getErrors(void){return fPosError;}
Int_t getNumMods(void){return fNumMods;}
Bool_t getUseUnitErrors(void){return fUseUnitErrors;}
Bool_t getUseModErrors(void){return fUseModErrors;}
Int_t getRelParams(HGeomVector*& ang,HGeomVector*& tra);
void transfEuler(HGeomRotation eulrot,HGeomVector eulvec,
HGeomVector oldV, HGeomVector newV);
void transfEulerInv(HGeomRotation eulrot,HGeomVector eulvec,
HGeomVector oldV, HGeomVector newV);
void findAbsolutePosition(HGeomRotation* rot, HGeomVector* vect);
HGeomVector findProjPoint(HMdcHit* pHit, HGeomRotation rot,
HGeomVector tra, Float_t* slopes);
Bool_t isInsideWindow(Int_t plot, HMdcHit* pHit, HGeomVector point,
Float_t* slope);
void mergeHits(HMdcHit* hitB, HMdcHit* hitA,
HGeomRotation rot,HGeomVector tra,
HMdcHit* mergeHit);
void transformToSlopes(HMdcHit* pHit, Float_t* slopes);
void fillHistograms(Int_t index, Int_t select=0);
void fitHistograms(Int_t index);
void storeInFile(void);
void fillRotMatrix(Int_t ind,Float_t prim,Float_t segu, Float_t terc);
void fillTranslation(Int_t ind,Float_t x,Float_t y, Float_t z);
void divideInZones(Int_t loop,HGeomRotation rot,HGeomVector tran);
void setSearchLimits(Float_t x, Float_t y, Float_t s=1.);
void setSigmas(Float_t XSigmas, Float_t YSigmas,
Float_t S0Sigmas, Float_t S1Sigmas);
void setTukeyConstant(Float_t cte);
void setGeomParAutoOn(void);
void setControlHistoOff(void);
void setMinimization(Int_t select=1);
void setUnitErrors(void);
void setOffCov(void);
void setSharpCut(void);
void setHomogeneousDistribution(Int_t maxEntries=1000);
void setFix(Int_t fix);
void setNoCut(void);
void setCutRot(void);
void setCutRotZ(void);
void setNoZones(void);
void setCloseToSolution(void);
void setTargetOn(HGeomVector target);
void setSlopeCut(Float_t SlopeCut=0.1);
void setIterCriteria(Float_t criteria);
void setWeights(Float_t w0,Float_t w1,Float_t w2,Float_t w3);
void setModErrors(Float_t errXModA,Float_t errYModA,Float_t errXModB,
Float_t errYModB,Float_t errXModC,Float_t errYModC,
Float_t errXModD,Float_t errYModD);
void setSteps(Float_t s0,Float_t s1,Float_t s2,
Float_t s3, Float_t s4, Float_t s5,
Float_t s6=0., Float_t s7=0., Float_t s8=0.,
Float_t s9=0., Float_t s10=0., Float_t s11=0.,
Float_t s12=0., Float_t s13=0., Float_t s14=0.,
Float_t s15=0., Float_t s16=0., Float_t s17=0.);
void setLimits(Float_t l0,Float_t l1,Float_t l2,
Float_t l3,Float_t l4,Float_t l5,
Float_t l6=0., Float_t l7=0., Float_t l8=0.,
Float_t l9=0., Float_t l10=0., Float_t l11=0.,
Float_t l12=0., Float_t l13=0., Float_t l14=0.,
Float_t l15=0., Float_t l16=0., Float_t l17=0.);
void setZones(Float_t* X=0,Float_t* Y=0, Float_t* DX=0, Float_t* DY=0);
void minfit(Int_t fix, HGeomVector* fE, HGeomVector* fT);
void minfitRot(Int_t fix, Double_t first, Double_t second=0);
HGeomVector translationFinderZones(HGeomRotation rot,HGeomVector tran);
HGeomVector translationFinder(Int_t XYorBoth=-1,
Int_t XLowLim=0, Int_t XUppLim=0,
Int_t YLowLim=0, Int_t YUppLim=0);
HGeomVector translationFinderRW(Int_t XYorBoth=-1,
Int_t XLowLim=0, Int_t XUppLim=0,
Int_t YLowLim=0, Int_t YUppLim=0);
Float_t* rotZFinder(Int_t noZones=0);
Float_t* rotYXFinder(Int_t noZones=0, Int_t YorX=0);
void findRotXYBySampling(Int_t angleIter=1,Int_t iter=0);
void findRotXGeometrically(Int_t iter=0);
void findRotYGeometrically(Int_t iter=0);
void findRotZGeometrically(Int_t iter=0);
void setOutputAscii(TString name);
void setOutputRoot(TString name);
ClassDef(HMdcAligner,1)
};
# endif /* !HMDCALIGNER_H */
Last change: Sat May 22 12:59:37 2010
Last generated: 2010-05-22 12:59
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.