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.                  *
 **************************************************************************/

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//
//                                                                           //
//  Photon Multiplicity Detector                                             //
//  This class contains the basic functions for the Photon Multiplicity      //
//  Detector. Functions specific to one particular geometry are              //
//  contained in the derived classes                                         //
//                                                                           //
//Begin_Html
/*
<img src="picts/AliPMDClass.gif">
</pre>
<br clear=left>
<font size=+2 color=red>
<p>The responsible person for this module is
<a href="mailto:sub@vecdec.veccal.ernet.in">Subhasis Chattopadhyay</a>.
</font>
<pre>
*/
//End_Html
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TBRIK.h>
#include <TClonesArray.h>
#include <TGeometry.h>
#include <TNode.h>
#include <TTree.h>
#include <TVirtualMC.h>

#include "AliLog.h"
#include "AliLoader.h" 
#include "AliPMDLoader.h" 
#include "AliPMD.h"
#include "AliRun.h"
#include "AliMC.h"
#include "AliPMDDigitizer.h"
#include "AliPMDhit.h"
#include "AliPMDDDLRawData.h"
#include "AliPMDRawToSDigits.h"
  
ClassImp(AliPMD)
 
//_____________________________________________________________________________
AliPMD::AliPMD()
{
  //
  // Default constructor
  //
  fIshunt     = 0;
  fPar[0]     = 1.;
  fPar[1]     = 1.;
  fPar[2]     = 0.8;
  fPar[3]     = 0.02;
  fIn[0]      = 6.;
  fIn[1]      = 20.;
  fIn[2]      = 600.;
  fIn[3]      = 27.;
  fIn[4]      = 27.;
  fGeo[0]     = 0.;
  fGeo[1]     = 0.2;
  fGeo[2]     = 4.;
  fPadSize[0] = 0.8;
  fPadSize[1] = 1.0;
  fPadSize[2] = 1.2;
  fPadSize[3] = 1.5;
  fNumPads[0] = 0;
  fNumPads[1] = 0;
  fNumPads[2] = 0;
  fNumPads[3] = 0;
}
 
//_____________________________________________________________________________
AliPMD::AliPMD(const char *name, const char *title)
  : AliDetector(name,title)
{
  //
  // Default constructor
  //

  // 
  // Allocate the array of hits
  fHits   = new TClonesArray("AliPMDhit",  405);
  gAlice->GetMCApp()->AddHitList(fHits);


  fIshunt =  0;
  
  fPar[0]     = 1.;
  fPar[1]     = 1.;
  fPar[2]     = 0.8;
  fPar[3]     = 0.02;
  fIn[0]      = 6.;
  fIn[1]      = 20.;
  fIn[2]      = 600.;
  fIn[3]      = 27.;
  fIn[4]      = 27.;
  fGeo[0]     = 0.;
  fGeo[1]     = 0.2;
  fGeo[2]     = 4.;
  fPadSize[0] = 0.8;
  fPadSize[1] = 1.0;
  fPadSize[2] = 1.2;
  fPadSize[3] = 1.5;
  fNumPads[0] = 0;
  fNumPads[1] = 0;
  fNumPads[2] = 0;
  fNumPads[3] = 0;
}

AliLoader* AliPMD::MakeLoader(const char* topfoldername)
{
  // Makes PMD Loader
 
  fLoader = new AliPMDLoader(GetName(),topfoldername);
 
  if (fLoader)
    {
      AliDebug(100,"Success");
    }
  else
    {
      AliError("Failure");
    }

  return fLoader;
}

AliPMD::~AliPMD()
{
  //
  // Destructor
  //
}

//_____________________________________________________________________________
void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
{
  //
  // Add a PMD hit
  //
  TClonesArray &lhits = *fHits;
  AliPMDhit *newcell, *curcell;
  //  printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d %d %d %d %d\n",
  // hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3],
  // vol[4],vol[5],vol[6],vol[7]);

  newcell = new AliPMDhit(fIshunt, track, vol, hits);

  for (Int_t i=0; i<fNhits; i++) {
    //
    // See if this cell has already been hit
    curcell=(AliPMDhit*) lhits[i];
    if (*curcell==*newcell) {
//        printf("Cell with same numbers found\n") ; curcell->Print();
      *curcell = *curcell+*newcell;
//        printf("Cell after addition\n") ; curcell->Print();
      delete newcell;
      return;
    }
  }
  new(lhits[fNhits++]) AliPMDhit(newcell);
  delete newcell;
}
 
