FairRoot/PandaRoot
Public Member Functions | Private Member Functions | Private Attributes | List of all members
PndDskFLGHitProducerIdeal Class Reference

#include <PndDskFLGHitProducerIdeal.h>

Inheritance diagram for PndDskFLGHitProducerIdeal:
PndPersistencyTask

Public Member Functions

 PndDskFLGHitProducerIdeal ()
 
 PndDskFLGHitProducerIdeal (Int_t verbose)
 
virtual ~PndDskFLGHitProducerIdeal ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *option)
 
virtual void Finish ()
 
PndDskFLGHitAddHit (Int_t trackID, Int_t detectorID, TVector3 position_store, TVector3 momentum_store, Double_t time, Double_t angIn, Double_t thetaC_store, TVector3 Cherenkov_photon, Int_t light_guide, Int_t pixel)
 
void SetPersistency (Bool_t val=kTRUE)
 
Bool_t GetPersistency ()
 

Private Member Functions

void SetDefaultParameters ()
 

Private Attributes

Int_t fDetectorID
 
TVector3 fPosHit
 
TVector3 fDPosHit
 
Double_t fThetaC
 
Double_t fErrThetaC
 
Int_t fRefIndex
 
Int_t f_light_guide
 
Int_t f_pixel
 
TClonesArray * fDskParticleArray
 
TClonesArray * fHitArray
 
PndGeoDskFLGfGeo
 
Int_t fVerbose
 
Int_t nevents
 
TRandom * rand
 

Detailed Description

PndDskFLGHitProducer.h

Class for producing DSK hits directly from MCPoints

Definition at line 39 of file PndDskFLGHitProducerIdeal.h.

Constructor & Destructor Documentation

PndDskFLGHitProducerIdeal::PndDskFLGHitProducerIdeal ( )

Default constructor

Definition at line 41 of file PndDskFLGHitProducerIdeal.cxx.

References fGeo.

42 :PndPersistencyTask("PndDskFLGHitProducerIdeal")
43 {
44 
45  fGeo = new PndGeoDskFLG();
46 }
PndDskFLGHitProducerIdeal::PndDskFLGHitProducerIdeal ( Int_t  verbose)

Constructor with verbosity

Definition at line 51 of file PndDskFLGHitProducerIdeal.cxx.

References fGeo, fVerbose, and verbose.

52  :PndPersistencyTask("PndDskFLGHitProducerIdeal")
53 {
54  fGeo = new PndGeoDskFLG();
55  fVerbose = verbose;
56 }
#define verbose
PndDskFLGHitProducerIdeal::~PndDskFLGHitProducerIdeal ( )
virtual

Destructor

Definition at line 61 of file PndDskFLGHitProducerIdeal.cxx.

References fGeo.

62 {
63 
64  if (fGeo) delete fGeo;
65 }

Member Function Documentation

PndDskFLGHit * PndDskFLGHitProducerIdeal::AddHit ( Int_t  trackID,
Int_t  detectorID,
TVector3  position_store,
TVector3  momentum_store,
Double_t  time,
Double_t  angIn,
Double_t  thetaC_store,
TVector3  Cherenkov_photon,
Int_t  light_guide,
Int_t  pixel 
)

method AddHit

Adds a DskHit to the HitCollection

Definition at line 203 of file PndDskFLGHitProducerIdeal.cxx.

References fHitArray.

Referenced by Exec().

207  {
208  TClonesArray& clref = *fHitArray;
209  Int_t size = clref.GetEntriesFast();
210  return new(clref[size]) PndDskFLGHit( trackID,detectorID,position_store,momentum_store,time,
211  angIn,thetaC_store,Cherenkov_photon,light_guide,pixel);
212 }
void PndDskFLGHitProducerIdeal::Exec ( Option_t *  option)
virtual

Executed task

Definition at line 108 of file PndDskFLGHitProducerIdeal.cxx.

References acos(), AddHit(), Double_t, energy, f_light_guide, f_pixel, fabs(), fDskParticleArray, fGeo, fHitArray, fVerbose, PndDskParticle::GetAngIn(), PndDskParticle::GetMass(), PndDskParticle::GetNPhot(), PndDskParticle::GetThetaC(), nevents, P, Pi, printf(), PndGeoDskFLG::Propagate(), pt(), rand, PndGeoDskFLG::reflect_threshold(), sqrt(), CAMath::Sqrt(), and thetaC.

