00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef STSSDBARREL_HH
00048 #define STSSDBARREL_HH
00049
00050 #include "StSsdUtil/StSsdWafer.hh"
00051 #include "StSsdUtil/StSsdLadder.hh"
00052
00053 class TFile;
00054 class ssdDimensions_st;
00055 class ssdConfiguration_st;
00056 class ssdWafersPosition_st;
00057 class slsCtrl_st;
00058 class St_sls_strip;
00059 class St_spa_strip;
00060 class St_ssdWafersPosition;
00061 class St_ssdStripCalib;
00062 class St_ssdPedStrip;
00063 class St_spa_strip;
00064 class St_sdm_calib_db;
00065 class St_sdm_condition_db;
00066 class St_scf_cluster;
00067 class St_scm_spt;
00068 class St_ssdStripCalib;
00069 class StSsdClusterControl;
00070 class StSsdDynamicControl;
00071 class StSsdHitCollection;
00072 class St_ssdGainCalibWafer;
00073 class St_ssdNoise;
00074
00075 class St_ssdWaferConfiguration;
00076 class StMcEvent;
00077 class StMcSsdHitCollection;
00078 class StMcSsdHit;
00079 #include <vector>
00080
00081 class StSsdBarrel
00082 {
00083 public:
00084 StSsdBarrel(ssdDimensions_st *dimensions, ssdConfiguration_st *config=0);
00085 ~StSsdBarrel();
00086
00087 StSsdBarrel(const StSsdBarrel & originalBarrel);
00088 StSsdBarrel& operator=(const StSsdBarrel originalBarrel);
00089
00090 void initLadders(St_ssdWafersPosition *wafpos);
00091
00092
00093 void addNoiseToStrip(slsCtrl_st* ctrl);
00094 Int_t readStripFromTable(St_spa_strip *spa_strip);
00095 Int_t readStripFromTable(St_sls_strip *sls_strip);
00096 Int_t readNoiseFromTable(St_sdm_calib_db *spa_noise, StSsdDynamicControl *dynamicControl);
00097 Int_t readNoiseFromTable(St_ssdStripCalib *strip_noise, StSsdDynamicControl *dynamicControl);
00098 Int_t readNoiseFromTable(St_ssdStripCalib *noise);
00099 Int_t readNoiseFromTable(St_ssdNoise *strip_noise, StSsdDynamicControl *dynamicControl);
00100 Int_t readNoiseDefault(StSsdDynamicControl *dynamicControl);
00101 Int_t readNoiseDefaultForSimu();
00102 Int_t readConditionDbFromTable(St_sdm_condition_db *condition);
00103 Int_t writeNoiseToFile(St_spa_strip *spa_strip);
00104 Int_t writeNoiseToFile(St_ssdPedStrip *pedStrip, char myLabel[]);
00105 Int_t readClusterFromTable(St_scf_cluster *scf_cluster);
00106 Int_t writeClusterToTable(St_scf_cluster *cluster);
00107 Int_t writeClusterToTable(St_scf_cluster *scf_cluster,St_spa_strip *spa_strip);
00108 Int_t writePointToContainer(St_scm_spt *scm_spt,StSsdHitCollection *ssdHitColl);
00109 Int_t writePointToContainer(St_scm_spt *scm_spt, StSsdHitCollection* ssdHitColl,St_scf_cluster *scf_cluster);
00110 Int_t writePointToContainer(St_scm_spt *scm_spt, StSsdHitCollection* ssdHitColl,St_scf_cluster *scf_cluster,St_spa_strip *spa_strip,StSsdDynamicControl *dynamicControl,StMcEvent *mcEvent);
00111 Int_t writeStripToTable(St_spa_strip * spa_strip);
00112 Int_t writeStripToTable(St_spa_strip * spa_strip,St_sls_strip *sls_strip);
00113 Int_t writeNewNoiseToFile3(St_ssdPedStrip *pedStrip, char myLabel[]);
00114 void doSideClusterisation(Int_t *numberOfCluster);
00115 void doSideClusterisation(Int_t *numberOfCluster,Int_t WafStatus[20][16]);
00116 Int_t doClusterMatching(Float_t CalibArray[320]);
00117 void doDaqSimulation(slsCtrl_st* ctrl);
00118 void convertDigitToAnalog(StSsdDynamicControl *dynamicControl);
00119 void convertGlobalFrameToOther();
00120 void convertUFrameToOther();
00121 void convertToStrip(Double_t pairCreationEnergy,
00122 Int_t nstripInACluster,
00123 Double_t parDiffP,
00124 Double_t parDiffN,
00125 Double_t parIndRightP,
00126 Double_t parIndRightN,
00127 Double_t parIndLeftP,
00128 Double_t parIndLeftN
00129 );
00130 void sortListStrip();
00131 void sortListCluster();
00132 Int_t getNumberOfLadders() { return mNLadder;}
00133 Int_t getNWaferPerLadder() { return mNWaferPerLadder;}
00134 Int_t getSsdLayer() { return mSsdLayer;};
00135 void Calculation_Ratio(int idWafer,int idClusterP,int idClusterN,vector<const StMcSsdHit*> hitCol, int *ratio, int *idTruth);
00136 static Int_t FindMcHit(const vector<int> &id,const vector<const StMcSsdHit*> &hitCol);
00137 Int_t isSplit(StSsdCluster *currentCluster,int iSide,int lad,int waf);
00138 StSsdLadder *getLadder(Int_t i=0) {return mLadders[i];}
00139 ssdDimensions_st *getDimensions() {return mDimensions;}
00140 StSsdClusterControl *getClusterControl() {return mClusterControl;}
00141 Int_t isActiveLadder(Int_t i);
00142 void debugUnPeu(Int_t monLadder, Int_t monwafer);
00143 void setSsdParameters(ssdDimensions_st *geom_par);
00144 void setLorentzShift(ssdDimensions_st *geom_par);
00145 void setClusterControl(StSsdClusterControl *clusterControl) {mClusterControl = clusterControl;}
00146 void initWafers(St_ssdWafersPosition *geom_class) {initLadders(geom_class);}
00147 void renumHitAfterRemove();
00148
00149 Int_t idWaferToWaferNumb(Int_t idWafer);
00150 Int_t idWaferToLadderNumb(Int_t idWafer);
00151 Int_t waferNumbToIdWafer(Int_t waferNumb);
00152 Int_t idWaferToWafer(Int_t idWafer) {return (idWafer-7000)/100-1;}
00153 StSsdPointList *getInactiveHitList();
00154 void Reset();
00155 void SetDebug(Int_t k = 0) {mDebug = k;}
00156 Int_t Debug() {return mDebug;}
00157 private:
00158 Char_t first[1];
00159 public:
00160 StSsdLadder** mLadders;
00161 static StSsdBarrel* Instance() {return fSsdBarrel;}
00162 private:
00163 Int_t mSsdLayer;
00164 Int_t mNLadder;
00165 Int_t mNWaferPerLadder;
00166 Int_t mNStripPerSide;
00167 Int_t mActiveLadders[20];
00168 Float_t mDetectorLargeEdge;
00169 Float_t mDetectorSmallEdge;
00170 Float_t mStripPitch;
00171 Float_t mTheta;
00172 Float_t mShift_hole;
00173 Float_t mShift_elec;
00174 ssdDimensions_st *mDimensions;
00175 StSsdClusterControl *mClusterControl;
00176 Int_t mDebug;
00177 Char_t last[1];
00178 static StSsdBarrel* fSsdBarrel;
00179 };
00180 #endif