//_____________________________________________________________________________
void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
{
  //
  // Set PMD parameters
  //
  fPar[0] = p1;
  fPar[1] = p2;
  fPar[2] = p3;
  fPar[3] = p4;
}
 
//_____________________________________________________________________________
void AliPMD::SetIN(Float_t p1, Float_t p2, Float_t p3,Float_t p4,Float_t p5)
{
  //
  // Set PMD parameters
  //
  fIn[0] = p1;
  fIn[1] = p2;
  fIn[2] = p3;
  fIn[3] = p4;
  fIn[4] = p5;
}
 
//_____________________________________________________________________________
void AliPMD::SetGEO(Float_t p1, Float_t p2, Float_t p3)
{
  //
  // Set geometry parameters
  //
  fGeo[0] = p1;
  fGeo[1] = p2;
  fGeo[2] = p3;
}
 
//_____________________________________________________________________________
void AliPMD::SetPadSize(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
{
  //
  // Set pad size
  //
  fPadSize[0] = p1;
  fPadSize[1] = p2;
  fPadSize[2] = p3;
  fPadSize[3] = p4;
}
 
//_____________________________________________________________________________
void AliPMD::StepManager()
{
  //
  // Called at every step in PMD
  //
}

void AliPMD::MakeBranch(Option_t* option)
{
    // Create Tree branches for the PMD
    
    const char *cH = strstr(option,"H");
    if (cH && fLoader->TreeH() && (fHits == 0x0))
      fHits   = new TClonesArray("AliPMDhit",  405);
    
    AliDetector::MakeBranch(option);
}


void AliPMD::SetTreeAddress()
{
  // Set branch address

    if (fLoader->TreeH() && fHits==0x0)
      fHits   = new TClonesArray("AliPMDhit",  405);
      
    AliDetector::SetTreeAddress();
}

void AliPMD::SetCpvOff()
{
  // Set the CPV plane off
}
void AliPMD::SetPreOff()
{
  // Set the Preshower plane off

}
void AliPMD::SetModuleOff(Int_t /*imodule*/)
{
  // Set the desired module off

}

//____________________________________________________________________________
void AliPMD::Hits2SDigits()  
{ 
// create summable digits

  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
  AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
  pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
			       "HS");
  pmdDigitizer->SetZPosition(361.5);

  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
    pmdDigitizer->Hits2SDigits(iEvent);
  }
  fLoader->UnloadHits();
  fLoader->UnloadSDigits();
  delete pmdDigitizer;
}
//____________________________________________________________________________
void AliPMD::SDigits2Digits()  
{ 
  // creates sdigits to digits
}
//____________________________________________________________________________
void AliPMD::Hits2Digits()  
{ 
// create digits

  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
  AliPMDDigitizer* pmdDigitizer = new AliPMDDigitizer;
  pmdDigitizer->OpengAliceFile(fLoader->GetRunLoader()->GetFileName().Data(),
			       "HD");
  pmdDigitizer->SetZPosition(361.5);

  for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) {
    pmdDigitizer->Hits2Digits(iEvent);
  }
  fLoader->UnloadHits();
  fLoader->UnloadDigits();
  delete pmdDigitizer;

}
// ---------------------------------------------------------------------------
AliDigitizer* AliPMD::CreateDigitizer(AliDigitizationInput* digInput) const
{ 
  return new AliPMDDigitizer(digInput);
}
// ---------------------------------------------------------------------------
void AliPMD::Digits2Raw()
{ 
// convert digits of the current event to raw data

  fLoader->LoadDigits();
  TTree* digits = fLoader->TreeD();
  if (!digits) {
    AliError("No digits tree");
    return;
  }

  AliPMDDDLRawData rawWriter;
  rawWriter.WritePMDRawData(digits);

  fLoader->UnloadDigits();
}

Bool_t AliPMD::Raw2SDigits(AliRawReader *rawReader)
{
  // converts raw to sdigits
  AliRunLoader* runLoader = fLoader->GetRunLoader(); 
  //runLoader->GetEvent(ievt);

  AliPMDRawToSDigits pmdr2sd;
  pmdr2sd.Raw2SDigits(runLoader, rawReader);
  fLoader->UnloadSDigits();
  return kTRUE;
}

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