| 1 | /** | 
| 2 | * \file TrkLevel1.h | 
| 3 | * \author Elena Vannuccini | 
| 4 | */ | 
| 5 | #ifndef trklevel1_h | 
| 6 | #define trklevel1_h | 
| 7 |  | 
| 8 | #include <TObject.h> | 
| 9 | #include <TClonesArray.h> | 
| 10 | #include <TRef.h> | 
| 11 | #include <TROOT.h> | 
| 12 | #include <TSystem.h> | 
| 13 |  | 
| 14 | //#include <TrkStruct.h> | 
| 15 | #include <TrkParams.h> | 
| 16 |  | 
| 17 | #define INC_CUT 4. | 
| 18 | /** | 
| 19 | * \brief Class to describe tracker clusters. | 
| 20 | * | 
| 21 | * A cluster is defined as a group of adjacent strips whose signals exceed noise by INC_CUT sigma, and at least one strip has signal/noise > SEED_CUT. Tipical values are SEED_CUT = 7 and INC_CUT = 4. | 
| 22 | * | 
| 23 | */ | 
| 24 | // ================================================================== | 
| 25 | class TrkCluster : public TObject { | 
| 26 |  | 
| 27 | private: | 
| 28 |  | 
| 29 |  | 
| 30 | public: | 
| 31 |  | 
| 32 | int view; ///< view | 
| 33 | int maxs; ///< strip number (1-3072) of cluster center | 
| 34 | int indmax; | 
| 35 |  | 
| 36 | Int_t         CLlength; ///< number of stored strip info (signal+sigma+adc+bad) | 
| 37 | Float_t      *clsignal; //[CLlength] | 
| 38 | Float_t      *clsigma;  //[CLlength] | 
| 39 | Int_t        *cladc;    //[CLlength] | 
| 40 | Bool_t       *clbad;    //[CLlength] | 
| 41 |  | 
| 42 | TrkCluster(); | 
| 43 | ~TrkCluster(){Clear();} | 
| 44 | TrkCluster(const TrkCluster&); | 
| 45 |  | 
| 46 | void Dump(); | 
| 47 | void Clear(); | 
| 48 | void Clear(Option_t *option){Clear();} | 
| 49 | void Delete(){Clear();} | 
| 50 |  | 
| 51 | Float_t GetSignal(Int_t, Float_t, Bool_t);    ///< cluster signal | 
| 52 | Float_t GetSignal(Float_t cut)                { return GetSignal( 0, cut, false); } | 
| 53 | Float_t GetSignal(Int_t nstrip, Bool_t force) { return GetSignal( nstrip, -1000., force ); } | 
| 54 | Float_t GetSignal(Int_t nstrip)               { return GetSignal( nstrip, -1000., false ); } | 
| 55 | Float_t GetSignal()                           { return GetSignal( 0,(Float_t)INC_CUT, false); } | 
| 56 |  | 
| 57 | Float_t GetSignalToNoise(Int_t,Float_t);  ///< cluster signal/noise | 
| 58 | Float_t GetSignalToNoise(Float_t cut)  { return GetSignalToNoise( 0, cut); } | 
| 59 | Float_t GetSignalToNoise(Int_t nstrip) { return GetSignalToNoise( nstrip,-1000. ); } | 
| 60 | Float_t GetSignalToNoise()             { return GetSignalToNoise( 0, (Float_t)INC_CUT); } | 
| 61 |  | 
| 62 |  | 
| 63 | Int_t   GetMultiplicity(Float_t);         ///< cluster multiplicity | 
| 64 | Int_t   GetMultiplicity()  { return GetMultiplicity(INC_CUT);  } | 
| 65 |  | 
| 66 | void GetLevel1Struct(cTrkLevel1* l1); | 
| 67 | void GetLevel1Struct(){GetLevel1Struct(&level1event_);} | 
| 68 |  | 
| 69 | Float_t GetCOG(Int_t); | 
| 70 | Float_t GetCOG(Float_t angle); | 
| 71 | Float_t GetCOG(){ return GetCOG(0); } | 
| 72 | Float_t GetETA(Int_t,float,bool); | 
| 73 | //    Float_t GetETA(float angle){ return GetETA(0,angle); } | 
| 74 | Float_t GetDigSat(); | 
| 75 | Float_t GetPositionPU(float); | 
| 76 | Int_t   GetPFAstrips(float angle); | 
| 77 |  | 
| 78 |  | 
| 79 | Bool_t IsBad(Int_t);                ///< bad-cluster flag | 
| 80 | Bool_t IsSaturated(Int_t);          ///< saturated-cluster flag | 
| 81 |  | 
| 82 | Int_t GetPlane() { return (Int_t)((view+1)/2);}         ///< plane number (1-6) | 
| 83 | Int_t GetLadder(){ return 1+(Int_t)((maxs-1)/1024);  }  ///< ladder number (1-3) | 
| 84 | Bool_t IsY(){ return (Bool_t)(view%2); } | 
| 85 | Bool_t IsX(){ return !((Bool_t)(view%2)); } | 
| 86 |  | 
| 87 | TrkCluster* GetTrkCluster(){ return this; } | 
| 88 |  | 
| 89 | friend class TrkLevel1; | 
| 90 |  | 
| 91 | ClassDef(TrkCluster,2); | 
| 92 |  | 
| 93 | }; | 
| 94 |  | 
| 95 | /** | 
| 96 | * \brief Class to describe tracker LEVEL1 data. | 
| 97 | * | 
| 98 | * A Level1 tracker event is defined as a collection of clusters ( TrkCluster objects ). | 
| 99 | * The result of common-noise computation for each viking is also stored ( cnev[24][12] ). | 
| 100 | * A general flag summarize the event status (missing sections, crc failures, decoding errors ans so on...). | 
| 101 | */ | 
| 102 | class TrkLevel1 : public TObject { | 
| 103 |  | 
| 104 | private: | 
| 105 |  | 
| 106 | public: | 
| 107 |  | 
| 108 | Int_t         good[12];       ///< event status | 
| 109 | Float_t       cn[24][12];     ///< CN | 
| 110 | //    Float_t       cnrms[24][12];  ///< CN RMS | 
| 111 | Int_t         cnn[24][12];    ///< number of strips for CN computation | 
| 112 |  | 
| 113 |  | 
| 114 | TClonesArray *Cluster;        ///< clusters | 
| 115 |  | 
| 116 | TrkLevel1(); | 
| 117 | ~TrkLevel1(){Delete();} | 
| 118 |  | 
| 119 | int nclstr() {return Cluster->GetEntries();}    ///< number of stored clusters | 
| 120 |  | 
| 121 | void Dump(); | 
| 122 | //    void SetFromLevel1Struct(cTrkLevel1 *, Bool_t); | 
| 123 | //      void GetLevel1Struct(cTrkLevel1 *) const; | 
| 124 | void GetLevel1Struct(cTrkLevel1 *l1); | 
| 125 | void SetFromLevel1Struct(cTrkLevel1 *l1, Bool_t full); | 
| 126 | void GetLevel1Struct(){GetLevel1Struct(&level1event_);} | 
| 127 | void SetFromLevel1Struct(Bool_t full){SetFromLevel1Struct(&level1event_,full);} | 
| 128 | void SetFromLevel1Struct(){SetFromLevel1Struct(true);} | 
| 129 |  | 
| 130 | void Clear(); | 
| 131 | void Delete(); | 
| 132 | void Set(); | 
| 133 | void Set(TrkLevel1 *trkl1, float mipCut=5., float fcut=0.2); | 
| 134 |  | 
| 135 | TrkCluster*   GetCluster(int); | 
| 136 |  | 
| 137 | TrkLevel1*    GetTrkLevel1(){return this;} | 
| 138 | TClonesArray* GetClusters(){return Cluster;}   ///< returns pointer to the cluster array | 
| 139 |  | 
| 140 | /*     int LoadPfaParam(TString); */ | 
| 141 | /*     int LoadFieldParam(TString); */ | 
| 142 | /*     int LoadChargeParam(TString); */ | 
| 143 | /*     int LoadAlignmentParam(TString); */ | 
| 144 | /*     int LoadMipParam(TString); */ | 
| 145 | /*     int LoadVKMaskParam(TString); */ | 
| 146 | /*     int LoadPfaParam(){return LoadPfaParam("");} */ | 
| 147 | /*     int LoadFieldParam(){return LoadFieldParam("");} */ | 
| 148 | /*     int LoadChargeParam(){return LoadChargeParam("");} */ | 
| 149 | /*     int LoadAlignmentParam(){return LoadAlignmentParam("");} */ | 
| 150 | /*     int LoadMipParam(){return LoadMipParam("");} */ | 
| 151 | /*     int LoadVKMaskParam(){return LoadVKMaskParam("");} */ | 
| 152 | /*     int LoadParams(); */ | 
| 153 |  | 
| 154 | //    int ProcessEvent(int); | 
| 155 | //    int ProcessEvent(){return ProcessEvent();} | 
| 156 | int ProcessEvent(); | 
| 157 |  | 
| 158 | // spostati in TrkParams | 
| 159 | /*     int GetPfaNbinsAngle(); */ | 
| 160 | /*     int GetPfaNbinsETA(); */ | 
| 161 | /*     int GetPfaNbinsCharge(){return 0;} */ | 
| 162 | /*     float* GetPfaCoord(TString pfa, int nview, int nladder, int nang); */ | 
| 163 | /*     float* GetPfaAbs(TString pfa, int nang); */ | 
| 164 |  | 
| 165 | void   StatusDump(int view); | 
| 166 | Bool_t StatusCheck(int view, int flagmask); | 
| 167 |  | 
| 168 |  | 
| 169 | void SetPFA(int pfaid){ sw_.pfaid = pfaid; } | 
| 170 | int  GetPFA(){ return sw_.pfaid; } | 
| 171 |  | 
| 172 |  | 
| 173 | ClassDef(TrkLevel1,2); | 
| 174 |  | 
| 175 | }; | 
| 176 |  | 
| 177 |  | 
| 178 | #endif |