fkUseOnTheFly ( kFALSE ),
fkTakeAllTracks ( kFALSE ),
fCentralityEstimator("V0M"),
+ fkLightWeight ( kFALSE ),
+ fkFastOnly ( "" ),
//------------------------------------------------
// Initialize
fTreeVariableChi2V0(0),
fTreeVariableLeastNbrCrossedRows(0),
fTreeVariableLeastRatioCrossedRowsOverFindable(0),
fTreeVariableMultiplicity(0),
+ fTreeVariableMultiplicityV0A(0),
+ fTreeVariableMultiplicityZNA(0),
+ fTreeVariableMultiplicityTRK(0),
+ fTreeVariableMultiplicitySPD(0),
fTreeVariableRunNumber(0),
fTreeVariableEventNumber(0),
fHistMultiplicityNoTPCOnly(0),
fHistMultiplicityNoTPCOnlyNoPileup(0),
+//V0A Centrality
+fHistMultiplicityV0ABeforeTrigSel(0),
+fHistMultiplicityV0AForTrigEvt(0),
+fHistMultiplicityV0A(0),
+fHistMultiplicityV0ANoTPCOnly(0),
+fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
+
+//ZNA Centrality
+fHistMultiplicityZNABeforeTrigSel(0),
+fHistMultiplicityZNAForTrigEvt(0),
+fHistMultiplicityZNA(0),
+fHistMultiplicityZNANoTPCOnly(0),
+fHistMultiplicityZNANoTPCOnlyNoPileup(0),
+
+//TRK Centrality
+fHistMultiplicityTRKBeforeTrigSel(0),
+fHistMultiplicityTRKForTrigEvt(0),
+fHistMultiplicityTRK(0),
+fHistMultiplicityTRKNoTPCOnly(0),
+fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
+
+//SPD Centrality
+fHistMultiplicitySPDBeforeTrigSel(0),
+fHistMultiplicitySPDForTrigEvt(0),
+fHistMultiplicitySPD(0),
+fHistMultiplicitySPDNoTPCOnly(0),
+fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
+
//Raw Data for Vertex Z position estimator change
f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
f2dHistMultiplicityVsVertexZForTrigEvt(0),
fkUseOnTheFly ( kFALSE ),
fkTakeAllTracks ( kFALSE ),
fCentralityEstimator("V0M"),
+ fkLightWeight ( kFALSE ),
+ fkFastOnly ( "" ),
//------------------------------------------------
// Initialize
fTreeVariableChi2V0(0),
fTreeVariableLeastNbrCrossedRows(0),
fTreeVariableLeastRatioCrossedRowsOverFindable(0),
fTreeVariableMultiplicity(0),
-
+ fTreeVariableMultiplicityV0A(0),
+ fTreeVariableMultiplicityZNA(0),
+ fTreeVariableMultiplicityTRK(0),
+ fTreeVariableMultiplicitySPD(0),
+
fTreeVariableRunNumber(0),
fTreeVariableEventNumber(0),
fHistMultiplicityNoTPCOnly(0),
fHistMultiplicityNoTPCOnlyNoPileup(0),
+
+//V0A Centrality
+fHistMultiplicityV0ABeforeTrigSel(0),
+fHistMultiplicityV0AForTrigEvt(0),
+fHistMultiplicityV0A(0),
+fHistMultiplicityV0ANoTPCOnly(0),
+fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
+
+//ZNA Centrality
+fHistMultiplicityZNABeforeTrigSel(0),
+fHistMultiplicityZNAForTrigEvt(0),
+fHistMultiplicityZNA(0),
+fHistMultiplicityZNANoTPCOnly(0),
+fHistMultiplicityZNANoTPCOnlyNoPileup(0),
+
+//TRK Centrality
+fHistMultiplicityTRKBeforeTrigSel(0),
+fHistMultiplicityTRKForTrigEvt(0),
+fHistMultiplicityTRK(0),
+fHistMultiplicityTRKNoTPCOnly(0),
+fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
+
+//SPD Centrality
+fHistMultiplicitySPDBeforeTrigSel(0),
+fHistMultiplicitySPDForTrigEvt(0),
+fHistMultiplicitySPD(0),
+fHistMultiplicitySPDNoTPCOnly(0),
+fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
+
//Raw Data for Vertex Z position estimator change
f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
f2dHistMultiplicityVsVertexZForTrigEvt(0),
/*16*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
//-----------MULTIPLICITY-INFO--------------------
/*17*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
+ /*17*/ fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
+ /*17*/ fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
+ /*17*/ fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
+ /*17*/ fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
//------------------------------------------------
/*18*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
/*19*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
/*24*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
/*25*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
/*26*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
+
+ if( fkLightWeight == kFALSE ){
//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
+ }
//------------------------------------------------
// Particle Identification Setup
// Track Multiplicity Histograms
//------------------------------------------------
+ //Default V0M Centrality (if PbPb)
if(! fHistMultiplicityBeforeTrigSel) {
fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
"Tracks per event;Nbr of Tracks;Events",
200, 0, 200);
fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
}
-
-
-
+
+ //V0A Centrality (if PbPb / pPb)
+ if(! fHistMultiplicityV0ABeforeTrigSel) {
+ fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
+ "Centrality Distribution: V0A;V0A Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
+ }
+ if(! fHistMultiplicityV0AForTrigEvt) {
+ fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
+ "Centrality Distribution: V0A;V0A Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
+ }
+ if(! fHistMultiplicityV0A) {
+ fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
+ "Centrality Distribution: V0A;V0A Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityV0A);
+ }
+ if(! fHistMultiplicityV0ANoTPCOnly) {
+ fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
+ "Centrality Distribution: V0A;V0A Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
+ }
+ if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
+ fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
+ "Centrality Distribution: V0A;V0A Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
+ }
+
+ //ZNA Centrality (if PbPb / pPb)
+ if(! fHistMultiplicityZNABeforeTrigSel) {
+ fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
+ "Centrality Distribution: ZNA;ZNA Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
+ }
+ if(! fHistMultiplicityZNAForTrigEvt) {
+ fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
+ "Centrality Distribution: ZNA;ZNA Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
+ }
+ if(! fHistMultiplicityZNA) {
+ fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
+ "Centrality Distribution: ZNA;ZNA Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityZNA);
+ }
+ if(! fHistMultiplicityZNANoTPCOnly) {
+ fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
+ "Centrality Distribution: ZNA;ZNA Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
+ }
+ if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
+ fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
+ "Centrality Distribution: ZNA;ZNA Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
+ }
+
+ //TRK Centrality (if PbPb / pPb)
+ if(! fHistMultiplicityTRKBeforeTrigSel) {
+ fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
+ "Centrality Distribution: TRK;TRK Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
+ }
+ if(! fHistMultiplicityTRKForTrigEvt) {
+ fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
+ "Centrality Distribution: TRK;TRK Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
+ }
+ if(! fHistMultiplicityTRK) {
+ fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
+ "Centrality Distribution: TRK;TRK Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityTRK);
+ }
+ if(! fHistMultiplicityTRKNoTPCOnly) {
+ fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
+ "Centrality Distribution: TRK;TRK Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
+ }
+ if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
+ fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
+ "Centrality Distribution: TRK;TRK Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
+ }
+
+ //SPD Centrality (if PbPb / pPb)
+ if(! fHistMultiplicitySPDBeforeTrigSel) {
+ fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
+ "Centrality Distribution: SPD;SPD Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
+ }
+ if(! fHistMultiplicitySPDForTrigEvt) {
+ fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
+ "Centrality Distribution: SPD;SPD Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
+ }
+ if(! fHistMultiplicitySPD) {
+ fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
+ "Centrality Distribution: SPD;SPD Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicitySPD);
+ }
+ if(! fHistMultiplicitySPDNoTPCOnly) {
+ fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
+ "Centrality Distribution: SPD;SPD Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
+ }
+ if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
+ fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
+ "Centrality Distribution: SPD;SPD Centrality;Events",
+ 200, 0, 200);
+ fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
+ }
+
//Raw Data for Vertex Z position estimator change
//TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
//TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
//REVISED multiplicity estimator after 'multiplicity day' (2011)
- Int_t lMultiplicity = -100;
+ Int_t lMultiplicity = -100;
+ Int_t lMultiplicityV0A = -100;
+ Int_t lMultiplicityZNA = -100;
+ Int_t lMultiplicityTRK = -100;
+ Int_t lMultiplicitySPD = -100;
if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
AliCentrality* centrality;
centrality = lESDevent->GetCentrality();
lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
+ lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
+ lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
+ lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
+ lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "SPD" ) ) );
if (centrality->GetQuality()>1) {
PostData(1, fListHistV0);
PostData(2, fTree);
//Set variable for filling tree afterwards!
//---> pp case......: GetReferenceMultiplicity
//---> Pb-Pb case...: Centrality by V0M
- fTreeVariableMultiplicity = lMultiplicity;
- fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
- fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
+ fTreeVariableMultiplicity = lMultiplicity;
+ fTreeVariableMultiplicityV0A = lMultiplicityV0A;
+ fTreeVariableMultiplicityZNA = lMultiplicityZNA;
+ fTreeVariableMultiplicityTRK = lMultiplicityTRK;
+ fTreeVariableMultiplicitySPD = lMultiplicitySPD;
+
+ fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
+ fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
+ fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
+ fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
+ fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
+
+ fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
//------------------------------------------------
// Physics Selection
//------------------------------------------------
-
-// new method
- UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
- Bool_t isSelected = 0;
- isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
-
- //pA triggering: CINT7
- if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
-
- //Standard Min-Bias Selection
- if ( ! isSelected ) {
- PostData(1, fListHistV0);
- PostData(2, fTree);
- return;
- }
-
+
+ // new method
+ UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+ Bool_t isSelected = 0;
+ Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
+ isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
+
+ //pA triggering: CINT7
+ if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
+
+ //Extra selection applies if with/without SDD is to be dealth with
+ if( fkFastOnly == "kFastOnly"){
+ //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
+ isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
+ }
+ if( fkFastOnly == "NotkFastOnly"){
+ //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
+ isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
+ }
+
+ //Standard Min-Bias Selection
+ if ( !isSelected ) {
+ PostData(1, fListHistV0);
+ PostData(2, fTree);
+ return;
+ }
+ //Check if goes through extra selections
+ //isSelectedExtra will be true in case -> fkFastOnly==""
+ //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly" && bit kFastOnly ON
+ //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
+ if ( !isSelectedExtra ) {
+ PostData(1, fListHistV0);
+ PostData(2, fTree);
+ return;
+ }
+
+
//------------------------------------------------
// After Trigger Selection
//------------------------------------------------
fHistV0MultiplicityForTrigEvt ->Fill( nV0s );
fHistMultiplicityForTrigEvt ->Fill( lMultiplicity );
-
+ fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
+ fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
+ fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
+ fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
+
//------------------------------------------------
// Getting: Primary Vertex + MagField Info
//------------------------------------------------
f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
- lMagneticField = lESDevent->GetMagneticField( );
- fHistV0MultiplicityForSelEvt ->Fill( nV0s );
- fHistMultiplicity->Fill(lMultiplicity);
+ lMagneticField = lESDevent->GetMagneticField( );
+ fHistV0MultiplicityForSelEvt ->Fill( nV0s );
+ fHistMultiplicity->Fill(lMultiplicity);
+ fHistMultiplicityV0A->Fill(lMultiplicityV0A);
+ fHistMultiplicityZNA->Fill(lMultiplicityZNA);
+ fHistMultiplicityTRK->Fill(lMultiplicityTRK);
+ fHistMultiplicitySPD->Fill(lMultiplicitySPD);
//------------------------------------------------
// Only look at events with well-established PV
f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
- fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( nV0s );
- fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
+ fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( nV0s );
+ fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
+ fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
+ fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
+ fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
+ fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
//------------------------------------------------
// Pileup Rejection
return;
}
- f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
- fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s );
- fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
+ f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, tPrimaryVtxPosition[2] );
+ fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( nV0s );
+ fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
+ fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
+ fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
+ fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
+ fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
//------------------------------------------------
// MAIN LAMBDA LOOP STARTS HERE