fZeroSharedHitsBelowThreshold(false),
fLCuts(),
fHCuts(),
- fUseSimpleMerging(false)
+ fUseSimpleMerging(false),
+ fThreeStripSharing(true)
{
//
// Default Constructor - do not use
fZeroSharedHitsBelowThreshold(false),
fLCuts(),
fHCuts(),
- fUseSimpleMerging(false)
+ fUseSimpleMerging(false),
+ fThreeStripSharing(true)
{
//
// Constructor
// Parameters:
// title Title of object - not significant
//
+ fRingHistos.SetName(GetName());
+ fRingHistos.SetOwner();
+
fRingHistos.Add(new RingHistos(1, 'I'));
fRingHistos.Add(new RingHistos(2, 'I'));
fRingHistos.Add(new RingHistos(2, 'O'));
fZeroSharedHitsBelowThreshold(o.fZeroSharedHitsBelowThreshold),
fLCuts(o.fLCuts),
fHCuts(o.fHCuts),
- fUseSimpleMerging(o.fUseSimpleMerging)
+ fUseSimpleMerging(o.fUseSimpleMerging),
+ fThreeStripSharing(o.fThreeStripSharing)
{
//
// Copy constructor
// Return:
// Reference to this
//
+ if (&o == this) return *this;
TNamed::operator=(o);
fCorrectAngles = o.fCorrectAngles;
fLCuts = o.fLCuts;
fHCuts = o.fHCuts;
fUseSimpleMerging = o.fUseSimpleMerging;
+ fThreeStripSharing = o.fThreeStripSharing;
fRingHistos.Delete();
TIter next(&o.fRingHistos);
//For simple merging
Bool_t used = kFALSE;
Double_t eTotal = -1;
+ Int_t nDistanceBefore = -1;
+ Int_t nDistanceAfter = -1;
+ Bool_t twoLow = kFALSE;
for(UShort_t t = 0; t < nstr; t++) {
+ nDistanceBefore++;
+ nDistanceAfter++;
+
output.SetMultiplicity(d,r,s,t,0.);
Float_t mult = SignalInStrip(input,d,r,s,t);
//For simple merging
- Float_t multNext = 0;
+ Float_t multNext = 0;
+ Float_t multNextNext = 0;
+
if(t<nstr-1) multNext = SignalInStrip(input,d,r,s,t+1);
+ if(t<nstr-2) multNextNext = SignalInStrip(input,d,r,s,t+2);
if(multNext == AliESDFMD::kInvalidMult) multNext = 0;
-
+ if(multNextNext == AliESDFMD::kInvalidMult) multNextNext = 0;
+ if(!fThreeStripSharing) multNextNext = 0;
// Get the pseudo-rapidity
Double_t eta = input.Eta(d,r,s,t);
Double_t phi = input.Phi(d,r,s,t) * TMath::Pi() / 180.;
if(fUseSimpleMerging) {
Float_t etot = 0;
+ if (t < nstr-1) histos->fNeighborsBefore->Fill(mult,multNext);
+ if(mult > GetHighCut(d, r, eta ,false)) {
+ histos->fDistanceBefore->Fill(nDistanceBefore);
+ nDistanceBefore = -1;
+ }
if(eTotal > 0) {
- if( multNext > GetLowCut(d, r, eta) &&
- multNext < GetHighCut(d, r, eta ,false)) {
+ if(fThreeStripSharing && multNext > GetLowCut(d, r, eta) &&
+ (multNext < GetHighCut(d, r, eta ,false) || twoLow)) {
eTotal = eTotal + multNext;
used = kTRUE;
histos->fTriple->Fill(eTotal);
+ twoLow = kFALSE;
}
else {
used = kFALSE;
eTotal = -1;
}
else {
- if(mult > GetLowCut(d, r, eta)) etot = mult;
if(used) {used = kFALSE; continue; }
+ if(mult > GetLowCut(d, r, eta)) etot = mult;
if(mult > GetLowCut(d, r, eta) &&
multNext > GetLowCut(d, r, eta) &&
(mult < GetHighCut(d, r, eta ,false) ||
multNext < GetHighCut(d, r, eta ,false))) {
- if(mult>multNext) {
- etot = mult + multNext;
- used=kTRUE;
- histos->fDouble->Fill(etot);
- }
+
+ if(mult < GetHighCut(d, r, eta ,false) &&
+ multNext < GetHighCut(d, r, eta ,false) )
+ twoLow = kTRUE;
+
+ if(mult>multNext && multNextNext < GetLowCut(d, r, eta))
+ {
+ etot = mult + multNext;
+ used=kTRUE;
+ histos->fDouble->Fill(etot);
+ }
else {
etot = 0;
eTotal = mult + multNext;
}
mergedEnergy = etot;
+ if(mergedEnergy > GetHighCut(d, r, eta ,false) ) {
+ histos->fDistanceAfter->Fill(nDistanceAfter);
+ nDistanceAfter = -1;
+ }
//if(mult>0 && multNext >0)
// std::cout<<mult<<" "<<multNext<<" "<<mergedEnergy<<std::endl;
}
fDouble(0),
fTriple(0),
fSinglePerStrip(0),
+ fDistanceBefore(0),
+ fDistanceAfter(0),
fBeforeAfter(0),
fNeighborsBefore(0),
fNeighborsAfter(0),
fDouble(0),
fTriple(0),
fSinglePerStrip(0),
+ fDistanceBefore(0),
+ fDistanceAfter(0),
fBeforeAfter(0),
fNeighborsBefore(0),
fNeighborsAfter(0),
// d detector
// r ring
//
- fBefore = new TH1D("esdEloss", "Energy loss (reconstruction)",
- 600, 0, 15);
+ fBefore = new TH1D("esdEloss", Form("Energy loss in %s (reconstruction)",
+ GetName()), 600, 0, 15);
fBefore->SetXTitle("#Delta E/#Delta E_{mip}");
fBefore->SetYTitle("P(#Delta E/#Delta E_{mip})");
fBefore->SetFillColor(Color());
fBefore->SetDirectory(0);
fAfter = static_cast<TH1D*>(fBefore->Clone("anaEloss"));
- fAfter->SetTitle("Energy loss in %s (sharing corrected)");
+ fAfter->SetTitle(Form("Energy loss in %s (sharing corrected)", GetName()));
fAfter->SetFillColor(Color()+2);
fAfter->SetLineStyle(1);
fAfter->SetDirectory(0);
fSingle = new TH1D("singleEloss", "Energy loss (single strips)",
600, 0, 15);
- fSingle->SetXTitle("#Delta E/#Delta E_{mip}");
- fSingle->SetYTitle("P(#Delta E/#Delta E_{mip})");
- fSingle->SetFillColor(kMagenta);
+ fSingle->SetXTitle("#Delta/#Delta_{mip}");
+ fSingle->SetYTitle("P(#Delta/#Delta_{mip})");
+ fSingle->SetFillColor(Color());
fSingle->SetFillStyle(3001);
fSingle->SetLineColor(kBlack);
fSingle->SetLineStyle(2);
fSingle->SetDirectory(0);
- fDouble = new TH1D("doubleEloss", "Energy loss (two strips)",
- 600, 0, 15);
- fDouble->SetXTitle("#Delta E/#Delta E_{mip}");
- fDouble->SetYTitle("P(#Delta E/#Delta E_{mip})");
- fDouble->SetFillColor(kMagenta+1);
- fDouble->SetFillStyle(3001);
- fDouble->SetLineColor(kBlack);
- fDouble->SetLineStyle(2);
+ fDouble = static_cast<TH1D*>(fSingle->Clone("doubleEloss"));
+ fDouble->SetTitle("Energy loss (two strips)");
+ fDouble->SetFillColor(Color()+1);
fDouble->SetDirectory(0);
-
- fTriple = new TH1D("tripleEloss", "Energy loss (three strips)",
- 600, 0, 15);
- fTriple->SetXTitle("#Delta E/#Delta E_{mip}");
- fTriple->SetYTitle("P(#Delta E/#Delta E_{mip})");
- fTriple->SetFillColor(kMagenta+2);
- fTriple->SetFillStyle(3001);
- fTriple->SetLineColor(kBlack);
- fTriple->SetLineStyle(2);
+
+ fTriple = static_cast<TH1D*>(fSingle->Clone("tripleEloss"));
+ fTriple->SetTitle("Energy loss (three strips)");
+ fTriple->SetFillColor(Color()+2);
fTriple->SetDirectory(0);
//Int_t nBinsForInner = (r == 'I' ? 32 : 16);
fSinglePerStrip = new TH2D("singlePerStrip", "SinglePerStrip",
600,0,15, nBinsForInner,0,nStrips);
- fSinglePerStrip->SetXTitle("Eloss");
- fSinglePerStrip->SetYTitle("Strip");
+ fSinglePerStrip->SetXTitle("#Delta/#Delta_{mip}");
+ fSinglePerStrip->SetYTitle("Strip #");
fSinglePerStrip->SetZTitle("Counts");
fSinglePerStrip->SetDirectory(0);
+ fDistanceBefore = new TH1D("distanceBefore", "Distance before sharing",
+ nStrips , 0,nStrips );
+ fDistanceBefore->SetXTitle("Distance");
+ fDistanceBefore->SetYTitle("Counts");
+ fDistanceBefore->SetFillColor(kGreen+2);
+ fDistanceBefore->SetFillStyle(3001);
+ fDistanceBefore->SetLineColor(kBlack);
+ fDistanceBefore->SetLineStyle(2);
+ fDistanceBefore->SetDirectory(0);
+
+ fDistanceAfter = static_cast<TH1D*>(fDistanceBefore->Clone("distanceAfter"));
+ fDistanceAfter->SetTitle("Distance after sharing");
+ fDistanceAfter->SetFillColor(kGreen+1);
+ fDistanceAfter->SetDirectory(0);
+
Double_t max = 15;
Double_t min = -1;
fDouble(o.fDouble),
fTriple(o.fTriple),
fSinglePerStrip(o.fSinglePerStrip),
+ fDistanceBefore(o.fDistanceBefore),
+ fDistanceAfter(o.fDistanceAfter),
fBeforeAfter(o.fBeforeAfter),
fNeighborsBefore(o.fNeighborsBefore),
fNeighborsAfter(o.fNeighborsAfter),
// Return:
// Reference to this
//
+ if (&o == this) return *this;
AliForwardUtil::RingHistos::operator=(o);
fDet = o.fDet;
fRing = o.fRing;
if (fDouble) delete fDouble;
if (fTriple) delete fTriple;
if (fSinglePerStrip) delete fSinglePerStrip;
+ if (fDistanceBefore) delete fDistanceBefore;
+ if (fDistanceAfter) delete fDistanceAfter;
if (fHits) delete fHits;
fDouble = static_cast<TH1D*>(o.fDouble->Clone());
fTriple = static_cast<TH1D*>(o.fTriple->Clone());
fSinglePerStrip = static_cast<TH2D*>(o.fSinglePerStrip->Clone());
+ fDistanceBefore = static_cast<TH1D*>(o.fDistanceBefore->Clone());
+ fDistanceAfter = static_cast<TH1D*>(o.fDistanceAfter->Clone());
fBeforeAfter = static_cast<TH2D*>(o.fBeforeAfter->Clone());
fNeighborsBefore = static_cast<TH2D*>(o.fNeighborsBefore->Clone());
fNeighborsAfter = static_cast<TH2D*>(o.fNeighborsAfter->Clone());
d->Add(fDouble);
d->Add(fTriple);
d->Add(fSinglePerStrip);
+ d->Add(fDistanceBefore);
+ d->Add(fDistanceAfter);
d->Add(fBeforeAfter);
d->Add(fNeighborsBefore);
d->Add(fNeighborsAfter);
d->Add(fHits);
d->Add(fSum);
-
- dir->Add(d);
+
+ // Removed to avoid doubly adding the list which destroys
+ // the merging
+ //dir->Add(d);
}
//____________________________________________________________________