**************************************************************************/
/*
$Log$
+Revision 1.59 2002/11/21 17:01:56 alibrary
+Removing AliMCProcess and AliMC
+
+Revision 1.58 2002/10/21 09:01:33 alibrary
+Getting rid of unused variable
+
+Revision 1.57 2002/10/14 14:57:29 hristov
+Merging the VirtualMC branch to the main development branch (HEAD)
+
+Revision 1.56.6.2 2002/07/24 10:07:20 alibrary
+Updating VirtualMC
+
+Revision 1.56.6.1 2002/06/10 15:10:14 hristov
+Merged with v3-08-02
+
+Revision 1.56 2001/11/22 11:26:28 jchudoba
+Proper deletion of arrays, deletion of unused variables (thanks to Rene Brun)
+
+Revision 1.55 2001/09/07 08:38:30 hristov
+Pointers initialised to 0 in the default constructors
+
+Revision 1.54 2001/08/30 09:52:12 hristov
+The operator[] is replaced by At() or AddAt() in case of TObjArray.
+
+Revision 1.53 2001/07/20 10:03:13 morsch
+Changes needed to work with Root 3.01 (substitute lhs [] operator). (Jiri Chudoba)
+
+Revision 1.52 2001/06/14 13:49:22 hristov
+Write a TreeD in SDigits2Digits method (needed to be compatible with alirun script)
+
Revision 1.51 2001/05/31 10:19:52 morsch
Fix for new AliRun::RunReco().
#include "AliMUONTriggerDecision.h"
#include "AliRun.h"
#include "AliHeader.h"
-#include "AliMC.h"
#include "AliMUONClusterInput.h"
#include "AliMUONMerger.h"
-#include "iostream.h"
-#include "AliCallf77.h"
+#include "Riostream.h"
#include "AliConst.h"
// Defaults parameters for Z positions of chambers
fNCh = 0;
fNTrackingCh = 0;
fIshunt = 0;
- fHits = 0;
fPadHits = 0;
fNPadHits = 0;
fChambers = 0;
fAccMax = 0.;
fAccCut = kFALSE;
fMerger = 0;
+ fFileName = 0;
}
//___________________________________________
Int_t i;
for (i=0; i<AliMUONConstants::NCh() ;i++) {
- (*fDchambers)[i] = new TClonesArray("AliMUONDigit",10000);
+ fDchambers->AddAt(new TClonesArray("AliMUONDigit",10000),i);
fNdch[i]=0;
}
fRawClusters = new TObjArray(AliMUONConstants::NTrackingCh());
for (i=0; i<AliMUONConstants::NTrackingCh();i++) {
- (*fRawClusters)[i] = new TClonesArray("AliMUONRawCluster",10000);
+ fRawClusters->AddAt(new TClonesArray("AliMUONRawCluster",10000),i);
fNrawch[i]=0;
}
ch = 2 * st + stCH;
//
if (ch < AliMUONConstants::NTrackingCh()) {
- (*fChambers)[ch] = new AliMUONChamber(ch);
+ fChambers->AddAt(new AliMUONChamber(ch),ch);
} else {
- (*fChambers)[ch] = new AliMUONChamberTrigger(ch);
+ fChambers->AddAt(new AliMUONChamberTrigger(ch),ch);
}
- AliMUONChamber* chamber = (AliMUONChamber*) (*fChambers)[ch];
+ //PH AliMUONChamber* chamber = (AliMUONChamber*) (*fChambers)[ch];
+ AliMUONChamber* chamber = (AliMUONChamber*) fChambers->At(ch);
chamber->SetGid(0);
// Default values for Z of chambers
//
} // Chamber stCH (0, 1) in
} // Station st (0...)
+// fChambers->SetLast(AliMUONConstants::NCh());
fMaxStepGas=0.01;
fMaxStepAlu=0.1;
fMaxDestepGas=-1;
// cp new design of AliMUONTriggerDecision
fTriggerCircuits = new TObjArray(AliMUONConstants::NTriggerCircuit());
for (Int_t circ=0; circ<AliMUONConstants::NTriggerCircuit(); circ++) {
- (*fTriggerCircuits)[circ] = new AliMUONTriggerCircuit();
+ fTriggerCircuits->AddAt(new AliMUONTriggerCircuit(),circ);
}
fMerger = 0;
// Destructor
if(fDebug) printf("%s: Calling AliMUON destructor !!!\n",ClassName());
- Int_t i;
fIshunt = 0;
// Delete TObjArrays
fRawClusters->Delete();
delete fRawClusters;
}
- for (i=0;i<AliMUONConstants::NTrackingCh();i++) {
- fNrawch[i]=0;
- }
+
+ if (fNrawch) delete [] fNrawch;
// Delete TClonesArrays
}
fNLocalTrigger = 0;
- if (fHits2){
- fHits2->Delete();
- delete fHits2;
- }
-
- if (fPadHits2){
- fPadHits2->Delete();
- delete fPadHits2;
- }
-
if (fHits) {
fHits->Delete();
delete fHits;
}
- // Delete hits tree for background event
-
- if (fTrH1) {
- fTrH1->Delete();
- delete fTrH1;
- }
-
if (fMerger) delete fMerger;
+ if (fNdch) delete [] fNdch;
+
}
//___________________________________________
new(lhits[fNhits++]) AliMUONHit(fIshunt,track,vol,hits);
}
//___________________________________________
-void AliMUON::AddPadHit(Int_t *clhits)
+void AliMUON::AddHit(Int_t fIshunt, Int_t track, Int_t iChamber,
+ Int_t idpart, Float_t X, Float_t Y, Float_t Z,
+ Float_t tof, Float_t momentum, Float_t theta,
+ Float_t phi, Float_t length, Float_t destep)
+{
+ TClonesArray &lhits = *fHits;
+ new(lhits[fNhits++]) AliMUONHit(fIshunt, track, iChamber,
+ idpart, X, Y, Z,
+ tof, momentum, theta,
+ phi, length, destep);
+}
+//___________________________________________
+void AliMUON::AddPadHit(Int_t *clhits) // To be removed
{
TClonesArray &lclusters = *fPadHits;
new(lclusters[fNPadHits++]) AliMUONPadHit(clhits);
// Add a MUON digit to the list
//
- TClonesArray &ldigits = *((TClonesArray*)(*fDchambers)[id]);
+ //PH TClonesArray &ldigits = *((TClonesArray*)(*fDchambers)[id]);
+ TClonesArray &ldigits = *((TClonesArray*)fDchambers->At(id));
new(ldigits[fNdch[id]++]) AliMUONDigit(tracks,charges,digits);
}
// Add a MUON digit to the list
//
- TClonesArray &lrawcl = *((TClonesArray*)(*fRawClusters)[id]);
+ //PH TClonesArray &lrawcl = *((TClonesArray*)(*fRawClusters)[id]);
+ TClonesArray &lrawcl = *((TClonesArray*)fRawClusters->At(id));
new(lrawcl[fNrawch[id]++]) AliMUONRawCluster(c);
}
const char *cR = strstr(option,"R");
const char *cH = strstr(option,"H");
+ // PadHits to be removed
if (fPadHits && gAlice->TreeH() && cH) {
MakeBranchInTree(gAlice->TreeH(),
branchname, &fPadHits, kBufferSize, file);
// Reset number of digits and the digits array for this detector
//
for ( int i=0;i<AliMUONConstants::NCh();i++ ) {
- if ((*fDchambers)[i]) ((TClonesArray*)(*fDchambers)[i])->Clear();
+ //PH if ((*fDchambers)[i]) ((TClonesArray*)(*fDchambers)[i])->Clear();
+ if ((*fDchambers)[i]) ((TClonesArray*)fDchambers->At(i))->Clear();
if (fNdch) fNdch[i]=0;
}
}
// Reset number of raw clusters and the raw clust array for this detector
//
for ( int i=0;i<AliMUONConstants::NTrackingCh();i++ ) {
- if ((*fRawClusters)[i]) ((TClonesArray*)(*fRawClusters)[i])->Clear();
+ //PH if ((*fRawClusters)[i]) ((TClonesArray*)(*fRawClusters)[i])->Clear();
+ if ((*fRawClusters)[i]) ((TClonesArray*)fRawClusters->At(i))->Clear();
if (fNrawch) fNrawch[i]=0;
}
}
{
// Set the pad size for chamber id and cathode isec
Int_t i=2*(id-1);
- ((AliMUONChamber*) (*fChambers)[i]) ->SetPadSize(isec,p1,p2);
- ((AliMUONChamber*) (*fChambers)[i+1])->SetPadSize(isec,p1,p2);
+ //PH ((AliMUONChamber*) (*fChambers)[i]) ->SetPadSize(isec,p1,p2);
+ //PH ((AliMUONChamber*) (*fChambers)[i+1])->SetPadSize(isec,p1,p2);
+ ((AliMUONChamber*) fChambers->At(i)) ->SetPadSize(isec,p1,p2);
+ ((AliMUONChamber*) fChambers->At(i+1))->SetPadSize(isec,p1,p2);
}
//___________________________________________
// Set Z values for all chambers (tracking and trigger)
// from the array pointed to by "Z"
for (Int_t ch = 0; ch < AliMUONConstants::NCh(); ch++)
- ((AliMUONChamber*) ((*fChambers)[ch]))->SetZ(Z[ch]);
+ //PH ((AliMUONChamber*) ((*fChambers)[ch]))->SetZ(Z[ch]);
+ ((AliMUONChamber*) fChambers->At(ch))->SetZ(Z[ch]);
return;
}
{
// Set the inverse charge slope for chamber id
Int_t i=2*(id-1);
- ((AliMUONChamber*) (*fChambers)[i])->SetChargeSlope(p1);
- ((AliMUONChamber*) (*fChambers)[i+1])->SetChargeSlope(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i])->SetChargeSlope(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i+1])->SetChargeSlope(p1);
+ ((AliMUONChamber*) fChambers->At(i))->SetChargeSlope(p1);
+ ((AliMUONChamber*) fChambers->At(i+1))->SetChargeSlope(p1);
}
//___________________________________________
{
// Set sigma of charge spread for chamber id
Int_t i=2*(id-1);
- ((AliMUONChamber*) (*fChambers)[i])->SetChargeSpread(p1,p2);
- ((AliMUONChamber*) (*fChambers)[i+1])->SetChargeSpread(p1,p2);
+ //PH ((AliMUONChamber*) fChambers->At(i))->SetChargeSpread(p1,p2);
+ //PH ((AliMUONChamber*) fChambers->Ati+1])->SetChargeSpread(p1,p2);
+ ((AliMUONChamber*) fChambers->At(i))->SetChargeSpread(p1,p2);
+ ((AliMUONChamber*) fChambers->At(i+1))->SetChargeSpread(p1,p2);
}
//___________________________________________
{
// Set integration limits for charge spread
Int_t i=2*(id-1);
- ((AliMUONChamber*) (*fChambers)[i])->SetSigmaIntegration(p1);
- ((AliMUONChamber*) (*fChambers)[i+1])->SetSigmaIntegration(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i])->SetSigmaIntegration(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i+1])->SetSigmaIntegration(p1);
+ ((AliMUONChamber*) fChambers->At(i))->SetSigmaIntegration(p1);
+ ((AliMUONChamber*) fChambers->At(i+1))->SetSigmaIntegration(p1);
}
//___________________________________________
{
// Set maximum number for ADCcounts (saturation)
Int_t i=2*(id-1);
- ((AliMUONChamber*) (*fChambers)[i])->SetMaxAdc(p1);
- ((AliMUONChamber*) (*fChambers)[i+1])->SetMaxAdc(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i])->SetMaxAdc(p1);
+ //PH ((AliMUONChamber*) (*fChambers)[i+1])->SetMaxAdc(p1);
+ ((AliMUONChamber*) fChambers->At(i))->SetMaxAdc(p1);
+ ((AliMUONChamber*) fChambers->At(i+1))->SetMaxAdc(p1);
}
//___________________________________________
void AliMUON::SetSegmentationModel(Int_t id, Int_t isec, AliSegmentation *segmentation)
{
// Set the segmentation for chamber id cathode isec
- ((AliMUONChamber*) (*fChambers)[id])->SetSegmentationModel(isec, segmentation);
+ //PH ((AliMUONChamber*) (*fChambers)[id])->SetSegmentationModel(isec, segmentation);
+ ((AliMUONChamber*) fChambers->At(id))->SetSegmentationModel(isec, segmentation);
}
//___________________________________________
void AliMUON::SetResponseModel(Int_t id, AliMUONResponse *response)
{
// Set the response for chamber id
- ((AliMUONChamber*) (*fChambers)[id])->SetResponseModel(response);
+ //PH ((AliMUONChamber*) (*fChambers)[id])->SetResponseModel(response);
+ ((AliMUONChamber*) fChambers->At(id))->SetResponseModel(response);
}
void AliMUON::SetReconstructionModel(Int_t id, AliMUONClusterFinderVS *reconst)
{
// Set ClusterFinder for chamber id
- ((AliMUONChamber*) (*fChambers)[id])->SetReconstructionModel(reconst);
+ //PH ((AliMUONChamber*) (*fChambers)[id])->SetReconstructionModel(reconst);
+ ((AliMUONChamber*) fChambers->At(id))->SetReconstructionModel(reconst);
}
void AliMUON::SetNsec(Int_t id, Int_t nsec)
{
// Set number of segmented cathods for chamber id
- ((AliMUONChamber*) (*fChambers)[id])->SetNsec(nsec);
+ //PH ((AliMUONChamber*) (*fChambers)[id])->SetNsec(nsec);
+ ((AliMUONChamber*) fChambers->At(id))->SetNsec(nsec);
}
//___________________________________________
}
//___________________________________________
+// To be removed
void AliMUON::MakePadHits(Float_t xhit,Float_t yhit, Float_t zhit,
Float_t eloss, Float_t tof, Int_t idvol)
{
// if (idvol == 6) printf("\n ->Disintegration %f %f %f", xhit, yhit, eloss );
- ((AliMUONChamber*) (*fChambers)[idvol])
+ //PH ((AliMUONChamber*) (*fChambers)[idvol])
+ ((AliMUONChamber*) fChambers->At(idvol))
->DisIntegration(eloss, tof, xhit, yhit, zhit, nnew, newclust);
Int_t ic=0;
// if (idvol == 6) printf("\n nnew %d \n", nnew);
//
ResetRawClusters();
for (Int_t ich = 0; ich < 10; ich++) {
- AliMUONChamber* iChamber = (AliMUONChamber*) (*fChambers)[ich];
+ //PH AliMUONChamber* iChamber = (AliMUONChamber*) (*fChambers)[ich];
+ AliMUONChamber* iChamber = (AliMUONChamber*) fChambers->At(ich);
AliMUONClusterFinderVS* rec = iChamber->ReconstructionModel();
gAlice->ResetDigits();
AliMUONPadHit* AliMUON::FirstPad(AliMUONHit* hit, TClonesArray *clusters)
{
-//
+// to be removed
// Initialise the pad iterator
// Return the address of the first padhit for hit
TClonesArray *theClusters = clusters;
AliMUONPadHit* AliMUON::NextPad(TClonesArray *clusters)
{
+ // To be removed
// Get next pad (in iterator)
//
AliMUON::fCurIterPad++;
return *this;
}
+////////////////////////////////////////////////////////////////////////
+void AliMUON::MakeBranchInTreeD(TTree *treeD, const char *file)
+{
+ //
+ // Create TreeD branches for the MUON.
+ //
+ const Int_t kBufferSize = 4000;
+ char branchname[30];
+
+ //
+ // one branch for digits per chamber
+ //
+ for (Int_t i=0; i<AliMUONConstants::NCh() ;i++) {
+ sprintf(branchname,"%sDigits%d",GetName(),i+1);
+ if (fDchambers && treeD) {
+ MakeBranchInTree(treeD,
+ branchname, &((*fDchambers)[i]), kBufferSize, file);
+// printf("Making Branch %s for digits in chamber %d\n",branchname,i+1);
+ }
+ }
+}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+//___________________________________________