109 {
110  if ( ! fHitArray ) Fatal("Exec", "No HitArray");
111  fHitArray->Clear();
112 
113 
114  PndDskParticle* pt=NULL;
115  nevents++;
116 
117  if (fVerbose > 1) {
118  cout << " ----------------- DSK Hit Producer --------------------" << endl;
119  cout <<" Number of input MC points in the plate: "<<fDskParticleArray->GetEntries()<<endl;
120  }
121 
122  // fNHits = 0;
123 
124  // Loop over PndDskPoints
125  for(Int_t j=0; j<fDskParticleArray->GetEntriesFast(); j++) {
126  if (fVerbose > 1) printf("\n\n=====> Event No. %d\n", nevents);
127 
128  pt = (PndDskParticle*)fDskParticleArray->At(j);
129 
130  Double_t Px= pt->GetPx();
131  Double_t Py= pt->GetPy();
132  Double_t Pz= pt->GetPz();
133  Double_t P = sqrt(Px*Px + Py*Py +Pz*Pz);
134  Double_t mass = pt->GetMass();
135  Double_t energy = TMath::Sqrt(P*P + mass*mass);
136 
137  Double_t beta;
138  if(energy != 0) {
139  beta = P/energy;
140  }
141  else {
142  beta = -1.;
143  if (fVerbose >1) cout << "Beta not calculated " << endl;
144  }
145 
147  if (fabs(1./(1.47*beta)) > 1. || P == 0. || energy == 0.){
148  thetaC = -1.;
149  }else{
150  thetaC = acos(1/(1.47*beta));
151  }
152 
153  if (thetaC != -1. && beta > 1/1.47){
154 
155  //collect that need to be stored
156  Int_t trackID = pt->GetTrackID();
157  Int_t detectorID = 0;
158  TVector3 position_store(pt->GetX(), pt->GetY(), pt->GetZ());
159  TVector3 momentum_store(Px, Py, Pz);
160  Double_t time = 0;
161  Double_t angIn = pt->GetAngIn();
162  Double_t thetaC_store = pt->GetThetaC();
163 
164  //generate Cherenkov photons in a cone
165 
166  int N_cherenko_photon = pt->GetNPhot();
167 
168  TVector3 Cone_Pos(pt->GetX()*10, pt->GetY()*10, pt->GetZ()*10);
169  TVector3 Cone_Axis(Px, Py, Pz);
170  TVector3 Cherenkov_photon(1,0,0); //initialize
171  Cherenkov_photon.SetTheta(Cone_Axis.Theta() + thetaC);
172  Cherenkov_photon.SetPhi(Cone_Axis.Phi());
173  for(int i_photon = 0; i_photon < N_cherenko_photon; i_photon++){
174  Double_t rot_angle = 2*(TMath::Pi())*rand->Rndm();
175  Cherenkov_photon.Rotate(rot_angle, Cone_Axis);
176 
177  //cout<<"Cone_Axis: "<<Cone_Axis.X()<<" "<<Cone_Axis.Y()<<" "<<Cone_Axis.Z()<<endl;
178  //cout<<"Cone_Pos: "<<Cone_Pos.X()<<" "<<Cone_Pos.Y()<<" "<<Cone_Pos.Z()<<endl;
179  //cout<<"photon_dir: "<<Cherenkov_photon.X()<<" "<<Cherenkov_photon.Y()<<" "<<Cherenkov_photon.Z()<<" theta: "<<Cherenkov_photon.Theta()<<" phi: "<<Cherenkov_photon.Phi()<<endl;
180  if(Cherenkov_photon.Theta()<0.8 || Cherenkov_photon.Z()<0) continue;
181 
182  f_light_guide = -99;
183  f_pixel = -99; //fixme
184  //Propagate(Cone_Pos, Cherenkov_photon);
185 
186  if(Cherenkov_photon.Theta()>fGeo->reflect_threshold()) fGeo->Propagate(Cone_Pos, Cherenkov_photon, f_light_guide, f_pixel);
187 
188  if(f_light_guide != -99)
189  AddHit(trackID,detectorID,position_store,momentum_store,time,
190  angIn,thetaC_store,Cherenkov_photon,f_light_guide,f_pixel);
191 
192  }
193 
194 
195  }
196  }
197 }
friend F32vec4 acos(const F32vec4 &a)
Definition: P4_F32vec4.h:113
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Double_t GetAngIn() const
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
static T Sqrt(const T &x)
Definition: PndCAMath.h:37
Double_t reflect_threshold()
Definition: PndGeoDskFLG.h:43
Double_t GetMass() const
TString pt(TString pts, TString exts="px py pz")
Definition: invexp.C:133
Double_t
Int_t GetNPhot() const
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
PndDskFLGHit * AddHit(Int_t trackID, Int_t detectorID, TVector3 position_store, TVector3 momentum_store, Double_t time, Double_t angIn, Double_t thetaC_store, TVector3 Cherenkov_photon, Int_t light_guide, Int_t pixel)
GeV c P
void Propagate(TVector3 pos, TVector3 dir, Int_t &i_FLG, Int_t &i_Pixel)
Double_t GetThetaC() const
Double_t Pi
Double_t thetaC
Definition: plot_dirc.C:16
Double_t energy
Definition: plot_dirc.C:15
void PndDskFLGHitProducerIdeal::Finish ( )
virtual

