ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

// Author: Pawel Debski 2010

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TPolyMarker3D.h>
#include <TString.h>
#include <TEveLine.h>
#include <TEveManager.h>
#include <TEveEventManager.h>
#include <TEveElement.h>
#include <TEveUtil.h>

#include <AliESDtrack.h>
#include <AliEveTrack.h>
#include <AliEveMultiView.h>
#endif

void set_momentum_vectors()
{

   TString str1;
   TString str2;

   Bool_t draw = kFALSE;

   TEveElement::List_i i = gEve->GetEventScene()->FirstChild()->BeginChildren();
   TEveElement::List_i j = gEve->GetEventScene()->FirstChild()->EndChildren();
   TEveElement::List_i k;

   TEveElementList* momentumVectorList = new TEveElementList("Momentum Vectors");

   Double_t maxMomentum = 0;
   Double_t vectorLength = 600.0;

   Double_t x1 = 0;
   Double_t y1 = 0;
   Double_t z1 = 0;

   Double_t x2 = 0;
   Double_t y2 = 0;
   Double_t z2 = 0;

   //==============================================
   // find highest momentum (to normalize)
   //==============================================

   for(k = i; k != j; k++)
   {
      TEveElement* element = (TEveElement*) *k;

      str1 = element->GetElementName();

      if(str1.Contains("Tracks") || str1.Contains("tracks"))
      {

         TEveElement::List_i m = element->BeginChildren();
         TEveElement::List_i n = element->EndChildren();
         TEveElement::List_i l;

         for(l = m; l != n; l++)
         {
            TEveElement* trackType = (TEveElement*) *l;
            str2 = trackType->GetElementName();

            if(str2.Contains("Sigma < 3"))
            {
               if(trackType->HasChildren())
               {

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     if(trackSingle1->GetESDTrack()->P() > maxMomentum)
                       maxMomentum = trackSingle1->GetESDTrack()->P();

                  }
               }
            }


            if(str2.Contains("3 < Sigma < 5"))
            {

               if(trackType->HasChildren())
               {

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     if(trackSingle1->GetESDTrack()->P() > maxMomentum)
                       maxMomentum = trackSingle1->GetESDTrack()->P();

                  }
               }
            }

            if(str2.Contains("5 < Sigma"))
            {

               if(trackType->HasChildren())
               {

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     if(trackSingle1->GetESDTrack()->P() > maxMomentum)
                       maxMomentum = trackSingle1->GetESDTrack()->P();


                  }
               }
            }
         }
      }
   }

   //==============================================
   // clean the display
   //==============================================
/*
   if(!drawWithTracks)

      for(k = i; k != j; k++)
      {
         TEveElement* element = (TEveElement*) *k;

         str1 = element->GetElementName();

         element->SetRnrSelf(kFALSE);

         if(element->HasChildren())
            element->SetRnrChildren(kFALSE);

      }

   }
*/
   //==============================================
   // draw momentum vectors
   //==============================================

   if(maxMomentum)
      vectorLength = vectorLength/maxMomentum;
//      vectorLength = vectorLength/TMath::Log(maxMomentum);

   for(k = i; k != j; k++)
   {
      TEveElement* element = (TEveElement*) *k;

      str1 = element->GetElementName();

      if(str1.Contains("Tracks") || str1.Contains("tracks"))
      {

         TEveElement::List_i m = element->BeginChildren();
         TEveElement::List_i n = element->EndChildren();
         TEveElement::List_i l;

         for(l = m; l != n; l++)
         {
            TEveElement* trackType = (TEveElement*) *l;
            str2 = trackType->GetElementName();

            trackType->SetRnrSelf(kFALSE);

            if(trackType->HasChildren())
               trackType->SetRnrChildren(kFALSE);

            if(str2.Contains("Sigma < 3"))
            {

               if(trackType->HasChildren())
               {

                  TEveElementList* momentumVectorList1 = new TEveElementList("sigma < 3");

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));

                     x1 = trackSingle1->GetESDTrack()->Xv();
                     y1 = trackSingle1->GetESDTrack()->Yv();
                     z1 = trackSingle1->GetESDTrack()->Zv();

                     momentumVector->SetPoint(0, x1, y1, z1);

                     x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
                     y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
                     z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();

                     momentumVector->SetPoint(1, x2, y2, z2);

/*
                     if(trackSingle1->GetESDTrack()->Charge() == -1)
                        momentumVector->SetLineColor(kGreen);
                     else
                        momentumVector->SetLineColor(kRed);
*/
                     momentumVector->SetLineColor(kRed);

                     momentumVector->SetLineWidth(1);
                     momentumVector->SetLineStyle(0);
                     momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));

                     momentumVectorList1->AddElement(momentumVector);

                  }

