1 /////////////////////////////////////////////////////////////////////////////
3 // AliFemtoShareQualityPairCut - a pair cut which checks for some pair //
4 // qualities that attempt to identify slit/doubly reconstructed tracks //
6 /////////////////////////////////////////////////////////////////////////////
7 /***************************************************************************
9 * $Id: AliFemtoShareQualityPairCut.cxx 50722 2011-07-21 15:18:38Z akisiel $
11 * Author: Adam Kisiel, Ohio State, kisiel@mps.ohio-state.edu
12 ***************************************************************************
14 * Description: part of STAR HBT Framework: AliFemtoMaker package
15 * a cut to remove "shared" and "split" pairs
17 ***************************************************************************
20 **************************************************************************/
22 #include "AliFemtoV0TrackPairCut.h"
27 ClassImp(AliFemtoV0TrackPairCut)
31 AliFemtoV0TrackPairCut::AliFemtoV0TrackPairCut():
35 fShareQualityMax(1.0),
36 fShareFractionMax(1.0),
40 // Default constructor
44 AliFemtoV0TrackPairCut::~AliFemtoV0TrackPairCut(){
48 AliFemtoV0TrackPairCut& AliFemtoV0TrackPairCut::operator=(const AliFemtoV0TrackPairCut& cut)
52 AliFemtoPairCut::operator=(cut);
56 fShareQualityMax = 1.0;
57 fShareFractionMax = 1.0;
66 bool AliFemtoV0TrackPairCut::Pass(const AliFemtoPair* pair){
67 // Check for pairs that are possibly shared/double reconstruction
74 /*if(pair->KStar()>0.15)
81 if(!(pair->Track1()->V0() && pair->Track2()->Track()))
87 if( (-(pair->Track1()->V0()->IdNeg()+1)) ==pair->Track2()->TrackId() || (-(pair->Track1()->V0()->IdPos()+1)) ==pair->Track2()->TrackId())
94 if(pair->Track1()->V0()->IdNeg()==pair->Track2()->TrackId() || pair->Track1()->V0()->IdPos()==pair->Track2()->TrackId())
102 //reject merged trakcs in TPC
105 //temp = dist > fDTPCMin;
110 //kopia z AliFemtoShareQualityPairCut.cxx
117 if ((fShareFractionMax < 1.0) && ( fShareQualityMax < 1.0)) {
118 for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersPos().GetNbits(); imap++) {
119 // If both have clusters in the same row
120 if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) &&
121 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
122 // Do they share it ?
123 if (pair->Track1()->V0()->TPCsharingPos().TestBitNumber(imap) &&
124 pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
126 // cout << "A shared cluster !!!" << endl;
127 // cout << "imap idx1 idx2 "
129 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
135 // Different hits on the same padrow
141 else if (pair->Track1()->V0()->TPCclustersPos().TestBitNumber(imap) ||
142 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
143 // One track has a hit, the other does not
149 Float_t hsmval = 0.0;
150 Float_t hsfval = 0.0;
156 // if (hsmval > -0.4) {
157 // cout << "Pair quality: " << hsmval << " " << an << " " << nh << " "
158 // << (pair->Track1()->Track()) << " "
159 // << (pair->Track2()->Track()) << endl;
160 // cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
162 // if (hsfval > 0.0) {
163 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
166 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
167 if(!temp) return false;
173 for (unsigned int imap=0; imap<pair->Track1()->V0()->TPCclustersNeg().GetNbits(); imap++) {
174 // If both have clusters in the same row
175 if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) &&
176 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
177 // Do they share it ?
178 if (pair->Track1()->V0()->TPCsharingNeg().TestBitNumber(imap) &&
179 pair->Track2()->Track()->TPCsharing().TestBitNumber(imap))
181 // cout << "A shared cluster !!!" << endl;
182 // cout << "imap idx1 idx2 "
184 // << tP1idx[imap] << " " << tP2idx[imap] << endl;
190 // Different hits on the same padrow
196 else if (pair->Track1()->V0()->TPCclustersNeg().TestBitNumber(imap) ||
197 pair->Track2()->Track()->TPCclusters().TestBitNumber(imap)) {
198 // One track has a hit, the other does not
211 // if (hsmval > -0.4) {
212 // cout << "Pair quality: " << hsmval << " " << an << " " << nh << " "
213 // << (pair->Track1()->Track()) << " "
214 // << (pair->Track2()->Track()) << endl;
215 // cout << "Bits: " << pair->Track1()->Track()->TPCclusters().GetNbits() << endl;
217 // if (hsfval > 0.0) {
218 // cout << "Pair sharity: " << hsfval << " " << ns << " " << nh << " " << hsmval << " " << an << " " << nh << endl;
221 temp = (hsmval < fShareQualityMax) && (hsfval < fShareFractionMax);
236 AliFemtoString AliFemtoV0TrackPairCut::Report(){
237 // Prepare the report from the execution
238 string stemp = "AliFemtoV0 Pair Cut - remove shared and split pairs\n"; char ctemp[100];
239 snprintf(ctemp , 100, "Number of pairs which passed:\t%ld Number which failed:\t%ld\n",fNPairsPassed,fNPairsFailed);
241 AliFemtoString returnThis = stemp;
245 void AliFemtoV0TrackPairCut::SetV0Max(Double_t aV0Max) {
249 Double_t AliFemtoV0TrackPairCut::GetAliFemtoV0Max() const {
254 TList *AliFemtoV0TrackPairCut::ListSettings()
256 // return a list of settings in a writable form
257 TList *tListSetttings = new TList();
259 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharequalitymax=%f", fV0Max);
260 snprintf(buf, 200, "AliFemtoV0TrackPairCut.sharefractionmax=%f", fShareFractionMax);
261 tListSetttings->AddLast(new TObjString(buf));
263 return tListSetttings;
266 void AliFemtoV0TrackPairCut::SetRemoveSameLabel(Bool_t aRemove)
268 fRemoveSameLabel = aRemove;
271 void AliFemtoV0TrackPairCut::SetTPCOnly(Bool_t tpconly)
273 fTrackTPCOnly = tpconly;
276 void AliFemtoV0TrackPairCut::SetShareQualityMax(Double_t aShareQualityMax) {
277 fShareQualityMax = aShareQualityMax;
280 void AliFemtoV0TrackPairCut::SetShareFractionMax(Double_t aShareFractionMax) {
281 fShareFractionMax = aShareFractionMax;