Finish task

Definition at line 217 of file PndDskFLGHitProducerIdeal.cxx.

218 {
219 
220  cout << "-I- PndDskFLGHitProducerIdeal: Finish" << endl;
221  }
Bool_t PndPersistencyTask::GetPersistency ( )
inlineinherited

Definition at line 32 of file PndPersistencyTask.h.

References PndPersistencyTask::fPersistency.

Referenced by PndLmdPixelHitProducerFast::GetPersistance(), PndMdtDigitization::Init(), PndMdtHitProducerIdeal::Init(), PndMdtClusterTask::Init(), PndFtsHitProducerRealFast::Init(), PndRichHitProducer::Init(), PndSttHitProducerRealFast::Init(), PndDiscTaskReconstruction::Init(), PndSttHelixHitProducer::Init(), PndDiscTaskPID::Init(), PndIdealTrackFinder::Init(), PndSttMvdGemTracking::Init(), PndMdtTrkProducer::Init(), PndFtsHitProducerRealFull::Init(), PndLmdPixelClusterTask::Init(), PndSttHitProducerRealFull::Init(), PndLmdStripClusterTask::Init(), PndEmcApdHitProducer::Init(), PndMissingPzCleanerTask::Init(), PndEmcMakeRecoHit::Init(), PndEmcMakeClusterOnline::Init(), PndTrackSmearTask::Init(), PndEmcFWEndcapTimebasedWaveforms::Init(), PndSttHitProducerIdeal::Init(), PndEmcFWEndcapDigi::Init(), PndFtsHitProducerIdeal::Init(), PndEmcMakeCluster::Init(), PndMdtPointsToWaveform::Init(), PndDiscTaskDigitization::Init(), PndEmcMakeDigi::Init(), PndSdsTimeWalkCorrTask::Init(), PndLmdPixelHitProducerFast::Init(), PndDrcHitFinder::Init(), PndRichHitFinder::Init(), PndEmcMakeCorr::Init(), PndFtofHitProducerIdeal::Init(), PndEmcHitsToWaveform::Init(), PndSciTDigiTask::Init(), PndDrcHitProducerIdeal::Init(), PndSdsHitProducerIdeal::Init(), PndSciTHitProducerIdeal::Init(), PndRecoMultiKalmanTask2::Init(), PndEmcHitProducer::Init(), PndDrcHitProducerReal::Init(), Init(), PndEmcTmpWaveformToDigi::Init(), PndDrcDigiTask::Init(), PndEmcWaveformToDigi::Init(), PndSttMatchTracks::Init(), PndEmcWaveformToCalibratedDigi::Init(), PndTrkTracking2::Init(), PndSttFindTracks::Init(), PndEmcMultiWaveformToCalibratedDigi::Init(), PndRecoKalmanTask2::Init(), PndDrcTimeDigiTask::Init(), PndEmcExpClusterSplitter::Init(), PndFtsHoughTrackerTask::Init(), PndSdsNoiseProducer::Init(), PndEmcPhiBumpSplitter::Init(), PndSdsIdealRecoTask::Init(), PndSdsHybridHitProducer::Init(), PndRecoMultiKalmanTask::Init(), PndSdsIdealClusterTask::Init(), PndRecoKalmanTask::Init(), PndSdsStripHitProducerDif::Init(), PndGemDigitize::Init(), PndSdsStripHitProducer::Init(), PndGemFindHits::Init(), PndSdsPixelClusterTask::Init(), PndSdsStripClusterTask::Init(), PndMvdGemTrackFinderOnHits::Init(), PndBarrelTrackFinder::Init(), PndEmcFullDigiTask::PndEmcFullDigiTask(), PndEmcMakeBump::PndEmcMakeBump(), PndUnassignedHitsTask::RegisterBranches(), PndMvdClusterTask::SetPersistance(), PndMvdDigiTask::SetPersistance(), PndEmcMakeBump::SetStorageOfData(), and PndEmcFullDigiTask::StoreDigi().

