ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


////////////////////////////////////////////////////////////////////////////
//                                                                        //
//  TRD multiplicity                                                      //
//                                                                        //
// Task to select true single tracks
// 
// Program flow:
// Part A - task AliTRDmultiplicity (within the framework qaRec):
//   For TRD standalone or TRD&TOF tracks I make a FitRiemanTilt
//   The resulting parameterization is dumped into a DebugStreamer written to a file
// 
// Part B – $ALICE_ROOT/TRD/qaRec/macros/TrackletsinTRD.C[h] (analysis macro):
//   The clusters are read in
//   The above produced file is read in
//   I make a fit through the parameterization of the  FitRiemanTilt -> in order to get a straight line (representing the track)
//   the distance of each cluster with respect to the straight line is calculated
//   If there is no cluster at a distance of 0.6  to 2 with respect to the track, the track is defined as a good track, i.e. clean single track
//                                                                        //
//  Authors: Yvonne C. Pachmayer <pachmay@physi.uni-heidelberg.de>        //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

#include <TObjArray.h>
#include <TH1F.h>
#include <TTreeStream.h>

#include "AliESDtrack.h"
#include "AliExternalTrackParam.h"
#include "AliTRDseedV1.h"
#include "AliTRDtrackV1.h"
#include "AliTRDtrackerV1.h"
#include "AliTrackPointArray.h"

#include "AliTRDmultiplicity.h"
#include "AliTRDgeometry.h"
#include "info/AliTRDtrackInfo.h"

ClassImp(AliTRDmultiplicity)

//____________________________________________________________________
AliTRDmultiplicity::AliTRDmultiplicity()
    :AliTRDrecoTask()
  ,fEventCounter(0)
{
  //
  // Default constructor
    //
}

AliTRDmultiplicity::AliTRDmultiplicity(char* name)
    :AliTRDrecoTask(name, "Barrel Tracking Multiplicity")
  ,fEventCounter(0)
{
  //
  // Default constructor
    //
}

//____________________________________________________________________
AliTRDmultiplicity::~AliTRDmultiplicity()
{
}

//____________________________________________________________________
void  AliTRDmultiplicity::UserCreateOutputObjects()
{
  //
  // Create output objects
  //

  TH1 *h = 0x0;
  fContainer = new TObjArray();
  for(Int_t is=0; is<AliTRDgeometry::kNsector; is++){
  fContainer->Add(h = new TH1F(Form("h_sector_%i", is), " ", 100,-10,10));
  }
} 

