2 #include "AliHLTTrigger.h"
3 #include "AliHLTTrackArray.h"
4 #include "AliHLTTransform.h"
5 #include "AliHLTVertex.h"
6 #include "AliHLTDefs.h"
7 #include "AliHLTDigitData.h"
8 #include "AliHLTLogging.h"
9 #include "AliHLTTrack.h"
10 #include "AliHLTMemHandler.h"
12 ClassImp(AliHLTTrigger)
14 AliHLTTrigger::AliHLTTrigger()
23 AliHLTTrigger::~AliHLTTrigger()
29 void AliHLTTrigger::InitTrigger()
33 fTracks = new AliHLTTrackArray();
36 void AliHLTTrigger::InitPatch(Int_t slice,Int_t patch)
43 void AliHLTTrigger::FillTracks(Int_t ntracks,AliHLTTrackSegmentData *tr)
45 fTracks->FillTracks(ntracks,tr);
48 void AliHLTTrigger::FillData(AliHLTDigitRowData *data)
53 void AliHLTTrigger::SetParameters(Float_t zcut,Int_t timematch,Int_t padmatch)
60 void AliHLTTrigger::SetOutputData(AliHLTDigitRowData *ptr)
65 void AliHLTTrigger::RemovePileupTracks()
68 for(Int_t i=0; i<fTracks->GetNTracks(); i++)
70 AliHLTTrack *track = fTracks->GetCheckedTrack(i);
72 track->Rotate(fSlice,kTRUE);
73 track->CalculateHelix();
74 track->GetClosestPoint(fVertex,xc,yc,zc);
84 void AliHLTTrigger::RemovePileupData()
88 struct rowhit {Int_t pad; Int_t time;};
89 rowhit row_cross[(fTracks->GetNTracks())];
90 Int_t digitcount[(NumRows[fPatch])];
92 AliHLTDigitRowData *rowPt = fDigitRowData;
93 for(Int_t i=NRows[fPatch][0]; i<=NRows[fPatch][1]; i++)
95 digitcount[(i-NRows[fPatch][0])]=0;
96 for(Int_t j=0; j<fTracks->GetNTracks(); j++)
98 AliHLTTrack *track = fTracks->GetCheckedTrack(j);
100 track->GetCrossingPoint(i,hit);
101 AliHLTTransform::Slice2Sector(fSlice,i,sector,row);
102 AliHLTTransform::Local2Raw(hit,sector,row);
103 row_cross[j].pad = (Int_t)rint(hit[1]);
104 row_cross[j].time = (Int_t)rint(hit[2]);
106 AliHLTDigitData *digPt = (AliHLTDigitData*)rowPt->fDigitData;
108 for(Int_t k=0; k<rowPt->fNDigit; k++)
111 for(Int_t l=0; l<fTracks->GetNTracks(); l++)
113 if(abs((Int_t)digPt[k].fPad-row_cross[l].pad) < fPadMatch &&
114 abs((Int_t)digPt[k].fTime-row_cross[l].time) < fTimeMatch)
116 digitcount[(i-NRows[fPatch][0])]++;
125 AliHLTMemHandler::UpdateRowPointer(rowPt);
128 Int_t size = totalcount*sizeof(AliHLTDigitData) + NumRows[fPatch]*sizeof(AliHLTDigitRowData);
130 LOG(AliHLTLog::kDebug,"AliHLTTrigger::RemovePileupData","Memory")
131 <<"Allocating "<<size<<" bytes of data for trigger event"<<ENDLOG;
132 Byte_t *data = new Byte_t[size];
134 AliHLTDigitRowData *tempPt = (AliHLTDigitRowData*)data;
135 rowPt = fDigitRowData;
138 for(Int_t i=NRows[fPatch][0]; i<=NRows[fPatch][1]; i++)
141 tempPt->fNDigit = digitcount[(i-NRows[fPatch][0])];
142 AliHLTDigitData *digPt = (AliHLTDigitData*)rowPt->fDigitData;
144 for(Int_t j=0; j<rowPt->fNDigit; j++)
146 if(digPt[j].fCharge==0) continue;
147 if(localcount >= digitcount[(i-NRows[fPatch][0])])
149 LOG(AliHLTLog::kFatal,"AliL§Trigger::RemovePileupData","Array")
150 <<"Mismatch in digitcount: "<<localcount<<" "<<digitcount[(i-NRows[fPatch][0])]<<ENDLOG;
153 tempPt->fDigitData[localcount].fCharge=digPt[j].fCharge;
154 tempPt->fDigitData[localcount].fPad=digPt[j].fPad;
155 tempPt->fDigitData[localcount].fTime=digPt[j].fTime;
158 if(digitcount[(i-NRows[fPatch][0])]!=localcount)
160 LOG(AliHLTLog::kFatal,"AliL§Trigger::RemovePileupData","Array")
161 <<"Mismatch in digitcount: "<<localcount<<" "<<digitcount[(i-NRows[fPatch][0])]<<ENDLOG;
163 AliHLTMemHandler::UpdateRowPointer(rowPt);
164 Byte_t *tmp = (Byte_t*)tempPt;
165 Int_t size = sizeof(AliHLTDigitRowData)+digitcount[(i-NRows[fPatch][0])]*sizeof(AliHLTDigitData);
167 tempPt = (AliHLTDigitRowData*)tmp;
170 fOutput=(AliHLTDigitRowData*)data;