32 { return fPersistency; }
InitStatus PndDskFLGHitProducerIdeal::Init ( )
virtual

Initialization of the task

Definition at line 71 of file PndDskFLGHitProducerIdeal.cxx.

References fDskParticleArray, fHitArray, PndPersistencyTask::GetPersistency(), nevents, and rand.

72 {
73  cout << " ---------- INITIALIZATION ------------" << endl;
74  nevents = 0;
75  // Get RootManager
76  FairRootManager* ioman = FairRootManager::Instance();
77  if ( ! ioman ) {
78  cout << "-E- PndDskFLGHitProducerIdeal::Init: "
79  << "RootManager not instantiated!" << endl;
80  return kFATAL;
81  }
82 
83  // Get input array
84  fDskParticleArray = (TClonesArray*) ioman->GetObject("DskParticle");
85  if ( ! fDskParticleArray ) {
86  cout << "-W- PndDskFLGHitProducerIdeal::Init: "
87  << "No DskBarPoint array!" << endl;
88  return kERROR;
89  }
90 
91  // Create and register output array
92  fHitArray = new TClonesArray("PndDskFLGHit");
93  ioman->Register("PndDskFLGHit","Dsk",fHitArray, GetPersistency());
94 
95  //initialize random for producing cherenkov photons
96  rand = new TRandom();
97 
98  //fVerbose = 2;
99  cout << "-I- PndDskFLGHitProducerIdeal: Intialization successfull" << endl;
100 
101  return kSUCCESS;
102 
103 }
void PndDskFLGHitProducerIdeal::SetDefaultParameters ( )
private

Set the parameters to the default values.

void PndPersistencyTask::SetPersistency ( Bool_t  val = kTRUE)
inlineinherited

Definition at line 31 of file PndPersistencyTask.h.

References PndPersistencyTask::fPersistency, and val.

