60 std::ostringstream str;
62 str <<
fAddbackHits.size() <<
" sili_addback_hits" << std::endl;
68 if(frag ==
nullptr || chan ==
nullptr) {
85 double phi = phi_width * sector;
87 double radius = inner_radius + ring_width * (ring + 0.5);
89 double sep = ring_width * 0.025;
90 double r1 = radius - ring_width * 0.5 + sep;
91 double r2 = radius + ring_width * 0.5 - sep;
92 radius = sqrt(gRandom->Uniform(r1 * r1, r2 * r2));
93 double sepphi = sep / radius;
94 phi = gRandom->Uniform(phi - phi_width * 0.5 + sepphi, phi + phi_width * 0.5 - sepphi);
97 return {cos(phi) * radius, sin(phi) * radius, dist};
117 std::cerr <<
"Addback hits are out of range" << std::endl;
127 std::cerr <<
"Reject hits are out of range" << std::endl;
179 std::vector<bool> fPreampRejectedHit(basehits,
false);
180 for(
int i = 0; i < basehits; i++) {
181 for(
int j = i + 1; j < basehits; j++) {
183 fPreampRejectedHit[i] =
true;
184 fPreampRejectedHit[j] =
true;
189 std::vector<unsigned> clusters_id(basehits, 0);
190 std::vector<std::vector<unsigned>> Clusters;
191 std::vector<bool> hasreject;
194 for(
int i = 0; i < basehits; i++) {
195 if(clusters_id[i] < 1) {
196 std::vector<unsigned> newCluster(1, i);
197 Clusters.push_back(newCluster);
198 clusters_id[i] = Clusters.size();
199 hasreject.push_back(fPreampRejectedHit[i]);
201 unsigned clus_id = clusters_id[i];
203 for(
int j = i + 1; j < basehits; j++) {
205 Clusters[clus_id - 1].push_back(j);
206 if(fPreampRejectedHit[j]) { hasreject[clus_id - 1] =
true; }
207 clusters_id[j] = clus_id;
215 for(
unsigned int i = 0; i < Clusters.size(); i++) {
229 if(e > 0.05 && e < 50) {
232 if(dsector > 5) { dsector = 12 - dsector; }
236 if(dsector + dring < 3) {
return true; }
271 if(cluster.empty()) {
return; }
274 if(cluster.size() > 3) {
275 ContainsReject =
true;
278 if(cluster.size() > 1 && !ContainsReject) {
281 int rA = A->GetRing();
282 int rB = B->GetRing();
283 int sA = A->GetSector();
284 int sB = B->GetSector();
285 int rAB = std::abs(rA - rB);
286 int sAB = std::abs(sA - sB);
287 if(sAB > 5) { sAB = 12 - sAB; }
289 if(cluster.size() == 2) {
291 if(rAB + sAB > 1) { ContainsReject =
true; }
296 int rAC = std::abs(rA - rC);
297 int rBC = std::abs(rB - rC);
298 int sAC = std::abs(sA - sC);
299 int sBC = std::abs(sB - sC);
301 if(sAC > 5) { sAC = 12 - sAC; }
302 if(sBC > 5) { sBC = 12 - sBC; }
304 if(rA == rB && rB == rC) {
306 ContainsReject =
true;
307 }
else if(rAB + sAB > 2 || rAC + sAC > 2 || rBC + sBC > 2) {
309 ContainsReject =
true;
312 if(sA == sB && sB == sC) {
315 if(((rA - rB) * (rA - rC)) < 0) {
316 midE = A->GetEnergy();
317 }
else if(((rB - rA) * (rB - rC)) < 0) {
318 midE = B->GetEnergy();
324 if(midE < 1400) { ContainsReject =
true; }
331 for(
unsigned int j : cluster) {
341 for(
unsigned int j : cluster) {
353 std::vector<TGraph> ret;
360 double r1 = inner_radius + ring_width * ring;
361 double r2 = r1 + ring_width;
364 double phi = (phi_width * sector) +
fOffsetPhi - (0.5 * phi_width);
367 for(
int i = 0; i <= 10; i++) {
368 double x = r1 * TMath::Cos(phi + i * (phi_width / 10.0));
369 double y = r1 * TMath::Sin(phi + i * (phi_width / 10.0));
370 G.SetPoint(G.GetN(), x, y);
373 for(
int i = 10; i >= 0; i--) {
374 double x = r2 * TMath::Cos(phi + i * (phi_width / 10.0));
375 double y = r2 * TMath::Sin(phi + i * (phi_width / 10.0));
376 G.SetPoint(G.GetN(), x, y);
379 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