//____________________________________________________________________
void AliTRDmultiplicity::UserExec(Option_t *)
{
  //
  // Do it
  //



  ULong_t status;
  AliTRDtrackInfo     *track = 0x0;
  AliExternalTrackParam *esd = 0x0;
  AliTRDtrackV1 *trackTRD = 0x0;
  Double_t x_anode[AliTRDgeometry::kNlayer] = {300.2, 312.8, 325.4, 338.0, 350.6, 363.2}; // Take the default X0
  Int_t standAlone=1;
  fEventCounter++;


  for(Int_t itrk=0; itrk<fTracks->GetEntriesFast(); itrk++){
    track = (AliTRDtrackInfo*)fTracks->UncheckedAt(itrk);
    if(!track->HasESDtrack()) continue;
    status = track->GetStatus();

    AliTrackPoint points[6];
    Float_t xyz[3];
    memset(xyz, 0, sizeof(Float_t) * 3);
    Float_t trackletX[6];
    Float_t trackletY[6];
    Float_t trackletZ[6];
    for(Int_t a=0;a<6;a++)
    {
        xyz[0] = x_anode[a];
        points[a].SetXYZ(xyz);
        trackletX[a]=-1000;
        trackletY[a]=-1000;
        trackletZ[a]=-1000;
    }
    Int_t detTracklet=600;



    // TRD standalone
    if(((status&AliESDtrack::kTRDout)>0) && !((status&AliESDtrack::kTRDin)>0))
    {
        trackTRD = track->GetTrack();

        if(trackTRD)
        {
            AliTRDseedV1 *tracklet = 0x0;
            Int_t counterTracklet=0;
            for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++)
            {
                tracklet = trackTRD->GetTracklet(itl);
                if(tracklet)
                {
                    if(tracklet->IsOK())
                    {
                        counterTracklet++;
                        detTracklet=tracklet->GetDetector();
                        //printf("%i %f %f \n",itl,tracklet->GetYfit(0),tracklet->GetZfit(0));
                        trackletX[itl]=tracklet->GetX0();
                        trackletY[itl]=tracklet->GetYfit(0);
                        trackletZ[itl]=tracklet->GetZfit(0);
                    }
                }
            }
            // this cut is needed otherwise the order of tracklets in the fit function is not correct
            if(counterTracklet==AliTRDgeometry::kNlayer) AliTRDtrackerV1::FitRiemanTilt(const_cast<AliTRDtrackV1 *>(trackTRD), 0x0, kTRUE, counterTracklet, points);
            else continue;

            if(DebugLevel()>=1){
              for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
                //printf("---------------------------------------- %i %i %f %f %f \n",counterTracklet,il,points[il].GetX(),points[il].GetY(),points[il].GetZ());
                Double_t pointX=points[il].GetX();
                Double_t pointY=points[il].GetY();
                Double_t pointZ=points[il].GetZ();


                (*DebugStream())   << "TrackletsinTRD"
                    << "standalone=" << standAlone
                    << "eventcounter=" << fEventCounter
                    << "layer="     << il
                    << "dettracklet=" << detTracklet
                    << "xtracklet=" << trackletX[il]
                    << "xtrack="    << pointX
                    << "ytracklet=" << trackletY[il]
                    << "ytrack="    << pointY
                    << "ztracklet=" << trackletZ[il]
                    << "ztrack="    << pointZ
                    << "num_tracklets=" << counterTracklet
                    << "\n";

              }
            }
        }
    } // end TRD standalone



    // TPC cluster selection for cosmic data
    if((track->GetTPCncls())<40) continue;
    // missing TPC propagation
    if(!(status&AliESDtrack::kTPCout)) continue;
    standAlone=0;

    esd = track->GetESDinfo()->GetOuterParam();
    // calculate sector - does not matter if track ends in TPC or TRD - sector number independent
    Double_t alpha;
    alpha=-100;
    Int_t fSector=100;
    if(esd){
        alpha=esd->GetAlpha();
        fSector = (Int_t)((alpha+ TMath::Pi())/(20*TMath::Pi()/180));
        if((fSector>-1) && (fSector<18))
        {
        }
        else
        {
            continue;
        }
    }



    // only these sectors have a TRD detector at the moment
   if(fSector==0||fSector==8||fSector==9||fSector==17)
    {
        trackTRD = track->GetTrack();
        if(!trackTRD) continue;
        AliTRDseedV1 *tracklet = 0x0;
        Int_t counterTracklet=0;


        for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
            tracklet = trackTRD->GetTracklet(itl);
            if(!tracklet || !tracklet->IsOK()) continue;
            counterTracklet++;
            detTracklet=tracklet->GetDetector();
            trackletX[itl]=tracklet->GetX0();
            trackletY[itl]=tracklet->GetYfit(0);
            trackletZ[itl]=tracklet->GetZfit(0);

            /*
            AliTRDcluster *c = 0x0;
            for(Int_t itime = 0; itime < AliTRDseedV1::kNtb; itime++){
                c = tracklet->GetClusters(itime);
                if(!c) continue;
//                Float_t cluster_x = c->GetX();
//                Bool_t isprop;
//                isprop=kFALSE;
//                isprop=AliTracker::PropagateTrackTo(esd,(Double_t)cluster_x,0.105,5,kFALSE);
//                if(isprop)
//                {
//                    Int_t detector = c->GetDetector();
//                    ((TH1F*)fContainer->At(fSector))->Fill((c->GetY())-(esd->GetY()));
//                    if(c->GetY()-esd->GetY()>);
//                    printf("diff: %f\n",c->GetY()-(esd->GetY()));
//                }
            }
            */

        } // loop over tracklets ends

        if(counterTracklet==AliTRDgeometry::kNlayer)
        {
            AliTRDtrackerV1::FitRiemanTilt(const_cast<AliTRDtrackV1 *>(trackTRD), 0x0, kTRUE, counterTracklet, points);
        }
        else continue;

       

        if(DebugLevel()>=1){
          for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
            //printf("---------------------------------------- %i %i %f %f %f \n",counterTracklet,il,points[il].GetX(),points[il].GetY(),points[il].GetZ());
            Double_t pointX=points[il].GetX();
            Double_t pointY=points[il].GetY();
            Double_t pointZ=points[il].GetZ();
            
            (*DebugStream())   << "TrackletsinTRD"
                << "standalone=" << standAlone
                << "eventcounter=" << fEventCounter
                << "layer="     << il
                << "dettracklet=" << detTracklet
                << "xtracklet=" << trackletX[il]
                << "xtrack="    << pointX
                << "ytracklet=" << trackletY[il]
                << "ytrack="    << pointY
                << "ztracklet=" << trackletZ[il]
                << "ztrack="    << pointZ
                << "num_tracklets=" << counterTracklet
                << "\n";
          }
        }

    }
  }

  
  PostData(1, fContainer);
}


 AliTRDmultiplicity.cxx:1
 AliTRDmultiplicity.cxx:2
 AliTRDmultiplicity.cxx:3
 AliTRDmultiplicity.cxx:4
 AliTRDmultiplicity.cxx:5
 AliTRDmultiplicity.cxx:6
 AliTRDmultiplicity.cxx:7
 AliTRDmultiplicity.cxx:8
 AliTRDmultiplicity.cxx:9
 AliTRDmultiplicity.cxx:10
 AliTRDmultiplicity.cxx:11
 AliTRDmultiplicity.cxx:12
 AliTRDmultiplicity.cxx:13
 AliTRDmultiplicity.cxx:14
 AliTRDmultiplicity.cxx:15
 AliTRDmultiplicity.cxx:16
 AliTRDmultiplicity.cxx:17
 AliTRDmultiplicity.cxx:18
 AliTRDmultiplicity.cxx:19
 AliTRDmultiplicity.cxx:20
 AliTRDmultiplicity.cxx:21
 AliTRDmultiplicity.cxx:22
 AliTRDmultiplicity.cxx:23
 AliTRDmultiplicity.cxx:24
 AliTRDmultiplicity.cxx:25
 AliTRDmultiplicity.cxx:26
 AliTRDmultiplicity.cxx:27
 AliTRDmultiplicity.cxx:28
 AliTRDmultiplicity.cxx:29
 AliTRDmultiplicity.cxx:30
 AliTRDmultiplicity.cxx:31
 AliTRDmultiplicity.cxx:32
 AliTRDmultiplicity.cxx:33
 AliTRDmultiplicity.cxx:34
 AliTRDmultiplicity.cxx:35
 AliTRDmultiplicity.cxx:36
 AliTRDmultiplicity.cxx:37
 AliTRDmultiplicity.cxx:38
 AliTRDmultiplicity.cxx:39
 AliTRDmultiplicity.cxx:40
 AliTRDmultiplicity.cxx:41
 AliTRDmultiplicity.cxx:42
 AliTRDmultiplicity.cxx:43
 AliTRDmultiplicity.cxx:44
 AliTRDmultiplicity.cxx:45
 AliTRDmultiplicity.cxx:46
 AliTRDmultiplicity.cxx:47
 AliTRDmultiplicity.cxx:48
 AliTRDmultiplicity.cxx:49
 AliTRDmultiplicity.cxx:50
 AliTRDmultiplicity.cxx:51
 AliTRDmultiplicity.cxx:52
 AliTRDmultiplicity.cxx:53
 AliTRDmultiplicity.cxx:54
 AliTRDmultiplicity.cxx:55
 AliTRDmultiplicity.cxx:56
 AliTRDmultiplicity.cxx:57
 AliTRDmultiplicity.cxx:58
 AliTRDmultiplicity.cxx:59
 AliTRDmultiplicity.cxx:60
 AliTRDmultiplicity.cxx:61
 AliTRDmultiplicity.cxx:62
 AliTRDmultiplicity.cxx:63
 AliTRDmultiplicity.cxx:64
 AliTRDmultiplicity.cxx:65
 AliTRDmultiplicity.cxx:66
 AliTRDmultiplicity.cxx:67
 AliTRDmultiplicity.cxx:68
 AliTRDmultiplicity.cxx:69
 AliTRDmultiplicity.cxx:70
 AliTRDmultiplicity.cxx:71
 AliTRDmultiplicity.cxx:72
 AliTRDmultiplicity.cxx:73
 AliTRDmultiplicity.cxx:74
 AliTRDmultiplicity.cxx:75
 AliTRDmultiplicity.cxx:76
 AliTRDmultiplicity.cxx:77
 AliTRDmultiplicity.cxx:78
 AliTRDmultiplicity.cxx:79
 AliTRDmultiplicity.cxx:80
 AliTRDmultiplicity.cxx:81
 AliTRDmultiplicity.cxx:82
 AliTRDmultiplicity.cxx:83
 AliTRDmultiplicity.cxx:84
 AliTRDmultiplicity.cxx:85
 AliTRDmultiplicity.cxx:86
 AliTRDmultiplicity.cxx:87
 AliTRDmultiplicity.cxx:88
 AliTRDmultiplicity.cxx:89
 AliTRDmultiplicity.cxx:90
 AliTRDmultiplicity.cxx:91
 AliTRDmultiplicity.cxx:92
 AliTRDmultiplicity.cxx:93
 AliTRDmultiplicity.cxx:94
 AliTRDmultiplicity.cxx:95
 AliTRDmultiplicity.cxx:96
 AliTRDmultiplicity.cxx:97
 AliTRDmultiplicity.cxx:98
 AliTRDmultiplicity.cxx:99
 AliTRDmultiplicity.cxx:100
 AliTRDmultiplicity.cxx:101
 AliTRDmultiplicity.cxx:102
 AliTRDmultiplicity.cxx:103
 AliTRDmultiplicity.cxx:104
 AliTRDmultiplicity.cxx:105
 AliTRDmultiplicity.cxx:106
 AliTRDmultiplicity.cxx:107
 AliTRDmultiplicity.cxx:108
 AliTRDmultiplicity.cxx:109
 AliTRDmultiplicity.cxx:110
 AliTRDmultiplicity.cxx:111
 AliTRDmultiplicity.cxx:112
 AliTRDmultiplicity.cxx:113
 AliTRDmultiplicity.cxx:114
 AliTRDmultiplicity.cxx:115
 AliTRDmultiplicity.cxx:116
 AliTRDmultiplicity.cxx:117
 AliTRDmultiplicity.cxx:118
 AliTRDmultiplicity.cxx:119
 AliTRDmultiplicity.cxx:120
 AliTRDmultiplicity.cxx:121
 AliTRDmultiplicity.cxx:122
 AliTRDmultiplicity.cxx:123
 AliTRDmultiplicity.cxx:124
 AliTRDmultiplicity.cxx:125
 AliTRDmultiplicity.cxx:126
 AliTRDmultiplicity.cxx:127
 AliTRDmultiplicity.cxx:128
 AliTRDmultiplicity.cxx:129
 AliTRDmultiplicity.cxx:130
 AliTRDmultiplicity.cxx:131
 AliTRDmultiplicity.cxx:132
 AliTRDmultiplicity.cxx:133
 AliTRDmultiplicity.cxx:134
 AliTRDmultiplicity.cxx:135
 AliTRDmultiplicity.cxx:136
 AliTRDmultiplicity.cxx:137
 AliTRDmultiplicity.cxx:138
 AliTRDmultiplicity.cxx:139
 AliTRDmultiplicity.cxx:140
 AliTRDmultiplicity.cxx:141
 AliTRDmultiplicity.cxx:142
 AliTRDmultiplicity.cxx:143
 AliTRDmultiplicity.cxx:144
 AliTRDmultiplicity.cxx:145
 AliTRDmultiplicity.cxx:146
 AliTRDmultiplicity.cxx:147
 AliTRDmultiplicity.cxx:148
 AliTRDmultiplicity.cxx:149
 AliTRDmultiplicity.cxx:150
 AliTRDmultiplicity.cxx:151
 AliTRDmultiplicity.cxx:152
 AliTRDmultiplicity.cxx:153
 AliTRDmultiplicity.cxx:154
 AliTRDmultiplicity.cxx:155
 AliTRDmultiplicity.cxx:156
 AliTRDmultiplicity.cxx:157
 AliTRDmultiplicity.cxx:158
 AliTRDmultiplicity.cxx:159
 AliTRDmultiplicity.cxx:160
 AliTRDmultiplicity.cxx:161
 AliTRDmultiplicity.cxx:162
 AliTRDmultiplicity.cxx:163
 AliTRDmultiplicity.cxx:164
 AliTRDmultiplicity.cxx:165
 AliTRDmultiplicity.cxx:166
 AliTRDmultiplicity.cxx:167
 AliTRDmultiplicity.cxx:168
 AliTRDmultiplicity.cxx:169
 AliTRDmultiplicity.cxx:170
 AliTRDmultiplicity.cxx:171
 AliTRDmultiplicity.cxx:172
 AliTRDmultiplicity.cxx:173
 AliTRDmultiplicity.cxx:174
 AliTRDmultiplicity.cxx:175
 AliTRDmultiplicity.cxx:176
 AliTRDmultiplicity.cxx:177
 AliTRDmultiplicity.cxx:178
 AliTRDmultiplicity.cxx:179
 AliTRDmultiplicity.cxx:180
 AliTRDmultiplicity.cxx:181
 AliTRDmultiplicity.cxx:182
 AliTRDmultiplicity.cxx:183
 AliTRDmultiplicity.cxx:184
 AliTRDmultiplicity.cxx:185
 AliTRDmultiplicity.cxx:186
 AliTRDmultiplicity.cxx:187
 AliTRDmultiplicity.cxx:188
 AliTRDmultiplicity.cxx:189
 AliTRDmultiplicity.cxx:190
 AliTRDmultiplicity.cxx:191
 AliTRDmultiplicity.cxx:192
 AliTRDmultiplicity.cxx:193
 AliTRDmultiplicity.cxx:194
 AliTRDmultiplicity.cxx:195
 AliTRDmultiplicity.cxx:196
 AliTRDmultiplicity.cxx:197
 AliTRDmultiplicity.cxx:198
 AliTRDmultiplicity.cxx:199
 AliTRDmultiplicity.cxx:200
 AliTRDmultiplicity.cxx:201
 AliTRDmultiplicity.cxx:202
 AliTRDmultiplicity.cxx:203
 AliTRDmultiplicity.cxx:204
 AliTRDmultiplicity.cxx:205
 AliTRDmultiplicity.cxx:206
 AliTRDmultiplicity.cxx:207
 AliTRDmultiplicity.cxx:208
 AliTRDmultiplicity.cxx:209
 AliTRDmultiplicity.cxx:210
 AliTRDmultiplicity.cxx:211
 AliTRDmultiplicity.cxx:212
 AliTRDmultiplicity.cxx:213
 AliTRDmultiplicity.cxx:214
 AliTRDmultiplicity.cxx:215
 AliTRDmultiplicity.cxx:216
 AliTRDmultiplicity.cxx:217
 AliTRDmultiplicity.cxx:218
 AliTRDmultiplicity.cxx:219
 AliTRDmultiplicity.cxx:220
 AliTRDmultiplicity.cxx:221
 AliTRDmultiplicity.cxx:222
 AliTRDmultiplicity.cxx:223
 AliTRDmultiplicity.cxx:224
 AliTRDmultiplicity.cxx:225
 AliTRDmultiplicity.cxx:226
 AliTRDmultiplicity.cxx:227
 AliTRDmultiplicity.cxx:228
 AliTRDmultiplicity.cxx:229
 AliTRDmultiplicity.cxx:230
 AliTRDmultiplicity.cxx:231
 AliTRDmultiplicity.cxx:232
 AliTRDmultiplicity.cxx:233
 AliTRDmultiplicity.cxx:234
 AliTRDmultiplicity.cxx:235
 AliTRDmultiplicity.cxx:236
 AliTRDmultiplicity.cxx:237
 AliTRDmultiplicity.cxx:238
 AliTRDmultiplicity.cxx:239
 AliTRDmultiplicity.cxx:240
 AliTRDmultiplicity.cxx:241
 AliTRDmultiplicity.cxx:242
 AliTRDmultiplicity.cxx:243
 AliTRDmultiplicity.cxx:244
 AliTRDmultiplicity.cxx:245
 AliTRDmultiplicity.cxx:246
 AliTRDmultiplicity.cxx:247
 AliTRDmultiplicity.cxx:248
 AliTRDmultiplicity.cxx:249
 AliTRDmultiplicity.cxx:250
 AliTRDmultiplicity.cxx:251
 AliTRDmultiplicity.cxx:252
 AliTRDmultiplicity.cxx:253
 AliTRDmultiplicity.cxx:254
 AliTRDmultiplicity.cxx:255
 AliTRDmultiplicity.cxx:256
 AliTRDmultiplicity.cxx:257
 AliTRDmultiplicity.cxx:258
 AliTRDmultiplicity.cxx:259
 AliTRDmultiplicity.cxx:260
 AliTRDmultiplicity.cxx:261
 AliTRDmultiplicity.cxx:262
 AliTRDmultiplicity.cxx:263
 AliTRDmultiplicity.cxx:264
 AliTRDmultiplicity.cxx:265
 AliTRDmultiplicity.cxx:266
 AliTRDmultiplicity.cxx:267
 AliTRDmultiplicity.cxx:268
 AliTRDmultiplicity.cxx:269
 AliTRDmultiplicity.cxx:270
 AliTRDmultiplicity.cxx:271
 AliTRDmultiplicity.cxx:272
 AliTRDmultiplicity.cxx:273
 AliTRDmultiplicity.cxx:274
 AliTRDmultiplicity.cxx:275
 AliTRDmultiplicity.cxx:276
 AliTRDmultiplicity.cxx:277
 AliTRDmultiplicity.cxx:278
 AliTRDmultiplicity.cxx:279
 AliTRDmultiplicity.cxx:280
 AliTRDmultiplicity.cxx:281
 AliTRDmultiplicity.cxx:282
 AliTRDmultiplicity.cxx:283
 AliTRDmultiplicity.cxx:284
 AliTRDmultiplicity.cxx:285
 AliTRDmultiplicity.cxx:286
 AliTRDmultiplicity.cxx:287
 AliTRDmultiplicity.cxx:288
 AliTRDmultiplicity.cxx:289
 AliTRDmultiplicity.cxx:290
 AliTRDmultiplicity.cxx:291
 AliTRDmultiplicity.cxx:292
 AliTRDmultiplicity.cxx:293
 AliTRDmultiplicity.cxx:294
 AliTRDmultiplicity.cxx:295