Referenced by barrelTrackFinder(), digi_complete(), digi_complete_newSTT(), digiOnly_complete(), PndBarrelTrackFinder::PndBarrelTrackFinder(), PndCATracking::PndCATracking(), PndDrcHitFinder::PndDrcHitFinder(), PndEmc2DLocMaxFinder::PndEmc2DLocMaxFinder(), PndEmcExpClusterSplitter::PndEmcExpClusterSplitter(), PndEmcFullDigiTask::PndEmcFullDigiTask(), PndEmcFWEndcapDigi::PndEmcFWEndcapDigi(), PndEmcFWEndcapTimebasedWaveforms::PndEmcFWEndcapTimebasedWaveforms(), PndEmcHitProducer::PndEmcHitProducer(), PndEmcHitsToWaveform::PndEmcHitsToWaveform(), PndEmcMakeBump::PndEmcMakeBump(), PndEmcMakeCluster::PndEmcMakeCluster(), PndEmcMakeClusterOnline::PndEmcMakeClusterOnline(), PndEmcMakeDigi::PndEmcMakeDigi(), PndEmcMakeRecoHit::PndEmcMakeRecoHit(), PndEmcMultiWaveformToCalibratedDigi::PndEmcMultiWaveformToCalibratedDigi(), PndEmcPhiBumpSplitter::PndEmcPhiBumpSplitter(), PndEmcTmpWaveformToDigi::PndEmcTmpWaveformToDigi(), PndEmcWaveformToCalibratedDigi::PndEmcWaveformToCalibratedDigi(), PndEmcWaveformToDigi::PndEmcWaveformToDigi(), PndFtofHitProducerIdeal::PndFtofHitProducerIdeal(), PndFtsCATracking::PndFtsCATracking(), PndFtsHitProducerIdeal::PndFtsHitProducerIdeal(), PndFtsHitProducerRealFast::PndFtsHitProducerRealFast(), PndFtsHitProducerRealFull::PndFtsHitProducerRealFull(), PndFtsHoughTrackerTask::PndFtsHoughTrackerTask(), PndGemDigitize::PndGemDigitize(), PndGemFindHits::PndGemFindHits(), PndIdealTrackFinder::PndIdealTrackFinder(), PndLmdPixelClusterTask::PndLmdPixelClusterTask(), PndLmdPixelHitProducerFast::PndLmdPixelHitProducerFast(), PndMdtClusterTask::PndMdtClusterTask(), PndMdtDigitization::PndMdtDigitization(), PndMdtHitProducerIdeal::PndMdtHitProducerIdeal(), PndMdtPointsToWaveform::PndMdtPointsToWaveform(), PndMdtTrkProducer::PndMdtTrkProducer(), PndMissingPzCleanerTask::PndMissingPzCleanerTask(), PndMvdGemTrackFinderOnHits::PndMvdGemTrackFinderOnHits(), PndMvdHitProducerIdeal::PndMvdHitProducerIdeal(), PndMvdPixelClusterTask::PndMvdPixelClusterTask(), PndMvdTimeWalkCorrTask::PndMvdTimeWalkCorrTask(), PndMvdToPix4ClusterTask::PndMvdToPix4ClusterTask(), PndRecoKalmanTask::PndRecoKalmanTask(), PndRecoKalmanTask2::PndRecoKalmanTask2(), PndRecoMultiKalmanTask::PndRecoMultiKalmanTask(), PndRecoMultiKalmanTask2::PndRecoMultiKalmanTask2(), PndRichHitFinder::PndRichHitFinder(), PndRichHitProducer::PndRichHitProducer(), PndSciTDigiTask::PndSciTDigiTask(), PndSciTHitProducerIdeal::PndSciTHitProducerIdeal(), PndSdsHitProducerIdeal::PndSdsHitProducerIdeal(), PndSdsHybridHitProducer::PndSdsHybridHitProducer(), PndSdsIdealClusterTask::PndSdsIdealClusterTask(), PndSdsIdealRecoTask::PndSdsIdealRecoTask(), PndSdsNoiseProducer::PndSdsNoiseProducer(), PndSdsPixelClusterTask::PndSdsPixelClusterTask(), PndSdsStripClusterTask::PndSdsStripClusterTask(), PndSdsStripHitProducer::PndSdsStripHitProducer(), PndSdsTimeWalkCorrTask::PndSdsTimeWalkCorrTask(), PndSttFindTracks::PndSttFindTracks(), PndSttHelixHitProducer::PndSttHelixHitProducer(), PndSttHitProducerIdeal::PndSttHitProducerIdeal(), PndSttHitProducerRealFast::PndSttHitProducerRealFast(), PndSttHitProducerRealFull::PndSttHitProducerRealFull(), PndSttMatchTracks::PndSttMatchTracks(), PndSttMvdGemTracking::PndSttMvdGemTracking(), PndTrackSmearTask::PndTrackSmearTask(), PndTrkTracking2::PndTrkTracking2(), reco(), reco_complete(), reco_complete_gf2(), reco_complete_newSTT(), reco_complete_sec(), recoideal_complete(), PndMvdClusterTask::SetPersistance(), PndMvdDigiTask::SetPersistance(), PndLmdPixelHitProducerFast::SetPersistance(), PndSdsHitProducerIdeal::SetPersistance(), PndSttMvdGemTracking::SetPersistenc(), PndMdtClusterTask::SetPersistence(), PndSttHelixHitProducer::SetPersistence(), PndMissingPzCleanerTask::SetPersistence(), PndFtsHitProducerRealFast::SetPersistence(), PndFtsHitProducerRealFull::SetPersistence(), PndSttHitProducerRealFull::SetPersistence(), PndSttHitProducerIdeal::SetPersistence(), PndSttHitProducerRealFast::SetPersistence(), PndFtsHitProducerIdeal::SetPersistence(), PndTrackSmearTask::SetPersistence(), PndSciTHitProducerIdeal::SetPersistence(), PndIdealTrackFinder::SetPersistence(), PndSttMatchTracks::SetPersistence(), PndSttFindTracks::SetPersistence(), PndFtsHoughTrackerTask::SetPersistence(), PndTrkTracking2::SetPersistence(), PndEmcMakeRecoHit::SetStorageOfData(), PndEmcFWEndcapDigi::SetStorageOfData(), PndEmcMakeClusterOnline::SetStorageOfData(), PndEmcFWEndcapTimebasedWaveforms::SetStorageOfData(), PndEmcMakeDigi::SetStorageOfData(), PndMdtPointsToWaveform::SetStorageOfData(), PndEmc2DLocMaxFinder::SetStorageOfData(), PndEmcMakeCluster::SetStorageOfData(), PndEmcHitsToWaveform::SetStorageOfData(), PndEmcMakeBump::SetStorageOfData(), PndEmcTmpWaveformToDigi::SetStorageOfData(), PndEmcWaveformToDigi::SetStorageOfData(), PndEmcWaveformToCalibratedDigi::SetStorageOfData(), PndEmcMultiWaveformToCalibratedDigi::SetStorageOfData(), PndEmcExpClusterSplitter::SetStorageOfData(), PndEmcPhiBumpSplitter::SetStorageOfData(), standard_tracking(), and PndEmcFullDigiTask::StoreDigi().