//                  gEve->AddElement(momentumVectorList1);
                  momentumVectorList->AddElement(momentumVectorList1);

                  draw = kTRUE;

               }
            }


            if(str2.Contains("3 < Sigma < 5"))
            {

               if(trackType->HasChildren())
               {

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  TEveElementList* momentumVectorList2 = new TEveElementList("3 < sigma < 5");

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));

                     x1 = trackSingle1->GetESDTrack()->Xv();
                     y1 = trackSingle1->GetESDTrack()->Yv();
                     z1 = trackSingle1->GetESDTrack()->Zv();

                     momentumVector->SetPoint(0, x1, y1, z1);

                     x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
                     y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
                     z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();

                     momentumVector->SetPoint(1, x2, y2, z2);
/*
                     if(trackSingle1->GetESDTrack()->Charge() == -1)
                        momentumVector->SetLineColor(kGreen+2);
                     else
                        momentumVector->SetLineColor(kRed+2);
*/
                     momentumVector->SetLineColor(kRed+2);

                     momentumVector->SetLineWidth(1);
                     momentumVector->SetLineStyle(0);
                     momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));

                     momentumVectorList2->AddElement(momentumVector);

                  }

//                  gEve->AddElement(momentumVectorList2);
                  momentumVectorList->AddElement(momentumVectorList2);

                  draw = kTRUE;

               }
            }

            if(str2.Contains("5 < Sigma"))
            {

               if(trackType->HasChildren())
               {

                  TEveElementList* momentumVectorList3 = new TEveElementList("5 < sigma");

                  TEveElement::List_i x = trackType->BeginChildren();
                  TEveElement::List_i y = trackType->EndChildren();
                  TEveElement::List_i z;

                  for(z = x; z != y; z++)
                  {

                     AliEveTrack* trackSingle1 = dynamic_cast<AliEveTrack*>((TEveElement*) *z);

                     TEveLine* momentumVector = new TEveLine(TString::Format("Momentum Vector"));

                     x1 = trackSingle1->GetESDTrack()->Xv();
                     y1 = trackSingle1->GetESDTrack()->Yv();
                     z1 = trackSingle1->GetESDTrack()->Zv();

                     momentumVector->SetPoint(0, x1, y1, z1);

                     x2 = x1+vectorLength*trackSingle1->GetESDTrack()->Px();
                     y2 = y1+vectorLength*trackSingle1->GetESDTrack()->Py();
                     z2 = z1+vectorLength*trackSingle1->GetESDTrack()->Pz();

                     momentumVector->SetPoint(1, x2, y2, z2);
/*
                     if(trackSingle1->GetESDTrack()->Charge() == -1)
                        momentumVector->SetLineColor(kGreen+3);
                     else
                        momentumVector->SetLineColor(kRed+3);
*/
                     momentumVector->SetLineColor(kRed+3);

                     momentumVector->SetLineWidth(1);
                     momentumVector->SetLineStyle(0);
                     momentumVector->SetTitle(Form("%f GeV/c", trackSingle1->GetESDTrack()->P()));

                     momentumVectorList3->AddElement(momentumVector);

                  }

                  //gEve->AddElement(momentumVectorList3);
                  momentumVectorList->AddElement(momentumVectorList3);

                  draw = kTRUE;

               }
            }
         }
      }
   }
 
  gEve->AddElement(momentumVectorList);

  TEveElement* top = gEve->GetCurrentEvent();

  AliEveMultiView *mv = AliEveMultiView::Instance();

  mv->DestroyEventRPhi();
  mv->DestroyEventRhoZ();

  mv->ImportEventRPhi(top);
  mv->ImportEventRhoZ(top);

  gEve->FullRedraw3D(kFALSE, kTRUE);

}
 set_momentum_vectors.C:1
 set_momentum_vectors.C:2
 set_momentum_vectors.C:3
 set_momentum_vectors.C:4
 set_momentum_vectors.C:5
 set_momentum_vectors.C:6
 set_momentum_vectors.C:7
 set_momentum_vectors.C:8
 set_momentum_vectors.C:9
 set_momentum_vectors.C:10
 set_momentum_vectors.C:11
 set_momentum_vectors.C:12
 set_momentum_vectors.C:13
 set_momentum_vectors.C:14
 set_momentum_vectors.C:15
 set_momentum_vectors.C:16
 set_momentum_vectors.C:17
 set_momentum_vectors.C:18
 set_momentum_vectors.C:19
 set_momentum_vectors.C:20
 set_momentum_vectors.C:21
 set_momentum_vectors.C:22
 set_momentum_vectors.C:23
 set_momentum_vectors.C:24
 set_momentum_vectors.C:25
 set_momentum_vectors.C:26
 set_momentum_vectors.C:27
 set_momentum_vectors.C:28
 set_momentum_vectors.C:29
 set_momentum_vectors.C:30
 set_momentum_vectors.C:31
 set_momentum_vectors.C:32
 set_momentum_vectors.C:33
 set_momentum_vectors.C:34
 set_momentum_vectors.C:35
 set_momentum_vectors.C:36
 set_momentum_vectors.C:37
 set_momentum_vectors.C:38
 set_momentum_vectors.C:39
 set_momentum_vectors.C:40
 set_momentum_vectors.C:41
 set_momentum_vectors.C:42
 set_momentum_vectors.C:43
 set_momentum_vectors.C:44
 set_momentum_vectors.C:45
 set_momentum_vectors.C:46
 set_momentum_vectors.C:47
 set_momentum_vectors.C:48
 set_momentum_vectors.C:49
 set_momentum_vectors.C:50
 set_momentum_vectors.C:51
 set_momentum_vectors.C:52
 set_momentum_vectors.C:53
 set_momentum_vectors.C:54
 set_momentum_vectors.C:55
 set_momentum_vectors.C:56
 set_momentum_vectors.C:57
 set_momentum_vectors.C:58
 set_momentum_vectors.C:59
 set_momentum_vectors.C:60
 set_momentum_vectors.C:61
 set_momentum_vectors.C:62
 set_momentum_vectors.C:63
 set_momentum_vectors.C:64
 set_momentum_vectors.C:65
 set_momentum_vectors.C:66
 set_momentum_vectors.C:67
 set_momentum_vectors.C:68
 set_momentum_vectors.C:69
 set_momentum_vectors.C:70
 set_momentum_vectors.C:71
 set_momentum_vectors.C:72
 set_momentum_vectors.C:73
 set_momentum_vectors.C:74
 set_momentum_vectors.C:75
 set_momentum_vectors.C:76
 set_momentum_vectors.C:77
 set_momentum_vectors.C:78
 set_momentum_vectors.C:79
 set_momentum_vectors.C:80
 set_momentum_vectors.C:81
 set_momentum_vectors.C:82
 set_momentum_vectors.C:83
 set_momentum_vectors.C:84
 set_momentum_vectors.C:85
 set_momentum_vectors.C:86
 set_momentum_vectors.C:87
 set_momentum_vectors.C:88
 set_momentum_vectors.C:89
 set_momentum_vectors.C:90
 set_momentum_vectors.C:91
 set_momentum_vectors.C:92
 set_momentum_vectors.C:93
 set_momentum_vectors.C:94
 set_momentum_vectors.C:95
 set_momentum_vectors.C:96
 set_momentum_vectors.C:97
 set_momentum_vectors.C:98
 set_momentum_vectors.C:99
 set_momentum_vectors.C:100
 set_momentum_vectors.C:101
 set_momentum_vectors.C:102
 set_momentum_vectors.C:103
 set_momentum_vectors.C:104
 set_momentum_vectors.C:105
 set_momentum_vectors.C:106
 set_momentum_vectors.C:107
 set_momentum_vectors.C:108
 set_momentum_vectors.C:109
 set_momentum_vectors.C:110
 set_momentum_vectors.C:111
 set_momentum_vectors.C:112
 set_momentum_vectors.C:113
 set_momentum_vectors.C:114
 set_momentum_vectors.C:115
 set_momentum_vectors.C:116
 set_momentum_vectors.C:117
 set_momentum_vectors.C:118
 set_momentum_vectors.C:119
 set_momentum_vectors.C:120
 set_momentum_vectors.C:121
 set_momentum_vectors.C:122
 set_momentum_vectors.C:123
 set_momentum_vectors.C:124
 set_momentum_vectors.C:125
 set_momentum_vectors.C:126
 set_momentum_vectors.C:127
 set_momentum_vectors.C:128
 set_momentum_vectors.C:129
 set_momentum_vectors.C:130
 set_momentum_vectors.C:131
 set_momentum_vectors.C:132
 set_momentum_vectors.C:133
 set_momentum_vectors.C:134
 set_momentum_vectors.C:135
 set_momentum_vectors.C:136
 set_momentum_vectors.C:137
 set_momentum_vectors.C:138
 set_momentum_vectors.C:139
 set_momentum_vectors.C:140
 set_momentum_vectors.C:141
 set_momentum_vectors.C:142
 set_momentum_vectors.C:143
 set_momentum_vectors.C:144
 set_momentum_vectors.C:145
 set_momentum_vectors.C:146
 set_momentum_vectors.C:147
 set_momentum_vectors.C:148
 set_momentum_vectors.C:149
 set_momentum_vectors.C:150
 set_momentum_vectors.C:151
 set_momentum_vectors.C:152
 set_momentum_vectors.C:153
 set_momentum_vectors.C:154
 set_momentum_vectors.C:155
 set_momentum_vectors.C:156
 set_momentum_vectors.C:157
 set_momentum_vectors.C:158
 set_momentum_vectors.C:159
 set_momentum_vectors.C:160
 set_momentum_vectors.C:161
 set_momentum_vectors.C:162
 set_momentum_vectors.C:163
 set_momentum_vectors.C:164
 set_momentum_vectors.C:165
 set_momentum_vectors.C:166
 set_momentum_vectors.C:167
 set_momentum_vectors.C:168
 set_momentum_vectors.C:169
 set_momentum_vectors.C:170
 set_momentum_vectors.C:171
 set_momentum_vectors.C:172
 set_momentum_vectors.C:173
 set_momentum_vectors.C:174
 set_momentum_vectors.C:175
 set_momentum_vectors.C:176
 set_momentum_vectors.C:177
 set_momentum_vectors.C:178
 set_momentum_vectors.C:179
 set_momentum_vectors.C:180
 set_momentum_vectors.C:181
 set_momentum_vectors.C:182
 set_momentum_vectors.C:183
 set_momentum_vectors.C:184
 set_momentum_vectors.C:185
 set_momentum_vectors.C:186
 set_momentum_vectors.C:187
 set_momentum_vectors.C:188
 set_momentum_vectors.C:189
 set_momentum_vectors.C:190
 set_momentum_vectors.C:191
 set_momentum_vectors.C:192
 set_momentum_vectors.C:193
 set_momentum_vectors.C:194
 set_momentum_vectors.C:195
 set_momentum_vectors.C:196
 set_momentum_vectors.C:197
 set_momentum_vectors.C:198
 set_momentum_vectors.C:199
 set_momentum_vectors.C:200
 set_momentum_vectors.C:201
 set_momentum_vectors.C:202
 set_momentum_vectors.C:203
 set_momentum_vectors.C:204
 set_momentum_vectors.C:205
 set_momentum_vectors.C:206
 set_momentum_vectors.C:207
 set_momentum_vectors.C:208
 set_momentum_vectors.C:209
 set_momentum_vectors.C:210
 set_momentum_vectors.C:211
 set_momentum_vectors.C:212
 set_momentum_vectors.C:213
 set_momentum_vectors.C:214
 set_momentum_vectors.C:215
 set_momentum_vectors.C:216
 set_momentum_vectors.C:217
 set_momentum_vectors.C:218
 set_momentum_vectors.C:219
 set_momentum_vectors.C:220
 set_momentum_vectors.C:221
 set_momentum_vectors.C:222
 set_momentum_vectors.C:223
 set_momentum_vectors.C:224
 set_momentum_vectors.C:225
 set_momentum_vectors.C:226
 set_momentum_vectors.C:227
 set_momentum_vectors.C:228
 set_momentum_vectors.C:229
 set_momentum_vectors.C:230
 set_momentum_vectors.C:231
 set_momentum_vectors.C:232
 set_momentum_vectors.C:233
 set_momentum_vectors.C:234
 set_momentum_vectors.C:235
 set_momentum_vectors.C:236
 set_momentum_vectors.C:237
 set_momentum_vectors.C:238
 set_momentum_vectors.C:239
 set_momentum_vectors.C:240
 set_momentum_vectors.C:241
 set_momentum_vectors.C:242
 set_momentum_vectors.C:243
 set_momentum_vectors.C:244
 set_momentum_vectors.C:245
 set_momentum_vectors.C:246
 set_momentum_vectors.C:247
 set_momentum_vectors.C:248
 set_momentum_vectors.C:249
 set_momentum_vectors.C:250
 set_momentum_vectors.C:251
 set_momentum_vectors.C:252
 set_momentum_vectors.C:253
 set_momentum_vectors.C:254
 set_momentum_vectors.C:255
 set_momentum_vectors.C:256
 set_momentum_vectors.C:257
 set_momentum_vectors.C:258
 set_momentum_vectors.C:259
 set_momentum_vectors.C:260
 set_momentum_vectors.C:261
 set_momentum_vectors.C:262
 set_momentum_vectors.C:263
 set_momentum_vectors.C:264
 set_momentum_vectors.C:265
 set_momentum_vectors.C:266
 set_momentum_vectors.C:267
 set_momentum_vectors.C:268
 set_momentum_vectors.C:269
 set_momentum_vectors.C:270
 set_momentum_vectors.C:271
 set_momentum_vectors.C:272
 set_momentum_vectors.C:273
 set_momentum_vectors.C:274
 set_momentum_vectors.C:275
 set_momentum_vectors.C:276
 set_momentum_vectors.C:277
 set_momentum_vectors.C:278
 set_momentum_vectors.C:279
 set_momentum_vectors.C:280
 set_momentum_vectors.C:281
 set_momentum_vectors.C:282
 set_momentum_vectors.C:283
 set_momentum_vectors.C:284
 set_momentum_vectors.C:285
 set_momentum_vectors.C:286
 set_momentum_vectors.C:287
 set_momentum_vectors.C:288
 set_momentum_vectors.C:289
 set_momentum_vectors.C:290
 set_momentum_vectors.C:291
 set_momentum_vectors.C:292
 set_momentum_vectors.C:293
 set_momentum_vectors.C:294
 set_momentum_vectors.C:295
 set_momentum_vectors.C:296
 set_momentum_vectors.C:297
 set_momentum_vectors.C:298
 set_momentum_vectors.C:299
 set_momentum_vectors.C:300
 set_momentum_vectors.C:301
 set_momentum_vectors.C:302
 set_momentum_vectors.C:303
 set_momentum_vectors.C:304
 set_momentum_vectors.C:305
 set_momentum_vectors.C:306
 set_momentum_vectors.C:307
 set_momentum_vectors.C:308
 set_momentum_vectors.C:309
 set_momentum_vectors.C:310
 set_momentum_vectors.C:311
 set_momentum_vectors.C:312
 set_momentum_vectors.C:313
 set_momentum_vectors.C:314
 set_momentum_vectors.C:315
 set_momentum_vectors.C:316
 set_momentum_vectors.C:317
 set_momentum_vectors.C:318
 set_momentum_vectors.C:319
 set_momentum_vectors.C:320
 set_momentum_vectors.C:321
 set_momentum_vectors.C:322
 set_momentum_vectors.C:323
 set_momentum_vectors.C:324
 set_momentum_vectors.C:325
 set_momentum_vectors.C:326
 set_momentum_vectors.C:327
 set_momentum_vectors.C:328
 set_momentum_vectors.C:329
 set_momentum_vectors.C:330
 set_momentum_vectors.C:331
 set_momentum_vectors.C:332
 set_momentum_vectors.C:333
 set_momentum_vectors.C:334
 set_momentum_vectors.C:335
 set_momentum_vectors.C:336
 set_momentum_vectors.C:337
 set_momentum_vectors.C:338
 set_momentum_vectors.C:339
 set_momentum_vectors.C:340
 set_momentum_vectors.C:341
 set_momentum_vectors.C:342
 set_momentum_vectors.C:343
 set_momentum_vectors.C:344
 set_momentum_vectors.C:345
 set_momentum_vectors.C:346
 set_momentum_vectors.C:347
 set_momentum_vectors.C:348
 set_momentum_vectors.C:349
 set_momentum_vectors.C:350
 set_momentum_vectors.C:351
 set_momentum_vectors.C:352
 set_momentum_vectors.C:353
 set_momentum_vectors.C:354
 set_momentum_vectors.C:355
 set_momentum_vectors.C:356
 set_momentum_vectors.C:357
 set_momentum_vectors.C:358
 set_momentum_vectors.C:359
 set_momentum_vectors.C:360
 set_momentum_vectors.C:361
 set_momentum_vectors.C:362
 set_momentum_vectors.C:363
 set_momentum_vectors.C:364
 set_momentum_vectors.C:365
 set_momentum_vectors.C:366
 set_momentum_vectors.C:367
 set_momentum_vectors.C:368
 set_momentum_vectors.C:369
 set_momentum_vectors.C:370
 set_momentum_vectors.C:371
 set_momentum_vectors.C:372
 set_momentum_vectors.C:373
 set_momentum_vectors.C:374