59 std::ostringstream str;
61 str <<
fAddbackHits.size() <<
" sili_addback_hits" << std::endl;
67 if(frag ==
nullptr || chan ==
nullptr) {
84 double phi = phi_width * sector;
86 double radius = inner_radius + ring_width * (ring + 0.5);
88 double sep = ring_width * 0.025;
89 double r1 = radius - ring_width * 0.5 + sep;
90 double r2 = radius + ring_width * 0.5 - sep;
91 radius = sqrt(gRandom->Uniform(r1 * r1, r2 * r2));
92 double sepphi = sep / radius;
93 phi = gRandom->Uniform(phi - phi_width * 0.5 + sepphi, phi + phi_width * 0.5 - sepphi);
96 return {cos(phi) * radius, sin(phi) * radius, dist};
116 std::cerr <<
"Addback hits are out of range" << std::endl;
126 std::cerr <<
"Reject hits are out of range" << std::endl;
178 std::vector<bool> fPreampRejectedHit(basehits,
false);
179 for(
int i = 0; i < basehits; i++) {
180 for(
int j = i + 1; j < basehits; j++) {
182 fPreampRejectedHit[i] =
true;
183 fPreampRejectedHit[j] =
true;
188 std::vector<unsigned> clusters_id(basehits, 0);
189 std::vector<std::vector<unsigned>> Clusters;
190 std::vector<bool> hasreject;
193 for(
int i = 0; i < basehits; i++) {
194 if(clusters_id[i] < 1) {
195 std::vector<unsigned> newCluster(1, i);
196 Clusters.push_back(newCluster);
197 clusters_id[i] = Clusters.size();
198 hasreject.push_back(fPreampRejectedHit[i]);
200 unsigned clus_id = clusters_id[i];
202 for(
int j = i + 1; j < basehits; j++) {
204 Clusters[clus_id - 1].push_back(j);
205 if(fPreampRejectedHit[j]) { hasreject[clus_id - 1] =
true; }
206 clusters_id[j] = clus_id;
214 for(
unsigned int i = 0; i < Clusters.size(); i++) {
228 if(e > 0.05 && e < 50) {
231 if(dsector > 5) { dsector = 12 - dsector; }
235 if(dsector + dring < 3) {
return true; }
270 if(cluster.empty()) {
return; }
273 if(cluster.size() > 3) {
274 ContainsReject =
true;
277 if(cluster.size() > 1 && !ContainsReject) {
280 int rA = A->GetRing();
281 int rB = B->GetRing();
282 int sA = A->GetSector();
283 int sB = B->GetSector();
284 int rAB = std::abs(rA - rB);
285 int sAB = std::abs(sA - sB);
286 if(sAB > 5) { sAB = 12 - sAB; }
288 if(cluster.size() == 2) {
290 if(rAB + sAB > 1) { ContainsReject =
true; }
295 int rAC = std::abs(rA - rC);
296 int rBC = std::abs(rB - rC);
297 int sAC = std::abs(sA - sC);
298 int sBC = std::abs(sB - sC);
300 if(sAC > 5) { sAC = 12 - sAC; }
301 if(sBC > 5) { sBC = 12 - sBC; }
303 if(rA == rB && rB == rC) {
305 ContainsReject =
true;
306 }
else if(rAB + sAB > 2 || rAC + sAC > 2 || rBC + sBC > 2) {
308 ContainsReject =
true;
311 if(sA == sB && sB == sC) {
314 if(((rA - rB) * (rA - rC)) < 0) {
315 midE = A->GetEnergy();
316 }
else if(((rB - rA) * (rB - rC)) < 0) {
317 midE = B->GetEnergy();
323 if(midE < 1400) { ContainsReject =
true; }
330 for(
unsigned int j : cluster) {
340 for(
unsigned int j : cluster) {
352 std::vector<TGraph> ret;
359 double r1 = inner_radius + ring_width * ring;
360 double r2 = r1 + ring_width;
363 double phi = (phi_width * sector) +
fOffsetPhi - (0.5 * phi_width);
366 for(
int i = 0; i <= 10; i++) {
367 double x = r1 * TMath::Cos(phi + i * (phi_width / 10.0));
368 double y = r1 * TMath::Sin(phi + i * (phi_width / 10.0));
369 G.SetPoint(G.GetN(), x, y);
372 for(
int i = 10; i >= 0; i--) {
373 double x = r2 * TMath::Cos(phi + i * (phi_width / 10.0));
374 double y = r2 * TMath::Sin(phi + i * (phi_width / 10.0));
375 G.SetPoint(G.GetN(), x, y);
378 G.SetPoint(G.GetN(), (r1)*TMath::Cos(phi), (r1)*TMath::Sin(phi));
virtual Double_t GetTime(const ETimeFlag &correct_flag=ETimeFlag::kAll, Option_t *opt="") const
Returns a time value to the nearest nanosecond!
void Copy(TObject &) const override
!
virtual Short_t GetMultiplicity() const
virtual TDetectorHit * GetHit(const int &index) const
void Clear(Option_t *="") override
!
virtual void AddHit(TDetectorHit *hit)
double GetEnergy(Option_t *opt=nullptr) const override
Double_t GetTimeFit() const
Int_t GetAddbackMultiplicity()
bool fCoincidenceTime(TSiLiHit *, TSiLiHit *)
static int fFitSiLiShape
!
static double fSiLiDefaultDecay
void Print(Option_t *opt="") const override
bool fRejectCriterion(TSiLiHit *, TSiLiHit *)
static std::vector< TGraph > UpstreamShapes()
void Copy(TObject &) const override
void Clear(Option_t *opt="") override
std::vector< unsigned int > fRejectHits
!
TSiLiHit * GetSiLiHit(const Int_t &i=0) const
static int fRingNumber
for geometery
static double fOuterDiameter
!
static double fSiLiDefaultBaseline
TSiLiHit * GetRejectHit(const Int_t &i=0)
static double fSiLiNoiseFac
static double fSiLiDefaultRise
void AddCluster(std::vector< unsigned > &, bool=false)
void AddFragment(const std::shared_ptr< const TFragment > &, TChannel *) override
!
TTransientBits< UChar_t > fSiLiBits
TSiLi & operator=(const TSiLi &)
Int_t GetRejectMultiplicity()
static Int_t GetRing(Int_t seg)
static double fSiLiCoincidenceTime
!
TSiLiHit * GetAddbackHit(const Int_t &i=0)
static double fOffsetPhi
!
std::vector< TSiLiHit > fAddbackHits
!
static bool fRejectPossibleCrosstalk
!
bool fAddbackCriterion(TSiLiHit *, TSiLiHit *)
static double GetSegmentArea(Int_t seg)
static double fInnerDiameter
!
static double fTargetDistance
!
static int fSectorNumber
!
static TVector3 GetPosition(int ring, int sector, bool smear=false)
void SetBit(T bit, Bool_t flag)
Bool_t TestBit(T bit) const