31 { fPersistency = val; }
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11

Member Data Documentation

Int_t PndDskFLGHitProducerIdeal::f_light_guide
private

Definition at line 81 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec().

Int_t PndDskFLGHitProducerIdeal::f_pixel
private

Definition at line 82 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec().

Int_t PndDskFLGHitProducerIdeal::fDetectorID
private

Definition at line 75 of file PndDskFLGHitProducerIdeal.h.

TVector3 PndDskFLGHitProducerIdeal::fDPosHit
private

Definition at line 77 of file PndDskFLGHitProducerIdeal.h.

TClonesArray* PndDskFLGHitProducerIdeal::fDskParticleArray
private

Definition at line 84 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec(), and Init().

Double_t PndDskFLGHitProducerIdeal::fErrThetaC
private

Definition at line 78 of file PndDskFLGHitProducerIdeal.h.

PndGeoDskFLG* PndDskFLGHitProducerIdeal::fGeo
private
TClonesArray* PndDskFLGHitProducerIdeal::fHitArray
private

Definition at line 85 of file PndDskFLGHitProducerIdeal.h.

Referenced by AddHit(), Exec(), and Init().

TVector3 PndDskFLGHitProducerIdeal::fPosHit
private

Definition at line 76 of file PndDskFLGHitProducerIdeal.h.

Int_t PndDskFLGHitProducerIdeal::fRefIndex
private

Definition at line 79 of file PndDskFLGHitProducerIdeal.h.

Double_t PndDskFLGHitProducerIdeal::fThetaC
private

Definition at line 78 of file PndDskFLGHitProducerIdeal.h.

Int_t PndDskFLGHitProducerIdeal::fVerbose
private

Verbosity level

Definition at line 97 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec(), and PndDskFLGHitProducerIdeal().

Int_t PndDskFLGHitProducerIdeal::nevents
private

Definition at line 99 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec(), and Init().

TRandom* PndDskFLGHitProducerIdeal::rand
private

Definition at line 101 of file PndDskFLGHitProducerIdeal.h.

Referenced by Exec(), and Init().


The documentation for this class was generated from the following files: